Name: series-workflow2nplx Phase: Succeeded StartedAt: 2026-08-25 15:39:48 +0000 UTC FinishedAt: 2026-08-25 19:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[0] Phase: Succeeded StartedAt: 2026-08-25 15:39:48 +0000 UTC FinishedAt: 2026-08-25 15:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 15:39:48 +0000 UTC FinishedAt: 2026-08-25 15:42:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY_APPARMOR", "SECURITY", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY_APPARMOR", "SECURITY", "NET" ], "series_id": "ac211454-d8b5-422a-b9e0-5c2f2e796ec4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "aa_alloc_profile" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZX0FQUEFSTU9SJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FhX2FsbG9jX3Byb2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZSgpYCBieSByZXBsYWNpbmcgYSBzaW5nbGUgYGdvdG8gZmFpbDtgICh3aGljaCBjYWxsZWQgYGFhX2ZyZWVfcHJvZmlsZSgpYCkgd2l0aCBncmFudWxhciBlcnJvciBsYWJlbHMgKGBmYWlsX3J1bGVzYCwgYGZhaWxfbGFiZWxgLCBgZmFpbF9wb2xpY3lgLCBgZmFpbF9wcm9maWxlYCkuIGBhYV9mcmVlX3Byb2ZpbGUoKWAgYXNzdW1lcyB0aGF0IHRoZSBgcHJvZmlsZWAgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBDYWxsaW5nIGl0IG9uIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0cnVjdHVyZSBjYW4gbGVhZCB0byBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbnZhbGlkIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZXMuIFxuXG5TaW5jZSB0aGUgYHByb2ZpbGVgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NfZmxleCgpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIGluY29ycmVjdCBlcnJvciBoYW5kbGluZyAobGlrZSBpbnZhbGlkIGZyZWVzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTc1OGYwMTQ5MDgxZjcxNDc2MTU4MjkxNzAzNjMwYzcxNjZlMzI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE1OjQxOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcbmluZGV4IDk0YjRhN2U3MjdjYzEuLjdlYzQzYTQ5MTAzNWEgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcbkBAIC0zODUsMjEgJiM0MzszODUsMjEgQEAgc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqaG5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0aWYgKCFhYV9wb2xpY3lfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UsIE5VTEwsIGhuYW1lLCBnZnApKVxuLVx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRnb3RvIGZhaWxfcHJvZmlsZTtcbiBcdGlmICghYWFfbGFiZWxfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsLCAxLCBnZnApKVxuLVx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRnb3RvIGZhaWxfcG9saWN5O1xuIFxuIFx0LyogYWxsb2NhdGUgdGhlIGZpcnN0IHJ1bGVzZXQsIGJ1dCBsZWF2ZSBpdCBlbXB0eSAqL1xuIFx0cHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSA9IGFhX2FsbG9jX3J1bGVzZXQoZ2ZwKTtcbiBcdGlmICghcHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSlcbi1cdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Z290byBmYWlsX2xhYmVsO1xuIFx0cHJvZmlsZS1cdTAwM2VuX3J1bGVzID0gMTtcbiBcbiBcdC8qIHVwZGF0ZSBiZWluZyBzZXQgbmVlZGVkIGJ5IGZzIGludGVyZmFjZSAqL1xuIFx0aWYgKCFwcm94eSkge1xuIFx0XHRwcm94eSA9IGFhX2FsbG9jX3Byb3h5KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwsIGdmcCk7XG4gXHRcdGlmICghcHJveHkpXG4tXHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0XHRnb3RvIGZhaWxfcnVsZXM7XG4gXHR9IGVsc2VcbiBcdFx0YWFfZ2V0X3Byb3h5KHByb3h5KTtcbiBcdHByb2ZpbGUtXHUwMDNlbGFiZWwucHJveHkgPSBwcm94eTtcbkBAIC00MTIsOCAmIzQzOzQxMiwxNCBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcbiBcdC8qIHJlZmNvdW50IHJlbGVhc2VkIGJ5IGNhbGxlciAqL1xuIFx0cmV0dXJuIHByb2ZpbGU7XG4gXG4tZmFpbDpcbi1cdGFhX2ZyZWVfcHJvZmlsZShwcm9maWxlKTtcbiYjNDM7ZmFpbF9ydWxlczpcbiYjNDM7XHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSk7XG4mIzQzO2ZhaWxfbGFiZWw6XG4mIzQzO1x0YWFfbGFiZWxfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsKTtcbiYjNDM7ZmFpbF9wb2xpY3k6XG4mIzQzO1x0YWFfcG9saWN5X2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2ViYXNlKTtcbiYjNDM7ZmFpbF9wcm9maWxlOlxuJiM0MztcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlKTtcbiBcbiBcdHJldHVybiBOVUxMO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFlfQVBQQVJNT1ImIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFfYWxsb2NfcHJvZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTc1OGYwMTQ5MDgxZjcxNDc2MTU4MjkxNzAzNjMwYzcxNjZlMzI4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE1OjQxOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYwppbmRleCA5NGI0YTdlNzI3Y2MxLi43ZWM0M2E0OTEwMzVhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYwpAQCAtMzg1LDIxICYjNDM7Mzg1LDIxIEBAIHN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKmhuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LAogCQlyZXR1cm4gTlVMTDsKIAogCWlmICghYWFfcG9saWN5X2luaXQoJmFtcDtwcm9maWxlLSZndDtiYXNlLCBOVUxMLCBobmFtZSwgZ2ZwKSkKLQkJZ290byBmYWlsOwomIzQzOwkJZ290byBmYWlsX3Byb2ZpbGU7CiAJaWYgKCFhYV9sYWJlbF9pbml0KCZhbXA7cHJvZmlsZS0mZ3Q7bGFiZWwsIDEsIGdmcCkpCi0JCWdvdG8gZmFpbDsKJiM0MzsJCWdvdG8gZmFpbF9wb2xpY3k7CiAKIAkvKiBhbGxvY2F0ZSB0aGUgZmlyc3QgcnVsZXNldCwgYnV0IGxlYXZlIGl0IGVtcHR5ICovCiAJcHJvZmlsZS0mZ3Q7bGFiZWwucnVsZXNbMF0gPSBhYV9hbGxvY19ydWxlc2V0KGdmcCk7CiAJaWYgKCFwcm9maWxlLSZndDtsYWJlbC5ydWxlc1swXSkKLQkJZ290byBmYWlsOwomIzQzOwkJZ290byBmYWlsX2xhYmVsOwogCXByb2ZpbGUtJmd0O25fcnVsZXMgPSAxOwogCiAJLyogdXBkYXRlIGJlaW5nIHNldCBuZWVkZWQgYnkgZnMgaW50ZXJmYWNlICovCiAJaWYgKCFwcm94eSkgewogCQlwcm94eSA9IGFhX2FsbG9jX3Byb3h5KCZhbXA7cHJvZmlsZS0mZ3Q7bGFiZWwsIGdmcCk7CiAJCWlmICghcHJveHkpCi0JCQlnb3RvIGZhaWw7CiYjNDM7CQkJZ290byBmYWlsX3J1bGVzOwogCX0gZWxzZQogCQlhYV9nZXRfcHJveHkocHJveHkpOwogCXByb2ZpbGUtJmd0O2xhYmVsLnByb3h5ID0gcHJveHk7CkBAIC00MTIsOCAmIzQzOzQxMiwxNCBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSwKIAkvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi8KIAlyZXR1cm4gcHJvZmlsZTsKIAotZmFpbDoKLQlhYV9mcmVlX3Byb2ZpbGUocHJvZmlsZSk7CiYjNDM7ZmFpbF9ydWxlczoKJiM0MzsJZnJlZV9ydWxlc2V0KHByb2ZpbGUtJmd0O2xhYmVsLnJ1bGVzWzBdKTsKJiM0MztmYWlsX2xhYmVsOgomIzQzOwlhYV9sYWJlbF9kZXN0cm95KCZhbXA7cHJvZmlsZS0mZ3Q7bGFiZWwpOwomIzQzO2ZhaWxfcG9saWN5OgomIzQzOwlhYV9wb2xpY3lfZGVzdHJveSgmYW1wO3Byb2ZpbGUtJmd0O2Jhc2UpOwomIzQzO2ZhaWxfcHJvZmlsZToKJiM0MzsJa2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUpOwogCiAJcmV0dXJuIE5VTEw7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcHBBcm1vciBQb2xpY3kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY2AgYW5kIGl0JiMzOTtzIG1ha2luZyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYWFfYWxsb2NfcHJvZmlsZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhbHdheXMsICYjMzQ7SXMgdGhpcyBmdXp6YWJsZT8mIzM0OyBTaW5jZSBgYWFfYWxsb2NfcHJvZmlsZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGludm9sdmVkIGluIHRoZSBBcHBBcm1vciBwb2xpY3kgbG9hZGluZyBwcm9jZXNzLCB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suCgpUaGUgcGF0Y2ggZXNzZW50aWFsbHkgbW9kaWZpZXMgdGhlIGVycm9yIHBhdGguIEluc3RlYWQgb2YgcmVseWluZyBvbiBhIHNpbmdsZSBgYWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpYCBjYWxsLCB0aGUgY29kZSBpcyBub3cgbWFudWFsbHkgY2xlYW5pbmcgdXAgYWxsb2NhdGVkIHJlc291cmNlcyB3aXRoaW4gdGhlIHByb2ZpbGUgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGhpdHRpbmcgdGhlc2UgY2xlYW51cCBmdW5jdGlvbnMgb24gYW4gZXJyb3I6IGBmcmVlX3J1bGVzZXQocHJvZmlsZS0mZ3Q7bGFiZWwucnVsZXNbMF0pO2AsIGBhYV9sYWJlbF9kZXN0cm95KCZhbXA7cHJvZmlsZS0mZ3Q7bGFiZWwpO2AsIGBhYV9wb2xpY3lfZGVzdHJveSgmYW1wO3Byb2ZpbGUtJmd0O2Jhc2UpO2AsIGFuZCBmaW5hbGx5IGBrZnJlZV9zZW5zaXRpdmUocHJvZmlsZSk7YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGRpZmZlcmVudCBhcHByb2FjaCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmluZyBwb2xpY3kgbG9hZGluZyBlcnJvcnMuCgpUaGVyZWZvcmUsIHRoZSByZXZpc2VkIGVycm9yIGhhbmRsaW5nIGNvZGUgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgY2VydGFpbmx5IHByZXNlbnRzIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBMZXQmIzM5O3MgZGlnIGludG8gYHNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBtb2RpZmllZCBgYWFfYWxsb2NfcHJvZmlsZWAgZnVuY3Rpb24gaXRzZWxmIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBuZXcgZXJyb3IgaGFuZGxpbmcgd29ya3MgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWFfYWxsb2NfcHJvZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTMyND12b2lkIGFhX2ZyZWVfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy0zNjYtLyoqXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzozNjc6ICogYWFfYWxsb2NfcHJvZmlsZSAtIGFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCByZXR1cm4gYSBuZXcgcHJvZmlsZVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY4LSAqIEBobmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSAgKE5PVCBOVUxMKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTM3My0gKi9cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM3NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTM3NS1cdFx0XHRcdCAgICBnZnBfdCBnZnApXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9Njk3PXN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19udWxsKHN0cnVjdCBhYV9wcm9maWxlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtNzAyLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NzAzOlx0cHJvZmlsZSA9IGFhX2FsbG9jX3Byb2ZpbGUobmFtZSwgTlVMTCwgZ2ZwKTtcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTcwNC1cdGlmICghcHJvZmlsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyBBcHBBcm1vciBjb25maWd1cmF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIEFwcEFybW9yIEFjdGl2YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGVuYWJsZXMgQXBwQXJtb3IuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggc2VjdXJpdHkgaGFyZGVuaW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgYWN0aXZhdGVkIHRvIHByb3Blcmx5IG1hbmFnZSBwcm9maWxlcyBhbmQgZW5zdXJlIHRoZXkmIzM5O3JlIGJlaW5nIGVuZm9yY2VkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzeXN0ZW0mIzM5O3MgY29uZmlnIGZpbGVzIGFuZCBwb3RlbnRpYWxseSBhbnkgcmVsZXZhbnQga2VybmVsIHBhcmFtZXRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiwgR1JVQiBvciBzeXN0ZW1kLWJvb3QsIGFsb25nIHdpdGggYW55IG90aGVyIG9idmlvdXMgcGxhY2VzIGxpa2UgYC9ldGMvYXBwYXJtb3IuZC9gIGFuZCByZWxhdGVkIHN5c3RlbWQgc2VydmljZSBmaWxlcy4gUHJvYmFibHkgYSBnb29kIGlkZWEgdG8gY29uc3VsdCB0aGUgZGlzdHJpYnV0aW9uJiMzOTtzIGRvY3VtZW50YXRpb24gdG9vLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBkaXN0cm8tc3BlY2lmaWMgdHdlYWtzLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGF0IGNydWNpYWwgc2V0dGluZyB0aGF0IGZsaXBzIHRoZSBzd2l0Y2gsIHNvIEkgY2FuIGVuc3VyZSBBcHBBcm1vciBpcyBiZWhhdmluZyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VDVVJJVFlfQVBQQVJNT1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7QXBwQXJtb3Igc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjE4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cdGJvb2wgXCYjMzQ7QnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1ZyBjb2RlXCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXHRib29sIFwmIzM0O0J1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM3LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzozODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfTUVTU0FHRVNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzktXHRib29sIFwmIzM0O0RlYnVnIG1lc3NhZ2VzIGVuYWJsZWQgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDYtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9JTlRST1NQRUNUX1BPTElDWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7QWxsb3cgbG9hZGVkIHBvbGljeSB0byBiZSBpbnRyb3NwZWN0ZWRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTU4LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03MC1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NzE6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hfREVGQVVMVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03Mi0gICAgICAgYm9vbCBcJiMzNDtFbmFibGUgcG9saWN5IGhhc2ggaW50cm9zcGVjdGlvbiBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04My1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6ODQ6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODUtXHRib29sIFwmIzM0O0FsbG93IGV4cG9ydGluZyB0aGUgcmF3IGJpbmFyeSBwb2xpY3lcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk1LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo5Njpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfUEFSQU5PSURfTE9BRFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cdGJvb2wgXCYjMzQ7UGVyZm9ybSBmdWxsIHZlcmlmaWNhdGlvbiBvZiBsb2FkZWQgcG9saWN5XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDYtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEwNzpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDgtXHR0cmlzdGF0ZSBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIHRoZSBBcHBBcm1vciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB0aGUgYFNFQ1VSSVRZX0FQUEFSTU9SYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGUga2V5IGhlcmUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQXBwQXJtb3IuIEFuZCBsb29raW5nIGF0IHRoaXMsIHRoZSBmdW5jdGlvbiB0byByZWFsbHkgZGlzc2VjdCBpcyBgYWFfYWxsb2NfcHJvZmlsZWAuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGlzIGFsbG9jYXRpb24gaXMgaGFwcGVuaW5nLgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb2RlIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgYWFfYWxsb2NfcHJvZmlsZWAuIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBnaXZlIG1lIG1vcmUgY29udGV4dCBmb3Igd2hhdOKAmXMgZ29pbmcgb24gYW5kIHdoZXJlIHRoZSBhbGxvY2F0aW9uIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93IHRvIGZpZ3VyZSBvdXQgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FhX2FsbG9jX3Byb2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9hcHBhcm1vci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaD0yOTM9c3RydWN0IGFhX3J1bGVzZXQgKmFhX2FsbG9jX3J1bGVzZXQoZ2ZwX3QgZ2ZwKTtcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5Lmg6Mjk0OnN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oLTI5NS1cdFx0XHRcdCAgICBnZnBfdCBnZnApO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTMyND12b2lkIGFhX2ZyZWVfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy0zNjYtLyoqXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzozNjc6ICogYWFfYWxsb2NfcHJvZmlsZSAtIGFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCByZXR1cm4gYSBuZXcgcHJvZmlsZVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY4LSAqIEBobmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSAgKE5PVCBOVUxMKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTM3My0gKi9cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM3NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTM3NS1cdFx0XHRcdCAgICBnZnBfdCBnZnApXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9Njk3PXN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19udWxsKHN0cnVjdCBhYV9wcm9maWxlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtNzAyLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NzAzOlx0cHJvZmlsZSA9IGFhX2FsbG9jX3Byb2ZpbGUobmFtZSwgTlVMTCwgZ2ZwKTtcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTcwNC1cdGlmICghcHJvZmlsZSlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmM9MTExND1zdGF0aWMgc3RydWN0IGFhX3Byb2ZpbGUgKnVucGFja19wcm9maWxlKHN0cnVjdCBhYV9leHQgKmUsIGNoYXIgKipuc19uYW1lKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYy0xMTUyLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jOjExNTM6XHRwcm9maWxlID0gYWFfYWxsb2NfcHJvZmlsZShuYW1lLCBOVUxMLCBHRlBfS0VSTkVMKTtcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYy0xMTU0LVx0aWYgKCFwcm9maWxlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFwcEFybW9yIFBvbGljeSBMb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcgdGhlIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgYHVucGFja19wcm9maWxlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCB3aGVuIHBvbGljaWVzIGFyZSBsb2FkZWQgYW5kLCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IGNhbGxzIGBhYV9hbGxvY19wcm9maWxlYC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBnb29kIHRhcmdldCB0byBzdGFydCB3aXRoLiBHaXZlbiB0aGUgY29udGV4dCwgYGFhX2FsbG9jX3Byb2ZpbGVgIGlzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24uCgpIYW5nIG9uIGEgc2Vjb25k4oCmSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHNjb3BpbmcgaGVyZS4gSXMgYGFhX2FsbG9jX3Byb2ZpbGVgIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIG9yIGlzIGl0IGludGVybmFsIHRvIEFwcEFybW9yPyBBaCwgeWVzLCBpdCYjMzk7cyBpbnRlcm5hbC4gTm93LCBgdW5wYWNrX3Byb2ZpbGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIG5vdCBoZWxwaW5nIG1lLiBIb3dldmVyLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGBhYV9hbGxvY19udWxsYCBpcyBleHBvcnRlZC4gTGV0IG1lIGNvbmZpcm0gdGhhdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthYV9hbGxvY19udWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvYXBwYXJtb3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5Lmg9Mjk0PXN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oLTI5NS1cdFx0XHRcdCAgICBnZnBfdCBnZnApO1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaDoyOTY6c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX251bGwoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5LmgtMjk3LVx0XHRcdFx0IGdmcF90IGdmcCk7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9NTYyPXN0YXRpYyBzdHJ1Y3QgYWFfcG9saWN5ICpfX2NyZWF0ZV9taXNzaW5nX2FuY2VzdG9ycyhzdHJ1Y3QgYWFfbnMgKm5zLFxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTU4My1cdFx0XHRcdHJldHVybiBOVUxMO1xuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NTg0Olx0XHRcdHByb2ZpbGUgPSBhYV9hbGxvY19udWxsKHBhcmVudCwgbmFtZSwgZ2ZwKTtcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTU4NS1cdFx0XHRrZnJlZShuYW1lKTtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYz02Njg9c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2ZxbG9va3Vwbl9wcm9maWxlKHN0cnVjdCBhYV9sYWJlbCAqYmFzZSxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy02OTYtXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzo2OTc6c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX251bGwoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTY5OC1cdFx0XHRcdCBnZnBfdCBnZnApXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9NzQ1PXN0cnVjdCBhYV9wcm9maWxlICphYV9uZXdfbGVhcm5pbmdfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcGFyZW50LCBib29sIGhhdCxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy03NzktXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzo3ODA6XHRwcm9maWxlID0gYWFfYWxsb2NfbnVsbChwYXJlbnQsIG5hbWUsIGdmcCk7XG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy03ODEtXHRpZiAoIXByb2ZpbGUpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X25zLmM9ODM9c3RhdGljIHN0cnVjdCBhYV9wcm9maWxlICphbGxvY191bmNvbmZpbmVkKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X25zLmMtODYtXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfbnMuYzo4NzpcdHByb2ZpbGUgPSBhYV9hbGxvY19udWxsKE5VTEwsIG5hbWUsIEdGUF9LRVJORUwpO1xuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X25zLmMtODgtXHRpZiAoIXByb2ZpbGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGFhX2FsbG9jX3Byb2ZpbGVgKioKClJpZ2h0LCBgYWFfYWxsb2NfcHJvZmlsZWAuLi4gdGhhdCYjMzk7cyBhIHNvbGlkIHN5bWJvbCB0byBzdGFydCB3aXRoLiBJdCYjMzk7cyBub3Qgc29tZXRoaW5nIGJha2VkIGludG8gdGhlIGNvcmUsIEkgcmVtZW1iZXIgdGhhdCBtdWNoLiBMZXQmIzM5O3Mgc2VlLi4uIGl0JiMzOTtzIGRlZmluZWQgaW4gYHNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jYC4gR29vZCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSwgcmVsYXRlZCB0byB0aGUgcG9saWN5IGhhbmRsaW5nLiBOb3csIGJlZm9yZSBJIGRpZyBhbnkgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbiBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBTRUNVUklUWV9BUFBBUk1PUmAuIE1ha2Ugc3VyZSBub3RoaW5nIGVsc2Ugd2lsbCBibG9jayB0aGUgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNVUklUWV9BUFBBUk1PUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBcHBBcm1vciBzdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI3LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7QnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1Z2dpbmcgYXNzZXJ0c1wmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjM4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19NRVNTQUdFU1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGVidWcgbWVzc2FnZXMgZW5hYmxlZCBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00Ni1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTgtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjU5OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTYwLVx0Ym9vbCBcJiMzNDtFbmFibGUgaW50cm9zcGVjdGlvbiBvZiBzaGEyNTYgaGFzaGVzIGZvciBsb2FkZWQgcHJvZmlsZXNcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcwLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcyLSAgICAgICBib29sIFwmIzM0O0VuYWJsZSBwb2xpY3kgaGFzaCBpbnRyb3NwZWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTgzLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7QWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTUtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk3LVx0Ym9vbCBcJiMzNDtQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNi1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTA3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9LVU5JVF9URVNUXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOC1cdHRyaXN0YXRlIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBwb2xpY3lfdW5wYWNrLmNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIFNFQ1VSSVRZX0FQUEFSTU9SKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFNFQ1VSSVRZX0FQUEFSTU9SYC4gSXQmIzM5O3MgYSBrZXkgc2VjdXJpdHkgY29tcG9uZW50LCBhbmQgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGRlY2lzaW9ucyByZWdhcmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb3IgaW5jbHVzaW9uLCBJIG5lZWQgdG8gc2VlIHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlLCBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCB0aGlzIHBsYWNlcyB0aGUgc2VjdXJpdHkgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6CgoqICAgKipUaGUgU3BlY2lmaWMgS2VybmVsIE1vZHVsZXM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGRvZXMgYFNFQ1VSSVRZX0FQUEFSTU9SYCByZWx5IG9uPyBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyBmaWxlIHN5c3RlbSBzdXBwb3J0LCBwYXJ0aWN1bGFyIGtlcm5lbCBmZWF0dXJlcywgb3IgY2VydGFpbiBjYXBhYmlsaXRpZXM/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4KKiAgICoqVGhlIEJyb2FkZXIgU2VjdXJpdHkgTGFuZHNjYXBlOioqIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhpZ2hsaWdodCBob3cgYFNFQ1VSSVRZX0FQUEFSTU9SYCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMuIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggU0VMaW51eCwgTFNNIGhvb2tzLCBvciBvdGhlciBzZWN1cml0eSBtb2R1bGVzPyBXaGF0IGlzIHRoZSBpbnRlbmRlZCBvdmVybGFwIGFuZCBkZXNpZ24gcGhpbG9zb3BoeT8KKiAgICoqUGVyZm9ybWFuY2UgSW1wbGljYXRpb25zOioqIEFyZSB0aGVyZSBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW50cm9kdWNlZCBieSB0aGVzZSBkZXBlbmRlbmNpZXM/IEtub3dpbmcgdGhpcyB1cCBmcm9udCBoZWxwcyBpbiBtYWtpbmcgZGVjaXNpb25zLgoqICAgKipVcGdyYWRlIFBhdGg6KiogSWYgdGhlIGRlcGVuZGVuY3kgbGlzdCBpbmNsdWRlcyB0aGluZ3MgSSYjMzk7bSBsb29raW5nIHRvIGRlcHJlY2F0ZSBvciBjaGFuZ2UsIHRoaXMgbGlzdCBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2hhbmdlcy4KKiAgICoqS2VybmVsIFZlcnNpb246KiogSSYjMzk7bGwgYWxzbyBiZSBtaW5kZnVsIG9mIHRoZSBtaW5pbXVtIGtlcm5lbCB2ZXJzaW9uIHJlcXVpcmVkLiBUaGlzIGFmZmVjdHMgY29tcGF0aWJpbGl0eSBhbmQsIHBvdGVudGlhbGx5LCB0aGUgZmVhdHVyZSBzZXQgYXZhaWxhYmxlLgoqICAgKipDb25maWd1cmF0aW9uIENvbmZsaWN0czoqKiBBcmUgdGhlcmUgYW55IGtub3duIGNvbmZsaWN0cyB3aXRoIG90aGVyIHNlY3VyaXR5IG9wdGlvbnMgb3Iga2VybmVsIGZlYXR1cmVzPwoKSW4gc2hvcnQsIGtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgU0VDVVJJVFlfQVBQQVJNT1JgIGlzIHRoZSBpbml0aWFsIHByZXJlcXVpc2l0ZSB0byBlbnN1cmUgdGhlIGRlc2lyZWQgc2VjdXJpdHkgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SXG4gICAzOlx0XHRib29sIFwmIzM0O0FwcEFybW9yIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFkgXHUwMDI2XHUwMDI2IE5FVFxuICAgNTpcdFx0c2VsZWN0IEFVRElUXG4gICA2Olx0XHRzZWxlY3QgU0VDVVJJVFlfUEFUSFxuICAgNzpcdFx0c2VsZWN0IFNFQ1VSSVRZRlNcbiAgIDg6XHRcdHNlbGVjdCBTRUNVUklUWV9ORVRXT1JLXG4gICA5Olx0XHRkZWZhdWx0IG5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUuXG4gIDEyOlx0XHQgIFJlcXVpcmVkIHVzZXJzcGFjZSB0b29scyAoaWYgdGhleSBhcmUgbm90IGluY2x1ZGVkIGluIHlvdXJcbiAgMTM6XHRcdCAgZGlzdHJpYnV0aW9uKSBhbmQgZnVydGhlciBpbmZvcm1hdGlvbiBtYXkgYmUgZm91bmQgYXRcbiAgMTQ6XHRcdCAgaHR0cDovL2FwcGFybW9yLndpa2kua2VybmVsLm9yZ1xuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xuICAxOTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyNAoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEFwcEFybW9yIFNlY3VyaXR5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEFwcEFybW9yIHBhdGNoLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYFNFQ1VSSVRZX0FQUEFSTU9SYCByZWxpZXMgb24gYm90aCBgU0VDVVJJVFlgIGFuZCBgTkVUYCwgc28gdGhvc2UgdGhyZWUgY29uZmlncyBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSByZWxldmFudC4gVGhlIGNlbnRyYWwgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBvbiBgYWFfYWxsb2NfcHJvZmlsZWAuIE15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGFhX2FsbG9jX3Byb2ZpbGVgIGR1cmluZyB0aGUgQXBwQXJtb3IgcG9saWN5IGxvYWRpbmcgcHJvY2Vzcy4gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhvc2UgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgZnV6emluZyBpdCBpcyBhIHNvbGlkIHN0cmF0ZWd5IHRvIGNvbmZpcm0gdGhhdCB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGh3YXlzIGFyZSB3b3JraW5nIGFzIGV4cGVjdGVkLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhpbmdzIGNvdWxkIGJyZWFrIG9yIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgYWFfYWxsb2NfcHJvZmlsZWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGZvY2FsIHBvaW50LiAqWWVwKiwgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLiBFeGNlbGxlbnQuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCBub3RoaW5nIGVsc2Ugd2FzIHRvdWNoZWQgaW4gdGhlIHByb2Nlc3MuIE9rYXksIGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBgYWFfYWxsb2NfcHJvZmlsZWAgaW4gYHNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jYC4gR29vZCwgdGhhdCBtYWtlcyB0aGluZ3MgY2xlYW5lci4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZX0FQUEFSTU9SJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FhX2FsbG9jX3Byb2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGFhX2FsbG9jX3Byb2ZpbGVgIGR1cmluZyBBcHBBcm1vciBwb2xpY3kgbG9hZGluZy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHBvbGljeSBsb2FkaW5nIGludGVyZmFjZXMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nIHRvIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFlfQVBQQVJNT1ImIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFfYWxsb2NfcHJvZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXG5cblNpbmNlIHRoZSBgcHJvZmlsZWAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19mbGV4KClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgaW5jb3JyZWN0IGVycm9yIGhhbmRsaW5nIChsaWtlIGludmFsaWQgZnJlZXMgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3NThmMDE0OTA4MWY3MTQ3NjE1ODI5MTcwMzYzMGM3MTY2ZTMyODUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxNTo0MTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMKaW5kZXggOTRiNGE3ZTcyN2NjMS4uN2VjNDNhNDkxMDM1YSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMKQEAgLTM4NSwyMSAmIzQzOzM4NSwyMSBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSwKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoIWFhX3BvbGljeV9pbml0KCZhbXA7cHJvZmlsZS0mZ3Q7YmFzZSwgTlVMTCwgaG5hbWUsIGdmcCkpCi0JCWdvdG8gZmFpbDsKJiM0MzsJCWdvdG8gZmFpbF9wcm9maWxlOwogCWlmICghYWFfbGFiZWxfaW5pdCgmYW1wO3Byb2ZpbGUtJmd0O2xhYmVsLCAxLCBnZnApKQotCQlnb3RvIGZhaWw7CiYjNDM7CQlnb3RvIGZhaWxfcG9saWN5OwogCiAJLyogYWxsb2NhdGUgdGhlIGZpcnN0IHJ1bGVzZXQsIGJ1dCBsZWF2ZSBpdCBlbXB0eSAqLwogCXByb2ZpbGUtJmd0O2xhYmVsLnJ1bGVzWzBdID0gYWFfYWxsb2NfcnVsZXNldChnZnApOwogCWlmICghcHJvZmlsZS0mZ3Q7bGFiZWwucnVsZXNbMF0pCi0JCWdvdG8gZmFpbDsKJiM0MzsJCWdvdG8gZmFpbF9sYWJlbDsKIAlwcm9maWxlLSZndDtuX3J1bGVzID0gMTsKIAogCS8qIHVwZGF0ZSBiZWluZyBzZXQgbmVlZGVkIGJ5IGZzIGludGVyZmFjZSAqLwogCWlmICghcHJveHkpIHsKIAkJcHJveHkgPSBhYV9hbGxvY19wcm94eSgmYW1wO3Byb2ZpbGUtJmd0O2xhYmVsLCBnZnApOwogCQlpZiAoIXByb3h5KQotCQkJZ290byBmYWlsOwomIzQzOwkJCWdvdG8gZmFpbF9ydWxlczsKIAl9IGVsc2UKIAkJYWFfZ2V0X3Byb3h5KHByb3h5KTsKIAlwcm9maWxlLSZndDtsYWJlbC5wcm94eSA9IHByb3h5OwpAQCAtNDEyLDggJiM0Mzs0MTIsMTQgQEAgc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqaG5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksCiAJLyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovCiAJcmV0dXJuIHByb2ZpbGU7CiAKLWZhaWw6Ci0JYWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpOwomIzQzO2ZhaWxfcnVsZXM6CiYjNDM7CWZyZWVfcnVsZXNldChwcm9maWxlLSZndDtsYWJlbC5ydWxlc1swXSk7CiYjNDM7ZmFpbF9sYWJlbDoKJiM0MzsJYWFfbGFiZWxfZGVzdHJveSgmYW1wO3Byb2ZpbGUtJmd0O2xhYmVsKTsKJiM0MztmYWlsX3BvbGljeToKJiM0MzsJYWFfcG9saWN5X2Rlc3Ryb3koJmFtcDtwcm9maWxlLSZndDtiYXNlKTsKJiM0MztmYWlsX3Byb2ZpbGU6CiYjNDM7CWtmcmVlX3NlbnNpdGl2ZShwcm9maWxlKTsKIAogCXJldHVybiBOVUxMOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgQXBwQXJtb3IgU2VjdXJpdHkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGFhX2FsbG9jX3Byb2ZpbGVgIGluIHRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUuIFRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGEgc2ltcGxlIGBnb3RvIGZhaWw7YCB3aXRoIGEgbW9yZSBkZXRhaWxlZCBlcnJvciBoYW5kbGluZyBzZXF1ZW5jZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYnJlYWtpbmcgZG93biB0aGUgY2xlYW51cCBwcm9jZXNzIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIHByb2ZpbGUgYWxsb2NhdGlvbi4KCkluaXRpYWxseSwgSSYjMzk7bSB0aGlua2luZywgdGhpcyBgZ290byBmYWlsO2Agd2FzIHByZXZpb3VzbHkgY2FsbGluZyBgYWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpO2AuIE15IGV4cGVydCBpbnR1aXRpb24gaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcy4gV2h5IHRoZSBjaGFuZ2U/IEl0IHNjcmVhbXMgbWVtb3J5IGxlYWsgb3IgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUvdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gaW4gdGhlIHByZXZpb3VzIGVycm9yIHBhdGguCgpOb3cgSSYjMzk7bSBkaWdnaW5nIGRlZXBlciwgTGV0JiMzOTtzIGNoZWNrIHdoYXQgYGFhX2ZyZWVfcHJvZmlsZWAgYWN0dWFsbHkgKmRvZXMqLiBJZiBpdCBleHBlY3RzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHByb2ZpbGVgIHN0cnVjdCwgdGhlbiBjYWxsaW5nIGl0IG9uIGEgcGFydGlhbGx5IGJ1aWx0IG9iamVjdCBjb3VsZCBiZSBhIGRpc2FzdGVyLiBJdCBjb3VsZCB0cnkgdG8gZnJlZSBpbnZhbGlkIG9yIHVuaW5pdGlhbGl6ZWQgcG9pbnRlcnMuCgpXYWl0IGEgbW9tZW50LCBJIHRoaW5rIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBMb29raW5nIGJhY2sgYXQgYGFhX2FsbG9jX3Byb2ZpbGVgLi4uIEFoLCB5ZXMhIGBwcm9maWxlYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBga3phbGxvY2AgemVyb2VzIHRoZSBtZW1vcnkuIFNvLCBpZiBgYWFfZnJlZV9wcm9maWxlYCBhc3N1bWVzIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQsIHRoZW4gb24gZmFpbHVyZSBpdCBtaWdodCB0cnkgdG8gYGtmcmVlKClgIHBvaW50ZXJzIHRoYXQgd2VyZSBuZXZlciBhY3R1YWxseSBhbGxvY2F0ZWQsIG9yIHBvaW50IHRvIGdhcmJhZ2UuIFRoZSBuZXcgY29kZSBzZWVtcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBzZWxlY3RpdmVseSBmcmVlIHRoZSBhbGxvY2F0ZWQgcGllY2VzIHdoaWNoIGlzIGEgbXVjaCBzYWZlciBhcHByb2FjaC4gVGltZSB0byBjb25maXJtIG15IHN1c3BpY2lvbiBieSB0aG9yb3VnaGx5IGNoZWNraW5nIGBhYV9hbGxvY19wcm9maWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0ICogQGdmcDogYWxsb2NhdGlvbiB0eXBlXG4gMzcxOlx0ICpcbiAzNzI6XHQgKiBSZXR1cm5zOiByZWZjb3VudCBwcm9maWxlIG9yIE5VTEwgb24gZmFpbHVyZVxuIDM3MzpcdCAqL1xuIDM3NDpcdHN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKmhuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxuIDM3NTpcdFx0XHRcdFx0ICAgIGdmcF90IGdmcClcbiAzNzY6XHR7XG4gMzc3Olx0XHRzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTtcbiAzNzg6XHRcbiAzNzk6XHRcdC8qIGZyZWVkIGJ5IGZyZWVfcHJvZmlsZSAtIHVzdWFsbHkgdGhyb3VnaCBhYV9wdXRfcHJvZmlsZVxuIDM4MDpcdFx0ICogdGhpcyBhZGRzIHNwYWNlIGZvciBhIHNpbmdsZSBydWxlc2V0IGluIHRoZSBydWxlcyBzZWN0aW9uIG9mIHRoZVxuIDM4MTpcdFx0ICogbGFiZWxcbiAzODI6XHRcdCAqL1xuIDM4MzpcdFx0cHJvZmlsZSA9IGt6YWxsb2NfZmxleCgqcHJvZmlsZSwgbGFiZWwucnVsZXMsIDEsIGdmcCk7XG4gMzg0Olx0XHRpZiAoIXByb2ZpbGUpXG4gMzg1Olx0XHRcdHJldHVybiBOVUxMO1xuIDM4NjpcdFxuIDM4NzpcdFx0aWYgKCFhYV9wb2xpY3lfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UsIE5VTEwsIGhuYW1lLCBnZnApKVxuIDM4ODpcdFx0XHRnb3RvIGZhaWxfcHJvZmlsZTtcbiAzODk6XHRcdGlmICghYWFfbGFiZWxfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsLCAxLCBnZnApKVxuIDM5MDpcdFx0XHRnb3RvIGZhaWxfcG9saWN5O1xuIDM5MTpcdFxuIDM5MjpcdFx0LyogYWxsb2NhdGUgdGhlIGZpcnN0IHJ1bGVzZXQsIGJ1dCBsZWF2ZSBpdCBlbXB0eSAqL1xuIDM5MzpcdFx0cHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSA9IGFhX2FsbG9jX3J1bGVzZXQoZ2ZwKTtcbiAzOTQ6XHRcdGlmICghcHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSlcbiAzOTU6XHRcdFx0Z290byBmYWlsX2xhYmVsO1xuIDM5NjpcdFx0cHJvZmlsZS1cdTAwM2VuX3J1bGVzID0gMTtcbiAzOTc6XHRcbiAzOTg6XHRcdC8qIHVwZGF0ZSBiZWluZyBzZXQgbmVlZGVkIGJ5IGZzIGludGVyZmFjZSAqL1xuIDM5OTpcdFx0aWYgKCFwcm94eSkge1xuIDQwMDpcdFx0XHRwcm94eSA9IGFhX2FsbG9jX3Byb3h5KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwsIGdmcCk7XG4gNDAxOlx0XHRcdGlmICghcHJveHkpXG4gNDAyOlx0XHRcdFx0Z290byBmYWlsX3J1bGVzO1xuIDQwMzpcdFx0fSBlbHNlXG4gNDA0Olx0XHRcdGFhX2dldF9wcm94eShwcm94eSk7XG4gNDA1Olx0XHRwcm9maWxlLVx1MDAzZWxhYmVsLnByb3h5ID0gcHJveHk7XG4gNDA2Olx0XG4gNDA3Olx0XHRwcm9maWxlLVx1MDAzZWxhYmVsLmhuYW1lID0gcHJvZmlsZS1cdTAwM2ViYXNlLmhuYW1lO1xuIDQwODpcdFx0cHJvZmlsZS1cdTAwM2VsYWJlbC5mbGFncyB8PSBGTEFHX1BST0ZJTEU7XG4gNDA5Olx0XHRwcm9maWxlLVx1MDAzZWxhYmVsLnZlY1swXSA9IHByb2ZpbGU7XG4gNDEwOlx0XG4gNDExOlx0XHRwcm9maWxlLVx1MDAzZXNpZ25hbCA9IFNJR0tJTEw7XG4gNDEyOlx0XHQvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi9cbiA0MTM6XHRcdHJldHVybiBwcm9maWxlO1xuIDQxNDpcdFxuIDQxNTpcdGZhaWxfcnVsZXM6XG4gNDE2Olx0XHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSk7XG4gNDE3Olx0ZmFpbF9sYWJlbDpcbiA0MTg6XHRcdGFhX2xhYmVsX2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2VsYWJlbCk7XG4gNDE5Olx0ZmFpbF9wb2xpY3k6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBGaXgqKgoKT2theSwgc28gdGhlIGNvZGUmIzM5O3MgdXNpbmcgYGt6YWxsb2NfZmxleGAgdG8gYWxsb2NhdGUgbWVtb3J5LCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGFsbG9jYXRpb24gaXMgemVyby1pbml0aWFsaXplZC4gVGhpcyBpcyBhIGh1Z2UgY2x1ZS4gVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgKmhhcyogdG8gYmUgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBpbiB0aGUgYGFhX2ZyZWVfcHJvZmlsZWAgZnVuY3Rpb24uIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBkb3VibGUtZnJlZSwgdXNlLWFmdGVyLWZyZWUsIG9yIGEgbGVhayDigJMgc29tZXRoaW5nIGZ1bmt5IGhhcHBlbmluZyBkdXJpbmcgYW4gZXJyb3IgcGF0aC4KCkxldCBtZSB0aGlua+KApiBgYWFfZnJlZV9wcm9maWxlYCBwcm9iYWJseSBjYWxscyBvdGhlciBjbGVhbnVwIGZ1bmN0aW9ucywgbGlrZSBgYWFfcG9saWN5X2Rlc3Ryb3lgIG9yIGBhYV9sYWJlbF9kZXN0cm95YC4gSWYgYGFhX3BvbGljeV9pbml0YCAob3Igc29tZXRoaW5nIHNpbWlsYXIpIGZhaWxzLCBgYWFfZnJlZV9wcm9maWxlYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgdG8gY2xlYW4gdXAuIFRoZSBwcm9ibGVtIHRoZW4gaXMgdGhhdCwgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBlcnJvciwgYGFhX2ZyZWVfcHJvZmlsZWAgbWF5IHRyeSB0byBkZXN0cm95IHNvbWV0aGluZyB0aGF0IHdhcyBuZXZlciBwcm9wZXJseSBpbml0aWFsaXplZCwgb3IgbWF5YmUgaXQgdHJpZXMgdG8gZnJlZSBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGRvZXNuJiMzOTt0IGV4aXN0LiBTaW5jZSB0aGUgbWVtb3J5IGlzICp6ZXJvZWQqLCBpdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIGRlcmVmZXJlbmNlIG9yIGZyZWUgYSBOVUxMIHBvaW50ZXIsIG9yIG1heWJlIGl0JiMzOTtzIGRyb3BwaW5nIGEgcmVmY291bnQgdGhhdCBuZXZlciBnb3Qgc2V0IGluIHRoZSBmaXJzdCBwbGFjZS4KCkVzc2VudGlhbGx5LCB0aGlzIGZpeCBpcyBhbGwgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLCBzcGVjaWZpY2FsbHkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIGFuZCB0aGUgY29kZSYjMzk7cyByZXNpbGllbmNlIGluIHRoZSBmYWNlIG9mIGVycm9ycy4gVGhpcyAqaXNuJiMzOTt0KiBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIOKAkyBubyBjaGFuY2UuIFRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gbm8gaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuCgpBbmQgdGhhdCYjMzk7cyB3aHkgS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIFRoZSBtZW1vcnkmIzM5O3MgYWxyZWFkeSB6ZXJvZWQuIEtBU0FOIGlzIHRoZSB0b29sIHdlIHdhbnQ6IEtBU0FOIHdpbGwgYmUgdGhlIHRoaW5nIHRvIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHNpbWlsYXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHRoYXQgYXJlIGNhdXNlZCBieSB0aGUgaW5pdGlhbGl6YXRpb24gZXJyb3JzIHRoYXQgbGVkIHRvIHRoaXMgZXJyb3IgcGF0aC4KCkkmIzM5O20gZ29pbmcgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBgYWFfZnJlZV9wcm9maWxlYCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0a2ZyZWVfc2Vuc2l0aXZlKHJ1bGVzLVx1MDAzZXNlY21hcmtbaV0ubGFiZWwpO1xuIDMwMTpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHJ1bGVzLVx1MDAzZXNlY21hcmspO1xuIDMwMjpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHJ1bGVzKTtcbiAzMDM6XHR9XG4gMzA0Olx0XG4gMzA1Olx0c3RydWN0IGFhX3J1bGVzZXQgKmFhX2FsbG9jX3J1bGVzZXQoZ2ZwX3QgZ2ZwKVxuIDMwNjpcdHtcbiAzMDc6XHRcdHN0cnVjdCBhYV9ydWxlc2V0ICpydWxlcztcbiAzMDg6XHRcbiAzMDk6XHRcdHJ1bGVzID0ga3phbGxvY19vYmooKnJ1bGVzLCBnZnApO1xuIDMxMDpcdFxuIDMxMTpcdFx0cmV0dXJuIHJ1bGVzO1xuIDMxMjpcdH1cbiAzMTM6XHRcbiAzMTQ6XHQvKipcbiAzMTU6XHQgKiBhYV9mcmVlX3Byb2ZpbGUgLSBmcmVlIGEgcHJvZmlsZVxuIDMxNjpcdCAqIEBwcm9maWxlOiB0aGUgcHJvZmlsZSB0byBmcmVlICAoTUFZQkUgTlVMTClcbiAzMTc6XHQgKlxuIDMxODpcdCAqIEZyZWUgYSBwcm9maWxlLCBpdHMgaGF0cyBhbmQgbnVsbF9wcm9maWxlLiBBbGwgcmVmZXJlbmNlcyB0byB0aGUgcHJvZmlsZSxcbiAzMTk6XHQgKiBpdHMgaGF0cyBhbmQgbnVsbF9wcm9maWxlIG11c3QgaGF2ZSBiZWVuIHB1dC5cbiAzMjA6XHQgKlxuIDMyMTpcdCAqIElmIHRoZSBwcm9maWxlIHdhcyByZWZlcmVuY2VkIGZyb20gYSB0YXNrIGNvbnRleHQsIGZyZWVfcHJvZmlsZSgpIHdpbGxcbiAzMjI6XHQgKiBiZSBjYWxsZWQgZnJvbSBhbiByY3UgY2FsbGJhY2sgcm91dGluZSwgc28gd2UgbXVzdCBub3Qgc2xlZXAgaGVyZS5cbiAzMjM6XHQgKi9cbiAzMjQ6XHR2b2lkIGFhX2ZyZWVfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcbiAzMjU6XHR7XG4gMzI2Olx0XHRzdHJ1Y3Qgcmhhc2h0YWJsZSAqcmh0O1xuIDMyNzpcdFxuIDMyODpcdFx0QUFfREVCVUcoREVCVUdfUE9MSUNZLCBcJiMzNDslcyglcClcXG5cJiMzNDssIF9fZnVuY19fLCBwcm9maWxlKTtcbiAzMjk6XHRcbiAzMzA6XHRcdGlmICghcHJvZmlsZSlcbiAzMzE6XHRcdFx0cmV0dXJuO1xuIDMzMjpcdFxuIDMzMzpcdFx0LyogZnJlZSBjaGlsZHJlbiBwcm9maWxlcyAqL1xuIDMzNDpcdFx0YWFfcG9saWN5X2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2ViYXNlKTtcbiAzMzU6XHRcdGFhX3B1dF9wcm9maWxlKHJjdV9hY2Nlc3NfcG9pbnRlcihwcm9maWxlLVx1MDAzZXBhcmVudCkpO1xuIDMzNjpcdFxuIDMzNzpcdFx0YWFfcHV0X25zKHByb2ZpbGUtXHUwMDNlbnMpO1xuIDMzODpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUtXHUwMDNlcmVuYW1lKTtcbiAzMzk6XHRcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlLVx1MDAzZWRpc2Nvbm5lY3RlZCk7XG4gMzQwOlx0XG4gMzQxOlx0XHRmcmVlX2F0dGFjaG1lbnQoXHUwMDI2cHJvZmlsZS1cdTAwM2VhdHRhY2gpO1xuIDM0MjpcdFxuIDM0MzpcdFx0LypcbiAzNDQ6XHRcdCAqIGF0IHRoaXMgcG9pbnQgdGhlcmUgYXJlIG5vIHRhc2tzIHRoYXQgY2FuIGhhdmUgYSByZWZlcmVuY2VcbiAzNDU6XHRcdCAqIHRvIHJ1bGVzXG4gMzQ2Olx0XHQgKi9cbiAzNDc6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBwcm9maWxlLVx1MDAzZW5fcnVsZXM7IGkmIzQzOyYjNDM7KVxuIDM0ODpcdFx0XHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1tpXSk7XG4gMzQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYWFfZnJlZV9wcm9maWxlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWFfZnJlZV9wcm9maWxlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgY2FsbGluZyBgYWFfcG9saWN5X2Rlc3Ryb3koJmFtcDtwcm9maWxlLSZndDtiYXNlKWAuIE5vdywgSSYjMzk7bSBpbW1lZGlhdGVseSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGlmIGBhYV9wb2xpY3lfaW5pdGAgZmFpbGVkIGVhcmxpZXIuIENvdWxkIGBwcm9maWxlLSZndDtiYXNlYCBiZSBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCwgZXZlbiB0aG91Z2ggaXQgd2FzIHByb2JhYmx5IHplcm9lZD8KCkJ1dCBoYW5nIG9uLCB0aGVyZSYjMzk7cyBtb3JlLiBJdCBhbHNvIGNhbGxzIGBhYV9wdXRfcHJvZmlsZShyY3VfYWNjZXNzX3BvaW50ZXIocHJvZmlsZS0mZ3Q7cGFyZW50KSlgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgcGFyZW50IHByb2ZpbGUuIEFuZCBpdCBhbHNvIGNhbGxzIGBhYV9wdXRfbnMocHJvZmlsZS0mZ3Q7bnMpYC4gR29vZCwgSSByZW1lbWJlciB0aGF0IGBhYV9wdXRfbnNgIGhhbmRsZXMgYSBOVUxMIGBuc2AgcG9pbnRlci4gQnV0IGlmIGBhYV9wb2xpY3lfaW5pdGAgZmFpbGVkLCBgcHJvZmlsZS0mZ3Q7bnNgICpjb3VsZCogYmUgTlVMTC4gQXQgbGVhc3QgdGhhdCBzaG91bGQgYmUgc2FmZS4KCldhaXQsIEkgc2VlIGl0IGFsc28gY2FsbHMgYGFhX2xhYmVsX2Rlc3Ryb3koJmFtcDtwcm9maWxlLSZndDtsYWJlbClgLiBUaGF0JiMzOTtzIGFub3RoZXIgcG90ZW50aWFsIGFyZWEgb2YgY29uY2VybiBpZiBgYWFfcG9saWN5X2luaXRgIGVuY291bnRlcmVkIGFuIGlzc3VlLiBJJiMzOTtkIGJldHRlciB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgYGFhX2ZyZWVfcHJvZmlsZWAgZnVuY3Rpb24gdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUtXHUwMDNlZGlybmFtZSk7XG4gMzUxOlx0XG4gMzUyOlx0XHRpZiAocHJvZmlsZS1cdTAwM2VkYXRhKSB7XG4gMzUzOlx0XHRcdHJodCA9IHByb2ZpbGUtXHUwMDNlZGF0YTtcbiAzNTQ6XHRcdFx0cHJvZmlsZS1cdTAwM2VkYXRhID0gTlVMTDtcbiAzNTU6XHRcdFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KHJodCwgYWFfZnJlZV9kYXRhLCBOVUxMKTtcbiAzNTY6XHRcdFx0a2ZyZWVfc2Vuc2l0aXZlKHJodCk7XG4gMzU3Olx0XHR9XG4gMzU4Olx0XG4gMzU5Olx0XHRrZnJlZV9zZW5zaXRpdmUocHJvZmlsZS1cdTAwM2VoYXNoKTtcbiAzNjA6XHRcdGFhX3B1dF9wcm9maWxlX2xvYWRkYXRhKHByb2ZpbGUtXHUwMDNlcmF3ZGF0YSk7XG4gMzYxOlx0XHRhYV9sYWJlbF9kZXN0cm95KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwpO1xuIDM2MjpcdFxuIDM2MzpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUpO1xuIDM2NDpcdH1cbiAzNjU6XHRcbiAzNjY6XHQvKipcbiAzNjc6XHQgKiBhYV9hbGxvY19wcm9maWxlIC0gYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIHJldHVybiBhIG5ldyBwcm9maWxlXG4gMzY4Olx0ICogQGhuYW1lOiBuYW1lIG9mIHRoZSBwcm9maWxlICAoTk9UIE5VTEwpXG4gMzY5Olx0ICogQHByb3h5OiBwcm94eSB0byB1c2UgT1IgbnVsbCBpZiB0byBhbGxvY2F0ZSBhIG5ldyBvbmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyMwoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiA0OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEVycm9yIEhhbmRsaW5nIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZS4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYGFhX2ZyZWVfcHJvZmlsZWAgaXMgYmVpbmcgY2FsbGVkIG9uIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIGBwcm9maWxlYCBzdHJ1Y3QgaW4gY2VydGFpbiBlcnJvciBwYXRocy4gU3BlY2lmaWNhbGx5LCBpZiBgYWFfcG9saWN5X2luaXRgIG9yIGBhYV9sYWJlbF9pbml0YCBmYWlsIGR1cmluZyBwcm9maWxlIHNldHVwLCBgcHJvZmlsZS0mZ3Q7YmFzZWAgb3IgYHByb2ZpbGUtJmd0O2xhYmVsYCBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQsIHJlc3BlY3RpdmVseS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2V0dXAgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHdvZXMuIENhbGxpbmcgYGFhX2xhYmVsX2Rlc3Ryb3lgIG9uIGFuIHVuaW5pdGlhbGl6ZWQgbGFiZWwsIGV2ZW4gaWYgaXQmIzM5O3MgemVyb2VkLCBjb3VsZCBsZWFkIHRvIGlzc3VlcywgcG90ZW50aWFsbHkgdHJ5aW5nIHRvIGZyZWUgdGhpbmdzIHRoYXQgZG9uJiMzOTt0IGV4aXN0IG9yIG1lc3Npbmcgd2l0aCByZWZlcmVuY2UgY291bnRzIGFuZCBgbGFiZWwtJmd0O3J1bGVzYCBvciBgbGFiZWwtJmd0O3Byb3h5YC4KClRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoaXMgYnkgaW50cm9kdWNpbmcgbW9yZSBncmFudWxhciBlcnJvciBsYWJlbHMuIEluc3RlYWQgb2YganVzdCBhIHNpbmdsZSBgZ290byBmYWlsO2AgdGhhdCBqdW1wcyBzdHJhaWdodCB0byBgYWFfZnJlZV9wcm9maWxlYCwgaXQgdXNlcyBsYWJlbHMgbGlrZSBgZmFpbF9ydWxlc2AsIGBmYWlsX2xhYmVsYCwgYW5kIGBmYWlsX3BvbGljeWAgdG8gaGFuZGxlIGVhY2ggaW5pdGlhbGl6YXRpb24gc3RlcCYjMzk7cyBmYWlsdXJlIGluZGl2aWR1YWxseS4gVGhpcyBwcmV2ZW50cyBgYWFfZnJlZV9wcm9maWxlYCBmcm9tIGJlaW5nIGNhbGxlZCBwcmVtYXR1cmVseSBvbiBhIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBwcm9maWxlLiBUaGlzIG1lYW5zIHRoZSBmaXggaXMgYWRkcmVzc2luZyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgaW52YWxpZCBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWVzLCB3aGljaCBhcmUgYWxsIHByZXR0eSBuYXN0eSBtZW1vcnkgbWFuYWdlbWVudCBidWdzLgoKTm93LCBiZWNhdXNlIHRoZSBgcHJvZmlsZWAgc3RydWN0IGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX2ZsZXhgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnksIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIGxlYWtlZCB0byB1c2Vyc3BhY2UsIG9yIGluZmx1ZW5jaW5nIGNvbnRyb2wgZmxvdy4gVGhhdCBtZWFucyB3ZSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGluIHRoaXMgc3BlY2lmaWMgY2FzZS4gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGNhdGNoIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBpbmNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBpbnZhbGlkIGZyZWVzLiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbiYjMzk7dCByZXF1aXJlZCBoZXJlOyB0aGUgc3RhbmRhcmQgdG9vbHMgc2hvdWxkIGRvIHRoZSBqb2IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXG5cblNpbmNlIHRoZSBgcHJvZmlsZWAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19mbGV4KClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgaW5jb3JyZWN0IGVycm9yIGhhbmRsaW5nIChsaWtlIGludmFsaWQgZnJlZXMgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZSgpYCBieSByZXBsYWNpbmcgYSBzaW5nbGUgYGdvdG8gZmFpbDtgICh3aGljaCBjYWxsZWQgYGFhX2ZyZWVfcHJvZmlsZSgpYCkgd2l0aCBncmFudWxhciBlcnJvciBsYWJlbHMgKGBmYWlsX3J1bGVzYCwgYGZhaWxfbGFiZWxgLCBgZmFpbF9wb2xpY3lgLCBgZmFpbF9wcm9maWxlYCkuIGBhYV9mcmVlX3Byb2ZpbGUoKWAgYXNzdW1lcyB0aGF0IHRoZSBgcHJvZmlsZWAgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBDYWxsaW5nIGl0IG9uIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0cnVjdHVyZSBjYW4gbGVhZCB0byBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbnZhbGlkIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZXMuIFxuXG5TaW5jZSB0aGUgYHByb2ZpbGVgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NfZmxleCgpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIGluY29ycmVjdCBlcnJvciBoYW5kbGluZyAobGlrZSBpbnZhbGlkIGZyZWVzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTowMS44NjQ3MzE4NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTg5NDc4NjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWV9BUFBBUk1PUlwiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFhX2FsbG9jX3Byb2ZpbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXFxuXFxuU2luY2UgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX2ZsZXgoKWAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZSBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcgKGxpa2UgaW52YWxpZCBmcmVlcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTowMS44NjQ3MzgwNDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzQ4MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE3NThmMDE0OTA4MWY3MTQ3NjE1ODI5MTcwMzYzMGM3MTY2ZTMyODVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTU6NDE6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xcbmluZGV4IDk0YjRhN2U3MjdjYzEuLjdlYzQzYTQ5MTAzNWEgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcXG4rKysgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xcbkBAIC0zODUsMjEgKzM4NSwyMSBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRpZiAoIWFhX3BvbGljeV9pbml0KFxcdTAwMjZwcm9maWxlLVxcdTAwM2ViYXNlLCBOVUxMLCBobmFtZSwgZ2ZwKSlcXG4tXFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRnb3RvIGZhaWxfcHJvZmlsZTtcXG4gXFx0aWYgKCFhYV9sYWJlbF9pbml0KFxcdTAwMjZwcm9maWxlLVxcdTAwM2VsYWJlbCwgMSwgZ2ZwKSlcXG4tXFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRnb3RvIGZhaWxfcG9saWN5O1xcbiBcXG4gXFx0LyogYWxsb2NhdGUgdGhlIGZpcnN0IHJ1bGVzZXQsIGJ1dCBsZWF2ZSBpdCBlbXB0eSAqL1xcbiBcXHRwcm9maWxlLVxcdTAwM2VsYWJlbC5ydWxlc1swXSA9IGFhX2FsbG9jX3J1bGVzZXQoZ2ZwKTtcXG4gXFx0aWYgKCFwcm9maWxlLVxcdTAwM2VsYWJlbC5ydWxlc1swXSlcXG4tXFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRnb3RvIGZhaWxfbGFiZWw7XFxuIFxcdHByb2ZpbGUtXFx1MDAzZW5fcnVsZXMgPSAxO1xcbiBcXG4gXFx0LyogdXBkYXRlIGJlaW5nIHNldCBuZWVkZWQgYnkgZnMgaW50ZXJmYWNlICovXFxuIFxcdGlmICghcHJveHkpIHtcXG4gXFx0XFx0cHJveHkgPSBhYV9hbGxvY19wcm94eShcXHUwMDI2cHJvZmlsZS1cXHUwMDNlbGFiZWwsIGdmcCk7XFxuIFxcdFxcdGlmICghcHJveHkpXFxuLVxcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0XFx0Z290byBmYWlsX3J1bGVzO1xcbiBcXHR9IGVsc2VcXG4gXFx0XFx0YWFfZ2V0X3Byb3h5KHByb3h5KTtcXG4gXFx0cHJvZmlsZS1cXHUwMDNlbGFiZWwucHJveHkgPSBwcm94eTtcXG5AQCAtNDEyLDggKzQxMiwxNCBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG4gXFx0LyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovXFxuIFxcdHJldHVybiBwcm9maWxlO1xcbiBcXG4tZmFpbDpcXG4tXFx0YWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpO1xcbitmYWlsX3J1bGVzOlxcbitcXHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cXHUwMDNlbGFiZWwucnVsZXNbMF0pO1xcbitmYWlsX2xhYmVsOlxcbitcXHRhYV9sYWJlbF9kZXN0cm95KFxcdTAwMjZwcm9maWxlLVxcdTAwM2VsYWJlbCk7XFxuK2ZhaWxfcG9saWN5OlxcbitcXHRhYV9wb2xpY3lfZGVzdHJveShcXHUwMDI2cHJvZmlsZS1cXHUwMDNlYmFzZSk7XFxuK2ZhaWxfcHJvZmlsZTpcXG4rXFx0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUpO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MDIuMzM5MDM0ODA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzcxNDUzMzkyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDVVJJVFlfQVBQQVJNT1JcIixcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYV9hbGxvY19wcm9maWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGFhX2FsbG9jX3Byb2ZpbGVgIGR1cmluZyBBcHBBcm1vciBwb2xpY3kgbG9hZGluZy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHBvbGljeSBsb2FkaW5nIGludGVyZmFjZXMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nIHRvIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc1OGYwMTQ5MDgxZjcxNDc2MTU4MjkxNzAzNjMwYzcxNjZlMzI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE1OjQxOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xuaW5kZXggOTRiNGE3ZTcyN2NjMS4uN2VjNDNhNDkxMDM1YSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXG4rKysgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xuQEAgLTM4NSwyMSArMzg1LDIxIEBAIHN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKmhuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGlmICghYWFfcG9saWN5X2luaXQoXHUwMDI2cHJvZmlsZS1cdTAwM2ViYXNlLCBOVUxMLCBobmFtZSwgZ2ZwKSlcbi1cdFx0Z290byBmYWlsO1xuK1x0XHRnb3RvIGZhaWxfcHJvZmlsZTtcbiBcdGlmICghYWFfbGFiZWxfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsLCAxLCBnZnApKVxuLVx0XHRnb3RvIGZhaWw7XG4rXHRcdGdvdG8gZmFpbF9wb2xpY3k7XG4gXG4gXHQvKiBhbGxvY2F0ZSB0aGUgZmlyc3QgcnVsZXNldCwgYnV0IGxlYXZlIGl0IGVtcHR5ICovXG4gXHRwcm9maWxlLVx1MDAzZWxhYmVsLnJ1bGVzWzBdID0gYWFfYWxsb2NfcnVsZXNldChnZnApO1xuIFx0aWYgKCFwcm9maWxlLVx1MDAzZWxhYmVsLnJ1bGVzWzBdKVxuLVx0XHRnb3RvIGZhaWw7XG4rXHRcdGdvdG8gZmFpbF9sYWJlbDtcbiBcdHByb2ZpbGUtXHUwMDNlbl9ydWxlcyA9IDE7XG4gXG4gXHQvKiB1cGRhdGUgYmVpbmcgc2V0IG5lZWRlZCBieSBmcyBpbnRlcmZhY2UgKi9cbiBcdGlmICghcHJveHkpIHtcbiBcdFx0cHJveHkgPSBhYV9hbGxvY19wcm94eShcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsLCBnZnApO1xuIFx0XHRpZiAoIXByb3h5KVxuLVx0XHRcdGdvdG8gZmFpbDtcbitcdFx0XHRnb3RvIGZhaWxfcnVsZXM7XG4gXHR9IGVsc2VcbiBcdFx0YWFfZ2V0X3Byb3h5KHByb3h5KTtcbiBcdHByb2ZpbGUtXHUwMDNlbGFiZWwucHJveHkgPSBwcm94eTtcbkBAIC00MTIsOCArNDEyLDE0IEBAIHN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKmhuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxuIFx0LyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovXG4gXHRyZXR1cm4gcHJvZmlsZTtcbiBcbi1mYWlsOlxuLVx0YWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpO1xuK2ZhaWxfcnVsZXM6XG4rXHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSk7XG4rZmFpbF9sYWJlbDpcbitcdGFhX2xhYmVsX2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2VsYWJlbCk7XG4rZmFpbF9wb2xpY3k6XG4rXHRhYV9wb2xpY3lfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UpO1xuK2ZhaWxfcHJvZmlsZTpcbitcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlKTtcbiBcbiBcdHJldHVybiBOVUxMO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjAyLjMzOTAzNjMwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDExODE0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBcHBBcm1vciBQb2xpY3kgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNgIGFuZCBpdCdzIG1ha2luZyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYWFfYWxsb2NfcHJvZmlsZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhbHdheXMsIFwiSXMgdGhpcyBmdXp6YWJsZT9cIiBTaW5jZSBgYWFfYWxsb2NfcHJvZmlsZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGludm9sdmVkIGluIHRoZSBBcHBBcm1vciBwb2xpY3kgbG9hZGluZyBwcm9jZXNzLCB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suXG5cblRoZSBwYXRjaCBlc3NlbnRpYWxseSBtb2RpZmllcyB0aGUgZXJyb3IgcGF0aC4gSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2luZ2xlIGBhYV9mcmVlX3Byb2ZpbGUocHJvZmlsZSlgIGNhbGwsIHRoZSBjb2RlIGlzIG5vdyBtYW51YWxseSBjbGVhbmluZyB1cCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdpdGhpbiB0aGUgcHJvZmlsZSBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgaXQncyBoaXR0aW5nIHRoZXNlIGNsZWFudXAgZnVuY3Rpb25zIG9uIGFuIGVycm9yOiBgZnJlZV9ydWxlc2V0KHByb2ZpbGUtXHUwMDNlbGFiZWwucnVsZXNbMF0pO2AsIGBhYV9sYWJlbF9kZXN0cm95KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwpO2AsIGBhYV9wb2xpY3lfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UpO2AsIGFuZCBmaW5hbGx5IGBrZnJlZV9zZW5zaXRpdmUocHJvZmlsZSk7YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGRpZmZlcmVudCBhcHByb2FjaCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmluZyBwb2xpY3kgbG9hZGluZyBlcnJvcnMuXG5cblRoZXJlZm9yZSwgdGhlIHJldmlzZWQgZXJyb3IgaGFuZGxpbmcgY29kZSBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlYCBjZXJ0YWlubHkgcHJlc2VudHMgYSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQuIExldCdzIGRpZyBpbnRvIGBzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgbW9kaWZpZWQgYGFhX2FsbG9jX3Byb2ZpbGVgIGZ1bmN0aW9uIGl0c2VsZiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbmV3IGVycm9yIGhhbmRsaW5nIHdvcmtzIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MDcuODgwMjIxMDIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTEwOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFhX2FsbG9jX3Byb2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9MzI0PXZvaWQgYWFfZnJlZV9wcm9maWxlKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY2LS8qKlxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM2NzogKiBhYV9hbGxvY19wcm9maWxlIC0gYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIHJldHVybiBhIG5ldyBwcm9maWxlXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY4LSAqIEBobmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSAgKE5PVCBOVUxMKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzczLSAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM3NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy0zNzUtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTY5Nz1zdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfbnVsbChzdHJ1Y3QgYWFfcHJvZmlsZSAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtNzAyLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjcwMzpcXHRwcm9maWxlID0gYWFfYWxsb2NfcHJvZmlsZShuYW1lLCBOVUxMLCBnZnApO1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTcwNC1cXHRpZiAoIXByb2ZpbGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjA3LjkyNzczNzU3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTcyNDY4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIEFwcEFybW9yIGNvbmZpZ3VyYXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBBcHBBcm1vciBBY3RpdmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGVuYWJsZXMgQXBwQXJtb3IuIEl0J3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB3aGVuIHdvcmtpbmcgd2l0aCBzZWN1cml0eSBoYXJkZW5pbmc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGFjdHVhbGx5IGFjdGl2YXRlZCB0byBwcm9wZXJseSBtYW5hZ2UgcHJvZmlsZXMgYW5kIGVuc3VyZSB0aGV5J3JlIGJlaW5nIGVuZm9yY2VkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzeXN0ZW0ncyBjb25maWcgZmlsZXMgYW5kIHBvdGVudGlhbGx5IGFueSByZWxldmFudCBrZXJuZWwgcGFyYW1ldGVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24sIEdSVUIgb3Igc3lzdGVtZC1ib290LCBhbG9uZyB3aXRoIGFueSBvdGhlciBvYnZpb3VzIHBsYWNlcyBsaWtlIGAvZXRjL2FwcGFybW9yLmQvYCBhbmQgcmVsYXRlZCBzeXN0ZW1kIHNlcnZpY2UgZmlsZXMuIFByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGNvbnN1bHQgdGhlIGRpc3RyaWJ1dGlvbidzIGRvY3VtZW50YXRpb24gdG9vLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGRpc3Ryby1zcGVjaWZpYyB0d2Vha3MuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoYXQgY3J1Y2lhbCBzZXR0aW5nIHRoYXQgZmxpcHMgdGhlIHN3aXRjaCwgc28gSSBjYW4gZW5zdXJlIEFwcEFybW9yIGlzIGJlaGF2aW5nIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MTIuMjg0OTg3MTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDIyMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkFwcEFybW9yIHN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cXHRib29sIFxcXCJCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIkJ1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mzg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX01FU1NBR0VTXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEZWJ1ZyBtZXNzYWdlcyBlbmFibGVkIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ2LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cXHRib29sIFxcXCJBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTgtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNjAtXFx0Ym9vbCBcXFwiRW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03MC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjcxOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFRcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcyLSAgICAgICBib29sIFxcXCJFbmFibGUgcG9saWN5IGhhc2ggaW50cm9zcGVjdGlvbiBieSBkZWZhdWx0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04My1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg0OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cXHRib29sIFxcXCJBbGxvdyBleHBvcnRpbmcgdGhlIHJhdyBiaW5hcnkgcG9saWN5XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05NS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNi1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEwNzpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTA4LVxcdHRyaXN0YXRlIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjEyLjMzMzAxNzQxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzYxNDUwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgQXBwQXJtb3IgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgYFNFQ1VSSVRZX0FQUEFSTU9SYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGUga2V5IGhlcmUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBBcHBBcm1vci4gQW5kIGxvb2tpbmcgYXQgdGhpcywgdGhlIGZ1bmN0aW9uIHRvIHJlYWxseSBkaXNzZWN0IGlzIGBhYV9hbGxvY19wcm9maWxlYC4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBhbGxvY2F0aW9uIGlzIGhhcHBlbmluZy5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb2RlIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgYWFfYWxsb2NfcHJvZmlsZWAuIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBnaXZlIG1lIG1vcmUgY29udGV4dCBmb3Igd2hhdOKAmXMgZ29pbmcgb24gYW5kIHdoZXJlIHRoZSBhbGxvY2F0aW9uIGlzIHVzZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cgdG8gZmlndXJlIG91dCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBvcHRpbWl6YXRpb25zIHJlbGF0ZWQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MToxNS44NjkxNjY0MzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxOTk4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWFfYWxsb2NfcHJvZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9hcHBhcm1vci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaD0yOTM9c3RydWN0IGFhX3J1bGVzZXQgKmFhX2FsbG9jX3J1bGVzZXQoZ2ZwX3QgZ2ZwKTtcXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oOjI5NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5LmgtMjk1LVxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApO1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9MzI0PXZvaWQgYWFfZnJlZV9wcm9maWxlKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY2LS8qKlxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM2NzogKiBhYV9hbGxvY19wcm9maWxlIC0gYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIHJldHVybiBhIG5ldyBwcm9maWxlXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY4LSAqIEBobmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSAgKE5PVCBOVUxMKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzczLSAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM3NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy0zNzUtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTY5Nz1zdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfbnVsbChzdHJ1Y3QgYWFfcHJvZmlsZSAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtNzAyLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjcwMzpcXHRwcm9maWxlID0gYWFfYWxsb2NfcHJvZmlsZShuYW1lLCBOVUxMLCBnZnApO1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTcwNC1cXHRpZiAoIXByb2ZpbGUpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmM9MTExND1zdGF0aWMgc3RydWN0IGFhX3Byb2ZpbGUgKnVucGFja19wcm9maWxlKHN0cnVjdCBhYV9leHQgKmUsIGNoYXIgKipuc19uYW1lKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jLTExNTItXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jOjExNTM6XFx0cHJvZmlsZSA9IGFhX2FsbG9jX3Byb2ZpbGUobmFtZSwgTlVMTCwgR0ZQX0tFUk5FTCk7XFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jLTExNTQtXFx0aWYgKCFwcm9maWxlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjE1LjkxNjM3MjUxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MzM1MjQ0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBcHBBcm1vciBQb2xpY3kgTG9hZGluZyoqXG5cbk9rYXksIHNvIEkndmUgc3BvdHRlZCBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgZnV6emluZyB0aGUgQXBwQXJtb3IgcG9saWN5IGxvYWRpbmcgcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBgdW5wYWNrX3Byb2ZpbGVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgc2luY2UgaXQncyBjYWxsZWQgd2hlbiBwb2xpY2llcyBhcmUgbG9hZGVkIGFuZCwgaW1wb3J0YW50bHksIGl0J3MgdGhlIG9uZSB0aGF0IGNhbGxzIGBhYV9hbGxvY19wcm9maWxlYC4gVGhhdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhIGdvb2QgdGFyZ2V0IHRvIHN0YXJ0IHdpdGguIEdpdmVuIHRoZSBjb250ZXh0LCBgYWFfYWxsb2NfcHJvZmlsZWAgaXMgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbi5cblxuSGFuZyBvbiBhIHNlY29uZOKApkkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzY29waW5nIGhlcmUuIElzIGBhYV9hbGxvY19wcm9maWxlYCBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciBpcyBpdCBpbnRlcm5hbCB0byBBcHBBcm1vcj8gQWgsIHllcywgaXQncyBpbnRlcm5hbC4gTm93LCBgdW5wYWNrX3Byb2ZpbGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyB0aGF0J3Mgbm90IGhlbHBpbmcgbWUuIEhvd2V2ZXIsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYGFhX2FsbG9jX251bGxgIGlzIGV4cG9ydGVkLiBMZXQgbWUgY29uZmlybSB0aGF0IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MjMuNzQ5OTAxNDQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwMzc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhYV9hbGxvY19udWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L2FwcGFybW9yL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oPTI5ND1zdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5LmgtMjk1LVxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApO1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5Lmg6Mjk2OnN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19udWxsKHN0cnVjdCBhYV9wcm9maWxlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaC0yOTctXFx0XFx0XFx0XFx0IGdmcF90IGdmcCk7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYz01NjI9c3RhdGljIHN0cnVjdCBhYV9wb2xpY3kgKl9fY3JlYXRlX21pc3NpbmdfYW5jZXN0b3JzKHN0cnVjdCBhYV9ucyAqbnMsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy01ODMtXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NTg0OlxcdFxcdFxcdHByb2ZpbGUgPSBhYV9hbGxvY19udWxsKHBhcmVudCwgbmFtZSwgZ2ZwKTtcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy01ODUtXFx0XFx0XFx0a2ZyZWUobmFtZSk7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYz02Njg9c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2ZxbG9va3Vwbl9wcm9maWxlKHN0cnVjdCBhYV9sYWJlbCAqYmFzZSxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTY5Ni1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzo2OTc6c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX251bGwoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSxcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy02OTgtXFx0XFx0XFx0XFx0IGdmcF90IGdmcClcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTc0NT1zdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfbmV3X2xlYXJuaW5nX3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgYm9vbCBoYXQsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy03NzktXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NzgwOlxcdHByb2ZpbGUgPSBhYV9hbGxvY19udWxsKHBhcmVudCwgbmFtZSwgZ2ZwKTtcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy03ODEtXFx0aWYgKCFwcm9maWxlKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X25zLmM9ODM9c3RhdGljIHN0cnVjdCBhYV9wcm9maWxlICphbGxvY191bmNvbmZpbmVkKGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfbnMuYy04Ni1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfbnMuYzo4NzpcXHRwcm9maWxlID0gYWFfYWxsb2NfbnVsbChOVUxMLCBuYW1lLCBHRlBfS0VSTkVMKTtcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfbnMuYy04OC1cXHRpZiAoIXByb2ZpbGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjIzLjc5ODMzMzgxNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEwODI2NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGFhX2FsbG9jX3Byb2ZpbGVgKipcblxuUmlnaHQsIGBhYV9hbGxvY19wcm9maWxlYC4uLiB0aGF0J3MgYSBzb2xpZCBzeW1ib2wgdG8gc3RhcnQgd2l0aC4gSXQncyBub3Qgc29tZXRoaW5nIGJha2VkIGludG8gdGhlIGNvcmUsIEkgcmVtZW1iZXIgdGhhdCBtdWNoLiBMZXQncyBzZWUuLi4gaXQncyBkZWZpbmVkIGluIGBzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY2AuIEdvb2QsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IGl0IHRvIGJlLCByZWxhdGVkIHRvIHRoZSBwb2xpY3kgaGFuZGxpbmcuIE5vdywgYmVmb3JlIEkgZGlnIGFueSBkZWVwZXIgaW50byB0aGF0IGZ1bmN0aW9uIHNwZWNpZmljYWxseSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgU0VDVVJJVFlfQVBQQVJNT1JgLiBNYWtlIHN1cmUgbm90aGluZyBlbHNlIHdpbGwgYmxvY2sgdGhlIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MjcuNzA5MTYzMjc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIzODI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMy1cXHRib29sIFxcXCJBcHBBcm1vciBzdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xNy1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjE4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTktXFx0Ym9vbCBcXFwiQnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1ZyBjb2RlXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yNy1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjI4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19BU1NFUlRTXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnZ2luZyBhc3NlcnRzXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zNy1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjM4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19NRVNTQUdFU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGVidWcgbWVzc2FnZXMgZW5hYmxlZCBieSBkZWZhdWx0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00Ni1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9JTlRST1NQRUNUX1BPTElDWVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiQWxsb3cgbG9hZGVkIHBvbGljeSB0byBiZSBpbnRyb3NwZWN0ZWRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTU4LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NTk6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTYwLVxcdGJvb2wgXFxcIkVuYWJsZSBpbnRyb3NwZWN0aW9uIG9mIHNoYTI1NiBoYXNoZXMgZm9yIGxvYWRlZCBwcm9maWxlc1xcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzAtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03Mi0gICAgICAgYm9vbCBcXFwiRW5hYmxlIHBvbGljeSBoYXNoIGludHJvc3BlY3Rpb24gYnkgZGVmYXVsdFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODMtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODUtXFx0Ym9vbCBcXFwiQWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTUtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo5Njpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfUEFSQU5PSURfTE9BRFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTctXFx0Ym9vbCBcXFwiUGVyZm9ybSBmdWxsIHZlcmlmaWNhdGlvbiBvZiBsb2FkZWQgcG9saWN5XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDYtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0tVTklUX1RFU1RcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOC1cXHR0cmlzdGF0ZSBcXFwiQnVpbGQgS1VuaXQgdGVzdHMgZm9yIHBvbGljeV91bnBhY2suY1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MToyNy43NTc0MDc0OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0MzMzMTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIFNFQ1VSSVRZX0FQUEFSTU9SKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgU0VDVVJJVFlfQVBQQVJNT1JgLiBJdCdzIGEga2V5IHNlY3VyaXR5IGNvbXBvbmVudCwgYW5kIGJlZm9yZSBJIGNhbiBtYWtlIGFueSBkZWNpc2lvbnMgcmVnYXJkaW5nIGl0cyBjb25maWd1cmF0aW9uIG9yIGluY2x1c2lvbiwgSSBuZWVkIHRvIHNlZSB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZSwgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgdGhpcyBwbGFjZXMgdGhlIHNlY3VyaXR5IG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQ6XG5cbiogICAqKlRoZSBTcGVjaWZpYyBLZXJuZWwgTW9kdWxlczoqKiBXaGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgZG9lcyBgU0VDVVJJVFlfQVBQQVJNT1JgIHJlbHkgb24/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGZpbGUgc3lzdGVtIHN1cHBvcnQsIHBhcnRpY3VsYXIga2VybmVsIGZlYXR1cmVzLCBvciBjZXJ0YWluIGNhcGFiaWxpdGllcz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLlxuKiAgICoqVGhlIEJyb2FkZXIgU2VjdXJpdHkgTGFuZHNjYXBlOioqIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhpZ2hsaWdodCBob3cgYFNFQ1VSSVRZX0FQUEFSTU9SYCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMuIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggU0VMaW51eCwgTFNNIGhvb2tzLCBvciBvdGhlciBzZWN1cml0eSBtb2R1bGVzPyBXaGF0IGlzIHRoZSBpbnRlbmRlZCBvdmVybGFwIGFuZCBkZXNpZ24gcGhpbG9zb3BoeT9cbiogICAqKlBlcmZvcm1hbmNlIEltcGxpY2F0aW9uczoqKiBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGludHJvZHVjZWQgYnkgdGhlc2UgZGVwZW5kZW5jaWVzPyBLbm93aW5nIHRoaXMgdXAgZnJvbnQgaGVscHMgaW4gbWFraW5nIGRlY2lzaW9ucy5cbiogICAqKlVwZ3JhZGUgUGF0aDoqKiBJZiB0aGUgZGVwZW5kZW5jeSBsaXN0IGluY2x1ZGVzIHRoaW5ncyBJJ20gbG9va2luZyB0byBkZXByZWNhdGUgb3IgY2hhbmdlLCB0aGlzIGxpc3QgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5nZXMuXG4qICAgKipLZXJuZWwgVmVyc2lvbjoqKiBJJ2xsIGFsc28gYmUgbWluZGZ1bCBvZiB0aGUgbWluaW11bSBrZXJuZWwgdmVyc2lvbiByZXF1aXJlZC4gVGhpcyBhZmZlY3RzIGNvbXBhdGliaWxpdHkgYW5kLCBwb3RlbnRpYWxseSwgdGhlIGZlYXR1cmUgc2V0IGF2YWlsYWJsZS5cbiogICAqKkNvbmZpZ3VyYXRpb24gQ29uZmxpY3RzOioqIEFyZSB0aGVyZSBhbnkga25vd24gY29uZmxpY3RzIHdpdGggb3RoZXIgc2VjdXJpdHkgb3B0aW9ucyBvciBrZXJuZWwgZmVhdHVyZXM/XG5cbkluIHNob3J0LCBrbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFNFQ1VSSVRZX0FQUEFSTU9SYCBpcyB0aGUgaW5pdGlhbCBwcmVyZXF1aXNpdGUgdG8gZW5zdXJlIHRoZSBkZXNpcmVkIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTozMi40MDA3NDI1ODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SXFxuICAgMzpcXHRcXHRib29sIFxcXCJBcHBBcm1vciBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWSBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBBVURJVFxcbiAgIDY6XFx0XFx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcXG4gICA3OlxcdFxcdHNlbGVjdCBTRUNVUklUWUZTXFxuICAgODpcXHRcXHRzZWxlY3QgU0VDVVJJVFlfTkVUV09SS1xcbiAgIDk6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgZW5hYmxlcyB0aGUgQXBwQXJtb3Igc2VjdXJpdHkgbW9kdWxlLlxcbiAgMTI6XFx0XFx0ICBSZXF1aXJlZCB1c2Vyc3BhY2UgdG9vbHMgKGlmIHRoZXkgYXJlIG5vdCBpbmNsdWRlZCBpbiB5b3VyXFxuICAxMzpcXHRcXHQgIGRpc3RyaWJ1dGlvbikgYW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gbWF5IGJlIGZvdW5kIGF0XFxuICAxNDpcXHRcXHQgIGh0dHA6Ly9hcHBhcm1vci53aWtpLmtlcm5lbC5vcmdcXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdcXG4gIDE5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIEFwcEFybW9yIHdpdGggZGVidWcgY29kZVxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MzIuNDAwODMyMzMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTQ2NTY2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFwcEFybW9yIFNlY3VyaXR5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBBcHBBcm1vciBwYXRjaCwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIGBTRUNVUklUWV9BUFBBUk1PUmAgcmVsaWVzIG9uIGJvdGggYFNFQ1VSSVRZYCBhbmQgYE5FVGAsIHNvIHRob3NlIHRocmVlIGNvbmZpZ3MgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgcmVsZXZhbnQuIFRoZSBjZW50cmFsIGZvY3VzIGhlcmUgc2VlbXMgdG8gYmUgb24gYGFhX2FsbG9jX3Byb2ZpbGVgLiBNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBhYV9hbGxvY19wcm9maWxlYCBkdXJpbmcgdGhlIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nIHByb2Nlc3MuIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRob3NlIHBvbGljeSBsb2FkaW5nIGludGVyZmFjZXMsIGZ1enppbmcgaXQgaXMgYSBzb2xpZCBzdHJhdGVneSB0byBjb25maXJtIHRoYXQgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBwYXRod2F5cyBhcmUgd29ya2luZyBhcyBleHBlY3RlZC4gSXQncyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhpbmdzIGNvdWxkIGJyZWFrIG9yIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGFhX2FsbG9jX3Byb2ZpbGVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBmb2NhbCBwb2ludC4gKlllcCosIHRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBub3RoaW5nIGVsc2Ugd2FzIHRvdWNoZWQgaW4gdGhlIHByb2Nlc3MuIE9rYXksIGxvb2tzIGxpa2UgaXQncyBqdXN0IGBhYV9hbGxvY19wcm9maWxlYCBpbiBgc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNgLiBHb29kLCB0aGF0IG1ha2VzIHRoaW5ncyBjbGVhbmVyLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkLiBJJ20gZ29pbmcgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI0LCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjM5LjM5NTQ5MTY0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4ODc3MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWV9BUFBBUk1PUlwiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFhX2FsbG9jX3Byb2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZX0FQUEFSTU9SXCIsXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWFfYWxsb2NfcHJvZmlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlYCBkdXJpbmcgQXBwQXJtb3IgcG9saWN5IGxvYWRpbmcuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBwb2xpY3kgbG9hZGluZyBpbnRlcmZhY2VzLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZyB0byB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjM5LjQ4NDM3OTQzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNzUxMjk1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTozOS40ODUzNDk1ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQyNzQxNTQ1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXFxuXFxuU2luY2UgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX2ZsZXgoKWAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZSBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcgKGxpa2UgaW52YWxpZCBmcmVlcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzU4ZjAxNDkwODFmNzE0NzYxNTgyOTE3MDM2MzBjNzE2NmUzMjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTU6NDE6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYyBiL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXG5pbmRleCA5NGI0YTdlNzI3Y2MxLi43ZWM0M2E0OTEwMzVhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcbisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXG5AQCAtMzg1LDIxICszODUsMjEgQEAgc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqaG5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0aWYgKCFhYV9wb2xpY3lfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UsIE5VTEwsIGhuYW1lLCBnZnApKVxuLVx0XHRnb3RvIGZhaWw7XG4rXHRcdGdvdG8gZmFpbF9wcm9maWxlO1xuIFx0aWYgKCFhYV9sYWJlbF9pbml0KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwsIDEsIGdmcCkpXG4tXHRcdGdvdG8gZmFpbDtcbitcdFx0Z290byBmYWlsX3BvbGljeTtcbiBcbiBcdC8qIGFsbG9jYXRlIHRoZSBmaXJzdCBydWxlc2V0LCBidXQgbGVhdmUgaXQgZW1wdHkgKi9cbiBcdHByb2ZpbGUtXHUwMDNlbGFiZWwucnVsZXNbMF0gPSBhYV9hbGxvY19ydWxlc2V0KGdmcCk7XG4gXHRpZiAoIXByb2ZpbGUtXHUwMDNlbGFiZWwucnVsZXNbMF0pXG4tXHRcdGdvdG8gZmFpbDtcbitcdFx0Z290byBmYWlsX2xhYmVsO1xuIFx0cHJvZmlsZS1cdTAwM2VuX3J1bGVzID0gMTtcbiBcbiBcdC8qIHVwZGF0ZSBiZWluZyBzZXQgbmVlZGVkIGJ5IGZzIGludGVyZmFjZSAqL1xuIFx0aWYgKCFwcm94eSkge1xuIFx0XHRwcm94eSA9IGFhX2FsbG9jX3Byb3h5KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwsIGdmcCk7XG4gXHRcdGlmICghcHJveHkpXG4tXHRcdFx0Z290byBmYWlsO1xuK1x0XHRcdGdvdG8gZmFpbF9ydWxlcztcbiBcdH0gZWxzZVxuIFx0XHRhYV9nZXRfcHJveHkocHJveHkpO1xuIFx0cHJvZmlsZS1cdTAwM2VsYWJlbC5wcm94eSA9IHByb3h5O1xuQEAgLTQxMiw4ICs0MTIsMTQgQEAgc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqaG5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG4gXHQvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi9cbiBcdHJldHVybiBwcm9maWxlO1xuIFxuLWZhaWw6XG4tXHRhYV9mcmVlX3Byb2ZpbGUocHJvZmlsZSk7XG4rZmFpbF9ydWxlczpcbitcdGZyZWVfcnVsZXNldChwcm9maWxlLVx1MDAzZWxhYmVsLnJ1bGVzWzBdKTtcbitmYWlsX2xhYmVsOlxuK1x0YWFfbGFiZWxfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsKTtcbitmYWlsX3BvbGljeTpcbitcdGFhX3BvbGljeV9kZXN0cm95KFx1MDAyNnByb2ZpbGUtXHUwMDNlYmFzZSk7XG4rZmFpbF9wcm9maWxlOlxuK1x0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUpO1xuIFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MzkuNDg1MzUxMTM0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDcxMzg5MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBBcHBBcm1vciBTZWN1cml0eSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGFhX2FsbG9jX3Byb2ZpbGVgIGluIHRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUuIFRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGEgc2ltcGxlIGBnb3RvIGZhaWw7YCB3aXRoIGEgbW9yZSBkZXRhaWxlZCBlcnJvciBoYW5kbGluZyBzZXF1ZW5jZS4gSXQncyBlc3NlbnRpYWxseSBicmVha2luZyBkb3duIHRoZSBjbGVhbnVwIHByb2Nlc3MgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgcHJvZmlsZSBhbGxvY2F0aW9uLlxuXG5Jbml0aWFsbHksIEknbSB0aGlua2luZywgdGhpcyBgZ290byBmYWlsO2Agd2FzIHByZXZpb3VzbHkgY2FsbGluZyBgYWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpO2AuIE15IGV4cGVydCBpbnR1aXRpb24gaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcy4gV2h5IHRoZSBjaGFuZ2U/IEl0IHNjcmVhbXMgbWVtb3J5IGxlYWsgb3IgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUvdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gaW4gdGhlIHByZXZpb3VzIGVycm9yIHBhdGguXG5cbk5vdyBJJ20gZGlnZ2luZyBkZWVwZXIsIExldCdzIGNoZWNrIHdoYXQgYGFhX2ZyZWVfcHJvZmlsZWAgYWN0dWFsbHkgKmRvZXMqLiBJZiBpdCBleHBlY3RzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHByb2ZpbGVgIHN0cnVjdCwgdGhlbiBjYWxsaW5nIGl0IG9uIGEgcGFydGlhbGx5IGJ1aWx0IG9iamVjdCBjb3VsZCBiZSBhIGRpc2FzdGVyLiBJdCBjb3VsZCB0cnkgdG8gZnJlZSBpbnZhbGlkIG9yIHVuaW5pdGlhbGl6ZWQgcG9pbnRlcnMuXG5cbldhaXQgYSBtb21lbnQsIEkgdGhpbmsgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUuIExvb2tpbmcgYmFjayBhdCBgYWFfYWxsb2NfcHJvZmlsZWAuLi4gQWgsIHllcyEgYHByb2ZpbGVgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGBremFsbG9jYCB6ZXJvZXMgdGhlIG1lbW9yeS4gU28sIGlmIGBhYV9mcmVlX3Byb2ZpbGVgIGFzc3VtZXMgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwgdGhlbiBvbiBmYWlsdXJlIGl0IG1pZ2h0IHRyeSB0byBga2ZyZWUoKWAgcG9pbnRlcnMgdGhhdCB3ZXJlIG5ldmVyIGFjdHVhbGx5IGFsbG9jYXRlZCwgb3IgcG9pbnQgdG8gZ2FyYmFnZS4gVGhlIG5ldyBjb2RlIHNlZW1zIGxpa2UgaXQncyB0cnlpbmcgdG8gc2VsZWN0aXZlbHkgZnJlZSB0aGUgYWxsb2NhdGVkIHBpZWNlcyB3aGljaCBpcyBhIG11Y2ggc2FmZXIgYXBwcm9hY2guIFRpbWUgdG8gY29uZmlybSBteSBzdXNwaWNpb24gYnkgdGhvcm91Z2hseSBjaGVja2luZyBgYWFfYWxsb2NfcHJvZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTo1MS41NTY3NDM4NDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHQgKiBAZ2ZwOiBhbGxvY2F0aW9uIHR5cGVcXG4gMzcxOlxcdCAqXFxuIDM3MjpcXHQgKiBSZXR1cm5zOiByZWZjb3VudCBwcm9maWxlIG9yIE5VTEwgb24gZmFpbHVyZVxcbiAzNzM6XFx0ICovXFxuIDM3NDpcXHRzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG4gMzc1OlxcdFxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuIDM3NjpcXHR7XFxuIDM3NzpcXHRcXHRzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTtcXG4gMzc4OlxcdFxcbiAzNzk6XFx0XFx0LyogZnJlZWQgYnkgZnJlZV9wcm9maWxlIC0gdXN1YWxseSB0aHJvdWdoIGFhX3B1dF9wcm9maWxlXFxuIDM4MDpcXHRcXHQgKiB0aGlzIGFkZHMgc3BhY2UgZm9yIGEgc2luZ2xlIHJ1bGVzZXQgaW4gdGhlIHJ1bGVzIHNlY3Rpb24gb2YgdGhlXFxuIDM4MTpcXHRcXHQgKiBsYWJlbFxcbiAzODI6XFx0XFx0ICovXFxuIDM4MzpcXHRcXHRwcm9maWxlID0ga3phbGxvY19mbGV4KCpwcm9maWxlLCBsYWJlbC5ydWxlcywgMSwgZ2ZwKTtcXG4gMzg0OlxcdFxcdGlmICghcHJvZmlsZSlcXG4gMzg1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHRpZiAoIWFhX3BvbGljeV9pbml0KFxcdTAwMjZwcm9maWxlLVxcdTAwM2ViYXNlLCBOVUxMLCBobmFtZSwgZ2ZwKSlcXG4gMzg4OlxcdFxcdFxcdGdvdG8gZmFpbF9wcm9maWxlO1xcbiAzODk6XFx0XFx0aWYgKCFhYV9sYWJlbF9pbml0KFxcdTAwMjZwcm9maWxlLVxcdTAwM2VsYWJlbCwgMSwgZ2ZwKSlcXG4gMzkwOlxcdFxcdFxcdGdvdG8gZmFpbF9wb2xpY3k7XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdC8qIGFsbG9jYXRlIHRoZSBmaXJzdCBydWxlc2V0LCBidXQgbGVhdmUgaXQgZW1wdHkgKi9cXG4gMzkzOlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLnJ1bGVzWzBdID0gYWFfYWxsb2NfcnVsZXNldChnZnApO1xcbiAzOTQ6XFx0XFx0aWYgKCFwcm9maWxlLVxcdTAwM2VsYWJlbC5ydWxlc1swXSlcXG4gMzk1OlxcdFxcdFxcdGdvdG8gZmFpbF9sYWJlbDtcXG4gMzk2OlxcdFxcdHByb2ZpbGUtXFx1MDAzZW5fcnVsZXMgPSAxO1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHQvKiB1cGRhdGUgYmVpbmcgc2V0IG5lZWRlZCBieSBmcyBpbnRlcmZhY2UgKi9cXG4gMzk5OlxcdFxcdGlmICghcHJveHkpIHtcXG4gNDAwOlxcdFxcdFxcdHByb3h5ID0gYWFfYWxsb2NfcHJveHkoXFx1MDAyNnByb2ZpbGUtXFx1MDAzZWxhYmVsLCBnZnApO1xcbiA0MDE6XFx0XFx0XFx0aWYgKCFwcm94eSlcXG4gNDAyOlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9ydWxlcztcXG4gNDAzOlxcdFxcdH0gZWxzZVxcbiA0MDQ6XFx0XFx0XFx0YWFfZ2V0X3Byb3h5KHByb3h5KTtcXG4gNDA1OlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLnByb3h5ID0gcHJveHk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLmhuYW1lID0gcHJvZmlsZS1cXHUwMDNlYmFzZS5obmFtZTtcXG4gNDA4OlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLmZsYWdzIHw9IEZMQUdfUFJPRklMRTtcXG4gNDA5OlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLnZlY1swXSA9IHByb2ZpbGU7XFxuIDQxMDpcXHRcXG4gNDExOlxcdFxcdHByb2ZpbGUtXFx1MDAzZXNpZ25hbCA9IFNJR0tJTEw7XFxuIDQxMjpcXHRcXHQvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi9cXG4gNDEzOlxcdFxcdHJldHVybiBwcm9maWxlO1xcbiA0MTQ6XFx0XFxuIDQxNTpcXHRmYWlsX3J1bGVzOlxcbiA0MTY6XFx0XFx0ZnJlZV9ydWxlc2V0KHByb2ZpbGUtXFx1MDAzZWxhYmVsLnJ1bGVzWzBdKTtcXG4gNDE3OlxcdGZhaWxfbGFiZWw6XFxuIDQxODpcXHRcXHRhYV9sYWJlbF9kZXN0cm95KFxcdTAwMjZwcm9maWxlLVxcdTAwM2VsYWJlbCk7XFxuIDQxOTpcXHRmYWlsX3BvbGljeTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6NTEuNTU2ODcwMDg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzY5MDQ1MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgRml4KipcblxuT2theSwgc28gdGhlIGNvZGUncyB1c2luZyBga3phbGxvY19mbGV4YCB0byBhbGxvY2F0ZSBtZW1vcnksIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgYWxsb2NhdGlvbiBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGlzIGEgaHVnZSBjbHVlLiBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCAqaGFzKiB0byBiZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGluIHRoZSBgYWFfZnJlZV9wcm9maWxlYCBmdW5jdGlvbi4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGEgZG91YmxlLWZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBhIGxlYWsg4oCTIHNvbWV0aGluZyBmdW5reSBoYXBwZW5pbmcgZHVyaW5nIGFuIGVycm9yIHBhdGguXG5cbkxldCBtZSB0aGlua+KApiBgYWFfZnJlZV9wcm9maWxlYCBwcm9iYWJseSBjYWxscyBvdGhlciBjbGVhbnVwIGZ1bmN0aW9ucywgbGlrZSBgYWFfcG9saWN5X2Rlc3Ryb3lgIG9yIGBhYV9sYWJlbF9kZXN0cm95YC4gSWYgYGFhX3BvbGljeV9pbml0YCAob3Igc29tZXRoaW5nIHNpbWlsYXIpIGZhaWxzLCBgYWFfZnJlZV9wcm9maWxlYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgdG8gY2xlYW4gdXAuIFRoZSBwcm9ibGVtIHRoZW4gaXMgdGhhdCwgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBlcnJvciwgYGFhX2ZyZWVfcHJvZmlsZWAgbWF5IHRyeSB0byBkZXN0cm95IHNvbWV0aGluZyB0aGF0IHdhcyBuZXZlciBwcm9wZXJseSBpbml0aWFsaXplZCwgb3IgbWF5YmUgaXQgdHJpZXMgdG8gZnJlZSBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGRvZXNuJ3QgZXhpc3QuIFNpbmNlIHRoZSBtZW1vcnkgaXMgKnplcm9lZCosIGl0J3MgbGlrZWx5IHRyeWluZyB0byBkZXJlZmVyZW5jZSBvciBmcmVlIGEgTlVMTCBwb2ludGVyLCBvciBtYXliZSBpdCdzIGRyb3BwaW5nIGEgcmVmY291bnQgdGhhdCBuZXZlciBnb3Qgc2V0IGluIHRoZSBmaXJzdCBwbGFjZS5cblxuRXNzZW50aWFsbHksIHRoaXMgZml4IGlzIGFsbCBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMsIHNwZWNpZmljYWxseSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgYW5kIHRoZSBjb2RlJ3MgcmVzaWxpZW5jZSBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuIFRoaXMgKmlzbid0KiBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIOKAkyBubyBjaGFuY2UuIFRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gbm8gaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbkFuZCB0aGF0J3Mgd2h5IEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIFRoZSBtZW1vcnkncyBhbHJlYWR5IHplcm9lZC4gS0FTQU4gaXMgdGhlIHRvb2wgd2Ugd2FudDogS0FTQU4gd2lsbCBiZSB0aGUgdGhpbmcgdG8gY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3Igc2ltaWxhciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgdGhhdCBhcmUgY2F1c2VkIGJ5IHRoZSBpbml0aWFsaXphdGlvbiBlcnJvcnMgdGhhdCBsZWQgdG8gdGhpcyBlcnJvciBwYXRoLlxuXG5JJ20gZ29pbmcgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBgYWFfZnJlZV9wcm9maWxlYCBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDI6MDQuMzI1OTE4ODc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0XFx0a2ZyZWVfc2Vuc2l0aXZlKHJ1bGVzLVxcdTAwM2VzZWNtYXJrW2ldLmxhYmVsKTtcXG4gMzAxOlxcdFxcdGtmcmVlX3NlbnNpdGl2ZShydWxlcy1cXHUwMDNlc2VjbWFyayk7XFxuIDMwMjpcXHRcXHRrZnJlZV9zZW5zaXRpdmUocnVsZXMpO1xcbiAzMDM6XFx0fVxcbiAzMDQ6XFx0XFxuIDMwNTpcXHRzdHJ1Y3QgYWFfcnVsZXNldCAqYWFfYWxsb2NfcnVsZXNldChnZnBfdCBnZnApXFxuIDMwNjpcXHR7XFxuIDMwNzpcXHRcXHRzdHJ1Y3QgYWFfcnVsZXNldCAqcnVsZXM7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHJ1bGVzID0ga3phbGxvY19vYmooKnJ1bGVzLCBnZnApO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRyZXR1cm4gcnVsZXM7XFxuIDMxMjpcXHR9XFxuIDMxMzpcXHRcXG4gMzE0OlxcdC8qKlxcbiAzMTU6XFx0ICogYWFfZnJlZV9wcm9maWxlIC0gZnJlZSBhIHByb2ZpbGVcXG4gMzE2OlxcdCAqIEBwcm9maWxlOiB0aGUgcHJvZmlsZSB0byBmcmVlICAoTUFZQkUgTlVMTClcXG4gMzE3OlxcdCAqXFxuIDMxODpcXHQgKiBGcmVlIGEgcHJvZmlsZSwgaXRzIGhhdHMgYW5kIG51bGxfcHJvZmlsZS4gQWxsIHJlZmVyZW5jZXMgdG8gdGhlIHByb2ZpbGUsXFxuIDMxOTpcXHQgKiBpdHMgaGF0cyBhbmQgbnVsbF9wcm9maWxlIG11c3QgaGF2ZSBiZWVuIHB1dC5cXG4gMzIwOlxcdCAqXFxuIDMyMTpcXHQgKiBJZiB0aGUgcHJvZmlsZSB3YXMgcmVmZXJlbmNlZCBmcm9tIGEgdGFzayBjb250ZXh0LCBmcmVlX3Byb2ZpbGUoKSB3aWxsXFxuIDMyMjpcXHQgKiBiZSBjYWxsZWQgZnJvbSBhbiByY3UgY2FsbGJhY2sgcm91dGluZSwgc28gd2UgbXVzdCBub3Qgc2xlZXAgaGVyZS5cXG4gMzIzOlxcdCAqL1xcbiAzMjQ6XFx0dm9pZCBhYV9mcmVlX3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpXFxuIDMyNTpcXHR7XFxuIDMyNjpcXHRcXHRzdHJ1Y3Qgcmhhc2h0YWJsZSAqcmh0O1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRBQV9ERUJVRyhERUJVR19QT0xJQ1ksIFxcXCIlcyglcClcXFxcblxcXCIsIF9fZnVuY19fLCBwcm9maWxlKTtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0aWYgKCFwcm9maWxlKVxcbiAzMzE6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHQvKiBmcmVlIGNoaWxkcmVuIHByb2ZpbGVzICovXFxuIDMzNDpcXHRcXHRhYV9wb2xpY3lfZGVzdHJveShcXHUwMDI2cHJvZmlsZS1cXHUwMDNlYmFzZSk7XFxuIDMzNTpcXHRcXHRhYV9wdXRfcHJvZmlsZShyY3VfYWNjZXNzX3BvaW50ZXIocHJvZmlsZS1cXHUwMDNlcGFyZW50KSk7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdGFhX3B1dF9ucyhwcm9maWxlLVxcdTAwM2Vucyk7XFxuIDMzODpcXHRcXHRrZnJlZV9zZW5zaXRpdmUocHJvZmlsZS1cXHUwMDNlcmVuYW1lKTtcXG4gMzM5OlxcdFxcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlLVxcdTAwM2VkaXNjb25uZWN0ZWQpO1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRcXHRmcmVlX2F0dGFjaG1lbnQoXFx1MDAyNnByb2ZpbGUtXFx1MDAzZWF0dGFjaCk7XFxuIDM0MjpcXHRcXG4gMzQzOlxcdFxcdC8qXFxuIDM0NDpcXHRcXHQgKiBhdCB0aGlzIHBvaW50IHRoZXJlIGFyZSBubyB0YXNrcyB0aGF0IGNhbiBoYXZlIGEgcmVmZXJlbmNlXFxuIDM0NTpcXHRcXHQgKiB0byBydWxlc1xcbiAzNDY6XFx0XFx0ICovXFxuIDM0NzpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHByb2ZpbGUtXFx1MDAzZW5fcnVsZXM7IGkrKylcXG4gMzQ4OlxcdFxcdFxcdGZyZWVfcnVsZXNldChwcm9maWxlLVxcdTAwM2VsYWJlbC5ydWxlc1tpXSk7XFxuIDM0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDI6MDQuMzI2MDI0NTk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDU5ODE3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYWFfZnJlZV9wcm9maWxlYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGFhX2ZyZWVfcHJvZmlsZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgY2FsbGluZyBgYWFfcG9saWN5X2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2ViYXNlKWAuIE5vdywgSSdtIGltbWVkaWF0ZWx5IHdvbmRlcmluZyBpZiB0aGVyZSdzIGEgcHJvYmxlbSBpZiBgYWFfcG9saWN5X2luaXRgIGZhaWxlZCBlYXJsaWVyLiBDb3VsZCBgcHJvZmlsZS1cdTAwM2ViYXNlYCBiZSBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCwgZXZlbiB0aG91Z2ggaXQgd2FzIHByb2JhYmx5IHplcm9lZD9cblxuQnV0IGhhbmcgb24sIHRoZXJlJ3MgbW9yZS4gSXQgYWxzbyBjYWxscyBgYWFfcHV0X3Byb2ZpbGUocmN1X2FjY2Vzc19wb2ludGVyKHByb2ZpbGUtXHUwMDNlcGFyZW50KSlgLiBBaCwgcmlnaHQsIHRoYXQncyByZWxhdGVkIHRvIHRoZSBwYXJlbnQgcHJvZmlsZS4gQW5kIGl0IGFsc28gY2FsbHMgYGFhX3B1dF9ucyhwcm9maWxlLVx1MDAzZW5zKWAuIEdvb2QsIEkgcmVtZW1iZXIgdGhhdCBgYWFfcHV0X25zYCBoYW5kbGVzIGEgTlVMTCBgbnNgIHBvaW50ZXIuIEJ1dCBpZiBgYWFfcG9saWN5X2luaXRgIGZhaWxlZCwgYHByb2ZpbGUtXHUwMDNlbnNgICpjb3VsZCogYmUgTlVMTC4gQXQgbGVhc3QgdGhhdCBzaG91bGQgYmUgc2FmZS5cblxuV2FpdCwgSSBzZWUgaXQgYWxzbyBjYWxscyBgYWFfbGFiZWxfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsKWAuIFRoYXQncyBhbm90aGVyIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4gaWYgYGFhX3BvbGljeV9pbml0YCBlbmNvdW50ZXJlZCBhbiBpc3N1ZS4gSSdkIGJldHRlciB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgYGFhX2ZyZWVfcHJvZmlsZWAgZnVuY3Rpb24gdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MjoxNC4xMzIwMDg4NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHRrZnJlZV9zZW5zaXRpdmUocHJvZmlsZS1cXHUwMDNlZGlybmFtZSk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGlmIChwcm9maWxlLVxcdTAwM2VkYXRhKSB7XFxuIDM1MzpcXHRcXHRcXHRyaHQgPSBwcm9maWxlLVxcdTAwM2VkYXRhO1xcbiAzNTQ6XFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNlZGF0YSA9IE5VTEw7XFxuIDM1NTpcXHRcXHRcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3kocmh0LCBhYV9mcmVlX2RhdGEsIE5VTEwpO1xcbiAzNTY6XFx0XFx0XFx0a2ZyZWVfc2Vuc2l0aXZlKHJodCk7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlLVxcdTAwM2VoYXNoKTtcXG4gMzYwOlxcdFxcdGFhX3B1dF9wcm9maWxlX2xvYWRkYXRhKHByb2ZpbGUtXFx1MDAzZXJhd2RhdGEpO1xcbiAzNjE6XFx0XFx0YWFfbGFiZWxfZGVzdHJveShcXHUwMDI2cHJvZmlsZS1cXHUwMDNlbGFiZWwpO1xcbiAzNjI6XFx0XFxuIDM2MzpcXHRcXHRrZnJlZV9zZW5zaXRpdmUocHJvZmlsZSk7XFxuIDM2NDpcXHR9XFxuIDM2NTpcXHRcXG4gMzY2OlxcdC8qKlxcbiAzNjc6XFx0ICogYWFfYWxsb2NfcHJvZmlsZSAtIGFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCByZXR1cm4gYSBuZXcgcHJvZmlsZVxcbiAzNjg6XFx0ICogQGhuYW1lOiBuYW1lIG9mIHRoZSBwcm9maWxlICAoTk9UIE5VTEwpXFxuIDM2OTpcXHQgKiBAcHJveHk6IHByb3h5IHRvIHVzZSBPUiBudWxsIGlmIHRvIGFsbG9jYXRlIGEgbmV3IG9uZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MjoxNC4xMzIxMTU4NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYyNzM2NTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRXJyb3IgSGFuZGxpbmcgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSB0YWtlLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgYWFfZnJlZV9wcm9maWxlYCBpcyBiZWluZyBjYWxsZWQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYHByb2ZpbGVgIHN0cnVjdCBpbiBjZXJ0YWluIGVycm9yIHBhdGhzLiBTcGVjaWZpY2FsbHksIGlmIGBhYV9wb2xpY3lfaW5pdGAgb3IgYGFhX2xhYmVsX2luaXRgIGZhaWwgZHVyaW5nIHByb2ZpbGUgc2V0dXAsIGBwcm9maWxlLVx1MDAzZWJhc2VgIG9yIGBwcm9maWxlLVx1MDAzZWxhYmVsYCBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQsIHJlc3BlY3RpdmVseS4gVGhhdCdzIGEgY2xhc3NpYyBzZXR1cCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgd29lcy4gQ2FsbGluZyBgYWFfbGFiZWxfZGVzdHJveWAgb24gYW4gdW5pbml0aWFsaXplZCBsYWJlbCwgZXZlbiBpZiBpdCdzIHplcm9lZCwgY291bGQgbGVhZCB0byBpc3N1ZXMsIHBvdGVudGlhbGx5IHRyeWluZyB0byBmcmVlIHRoaW5ncyB0aGF0IGRvbid0IGV4aXN0IG9yIG1lc3Npbmcgd2l0aCByZWZlcmVuY2UgY291bnRzIGFuZCBgbGFiZWwtXHUwMDNlcnVsZXNgIG9yIGBsYWJlbC1cdTAwM2Vwcm94eWAuXG5cblRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoaXMgYnkgaW50cm9kdWNpbmcgbW9yZSBncmFudWxhciBlcnJvciBsYWJlbHMuIEluc3RlYWQgb2YganVzdCBhIHNpbmdsZSBgZ290byBmYWlsO2AgdGhhdCBqdW1wcyBzdHJhaWdodCB0byBgYWFfZnJlZV9wcm9maWxlYCwgaXQgdXNlcyBsYWJlbHMgbGlrZSBgZmFpbF9ydWxlc2AsIGBmYWlsX2xhYmVsYCwgYW5kIGBmYWlsX3BvbGljeWAgdG8gaGFuZGxlIGVhY2ggaW5pdGlhbGl6YXRpb24gc3RlcCdzIGZhaWx1cmUgaW5kaXZpZHVhbGx5LiBUaGlzIHByZXZlbnRzIGBhYV9mcmVlX3Byb2ZpbGVgIGZyb20gYmVpbmcgY2FsbGVkIHByZW1hdHVyZWx5IG9uIGEgcGFydGlhbGx5IGNvbnN0cnVjdGVkIHByb2ZpbGUuIFRoaXMgbWVhbnMgdGhlIGZpeCBpcyBhZGRyZXNzaW5nIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbnZhbGlkIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZXMsIHdoaWNoIGFyZSBhbGwgcHJldHR5IG5hc3R5IG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MuXG5cbk5vdywgYmVjYXVzZSB0aGUgYHByb2ZpbGVgIHN0cnVjdCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19mbGV4YCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5LCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIGxlYWtlZCB0byB1c2Vyc3BhY2UsIG9yIGluZmx1ZW5jaW5nIGNvbnRyb2wgZmxvdy4gVGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaW4gdGhpcyBzcGVjaWZpYyBjYXNlLiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIGluY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGludmFsaWQgZnJlZXMuIFRoZXJlZm9yZSwgYSBzcGVjaWFsaXplZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3QgcmVxdWlyZWQgaGVyZTsgdGhlIHN0YW5kYXJkIHRvb2xzIHNob3VsZCBkbyB0aGUgam9iLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODIzLCJPdXRwdXRUb2tlbnMiOjIyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQyOjIzLjc1OTQ4NTM4MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGFhX2FsbG9jX3Byb2ZpbGUoKWAgYnkgcmVwbGFjaW5nIGEgc2luZ2xlIGBnb3RvIGZhaWw7YCAod2hpY2ggY2FsbGVkIGBhYV9mcmVlX3Byb2ZpbGUoKWApIHdpdGggZ3JhbnVsYXIgZXJyb3IgbGFiZWxzIChgZmFpbF9ydWxlc2AsIGBmYWlsX2xhYmVsYCwgYGZhaWxfcG9saWN5YCwgYGZhaWxfcHJvZmlsZWApLiBgYWFfZnJlZV9wcm9maWxlKClgIGFzc3VtZXMgdGhhdCB0aGUgYHByb2ZpbGVgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC4gQ2FsbGluZyBpdCBvbiBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgY2FuIGxlYWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgaW52YWxpZCBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWVzLiBcXG5cXG5TaW5jZSB0aGUgYHByb2ZpbGVgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NfZmxleCgpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIGluY29ycmVjdCBlcnJvciBoYW5kbGluZyAobGlrZSBpbnZhbGlkIGZyZWVzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXFxuXFxuU2luY2UgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX2ZsZXgoKWAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZSBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcgKGxpa2UgaW52YWxpZCBmcmVlcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 15:39:48 +0000 UTC FinishedAt: 2026-08-25 15:42:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY_APPARMOR", "SECURITY", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY_APPARMOR", "SECURITY", "NET" ], "series_id": "ac211454-d8b5-422a-b9e0-5c2f2e796ec4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "aa_alloc_profile" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZX0FQUEFSTU9SJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FhX2FsbG9jX3Byb2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZSgpYCBieSByZXBsYWNpbmcgYSBzaW5nbGUgYGdvdG8gZmFpbDtgICh3aGljaCBjYWxsZWQgYGFhX2ZyZWVfcHJvZmlsZSgpYCkgd2l0aCBncmFudWxhciBlcnJvciBsYWJlbHMgKGBmYWlsX3J1bGVzYCwgYGZhaWxfbGFiZWxgLCBgZmFpbF9wb2xpY3lgLCBgZmFpbF9wcm9maWxlYCkuIGBhYV9mcmVlX3Byb2ZpbGUoKWAgYXNzdW1lcyB0aGF0IHRoZSBgcHJvZmlsZWAgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBDYWxsaW5nIGl0IG9uIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0cnVjdHVyZSBjYW4gbGVhZCB0byBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbnZhbGlkIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZXMuIFxuXG5TaW5jZSB0aGUgYHByb2ZpbGVgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NfZmxleCgpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIGluY29ycmVjdCBlcnJvciBoYW5kbGluZyAobGlrZSBpbnZhbGlkIGZyZWVzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTc1OGYwMTQ5MDgxZjcxNDc2MTU4MjkxNzAzNjMwYzcxNjZlMzI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE1OjQxOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcbmluZGV4IDk0YjRhN2U3MjdjYzEuLjdlYzQzYTQ5MTAzNWEgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcbkBAIC0zODUsMjEgJiM0MzszODUsMjEgQEAgc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqaG5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0aWYgKCFhYV9wb2xpY3lfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UsIE5VTEwsIGhuYW1lLCBnZnApKVxuLVx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRnb3RvIGZhaWxfcHJvZmlsZTtcbiBcdGlmICghYWFfbGFiZWxfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsLCAxLCBnZnApKVxuLVx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRnb3RvIGZhaWxfcG9saWN5O1xuIFxuIFx0LyogYWxsb2NhdGUgdGhlIGZpcnN0IHJ1bGVzZXQsIGJ1dCBsZWF2ZSBpdCBlbXB0eSAqL1xuIFx0cHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSA9IGFhX2FsbG9jX3J1bGVzZXQoZ2ZwKTtcbiBcdGlmICghcHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSlcbi1cdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Z290byBmYWlsX2xhYmVsO1xuIFx0cHJvZmlsZS1cdTAwM2VuX3J1bGVzID0gMTtcbiBcbiBcdC8qIHVwZGF0ZSBiZWluZyBzZXQgbmVlZGVkIGJ5IGZzIGludGVyZmFjZSAqL1xuIFx0aWYgKCFwcm94eSkge1xuIFx0XHRwcm94eSA9IGFhX2FsbG9jX3Byb3h5KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwsIGdmcCk7XG4gXHRcdGlmICghcHJveHkpXG4tXHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0XHRnb3RvIGZhaWxfcnVsZXM7XG4gXHR9IGVsc2VcbiBcdFx0YWFfZ2V0X3Byb3h5KHByb3h5KTtcbiBcdHByb2ZpbGUtXHUwMDNlbGFiZWwucHJveHkgPSBwcm94eTtcbkBAIC00MTIsOCAmIzQzOzQxMiwxNCBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcbiBcdC8qIHJlZmNvdW50IHJlbGVhc2VkIGJ5IGNhbGxlciAqL1xuIFx0cmV0dXJuIHByb2ZpbGU7XG4gXG4tZmFpbDpcbi1cdGFhX2ZyZWVfcHJvZmlsZShwcm9maWxlKTtcbiYjNDM7ZmFpbF9ydWxlczpcbiYjNDM7XHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSk7XG4mIzQzO2ZhaWxfbGFiZWw6XG4mIzQzO1x0YWFfbGFiZWxfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsKTtcbiYjNDM7ZmFpbF9wb2xpY3k6XG4mIzQzO1x0YWFfcG9saWN5X2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2ViYXNlKTtcbiYjNDM7ZmFpbF9wcm9maWxlOlxuJiM0MztcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlKTtcbiBcbiBcdHJldHVybiBOVUxMO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFlfQVBQQVJNT1ImIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFfYWxsb2NfcHJvZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTc1OGYwMTQ5MDgxZjcxNDc2MTU4MjkxNzAzNjMwYzcxNjZlMzI4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE1OjQxOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYwppbmRleCA5NGI0YTdlNzI3Y2MxLi43ZWM0M2E0OTEwMzVhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYwpAQCAtMzg1LDIxICYjNDM7Mzg1LDIxIEBAIHN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKmhuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LAogCQlyZXR1cm4gTlVMTDsKIAogCWlmICghYWFfcG9saWN5X2luaXQoJmFtcDtwcm9maWxlLSZndDtiYXNlLCBOVUxMLCBobmFtZSwgZ2ZwKSkKLQkJZ290byBmYWlsOwomIzQzOwkJZ290byBmYWlsX3Byb2ZpbGU7CiAJaWYgKCFhYV9sYWJlbF9pbml0KCZhbXA7cHJvZmlsZS0mZ3Q7bGFiZWwsIDEsIGdmcCkpCi0JCWdvdG8gZmFpbDsKJiM0MzsJCWdvdG8gZmFpbF9wb2xpY3k7CiAKIAkvKiBhbGxvY2F0ZSB0aGUgZmlyc3QgcnVsZXNldCwgYnV0IGxlYXZlIGl0IGVtcHR5ICovCiAJcHJvZmlsZS0mZ3Q7bGFiZWwucnVsZXNbMF0gPSBhYV9hbGxvY19ydWxlc2V0KGdmcCk7CiAJaWYgKCFwcm9maWxlLSZndDtsYWJlbC5ydWxlc1swXSkKLQkJZ290byBmYWlsOwomIzQzOwkJZ290byBmYWlsX2xhYmVsOwogCXByb2ZpbGUtJmd0O25fcnVsZXMgPSAxOwogCiAJLyogdXBkYXRlIGJlaW5nIHNldCBuZWVkZWQgYnkgZnMgaW50ZXJmYWNlICovCiAJaWYgKCFwcm94eSkgewogCQlwcm94eSA9IGFhX2FsbG9jX3Byb3h5KCZhbXA7cHJvZmlsZS0mZ3Q7bGFiZWwsIGdmcCk7CiAJCWlmICghcHJveHkpCi0JCQlnb3RvIGZhaWw7CiYjNDM7CQkJZ290byBmYWlsX3J1bGVzOwogCX0gZWxzZQogCQlhYV9nZXRfcHJveHkocHJveHkpOwogCXByb2ZpbGUtJmd0O2xhYmVsLnByb3h5ID0gcHJveHk7CkBAIC00MTIsOCAmIzQzOzQxMiwxNCBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSwKIAkvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi8KIAlyZXR1cm4gcHJvZmlsZTsKIAotZmFpbDoKLQlhYV9mcmVlX3Byb2ZpbGUocHJvZmlsZSk7CiYjNDM7ZmFpbF9ydWxlczoKJiM0MzsJZnJlZV9ydWxlc2V0KHByb2ZpbGUtJmd0O2xhYmVsLnJ1bGVzWzBdKTsKJiM0MztmYWlsX2xhYmVsOgomIzQzOwlhYV9sYWJlbF9kZXN0cm95KCZhbXA7cHJvZmlsZS0mZ3Q7bGFiZWwpOwomIzQzO2ZhaWxfcG9saWN5OgomIzQzOwlhYV9wb2xpY3lfZGVzdHJveSgmYW1wO3Byb2ZpbGUtJmd0O2Jhc2UpOwomIzQzO2ZhaWxfcHJvZmlsZToKJiM0MzsJa2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUpOwogCiAJcmV0dXJuIE5VTEw7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcHBBcm1vciBQb2xpY3kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY2AgYW5kIGl0JiMzOTtzIG1ha2luZyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYWFfYWxsb2NfcHJvZmlsZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhbHdheXMsICYjMzQ7SXMgdGhpcyBmdXp6YWJsZT8mIzM0OyBTaW5jZSBgYWFfYWxsb2NfcHJvZmlsZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGludm9sdmVkIGluIHRoZSBBcHBBcm1vciBwb2xpY3kgbG9hZGluZyBwcm9jZXNzLCB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suCgpUaGUgcGF0Y2ggZXNzZW50aWFsbHkgbW9kaWZpZXMgdGhlIGVycm9yIHBhdGguIEluc3RlYWQgb2YgcmVseWluZyBvbiBhIHNpbmdsZSBgYWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpYCBjYWxsLCB0aGUgY29kZSBpcyBub3cgbWFudWFsbHkgY2xlYW5pbmcgdXAgYWxsb2NhdGVkIHJlc291cmNlcyB3aXRoaW4gdGhlIHByb2ZpbGUgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGhpdHRpbmcgdGhlc2UgY2xlYW51cCBmdW5jdGlvbnMgb24gYW4gZXJyb3I6IGBmcmVlX3J1bGVzZXQocHJvZmlsZS0mZ3Q7bGFiZWwucnVsZXNbMF0pO2AsIGBhYV9sYWJlbF9kZXN0cm95KCZhbXA7cHJvZmlsZS0mZ3Q7bGFiZWwpO2AsIGBhYV9wb2xpY3lfZGVzdHJveSgmYW1wO3Byb2ZpbGUtJmd0O2Jhc2UpO2AsIGFuZCBmaW5hbGx5IGBrZnJlZV9zZW5zaXRpdmUocHJvZmlsZSk7YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGRpZmZlcmVudCBhcHByb2FjaCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmluZyBwb2xpY3kgbG9hZGluZyBlcnJvcnMuCgpUaGVyZWZvcmUsIHRoZSByZXZpc2VkIGVycm9yIGhhbmRsaW5nIGNvZGUgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgY2VydGFpbmx5IHByZXNlbnRzIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBMZXQmIzM5O3MgZGlnIGludG8gYHNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBtb2RpZmllZCBgYWFfYWxsb2NfcHJvZmlsZWAgZnVuY3Rpb24gaXRzZWxmIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBuZXcgZXJyb3IgaGFuZGxpbmcgd29ya3MgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWFfYWxsb2NfcHJvZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTMyND12b2lkIGFhX2ZyZWVfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy0zNjYtLyoqXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzozNjc6ICogYWFfYWxsb2NfcHJvZmlsZSAtIGFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCByZXR1cm4gYSBuZXcgcHJvZmlsZVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY4LSAqIEBobmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSAgKE5PVCBOVUxMKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTM3My0gKi9cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM3NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTM3NS1cdFx0XHRcdCAgICBnZnBfdCBnZnApXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9Njk3PXN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19udWxsKHN0cnVjdCBhYV9wcm9maWxlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtNzAyLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NzAzOlx0cHJvZmlsZSA9IGFhX2FsbG9jX3Byb2ZpbGUobmFtZSwgTlVMTCwgZ2ZwKTtcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTcwNC1cdGlmICghcHJvZmlsZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyBBcHBBcm1vciBjb25maWd1cmF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIEFwcEFybW9yIEFjdGl2YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGVuYWJsZXMgQXBwQXJtb3IuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gd2hlbiB3b3JraW5nIHdpdGggc2VjdXJpdHkgaGFyZGVuaW5nOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgYWN0aXZhdGVkIHRvIHByb3Blcmx5IG1hbmFnZSBwcm9maWxlcyBhbmQgZW5zdXJlIHRoZXkmIzM5O3JlIGJlaW5nIGVuZm9yY2VkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzeXN0ZW0mIzM5O3MgY29uZmlnIGZpbGVzIGFuZCBwb3RlbnRpYWxseSBhbnkgcmVsZXZhbnQga2VybmVsIHBhcmFtZXRlcnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJvb3Rsb2FkZXIgY29uZmlndXJhdGlvbiwgR1JVQiBvciBzeXN0ZW1kLWJvb3QsIGFsb25nIHdpdGggYW55IG90aGVyIG9idmlvdXMgcGxhY2VzIGxpa2UgYC9ldGMvYXBwYXJtb3IuZC9gIGFuZCByZWxhdGVkIHN5c3RlbWQgc2VydmljZSBmaWxlcy4gUHJvYmFibHkgYSBnb29kIGlkZWEgdG8gY29uc3VsdCB0aGUgZGlzdHJpYnV0aW9uJiMzOTtzIGRvY3VtZW50YXRpb24gdG9vLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBkaXN0cm8tc3BlY2lmaWMgdHdlYWtzLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGF0IGNydWNpYWwgc2V0dGluZyB0aGF0IGZsaXBzIHRoZSBzd2l0Y2gsIHNvIEkgY2FuIGVuc3VyZSBBcHBBcm1vciBpcyBiZWhhdmluZyBhcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0VDVVJJVFlfQVBQQVJNT1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7QXBwQXJtb3Igc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjE4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cdGJvb2wgXCYjMzQ7QnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1ZyBjb2RlXCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMjktXHRib29sIFwmIzM0O0J1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM3LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzozODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfTUVTU0FHRVNcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzktXHRib29sIFwmIzM0O0RlYnVnIG1lc3NhZ2VzIGVuYWJsZWQgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDYtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9JTlRST1NQRUNUX1BPTElDWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7QWxsb3cgbG9hZGVkIHBvbGljeSB0byBiZSBpbnRyb3NwZWN0ZWRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTU4LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy02MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03MC1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NzE6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hfREVGQVVMVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03Mi0gICAgICAgYm9vbCBcJiMzNDtFbmFibGUgcG9saWN5IGhhc2ggaW50cm9zcGVjdGlvbiBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04My1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6ODQ6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0VYUE9SVF9CSU5BUllcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODUtXHRib29sIFwmIzM0O0FsbG93IGV4cG9ydGluZyB0aGUgcmF3IGJpbmFyeSBwb2xpY3lcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk1LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo5Njpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfUEFSQU5PSURfTE9BRFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cdGJvb2wgXCYjMzQ7UGVyZm9ybSBmdWxsIHZlcmlmaWNhdGlvbiBvZiBsb2FkZWQgcG9saWN5XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDYtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEwNzpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDgtXHR0cmlzdGF0ZSBcJiMzNDtCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIHRoZSBBcHBBcm1vciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB0aGUgYFNFQ1VSSVRZX0FQUEFSTU9SYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGUga2V5IGhlcmUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQXBwQXJtb3IuIEFuZCBsb29raW5nIGF0IHRoaXMsIHRoZSBmdW5jdGlvbiB0byByZWFsbHkgZGlzc2VjdCBpcyBgYWFfYWxsb2NfcHJvZmlsZWAuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB3aGVyZSB0aGlzIGFsbG9jYXRpb24gaXMgaGFwcGVuaW5nLgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb2RlIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgYWFfYWxsb2NfcHJvZmlsZWAuIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBnaXZlIG1lIG1vcmUgY29udGV4dCBmb3Igd2hhdOKAmXMgZ29pbmcgb24gYW5kIHdoZXJlIHRoZSBhbGxvY2F0aW9uIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93IHRvIGZpZ3VyZSBvdXQgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FhX2FsbG9jX3Byb2ZpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9hcHBhcm1vci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaD0yOTM9c3RydWN0IGFhX3J1bGVzZXQgKmFhX2FsbG9jX3J1bGVzZXQoZ2ZwX3QgZ2ZwKTtcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5Lmg6Mjk0OnN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oLTI5NS1cdFx0XHRcdCAgICBnZnBfdCBnZnApO1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTMyND12b2lkIGFhX2ZyZWVfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy0zNjYtLyoqXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzozNjc6ICogYWFfYWxsb2NfcHJvZmlsZSAtIGFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCByZXR1cm4gYSBuZXcgcHJvZmlsZVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY4LSAqIEBobmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSAgKE5PVCBOVUxMKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTM3My0gKi9cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM3NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTM3NS1cdFx0XHRcdCAgICBnZnBfdCBnZnApXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9Njk3PXN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19udWxsKHN0cnVjdCBhYV9wcm9maWxlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtNzAyLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NzAzOlx0cHJvZmlsZSA9IGFhX2FsbG9jX3Byb2ZpbGUobmFtZSwgTlVMTCwgZ2ZwKTtcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTcwNC1cdGlmICghcHJvZmlsZSlcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmM9MTExND1zdGF0aWMgc3RydWN0IGFhX3Byb2ZpbGUgKnVucGFja19wcm9maWxlKHN0cnVjdCBhYV9leHQgKmUsIGNoYXIgKipuc19uYW1lKVxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYy0xMTUyLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jOjExNTM6XHRwcm9maWxlID0gYWFfYWxsb2NfcHJvZmlsZShuYW1lLCBOVUxMLCBHRlBfS0VSTkVMKTtcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeV91bnBhY2suYy0xMTU0LVx0aWYgKCFwcm9maWxlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFwcEFybW9yIFBvbGljeSBMb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcgdGhlIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgYHVucGFja19wcm9maWxlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCB3aGVuIHBvbGljaWVzIGFyZSBsb2FkZWQgYW5kLCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgdGhlIG9uZSB0aGF0IGNhbGxzIGBhYV9hbGxvY19wcm9maWxlYC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBnb29kIHRhcmdldCB0byBzdGFydCB3aXRoLiBHaXZlbiB0aGUgY29udGV4dCwgYGFhX2FsbG9jX3Byb2ZpbGVgIGlzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24uCgpIYW5nIG9uIGEgc2Vjb25k4oCmSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHNjb3BpbmcgaGVyZS4gSXMgYGFhX2FsbG9jX3Byb2ZpbGVgIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIG9yIGlzIGl0IGludGVybmFsIHRvIEFwcEFybW9yPyBBaCwgeWVzLCBpdCYjMzk7cyBpbnRlcm5hbC4gTm93LCBgdW5wYWNrX3Byb2ZpbGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIG5vdCBoZWxwaW5nIG1lLiBIb3dldmVyLCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGBhYV9hbGxvY19udWxsYCBpcyBleHBvcnRlZC4gTGV0IG1lIGNvbmZpcm0gdGhhdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthYV9hbGxvY19udWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvYXBwYXJtb3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5Lmg9Mjk0PXN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oLTI5NS1cdFx0XHRcdCAgICBnZnBfdCBnZnApO1xuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaDoyOTY6c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX251bGwoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5LmgtMjk3LVx0XHRcdFx0IGdmcF90IGdmcCk7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9NTYyPXN0YXRpYyBzdHJ1Y3QgYWFfcG9saWN5ICpfX2NyZWF0ZV9taXNzaW5nX2FuY2VzdG9ycyhzdHJ1Y3QgYWFfbnMgKm5zLFxuLS1cbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTU4My1cdFx0XHRcdHJldHVybiBOVUxMO1xuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NTg0Olx0XHRcdHByb2ZpbGUgPSBhYV9hbGxvY19udWxsKHBhcmVudCwgbmFtZSwgZ2ZwKTtcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTU4NS1cdFx0XHRrZnJlZShuYW1lKTtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYz02Njg9c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2ZxbG9va3Vwbl9wcm9maWxlKHN0cnVjdCBhYV9sYWJlbCAqYmFzZSxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy02OTYtXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzo2OTc6c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX251bGwoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTY5OC1cdFx0XHRcdCBnZnBfdCBnZnApXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9NzQ1PXN0cnVjdCBhYV9wcm9maWxlICphYV9uZXdfbGVhcm5pbmdfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcGFyZW50LCBib29sIGhhdCxcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy03NzktXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzo3ODA6XHRwcm9maWxlID0gYWFfYWxsb2NfbnVsbChwYXJlbnQsIG5hbWUsIGdmcCk7XG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy03ODEtXHRpZiAoIXByb2ZpbGUpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X25zLmM9ODM9c3RhdGljIHN0cnVjdCBhYV9wcm9maWxlICphbGxvY191bmNvbmZpbmVkKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X25zLmMtODYtXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfbnMuYzo4NzpcdHByb2ZpbGUgPSBhYV9hbGxvY19udWxsKE5VTEwsIG5hbWUsIEdGUF9LRVJORUwpO1xuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X25zLmMtODgtXHRpZiAoIXByb2ZpbGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGFhX2FsbG9jX3Byb2ZpbGVgKioKClJpZ2h0LCBgYWFfYWxsb2NfcHJvZmlsZWAuLi4gdGhhdCYjMzk7cyBhIHNvbGlkIHN5bWJvbCB0byBzdGFydCB3aXRoLiBJdCYjMzk7cyBub3Qgc29tZXRoaW5nIGJha2VkIGludG8gdGhlIGNvcmUsIEkgcmVtZW1iZXIgdGhhdCBtdWNoLiBMZXQmIzM5O3Mgc2VlLi4uIGl0JiMzOTtzIGRlZmluZWQgaW4gYHNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jYC4gR29vZCwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSwgcmVsYXRlZCB0byB0aGUgcG9saWN5IGhhbmRsaW5nLiBOb3csIGJlZm9yZSBJIGRpZyBhbnkgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbiBzcGVjaWZpY2FsbHksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGBTRUNVUklUWV9BUFBBUk1PUmAuIE1ha2Ugc3VyZSBub3RoaW5nIGVsc2Ugd2lsbCBibG9jayB0aGUgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRUNVUklUWV9BUFBBUk1PUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBcHBBcm1vciBzdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI3LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7QnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1Z2dpbmcgYXNzZXJ0c1wmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjM4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19NRVNTQUdFU1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGVidWcgbWVzc2FnZXMgZW5hYmxlZCBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00Ni1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTgtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjU5OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTYwLVx0Ym9vbCBcJiMzNDtFbmFibGUgaW50cm9zcGVjdGlvbiBvZiBzaGEyNTYgaGFzaGVzIGZvciBsb2FkZWQgcHJvZmlsZXNcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcwLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcyLSAgICAgICBib29sIFwmIzM0O0VuYWJsZSBwb2xpY3kgaGFzaCBpbnRyb3NwZWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTgzLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7QWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTUtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk3LVx0Ym9vbCBcJiMzNDtQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNi1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTA3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9LVU5JVF9URVNUXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOC1cdHRyaXN0YXRlIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBwb2xpY3lfdW5wYWNrLmNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDcwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIFNFQ1VSSVRZX0FQUEFSTU9SKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFNFQ1VSSVRZX0FQUEFSTU9SYC4gSXQmIzM5O3MgYSBrZXkgc2VjdXJpdHkgY29tcG9uZW50LCBhbmQgYmVmb3JlIEkgY2FuIG1ha2UgYW55IGRlY2lzaW9ucyByZWdhcmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gb3IgaW5jbHVzaW9uLCBJIG5lZWQgdG8gc2VlIHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlLCBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCB0aGlzIHBsYWNlcyB0aGUgc2VjdXJpdHkgbWVjaGFuaXNtLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6CgoqICAgKipUaGUgU3BlY2lmaWMgS2VybmVsIE1vZHVsZXM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGRvZXMgYFNFQ1VSSVRZX0FQUEFSTU9SYCByZWx5IG9uPyBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyBmaWxlIHN5c3RlbSBzdXBwb3J0LCBwYXJ0aWN1bGFyIGtlcm5lbCBmZWF0dXJlcywgb3IgY2VydGFpbiBjYXBhYmlsaXRpZXM/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHBvdGVudGlhbCBjb25mbGljdHMgb3IgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4KKiAgICoqVGhlIEJyb2FkZXIgU2VjdXJpdHkgTGFuZHNjYXBlOioqIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhpZ2hsaWdodCBob3cgYFNFQ1VSSVRZX0FQUEFSTU9SYCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMuIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggU0VMaW51eCwgTFNNIGhvb2tzLCBvciBvdGhlciBzZWN1cml0eSBtb2R1bGVzPyBXaGF0IGlzIHRoZSBpbnRlbmRlZCBvdmVybGFwIGFuZCBkZXNpZ24gcGhpbG9zb3BoeT8KKiAgICoqUGVyZm9ybWFuY2UgSW1wbGljYXRpb25zOioqIEFyZSB0aGVyZSBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW50cm9kdWNlZCBieSB0aGVzZSBkZXBlbmRlbmNpZXM/IEtub3dpbmcgdGhpcyB1cCBmcm9udCBoZWxwcyBpbiBtYWtpbmcgZGVjaXNpb25zLgoqICAgKipVcGdyYWRlIFBhdGg6KiogSWYgdGhlIGRlcGVuZGVuY3kgbGlzdCBpbmNsdWRlcyB0aGluZ3MgSSYjMzk7bSBsb29raW5nIHRvIGRlcHJlY2F0ZSBvciBjaGFuZ2UsIHRoaXMgbGlzdCBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgY2hhbmdlcy4KKiAgICoqS2VybmVsIFZlcnNpb246KiogSSYjMzk7bGwgYWxzbyBiZSBtaW5kZnVsIG9mIHRoZSBtaW5pbXVtIGtlcm5lbCB2ZXJzaW9uIHJlcXVpcmVkLiBUaGlzIGFmZmVjdHMgY29tcGF0aWJpbGl0eSBhbmQsIHBvdGVudGlhbGx5LCB0aGUgZmVhdHVyZSBzZXQgYXZhaWxhYmxlLgoqICAgKipDb25maWd1cmF0aW9uIENvbmZsaWN0czoqKiBBcmUgdGhlcmUgYW55IGtub3duIGNvbmZsaWN0cyB3aXRoIG90aGVyIHNlY3VyaXR5IG9wdGlvbnMgb3Iga2VybmVsIGZlYXR1cmVzPwoKSW4gc2hvcnQsIGtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgU0VDVVJJVFlfQVBQQVJNT1JgIGlzIHRoZSBpbml0aWFsIHByZXJlcXVpc2l0ZSB0byBlbnN1cmUgdGhlIGRlc2lyZWQgc2VjdXJpdHkgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SXG4gICAzOlx0XHRib29sIFwmIzM0O0FwcEFybW9yIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFkgXHUwMDI2XHUwMDI2IE5FVFxuICAgNTpcdFx0c2VsZWN0IEFVRElUXG4gICA2Olx0XHRzZWxlY3QgU0VDVVJJVFlfUEFUSFxuICAgNzpcdFx0c2VsZWN0IFNFQ1VSSVRZRlNcbiAgIDg6XHRcdHNlbGVjdCBTRUNVUklUWV9ORVRXT1JLXG4gICA5Olx0XHRkZWZhdWx0IG5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUuXG4gIDEyOlx0XHQgIFJlcXVpcmVkIHVzZXJzcGFjZSB0b29scyAoaWYgdGhleSBhcmUgbm90IGluY2x1ZGVkIGluIHlvdXJcbiAgMTM6XHRcdCAgZGlzdHJpYnV0aW9uKSBhbmQgZnVydGhlciBpbmZvcm1hdGlvbiBtYXkgYmUgZm91bmQgYXRcbiAgMTQ6XHRcdCAgaHR0cDovL2FwcGFybW9yLndpa2kua2VybmVsLm9yZ1xuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xuICAxOTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEyNAoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEFwcEFybW9yIFNlY3VyaXR5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEFwcEFybW9yIHBhdGNoLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gYFNFQ1VSSVRZX0FQUEFSTU9SYCByZWxpZXMgb24gYm90aCBgU0VDVVJJVFlgIGFuZCBgTkVUYCwgc28gdGhvc2UgdGhyZWUgY29uZmlncyBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSByZWxldmFudC4gVGhlIGNlbnRyYWwgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBvbiBgYWFfYWxsb2NfcHJvZmlsZWAuIE15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGFhX2FsbG9jX3Byb2ZpbGVgIGR1cmluZyB0aGUgQXBwQXJtb3IgcG9saWN5IGxvYWRpbmcgcHJvY2Vzcy4gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhvc2UgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgZnV6emluZyBpdCBpcyBhIHNvbGlkIHN0cmF0ZWd5IHRvIGNvbmZpcm0gdGhhdCB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGh3YXlzIGFyZSB3b3JraW5nIGFzIGV4cGVjdGVkLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhpbmdzIGNvdWxkIGJyZWFrIG9yIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgYWFfYWxsb2NfcHJvZmlsZWAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGZvY2FsIHBvaW50LiAqWWVwKiwgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLiBFeGNlbGxlbnQuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCBub3RoaW5nIGVsc2Ugd2FzIHRvdWNoZWQgaW4gdGhlIHByb2Nlc3MuIE9rYXksIGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBgYWFfYWxsb2NfcHJvZmlsZWAgaW4gYHNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jYC4gR29vZCwgdGhhdCBtYWtlcyB0aGluZ3MgY2xlYW5lci4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZX0FQUEFSTU9SJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FhX2FsbG9jX3Byb2ZpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGFhX2FsbG9jX3Byb2ZpbGVgIGR1cmluZyBBcHBBcm1vciBwb2xpY3kgbG9hZGluZy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHBvbGljeSBsb2FkaW5nIGludGVyZmFjZXMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nIHRvIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0VDVVJJVFlfQVBQQVJNT1ImIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFfYWxsb2NfcHJvZmlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXG5cblNpbmNlIHRoZSBgcHJvZmlsZWAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19mbGV4KClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgaW5jb3JyZWN0IGVycm9yIGhhbmRsaW5nIChsaWtlIGludmFsaWQgZnJlZXMgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE3NThmMDE0OTA4MWY3MTQ3NjE1ODI5MTcwMzYzMGM3MTY2ZTMyODUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxNTo0MTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMKaW5kZXggOTRiNGE3ZTcyN2NjMS4uN2VjNDNhNDkxMDM1YSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMKQEAgLTM4NSwyMSAmIzQzOzM4NSwyMSBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSwKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoIWFhX3BvbGljeV9pbml0KCZhbXA7cHJvZmlsZS0mZ3Q7YmFzZSwgTlVMTCwgaG5hbWUsIGdmcCkpCi0JCWdvdG8gZmFpbDsKJiM0MzsJCWdvdG8gZmFpbF9wcm9maWxlOwogCWlmICghYWFfbGFiZWxfaW5pdCgmYW1wO3Byb2ZpbGUtJmd0O2xhYmVsLCAxLCBnZnApKQotCQlnb3RvIGZhaWw7CiYjNDM7CQlnb3RvIGZhaWxfcG9saWN5OwogCiAJLyogYWxsb2NhdGUgdGhlIGZpcnN0IHJ1bGVzZXQsIGJ1dCBsZWF2ZSBpdCBlbXB0eSAqLwogCXByb2ZpbGUtJmd0O2xhYmVsLnJ1bGVzWzBdID0gYWFfYWxsb2NfcnVsZXNldChnZnApOwogCWlmICghcHJvZmlsZS0mZ3Q7bGFiZWwucnVsZXNbMF0pCi0JCWdvdG8gZmFpbDsKJiM0MzsJCWdvdG8gZmFpbF9sYWJlbDsKIAlwcm9maWxlLSZndDtuX3J1bGVzID0gMTsKIAogCS8qIHVwZGF0ZSBiZWluZyBzZXQgbmVlZGVkIGJ5IGZzIGludGVyZmFjZSAqLwogCWlmICghcHJveHkpIHsKIAkJcHJveHkgPSBhYV9hbGxvY19wcm94eSgmYW1wO3Byb2ZpbGUtJmd0O2xhYmVsLCBnZnApOwogCQlpZiAoIXByb3h5KQotCQkJZ290byBmYWlsOwomIzQzOwkJCWdvdG8gZmFpbF9ydWxlczsKIAl9IGVsc2UKIAkJYWFfZ2V0X3Byb3h5KHByb3h5KTsKIAlwcm9maWxlLSZndDtsYWJlbC5wcm94eSA9IHByb3h5OwpAQCAtNDEyLDggJiM0Mzs0MTIsMTQgQEAgc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqaG5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksCiAJLyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovCiAJcmV0dXJuIHByb2ZpbGU7CiAKLWZhaWw6Ci0JYWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpOwomIzQzO2ZhaWxfcnVsZXM6CiYjNDM7CWZyZWVfcnVsZXNldChwcm9maWxlLSZndDtsYWJlbC5ydWxlc1swXSk7CiYjNDM7ZmFpbF9sYWJlbDoKJiM0MzsJYWFfbGFiZWxfZGVzdHJveSgmYW1wO3Byb2ZpbGUtJmd0O2xhYmVsKTsKJiM0MztmYWlsX3BvbGljeToKJiM0MzsJYWFfcG9saWN5X2Rlc3Ryb3koJmFtcDtwcm9maWxlLSZndDtiYXNlKTsKJiM0MztmYWlsX3Byb2ZpbGU6CiYjNDM7CWtmcmVlX3NlbnNpdGl2ZShwcm9maWxlKTsKIAogCXJldHVybiBOVUxMOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgQXBwQXJtb3IgU2VjdXJpdHkgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGFhX2FsbG9jX3Byb2ZpbGVgIGluIHRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUuIFRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGEgc2ltcGxlIGBnb3RvIGZhaWw7YCB3aXRoIGEgbW9yZSBkZXRhaWxlZCBlcnJvciBoYW5kbGluZyBzZXF1ZW5jZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYnJlYWtpbmcgZG93biB0aGUgY2xlYW51cCBwcm9jZXNzIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIHByb2ZpbGUgYWxsb2NhdGlvbi4KCkluaXRpYWxseSwgSSYjMzk7bSB0aGlua2luZywgdGhpcyBgZ290byBmYWlsO2Agd2FzIHByZXZpb3VzbHkgY2FsbGluZyBgYWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpO2AuIE15IGV4cGVydCBpbnR1aXRpb24gaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcy4gV2h5IHRoZSBjaGFuZ2U/IEl0IHNjcmVhbXMgbWVtb3J5IGxlYWsgb3IgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUvdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gaW4gdGhlIHByZXZpb3VzIGVycm9yIHBhdGguCgpOb3cgSSYjMzk7bSBkaWdnaW5nIGRlZXBlciwgTGV0JiMzOTtzIGNoZWNrIHdoYXQgYGFhX2ZyZWVfcHJvZmlsZWAgYWN0dWFsbHkgKmRvZXMqLiBJZiBpdCBleHBlY3RzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHByb2ZpbGVgIHN0cnVjdCwgdGhlbiBjYWxsaW5nIGl0IG9uIGEgcGFydGlhbGx5IGJ1aWx0IG9iamVjdCBjb3VsZCBiZSBhIGRpc2FzdGVyLiBJdCBjb3VsZCB0cnkgdG8gZnJlZSBpbnZhbGlkIG9yIHVuaW5pdGlhbGl6ZWQgcG9pbnRlcnMuCgpXYWl0IGEgbW9tZW50LCBJIHRoaW5rIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlLiBMb29raW5nIGJhY2sgYXQgYGFhX2FsbG9jX3Byb2ZpbGVgLi4uIEFoLCB5ZXMhIGBwcm9maWxlYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBga3phbGxvY2AgemVyb2VzIHRoZSBtZW1vcnkuIFNvLCBpZiBgYWFfZnJlZV9wcm9maWxlYCBhc3N1bWVzIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQsIHRoZW4gb24gZmFpbHVyZSBpdCBtaWdodCB0cnkgdG8gYGtmcmVlKClgIHBvaW50ZXJzIHRoYXQgd2VyZSBuZXZlciBhY3R1YWxseSBhbGxvY2F0ZWQsIG9yIHBvaW50IHRvIGdhcmJhZ2UuIFRoZSBuZXcgY29kZSBzZWVtcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBzZWxlY3RpdmVseSBmcmVlIHRoZSBhbGxvY2F0ZWQgcGllY2VzIHdoaWNoIGlzIGEgbXVjaCBzYWZlciBhcHByb2FjaC4gVGltZSB0byBjb25maXJtIG15IHN1c3BpY2lvbiBieSB0aG9yb3VnaGx5IGNoZWNraW5nIGBhYV9hbGxvY19wcm9maWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0ICogQGdmcDogYWxsb2NhdGlvbiB0eXBlXG4gMzcxOlx0ICpcbiAzNzI6XHQgKiBSZXR1cm5zOiByZWZjb3VudCBwcm9maWxlIG9yIE5VTEwgb24gZmFpbHVyZVxuIDM3MzpcdCAqL1xuIDM3NDpcdHN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKmhuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxuIDM3NTpcdFx0XHRcdFx0ICAgIGdmcF90IGdmcClcbiAzNzY6XHR7XG4gMzc3Olx0XHRzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTtcbiAzNzg6XHRcbiAzNzk6XHRcdC8qIGZyZWVkIGJ5IGZyZWVfcHJvZmlsZSAtIHVzdWFsbHkgdGhyb3VnaCBhYV9wdXRfcHJvZmlsZVxuIDM4MDpcdFx0ICogdGhpcyBhZGRzIHNwYWNlIGZvciBhIHNpbmdsZSBydWxlc2V0IGluIHRoZSBydWxlcyBzZWN0aW9uIG9mIHRoZVxuIDM4MTpcdFx0ICogbGFiZWxcbiAzODI6XHRcdCAqL1xuIDM4MzpcdFx0cHJvZmlsZSA9IGt6YWxsb2NfZmxleCgqcHJvZmlsZSwgbGFiZWwucnVsZXMsIDEsIGdmcCk7XG4gMzg0Olx0XHRpZiAoIXByb2ZpbGUpXG4gMzg1Olx0XHRcdHJldHVybiBOVUxMO1xuIDM4NjpcdFxuIDM4NzpcdFx0aWYgKCFhYV9wb2xpY3lfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UsIE5VTEwsIGhuYW1lLCBnZnApKVxuIDM4ODpcdFx0XHRnb3RvIGZhaWxfcHJvZmlsZTtcbiAzODk6XHRcdGlmICghYWFfbGFiZWxfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsLCAxLCBnZnApKVxuIDM5MDpcdFx0XHRnb3RvIGZhaWxfcG9saWN5O1xuIDM5MTpcdFxuIDM5MjpcdFx0LyogYWxsb2NhdGUgdGhlIGZpcnN0IHJ1bGVzZXQsIGJ1dCBsZWF2ZSBpdCBlbXB0eSAqL1xuIDM5MzpcdFx0cHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSA9IGFhX2FsbG9jX3J1bGVzZXQoZ2ZwKTtcbiAzOTQ6XHRcdGlmICghcHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSlcbiAzOTU6XHRcdFx0Z290byBmYWlsX2xhYmVsO1xuIDM5NjpcdFx0cHJvZmlsZS1cdTAwM2VuX3J1bGVzID0gMTtcbiAzOTc6XHRcbiAzOTg6XHRcdC8qIHVwZGF0ZSBiZWluZyBzZXQgbmVlZGVkIGJ5IGZzIGludGVyZmFjZSAqL1xuIDM5OTpcdFx0aWYgKCFwcm94eSkge1xuIDQwMDpcdFx0XHRwcm94eSA9IGFhX2FsbG9jX3Byb3h5KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwsIGdmcCk7XG4gNDAxOlx0XHRcdGlmICghcHJveHkpXG4gNDAyOlx0XHRcdFx0Z290byBmYWlsX3J1bGVzO1xuIDQwMzpcdFx0fSBlbHNlXG4gNDA0Olx0XHRcdGFhX2dldF9wcm94eShwcm94eSk7XG4gNDA1Olx0XHRwcm9maWxlLVx1MDAzZWxhYmVsLnByb3h5ID0gcHJveHk7XG4gNDA2Olx0XG4gNDA3Olx0XHRwcm9maWxlLVx1MDAzZWxhYmVsLmhuYW1lID0gcHJvZmlsZS1cdTAwM2ViYXNlLmhuYW1lO1xuIDQwODpcdFx0cHJvZmlsZS1cdTAwM2VsYWJlbC5mbGFncyB8PSBGTEFHX1BST0ZJTEU7XG4gNDA5Olx0XHRwcm9maWxlLVx1MDAzZWxhYmVsLnZlY1swXSA9IHByb2ZpbGU7XG4gNDEwOlx0XG4gNDExOlx0XHRwcm9maWxlLVx1MDAzZXNpZ25hbCA9IFNJR0tJTEw7XG4gNDEyOlx0XHQvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi9cbiA0MTM6XHRcdHJldHVybiBwcm9maWxlO1xuIDQxNDpcdFxuIDQxNTpcdGZhaWxfcnVsZXM6XG4gNDE2Olx0XHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSk7XG4gNDE3Olx0ZmFpbF9sYWJlbDpcbiA0MTg6XHRcdGFhX2xhYmVsX2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2VsYWJlbCk7XG4gNDE5Olx0ZmFpbF9wb2xpY3k6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NDkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBGaXgqKgoKT2theSwgc28gdGhlIGNvZGUmIzM5O3MgdXNpbmcgYGt6YWxsb2NfZmxleGAgdG8gYWxsb2NhdGUgbWVtb3J5LCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGFsbG9jYXRpb24gaXMgemVyby1pbml0aWFsaXplZC4gVGhpcyBpcyBhIGh1Z2UgY2x1ZS4gVGhlIGJ1ZyBiZWluZyBhZGRyZXNzZWQgKmhhcyogdG8gYmUgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyBpbiB0aGUgYGFhX2ZyZWVfcHJvZmlsZWAgZnVuY3Rpb24uIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgYSBkb3VibGUtZnJlZSwgdXNlLWFmdGVyLWZyZWUsIG9yIGEgbGVhayDigJMgc29tZXRoaW5nIGZ1bmt5IGhhcHBlbmluZyBkdXJpbmcgYW4gZXJyb3IgcGF0aC4KCkxldCBtZSB0aGlua+KApiBgYWFfZnJlZV9wcm9maWxlYCBwcm9iYWJseSBjYWxscyBvdGhlciBjbGVhbnVwIGZ1bmN0aW9ucywgbGlrZSBgYWFfcG9saWN5X2Rlc3Ryb3lgIG9yIGBhYV9sYWJlbF9kZXN0cm95YC4gSWYgYGFhX3BvbGljeV9pbml0YCAob3Igc29tZXRoaW5nIHNpbWlsYXIpIGZhaWxzLCBgYWFfZnJlZV9wcm9maWxlYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgdG8gY2xlYW4gdXAuIFRoZSBwcm9ibGVtIHRoZW4gaXMgdGhhdCwgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBlcnJvciwgYGFhX2ZyZWVfcHJvZmlsZWAgbWF5IHRyeSB0byBkZXN0cm95IHNvbWV0aGluZyB0aGF0IHdhcyBuZXZlciBwcm9wZXJseSBpbml0aWFsaXplZCwgb3IgbWF5YmUgaXQgdHJpZXMgdG8gZnJlZSBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGRvZXNuJiMzOTt0IGV4aXN0LiBTaW5jZSB0aGUgbWVtb3J5IGlzICp6ZXJvZWQqLCBpdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIGRlcmVmZXJlbmNlIG9yIGZyZWUgYSBOVUxMIHBvaW50ZXIsIG9yIG1heWJlIGl0JiMzOTtzIGRyb3BwaW5nIGEgcmVmY291bnQgdGhhdCBuZXZlciBnb3Qgc2V0IGluIHRoZSBmaXJzdCBwbGFjZS4KCkVzc2VudGlhbGx5LCB0aGlzIGZpeCBpcyBhbGwgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLCBzcGVjaWZpY2FsbHkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIGFuZCB0aGUgY29kZSYjMzk7cyByZXNpbGllbmNlIGluIHRoZSBmYWNlIG9mIGVycm9ycy4gVGhpcyAqaXNuJiMzOTt0KiBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIOKAkyBubyBjaGFuY2UuIFRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gbm8gaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuCgpBbmQgdGhhdCYjMzk7cyB3aHkgS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIFRoZSBtZW1vcnkmIzM5O3MgYWxyZWFkeSB6ZXJvZWQuIEtBU0FOIGlzIHRoZSB0b29sIHdlIHdhbnQ6IEtBU0FOIHdpbGwgYmUgdGhlIHRoaW5nIHRvIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHNpbWlsYXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIHRoYXQgYXJlIGNhdXNlZCBieSB0aGUgaW5pdGlhbGl6YXRpb24gZXJyb3JzIHRoYXQgbGVkIHRvIHRoaXMgZXJyb3IgcGF0aC4KCkkmIzM5O20gZ29pbmcgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBgYWFfZnJlZV9wcm9maWxlYCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0a2ZyZWVfc2Vuc2l0aXZlKHJ1bGVzLVx1MDAzZXNlY21hcmtbaV0ubGFiZWwpO1xuIDMwMTpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHJ1bGVzLVx1MDAzZXNlY21hcmspO1xuIDMwMjpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHJ1bGVzKTtcbiAzMDM6XHR9XG4gMzA0Olx0XG4gMzA1Olx0c3RydWN0IGFhX3J1bGVzZXQgKmFhX2FsbG9jX3J1bGVzZXQoZ2ZwX3QgZ2ZwKVxuIDMwNjpcdHtcbiAzMDc6XHRcdHN0cnVjdCBhYV9ydWxlc2V0ICpydWxlcztcbiAzMDg6XHRcbiAzMDk6XHRcdHJ1bGVzID0ga3phbGxvY19vYmooKnJ1bGVzLCBnZnApO1xuIDMxMDpcdFxuIDMxMTpcdFx0cmV0dXJuIHJ1bGVzO1xuIDMxMjpcdH1cbiAzMTM6XHRcbiAzMTQ6XHQvKipcbiAzMTU6XHQgKiBhYV9mcmVlX3Byb2ZpbGUgLSBmcmVlIGEgcHJvZmlsZVxuIDMxNjpcdCAqIEBwcm9maWxlOiB0aGUgcHJvZmlsZSB0byBmcmVlICAoTUFZQkUgTlVMTClcbiAzMTc6XHQgKlxuIDMxODpcdCAqIEZyZWUgYSBwcm9maWxlLCBpdHMgaGF0cyBhbmQgbnVsbF9wcm9maWxlLiBBbGwgcmVmZXJlbmNlcyB0byB0aGUgcHJvZmlsZSxcbiAzMTk6XHQgKiBpdHMgaGF0cyBhbmQgbnVsbF9wcm9maWxlIG11c3QgaGF2ZSBiZWVuIHB1dC5cbiAzMjA6XHQgKlxuIDMyMTpcdCAqIElmIHRoZSBwcm9maWxlIHdhcyByZWZlcmVuY2VkIGZyb20gYSB0YXNrIGNvbnRleHQsIGZyZWVfcHJvZmlsZSgpIHdpbGxcbiAzMjI6XHQgKiBiZSBjYWxsZWQgZnJvbSBhbiByY3UgY2FsbGJhY2sgcm91dGluZSwgc28gd2UgbXVzdCBub3Qgc2xlZXAgaGVyZS5cbiAzMjM6XHQgKi9cbiAzMjQ6XHR2b2lkIGFhX2ZyZWVfcHJvZmlsZShzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSlcbiAzMjU6XHR7XG4gMzI2Olx0XHRzdHJ1Y3Qgcmhhc2h0YWJsZSAqcmh0O1xuIDMyNzpcdFxuIDMyODpcdFx0QUFfREVCVUcoREVCVUdfUE9MSUNZLCBcJiMzNDslcyglcClcXG5cJiMzNDssIF9fZnVuY19fLCBwcm9maWxlKTtcbiAzMjk6XHRcbiAzMzA6XHRcdGlmICghcHJvZmlsZSlcbiAzMzE6XHRcdFx0cmV0dXJuO1xuIDMzMjpcdFxuIDMzMzpcdFx0LyogZnJlZSBjaGlsZHJlbiBwcm9maWxlcyAqL1xuIDMzNDpcdFx0YWFfcG9saWN5X2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2ViYXNlKTtcbiAzMzU6XHRcdGFhX3B1dF9wcm9maWxlKHJjdV9hY2Nlc3NfcG9pbnRlcihwcm9maWxlLVx1MDAzZXBhcmVudCkpO1xuIDMzNjpcdFxuIDMzNzpcdFx0YWFfcHV0X25zKHByb2ZpbGUtXHUwMDNlbnMpO1xuIDMzODpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUtXHUwMDNlcmVuYW1lKTtcbiAzMzk6XHRcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlLVx1MDAzZWRpc2Nvbm5lY3RlZCk7XG4gMzQwOlx0XG4gMzQxOlx0XHRmcmVlX2F0dGFjaG1lbnQoXHUwMDI2cHJvZmlsZS1cdTAwM2VhdHRhY2gpO1xuIDM0MjpcdFxuIDM0MzpcdFx0LypcbiAzNDQ6XHRcdCAqIGF0IHRoaXMgcG9pbnQgdGhlcmUgYXJlIG5vIHRhc2tzIHRoYXQgY2FuIGhhdmUgYSByZWZlcmVuY2VcbiAzNDU6XHRcdCAqIHRvIHJ1bGVzXG4gMzQ2Olx0XHQgKi9cbiAzNDc6XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBwcm9maWxlLVx1MDAzZW5fcnVsZXM7IGkmIzQzOyYjNDM7KVxuIDM0ODpcdFx0XHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1tpXSk7XG4gMzQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYWFfZnJlZV9wcm9maWxlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWFfZnJlZV9wcm9maWxlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgY2FsbGluZyBgYWFfcG9saWN5X2Rlc3Ryb3koJmFtcDtwcm9maWxlLSZndDtiYXNlKWAuIE5vdywgSSYjMzk7bSBpbW1lZGlhdGVseSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIGlmIGBhYV9wb2xpY3lfaW5pdGAgZmFpbGVkIGVhcmxpZXIuIENvdWxkIGBwcm9maWxlLSZndDtiYXNlYCBiZSBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCwgZXZlbiB0aG91Z2ggaXQgd2FzIHByb2JhYmx5IHplcm9lZD8KCkJ1dCBoYW5nIG9uLCB0aGVyZSYjMzk7cyBtb3JlLiBJdCBhbHNvIGNhbGxzIGBhYV9wdXRfcHJvZmlsZShyY3VfYWNjZXNzX3BvaW50ZXIocHJvZmlsZS0mZ3Q7cGFyZW50KSlgLiBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgcGFyZW50IHByb2ZpbGUuIEFuZCBpdCBhbHNvIGNhbGxzIGBhYV9wdXRfbnMocHJvZmlsZS0mZ3Q7bnMpYC4gR29vZCwgSSByZW1lbWJlciB0aGF0IGBhYV9wdXRfbnNgIGhhbmRsZXMgYSBOVUxMIGBuc2AgcG9pbnRlci4gQnV0IGlmIGBhYV9wb2xpY3lfaW5pdGAgZmFpbGVkLCBgcHJvZmlsZS0mZ3Q7bnNgICpjb3VsZCogYmUgTlVMTC4gQXQgbGVhc3QgdGhhdCBzaG91bGQgYmUgc2FmZS4KCldhaXQsIEkgc2VlIGl0IGFsc28gY2FsbHMgYGFhX2xhYmVsX2Rlc3Ryb3koJmFtcDtwcm9maWxlLSZndDtsYWJlbClgLiBUaGF0JiMzOTtzIGFub3RoZXIgcG90ZW50aWFsIGFyZWEgb2YgY29uY2VybiBpZiBgYWFfcG9saWN5X2luaXRgIGVuY291bnRlcmVkIGFuIGlzc3VlLiBJJiMzOTtkIGJldHRlciB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgYGFhX2ZyZWVfcHJvZmlsZWAgZnVuY3Rpb24gdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUtXHUwMDNlZGlybmFtZSk7XG4gMzUxOlx0XG4gMzUyOlx0XHRpZiAocHJvZmlsZS1cdTAwM2VkYXRhKSB7XG4gMzUzOlx0XHRcdHJodCA9IHByb2ZpbGUtXHUwMDNlZGF0YTtcbiAzNTQ6XHRcdFx0cHJvZmlsZS1cdTAwM2VkYXRhID0gTlVMTDtcbiAzNTU6XHRcdFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KHJodCwgYWFfZnJlZV9kYXRhLCBOVUxMKTtcbiAzNTY6XHRcdFx0a2ZyZWVfc2Vuc2l0aXZlKHJodCk7XG4gMzU3Olx0XHR9XG4gMzU4Olx0XG4gMzU5Olx0XHRrZnJlZV9zZW5zaXRpdmUocHJvZmlsZS1cdTAwM2VoYXNoKTtcbiAzNjA6XHRcdGFhX3B1dF9wcm9maWxlX2xvYWRkYXRhKHByb2ZpbGUtXHUwMDNlcmF3ZGF0YSk7XG4gMzYxOlx0XHRhYV9sYWJlbF9kZXN0cm95KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwpO1xuIDM2MjpcdFxuIDM2MzpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUpO1xuIDM2NDpcdH1cbiAzNjU6XHRcbiAzNjY6XHQvKipcbiAzNjc6XHQgKiBhYV9hbGxvY19wcm9maWxlIC0gYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIHJldHVybiBhIG5ldyBwcm9maWxlXG4gMzY4Olx0ICogQGhuYW1lOiBuYW1lIG9mIHRoZSBwcm9maWxlICAoTk9UIE5VTEwpXG4gMzY5Olx0ICogQHByb3h5OiBwcm94eSB0byB1c2UgT1IgbnVsbCBpZiB0byBhbGxvY2F0ZSBhIG5ldyBvbmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyMwoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiA0OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEVycm9yIEhhbmRsaW5nIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZS4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYGFhX2ZyZWVfcHJvZmlsZWAgaXMgYmVpbmcgY2FsbGVkIG9uIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIGBwcm9maWxlYCBzdHJ1Y3QgaW4gY2VydGFpbiBlcnJvciBwYXRocy4gU3BlY2lmaWNhbGx5LCBpZiBgYWFfcG9saWN5X2luaXRgIG9yIGBhYV9sYWJlbF9pbml0YCBmYWlsIGR1cmluZyBwcm9maWxlIHNldHVwLCBgcHJvZmlsZS0mZ3Q7YmFzZWAgb3IgYHByb2ZpbGUtJmd0O2xhYmVsYCBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQsIHJlc3BlY3RpdmVseS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2V0dXAgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHdvZXMuIENhbGxpbmcgYGFhX2xhYmVsX2Rlc3Ryb3lgIG9uIGFuIHVuaW5pdGlhbGl6ZWQgbGFiZWwsIGV2ZW4gaWYgaXQmIzM5O3MgemVyb2VkLCBjb3VsZCBsZWFkIHRvIGlzc3VlcywgcG90ZW50aWFsbHkgdHJ5aW5nIHRvIGZyZWUgdGhpbmdzIHRoYXQgZG9uJiMzOTt0IGV4aXN0IG9yIG1lc3Npbmcgd2l0aCByZWZlcmVuY2UgY291bnRzIGFuZCBgbGFiZWwtJmd0O3J1bGVzYCBvciBgbGFiZWwtJmd0O3Byb3h5YC4KClRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoaXMgYnkgaW50cm9kdWNpbmcgbW9yZSBncmFudWxhciBlcnJvciBsYWJlbHMuIEluc3RlYWQgb2YganVzdCBhIHNpbmdsZSBgZ290byBmYWlsO2AgdGhhdCBqdW1wcyBzdHJhaWdodCB0byBgYWFfZnJlZV9wcm9maWxlYCwgaXQgdXNlcyBsYWJlbHMgbGlrZSBgZmFpbF9ydWxlc2AsIGBmYWlsX2xhYmVsYCwgYW5kIGBmYWlsX3BvbGljeWAgdG8gaGFuZGxlIGVhY2ggaW5pdGlhbGl6YXRpb24gc3RlcCYjMzk7cyBmYWlsdXJlIGluZGl2aWR1YWxseS4gVGhpcyBwcmV2ZW50cyBgYWFfZnJlZV9wcm9maWxlYCBmcm9tIGJlaW5nIGNhbGxlZCBwcmVtYXR1cmVseSBvbiBhIHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBwcm9maWxlLiBUaGlzIG1lYW5zIHRoZSBmaXggaXMgYWRkcmVzc2luZyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgaW52YWxpZCBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWVzLCB3aGljaCBhcmUgYWxsIHByZXR0eSBuYXN0eSBtZW1vcnkgbWFuYWdlbWVudCBidWdzLgoKTm93LCBiZWNhdXNlIHRoZSBgcHJvZmlsZWAgc3RydWN0IGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX2ZsZXhgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnksIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIGxlYWtlZCB0byB1c2Vyc3BhY2UsIG9yIGluZmx1ZW5jaW5nIGNvbnRyb2wgZmxvdy4gVGhhdCBtZWFucyB3ZSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGluIHRoaXMgc3BlY2lmaWMgY2FzZS4gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGNhdGNoIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBpbmNvcnJlY3QgbWVtb3J5IG1hbmFnZW1lbnQsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBpbnZhbGlkIGZyZWVzLiBUaGVyZWZvcmUsIGEgc3BlY2lhbGl6ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbiYjMzk7dCByZXF1aXJlZCBoZXJlOyB0aGUgc3RhbmRhcmQgdG9vbHMgc2hvdWxkIGRvIHRoZSBqb2IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE1OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXG5cblNpbmNlIHRoZSBgcHJvZmlsZWAgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19mbGV4KClgICh3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBtZW1vcnkpLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgaW5jb3JyZWN0IGVycm9yIGhhbmRsaW5nIChsaWtlIGludmFsaWQgZnJlZXMgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZSgpYCBieSByZXBsYWNpbmcgYSBzaW5nbGUgYGdvdG8gZmFpbDtgICh3aGljaCBjYWxsZWQgYGFhX2ZyZWVfcHJvZmlsZSgpYCkgd2l0aCBncmFudWxhciBlcnJvciBsYWJlbHMgKGBmYWlsX3J1bGVzYCwgYGZhaWxfbGFiZWxgLCBgZmFpbF9wb2xpY3lgLCBgZmFpbF9wcm9maWxlYCkuIGBhYV9mcmVlX3Byb2ZpbGUoKWAgYXNzdW1lcyB0aGF0IHRoZSBgcHJvZmlsZWAgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkLiBDYWxsaW5nIGl0IG9uIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0cnVjdHVyZSBjYW4gbGVhZCB0byBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbnZhbGlkIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZXMuIFxuXG5TaW5jZSB0aGUgYHByb2ZpbGVgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NfZmxleCgpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIGluY29ycmVjdCBlcnJvciBoYW5kbGluZyAobGlrZSBpbnZhbGlkIGZyZWVzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTowMS44NjQ3MzE4NjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTg5NDc4NjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWV9BUFBBUk1PUlwiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFhX2FsbG9jX3Byb2ZpbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXFxuXFxuU2luY2UgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX2ZsZXgoKWAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZSBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcgKGxpa2UgaW52YWxpZCBmcmVlcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTowMS44NjQ3MzgwNDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzQ4MDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE3NThmMDE0OTA4MWY3MTQ3NjE1ODI5MTcwMzYzMGM3MTY2ZTMyODVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTU6NDE6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xcbmluZGV4IDk0YjRhN2U3MjdjYzEuLjdlYzQzYTQ5MTAzNWEgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcXG4rKysgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xcbkBAIC0zODUsMjEgKzM4NSwyMSBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRpZiAoIWFhX3BvbGljeV9pbml0KFxcdTAwMjZwcm9maWxlLVxcdTAwM2ViYXNlLCBOVUxMLCBobmFtZSwgZ2ZwKSlcXG4tXFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRnb3RvIGZhaWxfcHJvZmlsZTtcXG4gXFx0aWYgKCFhYV9sYWJlbF9pbml0KFxcdTAwMjZwcm9maWxlLVxcdTAwM2VsYWJlbCwgMSwgZ2ZwKSlcXG4tXFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRnb3RvIGZhaWxfcG9saWN5O1xcbiBcXG4gXFx0LyogYWxsb2NhdGUgdGhlIGZpcnN0IHJ1bGVzZXQsIGJ1dCBsZWF2ZSBpdCBlbXB0eSAqL1xcbiBcXHRwcm9maWxlLVxcdTAwM2VsYWJlbC5ydWxlc1swXSA9IGFhX2FsbG9jX3J1bGVzZXQoZ2ZwKTtcXG4gXFx0aWYgKCFwcm9maWxlLVxcdTAwM2VsYWJlbC5ydWxlc1swXSlcXG4tXFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRnb3RvIGZhaWxfbGFiZWw7XFxuIFxcdHByb2ZpbGUtXFx1MDAzZW5fcnVsZXMgPSAxO1xcbiBcXG4gXFx0LyogdXBkYXRlIGJlaW5nIHNldCBuZWVkZWQgYnkgZnMgaW50ZXJmYWNlICovXFxuIFxcdGlmICghcHJveHkpIHtcXG4gXFx0XFx0cHJveHkgPSBhYV9hbGxvY19wcm94eShcXHUwMDI2cHJvZmlsZS1cXHUwMDNlbGFiZWwsIGdmcCk7XFxuIFxcdFxcdGlmICghcHJveHkpXFxuLVxcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0XFx0Z290byBmYWlsX3J1bGVzO1xcbiBcXHR9IGVsc2VcXG4gXFx0XFx0YWFfZ2V0X3Byb3h5KHByb3h5KTtcXG4gXFx0cHJvZmlsZS1cXHUwMDNlbGFiZWwucHJveHkgPSBwcm94eTtcXG5AQCAtNDEyLDggKzQxMiwxNCBAQCBzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG4gXFx0LyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovXFxuIFxcdHJldHVybiBwcm9maWxlO1xcbiBcXG4tZmFpbDpcXG4tXFx0YWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpO1xcbitmYWlsX3J1bGVzOlxcbitcXHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cXHUwMDNlbGFiZWwucnVsZXNbMF0pO1xcbitmYWlsX2xhYmVsOlxcbitcXHRhYV9sYWJlbF9kZXN0cm95KFxcdTAwMjZwcm9maWxlLVxcdTAwM2VsYWJlbCk7XFxuK2ZhaWxfcG9saWN5OlxcbitcXHRhYV9wb2xpY3lfZGVzdHJveShcXHUwMDI2cHJvZmlsZS1cXHUwMDNlYmFzZSk7XFxuK2ZhaWxfcHJvZmlsZTpcXG4rXFx0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUpO1xcbiBcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MDIuMzM5MDM0ODA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzcxNDUzMzkyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0VDVVJJVFlfQVBQQVJNT1JcIixcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYV9hbGxvY19wcm9maWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGFhX2FsbG9jX3Byb2ZpbGVgIGR1cmluZyBBcHBBcm1vciBwb2xpY3kgbG9hZGluZy4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHBvbGljeSBsb2FkaW5nIGludGVyZmFjZXMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nIHRvIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc1OGYwMTQ5MDgxZjcxNDc2MTU4MjkxNzAzNjMwYzcxNjZlMzI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE1OjQxOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xuaW5kZXggOTRiNGE3ZTcyN2NjMS4uN2VjNDNhNDkxMDM1YSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXG4rKysgYi9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1xuQEAgLTM4NSwyMSArMzg1LDIxIEBAIHN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKmhuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGlmICghYWFfcG9saWN5X2luaXQoXHUwMDI2cHJvZmlsZS1cdTAwM2ViYXNlLCBOVUxMLCBobmFtZSwgZ2ZwKSlcbi1cdFx0Z290byBmYWlsO1xuK1x0XHRnb3RvIGZhaWxfcHJvZmlsZTtcbiBcdGlmICghYWFfbGFiZWxfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsLCAxLCBnZnApKVxuLVx0XHRnb3RvIGZhaWw7XG4rXHRcdGdvdG8gZmFpbF9wb2xpY3k7XG4gXG4gXHQvKiBhbGxvY2F0ZSB0aGUgZmlyc3QgcnVsZXNldCwgYnV0IGxlYXZlIGl0IGVtcHR5ICovXG4gXHRwcm9maWxlLVx1MDAzZWxhYmVsLnJ1bGVzWzBdID0gYWFfYWxsb2NfcnVsZXNldChnZnApO1xuIFx0aWYgKCFwcm9maWxlLVx1MDAzZWxhYmVsLnJ1bGVzWzBdKVxuLVx0XHRnb3RvIGZhaWw7XG4rXHRcdGdvdG8gZmFpbF9sYWJlbDtcbiBcdHByb2ZpbGUtXHUwMDNlbl9ydWxlcyA9IDE7XG4gXG4gXHQvKiB1cGRhdGUgYmVpbmcgc2V0IG5lZWRlZCBieSBmcyBpbnRlcmZhY2UgKi9cbiBcdGlmICghcHJveHkpIHtcbiBcdFx0cHJveHkgPSBhYV9hbGxvY19wcm94eShcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsLCBnZnApO1xuIFx0XHRpZiAoIXByb3h5KVxuLVx0XHRcdGdvdG8gZmFpbDtcbitcdFx0XHRnb3RvIGZhaWxfcnVsZXM7XG4gXHR9IGVsc2VcbiBcdFx0YWFfZ2V0X3Byb3h5KHByb3h5KTtcbiBcdHByb2ZpbGUtXHUwMDNlbGFiZWwucHJveHkgPSBwcm94eTtcbkBAIC00MTIsOCArNDEyLDE0IEBAIHN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19wcm9maWxlKGNvbnN0IGNoYXIgKmhuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxuIFx0LyogcmVmY291bnQgcmVsZWFzZWQgYnkgY2FsbGVyICovXG4gXHRyZXR1cm4gcHJvZmlsZTtcbiBcbi1mYWlsOlxuLVx0YWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpO1xuK2ZhaWxfcnVsZXM6XG4rXHRmcmVlX3J1bGVzZXQocHJvZmlsZS1cdTAwM2VsYWJlbC5ydWxlc1swXSk7XG4rZmFpbF9sYWJlbDpcbitcdGFhX2xhYmVsX2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2VsYWJlbCk7XG4rZmFpbF9wb2xpY3k6XG4rXHRhYV9wb2xpY3lfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UpO1xuK2ZhaWxfcHJvZmlsZTpcbitcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlKTtcbiBcbiBcdHJldHVybiBOVUxMO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjAyLjMzOTAzNjMwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NDExODE0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBcHBBcm1vciBQb2xpY3kgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNgIGFuZCBpdCdzIG1ha2luZyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYWFfYWxsb2NfcHJvZmlsZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyBhbHdheXMsIFwiSXMgdGhpcyBmdXp6YWJsZT9cIiBTaW5jZSBgYWFfYWxsb2NfcHJvZmlsZWAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGludm9sdmVkIGluIHRoZSBBcHBBcm1vciBwb2xpY3kgbG9hZGluZyBwcm9jZXNzLCB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suXG5cblRoZSBwYXRjaCBlc3NlbnRpYWxseSBtb2RpZmllcyB0aGUgZXJyb3IgcGF0aC4gSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2luZ2xlIGBhYV9mcmVlX3Byb2ZpbGUocHJvZmlsZSlgIGNhbGwsIHRoZSBjb2RlIGlzIG5vdyBtYW51YWxseSBjbGVhbmluZyB1cCBhbGxvY2F0ZWQgcmVzb3VyY2VzIHdpdGhpbiB0aGUgcHJvZmlsZSBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgaXQncyBoaXR0aW5nIHRoZXNlIGNsZWFudXAgZnVuY3Rpb25zIG9uIGFuIGVycm9yOiBgZnJlZV9ydWxlc2V0KHByb2ZpbGUtXHUwMDNlbGFiZWwucnVsZXNbMF0pO2AsIGBhYV9sYWJlbF9kZXN0cm95KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwpO2AsIGBhYV9wb2xpY3lfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UpO2AsIGFuZCBmaW5hbGx5IGBrZnJlZV9zZW5zaXRpdmUocHJvZmlsZSk7YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGRpZmZlcmVudCBhcHByb2FjaCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmluZyBwb2xpY3kgbG9hZGluZyBlcnJvcnMuXG5cblRoZXJlZm9yZSwgdGhlIHJldmlzZWQgZXJyb3IgaGFuZGxpbmcgY29kZSBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlYCBjZXJ0YWlubHkgcHJlc2VudHMgYSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQuIExldCdzIGRpZyBpbnRvIGBzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgbW9kaWZpZWQgYGFhX2FsbG9jX3Byb2ZpbGVgIGZ1bmN0aW9uIGl0c2VsZiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgbmV3IGVycm9yIGhhbmRsaW5nIHdvcmtzIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzEyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MDcuODgwMjIxMDIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTEwOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFhX2FsbG9jX3Byb2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9MzI0PXZvaWQgYWFfZnJlZV9wcm9maWxlKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY2LS8qKlxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM2NzogKiBhYV9hbGxvY19wcm9maWxlIC0gYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIHJldHVybiBhIG5ldyBwcm9maWxlXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY4LSAqIEBobmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSAgKE5PVCBOVUxMKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzczLSAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM3NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy0zNzUtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTY5Nz1zdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfbnVsbChzdHJ1Y3QgYWFfcHJvZmlsZSAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtNzAyLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjcwMzpcXHRwcm9maWxlID0gYWFfYWxsb2NfcHJvZmlsZShuYW1lLCBOVUxMLCBnZnApO1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTcwNC1cXHRpZiAoIXByb2ZpbGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjA3LjkyNzczNzU3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTcyNDY4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIEFwcEFybW9yIGNvbmZpZ3VyYXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBBcHBBcm1vciBBY3RpdmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0IGVuYWJsZXMgQXBwQXJtb3IuIEl0J3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB3aGVuIHdvcmtpbmcgd2l0aCBzZWN1cml0eSBoYXJkZW5pbmc7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGFjdHVhbGx5IGFjdGl2YXRlZCB0byBwcm9wZXJseSBtYW5hZ2UgcHJvZmlsZXMgYW5kIGVuc3VyZSB0aGV5J3JlIGJlaW5nIGVuZm9yY2VkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzeXN0ZW0ncyBjb25maWcgZmlsZXMgYW5kIHBvdGVudGlhbGx5IGFueSByZWxldmFudCBrZXJuZWwgcGFyYW1ldGVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBib290bG9hZGVyIGNvbmZpZ3VyYXRpb24sIEdSVUIgb3Igc3lzdGVtZC1ib290LCBhbG9uZyB3aXRoIGFueSBvdGhlciBvYnZpb3VzIHBsYWNlcyBsaWtlIGAvZXRjL2FwcGFybW9yLmQvYCBhbmQgcmVsYXRlZCBzeXN0ZW1kIHNlcnZpY2UgZmlsZXMuIFByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGNvbnN1bHQgdGhlIGRpc3RyaWJ1dGlvbidzIGRvY3VtZW50YXRpb24gdG9vLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGRpc3Ryby1zcGVjaWZpYyB0d2Vha3MuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoYXQgY3J1Y2lhbCBzZXR0aW5nIHRoYXQgZmxpcHMgdGhlIHN3aXRjaCwgc28gSSBjYW4gZW5zdXJlIEFwcEFybW9yIGlzIGJlaGF2aW5nIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MTIuMjg0OTg3MTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDIyMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkFwcEFybW9yIHN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cXHRib29sIFxcXCJCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIkJ1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mzg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX01FU1NBR0VTXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEZWJ1ZyBtZXNzYWdlcyBlbmFibGVkIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ2LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cXHRib29sIFxcXCJBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTgtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNjAtXFx0Ym9vbCBcXFwiRW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03MC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjcxOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFRcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcyLSAgICAgICBib29sIFxcXCJFbmFibGUgcG9saWN5IGhhc2ggaW50cm9zcGVjdGlvbiBieSBkZWZhdWx0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04My1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg0OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cXHRib29sIFxcXCJBbGxvdyBleHBvcnRpbmcgdGhlIHJhdyBiaW5hcnkgcG9saWN5XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05NS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNi1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEwNzpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTA4LVxcdHRyaXN0YXRlIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjEyLjMzMzAxNzQxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzYxNDUwMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgQXBwQXJtb3IgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgYFNFQ1VSSVRZX0FQUEFSTU9SYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGUga2V5IGhlcmUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBBcHBBcm1vci4gQW5kIGxvb2tpbmcgYXQgdGhpcywgdGhlIGZ1bmN0aW9uIHRvIHJlYWxseSBkaXNzZWN0IGlzIGBhYV9hbGxvY19wcm9maWxlYC4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhpcyBhbGxvY2F0aW9uIGlzIGhhcHBlbmluZy5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb2RlIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGluZyBgYWFfYWxsb2NfcHJvZmlsZWAuIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBwcm9iYWJseSBnaXZlIG1lIG1vcmUgY29udGV4dCBmb3Igd2hhdOKAmXMgZ29pbmcgb24gYW5kIHdoZXJlIHRoZSBhbGxvY2F0aW9uIGlzIHVzZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3cgdG8gZmlndXJlIG91dCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBvcHRpbWl6YXRpb25zIHJlbGF0ZWQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MToxNS44NjkxNjY0MzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxOTk4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWFfYWxsb2NfcHJvZmlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9hcHBhcm1vci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaD0yOTM9c3RydWN0IGFhX3J1bGVzZXQgKmFhX2FsbG9jX3J1bGVzZXQoZ2ZwX3QgZ2ZwKTtcXG5zZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oOjI5NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5LmgtMjk1LVxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApO1xcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM9MzI0PXZvaWQgYWFfZnJlZV9wcm9maWxlKHN0cnVjdCBhYV9wcm9maWxlICpwcm9maWxlKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY2LS8qKlxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM2NzogKiBhYV9hbGxvY19wcm9maWxlIC0gYWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIHJldHVybiBhIG5ldyBwcm9maWxlXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzY4LSAqIEBobmFtZTogbmFtZSBvZiB0aGUgcHJvZmlsZSAgKE5PVCBOVUxMKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtMzczLSAqL1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjM3NDpzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy0zNzUtXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTY5Nz1zdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfbnVsbChzdHJ1Y3QgYWFfcHJvZmlsZSAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmMtNzAyLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jOjcwMzpcXHRwcm9maWxlID0gYWFfYWxsb2NfcHJvZmlsZShuYW1lLCBOVUxMLCBnZnApO1xcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTcwNC1cXHRpZiAoIXByb2ZpbGUpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfdW5wYWNrLmM9MTExND1zdGF0aWMgc3RydWN0IGFhX3Byb2ZpbGUgKnVucGFja19wcm9maWxlKHN0cnVjdCBhYV9leHQgKmUsIGNoYXIgKipuc19uYW1lKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jLTExNTItXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jOjExNTM6XFx0cHJvZmlsZSA9IGFhX2FsbG9jX3Byb2ZpbGUobmFtZSwgTlVMTCwgR0ZQX0tFUk5FTCk7XFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X3VucGFjay5jLTExNTQtXFx0aWYgKCFwcm9maWxlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjE1LjkxNjM3MjUxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MzM1MjQ0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBcHBBcm1vciBQb2xpY3kgTG9hZGluZyoqXG5cbk9rYXksIHNvIEkndmUgc3BvdHRlZCBhIHBvdGVudGlhbCBlbnRyeSBwb2ludCBmb3IgZnV6emluZyB0aGUgQXBwQXJtb3IgcG9saWN5IGxvYWRpbmcgcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBgdW5wYWNrX3Byb2ZpbGVgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgc2luY2UgaXQncyBjYWxsZWQgd2hlbiBwb2xpY2llcyBhcmUgbG9hZGVkIGFuZCwgaW1wb3J0YW50bHksIGl0J3MgdGhlIG9uZSB0aGF0IGNhbGxzIGBhYV9hbGxvY19wcm9maWxlYC4gVGhhdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhIGdvb2QgdGFyZ2V0IHRvIHN0YXJ0IHdpdGguIEdpdmVuIHRoZSBjb250ZXh0LCBgYWFfYWxsb2NfcHJvZmlsZWAgaXMgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbi5cblxuSGFuZyBvbiBhIHNlY29uZOKApkkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBzY29waW5nIGhlcmUuIElzIGBhYV9hbGxvY19wcm9maWxlYCBhbiBleHBvcnRlZCBmdW5jdGlvbiBvciBpcyBpdCBpbnRlcm5hbCB0byBBcHBBcm1vcj8gQWgsIHllcywgaXQncyBpbnRlcm5hbC4gTm93LCBgdW5wYWNrX3Byb2ZpbGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyB0aGF0J3Mgbm90IGhlbHBpbmcgbWUuIEhvd2V2ZXIsIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYGFhX2FsbG9jX251bGxgIGlzIGV4cG9ydGVkLiBMZXQgbWUgY29uZmlybSB0aGF0IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MjMuNzQ5OTAxNDQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwMzc4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhYV9hbGxvY19udWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L2FwcGFybW9yL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9hcHBhcm1vci9pbmNsdWRlL3BvbGljeS5oPTI5ND1zdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgYWFfcHJveHkgKnByb3h5LFxcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5LmgtMjk1LVxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApO1xcbnNlY3VyaXR5L2FwcGFybW9yL2luY2x1ZGUvcG9saWN5Lmg6Mjk2OnN0cnVjdCBhYV9wcm9maWxlICphYV9hbGxvY19udWxsKHN0cnVjdCBhYV9wcm9maWxlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuc2VjdXJpdHkvYXBwYXJtb3IvaW5jbHVkZS9wb2xpY3kuaC0yOTctXFx0XFx0XFx0XFx0IGdmcF90IGdmcCk7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYz01NjI9c3RhdGljIHN0cnVjdCBhYV9wb2xpY3kgKl9fY3JlYXRlX21pc3NpbmdfYW5jZXN0b3JzKHN0cnVjdCBhYV9ucyAqbnMsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy01ODMtXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NTg0OlxcdFxcdFxcdHByb2ZpbGUgPSBhYV9hbGxvY19udWxsKHBhcmVudCwgbmFtZSwgZ2ZwKTtcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy01ODUtXFx0XFx0XFx0a2ZyZWUobmFtZSk7XFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYz02Njg9c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2ZxbG9va3Vwbl9wcm9maWxlKHN0cnVjdCBhYV9sYWJlbCAqYmFzZSxcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jLTY5Ni1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYzo2OTc6c3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX251bGwoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSxcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy02OTgtXFx0XFx0XFx0XFx0IGdmcF90IGdmcClcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jPTc0NT1zdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfbmV3X2xlYXJuaW5nX3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnBhcmVudCwgYm9vbCBoYXQsXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy03NzktXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmM6NzgwOlxcdHByb2ZpbGUgPSBhYV9hbGxvY19udWxsKHBhcmVudCwgbmFtZSwgZ2ZwKTtcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYy03ODEtXFx0aWYgKCFwcm9maWxlKVxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5X25zLmM9ODM9c3RhdGljIHN0cnVjdCBhYV9wcm9maWxlICphbGxvY191bmNvbmZpbmVkKGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfbnMuYy04Ni1cXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfbnMuYzo4NzpcXHRwcm9maWxlID0gYWFfYWxsb2NfbnVsbChOVUxMLCBuYW1lLCBHRlBfS0VSTkVMKTtcXG5zZWN1cml0eS9hcHBhcm1vci9wb2xpY3lfbnMuYy04OC1cXHRpZiAoIXByb2ZpbGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjIzLjc5ODMzMzgxNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEwODI2NDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGFhX2FsbG9jX3Byb2ZpbGVgKipcblxuUmlnaHQsIGBhYV9hbGxvY19wcm9maWxlYC4uLiB0aGF0J3MgYSBzb2xpZCBzeW1ib2wgdG8gc3RhcnQgd2l0aC4gSXQncyBub3Qgc29tZXRoaW5nIGJha2VkIGludG8gdGhlIGNvcmUsIEkgcmVtZW1iZXIgdGhhdCBtdWNoLiBMZXQncyBzZWUuLi4gaXQncyBkZWZpbmVkIGluIGBzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY2AuIEdvb2QsIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IGl0IHRvIGJlLCByZWxhdGVkIHRvIHRoZSBwb2xpY3kgaGFuZGxpbmcuIE5vdywgYmVmb3JlIEkgZGlnIGFueSBkZWVwZXIgaW50byB0aGF0IGZ1bmN0aW9uIHNwZWNpZmljYWxseSwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgU0VDVVJJVFlfQVBQQVJNT1JgLiBNYWtlIHN1cmUgbm90aGluZyBlbHNlIHdpbGwgYmxvY2sgdGhlIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MjcuNzA5MTYzMjc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIzODI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMy1cXHRib29sIFxcXCJBcHBBcm1vciBzdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xNy1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjE4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTktXFx0Ym9vbCBcXFwiQnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1ZyBjb2RlXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yNy1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjI4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19BU1NFUlRTXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnZ2luZyBhc3NlcnRzXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zNy1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjM4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19NRVNTQUdFU1xcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGVidWcgbWVzc2FnZXMgZW5hYmxlZCBieSBkZWZhdWx0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00Ni1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjQ3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9JTlRST1NQRUNUX1BPTElDWVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiQWxsb3cgbG9hZGVkIHBvbGljeSB0byBiZSBpbnRyb3NwZWN0ZWRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTU4LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NTk6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0hBU0hcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTYwLVxcdGJvb2wgXFxcIkVuYWJsZSBpbnRyb3NwZWN0aW9uIG9mIHNoYTI1NiBoYXNoZXMgZm9yIGxvYWRlZCBwcm9maWxlc1xcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNzAtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03Mi0gICAgICAgYm9vbCBcXFwiRW5hYmxlIHBvbGljeSBoYXNoIGludHJvc3BlY3Rpb24gYnkgZGVmYXVsdFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODMtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctODUtXFx0Ym9vbCBcXFwiQWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTUtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo5Njpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfUEFSQU5PSURfTE9BRFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTctXFx0Ym9vbCBcXFwiUGVyZm9ybSBmdWxsIHZlcmlmaWNhdGlvbiBvZiBsb2FkZWQgcG9saWN5XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xMDYtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoxMDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0tVTklUX1RFU1RcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOC1cXHR0cmlzdGF0ZSBcXFwiQnVpbGQgS1VuaXQgdGVzdHMgZm9yIHBvbGljeV91bnBhY2suY1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MToyNy43NTc0MDc0OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0MzMzMTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW4gZm9yIFNFQ1VSSVRZX0FQUEFSTU9SKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgU0VDVVJJVFlfQVBQQVJNT1JgLiBJdCdzIGEga2V5IHNlY3VyaXR5IGNvbXBvbmVudCwgYW5kIGJlZm9yZSBJIGNhbiBtYWtlIGFueSBkZWNpc2lvbnMgcmVnYXJkaW5nIGl0cyBjb25maWd1cmF0aW9uIG9yIGluY2x1c2lvbiwgSSBuZWVkIHRvIHNlZSB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZSwgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgdGhpcyBwbGFjZXMgdGhlIHNlY3VyaXR5IG1lY2hhbmlzbS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQ6XG5cbiogICAqKlRoZSBTcGVjaWZpYyBLZXJuZWwgTW9kdWxlczoqKiBXaGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgZG9lcyBgU0VDVVJJVFlfQVBQQVJNT1JgIHJlbHkgb24/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGZpbGUgc3lzdGVtIHN1cHBvcnQsIHBhcnRpY3VsYXIga2VybmVsIGZlYXR1cmVzLCBvciBjZXJ0YWluIGNhcGFiaWxpdGllcz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBpbnRlZ3JhdGlvbiBjaGFsbGVuZ2VzLlxuKiAgICoqVGhlIEJyb2FkZXIgU2VjdXJpdHkgTGFuZHNjYXBlOioqIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhpZ2hsaWdodCBob3cgYFNFQ1VSSVRZX0FQUEFSTU9SYCBpbnRlZ3JhdGVzIHdpdGggb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMuIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggU0VMaW51eCwgTFNNIGhvb2tzLCBvciBvdGhlciBzZWN1cml0eSBtb2R1bGVzPyBXaGF0IGlzIHRoZSBpbnRlbmRlZCBvdmVybGFwIGFuZCBkZXNpZ24gcGhpbG9zb3BoeT9cbiogICAqKlBlcmZvcm1hbmNlIEltcGxpY2F0aW9uczoqKiBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGludHJvZHVjZWQgYnkgdGhlc2UgZGVwZW5kZW5jaWVzPyBLbm93aW5nIHRoaXMgdXAgZnJvbnQgaGVscHMgaW4gbWFraW5nIGRlY2lzaW9ucy5cbiogICAqKlVwZ3JhZGUgUGF0aDoqKiBJZiB0aGUgZGVwZW5kZW5jeSBsaXN0IGluY2x1ZGVzIHRoaW5ncyBJJ20gbG9va2luZyB0byBkZXByZWNhdGUgb3IgY2hhbmdlLCB0aGlzIGxpc3QgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGNoYW5nZXMuXG4qICAgKipLZXJuZWwgVmVyc2lvbjoqKiBJJ2xsIGFsc28gYmUgbWluZGZ1bCBvZiB0aGUgbWluaW11bSBrZXJuZWwgdmVyc2lvbiByZXF1aXJlZC4gVGhpcyBhZmZlY3RzIGNvbXBhdGliaWxpdHkgYW5kLCBwb3RlbnRpYWxseSwgdGhlIGZlYXR1cmUgc2V0IGF2YWlsYWJsZS5cbiogICAqKkNvbmZpZ3VyYXRpb24gQ29uZmxpY3RzOioqIEFyZSB0aGVyZSBhbnkga25vd24gY29uZmxpY3RzIHdpdGggb3RoZXIgc2VjdXJpdHkgb3B0aW9ucyBvciBrZXJuZWwgZmVhdHVyZXM/XG5cbkluIHNob3J0LCBrbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFNFQ1VSSVRZX0FQUEFSTU9SYCBpcyB0aGUgaW5pdGlhbCBwcmVyZXF1aXNpdGUgdG8gZW5zdXJlIHRoZSBkZXNpcmVkIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTozMi40MDA3NDI1ODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SXFxuICAgMzpcXHRcXHRib29sIFxcXCJBcHBBcm1vciBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWSBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBBVURJVFxcbiAgIDY6XFx0XFx0c2VsZWN0IFNFQ1VSSVRZX1BBVEhcXG4gICA3OlxcdFxcdHNlbGVjdCBTRUNVUklUWUZTXFxuICAgODpcXHRcXHRzZWxlY3QgU0VDVVJJVFlfTkVUV09SS1xcbiAgIDk6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgZW5hYmxlcyB0aGUgQXBwQXJtb3Igc2VjdXJpdHkgbW9kdWxlLlxcbiAgMTI6XFx0XFx0ICBSZXF1aXJlZCB1c2Vyc3BhY2UgdG9vbHMgKGlmIHRoZXkgYXJlIG5vdCBpbmNsdWRlZCBpbiB5b3VyXFxuICAxMzpcXHRcXHQgIGRpc3RyaWJ1dGlvbikgYW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gbWF5IGJlIGZvdW5kIGF0XFxuICAxNDpcXHRcXHQgIGh0dHA6Ly9hcHBhcm1vci53aWtpLmtlcm5lbC5vcmdcXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdcXG4gIDE5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIEFwcEFybW9yIHdpdGggZGVidWcgY29kZVxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlfQVBQQVJNT1JcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MzIuNDAwODMyMzMyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTQ2NTY2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFwcEFybW9yIFNlY3VyaXR5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBBcHBBcm1vciBwYXRjaCwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIGBTRUNVUklUWV9BUFBBUk1PUmAgcmVsaWVzIG9uIGJvdGggYFNFQ1VSSVRZYCBhbmQgYE5FVGAsIHNvIHRob3NlIHRocmVlIGNvbmZpZ3MgYXJlIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgcmVsZXZhbnQuIFRoZSBjZW50cmFsIGZvY3VzIGhlcmUgc2VlbXMgdG8gYmUgb24gYGFhX2FsbG9jX3Byb2ZpbGVgLiBNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBhYV9hbGxvY19wcm9maWxlYCBkdXJpbmcgdGhlIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nIHByb2Nlc3MuIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRob3NlIHBvbGljeSBsb2FkaW5nIGludGVyZmFjZXMsIGZ1enppbmcgaXQgaXMgYSBzb2xpZCBzdHJhdGVneSB0byBjb25maXJtIHRoYXQgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBwYXRod2F5cyBhcmUgd29ya2luZyBhcyBleHBlY3RlZC4gSXQncyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhpbmdzIGNvdWxkIGJyZWFrIG9yIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGFhX2FsbG9jX3Byb2ZpbGVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBmb2NhbCBwb2ludC4gKlllcCosIHRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBub3RoaW5nIGVsc2Ugd2FzIHRvdWNoZWQgaW4gdGhlIHByb2Nlc3MuIE9rYXksIGxvb2tzIGxpa2UgaXQncyBqdXN0IGBhYV9hbGxvY19wcm9maWxlYCBpbiBgc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNgLiBHb29kLCB0aGF0IG1ha2VzIHRoaW5ncyBjbGVhbmVyLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkLiBJJ20gZ29pbmcgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTI0LCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjM5LjM5NTQ5MTY0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4ODc3MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWV9BUFBBUk1PUlwiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFhX2FsbG9jX3Byb2ZpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBgYWFfYWxsb2NfcHJvZmlsZWAgZHVyaW5nIEFwcEFybW9yIHBvbGljeSBsb2FkaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgcG9saWN5IGxvYWRpbmcgaW50ZXJmYWNlcywgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZX0FQUEFSTU9SXCIsXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWFfYWxsb2NfcHJvZmlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlYCBkdXJpbmcgQXBwQXJtb3IgcG9saWN5IGxvYWRpbmcuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBwb2xpY3kgbG9hZGluZyBpbnRlcmZhY2VzLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZyB0byB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQxOjM5LjQ4NDM3OTQzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNzUxMjk1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTozOS40ODUzNDk1ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQyNzQxNTQ1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXFxuXFxuU2luY2UgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX2ZsZXgoKWAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZSBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcgKGxpa2UgaW52YWxpZCBmcmVlcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzU4ZjAxNDkwODFmNzE0NzYxNTgyOTE3MDM2MzBjNzE2NmUzMjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTU6NDE6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuYyBiL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXG5pbmRleCA5NGI0YTdlNzI3Y2MxLi43ZWM0M2E0OTEwMzVhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvcG9saWN5LmNcbisrKyBiL3NlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXG5AQCAtMzg1LDIxICszODUsMjEgQEAgc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqaG5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0aWYgKCFhYV9wb2xpY3lfaW5pdChcdTAwMjZwcm9maWxlLVx1MDAzZWJhc2UsIE5VTEwsIGhuYW1lLCBnZnApKVxuLVx0XHRnb3RvIGZhaWw7XG4rXHRcdGdvdG8gZmFpbF9wcm9maWxlO1xuIFx0aWYgKCFhYV9sYWJlbF9pbml0KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwsIDEsIGdmcCkpXG4tXHRcdGdvdG8gZmFpbDtcbitcdFx0Z290byBmYWlsX3BvbGljeTtcbiBcbiBcdC8qIGFsbG9jYXRlIHRoZSBmaXJzdCBydWxlc2V0LCBidXQgbGVhdmUgaXQgZW1wdHkgKi9cbiBcdHByb2ZpbGUtXHUwMDNlbGFiZWwucnVsZXNbMF0gPSBhYV9hbGxvY19ydWxlc2V0KGdmcCk7XG4gXHRpZiAoIXByb2ZpbGUtXHUwMDNlbGFiZWwucnVsZXNbMF0pXG4tXHRcdGdvdG8gZmFpbDtcbitcdFx0Z290byBmYWlsX2xhYmVsO1xuIFx0cHJvZmlsZS1cdTAwM2VuX3J1bGVzID0gMTtcbiBcbiBcdC8qIHVwZGF0ZSBiZWluZyBzZXQgbmVlZGVkIGJ5IGZzIGludGVyZmFjZSAqL1xuIFx0aWYgKCFwcm94eSkge1xuIFx0XHRwcm94eSA9IGFhX2FsbG9jX3Byb3h5KFx1MDAyNnByb2ZpbGUtXHUwMDNlbGFiZWwsIGdmcCk7XG4gXHRcdGlmICghcHJveHkpXG4tXHRcdFx0Z290byBmYWlsO1xuK1x0XHRcdGdvdG8gZmFpbF9ydWxlcztcbiBcdH0gZWxzZVxuIFx0XHRhYV9nZXRfcHJveHkocHJveHkpO1xuIFx0cHJvZmlsZS1cdTAwM2VsYWJlbC5wcm94eSA9IHByb3h5O1xuQEAgLTQxMiw4ICs0MTIsMTQgQEAgc3RydWN0IGFhX3Byb2ZpbGUgKmFhX2FsbG9jX3Byb2ZpbGUoY29uc3QgY2hhciAqaG5hbWUsIHN0cnVjdCBhYV9wcm94eSAqcHJveHksXG4gXHQvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi9cbiBcdHJldHVybiBwcm9maWxlO1xuIFxuLWZhaWw6XG4tXHRhYV9mcmVlX3Byb2ZpbGUocHJvZmlsZSk7XG4rZmFpbF9ydWxlczpcbitcdGZyZWVfcnVsZXNldChwcm9maWxlLVx1MDAzZWxhYmVsLnJ1bGVzWzBdKTtcbitmYWlsX2xhYmVsOlxuK1x0YWFfbGFiZWxfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsKTtcbitmYWlsX3BvbGljeTpcbitcdGFhX3BvbGljeV9kZXN0cm95KFx1MDAyNnByb2ZpbGUtXHUwMDNlYmFzZSk7XG4rZmFpbF9wcm9maWxlOlxuK1x0a2ZyZWVfc2Vuc2l0aXZlKHByb2ZpbGUpO1xuIFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6MzkuNDg1MzUxMTM0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDcxMzg5MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBBcHBBcm1vciBTZWN1cml0eSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGFhX2FsbG9jX3Byb2ZpbGVgIGluIHRoZSBBcHBBcm1vciBzZWN1cml0eSBtb2R1bGUuIFRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIGEgc2ltcGxlIGBnb3RvIGZhaWw7YCB3aXRoIGEgbW9yZSBkZXRhaWxlZCBlcnJvciBoYW5kbGluZyBzZXF1ZW5jZS4gSXQncyBlc3NlbnRpYWxseSBicmVha2luZyBkb3duIHRoZSBjbGVhbnVwIHByb2Nlc3MgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgcHJvZmlsZSBhbGxvY2F0aW9uLlxuXG5Jbml0aWFsbHksIEknbSB0aGlua2luZywgdGhpcyBgZ290byBmYWlsO2Agd2FzIHByZXZpb3VzbHkgY2FsbGluZyBgYWFfZnJlZV9wcm9maWxlKHByb2ZpbGUpO2AuIE15IGV4cGVydCBpbnR1aXRpb24gaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcy4gV2h5IHRoZSBjaGFuZ2U/IEl0IHNjcmVhbXMgbWVtb3J5IGxlYWsgb3IgYSBwb3RlbnRpYWwgZG91YmxlLWZyZWUvdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gaW4gdGhlIHByZXZpb3VzIGVycm9yIHBhdGguXG5cbk5vdyBJJ20gZGlnZ2luZyBkZWVwZXIsIExldCdzIGNoZWNrIHdoYXQgYGFhX2ZyZWVfcHJvZmlsZWAgYWN0dWFsbHkgKmRvZXMqLiBJZiBpdCBleHBlY3RzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgYHByb2ZpbGVgIHN0cnVjdCwgdGhlbiBjYWxsaW5nIGl0IG9uIGEgcGFydGlhbGx5IGJ1aWx0IG9iamVjdCBjb3VsZCBiZSBhIGRpc2FzdGVyLiBJdCBjb3VsZCB0cnkgdG8gZnJlZSBpbnZhbGlkIG9yIHVuaW5pdGlhbGl6ZWQgcG9pbnRlcnMuXG5cbldhaXQgYSBtb21lbnQsIEkgdGhpbmsgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUuIExvb2tpbmcgYmFjayBhdCBgYWFfYWxsb2NfcHJvZmlsZWAuLi4gQWgsIHllcyEgYHByb2ZpbGVgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIGBremFsbG9jYCB6ZXJvZXMgdGhlIG1lbW9yeS4gU28sIGlmIGBhYV9mcmVlX3Byb2ZpbGVgIGFzc3VtZXMgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwgdGhlbiBvbiBmYWlsdXJlIGl0IG1pZ2h0IHRyeSB0byBga2ZyZWUoKWAgcG9pbnRlcnMgdGhhdCB3ZXJlIG5ldmVyIGFjdHVhbGx5IGFsbG9jYXRlZCwgb3IgcG9pbnQgdG8gZ2FyYmFnZS4gVGhlIG5ldyBjb2RlIHNlZW1zIGxpa2UgaXQncyB0cnlpbmcgdG8gc2VsZWN0aXZlbHkgZnJlZSB0aGUgYWxsb2NhdGVkIHBpZWNlcyB3aGljaCBpcyBhIG11Y2ggc2FmZXIgYXBwcm9hY2guIFRpbWUgdG8gY29uZmlybSBteSBzdXNwaWNpb24gYnkgdGhvcm91Z2hseSBjaGVja2luZyBgYWFfYWxsb2NfcHJvZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MTo1MS41NTY3NDM4NDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHQgKiBAZ2ZwOiBhbGxvY2F0aW9uIHR5cGVcXG4gMzcxOlxcdCAqXFxuIDM3MjpcXHQgKiBSZXR1cm5zOiByZWZjb3VudCBwcm9maWxlIG9yIE5VTEwgb24gZmFpbHVyZVxcbiAzNzM6XFx0ICovXFxuIDM3NDpcXHRzdHJ1Y3QgYWFfcHJvZmlsZSAqYWFfYWxsb2NfcHJvZmlsZShjb25zdCBjaGFyICpobmFtZSwgc3RydWN0IGFhX3Byb3h5ICpwcm94eSxcXG4gMzc1OlxcdFxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuIDM3NjpcXHR7XFxuIDM3NzpcXHRcXHRzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZTtcXG4gMzc4OlxcdFxcbiAzNzk6XFx0XFx0LyogZnJlZWQgYnkgZnJlZV9wcm9maWxlIC0gdXN1YWxseSB0aHJvdWdoIGFhX3B1dF9wcm9maWxlXFxuIDM4MDpcXHRcXHQgKiB0aGlzIGFkZHMgc3BhY2UgZm9yIGEgc2luZ2xlIHJ1bGVzZXQgaW4gdGhlIHJ1bGVzIHNlY3Rpb24gb2YgdGhlXFxuIDM4MTpcXHRcXHQgKiBsYWJlbFxcbiAzODI6XFx0XFx0ICovXFxuIDM4MzpcXHRcXHRwcm9maWxlID0ga3phbGxvY19mbGV4KCpwcm9maWxlLCBsYWJlbC5ydWxlcywgMSwgZ2ZwKTtcXG4gMzg0OlxcdFxcdGlmICghcHJvZmlsZSlcXG4gMzg1OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHRpZiAoIWFhX3BvbGljeV9pbml0KFxcdTAwMjZwcm9maWxlLVxcdTAwM2ViYXNlLCBOVUxMLCBobmFtZSwgZ2ZwKSlcXG4gMzg4OlxcdFxcdFxcdGdvdG8gZmFpbF9wcm9maWxlO1xcbiAzODk6XFx0XFx0aWYgKCFhYV9sYWJlbF9pbml0KFxcdTAwMjZwcm9maWxlLVxcdTAwM2VsYWJlbCwgMSwgZ2ZwKSlcXG4gMzkwOlxcdFxcdFxcdGdvdG8gZmFpbF9wb2xpY3k7XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdC8qIGFsbG9jYXRlIHRoZSBmaXJzdCBydWxlc2V0LCBidXQgbGVhdmUgaXQgZW1wdHkgKi9cXG4gMzkzOlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLnJ1bGVzWzBdID0gYWFfYWxsb2NfcnVsZXNldChnZnApO1xcbiAzOTQ6XFx0XFx0aWYgKCFwcm9maWxlLVxcdTAwM2VsYWJlbC5ydWxlc1swXSlcXG4gMzk1OlxcdFxcdFxcdGdvdG8gZmFpbF9sYWJlbDtcXG4gMzk2OlxcdFxcdHByb2ZpbGUtXFx1MDAzZW5fcnVsZXMgPSAxO1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHQvKiB1cGRhdGUgYmVpbmcgc2V0IG5lZWRlZCBieSBmcyBpbnRlcmZhY2UgKi9cXG4gMzk5OlxcdFxcdGlmICghcHJveHkpIHtcXG4gNDAwOlxcdFxcdFxcdHByb3h5ID0gYWFfYWxsb2NfcHJveHkoXFx1MDAyNnByb2ZpbGUtXFx1MDAzZWxhYmVsLCBnZnApO1xcbiA0MDE6XFx0XFx0XFx0aWYgKCFwcm94eSlcXG4gNDAyOlxcdFxcdFxcdFxcdGdvdG8gZmFpbF9ydWxlcztcXG4gNDAzOlxcdFxcdH0gZWxzZVxcbiA0MDQ6XFx0XFx0XFx0YWFfZ2V0X3Byb3h5KHByb3h5KTtcXG4gNDA1OlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLnByb3h5ID0gcHJveHk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLmhuYW1lID0gcHJvZmlsZS1cXHUwMDNlYmFzZS5obmFtZTtcXG4gNDA4OlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLmZsYWdzIHw9IEZMQUdfUFJPRklMRTtcXG4gNDA5OlxcdFxcdHByb2ZpbGUtXFx1MDAzZWxhYmVsLnZlY1swXSA9IHByb2ZpbGU7XFxuIDQxMDpcXHRcXG4gNDExOlxcdFxcdHByb2ZpbGUtXFx1MDAzZXNpZ25hbCA9IFNJR0tJTEw7XFxuIDQxMjpcXHRcXHQvKiByZWZjb3VudCByZWxlYXNlZCBieSBjYWxsZXIgKi9cXG4gNDEzOlxcdFxcdHJldHVybiBwcm9maWxlO1xcbiA0MTQ6XFx0XFxuIDQxNTpcXHRmYWlsX3J1bGVzOlxcbiA0MTY6XFx0XFx0ZnJlZV9ydWxlc2V0KHByb2ZpbGUtXFx1MDAzZWxhYmVsLnJ1bGVzWzBdKTtcXG4gNDE3OlxcdGZhaWxfbGFiZWw6XFxuIDQxODpcXHRcXHRhYV9sYWJlbF9kZXN0cm95KFxcdTAwMjZwcm9maWxlLVxcdTAwM2VsYWJlbCk7XFxuIDQxOTpcXHRmYWlsX3BvbGljeTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDE6NTEuNTU2ODcwMDg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzY5MDQ1MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgRml4KipcblxuT2theSwgc28gdGhlIGNvZGUncyB1c2luZyBga3phbGxvY19mbGV4YCB0byBhbGxvY2F0ZSBtZW1vcnksIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgYWxsb2NhdGlvbiBpcyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGlzIGEgaHVnZSBjbHVlLiBUaGUgYnVnIGJlaW5nIGFkZHJlc3NlZCAqaGFzKiB0byBiZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGluIHRoZSBgYWFfZnJlZV9wcm9maWxlYCBmdW5jdGlvbi4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGEgZG91YmxlLWZyZWUsIHVzZS1hZnRlci1mcmVlLCBvciBhIGxlYWsg4oCTIHNvbWV0aGluZyBmdW5reSBoYXBwZW5pbmcgZHVyaW5nIGFuIGVycm9yIHBhdGguXG5cbkxldCBtZSB0aGlua+KApiBgYWFfZnJlZV9wcm9maWxlYCBwcm9iYWJseSBjYWxscyBvdGhlciBjbGVhbnVwIGZ1bmN0aW9ucywgbGlrZSBgYWFfcG9saWN5X2Rlc3Ryb3lgIG9yIGBhYV9sYWJlbF9kZXN0cm95YC4gSWYgYGFhX3BvbGljeV9pbml0YCAob3Igc29tZXRoaW5nIHNpbWlsYXIpIGZhaWxzLCBgYWFfZnJlZV9wcm9maWxlYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgdG8gY2xlYW4gdXAuIFRoZSBwcm9ibGVtIHRoZW4gaXMgdGhhdCwgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBlcnJvciwgYGFhX2ZyZWVfcHJvZmlsZWAgbWF5IHRyeSB0byBkZXN0cm95IHNvbWV0aGluZyB0aGF0IHdhcyBuZXZlciBwcm9wZXJseSBpbml0aWFsaXplZCwgb3IgbWF5YmUgaXQgdHJpZXMgdG8gZnJlZSBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGRvZXNuJ3QgZXhpc3QuIFNpbmNlIHRoZSBtZW1vcnkgaXMgKnplcm9lZCosIGl0J3MgbGlrZWx5IHRyeWluZyB0byBkZXJlZmVyZW5jZSBvciBmcmVlIGEgTlVMTCBwb2ludGVyLCBvciBtYXliZSBpdCdzIGRyb3BwaW5nIGEgcmVmY291bnQgdGhhdCBuZXZlciBnb3Qgc2V0IGluIHRoZSBmaXJzdCBwbGFjZS5cblxuRXNzZW50aWFsbHksIHRoaXMgZml4IGlzIGFsbCBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMsIHNwZWNpZmljYWxseSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgYW5kIHRoZSBjb2RlJ3MgcmVzaWxpZW5jZSBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuIFRoaXMgKmlzbid0KiBhbiBpc3N1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIOKAkyBubyBjaGFuY2UuIFRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVybywgc28gbm8gaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbkFuZCB0aGF0J3Mgd2h5IEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIFRoZSBtZW1vcnkncyBhbHJlYWR5IHplcm9lZC4gS0FTQU4gaXMgdGhlIHRvb2wgd2Ugd2FudDogS0FTQU4gd2lsbCBiZSB0aGUgdGhpbmcgdG8gY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3Igc2ltaWxhciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgdGhhdCBhcmUgY2F1c2VkIGJ5IHRoZSBpbml0aWFsaXphdGlvbiBlcnJvcnMgdGhhdCBsZWQgdG8gdGhpcyBlcnJvciBwYXRoLlxuXG5JJ20gZ29pbmcgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCBgYWFfZnJlZV9wcm9maWxlYCBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDI6MDQuMzI1OTE4ODc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJzZWN1cml0eS9hcHBhcm1vci9wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDA6XFx0XFx0XFx0a2ZyZWVfc2Vuc2l0aXZlKHJ1bGVzLVxcdTAwM2VzZWNtYXJrW2ldLmxhYmVsKTtcXG4gMzAxOlxcdFxcdGtmcmVlX3NlbnNpdGl2ZShydWxlcy1cXHUwMDNlc2VjbWFyayk7XFxuIDMwMjpcXHRcXHRrZnJlZV9zZW5zaXRpdmUocnVsZXMpO1xcbiAzMDM6XFx0fVxcbiAzMDQ6XFx0XFxuIDMwNTpcXHRzdHJ1Y3QgYWFfcnVsZXNldCAqYWFfYWxsb2NfcnVsZXNldChnZnBfdCBnZnApXFxuIDMwNjpcXHR7XFxuIDMwNzpcXHRcXHRzdHJ1Y3QgYWFfcnVsZXNldCAqcnVsZXM7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHJ1bGVzID0ga3phbGxvY19vYmooKnJ1bGVzLCBnZnApO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRyZXR1cm4gcnVsZXM7XFxuIDMxMjpcXHR9XFxuIDMxMzpcXHRcXG4gMzE0OlxcdC8qKlxcbiAzMTU6XFx0ICogYWFfZnJlZV9wcm9maWxlIC0gZnJlZSBhIHByb2ZpbGVcXG4gMzE2OlxcdCAqIEBwcm9maWxlOiB0aGUgcHJvZmlsZSB0byBmcmVlICAoTUFZQkUgTlVMTClcXG4gMzE3OlxcdCAqXFxuIDMxODpcXHQgKiBGcmVlIGEgcHJvZmlsZSwgaXRzIGhhdHMgYW5kIG51bGxfcHJvZmlsZS4gQWxsIHJlZmVyZW5jZXMgdG8gdGhlIHByb2ZpbGUsXFxuIDMxOTpcXHQgKiBpdHMgaGF0cyBhbmQgbnVsbF9wcm9maWxlIG11c3QgaGF2ZSBiZWVuIHB1dC5cXG4gMzIwOlxcdCAqXFxuIDMyMTpcXHQgKiBJZiB0aGUgcHJvZmlsZSB3YXMgcmVmZXJlbmNlZCBmcm9tIGEgdGFzayBjb250ZXh0LCBmcmVlX3Byb2ZpbGUoKSB3aWxsXFxuIDMyMjpcXHQgKiBiZSBjYWxsZWQgZnJvbSBhbiByY3UgY2FsbGJhY2sgcm91dGluZSwgc28gd2UgbXVzdCBub3Qgc2xlZXAgaGVyZS5cXG4gMzIzOlxcdCAqL1xcbiAzMjQ6XFx0dm9pZCBhYV9mcmVlX3Byb2ZpbGUoc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUpXFxuIDMyNTpcXHR7XFxuIDMyNjpcXHRcXHRzdHJ1Y3Qgcmhhc2h0YWJsZSAqcmh0O1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRBQV9ERUJVRyhERUJVR19QT0xJQ1ksIFxcXCIlcyglcClcXFxcblxcXCIsIF9fZnVuY19fLCBwcm9maWxlKTtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0aWYgKCFwcm9maWxlKVxcbiAzMzE6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHQvKiBmcmVlIGNoaWxkcmVuIHByb2ZpbGVzICovXFxuIDMzNDpcXHRcXHRhYV9wb2xpY3lfZGVzdHJveShcXHUwMDI2cHJvZmlsZS1cXHUwMDNlYmFzZSk7XFxuIDMzNTpcXHRcXHRhYV9wdXRfcHJvZmlsZShyY3VfYWNjZXNzX3BvaW50ZXIocHJvZmlsZS1cXHUwMDNlcGFyZW50KSk7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdGFhX3B1dF9ucyhwcm9maWxlLVxcdTAwM2Vucyk7XFxuIDMzODpcXHRcXHRrZnJlZV9zZW5zaXRpdmUocHJvZmlsZS1cXHUwMDNlcmVuYW1lKTtcXG4gMzM5OlxcdFxcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlLVxcdTAwM2VkaXNjb25uZWN0ZWQpO1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRcXHRmcmVlX2F0dGFjaG1lbnQoXFx1MDAyNnByb2ZpbGUtXFx1MDAzZWF0dGFjaCk7XFxuIDM0MjpcXHRcXG4gMzQzOlxcdFxcdC8qXFxuIDM0NDpcXHRcXHQgKiBhdCB0aGlzIHBvaW50IHRoZXJlIGFyZSBubyB0YXNrcyB0aGF0IGNhbiBoYXZlIGEgcmVmZXJlbmNlXFxuIDM0NTpcXHRcXHQgKiB0byBydWxlc1xcbiAzNDY6XFx0XFx0ICovXFxuIDM0NzpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHByb2ZpbGUtXFx1MDAzZW5fcnVsZXM7IGkrKylcXG4gMzQ4OlxcdFxcdFxcdGZyZWVfcnVsZXNldChwcm9maWxlLVxcdTAwM2VsYWJlbC5ydWxlc1tpXSk7XFxuIDM0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTU6NDI6MDQuMzI2MDI0NTk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDU5ODE3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYWFfZnJlZV9wcm9maWxlYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGFhX2ZyZWVfcHJvZmlsZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgY2FsbGluZyBgYWFfcG9saWN5X2Rlc3Ryb3koXHUwMDI2cHJvZmlsZS1cdTAwM2ViYXNlKWAuIE5vdywgSSdtIGltbWVkaWF0ZWx5IHdvbmRlcmluZyBpZiB0aGVyZSdzIGEgcHJvYmxlbSBpZiBgYWFfcG9saWN5X2luaXRgIGZhaWxlZCBlYXJsaWVyLiBDb3VsZCBgcHJvZmlsZS1cdTAwM2ViYXNlYCBiZSBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXplZCwgZXZlbiB0aG91Z2ggaXQgd2FzIHByb2JhYmx5IHplcm9lZD9cblxuQnV0IGhhbmcgb24sIHRoZXJlJ3MgbW9yZS4gSXQgYWxzbyBjYWxscyBgYWFfcHV0X3Byb2ZpbGUocmN1X2FjY2Vzc19wb2ludGVyKHByb2ZpbGUtXHUwMDNlcGFyZW50KSlgLiBBaCwgcmlnaHQsIHRoYXQncyByZWxhdGVkIHRvIHRoZSBwYXJlbnQgcHJvZmlsZS4gQW5kIGl0IGFsc28gY2FsbHMgYGFhX3B1dF9ucyhwcm9maWxlLVx1MDAzZW5zKWAuIEdvb2QsIEkgcmVtZW1iZXIgdGhhdCBgYWFfcHV0X25zYCBoYW5kbGVzIGEgTlVMTCBgbnNgIHBvaW50ZXIuIEJ1dCBpZiBgYWFfcG9saWN5X2luaXRgIGZhaWxlZCwgYHByb2ZpbGUtXHUwMDNlbnNgICpjb3VsZCogYmUgTlVMTC4gQXQgbGVhc3QgdGhhdCBzaG91bGQgYmUgc2FmZS5cblxuV2FpdCwgSSBzZWUgaXQgYWxzbyBjYWxscyBgYWFfbGFiZWxfZGVzdHJveShcdTAwMjZwcm9maWxlLVx1MDAzZWxhYmVsKWAuIFRoYXQncyBhbm90aGVyIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4gaWYgYGFhX3BvbGljeV9pbml0YCBlbmNvdW50ZXJlZCBhbiBpc3N1ZS4gSSdkIGJldHRlciB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgYGFhX2ZyZWVfcHJvZmlsZWAgZnVuY3Rpb24gdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MjoxNC4xMzIwMDg4NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInNlY3VyaXR5L2FwcGFybW9yL3BvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHRrZnJlZV9zZW5zaXRpdmUocHJvZmlsZS1cXHUwMDNlZGlybmFtZSk7XFxuIDM1MTpcXHRcXG4gMzUyOlxcdFxcdGlmIChwcm9maWxlLVxcdTAwM2VkYXRhKSB7XFxuIDM1MzpcXHRcXHRcXHRyaHQgPSBwcm9maWxlLVxcdTAwM2VkYXRhO1xcbiAzNTQ6XFx0XFx0XFx0cHJvZmlsZS1cXHUwMDNlZGF0YSA9IE5VTEw7XFxuIDM1NTpcXHRcXHRcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3kocmh0LCBhYV9mcmVlX2RhdGEsIE5VTEwpO1xcbiAzNTY6XFx0XFx0XFx0a2ZyZWVfc2Vuc2l0aXZlKHJodCk7XFxuIDM1NzpcXHRcXHR9XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdGtmcmVlX3NlbnNpdGl2ZShwcm9maWxlLVxcdTAwM2VoYXNoKTtcXG4gMzYwOlxcdFxcdGFhX3B1dF9wcm9maWxlX2xvYWRkYXRhKHByb2ZpbGUtXFx1MDAzZXJhd2RhdGEpO1xcbiAzNjE6XFx0XFx0YWFfbGFiZWxfZGVzdHJveShcXHUwMDI2cHJvZmlsZS1cXHUwMDNlbGFiZWwpO1xcbiAzNjI6XFx0XFxuIDM2MzpcXHRcXHRrZnJlZV9zZW5zaXRpdmUocHJvZmlsZSk7XFxuIDM2NDpcXHR9XFxuIDM2NTpcXHRcXG4gMzY2OlxcdC8qKlxcbiAzNjc6XFx0ICogYWFfYWxsb2NfcHJvZmlsZSAtIGFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCByZXR1cm4gYSBuZXcgcHJvZmlsZVxcbiAzNjg6XFx0ICogQGhuYW1lOiBuYW1lIG9mIHRoZSBwcm9maWxlICAoTk9UIE5VTEwpXFxuIDM2OTpcXHQgKiBAcHJveHk6IHByb3h5IHRvIHVzZSBPUiBudWxsIGlmIHRvIGFsbG9jYXRlIGEgbmV3IG9uZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNTo0MjoxNC4xMzIxMTU4NzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYyNzM2NTk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRXJyb3IgSGFuZGxpbmcgRml4KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGhlcmUncyBteSB0YWtlLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgYWFfZnJlZV9wcm9maWxlYCBpcyBiZWluZyBjYWxsZWQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYHByb2ZpbGVgIHN0cnVjdCBpbiBjZXJ0YWluIGVycm9yIHBhdGhzLiBTcGVjaWZpY2FsbHksIGlmIGBhYV9wb2xpY3lfaW5pdGAgb3IgYGFhX2xhYmVsX2luaXRgIGZhaWwgZHVyaW5nIHByb2ZpbGUgc2V0dXAsIGBwcm9maWxlLVx1MDAzZWJhc2VgIG9yIGBwcm9maWxlLVx1MDAzZWxhYmVsYCBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQsIHJlc3BlY3RpdmVseS4gVGhhdCdzIGEgY2xhc3NpYyBzZXR1cCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgd29lcy4gQ2FsbGluZyBgYWFfbGFiZWxfZGVzdHJveWAgb24gYW4gdW5pbml0aWFsaXplZCBsYWJlbCwgZXZlbiBpZiBpdCdzIHplcm9lZCwgY291bGQgbGVhZCB0byBpc3N1ZXMsIHBvdGVudGlhbGx5IHRyeWluZyB0byBmcmVlIHRoaW5ncyB0aGF0IGRvbid0IGV4aXN0IG9yIG1lc3Npbmcgd2l0aCByZWZlcmVuY2UgY291bnRzIGFuZCBgbGFiZWwtXHUwMDNlcnVsZXNgIG9yIGBsYWJlbC1cdTAwM2Vwcm94eWAuXG5cblRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoaXMgYnkgaW50cm9kdWNpbmcgbW9yZSBncmFudWxhciBlcnJvciBsYWJlbHMuIEluc3RlYWQgb2YganVzdCBhIHNpbmdsZSBgZ290byBmYWlsO2AgdGhhdCBqdW1wcyBzdHJhaWdodCB0byBgYWFfZnJlZV9wcm9maWxlYCwgaXQgdXNlcyBsYWJlbHMgbGlrZSBgZmFpbF9ydWxlc2AsIGBmYWlsX2xhYmVsYCwgYW5kIGBmYWlsX3BvbGljeWAgdG8gaGFuZGxlIGVhY2ggaW5pdGlhbGl6YXRpb24gc3RlcCdzIGZhaWx1cmUgaW5kaXZpZHVhbGx5LiBUaGlzIHByZXZlbnRzIGBhYV9mcmVlX3Byb2ZpbGVgIGZyb20gYmVpbmcgY2FsbGVkIHByZW1hdHVyZWx5IG9uIGEgcGFydGlhbGx5IGNvbnN0cnVjdGVkIHByb2ZpbGUuIFRoaXMgbWVhbnMgdGhlIGZpeCBpcyBhZGRyZXNzaW5nIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBpbnZhbGlkIGZyZWVzLCBvciB1c2UtYWZ0ZXItZnJlZXMsIHdoaWNoIGFyZSBhbGwgcHJldHR5IG5hc3R5IG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MuXG5cbk5vdywgYmVjYXVzZSB0aGUgYHByb2ZpbGVgIHN0cnVjdCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19mbGV4YCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5LCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIGxlYWtlZCB0byB1c2Vyc3BhY2UsIG9yIGluZmx1ZW5jaW5nIGNvbnRyb2wgZmxvdy4gVGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaW4gdGhpcyBzcGVjaWZpYyBjYXNlLiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBzaG91bGQgY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIGluY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGludmFsaWQgZnJlZXMuIFRoZXJlZm9yZSwgYSBzcGVjaWFsaXplZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3QgcmVxdWlyZWQgaGVyZTsgdGhlIHN0YW5kYXJkIHRvb2xzIHNob3VsZCBkbyB0aGUgam9iLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODIzLCJPdXRwdXRUb2tlbnMiOjIyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE1OjQyOjIzLjc1OTQ4NTM4MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gYGFhX2FsbG9jX3Byb2ZpbGUoKWAgYnkgcmVwbGFjaW5nIGEgc2luZ2xlIGBnb3RvIGZhaWw7YCAod2hpY2ggY2FsbGVkIGBhYV9mcmVlX3Byb2ZpbGUoKWApIHdpdGggZ3JhbnVsYXIgZXJyb3IgbGFiZWxzIChgZmFpbF9ydWxlc2AsIGBmYWlsX2xhYmVsYCwgYGZhaWxfcG9saWN5YCwgYGZhaWxfcHJvZmlsZWApLiBgYWFfZnJlZV9wcm9maWxlKClgIGFzc3VtZXMgdGhhdCB0aGUgYHByb2ZpbGVgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC4gQ2FsbGluZyBpdCBvbiBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgY2FuIGxlYWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgaW52YWxpZCBmcmVlcywgb3IgdXNlLWFmdGVyLWZyZWVzLiBcXG5cXG5TaW5jZSB0aGUgYHByb2ZpbGVgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NfZmxleCgpYCAod2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgbWVtb3J5KSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIGluY29ycmVjdCBlcnJvciBoYW5kbGluZyAobGlrZSBpbnZhbGlkIGZyZWVzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGBhYV9hbGxvY19wcm9maWxlKClgIGJ5IHJlcGxhY2luZyBhIHNpbmdsZSBgZ290byBmYWlsO2AgKHdoaWNoIGNhbGxlZCBgYWFfZnJlZV9wcm9maWxlKClgKSB3aXRoIGdyYW51bGFyIGVycm9yIGxhYmVscyAoYGZhaWxfcnVsZXNgLCBgZmFpbF9sYWJlbGAsIGBmYWlsX3BvbGljeWAsIGBmYWlsX3Byb2ZpbGVgKS4gYGFhX2ZyZWVfcHJvZmlsZSgpYCBhc3N1bWVzIHRoYXQgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIENhbGxpbmcgaXQgb24gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGNhbiBsZWFkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGludmFsaWQgZnJlZXMsIG9yIHVzZS1hZnRlci1mcmVlcy4gXFxuXFxuU2luY2UgdGhlIGBwcm9maWxlYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX2ZsZXgoKWAgKHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSksIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZSBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcgKGxpa2UgaW52YWxpZCBmcmVlcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[1] Phase: Succeeded StartedAt: 2026-08-25 15:42:35 +0000 UTC FinishedAt: 2026-08-25 15:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 15:42:35 +0000 UTC FinishedAt: 2026-08-25 15:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2] Phase: Succeeded StartedAt: 2026-08-25 15:42:35 +0000 UTC FinishedAt: 2026-08-25 19:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 15:42:35 +0000 UTC FinishedAt: 2026-08-25 19:35:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 15:42:35 +0000 UTC FinishedAt: 2026-08-25 15:42:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 15:42:35 +0000 UTC FinishedAt: 2026-08-25 15:42:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow2nplx/series-workflow2nplx-convert-artifact-4197534090/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 15:42:46 +0000 UTC FinishedAt: 2026-08-25 16:02:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 15:42:46 +0000 UTC FinishedAt: 2026-08-25 16:02:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*56eff256-b8cf-4f9d-a24b-8bfc6c05268b,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-workflow2nplx/series-workflow2nplx-convert-artifact-4197534090/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": "c9a6fc75-1afb-40c4-ace0-6ba1fa1340dc", "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-workflow2nplx/series-workflow2nplx-build-action-604107896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 15:42:46 +0000 UTC FinishedAt: 2026-08-25 16:02: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:*56eff256-b8cf-4f9d-a24b-8bfc6c05268b,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-workflow2nplx/series-workflow2nplx-convert-artifact-4197534090/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": "c9a6fc75-1afb-40c4-ace0-6ba1fa1340dc", "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-workflow2nplx/series-workflow2nplx-build-action-604107896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 16:02:25 +0000 UTC FinishedAt: 2026-08-25 16:02:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 16:02:25 +0000 UTC FinishedAt: 2026-08-25 16:02:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 16:02:25 +0000 UTC FinishedAt: 2026-08-25 16:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 16:02:25 +0000 UTC FinishedAt: 2026-08-25 16:02:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow2nplx/series-workflow2nplx-convert-artifact-573071141/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 16:02:35 +0000 UTC FinishedAt: 2026-08-25 16:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 16:02:35 +0000 UTC FinishedAt: 2026-08-25 16:04:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c9a6fc75-1afb-40c4-ace0-6ba1fa1340dc,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-workflow2nplx/series-workflow2nplx-build-action-604107896/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-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 16:04:36 +0000 UTC FinishedAt: 2026-08-25 16:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 16:04:36 +0000 UTC FinishedAt: 2026-08-25 16:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 16:04:36 +0000 UTC FinishedAt: 2026-08-25 16:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 16:04:36 +0000 UTC FinishedAt: 2026-08-25 16:22:58 +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:*56eff256-b8cf-4f9d-a24b-8bfc6c05268b,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-workflow2nplx/series-workflow2nplx-convert-artifact-573071141/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": "688ec748-6ded-4f7e-8c02-8e4e248a42d0", "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-workflow2nplx/series-workflow2nplx-build-action-3110180721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 16:04:36 +0000 UTC FinishedAt: 2026-08-25 16:22:48 +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:*56eff256-b8cf-4f9d-a24b-8bfc6c05268b,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-workflow2nplx/series-workflow2nplx-convert-artifact-573071141/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": "688ec748-6ded-4f7e-8c02-8e4e248a42d0", "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-workflow2nplx/series-workflow2nplx-build-action-3110180721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 16:22:58 +0000 UTC FinishedAt: 2026-08-25 16:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 16:22:58 +0000 UTC FinishedAt: 2026-08-25 16:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 16:22:58 +0000 UTC FinishedAt: 2026-08-25 16:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 16:22:58 +0000 UTC FinishedAt: 2026-08-25 16:24:52 +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:*688ec748-6ded-4f7e-8c02-8e4e248a42d0,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-workflow2nplx/series-workflow2nplx-build-action-3110180721/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-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 16:25:01 +0000 UTC FinishedAt: 2026-08-25 19:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 16:25:01 +0000 UTC FinishedAt: 2026-08-25 19:35:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*c9a6fc75-1afb-40c4-ace0-6ba1fa1340dc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*688ec748-6ded-4f7e-8c02-8e4e248a42d0,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-workflow2nplx/series-workflow2nplx-build-action-604107896/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-workflow2nplx/series-workflow2nplx-build-action-3110180721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 16:25:01 +0000 UTC FinishedAt: 2026-08-25 16:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 16:25:01 +0000 UTC FinishedAt: 2026-08-25 16:25:08 +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":["aa_alloc_profile"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2nplx/series-workflow2nplx-convert-artifact-1123806122/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 16:25:01 +0000 UTC FinishedAt: 2026-08-25 16:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 16:25:01 +0000 UTC FinishedAt: 2026-08-25 16:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 16:25:02 +0000 UTC FinishedAt: 2026-08-25 16:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 16:25:12 +0000 UTC FinishedAt: 2026-08-25 19:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2nplx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["aa_alloc_profile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY_APPARMOR","SECURITY","NET"],"series_id":"ac211454-d8b5-422a-b9e0-5c2f2e796ec4","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 16:25:12 +0000 UTC FinishedAt: 2026-08-25 19:35:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c9a6fc75-1afb-40c4-ace0-6ba1fa1340dc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*688ec748-6ded-4f7e-8c02-8e4e248a42d0,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-workflow2nplx/series-workflow2nplx-build-action-604107896/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-workflow2nplx/series-workflow2nplx-build-action-3110180721/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-workflow2nplx/series-workflow2nplx-convert-artifact-1123806122/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,}