Name: series-workflowc6tp6 Phase: Succeeded StartedAt: 2026-08-06 11:55:42 +0000 UTC FinishedAt: 2026-08-06 16:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[0] Phase: Succeeded StartedAt: 2026-08-06 11:55:42 +0000 UTC FinishedAt: 2026-08-06 12:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 11:55:42 +0000 UTC FinishedAt: 2026-08-06 12:38:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "98a7867ce2341ede3ca82f4ef6868135c7ff53d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "HWPOISON_INJECT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "98a7867ce2341ede3ca82f4ef6868135c7ff53d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "HWPOISON_INJECT" ], "series_id": "34fef113-b20e-468d-b0d9-965e8eb944bc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_failure", "soft_offline_page", "min_order_for_split" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O3NvZnRfb2ZmbGluZV9wYWdlJiMzNDssCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGFuZCBzb2Z0IG9mZmxpbmUgcGF0aHMgdG8gcHJvcGVybHkgbG9jayBmb2xpb3MgYmVmb3JlIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdCgpLCBhbmQgcmVmYWN0b3JzIFRIUCBzcGxpdHRpbmcgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmM2NzZmMTM1ZjIwYzhiMzQ4NWYxMGI2MjQ4Y2FkMjEyMzhlM2M2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTI6MzY6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDgwNGI4ZjZhYTU1NzAuLjJjNWU3YjFiNjkyNmIgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQzMiwxMCAmIzQzOzQ0MzIsMTQgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbiAgKiBzcGxpdCBhdHRlbXB0IHNob3VsZCBnZXQgLUVCVVNZIGZyb20gc3BsaXQgY2hlY2tpbmcgY29kZS5cbiAgKlxuJiM0MzsgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQuXG4mIzQzOyAqXG4gICogUmV0dXJuOiBAZm9saW8mIzM5O3MgbWluaW11bSBvcmRlciBmb3Igc3BsaXRcbiAgKi9cbiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuJiM0MztcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uYjU3NDBiOTI1YmJmZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xNzA1LDI2ICYjNDM7MTcwNSw2IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4gXHRyZXR1cm4gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbik7XG4gfVxuIFxuLS8qXG4tICogV2hlbiAmIzM5O3JlbGVhc2UmIzM5OyBpcyAmIzM5O2ZhbHNlJiMzOTssIGl0IG1lYW5zIHRoYXQgaWYgdGhwIHNwbGl0IGhhcyBmYWlsZWQsXG4tICogdGhlcmUgaXMgc3RpbGwgbW9yZSB0byBkbywgaGVuY2UgdGhlIHBhZ2UgcmVmY291bnQgd2UgdG9vayBlYXJsaWVyXG4tICogaXMgc3RpbGwgbmVlZGVkLlxuLSAqL1xuLXN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLVx0XHRib29sIHJlbGVhc2UpXG4te1xuLVx0aW50IHJldDtcbi1cbi1cdGxvY2tfcGFnZShwYWdlKTtcbi1cdHJldCA9IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwYWdlLCBuZXdfb3JkZXIpO1xuLVx0dW5sb2NrX3BhZ2UocGFnZSk7XG4tXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZWxlYXNlKVxuLVx0XHRwdXRfcGFnZShwYWdlKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHVubWFwX2FuZF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCwgaW50IGZsYWdzKVxuIHtcbkBAIC0yNTA5LDkgJiM0MzsyNDg5LDYgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuIFxuIFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4tXHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbi1cdFx0aW50IGVycjtcbi1cbiBcdFx0LypcbiBcdFx0ICogVGhlIGZsYWcgbXVzdCBiZSBzZXQgYWZ0ZXIgdGhlIHJlZmNvdW50IGlzIGJ1bXBlZFxuIFx0XHQgKiBvdGhlcndpc2UgaXQgbWF5IHJhY2Ugd2l0aCBUSFAgc3BsaXQuXG5AQCAtMjUyNiwyNCAmIzQzOzI1MDMsMjUgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRcdCAqIHBhZ2UgaXMgYSB2YWxpZCBoYW5kbGFibGUgcGFnZS5cbiBcdFx0ICovXG4gXHRcdGZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XG4tXHRcdGVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0XHRmb2xpb19sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwLCBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKSk7XG4mIzQzO1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocCk7XG4mIzQzO1x0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogSWYgc3BsaXR0aW5nIGEgZm9saW8gdG8gb3JkZXItMCBmYWlscywga2lsbCB0aGUgcHJvY2Vzcy5cbiBcdFx0ICogU3BsaXQgdGhlIGZvbGlvIHJlZ2FyZGxlc3MgdG8gbWluaW1pemUgdW51c2FibGUgcGFnZXMuXG4gXHRcdCAqIEJlY2F1c2UgdGhlIG1lbW9yeSBmYWlsdXJlIGNvZGUgY2Fubm90IGhhbmRsZSBsYXJnZVxuIFx0XHQgKiBmb2xpb3MsIHRoaXMgc3BsaXQgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgaWYgaXQgZmFpbGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGVyciB8fCBuZXdfb3JkZXIpIHtcbi1cdFx0XHQvKiBnZXQgZm9saW8gYWdhaW4gaW4gY2FzZSB0aGUgb3JpZ2luYWwgb25lIGlzIHNwbGl0ICovXG4tXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuJiM0MztcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4gXHRcdFx0cmVzID0gLUVIV1BPSVNPTjtcbiBcdFx0XHRraWxsX3Byb2NzX25vdyhwLCBwZm4sIGZsYWdzLCBmb2xpbyk7XG4tXHRcdFx0cHV0X3BhZ2UocCk7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTlNQTElUX1RIUCwgTUZfRkFJTEVEKTtcbiBcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdFx0fVxuLVx0XHRWTV9CVUdfT05fUEFHRSghcGFnZV9jb3VudChwKSwgcCk7XG4tXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMjg2MSw5ICYjNDM7MjgzOSw4IEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQucmVhc29uID0gTVJfTUVNT1JZX0ZBSUxVUkUsXG4gXHR9O1xuIFxuJiM0MztcdGZvbGlvX2xvY2soZm9saW8pO1xuIFx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuLVx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4tXG4gXHRcdC8qXG4gXHRcdCAqIElmIG5ld19vcmRlciAodGFyZ2V0IHNwbGl0IG9yZGVyKSBpcyBub3QgMCwgZG8gbm90IHNwbGl0IHRoZVxuIFx0XHQgKiBmb2xpbyBhdCBhbGwgdG8gcmV0YWluIHRoZSBzdGlsbCBhY2Nlc3NpYmxlIGxhcmdlIGZvbGlvLlxuQEAgLTI4NzEsMTUgJiM0MzsyODQ4LDIwIEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cbiBcdFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cbiBcdFx0ICovXG4tXHRcdGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbi1cdFx0XHRcdFx0XHQgICAgICAgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcbiYjNDM7XHRcdGlmICghbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbykpXG4mIzQzO1x0XHRcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwYWdlLCAwKSA/IC1FQlVTWSA6IDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0cHJfaW5mbyhcJiMzNDslI2x4OiB0aHAgc3BsaXQgZmFpbGVkXFxuXCYjMzQ7LCBwZm4pO1xuLVx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIFx0fVxuIFxuLVx0Zm9saW9fbG9jayhmb2xpbyk7XG4gXHRpZiAoIWh1Z2UpXG4gXHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFdQT0lTT05fSU5KRUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAgICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgYW5kIHNvZnQgb2ZmbGluZSBwYXRocyB0byBwcm9wZXJseSBsb2NrIGZvbGlvcyBiZWZvcmUgY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0KCksIGFuZCByZWZhY3RvcnMgVEhQIHNwbGl0dGluZyBsb2dpYy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9yIGhhbmRsaW5nIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBhbmQgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYzY3NmYxMzVmMjBjOGIzNDg1ZjEwYjYyNDhjYWQyMTIzOGUzYzYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxMjozNjozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDgwNGI4ZjZhYTU1NzAuLjJjNWU3YjFiNjkyNmIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQzMiwxMCAmIzQzOzQ0MzIsMTQgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsCiAgKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudAogICogc3BsaXQgYXR0ZW1wdCBzaG91bGQgZ2V0IC1FQlVTWSBmcm9tIHNwbGl0IGNoZWNraW5nIGNvZGUuCiAgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZC4KJiM0MzsgKgogICogUmV0dXJuOiBAZm9saW8mIzM5O3MgbWluaW11bSBvcmRlciBmb3Igc3BsaXQKICAqLwogdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTsKJiM0MzsKIAlpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IGE4YjAzZTI5MjBiYTguLmI1NzQwYjkyNWJiZmQgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMTcwNSwyNiAmIzQzOzE3MDUsNiBAQCBzdGF0aWMgaW50IGlkZW50aWZ5X3BhZ2Vfc3RhdGUodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICpwLAogCXJldHVybiBwYWdlX2FjdGlvbihwcywgcCwgcGZuKTsKIH0KIAotLyoKLSAqIFdoZW4gJiMzOTtyZWxlYXNlJiMzOTsgaXMgJiMzOTtmYWxzZSYjMzk7LCBpdCBtZWFucyB0aGF0IGlmIHRocCBzcGxpdCBoYXMgZmFpbGVkLAotICogdGhlcmUgaXMgc3RpbGwgbW9yZSB0byBkbywgaGVuY2UgdGhlIHBhZ2UgcmVmY291bnQgd2UgdG9vayBlYXJsaWVyCi0gKiBpcyBzdGlsbCBuZWVkZWQuCi0gKi8KLXN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAotCQlib29sIHJlbGVhc2UpCi17Ci0JaW50IHJldDsKLQotCWxvY2tfcGFnZShwYWdlKTsKLQlyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgbmV3X29yZGVyKTsKLQl1bmxvY2tfcGFnZShwYWdlKTsKLQotCWlmIChyZXQgJmFtcDsmYW1wOyByZWxlYXNlKQotCQlwdXRfcGFnZShwYWdlKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHVubWFwX2FuZF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHVuc2lnbmVkIGxvbmcgcGZuLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCwgaW50IGZsYWdzKQogewpAQCAtMjUwOSw5ICYjNDM7MjQ4OSw2IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKQogCWZvbGlvX3VubG9jayhmb2xpbyk7CiAKIAlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHsKLQkJY29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pOwotCQlpbnQgZXJyOwotCiAJCS8qCiAJCSAqIFRoZSBmbGFnIG11c3QgYmUgc2V0IGFmdGVyIHRoZSByZWZjb3VudCBpcyBidW1wZWQKIAkJICogb3RoZXJ3aXNlIGl0IG1heSByYWNlIHdpdGggVEhQIHNwbGl0LgpAQCAtMjUyNiwyNCAmIzQzOzI1MDMsMjUgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiAJCSAqIHBhZ2UgaXMgYSB2YWxpZCBoYW5kbGFibGUgcGFnZS4KIAkJICovCiAJCWZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7Ci0JCWVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTsKJiM0MzsKJiM0MzsJCWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwkJc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHAsIG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pKTsKJiM0MzsJCWZvbGlvID0gcGFnZV9mb2xpbyhwKTsKJiM0MzsJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CiAJCS8qCiAJCSAqIElmIHNwbGl0dGluZyBhIGZvbGlvIHRvIG9yZGVyLTAgZmFpbHMsIGtpbGwgdGhlIHByb2Nlc3MuCiAJCSAqIFNwbGl0IHRoZSBmb2xpbyByZWdhcmRsZXNzIHRvIG1pbmltaXplIHVudXNhYmxlIHBhZ2VzLgogCQkgKiBCZWNhdXNlIHRoZSBtZW1vcnkgZmFpbHVyZSBjb2RlIGNhbm5vdCBoYW5kbGUgbGFyZ2UKIAkJICogZm9saW9zLCB0aGlzIHNwbGl0IGlzIGFsd2F5cyB0cmVhdGVkIGFzIGlmIGl0IGZhaWxlZC4KIAkJICovCi0JCWlmIChlcnIgfHwgbmV3X29yZGVyKSB7Ci0JCQkvKiBnZXQgZm9saW8gYWdhaW4gaW4gY2FzZSB0aGUgb3JpZ2luYWwgb25lIGlzIHNwbGl0ICovCi0JCQlmb2xpbyA9IHBhZ2VfZm9saW8ocCk7CiYjNDM7CQlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHsKIAkJCXJlcyA9IC1FSFdQT0lTT047CiAJCQlraWxsX3Byb2NzX25vdyhwLCBwZm4sIGZsYWdzLCBmb2xpbyk7Ci0JCQlwdXRfcGFnZShwKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwogCQkJYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTlNQTElUX1RIUCwgTUZfRkFJTEVEKTsKIAkJCWdvdG8gdW5sb2NrX211dGV4OwogCQl9Ci0JCVZNX0JVR19PTl9QQUdFKCFwYWdlX2NvdW50KHApLCBwKTsKLQkJZm9saW8gPSBwYWdlX2ZvbGlvKHApOwogCX0KIAogCS8qCkBAIC0yODYxLDkgJiM0MzsyODM5LDggQEAgc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAJCS5yZWFzb24gPSBNUl9NRU1PUllfRkFJTFVSRSwKIAl9OwogCiYjNDM7CWZvbGlvX2xvY2soZm9saW8pOwogCWlmICghaHVnZSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7Ci0JCWNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTsKLQogCQkvKgogCQkgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGUKIAkJICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby4KQEAgLTI4NzEsMTUgJiM0MzsyODQ4LDIwIEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogCQkgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW4KIAkJICogbWVtb3J5X2ZhaWx1cmUoKS4KIAkJICovCi0JCWlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCwKLQkJCQkJCSAgICAgICAvKiByZWxlYXNlPSAqLyB0cnVlKSkgewomIzQzOwkJaWYgKCFtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKSkKJiM0MzsJCQlyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgMCkgPyAtRUJVU1kgOiAwOwomIzQzOwkJZWxzZQomIzQzOwkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCQlwcl9pbmZvKCYjMzQ7JSNseDogdGhwIHNwbGl0IGZhaWxlZFxuJiMzNDssIHBmbik7Ci0JCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJCXJldHVybiByZXQ7CiAJCX0KLQkJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwogCX0KIAotCWZvbGlvX2xvY2soZm9saW8pOwogCWlmICghaHVnZSkKIAkJZm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pOwogCWlmIChQYWdlSFdQb2lzb24ocGFnZSkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBIdWdlVExCL01lbW9yeSBGYWlsdXJlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBhIGxvY2sgY2hlY2sgaW4gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgYFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbylgLiBNYWtlcyBzZW5zZTsgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYmUgbWVzc2luZyB3aXRoIGZvbGlvIHNwbGl0dGluZyBpZiBpdCYjMzk7cyBhbHJlYWR5IGxvY2tlZC4gVGhlbiwgdGhlIHBhdGNoIHVwZGF0ZXMgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgd2l0aGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBsb2NrIHRoZSBmb2xpbyAqYmVmb3JlKiBjYWxsaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzOiBBcmUgdGhlc2UgY2hhbmdlcyByZWFjaGFibGU/IEFyZSB0aGV5IGFjdHVhbGx5IHRlc3RhYmxlPyBMZXQmIzM5O3Mgc2VlLi4uIGBtZW1vcnlfZmFpbHVyZWAgaGFuZGxlcyBoYXJkd2FyZSBwb2lzb25pbmcsIHdoaWNoIHdlIGtub3cgY2FuIGJlIHRyaWdnZXJlZCBlaXRoZXIgdGhyb3VnaCBzeXNmcyBvciBieSB1c2luZyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nLiBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCBkZWFscyB3aXRoIHNvZnQgb2ZmbGluaW5nIG9mIHBhZ2VzLCBhbmQgaXQmIzM5O3MgYWxzbyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBvciBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgLiBTbywgYXQgbGVhc3Qgb24gdGhlIHN1cmZhY2UsIHRob3NlIHNlZW0gdGVzdGFibGUuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBzZWN0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG1lbW9yeV9mYWlsdXJlYCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc2lkZXMuIEkmIzM5O2xsIGdyZXAgZm9yIGBtZW1vcnktZmFpbHVyZS5vYCB3aXRoaW4gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluZGljYXRpb24gb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgbGl2ZXMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5LWZhaWx1cmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSAmIzQzOz0gZG1hcG9vbF90ZXN0Lm9cbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICYjNDM7PSBtZW1vcnktZmFpbHVyZS5vXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgJiM0Mzs9IGh3cG9pc29uLWluamVjdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gTWVtb3J5IEZhaWx1cmUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCB0ZWxscyBtZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGVycm9yIGhhbmRsaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgY29udGV4dCwgYW5kIHRoYXQgYWxtb3N0IGFsd2F5cyBtZWFucyBkaXZpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSwgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBpdCBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGlzIHRoaW5nIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgZW5hYmxlcyBvciBkaXNhYmxlcy4gVGltZSB0byBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2NC1cbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgYmVpbmcgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHJlbGV2YW50IGFyZWEsIGxpa2VseSBhcm91bmQgbGluZSA3NjUg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgbWVtb3J5IG1hbmFnZW1lbnQtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBjbHVzdGVyLCB0aG91Z2ggaXQgdmFyaWVzLCBvZiBjb3Vyc2UuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGNsZWFyIGVub3VnaCB0byBnbGVhbiB0aGUgZXNzZW50aWFsIGxvZ2ljIHdpdGhvdXQgdG9vIG11Y2ggZGlnZ2luZy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGJ1aWxkIG9wdGlvbnMsIGRlZmF1bHRzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIG1lbW9yeSBzdWJzeXN0ZW0uIEkgc3VzcGVjdCB0aGF0IHRoZXJlIGlzIGEgZ29vZCByZWFzb24gZm9yIHRoZSBzcGVjaWZpYyBsaW5lIG9mIGNvZGUgdG8gYmUgd2hlcmUgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcdCAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS5cbiA3NjE6XHRcbiA3NjI6XHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc2MzpcdFx0Ym9vbFxuIDc2NDpcdFxuIDc2NTpcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxuIDc2NjpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA3Njc6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc2ODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4gNzY5Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuIDc3MDpcdFx0aGVscFxuIDc3MTpcdFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcbiA3NzI6XHRcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcbiA3NzM6XHRcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXG4gNzc0Olx0XHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXG4gNzc1Olx0XG4gNzc2Olx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuIDc3NzpcdFx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiA3Nzg6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuIDc3OTpcdFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIE1lbW9yeSBGYWlsdXJlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBoZXJlLiBXZSBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZDsgdGhhdCYjMzk7cyB0aGUgY29yZS4gVGhlbiwgSSYjMzk7bSBwb25kZXJpbmcgYENPTkZJR19IV1BPSVNPTl9JTkpFQ1RgLiBJdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGZ1enppbmcsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuIEJ1dCwgaG9sZCBvbi4uLiBpZiB3ZSBoYXZlIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQsIGlzbiYjMzk7dCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYWxzbyBhdmFpbGFibGU/IFJpZ2h0LCBpdCBzaG91bGQgYmUuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBtYWR2aXNlYCBhbmQgYE1BRFZfSFdQT0lTT05gIGFyZSBwcmVzZW50IGluIHRoaXMgYnVpbGQgd2l0aCB0aGF0IGNvbmZpZy4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBkZXBlbmRlbmN5IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BRFZfSFdQT0lTT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0OTQtXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IpIHtcbm1tL21hZHZpc2UuYzoxNDk1Olx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jLTE0OTYtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxuLS1cbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTUxLVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbm1tL21hZHZpc2UuYzoxNTUyOlx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jLTE1NTMtI2VuZGlmXG4tLVxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcbm1tL21hZHZpc2UuYzoxOTQ0OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXG5tbS9tYWR2aXNlLmMtMTk0NS0gKlx0XHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9saW8gTG9ja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCBhcmUgaW5kZWVkIGF2YWlsYWJsZSDigJMgZ29vZC4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBgbWVtb3J5X2ZhaWx1cmVgLCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuCgpBaCwgaGVyZSB3ZSBoYXZlIGl0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO2Agd2l0aGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4gQ2xlYXJseSwgdGhpcyBpcyByZWxhdGVkIHRvIGZvbGlvIGxvY2tpbmcgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRoZW4gZ29lcyBvbiB0byBlbnN1cmUgdGhhdCBjYWxsZXJzIHdpdGhpbiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCBub3cgcHJvcGVybHkgbG9jayB0aGUgZm9saW8gKmJlZm9yZSogY2FsbGluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIGFuZCBhIGJpdCBvZiByZWZhY3RvcmluZyB0byBpbXByb3ZlIHRocmVhZCBzYWZldHkgd2l0aGluIHRoZSBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGNvZGUgcGF0aC4KClRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjaGFuZ2UgaXMgdGhyb3VnaCB0aGUgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGFuZCBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgIHN5c3RlbSBjYWxscyBzcGVjaWZpY2FsbHkgb3BlcmF0aW5nIG9uIFRIUHMuIFRvIHByb3Blcmx5IHRlc3QgdGhpcyB0aG9yb3VnaGx5LCBJIHdpbGwgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gYG1tL2AgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMxPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMzLVxubW0vS2NvbmZpZzo4MzQ6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzUtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1Mj1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1Ny1cbm1tL0tjb25maWc6ODU4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTktXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjQtXG5tbS9LY29uZmlnOjg2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2Ni1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzMtXG5tbS9LY29uZmlnOjg3NDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzUtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg4MT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg5MC1cbm1tL0tjb25maWc6ODkxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkyLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDAtXG5tbS9LY29uZmlnOjkwMTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDItXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDgtXG5tbS9LY29uZmlnOjkwOTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkxMC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE2LVxubW0vS2NvbmZpZzo5MTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE4LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI2PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTM1LVxubW0vS2NvbmZpZzo5MzY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzctXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0NC1cbm1tL0tjb25maWc6OTQ1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0Ni1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Mi1cbm1tL0tjb25maWc6OTUzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTU0LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjAtXG5tbS9LY29uZmlnOjk2MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjItXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgQ29uZmlndXJhdGlvbiBhbmQgUmVsYXRlZCBDb2RlKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgcGxheWluZyB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIGlzIGEga2V5IHNldHRpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdHdlYWtpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgZmFpbHVyZXMgYW5kIHNvZnRseSBvZmZsaW5pbmcgcGFnZXMgdGhhdCBhcmUgaW4gdXNlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGNvbmZpcm1pbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgc2V0dGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIHNpZGUgZWZmZWN0cy4gSSYjMzk7bGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBtZW1vcnlfZmFpbHVyZWAuIFNpbmNlIHRoZSB0ZXh0IG1lbnRpb25zIHRoZSBmdW5jdGlvbiBuYW1lLCBteSBmaXJzdCBzdG9wIHdpbGwgYmUgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYyBiZWhpbmQgdGhhdCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoZSBmYWlsdXJlIGlzIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhlbiBJIHdpbGwgY2hlY2sgaG93IGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGlzIGJlaW5nIGNhbGxlZCBhbmQgd2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgbWVtb3J5X2ZhaWx1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MjMwMD1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2NS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM2NjppbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGEgUG90ZW50aWFsIE1lbW9yeSBGYWlsdXJlKioKCk9rYXksIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGhhbmRsaW5nIGZvciBhICYjMzQ7c29mdCBvZmZsaW5lJiMzNDsgc2NlbmFyaW8sIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCB2YXJpYWJsZSBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZpbGUsIGFzIGl0IHNlZW1zIHJlbGV2YW50LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBsb2dpYyBiZWhpbmQgdGhpcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzaXR1YXRpb24uIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIG9mIHRoZSBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTI4MTc9RVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgyNi0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjgyNzpzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgyOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBzb21lIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNoYW5naW5nIGhvdyBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCAoYW5kIHBvc3NpYmx5IGBzb2Z0X29mZmxpbmVfcGFnZWAsIGlmIHRoZSBzeW1ib2wgcmVzb2x1dGlvbiBpcyBvZmYpIGhhbmRsZSBmb2xpbyBsb2NraW5nIGJlZm9yZSBpbnZva2luZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE1vcmUgaW50ZXJlc3RpbmdseSwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlbW92aW5nIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGFuZCBkaXJlY3RseSBjYWxsaW5nIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0JiMzOTtzIGNoYW5naW5nIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlIGh1Z2UgcGFnZSBzcGxpdHRpbmcgbG9naWMsIHJlbW92aW5nIGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24uCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHRoaXMgaXMgKmFic29sdXRlbHkqIHNvbWV0aGluZyB0aGF0IG5lZWRzIHJpZ29yb3VzIGZ1enppbmcuIENoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgdGhvc2UgYWx0ZXJpbmcgaG93IHBhZ2Ugc3BsaXR0aW5nIGlzIGhhbmRsZWQsIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUsIGFuZCBwb3RlbnRpYWxseSBjYXRhc3Ryb3BoaWMsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZSBhbHRlcmVkIGNvZGUgcGF0aHMgd2l0aGluIGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCBhbmQsIGNyaXRpY2FsbHksIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgY29udHJvbCBmbG93IGluIHRoZSBkaWZmZXJlbnQgZWRnZSBjYXNlcyB0aGUgZnV6emluZyB1bmNvdmVycy4KCk5vdywgbGV0IG1lIGNoZWNrIGBzb2Z0X29mZmxpbmVfcGFnZWAgdG8gdmVyaWZ5IHRoZSBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0yODI3PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk0OC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk0OTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipOYXZpZ2F0aW5nIHRoZSBgbWFkdmlzZWAgTWF6ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaGFuZGxpbmcgc29tZXRoaW5nIG9mZi1saW5lLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGFwcGVhcnMgdG8gYmUgYHNvZnRfb2ZmbGluZV9wYWdlYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHVuZGVyc3Rvb2QuIEJ1dCB0aGVuIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBob3cgZG9lcyB0aGF0IGludGVyYWN0IHdpdGggYG1hZHZpc2VgPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBgbWFkdmlzZWAgYmVoYXZpb3IgaXMgcmVsZXZhbnQgaGVyZSDigJMgaXMgaXQgYG1hZHZpc2VfZG9fYmVoYXZpb3JgLCBvciBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIGxpa2UgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBvciBldmVuIGBtYWR2aXNlX2luamVjdF9lcnJvcmA/IFRvIHBpbnBvaW50IHRoZSByaWdodCBwYXRoLCBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIGBtYWR2aXNlLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyBgTUFEVl9IV1BPSVNPTmAuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBvZmYtbGluZSBhc3BlY3Qgd2lsbCBiZSBtYWRlLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgYmVoYXZpb3Igd2lsbCBiZSBkZWZpbmVkLiBJJiMzOTtsbCBmb2N1cyBteSBzZWFyY2ggd2l0aGluIGBtYWR2aXNlLmNgIGZvciBhbnkgbWVudGlvbiBvZiBgTUFEVl9IV1BPSVNPTmAgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIGNvbmNlcHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDk0LVx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yKSB7XG5tbS9tYWR2aXNlLmM6MTQ5NTpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNDk2LVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU1MS1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG5tbS9tYWR2aXNlLmM6MTU1MjpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNTUzLSNlbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTQzLSAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXG5tbS9tYWR2aXNlLmM6MTk0NDogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxubW0vbWFkdmlzZS5jLTE5NDUtICpcdFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgTUFEVl9IV1BPSVNPTmAgaXMgaGFuZGxlZCB3aXRoaW4gYG1hZHZpc2UuY2AuCgoqKkRpdmluZyBpbnRvIE1BRFZfSFdQT0lTT04gd2l0aGluIG1hZHZpc2UuYyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGBNQURWX0hXUE9JU09OYCBpcyBhY3R1YWxseSAqaW1wbGVtZW50ZWQqLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgYWR2aWNlIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCYjMzk7cyBnb2luZyB0byBiZSBhIGZhc2NpbmF0aW5nIGpvdXJuZXkgaW50byBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIGVycm9yLWNvcnJlY3RpbmcgY29kZSAoRUNDKSBtZW1vcnkgb3IgbWVtb3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGlzIGludm9sdmVzIGRpcmVjdGx5IG1hbmlwdWxhdGluZyBwYWdlIGZsYWdzLCB0cmlnZ2VyaW5nIGhhcmR3YXJlIGV4Y2VwdGlvbnMgaW4gYSBjb250cm9sbGVkIG1hbm5lciwgb3IgcGVyaGFwcyB1c2luZyBzb21lIG1vcmUgYWJzdHJhY3QgbWVjaGFuaXNtIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwgdG8gc2lnbmFsIG9yIG1hcmsgdGhlc2UgcGFnZXMuIEFyZSB0aGVyZSBuZXcgc3lzdGVtIGNhbGxzIG9yIGZsYWdzPyBPciBtYXliZSBpdCYjMzk7cyBjbGV2ZXJseSBwaWdneWJhY2tpbmcgb24gZXhpc3RpbmcgbWFkdmlzZSBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBhc3N1bXB0aW9ucyBiZWluZyBtYWRlLiBBcmUgd2UgZGVhbGluZyB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHZlbmRvcnMgb3IgYSBtb3JlIGdlbmVyYWxpemVkIGFwcHJvYWNoPyBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3luY2hyb25pemF0aW9uIGFzcGVjdHMuIEhvdyBhcmUgY29uY3VycmVudCBhY2Nlc3NlcyBoYW5kbGVkPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSG93IGRvZXMgdGhlIGtlcm5lbCBkZWFsIHdpdGggdGhlIGNhc2Ugb2YgYSBwb2lzb25lZCBwYWdlICphbHJlYWR5KiBiZWluZyBhY2Nlc3NlZCBvciBtb2RpZmllZD8gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgcHJlY2lzZWx5IGhvdyB0aGUga2VybmVsIGNhbiBpbnN0cnVjdCB0aGUgaGFyZHdhcmUgdG8gY29uc2lkZXIgYSBtZW1vcnkgcGFnZSBhcyBiYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfaW5qZWN0X2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NDYtICovXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE0NDgte1xuLS1cbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTA0LVxubW0vbWFkdmlzZS5jOjE1MDU6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNTA2LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTg5Ni1cdFx0cmFuZ2UtXHUwMDNlZW5kID0gc3RhcnQgJiM0MzsgbGVuX2luO1xubW0vbWFkdmlzZS5jOjE4OTc6XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xODk4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCByaWdodD8gSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3MgdGhlIHBvaW50IG9mIG9yaWdpbiBmb3IgdGhlIHNpbXVsYXRlZCBtZW1vcnkgZXJyb3JzIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0LiBUaGUgaW50ZXJlc3RpbmcgYml0IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGV2ZWxzLiBUaGUgdGV4dCBzdWdnZXN0cyB0aGF0IGl0LCBhdCBzb21lIHBvaW50LCBjYWxscyBlaXRoZXIgYG1lbW9yeV9mYWlsdXJlYCBvciBgc29mdF9vZmZsaW5lX3BhZ2VgLiBUaGF0JiMzOTtzIG91ciB0YXJnZXQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBkZWNpc2lvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCBjaG9vc2VzIGJldHdlZW4gdGhvc2UgdHdvLCBhbmQgd2hhdCB0aGF0IGNob2ljZSB0ZWxscyB1cyBhYm91dCB0aGUgbmF0dXJlIG9mIHRoZSBzaW11bGF0ZWQgZXJyb3IuIERvZXMgdGhlIGNob2ljZSByZWxhdGUgdG8gdGhlIGxldmVsIG9mIHNpbXVsYXRlZCBmYWlsdXJlPyBPciB0aGUgbG9jYXRpb24gaXQgbWF5IGJlIGluamVjdGVkIGludG8/IFRpbWUgdG8gZGlzc2VjdCB0aGF0IGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNsb3NlIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDQwOlx0XHRyZXR1cm4gZXJyb3I7XG4xNDQxOlx0fVxuMTQ0MjpcdFxuMTQ0MzpcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbjE0NDQ6XHQvKlxuMTQ0NTpcdCAqIEVycm9yIGluamVjdGlvbiBzdXBwb3J0IGZvciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuXG4xNDQ2Olx0ICovXG4xNDQ3Olx0c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbjE0NDg6XHR7XG4xNDQ5Olx0XHR1bnNpZ25lZCBsb25nIHNpemU7XG4xNDUwOlx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZS5zdGFydDtcbjE0NTE6XHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gbWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZS5lbmQ7XG4xNDUyOlx0XG4xNDUzOlx0XHRpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4xNDU0Olx0XHRcdHJldHVybiAtRVBFUk07XG4xNDU1Olx0XG4xNDU2Olx0XHRmb3IgKDsgc3RhcnQgXHUwMDNjIGVuZDsgc3RhcnQgJiM0Mzs9IHNpemUpIHtcbjE0NTc6XHRcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4xNDU4Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuMTQ1OTpcdFx0XHRpbnQgcmV0O1xuMTQ2MDpcdFxuMTQ2MTpcdFx0XHRyZXQgPSBnZXRfdXNlcl9wYWdlc19mYXN0KHN0YXJ0LCAxLCAwLCBcdTAwMjZwYWdlKTtcbjE0NjI6XHRcdFx0aWYgKHJldCAhPSAxKVxuMTQ2MzpcdFx0XHRcdHJldHVybiByZXQ7XG4xNDY0Olx0XHRcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0XHQvKlxuMTQ2NzpcdFx0XHQgKiBXaGVuIHNvZnQgb2ZmbGluaW5nIGh1Z2VwYWdlcywgYWZ0ZXIgbWlncmF0aW5nIHRoZSBwYWdlXG4xNDY4Olx0XHRcdCAqIHdlIGRpc3NvbHZlIGl0LCB0aGVyZWZvcmUgaW4gdGhlIHNlY29uZCBsb29wIFwmIzM0O3BhZ2VcJiMzNDsgd2lsbFxuMTQ2OTpcdFx0XHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxuMTQ3MDpcdFx0XHQgKi9cbjE0NzE6XHRcdFx0c2l6ZSA9IHBhZ2Vfc2l6ZShjb21wb3VuZF9oZWFkKHBhZ2UpKTtcbjE0NzI6XHRcbjE0NzM6XHRcdFx0aWYgKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcbjE0NzQ6XHRcdFx0XHRwcl9pbmZvKFwmIzM0O1NvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXG5cJiMzNDssXG4xNDc1Olx0XHRcdFx0XHQgcGZuLCBzdGFydCk7XG4xNDc2Olx0XHRcdFx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCBNRl9DT1VOVF9JTkNSRUFTRUQpO1xuMTQ3NzpcdFx0XHR9IGVsc2Uge1xuMTQ3ODpcdFx0XHRcdHByX2luZm8oXCYjMzQ7SW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGZvciBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuMTQ3OTpcdFx0XHRcdFx0IHBmbiwgc3RhcnQpO1xuMTQ4MDpcdFx0XHRcdHJldCA9IG1lbW9yeV9mYWlsdXJlKHBmbiwgTUZfQUNUSU9OX1JFUVVJUkVEIHwgTUZfQ09VTlRfSU5DUkVBU0VEIHwgTUZfU1dfU0lNVUxBVEVEKTtcbjE0ODE6XHRcdFx0XHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuMTQ4MjpcdFx0XHRcdFx0cmV0ID0gMDtcbjE0ODM6XHRcdFx0fVxuMTQ4NDpcdFxuMTQ4NTpcdFx0XHRpZiAocmV0KVxuMTQ4NjpcdFx0XHRcdHJldHVybiByZXQ7XG4xNDg3Olx0XHR9XG4xNDg4Olx0XG4xNDg5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgY2FsbGVkIGZyb20gYG1hZHZpc2VgIGl0c2VsZi4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIGluamVjdGluZyB0aGUgZXJyb3JzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgbW9kaWZpY2F0aW9ucyB0byB0d28gc3BlY2lmaWMgZnVuY3Rpb25zOiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IG1hbmFnZW1lbnQgd29ya3MsIHRoZXNlIGFyZSB0aGUgb25lcyBJIG5lZWQgdG8gemVybyBpbiBvbi4gVGhlIGNoYW5nZXMgdG8gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFyZSBpbnRlcmVzdGluZywgYnV0IHNpbmNlIGl0JiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uLCBJJiMzOTtsbCBsaWtlbHkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEkmIzM5O2xsIGhhdmUgdG8gdmVyaWZ5IGlmIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBzdGF0aWMgYXMgaXQgd2lsbCBpbXBhY3QgaG93IHdpZGVseSB0aGUgbW9kaWZpY2F0aW9ucyB3aWxsIGltcGFjdCB0aGUgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc2NvcGUgb2YgdGhlIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcGF0Y2ggY2F1c2VzIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDQyMD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0MzgtICovXG5tbS9odWdlX21lbW9yeS5jOjQ0Mzk6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcywgYW5kIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXNuJiMzOTt0IGEgc3RhdGljIHNpdHVhdGlvbiDigJMgdGhpbmdzIGFyZSBkeW5hbWljYWxseSBjb25maWd1cmVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBhY3R1YWxseSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgcXVpY2tseSBjb25maXJtaW5nIHdoZXRoZXIgYG1lbW9yeV9mYWlsdXJlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgYW5kLCBub3BlLCBpdCYjMzk7cyBub3QuIFRoZSBzYW1lIGdvZXMgZm9yIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEJvdGggYXJlIGR5bmFtaWMuCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHZhcmlhYmxlcyB0byBmb2N1cyBvbiBhcmUgbm93OiBgbWVtb3J5X2ZhaWx1cmVgLCBgc29mdF9vZmZsaW5lX3BhZ2VgLCBhbmQgYWxzbyB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIOKAkyBiZWNhdXNlIEkga25vdyB0aGF0IGNhbiBzb21ldGltZXMgYmUgYSBjb25maWd1cmF0aW9uIHBvaW50IHRvby4KClRvIGFjdHVhbGx5ICplbmFibGUqIHRoZXNlIG1lbW9yeSBmYWlsdXJlIGZlYXR1cmVzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgc2V0LiBJdCYjMzk7cyBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB0aG9zZSBsb29rIGxpa2UgdGhlIG9uZXMgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8uCgpCdXQgd2FpdCwgaG9sZCBvbi4uLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGhhcyBhIGRlcGVuZGVuY3kgb24gYE1NVWAuIE9rYXksIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGRlcGVuZGVuY3kgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzIHRvby4gTGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgYE1FTU9SWV9GQUlMVVJFYCBkZXBlbmRzIG9uICpib3RoKiBgTU1VYCBhbmQgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoYXQgb25lIHJpZ2h0LgoKYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGlzIGNvbW1vbmx5IHNldCBvbiB4ODYgYW5kIGFybTY0IGFyY2hpdGVjdHVyZXMuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSB0byBzZWUgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBmb3IgeDg2LiBJIGJldHRlciBnbyBhbmQgY2hlY2sgdGhhdCByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NzUwPWNvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTc1Ni1cdGRlcGVuZHMgb24gWDg2XzY0IHx8ICFTUEFSU0VNRU1cbmFyY2gveDg2L0tjb25maWc6NzU3Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gveDg2L0tjb25maWctNzU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgTWVtb3J5IEZhaWx1cmUgU3VwcG9ydCoqCgpSaWdodCwgc28gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gbG9va2luZyBhdCwgdGhlIGBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGZsYWcsIGlzIGluZGVlZCBzZWxlY3RlZC4gR29vZCBzdGFydC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLCBpcyB0byBkb3VibGUtY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgSSYjMzk7bSB1c2luZyAqYWN0dWFsbHkqIHN1cHBvcnRzIHRoaXMuCgpMZXQmIzM5O3Mgc2Vl4oCmIHRoZSBkZXBlbmRlbmNpZXMgbGlzdGVkIGFyZSBgWDg2XzY0IHx8ICFTUEFSU0VNRU1gLiBPa2F5LCB0aGF0IG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSBlaXRoZXIgb24gYW4geDg2LTY0IGFyY2hpdGVjdHVyZSAqb3IqIGlmIHRoZSBrZXJuZWwgaXNuJiMzOTt0IHVzaW5nIHNwYXJzZSBtZW1vcnkgbWFuYWdlbWVudC4gU2VlbXMgcHJldHR5IHN0YW5kYXJkLiBHaXZlbiBteSBzZXR1cCwgSSYjMzk7bSBjb25maWRlbnQgaXQmIzM5O3Mgc2F0aXNmaWVkLiBObyByZWQgZmxhZ3MgdGhlcmUuCgpOb3csIGJlZm9yZSBJIHN0YXJ0IHdvcmtpbmcgd2l0aCB0aGlzLCBpdCBpcyB3b3J0aCBxdWlja2x5IGVuc3VyaW5nIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIE9LLiBObyBwb2ludCBidWlsZGluZyBzb21ldGhpbmcgaWYgaXQgaXMgYmxvY2tlZCBpbiBzb21lIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgzMT1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzMy1cbm1tL0tjb25maWc6ODM0Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM1LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTctXG5tbS9LY29uZmlnOjg1ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODU5LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODY0LVxubW0vS2NvbmZpZzo4NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NjYtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODczLVxubW0vS2NvbmZpZzo4NzQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODc1LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODE9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTAtXG5tbS9LY29uZmlnOjg5MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5Mi1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTAwLVxubW0vS2NvbmZpZzo5MDE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTAyLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTA4LVxubW0vS2NvbmZpZzo5MDk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTAtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxNi1cbm1tL0tjb25maWc6OTE3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkxOC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkyNj1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzNS1cbm1tL0tjb25maWc6OTM2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTM3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDQtXG5tbS9LY29uZmlnOjk0NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NDYtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTItXG5tbS9LY29uZmlnOjk1MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1NC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTYwLVxubW0vS2NvbmZpZzo5NjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTYyLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBjb25jZXJuaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRpbWUgdG8gZGlzc2VjdCBgbW0vS2NvbmZpZ2AgYW5kIHplcm8gaW4gb24gdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlndXJhdGlvbnMuIEkgYWxyZWFkeSBrbm93IHRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IG9uIHN5c3RlbXMgd2l0aCBzdWJzdGFudGlhbCBtZW1vcnkgZm9vdHByaW50cy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBjb3JlIHN3aXRjaGVzIHRoYXQgZ292ZXJuIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGZ1bmRhbWVudGFsIG1lbW9yeSBhbGxvY2F0aW9uIHVuaXQuCgpJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgYm9vbGAgYW5kIGB0cmlzdGF0ZWAgb3B0aW9ucywgYWxvbmcgd2l0aCBzb21lIGFjY29tcGFueWluZyBoZWxwIHRleHQsIG5hdHVyYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZmlyc3QuIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZywgZGlzYWJsaW5nLCBvciBtYWtpbmcgaXQgbW9kdWxhci4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmU/IElzIHRoZXJlIGFuIGludGVyYWN0aW9uIHdpdGggTlVNQT8gV2hhdCBhYm91dCBkaWZmZXJlbnQgQ1BVIGFyY2hpdGVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGxhdGZvcm0gY29uc2lkZXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8KCk1vcmUgc3BlY2lmaWNhbGx5LCBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGxldmVsIG9mIGdyYW51bGFyaXR5IGhlcmU6IHRoZSBhYmlsaXR5IHRvIHNlbGVjdCB0aGUgKnBvbGljeSogdGhhdCBnb3Zlcm5zIGhvdyBodWdlcGFnZXMgYXJlIG1hbmFnZWQg4oCTIGVpdGhlciBhZ2dyZXNzaXZlbHkgYWxsb2NhdGluZyB0aGVtIHVwIGZyb250IG9yIGRlZmVycmluZyB0byBzbWFsbGVyIHBhZ2VzIGluaXRpYWxseSwgYW5kIHRoZW4gY29hbGVzY2luZyB0aGVtIGludG8gaHVnZXBhZ2VzIGxhdGVyLiBUaGlzIGNob2ljZSBzaWduaWZpY2FudGx5IGltcGFjdHMgbWVtb3J5IGZyYWdtZW50YXRpb24sIGFuZCB1bHRpbWF0ZWx5IGhhcyBhIG1hc3NpdmUgaW1wYWN0IG9uIHRoZSBwZXJmb3JtYW5jZSBvZiBhIGRpdmVyc2UgcmFuZ2Ugb2Ygd29ya2xvYWRzLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGlzIHRpZWQgdG8gdGhlIHBhZ2Ugc2l6ZSBzZXR0aW5ncy4gSSYjMzk7bGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIHdheXMgdG8gZnVydGhlciBtYW5hZ2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBmb3IgYSB2YXJpZXR5IG9mIHVzZSBjYXNlcywgbGlrZSB3aGV0aGVyIG9yIG5vdCBpdCBzaG91bGQgYmUgZW5hYmxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBjb250YWluZXJzLCBhcyB0aGF0IGhhcyBhIGh1Z2UgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgcGVyZm9ybWFuY2UgdHVuaW5nIG9wdGlvbnMgZm9yIHRoaXMgc3BlY2lmaWMgZmVhdHVyZSBhcyB3ZWxsLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBoYXBwZW4uCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYSBkZXZlbG9wZXIgaGFzIHRob3VnaHQgdGhyb3VnaCB0aGUgdHJhZGUtb2ZmcyBvZiB0aGlzIGZlYXR1cmUsIGhvdyB0aGV5JiMzOTt2ZSBzdHJ1Y3R1cmVkIGl0LCBhbmQgdWx0aW1hdGVseSwgd2hldGhlciBJIGNhbiBzYWZlbHkgdXNlIHRoaXMgZmVhdHVyZSB3aXRoaW4gbXkgc3BlY2lmaWMgY29udGV4dC4gSSYjMzk7bSBleHBlY3RpbmcgYSBjbGVhciB2aWV3IG9mIGl0cyBiZWhhdmlvciB0byBvcHRpbWl6ZSBpdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMDpcdFxuIDgzMTpcdGNvbmZpZyBNTV9JRFxuIDgzMjpcdFx0ZGVmX2Jvb2wgblxuIDgzMzpcdFxuIDgzNDpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzU6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzNjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODM3Olx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzODpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDgzOTpcdFx0c2VsZWN0IE1NX0lEXG4gODQwOlx0XHRoZWxwXG4gODQxOlx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4NDI6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDg0MzpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDQ6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDU6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0NjpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQ3Olx0XG4gODQ4Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY1NgoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBJIHVuZGVyc3RhbmQgZGVwZW5kcyBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgZXhjbHVkZXMgYFBSRUVNUFRfUlRgLiBObyBzdXJwcmlzZXMgdGhlcmUsIHRoYXQmIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBmb2xpbyBsb2NraW5nIGJlZm9yZSBjYWxsaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhbmQgZGl0Y2hpbmcgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYC4gSG1tLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgcmVmYWN0b3JpbmcuIFRoYXQgbWVhbnMgaXQgbmVlZHMgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0IHRvIGVuc3VyZSBzdGFiaWxpdHkuCgpNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbjoKKiAgIGBtZW1vcnlfZmFpbHVyZWAKKiAgIGBzb2Z0X29mZmxpbmVfcGFnZWAKKiAgIGBtaW5fb3JkZXJfZm9yX3NwbGl0YAoKRm9yIGVuYWJsaW5nIGNvbmZpZ3MsIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIG9idmlvdXMgY2hvaWNlcy4KCkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBnbG9iYWwgYW5kIGFjY2Vzc2libGUgZm9yIGZ1enppbmcuIFllcCwgaXQgaXMuIEdvb2QsIHRoYXQmIzM5O3MgaW1wb3J0YW50IGZvciB0aGUgZnV6emluZyBzdHJhdGVneS4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCBvdGhlciByZWxhdGVkIGNvbmZpZ3MuIGBIV1BPSVNPTl9JTkpFQ1RgICpjb3VsZCogYmUgdXNlZnVsLCBidXQgYE1BRFZfSFdQT0lTT05gIHNob3VsZCB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBTdGlsbCwgZm9yIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UsIEkmIzM5O2xsIGFkZCBgSFdQT0lTT05fSU5KRUNUYCB0byB0aGUgY29uZmlnIGxpc3QganVzdCB0byBiZSBzYWZlLiBUaGF0IHdheSwgSSBjYW4gdGVzdCBhbGwgcmVsYXRlZCBhcmVhcyBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O3NvZnRfb2ZmbGluZV9wYWdlJiMzNDssCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGFuZCBzb2Z0IG9mZmxpbmUgcGF0aHMgdG8gcHJvcGVybHkgbG9jayBmb2xpb3MgYmVmb3JlIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdCgpLCBhbmQgcmVmYWN0b3JzIFRIUCBzcGxpdHRpbmcgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtIV1BPSVNPTl9JTkpFQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7LAogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICAgJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBhbmQgc29mdCBvZmZsaW5lIHBhdGhzIHRvIHByb3Blcmx5IGxvY2sgZm9saW9zIGJlZm9yZSBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSwgYW5kIHJlZmFjdG9ycyBUSFAgc3BsaXR0aW5nIGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3IgaGFuZGxpbmcgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM2OjQxLjgzOTM3MjAxM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MzkxNzcyNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGFuZCBzb2Z0IG9mZmxpbmUgcGF0aHMgdG8gcHJvcGVybHkgbG9jayBmb2xpb3MgYmVmb3JlIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdCgpLCBhbmQgcmVmYWN0b3JzIFRIUCBzcGxpdHRpbmcgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNjo0MS44MzkzODEwMjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDI4MTE5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYzY3NmYxMzVmMjBjOGIzNDg1ZjEwYjYyNDhjYWQyMTIzOGUzYzYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMTI6MzY6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCA4MDRiOGY2YWE1NTcwLi4yYzVlN2IxYjY5MjZiIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTQ0MzIsMTAgKzQ0MzIsMTQgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuICAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuICAqIHNwbGl0IGF0dGVtcHQgc2hvdWxkIGdldCAtRUJVU1kgZnJvbSBzcGxpdCBjaGVja2luZyBjb2RlLlxcbiAgKlxcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQuXFxuKyAqXFxuICAqIFJldHVybjogQGZvbGlvJ3MgbWluaW11bSBvcmRlciBmb3Igc3BsaXRcXG4gICovXFxuIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4rXFxuIFxcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYThiMDNlMjkyMGJhOC4uYjU3NDBiOTI1YmJmZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC0xNzA1LDI2ICsxNzA1LDYgQEAgc3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCxcXG4gXFx0cmV0dXJuIHBhZ2VfYWN0aW9uKHBzLCBwLCBwZm4pO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBXaGVuICdyZWxlYXNlJyBpcyAnZmFsc2UnLCBpdCBtZWFucyB0aGF0IGlmIHRocCBzcGxpdCBoYXMgZmFpbGVkLFxcbi0gKiB0aGVyZSBpcyBzdGlsbCBtb3JlIHRvIGRvLCBoZW5jZSB0aGUgcGFnZSByZWZjb3VudCB3ZSB0b29rIGVhcmxpZXJcXG4tICogaXMgc3RpbGwgbmVlZGVkLlxcbi0gKi9cXG4tc3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLVxcdFxcdGJvb2wgcmVsZWFzZSlcXG4te1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0bG9ja19wYWdlKHBhZ2UpO1xcbi1cXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgbmV3X29yZGVyKTtcXG4tXFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuLVxcbi1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJlbGVhc2UpXFxuLVxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgdW5tYXBfYW5kX2tpbGwoc3RydWN0IGxpc3RfaGVhZCAqdG9fa2lsbCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LCBpbnQgZmxhZ3MpXFxuIHtcXG5AQCAtMjUwOSw5ICsyNDg5LDYgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4tXFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbi1cXHRcXHRpbnQgZXJyO1xcbi1cXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIGZsYWcgbXVzdCBiZSBzZXQgYWZ0ZXIgdGhlIHJlZmNvdW50IGlzIGJ1bXBlZFxcbiBcXHRcXHQgKiBvdGhlcndpc2UgaXQgbWF5IHJhY2Ugd2l0aCBUSFAgc3BsaXQuXFxuQEAgLTI1MjYsMjQgKzI1MDMsMjUgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIFxcdFxcdCAqIHBhZ2UgaXMgYSB2YWxpZCBoYW5kbGFibGUgcGFnZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XFxuLVxcdFxcdGVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTtcXG4rXFxuK1xcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbitcXHRcXHRzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocCwgbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbykpO1xcbitcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocCk7XFxuK1xcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiBzcGxpdHRpbmcgYSBmb2xpbyB0byBvcmRlci0wIGZhaWxzLCBraWxsIHRoZSBwcm9jZXNzLlxcbiBcXHRcXHQgKiBTcGxpdCB0aGUgZm9saW8gcmVnYXJkbGVzcyB0byBtaW5pbWl6ZSB1bnVzYWJsZSBwYWdlcy5cXG4gXFx0XFx0ICogQmVjYXVzZSB0aGUgbWVtb3J5IGZhaWx1cmUgY29kZSBjYW5ub3QgaGFuZGxlIGxhcmdlXFxuIFxcdFxcdCAqIGZvbGlvcywgdGhpcyBzcGxpdCBpcyBhbHdheXMgdHJlYXRlZCBhcyBpZiBpdCBmYWlsZWQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZXJyIHx8IG5ld19vcmRlcikge1xcbi1cXHRcXHRcXHQvKiBnZXQgZm9saW8gYWdhaW4gaW4gY2FzZSB0aGUgb3JpZ2luYWwgb25lIGlzIHNwbGl0ICovXFxuLVxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdHJlcyA9IC1FSFdQT0lTT047XFxuIFxcdFxcdFxcdGtpbGxfcHJvY3Nfbm93KHAsIHBmbiwgZmxhZ3MsIGZvbGlvKTtcXG4tXFx0XFx0XFx0cHV0X3BhZ2UocCk7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdFxcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5TUExJVF9USFAsIE1GX0ZBSUxFRCk7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHRcXHR9XFxuLVxcdFxcdFZNX0JVR19PTl9QQUdFKCFwYWdlX2NvdW50KHApLCBwKTtcXG4tXFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC0yODYxLDkgKzI4MzksOCBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0XFx0LnJlYXNvbiA9IE1SX01FTU9SWV9GQUlMVVJFLFxcbiBcXHR9O1xcbiBcXG4rXFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuIFxcdGlmICghaHVnZSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbi1cXHRcXHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XFxuLVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGVcXG4gXFx0XFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cXG5AQCAtMjg3MSwxNSArMjg0OCwyMCBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0XFx0ICogcHJlZmVycmVkLCBzcGxpdCBpdCB0byBub24temVybyBuZXdfb3JkZXIgbGlrZSBpdCBpcyBkb25lIGluXFxuIFxcdFxcdCAqIG1lbW9yeV9mYWlsdXJlKCkuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAvKiByZWxlYXNlPSAqLyB0cnVlKSkge1xcbitcXHRcXHRpZiAoIW1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pKVxcbitcXHRcXHRcXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgMCkgPyAtRUJVU1kgOiAwO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbitcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiB0aHAgc3BsaXQgZmFpbGVkXFxcXG5cXFwiLCBwZm4pO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuIFxcdGlmICghaHVnZSlcXG4gXFx0XFx0Zm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pO1xcbiBcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM2OjQzLjI0MzEzOTM5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzOTg3OTkzMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGFuZCBzb2Z0IG9mZmxpbmUgcGF0aHMgdG8gcHJvcGVybHkgbG9jayBmb2xpb3MgYmVmb3JlIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdCgpLCBhbmQgcmVmYWN0b3JzIFRIUCBzcGxpdHRpbmcgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzY3NmYxMzVmMjBjOGIzNDg1ZjEwYjYyNDhjYWQyMTIzOGUzYzYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxMjozNjozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA4MDRiOGY2YWE1NTcwLi4yYzVlN2IxYjY5MjZiIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MzIsMTAgKzQ0MzIsMTQgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbiAgKiBzcGxpdCBhdHRlbXB0IHNob3VsZCBnZXQgLUVCVVNZIGZyb20gc3BsaXQgY2hlY2tpbmcgY29kZS5cbiAgKlxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZC5cbisgKlxuICAqIFJldHVybjogQGZvbGlvJ3MgbWluaW11bSBvcmRlciBmb3Igc3BsaXRcbiAgKi9cbiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGE4YjAzZTI5MjBiYTguLmI1NzQwYjkyNWJiZmQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTcwNSwyNiArMTcwNSw2IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4gXHRyZXR1cm4gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbik7XG4gfVxuIFxuLS8qXG4tICogV2hlbiAncmVsZWFzZScgaXMgJ2ZhbHNlJywgaXQgbWVhbnMgdGhhdCBpZiB0aHAgc3BsaXQgaGFzIGZhaWxlZCxcbi0gKiB0aGVyZSBpcyBzdGlsbCBtb3JlIHRvIGRvLCBoZW5jZSB0aGUgcGFnZSByZWZjb3VudCB3ZSB0b29rIGVhcmxpZXJcbi0gKiBpcyBzdGlsbCBuZWVkZWQuXG4tICovXG4tc3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tXHRcdGJvb2wgcmVsZWFzZSlcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0bG9ja19wYWdlKHBhZ2UpO1xuLVx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XG4tXHR1bmxvY2tfcGFnZShwYWdlKTtcbi1cbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJlbGVhc2UpXG4tXHRcdHB1dF9wYWdlKHBhZ2UpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gc3RhdGljIHZvaWQgdW5tYXBfYW5kX2tpbGwoc3RydWN0IGxpc3RfaGVhZCAqdG9fa2lsbCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LCBpbnQgZmxhZ3MpXG4ge1xuQEAgLTI1MDksOSArMjQ4OSw2IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbiBcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuLVx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4tXHRcdGludCBlcnI7XG4tXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBmbGFnIG11c3QgYmUgc2V0IGFmdGVyIHRoZSByZWZjb3VudCBpcyBidW1wZWRcbiBcdFx0ICogb3RoZXJ3aXNlIGl0IG1heSByYWNlIHdpdGggVEhQIHNwbGl0LlxuQEAgLTI1MjYsMjQgKzI1MDMsMjUgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRcdCAqIHBhZ2UgaXMgYSB2YWxpZCBoYW5kbGFibGUgcGFnZS5cbiBcdFx0ICovXG4gXHRcdGZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XG4tXHRcdGVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTtcbitcbitcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG4rXHRcdHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwLCBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKSk7XG4rXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcbitcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcbiBcdFx0LypcbiBcdFx0ICogSWYgc3BsaXR0aW5nIGEgZm9saW8gdG8gb3JkZXItMCBmYWlscywga2lsbCB0aGUgcHJvY2Vzcy5cbiBcdFx0ICogU3BsaXQgdGhlIGZvbGlvIHJlZ2FyZGxlc3MgdG8gbWluaW1pemUgdW51c2FibGUgcGFnZXMuXG4gXHRcdCAqIEJlY2F1c2UgdGhlIG1lbW9yeSBmYWlsdXJlIGNvZGUgY2Fubm90IGhhbmRsZSBsYXJnZVxuIFx0XHQgKiBmb2xpb3MsIHRoaXMgc3BsaXQgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgaWYgaXQgZmFpbGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGVyciB8fCBuZXdfb3JkZXIpIHtcbi1cdFx0XHQvKiBnZXQgZm9saW8gYWdhaW4gaW4gY2FzZSB0aGUgb3JpZ2luYWwgb25lIGlzIHNwbGl0ICovXG4tXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuK1x0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbiBcdFx0XHRyZXMgPSAtRUhXUE9JU09OO1xuIFx0XHRcdGtpbGxfcHJvY3Nfbm93KHAsIHBmbiwgZmxhZ3MsIGZvbGlvKTtcbi1cdFx0XHRwdXRfcGFnZShwKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5TUExJVF9USFAsIE1GX0ZBSUxFRCk7XG4gXHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHRcdH1cbi1cdFx0Vk1fQlVHX09OX1BBR0UoIXBhZ2VfY291bnQocCksIHApO1xuLVx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocCk7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI4NjEsOSArMjgzOSw4IEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQucmVhc29uID0gTVJfTUVNT1JZX0ZBSUxVUkUsXG4gXHR9O1xuIFxuK1x0Zm9saW9fbG9jayhmb2xpbyk7XG4gXHRpZiAoIWh1Z2UgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4tXHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbi1cbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3X29yZGVyICh0YXJnZXQgc3BsaXQgb3JkZXIpIGlzIG5vdCAwLCBkbyBub3Qgc3BsaXQgdGhlXG4gXHRcdCAqIGZvbGlvIGF0IGFsbCB0byByZXRhaW4gdGhlIHN0aWxsIGFjY2Vzc2libGUgbGFyZ2UgZm9saW8uXG5AQCAtMjg3MSwxNSArMjg0OCwyMCBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdFx0ICogcHJlZmVycmVkLCBzcGxpdCBpdCB0byBub24temVybyBuZXdfb3JkZXIgbGlrZSBpdCBpcyBkb25lIGluXG4gXHRcdCAqIG1lbW9yeV9mYWlsdXJlKCkuXG4gXHRcdCAqL1xuLVx0XHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXG4tXHRcdFx0XHRcdFx0ICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4rXHRcdGlmICghbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbykpXG4rXHRcdFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIDApID8gLUVCVVNZIDogMDtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldCA9IC1FQlVTWTtcbitcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdHByX2luZm8oXCIlI2x4OiB0aHAgc3BsaXQgZmFpbGVkXFxuXCIsIHBmbik7XG4tXHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdH1cbiBcbi1cdGZvbGlvX2xvY2soZm9saW8pO1xuIFx0aWYgKCFodWdlKVxuIFx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG4gXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNjo0My4yNDMxNDEyNjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzEzMzAwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEh1Z2VUTEIvTWVtb3J5IEZhaWx1cmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIGEgbG9jayBjaGVjayBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGBWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pYC4gTWFrZXMgc2Vuc2U7IHdlIGRvbid0IHdhbnQgdG8gYmUgbWVzc2luZyB3aXRoIGZvbGlvIHNwbGl0dGluZyBpZiBpdCdzIGFscmVhZHkgbG9ja2VkLiBUaGVuLCB0aGUgcGF0Y2ggdXBkYXRlcyBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIGxvY2sgdGhlIGZvbGlvICpiZWZvcmUqIGNhbGxpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpczogQXJlIHRoZXNlIGNoYW5nZXMgcmVhY2hhYmxlPyBBcmUgdGhleSBhY3R1YWxseSB0ZXN0YWJsZT8gTGV0J3Mgc2VlLi4uIGBtZW1vcnlfZmFpbHVyZWAgaGFuZGxlcyBoYXJkd2FyZSBwb2lzb25pbmcsIHdoaWNoIHdlIGtub3cgY2FuIGJlIHRyaWdnZXJlZCBlaXRoZXIgdGhyb3VnaCBzeXNmcyBvciBieSB1c2luZyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3RpbmcuIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGRlYWxzIHdpdGggc29mdCBvZmZsaW5pbmcgb2YgcGFnZXMsIGFuZCBpdCdzIGFsc28gYWNjZXNzaWJsZSB2aWEgc3lzZnMgb3IgYG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpYC4gU28sIGF0IGxlYXN0IG9uIHRoZSBzdXJmYWNlLCB0aG9zZSBzZWVtIHRlc3RhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBzZWN0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgbWVtb3J5X2ZhaWx1cmVgIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbiByZXNpZGVzLiBJJ2xsIGdyZXAgZm9yIGBtZW1vcnktZmFpbHVyZS5vYCB3aXRoaW4gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluZGljYXRpb24gb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgbGl2ZXMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNjo0OC45NTY0NDYyMDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1ODM0NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeS1mYWlsdXJlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICs9IGRtYXBvb2xfdGVzdC5vXFxubW0vTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgKz0gbWVtb3J5LWZhaWx1cmUub1xcbm1tL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSArPSBod3BvaXNvbi1pbmplY3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNjo0OS4wNjIyODYyNTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODIyNzcxNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEZhaWx1cmUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoYXQgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBhIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGVycm9yIGhhbmRsaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgY29udGV4dCwgYW5kIHRoYXQgYWxtb3N0IGFsd2F5cyBtZWFucyBkaXZpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5LCBJJ2QgZXhwZWN0IHRvIGZpbmQgaXQgaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGlzIHRoaW5nIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgZW5hYmxlcyBvciBkaXNhYmxlcy4gVGltZSB0byBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MzY6NTcuODg1MDYwNTUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA0MTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NjQtXFxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjYtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MzY6NTguMDkxMTA4MTk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDU5NzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgYmVpbmcgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgcmVsZXZhbnQgYXJlYSwgbGlrZWx5IGFyb3VuZCBsaW5lIDc2NSDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgY2x1c3RlciwgdGhvdWdoIGl0IHZhcmllcywgb2YgY291cnNlLiBUaW1lIHRvIHNlZSB3aGF0J3MgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGNsZWFyIGVub3VnaCB0byBnbGVhbiB0aGUgZXNzZW50aWFsIGxvZ2ljIHdpdGhvdXQgdG9vIG11Y2ggZGlnZ2luZy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyB0aGUgYnVpbGQgb3B0aW9ucywgZGVmYXVsdHMsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3BlY2lmaWMgbWVtb3J5IHN1YnN5c3RlbS4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgaXMgYSBnb29kIHJlYXNvbiBmb3IgdGhlIHNwZWNpZmljIGxpbmUgb2YgY29kZSB0byBiZSB3aGVyZSBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjAyLjI1NTcwNzU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHRcXHQgIC9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIHR1bmFibGUuXFxuIDc2MTpcXHRcXG4gNzYyOlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuIDc2MzpcXHRcXHRib29sXFxuIDc2NDpcXHRcXG4gNzY1OlxcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbiA3NjY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNzY3OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3Njg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4gNzY5OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuIDc3MDpcXHRcXHRoZWxwXFxuIDc3MTpcXHRcXHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xcbiA3NzI6XFx0XFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xcbiA3NzM6XFx0XFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcXG4gNzc0OlxcdFxcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cXG4gNzc1OlxcdFxcbiA3NzY6XFx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbiA3Nzc6XFx0XFx0dHJpc3RhdGUgXFxcIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yXFxcIlxcbiA3Nzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcXHUwMDI2XFx1MDAyNiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbiA3Nzk6XFx0XFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjAyLjI1Nzk5NDcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4ODMwNjk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBNZW1vcnkgRmFpbHVyZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGhlcmUuIFdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkOyB0aGF0J3MgdGhlIGNvcmUuIFRoZW4sIEknbSBwb25kZXJpbmcgYENPTkZJR19IV1BPSVNPTl9JTkpFQ1RgLiBJdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGZ1enppbmcsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuIEJ1dCwgaG9sZCBvbi4uLiBpZiB3ZSBoYXZlIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQsIGlzbid0IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbHNvIGF2YWlsYWJsZT8gUmlnaHQsIGl0IHNob3VsZCBiZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYG1hZHZpc2VgIGFuZCBgTUFEVl9IV1BPSVNPTmAgYXJlIHByZXNlbnQgaW4gdGhpcyBidWlsZCB3aXRoIHRoYXQgY29uZmlnLiBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MDUuOTQ2MzA0ODM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY5NzEzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9IV1BPSVNPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ5NC1cXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxubW0vbWFkdmlzZS5jOjE0OTU6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNDk2LVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTUxLVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jOjE1NTI6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTUzLSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk0My0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xcbm1tL21hZHZpc2UuYzoxOTQ0OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXFxubW0vbWFkdmlzZS5jLTE5NDUtICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzowNi4xMTMyODM0ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1ODcwOTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIExvY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCBhcmUgaW5kZWVkIGF2YWlsYWJsZSDigJMgZ29vZC4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBMZXQncyBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGBtZW1vcnlfZmFpbHVyZWAsIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC5cblxuQWgsIGhlcmUgd2UgaGF2ZSBpdC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtgIHdpdGhpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIENsZWFybHksIHRoaXMgaXMgcmVsYXRlZCB0byBmb2xpbyBsb2NraW5nIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB0aGVuIGdvZXMgb24gdG8gZW5zdXJlIHRoYXQgY2FsbGVycyB3aXRoaW4gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgbm93IHByb3Blcmx5IGxvY2sgdGhlIGZvbGlvICpiZWZvcmUqIGNhbGxpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIHByaW1hcmlseSBkZWFsaW5nIHdpdGggbG9ja2luZyBhbmQgYSBiaXQgb2YgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSB0aHJlYWQgc2FmZXR5IHdpdGhpbiB0aGUgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBjb2RlIHBhdGguXG5cblRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjaGFuZ2UgaXMgdGhyb3VnaCB0aGUgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGFuZCBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgIHN5c3RlbSBjYWxscyBzcGVjaWZpY2FsbHkgb3BlcmF0aW5nIG9uIFRIUHMuIFRvIHByb3Blcmx5IHRlc3QgdGhpcyB0aG9yb3VnaGx5LCBJIHdpbGwgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gYG1tL2AgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjAzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjEyLjI3MTk5NjA3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxMDk4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzE9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMy1cXG5tbS9LY29uZmlnOjgzNDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzUtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTctXFxubW0vS2NvbmZpZzo4NTg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU5LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODY0LVxcbm1tL0tjb25maWc6ODY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjYtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODczLVxcbm1tL0tjb25maWc6ODc0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODc1LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODE9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5MC1cXG5tbS9LY29uZmlnOjg5MTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkyLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDAtXFxubW0vS2NvbmZpZzo5MDE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDItXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDgtXFxubW0vS2NvbmZpZzo5MDk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE2LVxcbm1tL0tjb25maWc6OTE3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE4LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI2PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzUtXFxubW0vS2NvbmZpZzo5MzY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzNy1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ0LVxcbm1tL0tjb25maWc6OTQ1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ2LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUyLVxcbm1tL0tjb25maWc6OTUzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTQtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2MC1cXG5tbS9LY29uZmlnOjk2MTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2Mi1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjEyLjM2OTExMTM1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYzNDc5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBDb25maWd1cmF0aW9uIGFuZCBSZWxhdGVkIENvZGUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHBsYXlpbmcgd2l0aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBhIGtleSBzZXR0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHR3ZWFraW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IGZhaWx1cmVzIGFuZCBzb2Z0bHkgb2ZmbGluaW5nIHBhZ2VzIHRoYXQgYXJlIGluIHVzZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBjb25maXJtaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgYW5kIGlmIHRoZXJlIGFyZSBzaWRlIGVmZmVjdHMuIEknbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBtZW1vcnlfZmFpbHVyZWAuIFNpbmNlIHRoZSB0ZXh0IG1lbnRpb25zIHRoZSBmdW5jdGlvbiBuYW1lLCBteSBmaXJzdCBzdG9wIHdpbGwgYmUgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgaGVhcnQgb2YgdGhlIGxvZ2ljIGJlaGluZCB0aGF0IGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBob3cgdGhlIGZhaWx1cmUgaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGVuIEkgd2lsbCBjaGVjayBob3cgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgaXMgYmVpbmcgY2FsbGVkIGFuZCB3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjE2LjEzMjU5MjkzOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMzU1MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbWVtb3J5X2ZhaWx1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTIzMDA9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzNjY6aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MTYuMjQ1OTUzOTIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTY5NTgyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgTWVtb3J5IEZhaWx1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgaGFuZGxpbmcgZm9yIGEgXCJzb2Z0IG9mZmxpbmVcIiBzY2VuYXJpbywgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZSwgYXMgaXQgc2VlbXMgcmVsZXZhbnQuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgbG9naWMgYmVoaW5kIHRoaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc2l0dWF0aW9uLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYmVoYXZpb3IgSSdtIHNlZWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjE5Ljg2MjkyMTc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMwNzU3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0yODE3PUVYUE9SVF9TWU1CT0wodW5wb2lzb25fbWVtb3J5KTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgyNi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4Mjc6c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MjAuMDI2MDMxNjI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTQzNTU1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIHNvbWUgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMuIFNwZWNpZmljYWxseSwgaXQncyBjaGFuZ2luZyBob3cgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgKGFuZCBwb3NzaWJseSBgc29mdF9vZmZsaW5lX3BhZ2VgLCBpZiB0aGUgc3ltYm9sIHJlc29sdXRpb24gaXMgb2ZmKSBoYW5kbGUgZm9saW8gbG9ja2luZyBiZWZvcmUgaW52b2tpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBUaGF0J3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE1vcmUgaW50ZXJlc3RpbmdseSwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlbW92aW5nIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGFuZCBkaXJlY3RseSBjYWxsaW5nIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0J3MgY2hhbmdpbmcgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGUgaHVnZSBwYWdlIHNwbGl0dGluZyBsb2dpYywgcmVtb3ZpbmcgYSBsYXllciBvZiBhYnN0cmFjdGlvbi5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCBuZWVkcyByaWdvcm91cyBmdXp6aW5nLiBDaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IHRob3NlIGFsdGVyaW5nIGhvdyBwYWdlIHNwbGl0dGluZyBpcyBoYW5kbGVkLCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW50cm9kdWNpbmcgc3VidGxlLCBhbmQgcG90ZW50aWFsbHkgY2F0YXN0cm9waGljLCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZSBhbHRlcmVkIGNvZGUgcGF0aHMgd2l0aGluIGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCBhbmQsIGNyaXRpY2FsbHksIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBJJ2xsIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBjb250cm9sIGZsb3cgaW4gdGhlIGRpZmZlcmVudCBlZGdlIGNhc2VzIHRoZSBmdXp6aW5nIHVuY292ZXJzLlxuXG5Ob3csIGxldCBtZSBjaGVjayBgc29mdF9vZmZsaW5lX3BhZ2VgIHRvIHZlcmlmeSB0aGUgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MjQuNjQwMzkwNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzA5NjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0yODI3PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTQ4LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk0OTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzoyNC43NDM0OTM2NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NDU4MDk1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGBtYWR2aXNlYCBNYXplKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaGFuZGxpbmcgc29tZXRoaW5nIG9mZi1saW5lLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGFwcGVhcnMgdG8gYmUgYHNvZnRfb2ZmbGluZV9wYWdlYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdW5kZXJzdG9vZC4gQnV0IHRoZW4gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGhvdyBkb2VzIHRoYXQgaW50ZXJhY3Qgd2l0aCBgbWFkdmlzZWA/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBtYWR2aXNlYCBiZWhhdmlvciBpcyByZWxldmFudCBoZXJlIOKAkyBpcyBpdCBgbWFkdmlzZV9kb19iZWhhdmlvcmAsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgbGlrZSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIG9yIGV2ZW4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYD8gVG8gcGlucG9pbnQgdGhlIHJpZ2h0IHBhdGgsIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gYG1hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGBNQURWX0hXUE9JU09OYC4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgb2ZmLWxpbmUgYXNwZWN0IHdpbGwgYmUgbWFkZSwgYW5kIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgYmVoYXZpb3Igd2lsbCBiZSBkZWZpbmVkLiBJJ2xsIGZvY3VzIG15IHNlYXJjaCB3aXRoaW4gYG1hZHZpc2UuY2AgZm9yIGFueSBtZW50aW9uIG9mIGBNQURWX0hXUE9JU09OYCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgY29uY2VwdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzozNy4yODkzMDU1NTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODY0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BRFZfSFdQT0lTT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0OTQtXFx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxNDk1OlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTQ5Ni1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MS1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYzoxNTUyOlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcXG5tbS9tYWR2aXNlLmM6MTk0NDogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MzcuMzc5MTc0NDY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNzkyMjY3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgTUFEVl9IV1BPSVNPTmAgaXMgaGFuZGxlZCB3aXRoaW4gYG1hZHZpc2UuY2AuXG5cbioqRGl2aW5nIGludG8gTUFEVl9IV1BPSVNPTiB3aXRoaW4gbWFkdmlzZS5jKipcblxuQWxyaWdodCwgc28gSSdtIGludGVyZXN0ZWQgaW4gaG93IGBNQURWX0hXUE9JU09OYCBpcyBhY3R1YWxseSAqaW1wbGVtZW50ZWQqLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgYWR2aWNlIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCdzIGdvaW5nIHRvIGJlIGEgZmFzY2luYXRpbmcgam91cm5leSBpbnRvIHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucywgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggZXJyb3ItY29ycmVjdGluZyBjb2RlIChFQ0MpIG1lbW9yeSBvciBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc21zLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBpbnZvbHZlcyBkaXJlY3RseSBtYW5pcHVsYXRpbmcgcGFnZSBmbGFncywgdHJpZ2dlcmluZyBoYXJkd2FyZSBleGNlcHRpb25zIGluIGEgY29udHJvbGxlZCBtYW5uZXIsIG9yIHBlcmhhcHMgdXNpbmcgc29tZSBtb3JlIGFic3RyYWN0IG1lY2hhbmlzbSBwcm92aWRlZCBieSB0aGUga2VybmVsIHRvIHNpZ25hbCBvciBtYXJrIHRoZXNlIHBhZ2VzLiBBcmUgdGhlcmUgbmV3IHN5c3RlbSBjYWxscyBvciBmbGFncz8gT3IgbWF5YmUgaXQncyBjbGV2ZXJseSBwaWdneWJhY2tpbmcgb24gZXhpc3RpbmcgbWFkdmlzZSBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBhc3N1bXB0aW9ucyBiZWluZyBtYWRlLiBBcmUgd2UgZGVhbGluZyB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHZlbmRvcnMgb3IgYSBtb3JlIGdlbmVyYWxpemVkIGFwcHJvYWNoPyBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzeW5jaHJvbml6YXRpb24gYXNwZWN0cy4gSG93IGFyZSBjb25jdXJyZW50IGFjY2Vzc2VzIGhhbmRsZWQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBIb3cgZG9lcyB0aGUga2VybmVsIGRlYWwgd2l0aCB0aGUgY2FzZSBvZiBhIHBvaXNvbmVkIHBhZ2UgKmFscmVhZHkqIGJlaW5nIGFjY2Vzc2VkIG9yIG1vZGlmaWVkPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBwcmVjaXNlbHkgaG93IHRoZSBrZXJuZWwgY2FuIGluc3RydWN0IHRoZSBoYXJkd2FyZSB0byBjb25zaWRlciBhIG1lbW9yeSBwYWdlIGFzIGJhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjQyLjU1ODQwNDQwOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkwNTI1NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9pbmplY3RfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ0Ni0gKi9cXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNDQ4LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MDQtXFxubW0vbWFkdmlzZS5jOjE1MDU6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMTUwNi17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xODk2LVxcdFxcdHJhbmdlLVxcdTAwM2VlbmQgPSBzdGFydCArIGxlbl9pbjtcXG5tbS9tYWR2aXNlLmM6MTg5NzpcXHRcXHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTE4OTgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzo0Mi42NTc0NjE5ODJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NTQ1NTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCByaWdodD8gSSdtIGJldHRpbmcgdGhhdCdzIHRoZSBwb2ludCBvZiBvcmlnaW4gZm9yIHRoZSBzaW11bGF0ZWQgbWVtb3J5IGVycm9ycyB3ZSdyZSB0YWxraW5nIGFib3V0LiBUaGUgaW50ZXJlc3RpbmcgYml0IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGV2ZWxzLiBUaGUgdGV4dCBzdWdnZXN0cyB0aGF0IGl0LCBhdCBzb21lIHBvaW50LCBjYWxscyBlaXRoZXIgYG1lbW9yeV9mYWlsdXJlYCBvciBgc29mdF9vZmZsaW5lX3BhZ2VgLiBUaGF0J3Mgb3VyIHRhcmdldC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGV4YWN0IGRlY2lzaW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IGNob29zZXMgYmV0d2VlbiB0aG9zZSB0d28sIGFuZCB3aGF0IHRoYXQgY2hvaWNlIHRlbGxzIHVzIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIHNpbXVsYXRlZCBlcnJvci4gRG9lcyB0aGUgY2hvaWNlIHJlbGF0ZSB0byB0aGUgbGV2ZWwgb2Ygc2ltdWxhdGVkIGZhaWx1cmU/IE9yIHRoZSBsb2NhdGlvbiBpdCBtYXkgYmUgaW5qZWN0ZWQgaW50bz8gVGltZSB0byBkaXNzZWN0IHRoYXQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIExldCdzIHN0YXJ0IHdpdGggYSBjbG9zZSBsb29rIGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6NDcuNTMyOTIwMzY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ0MDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMTQ0MTpcXHR9XFxuMTQ0MjpcXHRcXG4xNDQzOlxcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4xNDQ0OlxcdC8qXFxuMTQ0NTpcXHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxcbjE0NDY6XFx0ICovXFxuMTQ0NzpcXHRzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE0NDg6XFx0e1xcbjE0NDk6XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbjE0NTA6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlLnN0YXJ0O1xcbjE0NTE6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZS5lbmQ7XFxuMTQ1MjpcXHRcXG4xNDUzOlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG4xNDU0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGZvciAoOyBzdGFydCBcXHUwMDNjIGVuZDsgc3RhcnQgKz0gc2l6ZSkge1xcbjE0NTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuMTQ1ODpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4xNDU5OlxcdFxcdFxcdGludCByZXQ7XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdFxcdHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3Qoc3RhcnQsIDEsIDAsIFxcdTAwMjZwYWdlKTtcXG4xNDYyOlxcdFxcdFxcdGlmIChyZXQgIT0gMSlcXG4xNDYzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTQ2NDpcXHRcXHRcXHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG4xNDY1OlxcdFxcbjE0NjY6XFx0XFx0XFx0LypcXG4xNDY3OlxcdFxcdFxcdCAqIFdoZW4gc29mdCBvZmZsaW5pbmcgaHVnZXBhZ2VzLCBhZnRlciBtaWdyYXRpbmcgdGhlIHBhZ2VcXG4xNDY4OlxcdFxcdFxcdCAqIHdlIGRpc3NvbHZlIGl0LCB0aGVyZWZvcmUgaW4gdGhlIHNlY29uZCBsb29wIFxcXCJwYWdlXFxcIiB3aWxsXFxuMTQ2OTpcXHRcXHRcXHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxcbjE0NzA6XFx0XFx0XFx0ICovXFxuMTQ3MTpcXHRcXHRcXHRzaXplID0gcGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpO1xcbjE0NzI6XFx0XFxuMTQ3MzpcXHRcXHRcXHRpZiAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcXG4xNDc0OlxcdFxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuMTQ3NTpcXHRcXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxuMTQ3NjpcXHRcXHRcXHRcXHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIE1GX0NPVU5UX0lOQ1JFQVNFRCk7XFxuMTQ3NzpcXHRcXHRcXHR9IGVsc2Uge1xcbjE0Nzg6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiSW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGZvciBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxcXG5cXFwiLFxcbjE0Nzk6XFx0XFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcbjE0ODA6XFx0XFx0XFx0XFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9BQ1RJT05fUkVRVUlSRUQgfCBNRl9DT1VOVF9JTkNSRUFTRUQgfCBNRl9TV19TSU1VTEFURUQpO1xcbjE0ODE6XFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcXG4xNDgyOlxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTQ4MzpcXHRcXHRcXHR9XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdFxcdFxcdGlmIChyZXQpXFxuMTQ4NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0ODc6XFx0XFx0fVxcbjE0ODg6XFx0XFxuMTQ4OTpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6NDcuNTMzMTg1OTc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDMyMzI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGNhbGxlZCBmcm9tIGBtYWR2aXNlYCBpdHNlbGYuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGdhdGV3YXkgZm9yIGluamVjdGluZyB0aGUgZXJyb3JzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgbW9kaWZpY2F0aW9ucyB0byB0d28gc3BlY2lmaWMgZnVuY3Rpb25zOiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IG1hbmFnZW1lbnQgd29ya3MsIHRoZXNlIGFyZSB0aGUgb25lcyBJIG5lZWQgdG8gemVybyBpbiBvbi4gVGhlIGNoYW5nZXMgdG8gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFyZSBpbnRlcmVzdGluZywgYnV0IHNpbmNlIGl0J3MgYSBoZWxwZXIgZnVuY3Rpb24sIEknbGwgbGlrZWx5IG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX3BhZ2VgLiBJJ2xsIGhhdmUgdG8gdmVyaWZ5IGlmIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBzdGF0aWMgYXMgaXQgd2lsbCBpbXBhY3QgaG93IHdpZGVseSB0aGUgbW9kaWZpY2F0aW9ucyB3aWxsIGltcGFjdCB0aGUgYXJjaGl0ZWN0dXJlLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzY29wZSBvZiB0aGUgZnVuY3Rpb24uIExldCdzIHNlZSBpZiB0aGlzIHBhdGNoIGNhdXNlcyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzo1MS43MzY0MjE5MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjg3NTcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQ0MjA9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0MzgtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDM5OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00NDQwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6NTEuODQ5MzY2MDg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTg1MDQxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcywgYW5kIGl0J3MgY2xlYXIgdGhpcyBpc24ndCBhIHN0YXRpYyBzaXR1YXRpb24g4oCTIHRoaW5ncyBhcmUgZHluYW1pY2FsbHkgY29uZmlndXJlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgYWN0dWFsbHkgcmVsZXZhbnQgaGVyZS4gTGV0J3Mgc3RhcnQgYnkgcXVpY2tseSBjb25maXJtaW5nIHdoZXRoZXIgYG1lbW9yeV9mYWlsdXJlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgYW5kLCBub3BlLCBpdCdzIG5vdC4gVGhlIHNhbWUgZ29lcyBmb3IgYHNvZnRfb2ZmbGluZV9wYWdlYC4gQm90aCBhcmUgZHluYW1pYy5cblxuQWxyaWdodCwgc28gdGhlIGtleSB2YXJpYWJsZXMgdG8gZm9jdXMgb24gYXJlIG5vdzogYG1lbW9yeV9mYWlsdXJlYCwgYHNvZnRfb2ZmbGluZV9wYWdlYCwgYW5kIGFsc28gdGhlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCDigJMgYmVjYXVzZSBJIGtub3cgdGhhdCBjYW4gc29tZXRpbWVzIGJlIGEgY29uZmlndXJhdGlvbiBwb2ludCB0b28uXG5cblRvIGFjdHVhbGx5ICplbmFibGUqIHRoZXNlIG1lbW9yeSBmYWlsdXJlIGZlYXR1cmVzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgc2V0LiBJdCdzIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHRob3NlIGxvb2sgbGlrZSB0aGUgb25lcyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuQnV0IHdhaXQsIGhvbGQgb24uLi4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBNTVVgLiBPa2F5LCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBkZXBlbmRlbmN5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyB0b28uIExldCBtZSBkb3VibGUtY2hlY2suIE9rYXksIGBNRU1PUllfRkFJTFVSRWAgZGVwZW5kcyBvbiAqYm90aCogYE1NVWAgYW5kIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGF0IG9uZSByaWdodC5cblxuYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGlzIGNvbW1vbmx5IHNldCBvbiB4ODYgYW5kIGFybTY0IGFyY2hpdGVjdHVyZXMuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSB0byBzZWUgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBmb3IgeDg2LiBJIGJldHRlciBnbyBhbmQgY2hlY2sgdGhhdCByaWdodCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjU4LjM2Nzg3NTE1NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMjcyODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTc1MD1jb25maWcgWDg2X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTc1Ni1cXHRkZXBlbmRzIG9uIFg4Nl82NCB8fCAhU1BBUlNFTUVNXFxuYXJjaC94ODYvS2NvbmZpZzo3NTc6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5hcmNoL3g4Ni9LY29uZmlnLTc1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6NTguNTQwMTUzMTEyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5Mjk1MTgwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTWVtb3J5IEZhaWx1cmUgU3VwcG9ydCoqXG5cblJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGxvb2tpbmcgYXQsIHRoZSBgWDg2X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBmbGFnLCBpcyBpbmRlZWQgc2VsZWN0ZWQuIEdvb2Qgc3RhcnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSwgaXMgdG8gZG91YmxlLWNoZWNrIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IEknbSB1c2luZyAqYWN0dWFsbHkqIHN1cHBvcnRzIHRoaXMuXG5cbkxldCdzIHNlZeKApiB0aGUgZGVwZW5kZW5jaWVzIGxpc3RlZCBhcmUgYFg4Nl82NCB8fCAhU1BBUlNFTUVNYC4gT2theSwgdGhhdCBtZWFucyBpdCdzIGF2YWlsYWJsZSBlaXRoZXIgb24gYW4geDg2LTY0IGFyY2hpdGVjdHVyZSAqb3IqIGlmIHRoZSBrZXJuZWwgaXNuJ3QgdXNpbmcgc3BhcnNlIG1lbW9yeSBtYW5hZ2VtZW50LiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQuIEdpdmVuIG15IHNldHVwLCBJJ20gY29uZmlkZW50IGl0J3Mgc2F0aXNmaWVkLiBObyByZWQgZmxhZ3MgdGhlcmUuXG5cbk5vdywgYmVmb3JlIEkgc3RhcnQgd29ya2luZyB3aXRoIHRoaXMsIGl0IGlzIHdvcnRoIHF1aWNrbHkgZW5zdXJpbmcgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgT0suIE5vIHBvaW50IGJ1aWxkaW5nIHNvbWV0aGluZyBpZiBpdCBpcyBibG9ja2VkIGluIHNvbWUgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM4OjA0LjQ2OTY3MzcyMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NTU0NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODMxPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzMtXFxubW0vS2NvbmZpZzo4MzQ6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM1LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Mj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU3LVxcbm1tL0tjb25maWc6ODU4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg1OS1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2NC1cXG5tbS9LY29uZmlnOjg2NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY2LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3My1cXG5tbS9LY29uZmlnOjg3NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3NS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODgxPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTAtXFxubW0vS2NvbmZpZzo4OTE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5Mi1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTAwLVxcbm1tL0tjb25maWc6OTAxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAyLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA4LVxcbm1tL0tjb25maWc6OTA5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTAtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNi1cXG5tbS9LY29uZmlnOjkxNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxOC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyNj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM1LVxcbm1tL0tjb25maWc6OTM2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzctXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0NC1cXG5tbS9LY29uZmlnOjk0NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0Ni1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Mi1cXG5tbS9LY29uZmlnOjk1MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU0LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjAtXFxubW0vS2NvbmZpZzo5NjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjItXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozODowNC42MzcyMzM0MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4Mzk0NTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBjb25jZXJuaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGltZSB0byBkaXNzZWN0IGBtbS9LY29uZmlnYCBhbmQgemVybyBpbiBvbiB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9ucy4gSSBhbHJlYWR5IGtub3cgdGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGVzcGVjaWFsbHkgb24gc3lzdGVtcyB3aXRoIHN1YnN0YW50aWFsIG1lbW9yeSBmb290cHJpbnRzLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCB0aGUgY29yZSBzd2l0Y2hlcyB0aGF0IGdvdmVybiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmdW5kYW1lbnRhbCBtZW1vcnkgYWxsb2NhdGlvbiB1bml0LlxuXG5JJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBib29sYCBhbmQgYHRyaXN0YXRlYCBvcHRpb25zLCBhbG9uZyB3aXRoIHNvbWUgYWNjb21wYW55aW5nIGhlbHAgdGV4dCwgbmF0dXJhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmaXJzdC4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcsIGRpc2FibGluZywgb3IgbWFraW5nIGl0IG1vZHVsYXIuIEknbSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmU/IElzIHRoZXJlIGFuIGludGVyYWN0aW9uIHdpdGggTlVNQT8gV2hhdCBhYm91dCBkaWZmZXJlbnQgQ1BVIGFyY2hpdGVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGxhdGZvcm0gY29uc2lkZXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD9cblxuTW9yZSBzcGVjaWZpY2FsbHksIEknbSBhbnRpY2lwYXRpbmcgc29tZSBsZXZlbCBvZiBncmFudWxhcml0eSBoZXJlOiB0aGUgYWJpbGl0eSB0byBzZWxlY3QgdGhlICpwb2xpY3kqIHRoYXQgZ292ZXJucyBob3cgaHVnZXBhZ2VzIGFyZSBtYW5hZ2VkIOKAkyBlaXRoZXIgYWdncmVzc2l2ZWx5IGFsbG9jYXRpbmcgdGhlbSB1cCBmcm9udCBvciBkZWZlcnJpbmcgdG8gc21hbGxlciBwYWdlcyBpbml0aWFsbHksIGFuZCB0aGVuIGNvYWxlc2NpbmcgdGhlbSBpbnRvIGh1Z2VwYWdlcyBsYXRlci4gVGhpcyBjaG9pY2Ugc2lnbmlmaWNhbnRseSBpbXBhY3RzIG1lbW9yeSBmcmFnbWVudGF0aW9uLCBhbmQgdWx0aW1hdGVseSBoYXMgYSBtYXNzaXZlIGltcGFjdCBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgYSBkaXZlcnNlIHJhbmdlIG9mIHdvcmtsb2Fkcy4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGlzIHRpZWQgdG8gdGhlIHBhZ2Ugc2l6ZSBzZXR0aW5ncy4gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3Igd2F5cyB0byBmdXJ0aGVyIG1hbmFnZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGZvciBhIHZhcmlldHkgb2YgdXNlIGNhc2VzLCBsaWtlIHdoZXRoZXIgb3Igbm90IGl0IHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIGNvbnRhaW5lcnMsIGFzIHRoYXQgaGFzIGEgaHVnZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuIEknbSBrZWVuIHRvIHNwb3QgYW55IHBlcmZvcm1hbmNlIHR1bmluZyBvcHRpb25zIGZvciB0aGlzIHNwZWNpZmljIGZlYXR1cmUgYXMgd2VsbC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgaGFwcGVuLlxuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYSBkZXZlbG9wZXIgaGFzIHRob3VnaHQgdGhyb3VnaCB0aGUgdHJhZGUtb2ZmcyBvZiB0aGlzIGZlYXR1cmUsIGhvdyB0aGV5J3ZlIHN0cnVjdHVyZWQgaXQsIGFuZCB1bHRpbWF0ZWx5LCB3aGV0aGVyIEkgY2FuIHNhZmVseSB1c2UgdGhpcyBmZWF0dXJlIHdpdGhpbiBteSBzcGVjaWZpYyBjb250ZXh0LiBJJ20gZXhwZWN0aW5nIGEgY2xlYXIgdmlldyBvZiBpdHMgYmVoYXZpb3IgdG8gb3B0aW1pemUgaXQgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozODoxMC4wMjExODg3MThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMDpcXHRcXG4gODMxOlxcdGNvbmZpZyBNTV9JRFxcbiA4MzI6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4MzM6XFx0XFxuIDgzNDpcXHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDgzNTpcXHRcXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbiA4MzY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gODM3OlxcdFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuIDgzODpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDgzOTpcXHRcXHRzZWxlY3QgTU1fSURcXG4gODQwOlxcdFxcdGhlbHBcXG4gODQxOlxcdFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbiA4NDI6XFx0XFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXFxuIDg0MzpcXHRcXHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxcbiA4NDQ6XFx0XFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxcbiA4NDU6XFx0XFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXFxuIDg0NjpcXHRcXHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cXG4gODQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozODoxMC4wMjQ1OTYyOTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0NDc0NTMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggSSB1bmRlcnN0YW5kIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGV4Y2x1ZGVzIGBQUkVFTVBUX1JUYC4gTm8gc3VycHJpc2VzIHRoZXJlLCB0aGF0J3MgZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgZm9saW8gbG9ja2luZyBiZWZvcmUgY2FsbGluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgYW5kIGRpdGNoaW5nIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGluIGZhdm9yIG9mIGRpcmVjdGx5IGNhbGxpbmcgYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAuIEhtbSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlZmFjdG9yaW5nLiBUaGF0IG1lYW5zIGl0IG5lZWRzIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydCB0byBlbnN1cmUgc3RhYmlsaXR5LlxuXG5NeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbjpcbiogICBgbWVtb3J5X2ZhaWx1cmVgXG4qICAgYHNvZnRfb2ZmbGluZV9wYWdlYFxuKiAgIGBtaW5fb3JkZXJfZm9yX3NwbGl0YFxuXG5Gb3IgZW5hYmxpbmcgY29uZmlncywgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgb2J2aW91cyBjaG9pY2VzLlxuXG5JIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgZ2xvYmFsIGFuZCBhY2Nlc3NpYmxlIGZvciBmdXp6aW5nLiBZZXAsIGl0IGlzLiBHb29kLCB0aGF0J3MgaW1wb3J0YW50IGZvciB0aGUgZnV6emluZyBzdHJhdGVneS5cblxuTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IG90aGVyIHJlbGF0ZWQgY29uZmlncy4gYEhXUE9JU09OX0lOSkVDVGAgKmNvdWxkKiBiZSB1c2VmdWwsIGJ1dCBgTUFEVl9IV1BPSVNPTmAgc2hvdWxkIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFN0aWxsLCBmb3IgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSwgSSdsbCBhZGQgYEhXUE9JU09OX0lOSkVDVGAgdG8gdGhlIGNvbmZpZyBsaXN0IGp1c3QgdG8gYmUgc2FmZS4gVGhhdCB3YXksIEkgY2FuIHRlc3QgYWxsIHJlbGF0ZWQgYXJlYXMgb2YgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjU2LCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM4OjE3LjA2OTM0NTU3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzgxOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiLFxuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBhbmQgc29mdCBvZmZsaW5lIHBhdGhzIHRvIHByb3Blcmx5IGxvY2sgZm9saW9zIGJlZm9yZSBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSwgYW5kIHJlZmFjdG9ycyBUSFAgc3BsaXR0aW5nIGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3IgaGFuZGxpbmcgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiLFxuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBhbmQgc29mdCBvZmZsaW5lIHBhdGhzIHRvIHByb3Blcmx5IGxvY2sgZm9saW9zIGJlZm9yZSBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSwgYW5kIHJlZmFjdG9ycyBUSFAgc3BsaXR0aW5nIGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3IgaGFuZGxpbmcgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 11:55:42 +0000 UTC FinishedAt: 2026-08-06 12:38:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "98a7867ce2341ede3ca82f4ef6868135c7ff53d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "HWPOISON_INJECT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "98a7867ce2341ede3ca82f4ef6868135c7ff53d1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "TRANSPARENT_HUGEPAGE", "HWPOISON_INJECT" ], "series_id": "34fef113-b20e-468d-b0d9-965e8eb944bc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_failure", "soft_offline_page", "min_order_for_split" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O3NvZnRfb2ZmbGluZV9wYWdlJiMzNDssCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGFuZCBzb2Z0IG9mZmxpbmUgcGF0aHMgdG8gcHJvcGVybHkgbG9jayBmb2xpb3MgYmVmb3JlIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdCgpLCBhbmQgcmVmYWN0b3JzIFRIUCBzcGxpdHRpbmcgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmM2NzZmMTM1ZjIwYzhiMzQ4NWYxMGI2MjQ4Y2FkMjEyMzhlM2M2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTI6MzY6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDgwNGI4ZjZhYTU1NzAuLjJjNWU3YjFiNjkyNmIgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQzMiwxMCAmIzQzOzQ0MzIsMTQgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbiAgKiBzcGxpdCBhdHRlbXB0IHNob3VsZCBnZXQgLUVCVVNZIGZyb20gc3BsaXQgY2hlY2tpbmcgY29kZS5cbiAgKlxuJiM0MzsgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQuXG4mIzQzOyAqXG4gICogUmV0dXJuOiBAZm9saW8mIzM5O3MgbWluaW11bSBvcmRlciBmb3Igc3BsaXRcbiAgKi9cbiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuJiM0MztcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggYThiMDNlMjkyMGJhOC4uYjU3NDBiOTI1YmJmZCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbkBAIC0xNzA1LDI2ICYjNDM7MTcwNSw2IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4gXHRyZXR1cm4gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbik7XG4gfVxuIFxuLS8qXG4tICogV2hlbiAmIzM5O3JlbGVhc2UmIzM5OyBpcyAmIzM5O2ZhbHNlJiMzOTssIGl0IG1lYW5zIHRoYXQgaWYgdGhwIHNwbGl0IGhhcyBmYWlsZWQsXG4tICogdGhlcmUgaXMgc3RpbGwgbW9yZSB0byBkbywgaGVuY2UgdGhlIHBhZ2UgcmVmY291bnQgd2UgdG9vayBlYXJsaWVyXG4tICogaXMgc3RpbGwgbmVlZGVkLlxuLSAqL1xuLXN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLVx0XHRib29sIHJlbGVhc2UpXG4te1xuLVx0aW50IHJldDtcbi1cbi1cdGxvY2tfcGFnZShwYWdlKTtcbi1cdHJldCA9IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwYWdlLCBuZXdfb3JkZXIpO1xuLVx0dW5sb2NrX3BhZ2UocGFnZSk7XG4tXG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZWxlYXNlKVxuLVx0XHRwdXRfcGFnZShwYWdlKTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHVubWFwX2FuZF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCwgaW50IGZsYWdzKVxuIHtcbkBAIC0yNTA5LDkgJiM0MzsyNDg5LDYgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuIFxuIFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4tXHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbi1cdFx0aW50IGVycjtcbi1cbiBcdFx0LypcbiBcdFx0ICogVGhlIGZsYWcgbXVzdCBiZSBzZXQgYWZ0ZXIgdGhlIHJlZmNvdW50IGlzIGJ1bXBlZFxuIFx0XHQgKiBvdGhlcndpc2UgaXQgbWF5IHJhY2Ugd2l0aCBUSFAgc3BsaXQuXG5AQCAtMjUyNiwyNCAmIzQzOzI1MDMsMjUgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRcdCAqIHBhZ2UgaXMgYSB2YWxpZCBoYW5kbGFibGUgcGFnZS5cbiBcdFx0ICovXG4gXHRcdGZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XG4tXHRcdGVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTtcbiYjNDM7XG4mIzQzO1x0XHRmb2xpb19sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwLCBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKSk7XG4mIzQzO1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocCk7XG4mIzQzO1x0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogSWYgc3BsaXR0aW5nIGEgZm9saW8gdG8gb3JkZXItMCBmYWlscywga2lsbCB0aGUgcHJvY2Vzcy5cbiBcdFx0ICogU3BsaXQgdGhlIGZvbGlvIHJlZ2FyZGxlc3MgdG8gbWluaW1pemUgdW51c2FibGUgcGFnZXMuXG4gXHRcdCAqIEJlY2F1c2UgdGhlIG1lbW9yeSBmYWlsdXJlIGNvZGUgY2Fubm90IGhhbmRsZSBsYXJnZVxuIFx0XHQgKiBmb2xpb3MsIHRoaXMgc3BsaXQgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgaWYgaXQgZmFpbGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGVyciB8fCBuZXdfb3JkZXIpIHtcbi1cdFx0XHQvKiBnZXQgZm9saW8gYWdhaW4gaW4gY2FzZSB0aGUgb3JpZ2luYWwgb25lIGlzIHNwbGl0ICovXG4tXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuJiM0MztcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4gXHRcdFx0cmVzID0gLUVIV1BPSVNPTjtcbiBcdFx0XHRraWxsX3Byb2NzX25vdyhwLCBwZm4sIGZsYWdzLCBmb2xpbyk7XG4tXHRcdFx0cHV0X3BhZ2UocCk7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTlNQTElUX1RIUCwgTUZfRkFJTEVEKTtcbiBcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdFx0fVxuLVx0XHRWTV9CVUdfT05fUEFHRSghcGFnZV9jb3VudChwKSwgcCk7XG4tXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMjg2MSw5ICYjNDM7MjgzOSw4IEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQucmVhc29uID0gTVJfTUVNT1JZX0ZBSUxVUkUsXG4gXHR9O1xuIFxuJiM0MztcdGZvbGlvX2xvY2soZm9saW8pO1xuIFx0aWYgKCFodWdlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuLVx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4tXG4gXHRcdC8qXG4gXHRcdCAqIElmIG5ld19vcmRlciAodGFyZ2V0IHNwbGl0IG9yZGVyKSBpcyBub3QgMCwgZG8gbm90IHNwbGl0IHRoZVxuIFx0XHQgKiBmb2xpbyBhdCBhbGwgdG8gcmV0YWluIHRoZSBzdGlsbCBhY2Nlc3NpYmxlIGxhcmdlIGZvbGlvLlxuQEAgLTI4NzEsMTUgJiM0MzsyODQ4LDIwIEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW5cbiBcdFx0ICogbWVtb3J5X2ZhaWx1cmUoKS5cbiBcdFx0ICovXG4tXHRcdGlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCxcbi1cdFx0XHRcdFx0XHQgICAgICAgLyogcmVsZWFzZT0gKi8gdHJ1ZSkpIHtcbiYjNDM7XHRcdGlmICghbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbykpXG4mIzQzO1x0XHRcdHJldCA9IHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwYWdlLCAwKSA/IC1FQlVTWSA6IDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXHRcdFx0cHJfaW5mbyhcJiMzNDslI2x4OiB0aHAgc3BsaXQgZmFpbGVkXFxuXCYjMzQ7LCBwZm4pO1xuLVx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuIFx0fVxuIFxuLVx0Zm9saW9fbG9jayhmb2xpbyk7XG4gXHRpZiAoIWh1Z2UpXG4gXHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7SFdQT0lTT05fSU5KRUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7c29mdF9vZmZsaW5lX3BhZ2UmIzM0OywKICAgICYjMzQ7bWluX29yZGVyX2Zvcl9zcGxpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgYW5kIHNvZnQgb2ZmbGluZSBwYXRocyB0byBwcm9wZXJseSBsb2NrIGZvbGlvcyBiZWZvcmUgY2FsbGluZyBtaW5fb3JkZXJfZm9yX3NwbGl0KCksIGFuZCByZWZhY3RvcnMgVEhQIHNwbGl0dGluZyBsb2dpYy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGVycm9yIGhhbmRsaW5nIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBhbmQgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYzY3NmYxMzVmMjBjOGIzNDg1ZjEwYjYyNDhjYWQyMTIzOGUzYzYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxMjozNjozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDgwNGI4ZjZhYTU1NzAuLjJjNWU3YjFiNjkyNmIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQzMiwxMCAmIzQzOzQ0MzIsMTQgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsCiAgKiBJZiBhIGZpbGUtYmFja2VkIGZvbGlvIGlzIHRydW5jYXRlZCwgMCB3aWxsIGJlIHJldHVybmVkLiBBbnkgc3Vic2VxdWVudAogICogc3BsaXQgYXR0ZW1wdCBzaG91bGQgZ2V0IC1FQlVTWSBmcm9tIHNwbGl0IGNoZWNraW5nIGNvZGUuCiAgKgomIzQzOyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZC4KJiM0MzsgKgogICogUmV0dXJuOiBAZm9saW8mIzM5O3MgbWluaW11bSBvcmRlciBmb3Igc3BsaXQKICAqLwogdW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTsKJiM0MzsKIAlpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jCmluZGV4IGE4YjAzZTI5MjBiYTguLmI1NzQwYjkyNWJiZmQgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtMTcwNSwyNiAmIzQzOzE3MDUsNiBAQCBzdGF0aWMgaW50IGlkZW50aWZ5X3BhZ2Vfc3RhdGUodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICpwLAogCXJldHVybiBwYWdlX2FjdGlvbihwcywgcCwgcGZuKTsKIH0KIAotLyoKLSAqIFdoZW4gJiMzOTtyZWxlYXNlJiMzOTsgaXMgJiMzOTtmYWxzZSYjMzk7LCBpdCBtZWFucyB0aGF0IGlmIHRocCBzcGxpdCBoYXMgZmFpbGVkLAotICogdGhlcmUgaXMgc3RpbGwgbW9yZSB0byBkbywgaGVuY2UgdGhlIHBhZ2UgcmVmY291bnQgd2UgdG9vayBlYXJsaWVyCi0gKiBpcyBzdGlsbCBuZWVkZWQuCi0gKi8KLXN0YXRpYyBpbnQgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLAotCQlib29sIHJlbGVhc2UpCi17Ci0JaW50IHJldDsKLQotCWxvY2tfcGFnZShwYWdlKTsKLQlyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgbmV3X29yZGVyKTsKLQl1bmxvY2tfcGFnZShwYWdlKTsKLQotCWlmIChyZXQgJmFtcDsmYW1wOyByZWxlYXNlKQotCQlwdXRfcGFnZShwYWdlKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHVubWFwX2FuZF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKnRvX2tpbGwsIHVuc2lnbmVkIGxvbmcgcGZuLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCwgaW50IGZsYWdzKQogewpAQCAtMjUwOSw5ICYjNDM7MjQ4OSw2IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKQogCWZvbGlvX3VubG9jayhmb2xpbyk7CiAKIAlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHsKLQkJY29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pOwotCQlpbnQgZXJyOwotCiAJCS8qCiAJCSAqIFRoZSBmbGFnIG11c3QgYmUgc2V0IGFmdGVyIHRoZSByZWZjb3VudCBpcyBidW1wZWQKIAkJICogb3RoZXJ3aXNlIGl0IG1heSByYWNlIHdpdGggVEhQIHNwbGl0LgpAQCAtMjUyNiwyNCAmIzQzOzI1MDMsMjUgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiAJCSAqIHBhZ2UgaXMgYSB2YWxpZCBoYW5kbGFibGUgcGFnZS4KIAkJICovCiAJCWZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7Ci0JCWVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTsKJiM0MzsKJiM0MzsJCWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwkJc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHAsIG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pKTsKJiM0MzsJCWZvbGlvID0gcGFnZV9mb2xpbyhwKTsKJiM0MzsJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CiAJCS8qCiAJCSAqIElmIHNwbGl0dGluZyBhIGZvbGlvIHRvIG9yZGVyLTAgZmFpbHMsIGtpbGwgdGhlIHByb2Nlc3MuCiAJCSAqIFNwbGl0IHRoZSBmb2xpbyByZWdhcmRsZXNzIHRvIG1pbmltaXplIHVudXNhYmxlIHBhZ2VzLgogCQkgKiBCZWNhdXNlIHRoZSBtZW1vcnkgZmFpbHVyZSBjb2RlIGNhbm5vdCBoYW5kbGUgbGFyZ2UKIAkJICogZm9saW9zLCB0aGlzIHNwbGl0IGlzIGFsd2F5cyB0cmVhdGVkIGFzIGlmIGl0IGZhaWxlZC4KIAkJICovCi0JCWlmIChlcnIgfHwgbmV3X29yZGVyKSB7Ci0JCQkvKiBnZXQgZm9saW8gYWdhaW4gaW4gY2FzZSB0aGUgb3JpZ2luYWwgb25lIGlzIHNwbGl0ICovCi0JCQlmb2xpbyA9IHBhZ2VfZm9saW8ocCk7CiYjNDM7CQlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHsKIAkJCXJlcyA9IC1FSFdQT0lTT047CiAJCQlraWxsX3Byb2NzX25vdyhwLCBwZm4sIGZsYWdzLCBmb2xpbyk7Ci0JCQlwdXRfcGFnZShwKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwogCQkJYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTlNQTElUX1RIUCwgTUZfRkFJTEVEKTsKIAkJCWdvdG8gdW5sb2NrX211dGV4OwogCQl9Ci0JCVZNX0JVR19PTl9QQUdFKCFwYWdlX2NvdW50KHApLCBwKTsKLQkJZm9saW8gPSBwYWdlX2ZvbGlvKHApOwogCX0KIAogCS8qCkBAIC0yODYxLDkgJiM0MzsyODM5LDggQEAgc3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAJCS5yZWFzb24gPSBNUl9NRU1PUllfRkFJTFVSRSwKIAl9OwogCiYjNDM7CWZvbGlvX2xvY2soZm9saW8pOwogCWlmICghaHVnZSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7Ci0JCWNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTsKLQogCQkvKgogCQkgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGUKIAkJICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby4KQEAgLTI4NzEsMTUgJiM0MzsyODQ4LDIwIEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogCQkgKiBwcmVmZXJyZWQsIHNwbGl0IGl0IHRvIG5vbi16ZXJvIG5ld19vcmRlciBsaWtlIGl0IGlzIGRvbmUgaW4KIAkJICogbWVtb3J5X2ZhaWx1cmUoKS4KIAkJICovCi0JCWlmIChuZXdfb3JkZXIgfHwgdHJ5X3RvX3NwbGl0X3RocF9wYWdlKHBhZ2UsIC8qIG5ld19vcmRlcj0gKi8gMCwKLQkJCQkJCSAgICAgICAvKiByZWxlYXNlPSAqLyB0cnVlKSkgewomIzQzOwkJaWYgKCFtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKSkKJiM0MzsJCQlyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgMCkgPyAtRUJVU1kgOiAwOwomIzQzOwkJZWxzZQomIzQzOwkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCQlwcl9pbmZvKCYjMzQ7JSNseDogdGhwIHNwbGl0IGZhaWxlZFxuJiMzNDssIHBmbik7Ci0JCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJCXJldHVybiByZXQ7CiAJCX0KLQkJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwogCX0KIAotCWZvbGlvX2xvY2soZm9saW8pOwogCWlmICghaHVnZSkKIAkJZm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pOwogCWlmIChQYWdlSFdQb2lzb24ocGFnZSkpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBIdWdlVExCL01lbW9yeSBGYWlsdXJlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBhIGxvY2sgY2hlY2sgaW4gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgYWRkZWQgYFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbylgLiBNYWtlcyBzZW5zZTsgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYmUgbWVzc2luZyB3aXRoIGZvbGlvIHNwbGl0dGluZyBpZiBpdCYjMzk7cyBhbHJlYWR5IGxvY2tlZC4gVGhlbiwgdGhlIHBhdGNoIHVwZGF0ZXMgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgd2l0aGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCB0byBsb2NrIHRoZSBmb2xpbyAqYmVmb3JlKiBjYWxsaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzOiBBcmUgdGhlc2UgY2hhbmdlcyByZWFjaGFibGU/IEFyZSB0aGV5IGFjdHVhbGx5IHRlc3RhYmxlPyBMZXQmIzM5O3Mgc2VlLi4uIGBtZW1vcnlfZmFpbHVyZWAgaGFuZGxlcyBoYXJkd2FyZSBwb2lzb25pbmcsIHdoaWNoIHdlIGtub3cgY2FuIGJlIHRyaWdnZXJlZCBlaXRoZXIgdGhyb3VnaCBzeXNmcyBvciBieSB1c2luZyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nLiBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCBkZWFscyB3aXRoIHNvZnQgb2ZmbGluaW5nIG9mIHBhZ2VzLCBhbmQgaXQmIzM5O3MgYWxzbyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBvciBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgLiBTbywgYXQgbGVhc3Qgb24gdGhlIHN1cmZhY2UsIHRob3NlIHNlZW0gdGVzdGFibGUuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBzZWN0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG1lbW9yeV9mYWlsdXJlYCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc2lkZXMuIEkmIzM5O2xsIGdyZXAgZm9yIGBtZW1vcnktZmFpbHVyZS5vYCB3aXRoaW4gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluZGljYXRpb24gb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgbGl2ZXMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5LWZhaWx1cmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSAmIzQzOz0gZG1hcG9vbF90ZXN0Lm9cbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICYjNDM7PSBtZW1vcnktZmFpbHVyZS5vXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgJiM0Mzs9IGh3cG9pc29uLWluamVjdC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE3NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gTWVtb3J5IEZhaWx1cmUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gVGhhdCB0ZWxscyBtZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGVycm9yIGhhbmRsaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgY29udGV4dCwgYW5kIHRoYXQgYWxtb3N0IGFsd2F5cyBtZWFucyBkaXZpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSwgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBpdCBpbiB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGlzIHRoaW5nIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgZW5hYmxlcyBvciBkaXNhYmxlcy4gVGltZSB0byBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2NC1cbm1tL0tjb25maWc6NzY1OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjYtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgYmVpbmcgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHJlbGV2YW50IGFyZWEsIGxpa2VseSBhcm91bmQgbGluZSA3NjUg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgbWVtb3J5IG1hbmFnZW1lbnQtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBjbHVzdGVyLCB0aG91Z2ggaXQgdmFyaWVzLCBvZiBjb3Vyc2UuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGNsZWFyIGVub3VnaCB0byBnbGVhbiB0aGUgZXNzZW50aWFsIGxvZ2ljIHdpdGhvdXQgdG9vIG11Y2ggZGlnZ2luZy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGJ1aWxkIG9wdGlvbnMsIGRlZmF1bHRzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNwZWNpZmljIG1lbW9yeSBzdWJzeXN0ZW0uIEkgc3VzcGVjdCB0aGF0IHRoZXJlIGlzIGEgZ29vZCByZWFzb24gZm9yIHRoZSBzcGVjaWZpYyBsaW5lIG9mIGNvZGUgdG8gYmUgd2hlcmUgaXQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjA6XHRcdCAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS5cbiA3NjE6XHRcbiA3NjI6XHRjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc2MzpcdFx0Ym9vbFxuIDc2NDpcdFxuIDc2NTpcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxuIDc2NjpcdFx0ZGVwZW5kcyBvbiBNTVVcbiA3Njc6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuIDc2ODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4gNzY5Olx0XHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuIDc3MDpcdFx0aGVscFxuIDc3MTpcdFx0ICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXNcbiA3NzI6XHRcdCAgd2l0aCBNQ0EgcmVjb3ZlcnkuIFRoaXMgYWxsb3dzIGEgc3lzdGVtIHRvIGNvbnRpbnVlIHJ1bm5pbmdcbiA3NzM6XHRcdCAgZXZlbiB3aGVuIHNvbWUgb2YgaXRzIG1lbW9yeSBoYXMgdW5jb3JyZWN0ZWQgZXJyb3JzLiBUaGlzIHJlcXVpcmVzXG4gNzc0Olx0XHQgIHNwZWNpYWwgaGFyZHdhcmUgc3VwcG9ydCBhbmQgdHlwaWNhbGx5IEVDQyBtZW1vcnkuXG4gNzc1Olx0XG4gNzc2Olx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuIDc3NzpcdFx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiA3Nzg6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0ZBSUxVUkUgXHUwMDI2XHUwMDI2IERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgUFJPQ19GU1xuIDc3OTpcdFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTAwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIE1lbW9yeSBGYWlsdXJlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBoZXJlLiBXZSBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZDsgdGhhdCYjMzk7cyB0aGUgY29yZS4gVGhlbiwgSSYjMzk7bSBwb25kZXJpbmcgYENPTkZJR19IV1BPSVNPTl9JTkpFQ1RgLiBJdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGZ1enppbmcsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuIEJ1dCwgaG9sZCBvbi4uLiBpZiB3ZSBoYXZlIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQsIGlzbiYjMzk7dCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYWxzbyBhdmFpbGFibGU/IFJpZ2h0LCBpdCBzaG91bGQgYmUuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBtYWR2aXNlYCBhbmQgYE1BRFZfSFdQT0lTT05gIGFyZSBwcmVzZW50IGluIHRoaXMgYnVpbGQgd2l0aCB0aGF0IGNvbmZpZy4gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBkZXBlbmRlbmN5IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01BRFZfSFdQT0lTT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0OTQtXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IpIHtcbm1tL21hZHZpc2UuYzoxNDk1Olx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jLTE0OTYtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxuLS1cbm1tL21hZHZpc2UuYz0xNTE4PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTUxLVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbm1tL21hZHZpc2UuYzoxNTUyOlx0Y2FzZSBNQURWX0hXUE9JU09OOlxubW0vbWFkdmlzZS5jLTE1NTMtI2VuZGlmXG4tLVxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXG4tLVxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcbm1tL21hZHZpc2UuYzoxOTQ0OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXG5tbS9tYWR2aXNlLmMtMTk0NS0gKlx0XHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9saW8gTG9ja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCBhcmUgaW5kZWVkIGF2YWlsYWJsZSDigJMgZ29vZC4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLCBgbWVtb3J5X2ZhaWx1cmVgLCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuCgpBaCwgaGVyZSB3ZSBoYXZlIGl0LiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO2Agd2l0aGluIGBtaW5fb3JkZXJfZm9yX3NwbGl0YC4gQ2xlYXJseSwgdGhpcyBpcyByZWxhdGVkIHRvIGZvbGlvIGxvY2tpbmcgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRoZW4gZ29lcyBvbiB0byBlbnN1cmUgdGhhdCBjYWxsZXJzIHdpdGhpbiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCBub3cgcHJvcGVybHkgbG9jayB0aGUgZm9saW8gKmJlZm9yZSogY2FsbGluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgcHJpbWFyaWx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIGFuZCBhIGJpdCBvZiByZWZhY3RvcmluZyB0byBpbXByb3ZlIHRocmVhZCBzYWZldHkgd2l0aGluIHRoZSBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGNvZGUgcGF0aC4KClRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjaGFuZ2UgaXMgdGhyb3VnaCB0aGUgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGFuZCBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgIHN5c3RlbSBjYWxscyBzcGVjaWZpY2FsbHkgb3BlcmF0aW5nIG9uIFRIUHMuIFRvIHByb3Blcmx5IHRlc3QgdGhpcyB0aG9yb3VnaGx5LCBJIHdpbGwgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gYG1tL2AgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMxPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMzLVxubW0vS2NvbmZpZzo4MzQ6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzUtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1Mj1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1Ny1cbm1tL0tjb25maWc6ODU4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTktXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjQtXG5tbS9LY29uZmlnOjg2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2Ni1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzMtXG5tbS9LY29uZmlnOjg3NDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzUtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg4MT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg5MC1cbm1tL0tjb25maWc6ODkxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkyLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDAtXG5tbS9LY29uZmlnOjkwMTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDItXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDgtXG5tbS9LY29uZmlnOjkwOTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkxMC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE2LVxubW0vS2NvbmZpZzo5MTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE4LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI2PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTM1LVxubW0vS2NvbmZpZzo5MzY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzctXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0NC1cbm1tL0tjb25maWc6OTQ1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0Ni1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Mi1cbm1tL0tjb25maWc6OTUzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTU0LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjAtXG5tbS9LY29uZmlnOjk2MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjItXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgQ29uZmlndXJhdGlvbiBhbmQgUmVsYXRlZCBDb2RlKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgcGxheWluZyB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIGlzIGEga2V5IHNldHRpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdHdlYWtpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtZW1vcnkgZmFpbHVyZXMgYW5kIHNvZnRseSBvZmZsaW5pbmcgcGFnZXMgdGhhdCBhcmUgaW4gdXNlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGNvbmZpcm1pbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgc2V0dGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIHNpZGUgZWZmZWN0cy4gSSYjMzk7bGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBtZW1vcnlfZmFpbHVyZWAuIFNpbmNlIHRoZSB0ZXh0IG1lbnRpb25zIHRoZSBmdW5jdGlvbiBuYW1lLCBteSBmaXJzdCBzdG9wIHdpbGwgYmUgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGhlYXJ0IG9mIHRoZSBsb2dpYyBiZWhpbmQgdGhhdCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrIHRoZSBjb2RlIGFuZCBzZWUgaG93IHRoZSBmYWlsdXJlIGlzIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhlbiBJIHdpbGwgY2hlY2sgaG93IGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGlzIGJlaW5nIGNhbGxlZCBhbmQgd2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgbWVtb3J5X2ZhaWx1cmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MjMwMD1zdGF0aWMgaW50IG1lbW9yeV9mYWlsdXJlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2NS0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjM2NjppbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGEgUG90ZW50aWFsIE1lbW9yeSBGYWlsdXJlKioKCk9rYXksIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGhhbmRsaW5nIGZvciBhICYjMzQ7c29mdCBvZmZsaW5lJiMzNDsgc2NlbmFyaW8sIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCB2YXJpYWJsZSBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IHNwZWNpZmljIGZpbGUsIGFzIGl0IHNlZW1zIHJlbGV2YW50LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBsb2dpYyBiZWhpbmQgdGhpcyBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzaXR1YXRpb24uIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlIG9mIHRoZSBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTI4MTc9RVhQT1JUX1NZTUJPTCh1bnBvaXNvbl9tZW1vcnkpO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgyNi0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjgyNzpzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgyOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBzb21lIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNoYW5naW5nIGhvdyBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCAoYW5kIHBvc3NpYmx5IGBzb2Z0X29mZmxpbmVfcGFnZWAsIGlmIHRoZSBzeW1ib2wgcmVzb2x1dGlvbiBpcyBvZmYpIGhhbmRsZSBmb2xpbyBsb2NraW5nIGJlZm9yZSBpbnZva2luZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE1vcmUgaW50ZXJlc3RpbmdseSwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlbW92aW5nIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGFuZCBkaXJlY3RseSBjYWxsaW5nIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0JiMzOTtzIGNoYW5naW5nIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlIGh1Z2UgcGFnZSBzcGxpdHRpbmcgbG9naWMsIHJlbW92aW5nIGEgbGF5ZXIgb2YgYWJzdHJhY3Rpb24uCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHRoaXMgaXMgKmFic29sdXRlbHkqIHNvbWV0aGluZyB0aGF0IG5lZWRzIHJpZ29yb3VzIGZ1enppbmcuIENoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgdGhvc2UgYWx0ZXJpbmcgaG93IHBhZ2Ugc3BsaXR0aW5nIGlzIGhhbmRsZWQsIGFyZSBwcmltZSBjYW5kaWRhdGVzIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUsIGFuZCBwb3RlbnRpYWxseSBjYXRhc3Ryb3BoaWMsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZSBhbHRlcmVkIGNvZGUgcGF0aHMgd2l0aGluIGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCBhbmQsIGNyaXRpY2FsbHksIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgY29udHJvbCBmbG93IGluIHRoZSBkaWZmZXJlbnQgZWRnZSBjYXNlcyB0aGUgZnV6emluZyB1bmNvdmVycy4KCk5vdywgbGV0IG1lIGNoZWNrIGBzb2Z0X29mZmxpbmVfcGFnZWAgdG8gdmVyaWZ5IHRoZSBlbnRyeSBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0yODI3PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk0OC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk0OTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipOYXZpZ2F0aW5nIHRoZSBgbWFkdmlzZWAgTWF6ZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaGFuZGxpbmcgc29tZXRoaW5nIG9mZi1saW5lLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGFwcGVhcnMgdG8gYmUgYHNvZnRfb2ZmbGluZV9wYWdlYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHVuZGVyc3Rvb2QuIEJ1dCB0aGVuIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBob3cgZG9lcyB0aGF0IGludGVyYWN0IHdpdGggYG1hZHZpc2VgPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBgbWFkdmlzZWAgYmVoYXZpb3IgaXMgcmVsZXZhbnQgaGVyZSDigJMgaXMgaXQgYG1hZHZpc2VfZG9fYmVoYXZpb3JgLCBvciBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljIGxpa2UgYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYCBvciBldmVuIGBtYWR2aXNlX2luamVjdF9lcnJvcmA/IFRvIHBpbnBvaW50IHRoZSByaWdodCBwYXRoLCBJIHNob3VsZCByZWFsbHkgZGl2ZSBpbnRvIGBtYWR2aXNlLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBob3cgaXQgaGFuZGxlcyBgTUFEVl9IV1BPSVNPTmAuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBvZmYtbGluZSBhc3BlY3Qgd2lsbCBiZSBtYWRlLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgYmVoYXZpb3Igd2lsbCBiZSBkZWZpbmVkLiBJJiMzOTtsbCBmb2N1cyBteSBzZWFyY2ggd2l0aGluIGBtYWR2aXNlLmNgIGZvciBhbnkgbWVudGlvbiBvZiBgTUFEVl9IV1BPSVNPTmAgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIGNvbmNlcHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDk0LVx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yKSB7XG5tbS9tYWR2aXNlLmM6MTQ5NTpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNDk2LVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU1MS1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG5tbS9tYWR2aXNlLmM6MTU1MjpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNTUzLSNlbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTQzLSAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXG5tbS9tYWR2aXNlLmM6MTk0NDogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxubW0vbWFkdmlzZS5jLTE5NDUtICpcdFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgTUFEVl9IV1BPSVNPTmAgaXMgaGFuZGxlZCB3aXRoaW4gYG1hZHZpc2UuY2AuCgoqKkRpdmluZyBpbnRvIE1BRFZfSFdQT0lTT04gd2l0aGluIG1hZHZpc2UuYyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGBNQURWX0hXUE9JU09OYCBpcyBhY3R1YWxseSAqaW1wbGVtZW50ZWQqLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgYWR2aWNlIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCYjMzk7cyBnb2luZyB0byBiZSBhIGZhc2NpbmF0aW5nIGpvdXJuZXkgaW50byBwYWdlIHRhYmxlIG1vZGlmaWNhdGlvbnMsIGVycm9yIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIGVycm9yLWNvcnJlY3RpbmcgY29kZSAoRUNDKSBtZW1vcnkgb3IgbWVtb3J5IHByb3RlY3Rpb24gbWVjaGFuaXNtcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGlzIGludm9sdmVzIGRpcmVjdGx5IG1hbmlwdWxhdGluZyBwYWdlIGZsYWdzLCB0cmlnZ2VyaW5nIGhhcmR3YXJlIGV4Y2VwdGlvbnMgaW4gYSBjb250cm9sbGVkIG1hbm5lciwgb3IgcGVyaGFwcyB1c2luZyBzb21lIG1vcmUgYWJzdHJhY3QgbWVjaGFuaXNtIHByb3ZpZGVkIGJ5IHRoZSBrZXJuZWwgdG8gc2lnbmFsIG9yIG1hcmsgdGhlc2UgcGFnZXMuIEFyZSB0aGVyZSBuZXcgc3lzdGVtIGNhbGxzIG9yIGZsYWdzPyBPciBtYXliZSBpdCYjMzk7cyBjbGV2ZXJseSBwaWdneWJhY2tpbmcgb24gZXhpc3RpbmcgbWFkdmlzZSBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBhc3N1bXB0aW9ucyBiZWluZyBtYWRlLiBBcmUgd2UgZGVhbGluZyB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHZlbmRvcnMgb3IgYSBtb3JlIGdlbmVyYWxpemVkIGFwcHJvYWNoPyBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc3luY2hyb25pemF0aW9uIGFzcGVjdHMuIEhvdyBhcmUgY29uY3VycmVudCBhY2Nlc3NlcyBoYW5kbGVkPyBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSG93IGRvZXMgdGhlIGtlcm5lbCBkZWFsIHdpdGggdGhlIGNhc2Ugb2YgYSBwb2lzb25lZCBwYWdlICphbHJlYWR5KiBiZWluZyBhY2Nlc3NlZCBvciBtb2RpZmllZD8gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgcHJlY2lzZWx5IGhvdyB0aGUga2VybmVsIGNhbiBpbnN0cnVjdCB0aGUgaGFyZHdhcmUgdG8gY29uc2lkZXIgYSBtZW1vcnkgcGFnZSBhcyBiYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfaW5qZWN0X2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NDYtICovXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE0NDgte1xuLS1cbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTA0LVxubW0vbWFkdmlzZS5jOjE1MDU6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNTA2LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTg5Ni1cdFx0cmFuZ2UtXHUwMDNlZW5kID0gc3RhcnQgJiM0MzsgbGVuX2luO1xubW0vbWFkdmlzZS5jOjE4OTc6XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xODk4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCByaWdodD8gSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3MgdGhlIHBvaW50IG9mIG9yaWdpbiBmb3IgdGhlIHNpbXVsYXRlZCBtZW1vcnkgZXJyb3JzIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0LiBUaGUgaW50ZXJlc3RpbmcgYml0IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGV2ZWxzLiBUaGUgdGV4dCBzdWdnZXN0cyB0aGF0IGl0LCBhdCBzb21lIHBvaW50LCBjYWxscyBlaXRoZXIgYG1lbW9yeV9mYWlsdXJlYCBvciBgc29mdF9vZmZsaW5lX3BhZ2VgLiBUaGF0JiMzOTtzIG91ciB0YXJnZXQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBleGFjdCBkZWNpc2lvbiBwYXRoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCBjaG9vc2VzIGJldHdlZW4gdGhvc2UgdHdvLCBhbmQgd2hhdCB0aGF0IGNob2ljZSB0ZWxscyB1cyBhYm91dCB0aGUgbmF0dXJlIG9mIHRoZSBzaW11bGF0ZWQgZXJyb3IuIERvZXMgdGhlIGNob2ljZSByZWxhdGUgdG8gdGhlIGxldmVsIG9mIHNpbXVsYXRlZCBmYWlsdXJlPyBPciB0aGUgbG9jYXRpb24gaXQgbWF5IGJlIGluamVjdGVkIGludG8/IFRpbWUgdG8gZGlzc2VjdCB0aGF0IGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNsb3NlIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDQwOlx0XHRyZXR1cm4gZXJyb3I7XG4xNDQxOlx0fVxuMTQ0MjpcdFxuMTQ0MzpcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbjE0NDQ6XHQvKlxuMTQ0NTpcdCAqIEVycm9yIGluamVjdGlvbiBzdXBwb3J0IGZvciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuXG4xNDQ2Olx0ICovXG4xNDQ3Olx0c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbjE0NDg6XHR7XG4xNDQ5Olx0XHR1bnNpZ25lZCBsb25nIHNpemU7XG4xNDUwOlx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZS5zdGFydDtcbjE0NTE6XHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gbWFkdl9iZWhhdmlvci1cdTAwM2VyYW5nZS5lbmQ7XG4xNDUyOlx0XG4xNDUzOlx0XHRpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4xNDU0Olx0XHRcdHJldHVybiAtRVBFUk07XG4xNDU1Olx0XG4xNDU2Olx0XHRmb3IgKDsgc3RhcnQgXHUwMDNjIGVuZDsgc3RhcnQgJiM0Mzs9IHNpemUpIHtcbjE0NTc6XHRcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4xNDU4Olx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuMTQ1OTpcdFx0XHRpbnQgcmV0O1xuMTQ2MDpcdFxuMTQ2MTpcdFx0XHRyZXQgPSBnZXRfdXNlcl9wYWdlc19mYXN0KHN0YXJ0LCAxLCAwLCBcdTAwMjZwYWdlKTtcbjE0NjI6XHRcdFx0aWYgKHJldCAhPSAxKVxuMTQ2MzpcdFx0XHRcdHJldHVybiByZXQ7XG4xNDY0Olx0XHRcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuMTQ2NTpcdFxuMTQ2NjpcdFx0XHQvKlxuMTQ2NzpcdFx0XHQgKiBXaGVuIHNvZnQgb2ZmbGluaW5nIGh1Z2VwYWdlcywgYWZ0ZXIgbWlncmF0aW5nIHRoZSBwYWdlXG4xNDY4Olx0XHRcdCAqIHdlIGRpc3NvbHZlIGl0LCB0aGVyZWZvcmUgaW4gdGhlIHNlY29uZCBsb29wIFwmIzM0O3BhZ2VcJiMzNDsgd2lsbFxuMTQ2OTpcdFx0XHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxuMTQ3MDpcdFx0XHQgKi9cbjE0NzE6XHRcdFx0c2l6ZSA9IHBhZ2Vfc2l6ZShjb21wb3VuZF9oZWFkKHBhZ2UpKTtcbjE0NzI6XHRcbjE0NzM6XHRcdFx0aWYgKG1hZHZfYmVoYXZpb3ItXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcbjE0NzQ6XHRcdFx0XHRwcl9pbmZvKFwmIzM0O1NvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXG5cJiMzNDssXG4xNDc1Olx0XHRcdFx0XHQgcGZuLCBzdGFydCk7XG4xNDc2Olx0XHRcdFx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCBNRl9DT1VOVF9JTkNSRUFTRUQpO1xuMTQ3NzpcdFx0XHR9IGVsc2Uge1xuMTQ3ODpcdFx0XHRcdHByX2luZm8oXCYjMzQ7SW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGZvciBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuMTQ3OTpcdFx0XHRcdFx0IHBmbiwgc3RhcnQpO1xuMTQ4MDpcdFx0XHRcdHJldCA9IG1lbW9yeV9mYWlsdXJlKHBmbiwgTUZfQUNUSU9OX1JFUVVJUkVEIHwgTUZfQ09VTlRfSU5DUkVBU0VEIHwgTUZfU1dfU0lNVUxBVEVEKTtcbjE0ODE6XHRcdFx0XHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuMTQ4MjpcdFx0XHRcdFx0cmV0ID0gMDtcbjE0ODM6XHRcdFx0fVxuMTQ4NDpcdFxuMTQ4NTpcdFx0XHRpZiAocmV0KVxuMTQ4NjpcdFx0XHRcdHJldHVybiByZXQ7XG4xNDg3Olx0XHR9XG4xNDg4Olx0XG4xNDg5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgY2FsbGVkIGZyb20gYG1hZHZpc2VgIGl0c2VsZi4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIGluamVjdGluZyB0aGUgZXJyb3JzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgbW9kaWZpY2F0aW9ucyB0byB0d28gc3BlY2lmaWMgZnVuY3Rpb25zOiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IG1hbmFnZW1lbnQgd29ya3MsIHRoZXNlIGFyZSB0aGUgb25lcyBJIG5lZWQgdG8gemVybyBpbiBvbi4gVGhlIGNoYW5nZXMgdG8gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFyZSBpbnRlcmVzdGluZywgYnV0IHNpbmNlIGl0JiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uLCBJJiMzOTtsbCBsaWtlbHkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEkmIzM5O2xsIGhhdmUgdG8gdmVyaWZ5IGlmIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBzdGF0aWMgYXMgaXQgd2lsbCBpbXBhY3QgaG93IHdpZGVseSB0aGUgbW9kaWZpY2F0aW9ucyB3aWxsIGltcGFjdCB0aGUgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc2NvcGUgb2YgdGhlIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcGF0Y2ggY2F1c2VzIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDQyMD1pbnQgZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ0MzgtICovXG5tbS9odWdlX21lbW9yeS5jOjQ0Mzk6dW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcywgYW5kIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXNuJiMzOTt0IGEgc3RhdGljIHNpdHVhdGlvbiDigJMgdGhpbmdzIGFyZSBkeW5hbWljYWxseSBjb25maWd1cmVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBhY3R1YWxseSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgcXVpY2tseSBjb25maXJtaW5nIHdoZXRoZXIgYG1lbW9yeV9mYWlsdXJlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgYW5kLCBub3BlLCBpdCYjMzk7cyBub3QuIFRoZSBzYW1lIGdvZXMgZm9yIGBzb2Z0X29mZmxpbmVfcGFnZWAuIEJvdGggYXJlIGR5bmFtaWMuCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHZhcmlhYmxlcyB0byBmb2N1cyBvbiBhcmUgbm93OiBgbWVtb3J5X2ZhaWx1cmVgLCBgc29mdF9vZmZsaW5lX3BhZ2VgLCBhbmQgYWxzbyB0aGUgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIOKAkyBiZWNhdXNlIEkga25vdyB0aGF0IGNhbiBzb21ldGltZXMgYmUgYSBjb25maWd1cmF0aW9uIHBvaW50IHRvby4KClRvIGFjdHVhbGx5ICplbmFibGUqIHRoZXNlIG1lbW9yeSBmYWlsdXJlIGZlYXR1cmVzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgc2V0LiBJdCYjMzk7cyBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB0aG9zZSBsb29rIGxpa2UgdGhlIG9uZXMgSSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8uCgpCdXQgd2FpdCwgaG9sZCBvbi4uLiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGhhcyBhIGRlcGVuZGVuY3kgb24gYE1NVWAuIE9rYXksIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGRlcGVuZGVuY3kgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzIHRvby4gTGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgYE1FTU9SWV9GQUlMVVJFYCBkZXBlbmRzIG9uICpib3RoKiBgTU1VYCBhbmQgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoYXQgb25lIHJpZ2h0LgoKYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGlzIGNvbW1vbmx5IHNldCBvbiB4ODYgYW5kIGFybTY0IGFyY2hpdGVjdHVyZXMuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSB0byBzZWUgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBmb3IgeDg2LiBJIGJldHRlciBnbyBhbmQgY2hlY2sgdGhhdCByaWdodCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEyOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NzUwPWNvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTc1Ni1cdGRlcGVuZHMgb24gWDg2XzY0IHx8ICFTUEFSU0VNRU1cbmFyY2gveDg2L0tjb25maWc6NzU3Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gveDg2L0tjb25maWctNzU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgTWVtb3J5IEZhaWx1cmUgU3VwcG9ydCoqCgpSaWdodCwgc28gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkmIzM5O20gbG9va2luZyBhdCwgdGhlIGBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGZsYWcsIGlzIGluZGVlZCBzZWxlY3RlZC4gR29vZCBzdGFydC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLCBpcyB0byBkb3VibGUtY2hlY2sgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgSSYjMzk7bSB1c2luZyAqYWN0dWFsbHkqIHN1cHBvcnRzIHRoaXMuCgpMZXQmIzM5O3Mgc2Vl4oCmIHRoZSBkZXBlbmRlbmNpZXMgbGlzdGVkIGFyZSBgWDg2XzY0IHx8ICFTUEFSU0VNRU1gLiBPa2F5LCB0aGF0IG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSBlaXRoZXIgb24gYW4geDg2LTY0IGFyY2hpdGVjdHVyZSAqb3IqIGlmIHRoZSBrZXJuZWwgaXNuJiMzOTt0IHVzaW5nIHNwYXJzZSBtZW1vcnkgbWFuYWdlbWVudC4gU2VlbXMgcHJldHR5IHN0YW5kYXJkLiBHaXZlbiBteSBzZXR1cCwgSSYjMzk7bSBjb25maWRlbnQgaXQmIzM5O3Mgc2F0aXNmaWVkLiBObyByZWQgZmxhZ3MgdGhlcmUuCgpOb3csIGJlZm9yZSBJIHN0YXJ0IHdvcmtpbmcgd2l0aCB0aGlzLCBpdCBpcyB3b3J0aCBxdWlja2x5IGVuc3VyaW5nIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIE9LLiBObyBwb2ludCBidWlsZGluZyBzb21ldGhpbmcgaWYgaXQgaXMgYmxvY2tlZCBpbiBzb21lIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgzMT1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzMy1cbm1tL0tjb25maWc6ODM0Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM1LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTctXG5tbS9LY29uZmlnOjg1ODpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODU5LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODY0LVxubW0vS2NvbmZpZzo4NjU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NjYtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODczLVxubW0vS2NvbmZpZzo4NzQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODc1LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODE9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTAtXG5tbS9LY29uZmlnOjg5MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5Mi1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTAwLVxubW0vS2NvbmZpZzo5MDE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTAyLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTA4LVxubW0vS2NvbmZpZzo5MDk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTAtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxNi1cbm1tL0tjb25maWc6OTE3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkxOC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkyNj1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzNS1cbm1tL0tjb25maWc6OTM2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTM3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDQtXG5tbS9LY29uZmlnOjk0NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NDYtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTItXG5tbS9LY29uZmlnOjk1MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1NC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTYwLVxubW0vS2NvbmZpZzo5NjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTYyLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg0NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBjb25jZXJuaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRpbWUgdG8gZGlzc2VjdCBgbW0vS2NvbmZpZ2AgYW5kIHplcm8gaW4gb24gdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29uZmlndXJhdGlvbnMuIEkgYWxyZWFkeSBrbm93IHRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBlc3BlY2lhbGx5IG9uIHN5c3RlbXMgd2l0aCBzdWJzdGFudGlhbCBtZW1vcnkgZm9vdHByaW50cy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBjb3JlIHN3aXRjaGVzIHRoYXQgZ292ZXJuIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGZ1bmRhbWVudGFsIG1lbW9yeSBhbGxvY2F0aW9uIHVuaXQuCgpJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgYm9vbGAgYW5kIGB0cmlzdGF0ZWAgb3B0aW9ucywgYWxvbmcgd2l0aCBzb21lIGFjY29tcGFueWluZyBoZWxwIHRleHQsIG5hdHVyYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZmlyc3QuIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZywgZGlzYWJsaW5nLCBvciBtYWtpbmcgaXQgbW9kdWxhci4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmU/IElzIHRoZXJlIGFuIGludGVyYWN0aW9uIHdpdGggTlVNQT8gV2hhdCBhYm91dCBkaWZmZXJlbnQgQ1BVIGFyY2hpdGVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGxhdGZvcm0gY29uc2lkZXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD8KCk1vcmUgc3BlY2lmaWNhbGx5LCBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGxldmVsIG9mIGdyYW51bGFyaXR5IGhlcmU6IHRoZSBhYmlsaXR5IHRvIHNlbGVjdCB0aGUgKnBvbGljeSogdGhhdCBnb3Zlcm5zIGhvdyBodWdlcGFnZXMgYXJlIG1hbmFnZWQg4oCTIGVpdGhlciBhZ2dyZXNzaXZlbHkgYWxsb2NhdGluZyB0aGVtIHVwIGZyb250IG9yIGRlZmVycmluZyB0byBzbWFsbGVyIHBhZ2VzIGluaXRpYWxseSwgYW5kIHRoZW4gY29hbGVzY2luZyB0aGVtIGludG8gaHVnZXBhZ2VzIGxhdGVyLiBUaGlzIGNob2ljZSBzaWduaWZpY2FudGx5IGltcGFjdHMgbWVtb3J5IGZyYWdtZW50YXRpb24sIGFuZCB1bHRpbWF0ZWx5IGhhcyBhIG1hc3NpdmUgaW1wYWN0IG9uIHRoZSBwZXJmb3JtYW5jZSBvZiBhIGRpdmVyc2UgcmFuZ2Ugb2Ygd29ya2xvYWRzLiBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGlzIHRpZWQgdG8gdGhlIHBhZ2Ugc2l6ZSBzZXR0aW5ncy4gSSYjMzk7bGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIHdheXMgdG8gZnVydGhlciBtYW5hZ2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBmb3IgYSB2YXJpZXR5IG9mIHVzZSBjYXNlcywgbGlrZSB3aGV0aGVyIG9yIG5vdCBpdCBzaG91bGQgYmUgZW5hYmxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgcnVubmluZyBjb250YWluZXJzLCBhcyB0aGF0IGhhcyBhIGh1Z2UgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgcGVyZm9ybWFuY2UgdHVuaW5nIG9wdGlvbnMgZm9yIHRoaXMgc3BlY2lmaWMgZmVhdHVyZSBhcyB3ZWxsLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBoYXBwZW4uCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYSBkZXZlbG9wZXIgaGFzIHRob3VnaHQgdGhyb3VnaCB0aGUgdHJhZGUtb2ZmcyBvZiB0aGlzIGZlYXR1cmUsIGhvdyB0aGV5JiMzOTt2ZSBzdHJ1Y3R1cmVkIGl0LCBhbmQgdWx0aW1hdGVseSwgd2hldGhlciBJIGNhbiBzYWZlbHkgdXNlIHRoaXMgZmVhdHVyZSB3aXRoaW4gbXkgc3BlY2lmaWMgY29udGV4dC4gSSYjMzk7bSBleHBlY3RpbmcgYSBjbGVhciB2aWV3IG9mIGl0cyBiZWhhdmlvciB0byBvcHRpbWl6ZSBpdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgzMDpcdFxuIDgzMTpcdGNvbmZpZyBNTV9JRFxuIDgzMjpcdFx0ZGVmX2Jvb2wgblxuIDgzMzpcdFxuIDgzNDpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzU6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzNjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODM3Olx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzODpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDgzOTpcdFx0c2VsZWN0IE1NX0lEXG4gODQwOlx0XHRoZWxwXG4gODQxOlx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4NDI6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDg0MzpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDQ6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDU6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0NjpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQ3Olx0XG4gODQ4Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY1NgoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBJIHVuZGVyc3RhbmQgZGVwZW5kcyBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgZXhjbHVkZXMgYFBSRUVNUFRfUlRgLiBObyBzdXJwcmlzZXMgdGhlcmUsIHRoYXQmIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGBtZW1vcnlfZmFpbHVyZWAgYW5kIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBmb2xpbyBsb2NraW5nIGJlZm9yZSBjYWxsaW5nIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBhbmQgZGl0Y2hpbmcgYHRyeV90b19zcGxpdF90aHBfcGFnZWAgaW4gZmF2b3Igb2YgZGlyZWN0bHkgY2FsbGluZyBgc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyYC4gSG1tLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgcmVmYWN0b3JpbmcuIFRoYXQgbWVhbnMgaXQgbmVlZHMgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0IHRvIGVuc3VyZSBzdGFiaWxpdHkuCgpNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbjoKKiAgIGBtZW1vcnlfZmFpbHVyZWAKKiAgIGBzb2Z0X29mZmxpbmVfcGFnZWAKKiAgIGBtaW5fb3JkZXJfZm9yX3NwbGl0YAoKRm9yIGVuYWJsaW5nIGNvbmZpZ3MsIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIG9idmlvdXMgY2hvaWNlcy4KCkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBnbG9iYWwgYW5kIGFjY2Vzc2libGUgZm9yIGZ1enppbmcuIFllcCwgaXQgaXMuIEdvb2QsIHRoYXQmIzM5O3MgaW1wb3J0YW50IGZvciB0aGUgZnV6emluZyBzdHJhdGVneS4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayBhdCBvdGhlciByZWxhdGVkIGNvbmZpZ3MuIGBIV1BPSVNPTl9JTkpFQ1RgICpjb3VsZCogYmUgdXNlZnVsLCBidXQgYE1BRFZfSFdQT0lTT05gIHNob3VsZCB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBTdGlsbCwgZm9yIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UsIEkmIzM5O2xsIGFkZCBgSFdQT0lTT05fSU5KRUNUYCB0byB0aGUgY29uZmlnIGxpc3QganVzdCB0byBiZSBzYWZlLiBUaGF0IHdheSwgSSBjYW4gdGVzdCBhbGwgcmVsYXRlZCBhcmVhcyBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTI6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O3NvZnRfb2ZmbGluZV9wYWdlJiMzNDssCiAgICAmIzM0O21pbl9vcmRlcl9mb3Jfc3BsaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGFuZCBzb2Z0IG9mZmxpbmUgcGF0aHMgdG8gcHJvcGVybHkgbG9jayBmb2xpb3MgYmVmb3JlIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdCgpLCBhbmQgcmVmYWN0b3JzIFRIUCBzcGxpdHRpbmcgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtIV1BPSVNPTl9JTkpFQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7LAogICAgJiMzNDtzb2Z0X29mZmxpbmVfcGFnZSYjMzQ7LAogICAgJiMzNDttaW5fb3JkZXJfZm9yX3NwbGl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBhbmQgc29mdCBvZmZsaW5lIHBhdGhzIHRvIHByb3Blcmx5IGxvY2sgZm9saW9zIGJlZm9yZSBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSwgYW5kIHJlZmFjdG9ycyBUSFAgc3BsaXR0aW5nIGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3IgaGFuZGxpbmcgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM2OjQxLjgzOTM3MjAxM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MzkxNzcyNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGFuZCBzb2Z0IG9mZmxpbmUgcGF0aHMgdG8gcHJvcGVybHkgbG9jayBmb2xpb3MgYmVmb3JlIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdCgpLCBhbmQgcmVmYWN0b3JzIFRIUCBzcGxpdHRpbmcgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNjo0MS44MzkzODEwMjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDI4MTE5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYzY3NmYxMzVmMjBjOGIzNDg1ZjEwYjYyNDhjYWQyMTIzOGUzYzYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMTI6MzY6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCA4MDRiOGY2YWE1NTcwLi4yYzVlN2IxYjY5MjZiIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTQ0MzIsMTAgKzQ0MzIsMTQgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuICAqIElmIGEgZmlsZS1iYWNrZWQgZm9saW8gaXMgdHJ1bmNhdGVkLCAwIHdpbGwgYmUgcmV0dXJuZWQuIEFueSBzdWJzZXF1ZW50XFxuICAqIHNwbGl0IGF0dGVtcHQgc2hvdWxkIGdldCAtRUJVU1kgZnJvbSBzcGxpdCBjaGVja2luZyBjb2RlLlxcbiAgKlxcbisgKiBDb250ZXh0OiBAZm9saW8gbXVzdCBiZSBsb2NrZWQuXFxuKyAqXFxuICAqIFJldHVybjogQGZvbGlvJ3MgbWluaW11bSBvcmRlciBmb3Igc3BsaXRcXG4gICovXFxuIHVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4rXFxuIFxcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuaW5kZXggYThiMDNlMjkyMGJhOC4uYjU3NDBiOTI1YmJmZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC0xNzA1LDI2ICsxNzA1LDYgQEAgc3RhdGljIGludCBpZGVudGlmeV9wYWdlX3N0YXRlKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqcCxcXG4gXFx0cmV0dXJuIHBhZ2VfYWN0aW9uKHBzLCBwLCBwZm4pO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBXaGVuICdyZWxlYXNlJyBpcyAnZmFsc2UnLCBpdCBtZWFucyB0aGF0IGlmIHRocCBzcGxpdCBoYXMgZmFpbGVkLFxcbi0gKiB0aGVyZSBpcyBzdGlsbCBtb3JlIHRvIGRvLCBoZW5jZSB0aGUgcGFnZSByZWZjb3VudCB3ZSB0b29rIGVhcmxpZXJcXG4tICogaXMgc3RpbGwgbmVlZGVkLlxcbi0gKi9cXG4tc3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLVxcdFxcdGJvb2wgcmVsZWFzZSlcXG4te1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0bG9ja19wYWdlKHBhZ2UpO1xcbi1cXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgbmV3X29yZGVyKTtcXG4tXFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuLVxcbi1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHJlbGVhc2UpXFxuLVxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgdW5tYXBfYW5kX2tpbGwoc3RydWN0IGxpc3RfaGVhZCAqdG9fa2lsbCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LCBpbnQgZmxhZ3MpXFxuIHtcXG5AQCAtMjUwOSw5ICsyNDg5LDYgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcXG4tXFx0XFx0Y29uc3QgaW50IG5ld19vcmRlciA9IG1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pO1xcbi1cXHRcXHRpbnQgZXJyO1xcbi1cXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhlIGZsYWcgbXVzdCBiZSBzZXQgYWZ0ZXIgdGhlIHJlZmNvdW50IGlzIGJ1bXBlZFxcbiBcXHRcXHQgKiBvdGhlcndpc2UgaXQgbWF5IHJhY2Ugd2l0aCBUSFAgc3BsaXQuXFxuQEAgLTI1MjYsMjQgKzI1MDMsMjUgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIFxcdFxcdCAqIHBhZ2UgaXMgYSB2YWxpZCBoYW5kbGFibGUgcGFnZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XFxuLVxcdFxcdGVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTtcXG4rXFxuK1xcdFxcdGZvbGlvX2xvY2soZm9saW8pO1xcbitcXHRcXHRzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocCwgbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbykpO1xcbitcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocCk7XFxuK1xcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiBzcGxpdHRpbmcgYSBmb2xpbyB0byBvcmRlci0wIGZhaWxzLCBraWxsIHRoZSBwcm9jZXNzLlxcbiBcXHRcXHQgKiBTcGxpdCB0aGUgZm9saW8gcmVnYXJkbGVzcyB0byBtaW5pbWl6ZSB1bnVzYWJsZSBwYWdlcy5cXG4gXFx0XFx0ICogQmVjYXVzZSB0aGUgbWVtb3J5IGZhaWx1cmUgY29kZSBjYW5ub3QgaGFuZGxlIGxhcmdlXFxuIFxcdFxcdCAqIGZvbGlvcywgdGhpcyBzcGxpdCBpcyBhbHdheXMgdHJlYXRlZCBhcyBpZiBpdCBmYWlsZWQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZXJyIHx8IG5ld19vcmRlcikge1xcbi1cXHRcXHRcXHQvKiBnZXQgZm9saW8gYWdhaW4gaW4gY2FzZSB0aGUgb3JpZ2luYWwgb25lIGlzIHNwbGl0ICovXFxuLVxcdFxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdHJlcyA9IC1FSFdQT0lTT047XFxuIFxcdFxcdFxcdGtpbGxfcHJvY3Nfbm93KHAsIHBmbiwgZmxhZ3MsIGZvbGlvKTtcXG4tXFx0XFx0XFx0cHV0X3BhZ2UocCk7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdFxcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5TUExJVF9USFAsIE1GX0ZBSUxFRCk7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbiBcXHRcXHR9XFxuLVxcdFxcdFZNX0JVR19PTl9QQUdFKCFwYWdlX2NvdW50KHApLCBwKTtcXG4tXFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xcbiBcXHR9XFxuIFxcbiBcXHQvKlxcbkBAIC0yODYxLDkgKzI4MzksOCBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0XFx0LnJlYXNvbiA9IE1SX01FTU9SWV9GQUlMVVJFLFxcbiBcXHR9O1xcbiBcXG4rXFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuIFxcdGlmICghaHVnZSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xcbi1cXHRcXHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XFxuLVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJZiBuZXdfb3JkZXIgKHRhcmdldCBzcGxpdCBvcmRlcikgaXMgbm90IDAsIGRvIG5vdCBzcGxpdCB0aGVcXG4gXFx0XFx0ICogZm9saW8gYXQgYWxsIHRvIHJldGFpbiB0aGUgc3RpbGwgYWNjZXNzaWJsZSBsYXJnZSBmb2xpby5cXG5AQCAtMjg3MSwxNSArMjg0OCwyMCBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0XFx0ICogcHJlZmVycmVkLCBzcGxpdCBpdCB0byBub24temVybyBuZXdfb3JkZXIgbGlrZSBpdCBpcyBkb25lIGluXFxuIFxcdFxcdCAqIG1lbW9yeV9mYWlsdXJlKCkuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAvKiByZWxlYXNlPSAqLyB0cnVlKSkge1xcbitcXHRcXHRpZiAoIW1pbl9vcmRlcl9mb3Jfc3BsaXQoZm9saW8pKVxcbitcXHRcXHRcXHRyZXQgPSBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXIocGFnZSwgMCkgPyAtRUJVU1kgOiAwO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbitcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiBcXHRcXHRcXHRwcl9pbmZvKFxcXCIlI2x4OiB0aHAgc3BsaXQgZmFpbGVkXFxcXG5cXFwiLCBwZm4pO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuIFxcdGlmICghaHVnZSlcXG4gXFx0XFx0Zm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pO1xcbiBcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM2OjQzLjI0MzEzOTM5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkzOTg3OTkzMTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcInNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gICAgXCJtaW5fb3JkZXJfZm9yX3NwbGl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGFuZCBzb2Z0IG9mZmxpbmUgcGF0aHMgdG8gcHJvcGVybHkgbG9jayBmb2xpb3MgYmVmb3JlIGNhbGxpbmcgbWluX29yZGVyX2Zvcl9zcGxpdCgpLCBhbmQgcmVmYWN0b3JzIFRIUCBzcGxpdHRpbmcgbG9naWMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBlcnJvciBoYW5kbGluZyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYzY3NmYxMzVmMjBjOGIzNDg1ZjEwYjYyNDhjYWQyMTIzOGUzYzYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxMjozNjozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA4MDRiOGY2YWE1NTcwLi4yYzVlN2IxYjY5MjZiIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ0MzIsMTAgKzQ0MzIsMTQgQEAgaW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4gICogSWYgYSBmaWxlLWJhY2tlZCBmb2xpbyBpcyB0cnVuY2F0ZWQsIDAgd2lsbCBiZSByZXR1cm5lZC4gQW55IHN1YnNlcXVlbnRcbiAgKiBzcGxpdCBhdHRlbXB0IHNob3VsZCBnZXQgLUVCVVNZIGZyb20gc3BsaXQgY2hlY2tpbmcgY29kZS5cbiAgKlxuKyAqIENvbnRleHQ6IEBmb2xpbyBtdXN0IGJlIGxvY2tlZC5cbisgKlxuICAqIFJldHVybjogQGZvbGlvJ3MgbWluaW11bSBvcmRlciBmb3Igc3BsaXRcbiAgKi9cbiB1bnNpZ25lZCBpbnQgbWluX29yZGVyX2Zvcl9zcGxpdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGE4YjAzZTI5MjBiYTguLmI1NzQwYjkyNWJiZmQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtMTcwNSwyNiArMTcwNSw2IEBAIHN0YXRpYyBpbnQgaWRlbnRpZnlfcGFnZV9zdGF0ZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnAsXG4gXHRyZXR1cm4gcGFnZV9hY3Rpb24ocHMsIHAsIHBmbik7XG4gfVxuIFxuLS8qXG4tICogV2hlbiAncmVsZWFzZScgaXMgJ2ZhbHNlJywgaXQgbWVhbnMgdGhhdCBpZiB0aHAgc3BsaXQgaGFzIGZhaWxlZCxcbi0gKiB0aGVyZSBpcyBzdGlsbCBtb3JlIHRvIGRvLCBoZW5jZSB0aGUgcGFnZSByZWZjb3VudCB3ZSB0b29rIGVhcmxpZXJcbi0gKiBpcyBzdGlsbCBuZWVkZWQuXG4tICovXG4tc3RhdGljIGludCB0cnlfdG9fc3BsaXRfdGhwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXG4tXHRcdGJvb2wgcmVsZWFzZSlcbi17XG4tXHRpbnQgcmV0O1xuLVxuLVx0bG9ja19wYWdlKHBhZ2UpO1xuLVx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIG5ld19vcmRlcik7XG4tXHR1bmxvY2tfcGFnZShwYWdlKTtcbi1cbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJlbGVhc2UpXG4tXHRcdHB1dF9wYWdlKHBhZ2UpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gc3RhdGljIHZvaWQgdW5tYXBfYW5kX2tpbGwoc3RydWN0IGxpc3RfaGVhZCAqdG9fa2lsbCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LCBpbnQgZmxhZ3MpXG4ge1xuQEAgLTI1MDksOSArMjQ4OSw2IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbiBcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuLVx0XHRjb25zdCBpbnQgbmV3X29yZGVyID0gbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbyk7XG4tXHRcdGludCBlcnI7XG4tXG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBmbGFnIG11c3QgYmUgc2V0IGFmdGVyIHRoZSByZWZjb3VudCBpcyBidW1wZWRcbiBcdFx0ICogb3RoZXJ3aXNlIGl0IG1heSByYWNlIHdpdGggVEhQIHNwbGl0LlxuQEAgLTI1MjYsMjQgKzI1MDMsMjUgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRcdCAqIHBhZ2UgaXMgYSB2YWxpZCBoYW5kbGFibGUgcGFnZS5cbiBcdFx0ICovXG4gXHRcdGZvbGlvX3NldF9oYXNfaHdwb2lzb25lZChmb2xpbyk7XG4tXHRcdGVyciA9IHRyeV90b19zcGxpdF90aHBfcGFnZShwLCBuZXdfb3JkZXIsIC8qIHJlbGVhc2U9ICovIGZhbHNlKTtcbitcbitcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG4rXHRcdHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcihwLCBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKSk7XG4rXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwKTtcbitcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcbiBcdFx0LypcbiBcdFx0ICogSWYgc3BsaXR0aW5nIGEgZm9saW8gdG8gb3JkZXItMCBmYWlscywga2lsbCB0aGUgcHJvY2Vzcy5cbiBcdFx0ICogU3BsaXQgdGhlIGZvbGlvIHJlZ2FyZGxlc3MgdG8gbWluaW1pemUgdW51c2FibGUgcGFnZXMuXG4gXHRcdCAqIEJlY2F1c2UgdGhlIG1lbW9yeSBmYWlsdXJlIGNvZGUgY2Fubm90IGhhbmRsZSBsYXJnZVxuIFx0XHQgKiBmb2xpb3MsIHRoaXMgc3BsaXQgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgaWYgaXQgZmFpbGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKGVyciB8fCBuZXdfb3JkZXIpIHtcbi1cdFx0XHQvKiBnZXQgZm9saW8gYWdhaW4gaW4gY2FzZSB0aGUgb3JpZ2luYWwgb25lIGlzIHNwbGl0ICovXG4tXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHApO1xuK1x0XHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHtcbiBcdFx0XHRyZXMgPSAtRUhXUE9JU09OO1xuIFx0XHRcdGtpbGxfcHJvY3Nfbm93KHAsIHBmbiwgZmxhZ3MsIGZvbGlvKTtcbi1cdFx0XHRwdXRfcGFnZShwKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5TUExJVF9USFAsIE1GX0ZBSUxFRCk7XG4gXHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHRcdH1cbi1cdFx0Vk1fQlVHX09OX1BBR0UoIXBhZ2VfY291bnQocCksIHApO1xuLVx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocCk7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI4NjEsOSArMjgzOSw4IEBAIHN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0XHQucmVhc29uID0gTVJfTUVNT1JZX0ZBSUxVUkUsXG4gXHR9O1xuIFxuK1x0Zm9saW9fbG9jayhmb2xpbyk7XG4gXHRpZiAoIWh1Z2UgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4tXHRcdGNvbnN0IGludCBuZXdfb3JkZXIgPSBtaW5fb3JkZXJfZm9yX3NwbGl0KGZvbGlvKTtcbi1cbiBcdFx0LypcbiBcdFx0ICogSWYgbmV3X29yZGVyICh0YXJnZXQgc3BsaXQgb3JkZXIpIGlzIG5vdCAwLCBkbyBub3Qgc3BsaXQgdGhlXG4gXHRcdCAqIGZvbGlvIGF0IGFsbCB0byByZXRhaW4gdGhlIHN0aWxsIGFjY2Vzc2libGUgbGFyZ2UgZm9saW8uXG5AQCAtMjg3MSwxNSArMjg0OCwyMCBAQCBzdGF0aWMgaW50IHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdFx0ICogcHJlZmVycmVkLCBzcGxpdCBpdCB0byBub24temVybyBuZXdfb3JkZXIgbGlrZSBpdCBpcyBkb25lIGluXG4gXHRcdCAqIG1lbW9yeV9mYWlsdXJlKCkuXG4gXHRcdCAqL1xuLVx0XHRpZiAobmV3X29yZGVyIHx8IHRyeV90b19zcGxpdF90aHBfcGFnZShwYWdlLCAvKiBuZXdfb3JkZXI9ICovIDAsXG4tXHRcdFx0XHRcdFx0ICAgICAgIC8qIHJlbGVhc2U9ICovIHRydWUpKSB7XG4rXHRcdGlmICghbWluX29yZGVyX2Zvcl9zcGxpdChmb2xpbykpXG4rXHRcdFx0cmV0ID0gc3BsaXRfaHVnZV9wYWdlX3RvX29yZGVyKHBhZ2UsIDApID8gLUVCVVNZIDogMDtcbitcdFx0ZWxzZVxuK1x0XHRcdHJldCA9IC1FQlVTWTtcbitcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRcdHByX2luZm8oXCIlI2x4OiB0aHAgc3BsaXQgZmFpbGVkXFxuXCIsIHBmbik7XG4tXHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiBcdH1cbiBcbi1cdGZvbGlvX2xvY2soZm9saW8pO1xuIFx0aWYgKCFodWdlKVxuIFx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG4gXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNjo0My4yNDMxNDEyNjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzEzMzAwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEh1Z2VUTEIvTWVtb3J5IEZhaWx1cmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIGEgbG9jayBjaGVjayBpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGBWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pYC4gTWFrZXMgc2Vuc2U7IHdlIGRvbid0IHdhbnQgdG8gYmUgbWVzc2luZyB3aXRoIGZvbGlvIHNwbGl0dGluZyBpZiBpdCdzIGFscmVhZHkgbG9ja2VkLiBUaGVuLCB0aGUgcGF0Y2ggdXBkYXRlcyBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIHRvIGxvY2sgdGhlIGZvbGlvICpiZWZvcmUqIGNhbGxpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpczogQXJlIHRoZXNlIGNoYW5nZXMgcmVhY2hhYmxlPyBBcmUgdGhleSBhY3R1YWxseSB0ZXN0YWJsZT8gTGV0J3Mgc2VlLi4uIGBtZW1vcnlfZmFpbHVyZWAgaGFuZGxlcyBoYXJkd2FyZSBwb2lzb25pbmcsIHdoaWNoIHdlIGtub3cgY2FuIGJlIHRyaWdnZXJlZCBlaXRoZXIgdGhyb3VnaCBzeXNmcyBvciBieSB1c2luZyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRlc3RpbmcuIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgIGRlYWxzIHdpdGggc29mdCBvZmZsaW5pbmcgb2YgcGFnZXMsIGFuZCBpdCdzIGFsc28gYWNjZXNzaWJsZSB2aWEgc3lzZnMgb3IgYG1hZHZpc2UoTUFEVl9TT0ZUX09GRkxJTkUpYC4gU28sIGF0IGxlYXN0IG9uIHRoZSBzdXJmYWNlLCB0aG9zZSBzZWVtIHRlc3RhYmxlLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBzZWN0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBgbWVtb3J5X2ZhaWx1cmVgIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbiByZXNpZGVzLiBJJ2xsIGdyZXAgZm9yIGBtZW1vcnktZmFpbHVyZS5vYCB3aXRoaW4gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluZGljYXRpb24gb2YgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgbGl2ZXMgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNjo0OC45NTY0NDYyMDFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1ODM0NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeS1mYWlsdXJlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTExPW9iai0kKENPTkZJR19ETUFQT09MX1RFU1QpICs9IGRtYXBvb2xfdGVzdC5vXFxubW0vTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19NRU1PUllfRkFJTFVSRSkgKz0gbWVtb3J5LWZhaWx1cmUub1xcbm1tL01ha2VmaWxlLTExMy1vYmotJChDT05GSUdfSFdQT0lTT05fSU5KRUNUKSArPSBod3BvaXNvbi1pbmplY3Qub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNjo0OS4wNjIyODYyNTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODIyNzcxNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IEZhaWx1cmUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoYXQgdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCBhIGNvcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGVycm9yIGhhbmRsaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpdHMgZGVmaW5pdGlvbiBhbmQgY29udGV4dCwgYW5kIHRoYXQgYWxtb3N0IGFsd2F5cyBtZWFucyBkaXZpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5LCBJJ2QgZXhwZWN0IHRvIGZpbmQgaXQgaW4gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGlzIHRoaW5nIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQgZW5hYmxlcyBvciBkaXNhYmxlcy4gVGltZSB0byBnZXQgZG93biB0byB0aGUgbml0dHktZ3JpdHR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTc1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MzY6NTcuODg1MDYwNTUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA0MTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc2Mj1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NjQtXFxubW0vS2NvbmZpZzo3NjU6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NjYtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6MzY6NTguMDkxMTA4MTk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDU5NzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgYmVpbmcgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgcmVsZXZhbnQgYXJlYSwgbGlrZWx5IGFyb3VuZCBsaW5lIDc2NSDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgY2x1c3RlciwgdGhvdWdoIGl0IHZhcmllcywgb2YgY291cnNlLiBUaW1lIHRvIHNlZSB3aGF0J3MgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGNsZWFyIGVub3VnaCB0byBnbGVhbiB0aGUgZXNzZW50aWFsIGxvZ2ljIHdpdGhvdXQgdG9vIG11Y2ggZGlnZ2luZy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyB0aGUgYnVpbGQgb3B0aW9ucywgZGVmYXVsdHMsIGFuZCBhbnkgY29uZGl0aW9uYWwgbG9naWMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3BlY2lmaWMgbWVtb3J5IHN1YnN5c3RlbS4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgaXMgYSBnb29kIHJlYXNvbiBmb3IgdGhlIHNwZWNpZmljIGxpbmUgb2YgY29kZSB0byBiZSB3aGVyZSBpdCBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjAyLjI1NTcwNzU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHRcXHQgIC9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIHR1bmFibGUuXFxuIDc2MTpcXHRcXG4gNzYyOlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuIDc2MzpcXHRcXHRib29sXFxuIDc2NDpcXHRcXG4gNzY1OlxcdGNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbiA3NjY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNzY3OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbiA3Njg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4gNzY5OlxcdFxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuIDc3MDpcXHRcXHRoZWxwXFxuIDc3MTpcXHRcXHQgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtc1xcbiA3NzI6XFx0XFx0ICB3aXRoIE1DQSByZWNvdmVyeS4gVGhpcyBhbGxvd3MgYSBzeXN0ZW0gdG8gY29udGludWUgcnVubmluZ1xcbiA3NzM6XFx0XFx0ICBldmVuIHdoZW4gc29tZSBvZiBpdHMgbWVtb3J5IGhhcyB1bmNvcnJlY3RlZCBlcnJvcnMuIFRoaXMgcmVxdWlyZXNcXG4gNzc0OlxcdFxcdCAgc3BlY2lhbCBoYXJkd2FyZSBzdXBwb3J0IGFuZCB0eXBpY2FsbHkgRUNDIG1lbW9yeS5cXG4gNzc1OlxcdFxcbiA3NzY6XFx0Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbiA3Nzc6XFx0XFx0dHJpc3RhdGUgXFxcIkhXUG9pc29uIHBhZ2VzIGluamVjdG9yXFxcIlxcbiA3Nzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcXHUwMDI2XFx1MDAyNiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbiA3Nzk6XFx0XFx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjAyLjI1Nzk5NDcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4ODMwNjk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBNZW1vcnkgRmFpbHVyZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGhlcmUuIFdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBlbmFibGVkOyB0aGF0J3MgdGhlIGNvcmUuIFRoZW4sIEknbSBwb25kZXJpbmcgYENPTkZJR19IV1BPSVNPTl9JTkpFQ1RgLiBJdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGZ1enppbmcsIHdoaWNoIGlzIGFsd2F5cyBhIGdvb2QgdGhpbmcuIEJ1dCwgaG9sZCBvbi4uLiBpZiB3ZSBoYXZlIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQsIGlzbid0IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbHNvIGF2YWlsYWJsZT8gUmlnaHQsIGl0IHNob3VsZCBiZS4gTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYG1hZHZpc2VgIGFuZCBgTUFEVl9IV1BPSVNPTmAgYXJlIHByZXNlbnQgaW4gdGhpcyBidWlsZCB3aXRoIHRoYXQgY29uZmlnLiBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MDUuOTQ2MzA0ODM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY5NzEzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9IV1BPSVNPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ5NC1cXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxubW0vbWFkdmlzZS5jOjE0OTU6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNDk2LVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTUxLVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jOjE1NTI6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTUzLSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODc9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk0My0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xcbm1tL21hZHZpc2UuYzoxOTQ0OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXFxubW0vbWFkdmlzZS5jLTE5NDUtICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzowNi4xMTMyODM0ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1ODcwOTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIExvY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBNQURWX0hXUE9JU09OYCBhbmQgYE1BRFZfU09GVF9PRkZMSU5FYCBhcmUgaW5kZWVkIGF2YWlsYWJsZSDigJMgZ29vZC4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBMZXQncyBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOiBgbWluX29yZGVyX2Zvcl9zcGxpdGAsIGBtZW1vcnlfZmFpbHVyZWAsIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC5cblxuQWgsIGhlcmUgd2UgaGF2ZSBpdC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtgIHdpdGhpbiBgbWluX29yZGVyX2Zvcl9zcGxpdGAuIENsZWFybHksIHRoaXMgaXMgcmVsYXRlZCB0byBmb2xpbyBsb2NraW5nIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB0aGVuIGdvZXMgb24gdG8gZW5zdXJlIHRoYXQgY2FsbGVycyB3aXRoaW4gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgbm93IHByb3Blcmx5IGxvY2sgdGhlIGZvbGlvICpiZWZvcmUqIGNhbGxpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIHByaW1hcmlseSBkZWFsaW5nIHdpdGggbG9ja2luZyBhbmQgYSBiaXQgb2YgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSB0aHJlYWQgc2FmZXR5IHdpdGhpbiB0aGUgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBjb2RlIHBhdGguXG5cblRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBjaGFuZ2UgaXMgdGhyb3VnaCB0aGUgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGFuZCBgbWFkdmlzZShNQURWX1NPRlRfT0ZGTElORSlgIHN5c3RlbSBjYWxscyBzcGVjaWZpY2FsbHkgb3BlcmF0aW5nIG9uIFRIUHMuIFRvIHByb3Blcmx5IHRlc3QgdGhpcyB0aG9yb3VnaGx5LCBJIHdpbGwgbmVlZCB0byBlbnN1cmUgdGhhdCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gYG1tL2AgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjAzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjEyLjI3MTk5NjA3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxMDk4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzE9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzMy1cXG5tbS9LY29uZmlnOjgzNDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzUtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTctXFxubW0vS2NvbmZpZzo4NTg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU5LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODY0LVxcbm1tL0tjb25maWc6ODY1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjYtXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODczLVxcbm1tL0tjb25maWc6ODc0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODc1LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODE9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5MC1cXG5tbS9LY29uZmlnOjg5MTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkyLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDAtXFxubW0vS2NvbmZpZzo5MDE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDItXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDgtXFxubW0vS2NvbmZpZzo5MDk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMC1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE2LVxcbm1tL0tjb25maWc6OTE3OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE4LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI2PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzUtXFxubW0vS2NvbmZpZzo5MzY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzNy1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ0LVxcbm1tL0tjb25maWc6OTQ1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ2LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUyLVxcbm1tL0tjb25maWc6OTUzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTQtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2MC1cXG5tbS9LY29uZmlnOjk2MTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2Mi1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjEyLjM2OTExMTM1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYzNDc5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBDb25maWd1cmF0aW9uIGFuZCBSZWxhdGVkIENvZGUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHBsYXlpbmcgd2l0aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBhIGtleSBzZXR0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHR3ZWFraW5nIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IGZhaWx1cmVzIGFuZCBzb2Z0bHkgb2ZmbGluaW5nIHBhZ2VzIHRoYXQgYXJlIGluIHVzZS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBjb25maXJtaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2UgYW5kIGlmIHRoZXJlIGFyZSBzaWRlIGVmZmVjdHMuIEknbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBtZW1vcnlfZmFpbHVyZWAuIFNpbmNlIHRoZSB0ZXh0IG1lbnRpb25zIHRoZSBmdW5jdGlvbiBuYW1lLCBteSBmaXJzdCBzdG9wIHdpbGwgYmUgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgaGVhcnQgb2YgdGhlIGxvZ2ljIGJlaGluZCB0aGF0IGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgdGhlIGNvZGUgYW5kIHNlZSBob3cgdGhlIGZhaWx1cmUgaXMgaGFuZGxlZCBpbiByZWxhdGlvbiB0byBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGVuIEkgd2lsbCBjaGVjayBob3cgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgaXMgYmVpbmcgY2FsbGVkIGFuZCB3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjE2LjEzMjU5MjkzOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMzU1MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbWVtb3J5X2ZhaWx1cmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTIzMDA9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjM2NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIzNjY6aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMzY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MTYuMjQ1OTUzOTIxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTY5NTgyNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgTWVtb3J5IEZhaWx1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgaGFuZGxpbmcgZm9yIGEgXCJzb2Z0IG9mZmxpbmVcIiBzY2VuYXJpbywgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoYXQgc3BlY2lmaWMgZmlsZSwgYXMgaXQgc2VlbXMgcmVsZXZhbnQuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgbG9naWMgYmVoaW5kIHRoaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc2l0dWF0aW9uLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYmVoYXZpb3IgSSdtIHNlZWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjE5Ljg2MjkyMTc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMwNzU3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0yODE3PUVYUE9SVF9TWU1CT0wodW5wb2lzb25fbWVtb3J5KTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjgyNi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4Mjc6c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MjAuMDI2MDMxNjI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTQzNTU1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIHNvbWUgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMuIFNwZWNpZmljYWxseSwgaXQncyBjaGFuZ2luZyBob3cgYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAgKGFuZCBwb3NzaWJseSBgc29mdF9vZmZsaW5lX3BhZ2VgLCBpZiB0aGUgc3ltYm9sIHJlc29sdXRpb24gaXMgb2ZmKSBoYW5kbGUgZm9saW8gbG9ja2luZyBiZWZvcmUgaW52b2tpbmcgYG1pbl9vcmRlcl9mb3Jfc3BsaXRgLiBUaGF0J3MgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE1vcmUgaW50ZXJlc3RpbmdseSwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlbW92aW5nIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGFuZCBkaXJlY3RseSBjYWxsaW5nIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0J3MgY2hhbmdpbmcgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGUgaHVnZSBwYWdlIHNwbGl0dGluZyBsb2dpYywgcmVtb3ZpbmcgYSBsYXllciBvZiBhYnN0cmFjdGlvbi5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCBuZWVkcyByaWdvcm91cyBmdXp6aW5nLiBDaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBlc3BlY2lhbGx5IHRob3NlIGFsdGVyaW5nIGhvdyBwYWdlIHNwbGl0dGluZyBpcyBoYW5kbGVkLCBhcmUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW50cm9kdWNpbmcgc3VidGxlLCBhbmQgcG90ZW50aWFsbHkgY2F0YXN0cm9waGljLCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZSBhbHRlcmVkIGNvZGUgcGF0aHMgd2l0aGluIGBtZW1vcnlfZmFpbHVyZWAsIGBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2VgLCBhbmQsIGNyaXRpY2FsbHksIGBzcGxpdF9odWdlX3BhZ2VfdG9fb3JkZXJgLiBJJ2xsIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBjb250cm9sIGZsb3cgaW4gdGhlIGRpZmZlcmVudCBlZGdlIGNhc2VzIHRoZSBmdXp6aW5nIHVuY292ZXJzLlxuXG5Ob3csIGxldCBtZSBjaGVjayBgc29mdF9vZmZsaW5lX3BhZ2VgIHRvIHZlcmlmeSB0aGUgZW50cnkgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MjQuNjQwMzkwNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzA5NjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHNvZnRfb2ZmbGluZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0yODI3PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTQ4LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk0OTppbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzoyNC43NDM0OTM2NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NDU4MDk1NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIGBtYWR2aXNlYCBNYXplKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaGFuZGxpbmcgc29tZXRoaW5nIG9mZi1saW5lLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGFwcGVhcnMgdG8gYmUgYHNvZnRfb2ZmbGluZV9wYWdlYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdW5kZXJzdG9vZC4gQnV0IHRoZW4gdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGhvdyBkb2VzIHRoYXQgaW50ZXJhY3Qgd2l0aCBgbWFkdmlzZWA/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBtYWR2aXNlYCBiZWhhdmlvciBpcyByZWxldmFudCBoZXJlIOKAkyBpcyBpdCBgbWFkdmlzZV9kb19iZWhhdmlvcmAsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMgbGlrZSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgIG9yIGV2ZW4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYD8gVG8gcGlucG9pbnQgdGhlIHJpZ2h0IHBhdGgsIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gYG1hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGBNQURWX0hXUE9JU09OYC4gVGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgb2ZmLWxpbmUgYXNwZWN0IHdpbGwgYmUgbWFkZSwgYW5kIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgYmVoYXZpb3Igd2lsbCBiZSBkZWZpbmVkLiBJJ2xsIGZvY3VzIG15IHNlYXJjaCB3aXRoaW4gYG1hZHZpc2UuY2AgZm9yIGFueSBtZW50aW9uIG9mIGBNQURWX0hXUE9JU09OYCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgY29uY2VwdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzozNy4yODkzMDU1NTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODY0MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BRFZfSFdQT0lTT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0OTQtXFx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxNDk1OlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTQ5Ni1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MS1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYzoxNTUyOlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcXG5tbS9tYWR2aXNlLmM6MTk0NDogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6MzcuMzc5MTc0NDY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNzkyMjY3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgTUFEVl9IV1BPSVNPTmAgaXMgaGFuZGxlZCB3aXRoaW4gYG1hZHZpc2UuY2AuXG5cbioqRGl2aW5nIGludG8gTUFEVl9IV1BPSVNPTiB3aXRoaW4gbWFkdmlzZS5jKipcblxuQWxyaWdodCwgc28gSSdtIGludGVyZXN0ZWQgaW4gaG93IGBNQURWX0hXUE9JU09OYCBpcyBhY3R1YWxseSAqaW1wbGVtZW50ZWQqLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgYWR2aWNlIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCdzIGdvaW5nIHRvIGJlIGEgZmFzY2luYXRpbmcgam91cm5leSBpbnRvIHBhZ2UgdGFibGUgbW9kaWZpY2F0aW9ucywgZXJyb3IgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggZXJyb3ItY29ycmVjdGluZyBjb2RlIChFQ0MpIG1lbW9yeSBvciBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc21zLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhpcyBpbnZvbHZlcyBkaXJlY3RseSBtYW5pcHVsYXRpbmcgcGFnZSBmbGFncywgdHJpZ2dlcmluZyBoYXJkd2FyZSBleGNlcHRpb25zIGluIGEgY29udHJvbGxlZCBtYW5uZXIsIG9yIHBlcmhhcHMgdXNpbmcgc29tZSBtb3JlIGFic3RyYWN0IG1lY2hhbmlzbSBwcm92aWRlZCBieSB0aGUga2VybmVsIHRvIHNpZ25hbCBvciBtYXJrIHRoZXNlIHBhZ2VzLiBBcmUgdGhlcmUgbmV3IHN5c3RlbSBjYWxscyBvciBmbGFncz8gT3IgbWF5YmUgaXQncyBjbGV2ZXJseSBwaWdneWJhY2tpbmcgb24gZXhpc3RpbmcgbWFkdmlzZSBvcHRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBhc3N1bXB0aW9ucyBiZWluZyBtYWRlLiBBcmUgd2UgZGVhbGluZyB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIHZlbmRvcnMgb3IgYSBtb3JlIGdlbmVyYWxpemVkIGFwcHJvYWNoPyBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBzeW5jaHJvbml6YXRpb24gYXNwZWN0cy4gSG93IGFyZSBjb25jdXJyZW50IGFjY2Vzc2VzIGhhbmRsZWQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBIb3cgZG9lcyB0aGUga2VybmVsIGRlYWwgd2l0aCB0aGUgY2FzZSBvZiBhIHBvaXNvbmVkIHBhZ2UgKmFscmVhZHkqIGJlaW5nIGFjY2Vzc2VkIG9yIG1vZGlmaWVkPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGRldGVybWluZSBwcmVjaXNlbHkgaG93IHRoZSBrZXJuZWwgY2FuIGluc3RydWN0IHRoZSBoYXJkd2FyZSB0byBjb25zaWRlciBhIG1lbW9yeSBwYWdlIGFzIGJhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjQyLjU1ODQwNDQwOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkwNTI1NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9pbmplY3RfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ0Ni0gKi9cXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNDQ4LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1MDQtXFxubW0vbWFkdmlzZS5jOjE1MDU6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMTUwNi17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xODk2LVxcdFxcdHJhbmdlLVxcdTAwM2VlbmQgPSBzdGFydCArIGxlbl9pbjtcXG5tbS9tYWR2aXNlLmM6MTg5NzpcXHRcXHRyZXR1cm4gbWFkdmlzZV9pbmplY3RfZXJyb3IobWFkdl9iZWhhdmlvcik7XFxubW0vbWFkdmlzZS5jLTE4OTgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzo0Mi42NTc0NjE5ODJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg3NTQ1NTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAuIFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCByaWdodD8gSSdtIGJldHRpbmcgdGhhdCdzIHRoZSBwb2ludCBvZiBvcmlnaW4gZm9yIHRoZSBzaW11bGF0ZWQgbWVtb3J5IGVycm9ycyB3ZSdyZSB0YWxraW5nIGFib3V0LiBUaGUgaW50ZXJlc3RpbmcgYml0IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgbG93ZXIgbGV2ZWxzLiBUaGUgdGV4dCBzdWdnZXN0cyB0aGF0IGl0LCBhdCBzb21lIHBvaW50LCBjYWxscyBlaXRoZXIgYG1lbW9yeV9mYWlsdXJlYCBvciBgc29mdF9vZmZsaW5lX3BhZ2VgLiBUaGF0J3Mgb3VyIHRhcmdldC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGV4YWN0IGRlY2lzaW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0IGNob29zZXMgYmV0d2VlbiB0aG9zZSB0d28sIGFuZCB3aGF0IHRoYXQgY2hvaWNlIHRlbGxzIHVzIGFib3V0IHRoZSBuYXR1cmUgb2YgdGhlIHNpbXVsYXRlZCBlcnJvci4gRG9lcyB0aGUgY2hvaWNlIHJlbGF0ZSB0byB0aGUgbGV2ZWwgb2Ygc2ltdWxhdGVkIGZhaWx1cmU/IE9yIHRoZSBsb2NhdGlvbiBpdCBtYXkgYmUgaW5qZWN0ZWQgaW50bz8gVGltZSB0byBkaXNzZWN0IHRoYXQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIExldCdzIHN0YXJ0IHdpdGggYSBjbG9zZSBsb29rIGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6NDcuNTMyOTIwMzY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ0MDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMTQ0MTpcXHR9XFxuMTQ0MjpcXHRcXG4xNDQzOlxcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4xNDQ0OlxcdC8qXFxuMTQ0NTpcXHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxcbjE0NDY6XFx0ICovXFxuMTQ0NzpcXHRzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE0NDg6XFx0e1xcbjE0NDk6XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbjE0NTA6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlLnN0YXJ0O1xcbjE0NTE6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZS5lbmQ7XFxuMTQ1MjpcXHRcXG4xNDUzOlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG4xNDU0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGZvciAoOyBzdGFydCBcXHUwMDNjIGVuZDsgc3RhcnQgKz0gc2l6ZSkge1xcbjE0NTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuMTQ1ODpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4xNDU5OlxcdFxcdFxcdGludCByZXQ7XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdFxcdHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3Qoc3RhcnQsIDEsIDAsIFxcdTAwMjZwYWdlKTtcXG4xNDYyOlxcdFxcdFxcdGlmIChyZXQgIT0gMSlcXG4xNDYzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTQ2NDpcXHRcXHRcXHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG4xNDY1OlxcdFxcbjE0NjY6XFx0XFx0XFx0LypcXG4xNDY3OlxcdFxcdFxcdCAqIFdoZW4gc29mdCBvZmZsaW5pbmcgaHVnZXBhZ2VzLCBhZnRlciBtaWdyYXRpbmcgdGhlIHBhZ2VcXG4xNDY4OlxcdFxcdFxcdCAqIHdlIGRpc3NvbHZlIGl0LCB0aGVyZWZvcmUgaW4gdGhlIHNlY29uZCBsb29wIFxcXCJwYWdlXFxcIiB3aWxsXFxuMTQ2OTpcXHRcXHRcXHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxcbjE0NzA6XFx0XFx0XFx0ICovXFxuMTQ3MTpcXHRcXHRcXHRzaXplID0gcGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpO1xcbjE0NzI6XFx0XFxuMTQ3MzpcXHRcXHRcXHRpZiAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcXG4xNDc0OlxcdFxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuMTQ3NTpcXHRcXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxuMTQ3NjpcXHRcXHRcXHRcXHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIE1GX0NPVU5UX0lOQ1JFQVNFRCk7XFxuMTQ3NzpcXHRcXHRcXHR9IGVsc2Uge1xcbjE0Nzg6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiSW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGZvciBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxcXG5cXFwiLFxcbjE0Nzk6XFx0XFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcbjE0ODA6XFx0XFx0XFx0XFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9BQ1RJT05fUkVRVUlSRUQgfCBNRl9DT1VOVF9JTkNSRUFTRUQgfCBNRl9TV19TSU1VTEFURUQpO1xcbjE0ODE6XFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcXG4xNDgyOlxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTQ4MzpcXHRcXHRcXHR9XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdFxcdFxcdGlmIChyZXQpXFxuMTQ4NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0ODc6XFx0XFx0fVxcbjE0ODg6XFx0XFxuMTQ4OTpcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6NDcuNTMzMTg1OTc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDMyMzI3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGNhbGxlZCBmcm9tIGBtYWR2aXNlYCBpdHNlbGYuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGdhdGV3YXkgZm9yIGluamVjdGluZyB0aGUgZXJyb3JzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgbW9kaWZpY2F0aW9ucyB0byB0d28gc3BlY2lmaWMgZnVuY3Rpb25zOiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IG1hbmFnZW1lbnQgd29ya3MsIHRoZXNlIGFyZSB0aGUgb25lcyBJIG5lZWQgdG8gemVybyBpbiBvbi4gVGhlIGNoYW5nZXMgdG8gYG1pbl9vcmRlcl9mb3Jfc3BsaXRgIGFyZSBpbnRlcmVzdGluZywgYnV0IHNpbmNlIGl0J3MgYSBoZWxwZXIgZnVuY3Rpb24sIEknbGwgbGlrZWx5IG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgc29mdF9vZmZsaW5lX3BhZ2VgLiBJJ2xsIGhhdmUgdG8gdmVyaWZ5IGlmIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCBpcyBzdGF0aWMgYXMgaXQgd2lsbCBpbXBhY3QgaG93IHdpZGVseSB0aGUgbW9kaWZpY2F0aW9ucyB3aWxsIGltcGFjdCB0aGUgYXJjaGl0ZWN0dXJlLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzY29wZSBvZiB0aGUgZnVuY3Rpb24uIExldCdzIHNlZSBpZiB0aGlzIHBhdGNoIGNhdXNlcyBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozNzo1MS43MzY0MjE5MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjg3NTcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedW5zaWduZWQgaW50IG1pbl9vcmRlcl9mb3Jfc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZV9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTQ0MjA9aW50IGZvbGlvX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ0MzgtICovXFxubW0vaHVnZV9tZW1vcnkuYzo0NDM5OnVuc2lnbmVkIGludCBtaW5fb3JkZXJfZm9yX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYy00NDQwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6NTEuODQ5MzY2MDg2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTg1MDQxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcywgYW5kIGl0J3MgY2xlYXIgdGhpcyBpc24ndCBhIHN0YXRpYyBzaXR1YXRpb24g4oCTIHRoaW5ncyBhcmUgZHluYW1pY2FsbHkgY29uZmlndXJlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgYWN0dWFsbHkgcmVsZXZhbnQgaGVyZS4gTGV0J3Mgc3RhcnQgYnkgcXVpY2tseSBjb25maXJtaW5nIHdoZXRoZXIgYG1lbW9yeV9mYWlsdXJlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgYW5kLCBub3BlLCBpdCdzIG5vdC4gVGhlIHNhbWUgZ29lcyBmb3IgYHNvZnRfb2ZmbGluZV9wYWdlYC4gQm90aCBhcmUgZHluYW1pYy5cblxuQWxyaWdodCwgc28gdGhlIGtleSB2YXJpYWJsZXMgdG8gZm9jdXMgb24gYXJlIG5vdzogYG1lbW9yeV9mYWlsdXJlYCwgYHNvZnRfb2ZmbGluZV9wYWdlYCwgYW5kIGFsc28gdGhlIGBtaW5fb3JkZXJfZm9yX3NwbGl0YCDigJMgYmVjYXVzZSBJIGtub3cgdGhhdCBjYW4gc29tZXRpbWVzIGJlIGEgY29uZmlndXJhdGlvbiBwb2ludCB0b28uXG5cblRvIGFjdHVhbGx5ICplbmFibGUqIHRoZXNlIG1lbW9yeSBmYWlsdXJlIGZlYXR1cmVzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlncyBhcmUgc2V0LiBJdCdzIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHRob3NlIGxvb2sgbGlrZSB0aGUgb25lcyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuQnV0IHdhaXQsIGhvbGQgb24uLi4gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBNTVVgLiBPa2F5LCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBkZXBlbmRlbmN5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyB0b28uIExldCBtZSBkb3VibGUtY2hlY2suIE9rYXksIGBNRU1PUllfRkFJTFVSRWAgZGVwZW5kcyBvbiAqYm90aCogYE1NVWAgYW5kIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGF0IG9uZSByaWdodC5cblxuYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGlzIGNvbW1vbmx5IHNldCBvbiB4ODYgYW5kIGFybTY0IGFyY2hpdGVjdHVyZXMuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBgYXJjaC94ODYvS2NvbmZpZ2AgZmlsZSB0byBzZWUgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBmb3IgeDg2LiBJIGJldHRlciBnbyBhbmQgY2hlY2sgdGhhdCByaWdodCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM3OjU4LjM2Nzg3NTE1NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMjcyODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9LY29uZmlnPTc1MD1jb25maWcgWDg2X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTc1Ni1cXHRkZXBlbmRzIG9uIFg4Nl82NCB8fCAhU1BBUlNFTUVNXFxuYXJjaC94ODYvS2NvbmZpZzo3NTc6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5hcmNoL3g4Ni9LY29uZmlnLTc1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTI6Mzc6NTguNTQwMTUzMTEyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5Mjk1MTgwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTWVtb3J5IEZhaWx1cmUgU3VwcG9ydCoqXG5cblJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGxvb2tpbmcgYXQsIHRoZSBgWDg2X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBmbGFnLCBpcyBpbmRlZWQgc2VsZWN0ZWQuIEdvb2Qgc3RhcnQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSwgaXMgdG8gZG91YmxlLWNoZWNrIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGVudmlyb25tZW50IEknbSB1c2luZyAqYWN0dWFsbHkqIHN1cHBvcnRzIHRoaXMuXG5cbkxldCdzIHNlZeKApiB0aGUgZGVwZW5kZW5jaWVzIGxpc3RlZCBhcmUgYFg4Nl82NCB8fCAhU1BBUlNFTUVNYC4gT2theSwgdGhhdCBtZWFucyBpdCdzIGF2YWlsYWJsZSBlaXRoZXIgb24gYW4geDg2LTY0IGFyY2hpdGVjdHVyZSAqb3IqIGlmIHRoZSBrZXJuZWwgaXNuJ3QgdXNpbmcgc3BhcnNlIG1lbW9yeSBtYW5hZ2VtZW50LiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQuIEdpdmVuIG15IHNldHVwLCBJJ20gY29uZmlkZW50IGl0J3Mgc2F0aXNmaWVkLiBObyByZWQgZmxhZ3MgdGhlcmUuXG5cbk5vdywgYmVmb3JlIEkgc3RhcnQgd29ya2luZyB3aXRoIHRoaXMsIGl0IGlzIHdvcnRoIHF1aWNrbHkgZW5zdXJpbmcgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgT0suIE5vIHBvaW50IGJ1aWxkaW5nIHNvbWV0aGluZyBpZiBpdCBpcyBibG9ja2VkIGluIHNvbWUgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM4OjA0LjQ2OTY3MzcyMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NTU0NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9ODMxPWNvbmZpZyBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZy04MzMtXFxubW0vS2NvbmZpZzo4MzQ6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctODM1LVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg1Mj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODU3LVxcbm1tL0tjb25maWc6ODU4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg1OS1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2NC1cXG5tbS9LY29uZmlnOjg2NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxcbm1tL0tjb25maWctODY2LVxcdFxcdGJvb2wgXFxcIm1hZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg3My1cXG5tbS9LY29uZmlnOjg3NDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg3NS1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODgxPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04OTAtXFxubW0vS2NvbmZpZzo4OTE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTg5Mi1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTAwLVxcbm1tL0tjb25maWc6OTAxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTAyLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTA4LVxcbm1tL0tjb25maWc6OTA5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05MTAtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxNi1cXG5tbS9LY29uZmlnOjkxNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTkxOC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTkyNj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTM1LVxcbm1tL0tjb25maWc6OTM2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MzctXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0NC1cXG5tbS9LY29uZmlnOjk0NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTk0Ni1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Mi1cXG5tbS9LY29uZmlnOjk1MzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTU0LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjAtXFxubW0vS2NvbmZpZzo5NjE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05NjItXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozODowNC42MzcyMzM0MDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4Mzk0NTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9LY29uZmlnYCBjb25jZXJuaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGltZSB0byBkaXNzZWN0IGBtbS9LY29uZmlnYCBhbmQgemVybyBpbiBvbiB0aGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9ucy4gSSBhbHJlYWR5IGtub3cgdGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGVzcGVjaWFsbHkgb24gc3lzdGVtcyB3aXRoIHN1YnN0YW50aWFsIG1lbW9yeSBmb290cHJpbnRzLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgd2UncmUgbG9va2luZyBhdCB0aGUgY29yZSBzd2l0Y2hlcyB0aGF0IGdvdmVybiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmdW5kYW1lbnRhbCBtZW1vcnkgYWxsb2NhdGlvbiB1bml0LlxuXG5JJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBib29sYCBhbmQgYHRyaXN0YXRlYCBvcHRpb25zLCBhbG9uZyB3aXRoIHNvbWUgYWNjb21wYW55aW5nIGhlbHAgdGV4dCwgbmF0dXJhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmaXJzdC4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcsIGRpc2FibGluZywgb3IgbWFraW5nIGl0IG1vZHVsYXIuIEknbSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIGZlYXR1cmVzICptdXN0KiBiZSBlbmFibGVkIG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmU/IElzIHRoZXJlIGFuIGludGVyYWN0aW9uIHdpdGggTlVNQT8gV2hhdCBhYm91dCBkaWZmZXJlbnQgQ1BVIGFyY2hpdGVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGxhdGZvcm0gY29uc2lkZXJhdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZD9cblxuTW9yZSBzcGVjaWZpY2FsbHksIEknbSBhbnRpY2lwYXRpbmcgc29tZSBsZXZlbCBvZiBncmFudWxhcml0eSBoZXJlOiB0aGUgYWJpbGl0eSB0byBzZWxlY3QgdGhlICpwb2xpY3kqIHRoYXQgZ292ZXJucyBob3cgaHVnZXBhZ2VzIGFyZSBtYW5hZ2VkIOKAkyBlaXRoZXIgYWdncmVzc2l2ZWx5IGFsbG9jYXRpbmcgdGhlbSB1cCBmcm9udCBvciBkZWZlcnJpbmcgdG8gc21hbGxlciBwYWdlcyBpbml0aWFsbHksIGFuZCB0aGVuIGNvYWxlc2NpbmcgdGhlbSBpbnRvIGh1Z2VwYWdlcyBsYXRlci4gVGhpcyBjaG9pY2Ugc2lnbmlmaWNhbnRseSBpbXBhY3RzIG1lbW9yeSBmcmFnbWVudGF0aW9uLCBhbmQgdWx0aW1hdGVseSBoYXMgYSBtYXNzaXZlIGltcGFjdCBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgYSBkaXZlcnNlIHJhbmdlIG9mIHdvcmtsb2Fkcy4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIGlzIHRpZWQgdG8gdGhlIHBhZ2Ugc2l6ZSBzZXR0aW5ncy4gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3Igd2F5cyB0byBmdXJ0aGVyIG1hbmFnZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGZvciBhIHZhcmlldHkgb2YgdXNlIGNhc2VzLCBsaWtlIHdoZXRoZXIgb3Igbm90IGl0IHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIGNvbnRhaW5lcnMsIGFzIHRoYXQgaGFzIGEgaHVnZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuIEknbSBrZWVuIHRvIHNwb3QgYW55IHBlcmZvcm1hbmNlIHR1bmluZyBvcHRpb25zIGZvciB0aGlzIHNwZWNpZmljIGZlYXR1cmUgYXMgd2VsbC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgaGFwcGVuLlxuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYSBkZXZlbG9wZXIgaGFzIHRob3VnaHQgdGhyb3VnaCB0aGUgdHJhZGUtb2ZmcyBvZiB0aGlzIGZlYXR1cmUsIGhvdyB0aGV5J3ZlIHN0cnVjdHVyZWQgaXQsIGFuZCB1bHRpbWF0ZWx5LCB3aGV0aGVyIEkgY2FuIHNhZmVseSB1c2UgdGhpcyBmZWF0dXJlIHdpdGhpbiBteSBzcGVjaWZpYyBjb250ZXh0LiBJJ20gZXhwZWN0aW5nIGEgY2xlYXIgdmlldyBvZiBpdHMgYmVoYXZpb3IgdG8gb3B0aW1pemUgaXQgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozODoxMC4wMjExODg3MThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgzMDpcXHRcXG4gODMxOlxcdGNvbmZpZyBNTV9JRFxcbiA4MzI6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4MzM6XFx0XFxuIDgzNDpcXHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDgzNTpcXHRcXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbiA4MzY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gODM3OlxcdFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuIDgzODpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDgzOTpcXHRcXHRzZWxlY3QgTU1fSURcXG4gODQwOlxcdFxcdGhlbHBcXG4gODQxOlxcdFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbiA4NDI6XFx0XFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXFxuIDg0MzpcXHRcXHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxcbiA4NDQ6XFx0XFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxcbiA4NDU6XFx0XFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXFxuIDg0NjpcXHRcXHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cXG4gODQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMjozODoxMC4wMjQ1OTYyOTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0NDc0NTMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggSSB1bmRlcnN0YW5kIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGV4Y2x1ZGVzIGBQUkVFTVBUX1JUYC4gTm8gc3VycHJpc2VzIHRoZXJlLCB0aGF0J3MgZXhwZWN0ZWQgYmVoYXZpb3IuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYG1lbW9yeV9mYWlsdXJlYCBhbmQgYHNvZnRfb2ZmbGluZV9pbl91c2VfcGFnZWAuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgZm9saW8gbG9ja2luZyBiZWZvcmUgY2FsbGluZyBgbWluX29yZGVyX2Zvcl9zcGxpdGAgYW5kIGRpdGNoaW5nIGB0cnlfdG9fc3BsaXRfdGhwX3BhZ2VgIGluIGZhdm9yIG9mIGRpcmVjdGx5IGNhbGxpbmcgYHNwbGl0X2h1Z2VfcGFnZV90b19vcmRlcmAuIEhtbSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlZmFjdG9yaW5nLiBUaGF0IG1lYW5zIGl0IG5lZWRzIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydCB0byBlbnN1cmUgc3RhYmlsaXR5LlxuXG5NeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbjpcbiogICBgbWVtb3J5X2ZhaWx1cmVgXG4qICAgYHNvZnRfb2ZmbGluZV9wYWdlYFxuKiAgIGBtaW5fb3JkZXJfZm9yX3NwbGl0YFxuXG5Gb3IgZW5hYmxpbmcgY29uZmlncywgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgb2J2aW91cyBjaG9pY2VzLlxuXG5JIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgbWluX29yZGVyX2Zvcl9zcGxpdGAgaXMgZ2xvYmFsIGFuZCBhY2Nlc3NpYmxlIGZvciBmdXp6aW5nLiBZZXAsIGl0IGlzLiBHb29kLCB0aGF0J3MgaW1wb3J0YW50IGZvciB0aGUgZnV6emluZyBzdHJhdGVneS5cblxuTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IG90aGVyIHJlbGF0ZWQgY29uZmlncy4gYEhXUE9JU09OX0lOSkVDVGAgKmNvdWxkKiBiZSB1c2VmdWwsIGJ1dCBgTUFEVl9IV1BPSVNPTmAgc2hvdWxkIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFN0aWxsLCBmb3IgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZSwgSSdsbCBhZGQgYEhXUE9JU09OX0lOSkVDVGAgdG8gdGhlIGNvbmZpZyBsaXN0IGp1c3QgdG8gYmUgc2FmZS4gVGhhdCB3YXksIEkgY2FuIHRlc3QgYWxsIHJlbGF0ZWQgYXJlYXMgb2YgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjU2LCJPdXRwdXRUb2tlbnMiOjE0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEyOjM4OjE3LjA2OTM0NTU3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzgxOTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiLFxuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBhbmQgc29mdCBvZmZsaW5lIHBhdGhzIHRvIHByb3Blcmx5IGxvY2sgZm9saW9zIGJlZm9yZSBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSwgYW5kIHJlZmFjdG9ycyBUSFAgc3BsaXR0aW5nIGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3IgaGFuZGxpbmcgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJzb2Z0X29mZmxpbmVfcGFnZVwiLFxuICAgIFwibWluX29yZGVyX2Zvcl9zcGxpdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBhbmQgc29mdCBvZmZsaW5lIHBhdGhzIHRvIHByb3Blcmx5IGxvY2sgZm9saW9zIGJlZm9yZSBjYWxsaW5nIG1pbl9vcmRlcl9mb3Jfc3BsaXQoKSwgYW5kIHJlZmFjdG9ycyBUSFAgc3BsaXR0aW5nIGxvZ2ljLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZXJyb3IgaGFuZGxpbmcgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtYWR2aXNlKE1BRFZfU09GVF9PRkZMSU5FKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[1] Phase: Succeeded StartedAt: 2026-08-06 12:38:28 +0000 UTC FinishedAt: 2026-08-06 12:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 12:38:28 +0000 UTC FinishedAt: 2026-08-06 12:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2] Phase: Succeeded StartedAt: 2026-08-06 12:38:28 +0000 UTC FinishedAt: 2026-08-06 16:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 12:38:28 +0000 UTC FinishedAt: 2026-08-06 16:23:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 12:38:28 +0000 UTC FinishedAt: 2026-08-06 12:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 12:38:28 +0000 UTC FinishedAt: 2026-08-06 12:38:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc6tp6/series-workflowc6tp6-convert-artifact-2264798613/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 12:38:38 +0000 UTC FinishedAt: 2026-08-06 12:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 12:38:38 +0000 UTC FinishedAt: 2026-08-06 12:56:18 +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:*661d7604-38b1-4e65-8ecf-d14277e35673,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-workflowc6tp6/series-workflowc6tp6-convert-artifact-2264798613/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": "9a0d62e4-4677-4e1d-ae35-4b78c559b7fa", "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-workflowc6tp6/series-workflowc6tp6-build-action-3216928251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 12:38:38 +0000 UTC FinishedAt: 2026-08-06 12:56:08 +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:*661d7604-38b1-4e65-8ecf-d14277e35673,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-workflowc6tp6/series-workflowc6tp6-convert-artifact-2264798613/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": "9a0d62e4-4677-4e1d-ae35-4b78c559b7fa", "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-workflowc6tp6/series-workflowc6tp6-build-action-3216928251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 12:56:18 +0000 UTC FinishedAt: 2026-08-06 12:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 12:56:18 +0000 UTC FinishedAt: 2026-08-06 12:56:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 12:56:18 +0000 UTC FinishedAt: 2026-08-06 12:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 12:56:18 +0000 UTC FinishedAt: 2026-08-06 12:56:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc6tp6/series-workflowc6tp6-convert-artifact-3406437744/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 12:56:29 +0000 UTC FinishedAt: 2026-08-06 12:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 12:56:29 +0000 UTC FinishedAt: 2026-08-06 12:58:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a0d62e4-4677-4e1d-ae35-4b78c559b7fa,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-workflowc6tp6/series-workflowc6tp6-build-action-3216928251/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-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 12:58:35 +0000 UTC FinishedAt: 2026-08-06 12:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 12:58:35 +0000 UTC FinishedAt: 2026-08-06 12:58:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 12:58:35 +0000 UTC FinishedAt: 2026-08-06 13:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 12:58:35 +0000 UTC FinishedAt: 2026-08-06 13:14:37 +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:*661d7604-38b1-4e65-8ecf-d14277e35673,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-workflowc6tp6/series-workflowc6tp6-convert-artifact-3406437744/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": "5f3faafd-e89b-4eab-a0a6-31b70356a05c", "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-workflowc6tp6/series-workflowc6tp6-build-action-1536458348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 12:58:35 +0000 UTC FinishedAt: 2026-08-06 13:14:27 +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:*661d7604-38b1-4e65-8ecf-d14277e35673,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-workflowc6tp6/series-workflowc6tp6-convert-artifact-3406437744/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": "5f3faafd-e89b-4eab-a0a6-31b70356a05c", "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-workflowc6tp6/series-workflowc6tp6-build-action-1536458348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 13:14:37 +0000 UTC FinishedAt: 2026-08-06 13:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 13:14:37 +0000 UTC FinishedAt: 2026-08-06 13:14:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 13:14:37 +0000 UTC FinishedAt: 2026-08-06 13:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 13:14:37 +0000 UTC FinishedAt: 2026-08-06 13:16:32 +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:*5f3faafd-e89b-4eab-a0a6-31b70356a05c,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-workflowc6tp6/series-workflowc6tp6-build-action-1536458348/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-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 13:16:42 +0000 UTC FinishedAt: 2026-08-06 16:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 13:16:42 +0000 UTC FinishedAt: 2026-08-06 16:23:14 +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":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9a0d62e4-4677-4e1d-ae35-4b78c559b7fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5f3faafd-e89b-4eab-a0a6-31b70356a05c,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-workflowc6tp6/series-workflowc6tp6-build-action-3216928251/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-workflowc6tp6/series-workflowc6tp6-build-action-1536458348/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 13:16:42 +0000 UTC FinishedAt: 2026-08-06 13:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 13:16:42 +0000 UTC FinishedAt: 2026-08-06 13:16:47 +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":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc6tp6/series-workflowc6tp6-convert-artifact-406069993/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 13:16:42 +0000 UTC FinishedAt: 2026-08-06 13:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 13:16:42 +0000 UTC FinishedAt: 2026-08-06 13:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 13:16:42 +0000 UTC FinishedAt: 2026-08-06 13:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 13:16:52 +0000 UTC FinishedAt: 2026-08-06 16:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc6tp6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","soft_offline_page","min_order_for_split"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98a7867ce2341ede3ca82f4ef6868135c7ff53d1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","TRANSPARENT_HUGEPAGE","HWPOISON_INJECT"],"series_id":"34fef113-b20e-468d-b0d9-965e8eb944bc","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 13:16:52 +0000 UTC FinishedAt: 2026-08-06 16:23:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a0d62e4-4677-4e1d-ae35-4b78c559b7fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5f3faafd-e89b-4eab-a0a6-31b70356a05c,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-workflowc6tp6/series-workflowc6tp6-build-action-3216928251/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-workflowc6tp6/series-workflowc6tp6-build-action-1536458348/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-workflowc6tp6/series-workflowc6tp6-convert-artifact-406069993/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,}