Name: series-workflow2bjmp Phase: Succeeded StartedAt: 2026-08-14 03:34:38 +0000 UTC FinishedAt: 2026-08-14 07:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[0] Phase: Succeeded StartedAt: 2026-08-14 03:34:38 +0000 UTC FinishedAt: 2026-08-14 04:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 03:34:38 +0000 UTC FinishedAt: 2026-08-14 04:06:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2697ef8943c9985c14708a6429e21812693857b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2697ef8943c9985c14708a6429e21812693857b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "SWAP" ], "series_id": "4c0e9d87-9e74-4a23-9114-d856c3e6ebf9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_peak_show", "memory_peak_write", "swap_peak_show", "swap_peak_write" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7bWVtb3J5X3BlYWtfd3JpdGUmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2dyb3VwIHYyIG1lbW9yeSBjb250cm9sbGVyIGJ5IGFkZGluZyBsb2NrcyB0byBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfc2hvd2AsIGFuZCBmaXhpbmcgYSBidWcgaW4gYHBlYWtfd3JpdGVgIHdoaWNoIGlzIGNhbGxlZCBieSBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGJ5IHJlYWRpbmcvd3JpdGluZyBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBmaWxlcy4gVGhlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNWU3NmIyYzc2NTYwMWQ3YWU2OTdiZWJiNDFlODQ5NzNhMWNhYTY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDQ6MDQ6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00NzE0LDYgJiM0Mzs0NzE0LDcgQEAgc3RhdGljIGludCBtZW1vcnlfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNmKSk7XG4gXG4mIzQzO1x0Z3VhcmQoc3BpbmxvY2spKFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuIFx0cmV0dXJuIHBlYWtfc2hvdyhzZiwgdiwgXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5KTtcbiB9XG4gXG5AQCAtNDc0Myw3ICYjNDM7NDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB1c2FnZSwgb2xkX3dhdGVybWFyaztcbiBcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqcGVlcl9jdHg7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTtcbkBAIC00NzUxLDExICYjNDM7NDc1MiwxMiBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxuIFx0c3Bpbl9sb2NrKFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuIFxuIFx0dXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7XG4mIzQzO1x0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuIFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuLVx0XHRpZiAodXNhZ2UgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuLVx0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIHVzYWdlKTtcbiYjNDM7XHRcdGlmIChwZWVyX2N0eCAhPSBvZnAgXHUwMDI2XHUwMDI2IG9sZF93YXRlcm1hcmsgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuJiM0MztcdFx0XHRXUklURV9PTkNFKHBlZXJfY3R4LVx1MDAzZXZhbHVlLCBvbGRfd2F0ZXJtYXJrKTtcbiBcbiBcdC8qIGluaXRpYWwgd3JpdGUsIHJlZ2lzdGVyIHdhdGNoZXIgKi9cbiBcdGlmIChvZnAtXHUwMDNldmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpXG5AQCAtNTg1OSw2ICYjNDM7NTg2MSw3IEBAIHN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbiYjNDM7XHRndWFyZChzcGlubG9jaykoXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG4gXHRyZXR1cm4gcGVha19zaG93KHNmLCB2LCBcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7bWVtb3J5X3BlYWtfd3JpdGUmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ1ZTc2YjJjNzY1NjAxZDdhZTY5N2JlYmI0MWU4NDk3M2ExY2FhNjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwNDowNDoyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00NzE0LDYgJiM0Mzs0NzE0LDcgQEAgc3RhdGljIGludCBtZW1vcnlfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNmKSk7CiAKJiM0MzsJZ3VhcmQoc3BpbmxvY2spKCZhbXA7bWVtY2ctJmd0O3BlYWtzX2xvY2spOwogCXJldHVybiBwZWFrX3Nob3coc2YsIHYsICZhbXA7bWVtY2ctJmd0O21lbW9yeSk7CiB9CiAKQEAgLTQ3NDMsNyAmIzQzOzQ3NDQsNyBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAogCQkJICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYywKIAkJCSAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpCiB7Ci0JdW5zaWduZWQgbG9uZyB1c2FnZTsKJiM0MzsJdW5zaWduZWQgbG9uZyB1c2FnZSwgb2xkX3dhdGVybWFyazsKIAlzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKnBlZXJfY3R4OwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7CiAJc3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTsKQEAgLTQ3NTEsMTEgJiM0Mzs0NzUyLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJc3Bpbl9sb2NrKCZhbXA7bWVtY2ctJmd0O3BlYWtzX2xvY2spOwogCiAJdXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7CiYjNDM7CW9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtJmd0O2xvY2FsX3dhdGVybWFyayk7CiAJV1JJVEVfT05DRShwYy0mZ3Q7bG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlZXJfY3R4LCB3YXRjaGVycywgbGlzdCkKLQkJaWYgKHVzYWdlICZndDsgcGVlcl9jdHgtJmd0O3ZhbHVlKQotCQkJV1JJVEVfT05DRShwZWVyX2N0eC0mZ3Q7dmFsdWUsIHVzYWdlKTsKJiM0MzsJCWlmIChwZWVyX2N0eCAhPSBvZnAgJmFtcDsmYW1wOyBvbGRfd2F0ZXJtYXJrICZndDsgcGVlcl9jdHgtJmd0O3ZhbHVlKQomIzQzOwkJCVdSSVRFX09OQ0UocGVlcl9jdHgtJmd0O3ZhbHVlLCBvbGRfd2F0ZXJtYXJrKTsKIAogCS8qIGluaXRpYWwgd3JpdGUsIHJlZ2lzdGVyIHdhdGNoZXIgKi8KIAlpZiAob2ZwLSZndDt2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVCkKQEAgLTU4NTksNiAmIzQzOzU4NjEsNyBAQCBzdGF0aWMgaW50IHN3YXBfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNmKSk7CiAKJiM0MzsJZ3VhcmQoc3BpbmxvY2spKCZhbXA7bWVtY2ctJmd0O3BlYWtzX2xvY2spOwogCXJldHVybiBwZWFrX3Nob3coc2YsIHYsICZhbXA7bWVtY2ctJmd0O3N3YXApOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IE1lbW9yeSBDb250cm9sIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseS4gVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGUgYWRkaXRpb24gb2YgYGd1YXJkKHNwaW5sb2NrKSgmYW1wO21lbWNnLSZndDtwZWFrc19sb2NrKTtgIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBwcm90ZWN0aW5nIGFjY2VzcyB0byB0aGUgcGVhayBzdGF0aXN0aWNzIHdpdGggYSBzcGlubG9jaywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciBjb25jdXJyZW5jeS4gVGhleSYjMzk7cmUgYWxzbyBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBgb2xkX3dhdGVybWFya2AgYW5kIGBwZWVyX2N0eCAhPSBvZnBgIGluIGBwZWFrX3dyaXRlYC4gR290dGEgZGlnIGludG8gdGhhdCBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBpc3N1ZSwgYnV0IHRoZSBpbnRlbnQgc2VlbXMgdG8gYmUgdG8gY29ycmVjdCB0aGUgcGVhayB3cml0ZSBmdW5jdGlvbmFsaXR5LgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgZnVuY3Rpb25zIOKAkyBgbWVtb3J5X3BlYWtfc2hvd2AsIGBzd2FwX3BlYWtfc2hvd2AsIGFuZCBgcGVha193cml0ZWAg4oCTIGFyZSBldmVuIHJlYWNoYWJsZSwgeW91IGtub3c/IEl0JiMzOTtzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlIGNvZGUsIGFuZCBrbm93aW5nIHRoZSBhY3R1YWwgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgbWFrZSB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCBzbyBtdWNoIHNpbXBsZXIuIEFoLCByaWdodCwgdGhlc2UgYXJlIGNncm91cCB2MiBtZW1vcnkgY29udHJvbGxlciBmdW5jdGlvbnMg4oCTIHRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIGBtZW1vcnlfcGVha19zaG93YCBpcyByZXNwb25zaWJsZSBmb3Igc2hvd2luZyB0aGUgYG1lbW9yeS5wZWFrYCBmaWxlLCBhbmQgYHN3YXBfcGVha19zaG93YCBmb3IgdGhlIGBzd2FwLnBlYWtgIGZpbGUuIEFuZCBgcGVha193cml0ZWAgaGFuZGxlcyB0aGUgd3JpdGVzIHRvIHRob3NlIGZpbGVzLCBuYXR1cmFsbHkuCgpUaW1lIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgYG1lbWNvbnRyb2wuY2AuIEkgaGF2ZSB0byBiZSBzdXJlIGl0IGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5X3BlYWtfc2hvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDY5OD1zdGF0aWMgaW50IHBlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2LCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDcxMi1cbm1tL21lbWNvbnRyb2wuYzo0NzEzOnN0YXRpYyBpbnQgbWVtb3J5X3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxubW0vbWVtY29udHJvbC5jLTQ3MTQte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MDgzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDkzLVx0XHQucmVsZWFzZSA9IHBlYWtfcmVsZWFzZSxcbm1tL21lbWNvbnRyb2wuYzo1MDk0Olx0XHQuc2VxX3Nob3cgPSBtZW1vcnlfcGVha19zaG93LFxubW0vbWVtY29udHJvbC5jLTUwOTUtXHRcdC53cml0ZSA9IG1lbW9yeV9wZWFrX3dyaXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUga2V5IGhlcmUgaXMgYENPTkZJR19NRU1DR2AuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZCwgc28gaWYgYENPTkZJR19NRU1DR2AgaXMgZHJpdmluZyBzb21ldGhpbmcsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc2VlIGl0LiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbmRpY2F0aW9uIHRoZXJlIGlmIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2wubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcGVha193cml0ZWAgYW5kIENPTkZJR19NRU1DRyoqCgpSaWdodCwgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsZWFkaW5nIG1lIHRvIGJlbGlldmUgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjZ3JvdXBzLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUuIE5vdywgSSB3YW50IHRvIGRpdmUgaW50byB0aGUgYHBlYWtfd3JpdGVgIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIElzIHRoaXMgYSBsb2NhbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgc3BlY2lmaWMgZmlsZSwgb3IgaXMgaXQgZXhwb3NlZCBtb3JlIGJyb2FkbHk/IFVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IGFzc2Vzc2luZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gZ28gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVha193cml0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDcyOT1zdGF0aWMgdm9pZCBwZWFrX3JlbGVhc2Uoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NzQyLVxubW0vbWVtY29udHJvbC5jOjQ3NDM6c3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbm1tL21lbWNvbnRyb2wuYy00NzQ0LVx0XHRcdCAgbG9mZl90IG9mZiwgc3RydWN0IHBhZ2VfY291bnRlciAqcGMsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ3NzEtXG5tbS9tZW1jb250cm9sLmM6NDc3MjpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbm1tL21lbWNvbnRyb2wuYy00NzczLVx0XHRcdFx0IHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ3NzYtXG5tbS9tZW1jb250cm9sLmM6NDc3NzpcdHJldHVybiBwZWFrX3dyaXRlKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksXG5tbS9tZW1jb250cm9sLmMtNDc3OC1cdFx0XHQgIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9wZWFrcyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwODM9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUwOTQtXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9wZWFrX3Nob3csXG5tbS9tZW1jb250cm9sLmM6NTA5NTpcdFx0LndyaXRlID0gbWVtb3J5X3BlYWtfd3JpdGUsXG5tbS9tZW1jb250cm9sLmMtNTA5Ni1cdH0sXG4tLVxubW0vbWVtY29udHJvbC5jPTU4NjA9c3RhdGljIGludCBzd2FwX3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODY3LVxubW0vbWVtY29udHJvbC5jOjU4Njg6c3RhdGljIHNzaXplX3Qgc3dhcF9wZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxubW0vbWVtY29udHJvbC5jLTU4NjktXHRcdFx0ICAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NzItXG5tbS9tZW1jb250cm9sLmM6NTg3MzpcdHJldHVybiBwZWFrX3dyaXRlKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLFxubW0vbWVtY29udHJvbC5jLTU4NzQtXHRcdFx0ICBcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX3BlYWtzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTkzNz1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU5NjAtXHRcdC5zZXFfc2hvdyA9IHN3YXBfcGVha19zaG93LFxubW0vbWVtY29udHJvbC5jOjU5NjE6XHRcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcbm1tL21lbWNvbnRyb2wuYy01OTYyLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDZ3JvdXAgTWVtb3J5L1N3YXAgUGVhayBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBhbmQgc3dhcCBwZWFrIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNncm91cCBjb2RlLiBJbml0aWFsbHksIG15IHRob3VnaHQgd2FzLCAmIzM0O0htbSwgYG1lbW9yeV9wZWFrX3dyaXRlYCwgYG1lbW9yeV9wZWFrX3Nob3dgLCBgc3dhcF9wZWFrX3dyaXRlYCwgYW5kIGBzd2FwX3BlYWtfc2hvd2AgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcgaW4gbW9zdCBzY2VuYXJpb3MsIGluZGljYXRpbmcgdGhleSBtaWdodCBiZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGV5IGFyZSB1c2VkIGFzIGNhbGxiYWNrcyB3aXRoaW4gYGNmdHlwZWAsIHNvIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBjZ3JvdXBmcy4gVGhhdCYjMzk7cyB1bnVzdWFsIGFuZCBpbXBvcnRhbnQuJiMzNDsKCk15IGZpcnN0IGluc3RpbmN0IHdhcyB0byBzY2FuIGZvciBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMg4oCTIG1vcmUgcm9idXN0IGVudHJ5IHBvaW50cy4gVGhlIHByb21wdCBzdHJlc3NlcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMuIEJ1dCB0aGUgcHJvbXB0IGFsc28gaW5jbHVkZXMgdGhlIGNyaXRlcmlhIHRoYXQgZnVuY3Rpb25zIHdpdGggZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUgbm90IGlubGluZWQuCgpUaGVuIEkgcmVhbGl6ZWQsIGhvbGQgb24sIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIGBzdGF0aWNgLCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgKnRha2VuKiB3aXRoaW4gYGNmdHlwZWAgKGFzIGNhbGxiYWNrcyksIHRoZXkmIzM5O3JlICpub3QqIGJlaW5nIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGV5IGFyZSByZWFjaGFibGUgdmlhIHVzZXJzcGFjZS4gVGhleSBhcmUgbm90IGlubGluZWQhCgpUaGVyZWZvcmUsIEkgdGhpbmsgdGhlIG1vc3QgYXBwcm9wcmlhdGUgYWN0aW9uIGlzIHRvIGxpc3QgdGhlc2UgZm91ciBmdW5jdGlvbnM6IGBtZW1vcnlfcGVha193cml0ZWAsIGBtZW1vcnlfcGVha19zaG93YCwgYHN3YXBfcGVha193cml0ZWAsIGFuZCBgc3dhcF9wZWFrX3Nob3dgLgoKSSBhbHNvIGNoZWNrZWQgZm9yIGZ1bmN0aW9ucyBsaWtlIGBwZWFrX3dyaXRlYC4gSXQmIzM5O3Mgc3RhdGljLCBhbmQgaXRzIGFkZHJlc3MgKmlzbiYjMzk7dCogdGFrZW4sIHNvIGl0IGlzIHByb2JhYmx5IGlubGluZWQuCgpJdCBzZWVtcyBsaWtlIGBDT05GSUdfTUVNQ0dgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aGlzIGFyZWEuIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgSSBzdXNwZWN0IHRoYXQgaXMgYWxsIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgTWVtb3J5IENvbnRyb2xsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBrZXkgY29uZmlnIHZhcmlhYmxlIGhlcmUgaXMgYE1FTUNHYC4gTWFrZXMgc2Vuc2UsIGNvbnNpZGVyaW5nIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIGluIGBwZWFrX3dyaXRlYCB3aGlsZSBzaW11bHRhbmVvdXNseSBhZGRpbmcgbG9ja3MgdG8gdGhlIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCBmdW5jdGlvbnMgd2l0aGluIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgYmVpbmcgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCBjZ3JvdXBmcyBieSBpbnRlcmFjdGluZyB3aXRoIHRoZSBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBmaWxlcywgZGlyZWN0bHkgaW1wYWN0IHRoZSBtZW1vcnkgY29udHJvbGxlciYjMzk7cyBmdW5jdGlvbmFsaXR5LiBUaGF0IHNjcmVhbXMgJiMzNDtmdXp6aW5nIHRhcmdldCYjMzQ7IHRvIG1lLiBBbnkgY2hhbmdlIGFmZmVjdGluZyB1c2VyLWFjY2Vzc2libGUgaW50ZXJmYWNlcywgZXNwZWNpYWxseSBvbmVzIHJlbGF0ZWQgdG8gcGVhayBtZW1vcnkgdXNhZ2UsIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSBzdGFiaWxpdHkgYW5kIHByZXZlbnQgcG90ZW50aWFsIGV4cGxvaXRzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gZm9jdXMgb246IGBtZW1vcnlfcGVha193cml0ZWAsIGBtZW1vcnlfcGVha19zaG93YCwgYHN3YXBfcGVha193cml0ZWAsIGFuZCBgc3dhcF9wZWFrX3Nob3dgLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgaWYgYHN3YXBfcGVha19zaG93YCBpcyBhbHNvIGNvbmRpdGlvbmFsIG9uIG90aGVyIGNvbmZpZ3MsIHN1Y2ggYXMgYENPTkZJR19TV0FQYC4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQgbm90IHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2ZpbGVzXFxbXFxdJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01OTIzPXN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTU5MzYtXG5tbS9tZW1jb250cm9sLmM6NTkzNzpzdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG5tbS9tZW1jb250cm9sLmMtNTkzOC1cdHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjEzMj1zdGF0aWMgc3NpemVfdCB6c3dhcF93cml0ZWJhY2tfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy02MTQ4LVxubW0vbWVtY29udHJvbC5jOjYxNDk6c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcbm1tL21lbWNvbnRyb2wuYy02MTUwLVx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTkwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHN3YXBfZmlsZXNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIHVzYWdlIG9mIHRoaXMgYHN3YXBfZmlsZXNgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIGxhcmdlciBjb2RlYmFzZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIHNlYXJjaCBmb3IgYWxsIHRoZSBpbnN0YW5jZXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyBpdHMgcm9sZSBhbmQgZGVwZW5kZW5jaWVzLiBPbmNlIEkmIzM5O3ZlIGdvdCB0aGF0IG92ZXJ2aWV3LCBJIGNhbiBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGxzIHRoZW1zZWx2ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbnRleHQ7IHdoYXQgZGF0YSBpcyBiZWluZyBwYXNzZWQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGNsYXNzZXMgYXJlIGludGVyYWN0aW5nLCBhbmQgd2hhdCYjMzk7cyB0aGUgaW50ZW5kZWQgb3V0Y29tZSBvZiB0aGlzICYjMzQ7c3dhcHBpbmcmIzM0Oy4gSSBleHBlY3QgdGhhdCB0aGUgY2FsbGluZyBjb2RlIHdpbGwgbGlrZWx5IHByb3ZpZGUgY2x1ZXMgYWJvdXQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYWNoaWV2ZS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBtYWtpbmcgaXQgc2FmZSB0byBtb2RpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfZmlsZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU5MjM9c3RhdGljIGludCBzd2FwX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS9tZW1jb250cm9sLmMtNTkzNi1cbm1tL21lbWNvbnRyb2wuYzo1OTM3OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbm1tL21lbWNvbnRyb2wuYy01OTM4LVx0e1xuLS1cbm1tL21lbWNvbnRyb2wuYz02MTMyPXN0YXRpYyBzc2l6ZV90IHpzd2FwX3dyaXRlYmFja193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTYxNDgtXG5tbS9tZW1jb250cm9sLmM6NjE0OTpzdGF0aWMgc3RydWN0IGNmdHlwZSB6c3dhcF9maWxlc1tdID0ge1xubW0vbWVtY29udHJvbC5jLTYxNTAtXHR7XG4tLVxubW0vbWVtY29udHJvbC5jPTYxNzA9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjE3NC1cbm1tL21lbWNvbnRyb2wuYzo2MTc1Olx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xubW0vbWVtY29udHJvbC5jLTYxNzYtI2lmZGVmIENPTkZJR19NRU1DR19WMVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MTc5LSNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYzo2MTgwOlx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbm1tL21lbWNvbnRyb2wuYy02MTgxLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIFN3YXAgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IENncm91cCBTd2FwIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBgbWVtX2Nncm91cF9zd2FwX2luaXRgIGZ1bmN0aW9uIGlzIGV2ZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UgZm9yIHByb3BlciBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBzd2FwIHNwYWNlIG1hbmFnZW1lbnQsIGJ1dCB3aXRob3V0IGBDT05GSUdfU1dBUGAgYmVpbmcgZW5hYmxlZCwgdGhlcmUmIzM5O3Mgbm8gd2F5IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGF2YWlsYWJsZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAgZnVuY3Rpb24gaXMgY29udGluZ2VudCB1cG9uIGEgcHJvcGVyIHN3YXAgY29uZmlndXJhdGlvbi4gSW4gb3JkZXIgdG8gZnVuY3Rpb24sIGl0IG5lZWRzIGBDT05GSUdfU1dBUGAgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5IGJlZm9yZSBJIGxvb2sgYXQgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9zd2FwX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTYxNDk9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjE2OS1cbm1tL21lbWNvbnRyb2wuYzo2MTcwOnN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG5tbS9tZW1jb250cm9sLmMtNjE3MS17XG4tLVxubW0vbWVtY29udHJvbC5jLTYxODMtfVxubW0vbWVtY29udHJvbC5jOjYxODQ6c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcbm1tL21lbWNvbnRyb2wuYy02MTg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQ5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb246IEEgUm91dGluZSBEaWFnbm9zdGljKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgY2hlY2suIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBndWFyZGVkIGJ5IHRoZSBgQ09ORklHX1NXQVBgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLCBlc3BlY2lhbGx5IGluIGEgY29kZWJhc2Ugd2hlcmUgZmVhdHVyZXMgY2FuIGJlIHNlbGVjdGl2ZWx5IGVuYWJsZWQgYW5kIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4gSXQmIzM5O3MgYWxtb3N0IHNlY29uZCBuYXR1cmUg4oCTIGEgcXVpY2sgbWVudGFsIHNjYW4gdG8gZW5zdXJlIHRoZSBzd2FwIGZ1bmN0aW9uYWxpdHkgaXNuJiMzOTt0IGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvciBhcHBsaWNhdGlvbiB1bm5lY2Vzc2FyaWx5IGlmIHRoZSBzd2FwIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gV2UgZGVmaW5pdGVseSBkb24mIzM5O3Qgd2FudCBhbnkgc3VycHJpc2VzIGxhdGVyLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIE5vIHN1cnByaXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MDYtXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjQwNzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy00MDgtXHROUl9TV0FQQ0FDSEUsXG4tLVxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjEwLVx0UEdMQVpZRlJFRUQsXG5tbS9tZW1jb250cm9sLmM6NjExOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTYxMi1cdFNXUElOX1pFUk8sXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYwOS1cdHsgXCYjMzQ7ZmlsZV93cml0ZWJhY2tcJiMzNDssXHRcdE5SX1dSSVRFQkFDS1x0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTYxMDojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy0xNjExLVx0eyBcJiMzNDtzd2FwY2FjaGVkXCYjMzQ7LFx0XHRcdE5SX1NXQVBDQUNIRVx0XHRcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jPTU2ODQ9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcxOS1cbm1tL21lbWNvbnRyb2wuYzo1NzIwOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTU3MjEtLyoqXG4tLVxubW0vbWVtY29udHJvbC5jPTYxODQ9c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcbm1tL21lbWNvbnRyb2wuYy02MTg1LVxubW0vbWVtY29udHJvbC5jOjYxODY6I2VuZGlmIC8qIENPTkZJR19TV0FQICovXG5tbS9tZW1jb250cm9sLmMtNjE4Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gU3dhcCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCAqYG1tL21lbWNvbnRyb2wuYzo2MTg2OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL2AqIOKAkyB0aGF04oCZcyBhIGZhbWlsaWFyIG1hcmtlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4dGVudCBvZiB0aGUgY29kZSBjb250cm9sbGVkIGJ5IGBDT05GSUdfU1dBUGAgaW4gdGhpcyBmaWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoYXQgYCNpZmRlZiBDT05GSUdfU1dBUGAgYmxvY2sgKmJlZ2lucyouIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGF0IHN0YXJ0IHBvaW50LiBFc3NlbnRpYWxseSBJIHdhbnQgdG8ga25vdyB3aGF0IGNvZGUgaXMgY29uZGl0aW9uYWwgb24gc3dhcCBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3MTA6XHRcdG1lbWNnX3NpemUgPSBzdHJ1Y3Rfc2l6ZV90KHN0cnVjdCBtZW1fY2dyb3VwLCBub2RlaW5mbywgbnJfbm9kZV9pZHMpO1xuNTcxMTpcdFx0bWVtY2dfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7bWVtX2Nncm91cFwmIzM0OywgbWVtY2dfc2l6ZSwgMCxcbjU3MTI6XHRcdFx0XHRcdFx0IFNMQUJfUEFOSUMgfCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpO1xuNTcxMzpcdFxuNTcxNDpcdFx0bWVtY2dfcG5fY2FjaGVwID0gS01FTV9DQUNIRShtZW1fY2dyb3VwX3Blcl9ub2RlLFxuNTcxNTpcdFx0XHRcdFx0ICAgICBTTEFCX1BBTklDIHwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbjU3MTY6XHRcbjU3MTc6XHRcdHJldHVybiAwO1xuNTcxODpcdH1cbjU3MTk6XHRcbjU3MjA6XHQjaWZkZWYgQ09ORklHX1NXQVBcbjU3MjE6XHQvKipcbjU3MjI6XHQgKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cbjU3MjM6XHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbjU3MjQ6XHQgKlxuNTcyNTpcdCAqIFRyeSB0byBjaGFyZ2UgQGZvbGlvJiMzOTtzIG1lbWNnIGZvciB0aGUgc3dhcCBzcGFjZSBhdCBmb2xpby1cdTAwM2Vzd2FwLlxuNTcyNjpcdCAqXG41NzI3Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cbjU3Mjg6XHQgKi9cbjU3Mjk6XHRpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuNTczMDpcdHtcbjU3MzE6XHRcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbjU3MzI6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG41NzMzOlx0XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuNTczNDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNTczNTpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuNTczNjpcdFxuNTczNzpcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjU3Mzg6XHRcdFx0cmV0dXJuIDA7XG41NzM5Olx0XG41NzQwOlx0XHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcbjU3NDE6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghb2JqY2csIGZvbGlvKTtcbjU3NDI6XHRcdGlmICghb2JqY2cpXG41NzQzOlx0XHRcdHJldHVybiAwO1xuNTc0NDpcdFxuNTc0NTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuNTc0NjpcdFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbjU3NDc6XHRcdGlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG41NzQ4Olx0XHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcbjU3NDk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG41NzUwOlx0XHRcdHJldHVybiAwO1xuNTc1MTpcdFx0fVxuNTc1MjpcdFxuNTc1MzpcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpO1xuNTc1NDpcdFx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXG41NzU1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjU3NTY6XHRcbjU3NTc6XHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbjU3NTg6XHRcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG41NzU5Olx0XHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuNTc2MDpcdFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG41NzYxOlx0XHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbjU3NjI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG41NzYzOlx0XHR9XG41NzY0Olx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcbjU3NjU6XHRcbjU3NjY6XHRcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG41NzY3Olx0XHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9wYWdlcyxcbjU3Njg6XHRcdFx0XHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xuNTc2OTpcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG41NzcwOlx0XG41NzcxOlx0XHRyZXR1cm4gMDtcbjU3NzI6XHR9XG41NzczOlx0XG41Nzc0Olx0LyoqXG41Nzc1Olx0ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXG41Nzc2Olx0ICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2VcbjU3Nzc6XHQgKiBAbnJfcGFnZXM6IHRoZSBhbW91bnQgb2Ygc3dhcCBzcGFjZSB0byB1bmNoYXJnZVxuNTc3ODpcdCAqL1xuNTc3OTpcdHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjU3ODA6XHR7XG41NzgxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41NzgyOlx0XG41NzgzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG41Nzg0Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbjU3ODU6XHRcdGlmIChtZW1jZykge1xuNTc4NjpcdFx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbjU3ODc6XHRcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuNTc4ODpcdFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG41Nzg5Olx0XHRcdFx0ZWxzZVxuNTc5MDpcdFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbjU3OTE6XHRcdFx0fVxuNTc5MjpcdFx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG41NzkzOlx0XHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbjU3OTQ6XHRcdH1cbjU3OTU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNTc5NjpcdH1cbjU3OTc6XHRcbjU3OTg6XHRsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuNTc5OTpcdHtcbjU4MDA6XHRcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG41ODAxOlx0XG41ODAyOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbjU4MDM6XHRcdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG41ODA0Olx0XHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuNTgwNTpcdFx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbjU4MDY6XHRcdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuNTgwNzpcdFx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuNTgwODpcdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG41ODA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDUzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9ucy4KCioqQW5hbHl6aW5nIE1lbW9yeSBQZWFrIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIGBzd2FwX3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfd3JpdGVgIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBnb3Zlcm5lZCBieSB0aGUgYENPTkZJR19TV0FQYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZXkgYXJlIHJlbGF0ZWQgdG8gc3dhcCBtZW1vcnksIGFmdGVyIGFsbC4gQnV0LCBJJiMzOTttIG5vdyBjdXJpb3VzIGFib3V0IHRoZSBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBtZW1vcnlfcGVha193cml0ZWAgZnVuY3Rpb25zLiBUaGUgZmFjdCB0aGF0IHRoZXkgKmFyZW4mIzM5O3QqIHRpZWQgdG8gYENPTkZJR19TV0FQYCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZXNlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVpciBpbmNsdXNpb24vZXhjbHVzaW9uIGZyb20gYnVpbGQgY29uZmlndXJhdGlvbnMgaXMgbWFuYWdlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXkmIzM5O3JlIGF2YWlsYWJsZSwgc2luY2UgdGhleSYjMzk7cmUgY2xlYXJseSBub3QgZGlyZWN0bHkgbGlua2VkIHRvIHN3YXAgbWVtb3J5IGluIHRoZSBzYW1lIHdheS4gV2hhdCBkcml2ZXMgdGhlaXIgZW5hYmxlbWVudD8gTGV0JiMzOTtzIGNoZWNrIHRob3NlIGZ1bmN0aW9ucyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDcwMDpcdFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKHNmLVx1MDAzZXByaXZhdGUpO1xuNDcwMTpcdFx0dTY0IGZkX3BlYWsgPSBSRUFEX09OQ0Uob2ZwLVx1MDAzZXZhbHVlKSwgcGVhaztcbjQ3MDI6XHRcbjQ3MDM6XHRcdC8qIFVzZXIgd2FudHMgZ2xvYmFsIG9yIGxvY2FsIHBlYWs/ICovXG40NzA0Olx0XHRpZiAoZmRfcGVhayA9PSBPRlBfUEVBS19VTlNFVClcbjQ3MDU6XHRcdFx0cGVhayA9IHBjLVx1MDAzZXdhdGVybWFyaztcbjQ3MDY6XHRcdGVsc2VcbjQ3MDc6XHRcdFx0cGVhayA9IG1heChmZF9wZWFrLCBSRUFEX09OQ0UocGMtXHUwMDNlbG9jYWxfd2F0ZXJtYXJrKSk7XG40NzA4Olx0XG40NzA5Olx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslbGx1XFxuXCYjMzQ7LCBwZWFrICogUEFHRV9TSVpFKTtcbjQ3MTA6XHRcdHJldHVybiAwO1xuNDcxMTpcdH1cbjQ3MTI6XHRcbjQ3MTM6XHRzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbjQ3MTQ6XHR7XG40NzE1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbjQ3MTY6XHRcbjQ3MTc6XHRcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbjQ3MTg6XHRcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG40NzE5Olx0fVxuNDcyMDpcdFxuNDcyMTpcdHN0YXRpYyBpbnQgcGVha19vcGVuKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZilcbjQ3MjI6XHR7XG40NzIzOlx0XHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuNDcyNDpcdFxuNDcyNTpcdFx0b2ZwLVx1MDAzZXZhbHVlID0gT0ZQX1BFQUtfVU5TRVQ7XG40NzI2Olx0XHRyZXR1cm4gMDtcbjQ3Mjc6XHR9XG40NzI4Olx0XG40NzI5Olx0c3RhdGljIHZvaWQgcGVha19yZWxlYXNlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZilcbjQ3MzA6XHR7XG40NzMxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xuNDczMjpcdFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTtcbjQ3MzM6XHRcbjQ3MzQ6XHRcdGlmIChvZnAtXHUwMDNldmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpIHtcbjQ3MzU6XHRcdFx0LyogZmFzdCBwYXRoIChubyB3cml0ZXMgb24gdGhpcyBmZCkgKi9cbjQ3MzY6XHRcdFx0cmV0dXJuO1xuNDczNzpcdFx0fVxuNDczODpcdFx0c3Bpbl9sb2NrKFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuNDczOTpcdFx0bGlzdF9kZWwoXHUwMDI2b2ZwLVx1MDAzZWxpc3QpO1xuNDc0MDpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG40NzQxOlx0fVxuNDc0MjpcdFxuNDc0MzpcdHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG40NzQ0Olx0XHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbjQ3NDU6XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuNDc0NjpcdHtcbjQ3NDc6XHRcdHVuc2lnbmVkIGxvbmcgdXNhZ2UsIG9sZF93YXRlcm1hcms7XG40NzQ4Olx0XHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKnBlZXJfY3R4O1xuNDc0OTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbjQ3NTA6XHRcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqb2ZwID0gb2ZfcGVhayhvZik7XG40NzUxOlx0XG40NzUyOlx0XHRzcGluX2xvY2soXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG40NzUzOlx0XG40NzU0Olx0XHR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBjKTtcbjQ3NTU6XHRcdG9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtXHUwMDNlbG9jYWxfd2F0ZXJtYXJrKTtcbjQ3NTY6XHRcdFdSSVRFX09OQ0UocGMtXHUwMDNlbG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7XG40NzU3Olx0XG40NzU4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlZXJfY3R4LCB3YXRjaGVycywgbGlzdClcbjQ3NTk6XHRcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG40NzYwOlx0XHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgb2xkX3dhdGVybWFyayk7XG40NzYxOlx0XG40NzYyOlx0XHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXG40NzYzOlx0XHRpZiAob2ZwLVx1MDAzZXZhbHVlID09IE9GUF9QRUFLX1VOU0VUKVxuNDc2NDpcdFx0XHRsaXN0X2FkZChcdTAwMjZvZnAtXHUwMDNlbGlzdCwgd2F0Y2hlcnMpO1xuNDc2NTpcdFxuNDc2NjpcdFx0V1JJVEVfT05DRShvZnAtXHUwMDNldmFsdWUsIHVzYWdlKTtcbjQ3Njc6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuNDc2ODpcdFxuNDc2OTpcdFx0cmV0dXJuIG5ieXRlcztcbjQ3NzA6XHR9XG40NzcxOlx0XG40NzcyOlx0c3RhdGljIHNzaXplX3QgbWVtb3J5X3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG40NzczOlx0XHRcdFx0XHQgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbjQ3NzQ6XHR7XG40Nzc1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xuNDc3NjpcdFxuNDc3NzpcdFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSxcbjQ3Nzg6XHRcdFx0XHQgIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9wZWFrcyk7XG40Nzc5Olx0fVxuNDc4MDpcdFxuNDc4MTpcdCN1bmRlZiBPRlBfUEVBS19VTlNFVFxuNDc4MjpcdFxuNDc4MzpcdHN0YXRpYyBpbnQgbWVtb3J5X21pbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbjQ3ODQ6XHR7XG40Nzg1Olx0XHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLFxuNDc4NjpcdFx0XHRSRUFEX09OQ0UobWVtX2Nncm91cF9mcm9tX3NlcShtKS1cdTAwM2VtZW1vcnkubWluKSk7XG40Nzg3Olx0fVxuNDc4ODpcdFxuNDc4OTpcdHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9taW5fd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuNDc5MDpcdFx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuNDc5MTpcdHtcbjQ3OTI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG40NzkzOlx0XHR1bnNpZ25lZCBsb25nIG1pbjtcbjQ3OTQ6XHRcdGludCBlcnI7XG40Nzk1Olx0XG40Nzk2Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNDc5NzpcdFx0ZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgXCYjMzQ7bWF4XCYjMzQ7LCBcdTAwMjZtaW4pO1xuNDc5ODpcdFx0aWYgKGVycilcbjQ3OTk6XHRcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMzkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgU3dhcCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIGFib3V0IGBDT05GSUdfU1dBUGAgYmVpbmcgYWN0aXZlIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBzaGlmdHMgdG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBNRU1DR2AgYW5kIGBTV0FQYCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQ7IEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBtaW5pbWFsIHNldCBvZiBkZXBlbmRlbmNpZXMuIFRoZSBrZXkgaGVyZSwgb2YgY291cnNlLCBpcyB0aGF0IEkmIzM5O20gY29uc2lkZXJpbmcgd2hhdCYjMzk7cyAqbmVlZGVkKiB0byBnZXQgY2VydGFpbiBmdW5jdGlvbmFsaXR5IHdvcmtpbmcuCgpBaCwgcmlnaHQg4oCTIHRoZSBpbXBvcnRhbnQgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBvciBub3QgYFNXQVBgIGlzIGV2ZW4gYSAqY29uZmlndXJhdGlvbiBvcHRpb24qIGF0IGFsbC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBleHBvc2VkIGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBlc3BlY2lhbGx5IHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIHRlc3QgYHN3YXBfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha193cml0ZWAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24uIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5IHRvIGF2b2lkIGFueSB3YXN0ZWQgZWZmb3J0IGNoYXNpbmcgZ2hvc3RzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGJ1aWxkIHN5c3RlbSB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL21pcHMvS2NvbmZpZz0xMjYyPWNvbmZpZyBNSVBTX1NQUkFNXG4tLVxuYXJjaC9taXBzL0tjb25maWctMTI2NC1cbmFyY2gvbWlwcy9LY29uZmlnOjEyNjU6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjYtXHRib29sXG4tLVxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxuLS1cbmFyY2gvc2gvS2NvbmZpZy0xMjgtXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL3NoL0tjb25maWctMTMwLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgU3lzdGVtIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgYFNXQVBgIGNvbmZpZ3VyYXRpb24g4oCTIHllcCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBubyBzdXJwcmlzZXMgdGhlcmUuIE15IG5leHQgbW92ZSBpcyB0byBxdWlja2x5IGFzc2VzcyBwb3RlbnRpYWwgaW50ZXJkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSB3aXRoIHJlZ2FyZHMgdG8gYE1FTUNHYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGlmIG1lbW9yeSBjZ3JvdXBzIGhhdmUgYW55IGhhcmQgcmVxdWlyZW1lbnRzIHRoYXQgYFNXQVBgIG1pZ2h0IGltcGFjdCBvciByZWx5IG9uLiBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzd2FwIGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGlzb2xhdGlvbiBhbmQgY29udHJvbCBwcm92aWRlZCBieSBtZW1vcnkgY2dyb3Vwcy4gQW55IGRlZXBlciBjb25uZWN0aW9ucyBoZXJlIHdpbGwgc3Ryb25nbHkgaW5mb3JtIGhvdyBJIG1hbmFnZSB0aGUgbWVtb3J5IHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjY2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZTogTUVNQ0cmIzM5O3MgUG9zaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgY29udHJvbCBncm91cHMsIG9yIGBNRU1DR2AsIGFuZCB3aGVyZSB0aGV5IGZpdCBpbnRvIHRoZSBiaWdnZXIga2VybmVsIHBpY3R1cmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnRpbWF0ZWx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdoZW4gbmF2aWdhdGluZyB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gbGFieXJpbnRoLCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgaW5pdC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgY29uZmlnIE1FTUNHYCB3aWxsIGJlIHRoZSBrZXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBJIGFudGljaXBhdGUgdGhlcmUgbWlnaHQgYmUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgYE1FTUNHYCBzdWJzeXN0ZW0gdGhhdCBJJiMzOTtsbCBuZWVkIHRvIGNoYXNlIGRvd24gb25jZSBJJiMzOTt2ZSBnb3QgdGhlIGxheSBvZiB0aGUgbGFuZCBmcm9tIHRoaXMgaW5pdGlhbCBLY29uZmlnIHNlY3Rpb24uIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGBNRU1DR2AgaXMgZXhwb3NlZCwgaG93IHRoZSB2YXJpb3VzIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCB3aGF0IG90aGVyIGNvbmZpZyBvcHRpb25zIHdpbGwgYmUgYWZmZWN0ZWQgaW4gcmVsYXRpb24gdG8gaXQuIFRpbWUgdG8gZGlnIGluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcwOlx0XHRoZWxwXG4xMDcxOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFwmIzM0O2Zhdm9yZHlubW9kc1wmIzM0OyBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxuMTA3MjpcdFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXG4xMDczOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA3NDpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBzdWJqZWN0IG1hdHRlciBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYSBDZ3JvdXAgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyB0aGluZywgYW5kIGl0JiMzOTtzIGxvY2F0ZWQgd2l0aGluIHRoZSBDZ3JvdXAgbWVudSwgYnV0IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQgaXQgZGVwZW5kcyBvbi4gTXkgZ3V0IHRlbGxzIG1lIGl0ICpzaG91bGRuJiMzOTt0KiBuZWVkIGFueXRoaW5nIHNwZWNpZmljIG91dHNpZGUgb2YgdGhlIGdlbmVyYWwgQ2dyb3VwIGZyYW1ld29yaywgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgd2hldGhlciBvciBub3QgdGhlIGBDR1JPVVBTYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O2xsIGNoZWNrIHRoYXQgZmlyc3QsIGFzIGl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBkZXBlbmRlbmN5LiBJdCYjMzk7cyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwIGluIHRoaXMgdHJvdWJsZXNob290aW5nIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0dST1VQUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA0Nj1jb25maWcgU0xBQl9PQkpfRVhUXG4tLVxuaW5pdC9LY29uZmlnLTEwNDgtXG5pbml0L0tjb25maWc6MTA0OTptZW51Y29uZmlnIENHUk9VUFNcbmluaXQvS2NvbmZpZy0xMDUwLVx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODMKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYENHUk9VUFNgIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBgQ0dST1VQU2AgaXMgZGVmaW5pdGVseSB0aGUgdG9wLWxldmVsIG1lbnVjb25maWcsIHRoZSBwYXJlbnQuIFdpdGhpbiB0aGF0LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBNRU1DR2AgYW5kIGBTV0FQYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtcyB0byBiZSBhcm91bmQgYG1lbW9yeV9wZWFrX3Nob3dgLCBgbWVtb3J5X3BlYWtfd3JpdGVgLCBgc3dhcF9wZWFrX3Nob3dgLCBhbmQgYHN3YXBfcGVha193cml0ZWAuIFdhaXQgYSBtaW51dGUsIGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgIGRvbiYjMzk7dCBzZWVtIHRvIGJlIGRpcmVjdGx5IG1vZGlmaWVkIGluIHRoZW1zZWx2ZXMsIGJ1dCB0aGV5IGNhbGwgYHBlYWtfd3JpdGVgIHdoaWNoICppcyogbW9kaWZpZWQuIFRoaXMgY2hhbmdlcyB0aGluZ3Mgc29tZXdoYXQuIFdlIGhhdmUgdGhlc2UgZnVuY3Rpb25zIHRvIGNvbnNpZGVyOgoKKiAgIGBtZW1vcnlfcGVha19zaG93YAoqICAgYG1lbW9yeV9wZWFrX3dyaXRlYCAoYW5kIGl0cyBkZXBlbmRlbmN5IG9uIGBwZWFrX3dyaXRlYCkKKiAgIGBzd2FwX3BlYWtfc2hvd2AKKiAgIGBzd2FwX3BlYWtfd3JpdGVgIChhbmQgaXRzIGRlcGVuZGVuY3kgb24gYHBlYWtfd3JpdGVgKQoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbWVtb3J5X3BlYWtfd3JpdGVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBmdW5jdGlvbiBuYW1lLiBHb29kLCBpdCBpcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgbGlua2VkIHRvIHRoaXMgY2hhbmdlLiBBaGEsIGBwZWFrX3dyaXRlYCBpcyBtYXJrZWQgYXMgc3RhdGljLCBtZWFuaW5nIGl0IG1pZ2h0IGJlIGlubGluZWQuIEJ1dCBzaW5jZSBgbWVtb3J5X3BlYWtfd3JpdGVgIChhbmQgYHN3YXBfcGVha193cml0ZWApIGV4cGxpY2l0bHkgY2FsbCBpdCwgZnV6emluZyBlaXRoZXIgb2YgdGhvc2Ugd2lsbCBlZmZlY3RpdmVseSBmdXp6IGBwZWFrX3dyaXRlYCBhcyB3ZWxsLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKT2theSwgdGhhdCYjMzk7cyBldmVyeXRoaW5nLiBUaW1lIHRvIHNldCB1cCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7bWVtb3J5X3BlYWtfd3JpdGUmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X3BlYWtfc2hvdyYjMzQ7LAogICAgJiMzNDttZW1vcnlfcGVha193cml0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3BlYWtfc2hvdyYjMzQ7LAogICAgJiMzNDtzd2FwX3BlYWtfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNncm91cCB2MiBtZW1vcnkgY29udHJvbGxlciBieSBhZGRpbmcgbG9ja3MgdG8gYG1lbW9yeV9wZWFrX3Nob3dgIGFuZCBgc3dhcF9wZWFrX3Nob3dgLCBhbmQgZml4aW5nIGEgYnVnIGluIGBwZWFrX3dyaXRlYCB3aGljaCBpcyBjYWxsZWQgYnkgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcyBieSByZWFkaW5nL3dyaXRpbmcgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgZmlsZXMuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbG9ja2luZyB0byBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfc2hvd2AgdXNpbmcgYGd1YXJkKHNwaW5sb2NrKWAsIGFuZCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHBlYWtfd3JpdGVgIHRvIHVzZSB0aGUgb2xkIHdhdGVybWFyayB2YWx1ZSB3aGVuIHVwZGF0aW5nIHBlZXIgY29udGV4dHMuIEFsbCB2YXJpYWJsZXMgaW50cm9kdWNlZCAoYG9sZF93YXRlcm1hcmtgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGFuZCBsb2dpYyBpc3N1ZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDVlNzZiMmM3NjU2MDFkN2FlNjk3YmViYjQxZTg0OTczYTFjYWE2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDA0OjA0OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDE3ZGExZjQzYjdkM2IuLjU5MzIwNDZjNjM3ZGMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTQ3MTQsNiAmIzQzOzQ3MTQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTsKIAomIzQzOwlndWFyZChzcGlubG9jaykoJmFtcDttZW1jZy0mZ3Q7cGVha3NfbG9jayk7CiAJcmV0dXJuIHBlYWtfc2hvdyhzZiwgdiwgJmFtcDttZW1jZy0mZ3Q7bWVtb3J5KTsKIH0KIApAQCAtNDc0Myw3ICYjNDM7NDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJCQkgIGxvZmZfdCBvZmYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjLAogCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICp3YXRjaGVycykKIHsKLQl1bnNpZ25lZCBsb25nIHVzYWdlOwomIzQzOwl1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrOwogCXN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqcGVlcl9jdHg7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTsKIAlzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpOwpAQCAtNDc1MSwxMSAmIzQzOzQ3NTIsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKIAlzcGluX2xvY2soJmFtcDttZW1jZy0mZ3Q7cGVha3NfbG9jayk7CiAKIAl1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBjKTsKJiM0MzsJb2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy0mZ3Q7bG9jYWxfd2F0ZXJtYXJrKTsKIAlXUklURV9PTkNFKHBjLSZndDtsb2NhbF93YXRlcm1hcmssIHVzYWdlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KQotCQlpZiAodXNhZ2UgJmd0OyBwZWVyX2N0eC0mZ3Q7dmFsdWUpCi0JCQlXUklURV9PTkNFKHBlZXJfY3R4LSZndDt2YWx1ZSwgdXNhZ2UpOwomIzQzOwkJaWYgKHBlZXJfY3R4ICE9IG9mcCAmYW1wOyZhbXA7IG9sZF93YXRlcm1hcmsgJmd0OyBwZWVyX2N0eC0mZ3Q7dmFsdWUpCiYjNDM7CQkJV1JJVEVfT05DRShwZWVyX2N0eC0mZ3Q7dmFsdWUsIG9sZF93YXRlcm1hcmspOwogCiAJLyogaW5pdGlhbCB3cml0ZSwgcmVnaXN0ZXIgd2F0Y2hlciAqLwogCWlmIChvZnAtJmd0O3ZhbHVlID09IE9GUF9QRUFLX1VOU0VUKQpAQCAtNTg1OSw2ICYjNDM7NTg2MSw3IEBAIHN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTsKIAomIzQzOwlndWFyZChzcGlubG9jaykoJmFtcDttZW1jZy0mZ3Q7cGVha3NfbG9jayk7CiAJcmV0dXJuIHBlYWtfc2hvdyhzZiwgdiwgJmFtcDttZW1jZy0mZ3Q7c3dhcCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDgKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogOTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyB0aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGNoZWNraW5nLiBJdCYjMzk7cyBhZGRpbmcgYGd1YXJkKHNwaW5sb2NrKSgmYW1wO21lbWNnLSZndDtwZWFrc19sb2NrKTtgIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgd2hpY2ggaXMgZ29vZDsgaXQgZXhwbGljaXRseSBhZGRyZXNzZXMgY29uY3VycmVuY3kgaXNzdWVzIHdpdGggdGhlIHBlYWsgdmFsdWVzLiBUaGVuLCBpbiBgcGVha193cml0ZWAsIHRoZXJlJiMzOTtzIGEgY2hhbmdlIGluIGhvdyBgcGVlcl9jdHgtJmd0O3ZhbHVlYCBpcyB1cGRhdGVkLgoKTGV0JiMzOTtzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAuIFdlJiMzOTtyZSBub3cgdXNpbmcgYG9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtJmd0O2xvY2FsX3dhdGVybWFyayk7YCBhbmQgdXBkYXRpbmcgYHBlZXJfY3R4LSZndDt2YWx1ZWAgd2l0aCBgb2xkX3dhdGVybWFya2AgaW5zdGVhZCBvZiBgdXNhZ2VgIGlmIGBwZWVyX2N0eCAhPSBvZnAgJmFtcDsmYW1wOyBvbGRfd2F0ZXJtYXJrICZndDsgcGVlcl9jdHgtJmd0O3ZhbHVlYC4KCk15IGFuYWx5c2lzIGluZGljYXRlcyB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGhlcmUuIFRoZSB2YXJpYWJsZXMgYHVzYWdlYCBhbmQgYG9sZF93YXRlcm1hcmtgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBgdXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7YCBhbmQgYG9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtJmd0O2xvY2FsX3dhdGVybWFyayk7YC4gSXQmIzM5O3MgYWxsIGFib3V0IGxvY2tpbmcgYW5kIGNvcnJlY3RseSB1cGRhdGluZyB0aGUgcGVhayB2YWx1ZXMg4oCTIGEgY29uY3VycmVuY3kvbG9naWMgYnVnIGZpeC4gS0FTQU4sIExPQ0tERVAsIGFuZCBzaW1pbGFyIHRvb2xzIG1pZ2h0IGNhdGNoIGNvbmN1cnJlbmN5IGlzc3VlcywgYnV0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IHJpc2tzIGhlcmUuCgpSZS1yZXZpZXdpbmcgdGhlIHBhdGNoIGNvbmZpcm1zIHRoaXM6IHRoZSBsb2NrIGlzIGFkZGVkIHRvIHRoZSBgc2hvd2AgZnVuY3Rpb25zLCBhbmQgdGhlIGxvZ2ljIGNoYW5nZSBpbiBgcGVha193cml0ZWAgY29ycmVjdGx5IHVzZXMgdGhlIG9sZCB2YWx1ZSBhbmQgaXRzIGNvbXBhcmlzb24uCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgc2FmZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBOZWVkc0tNU0FOID0gZmFsc2UuIEkmIzM5O20gc2F0aXNmaWVkIGFuZCBJJiMzOTtsbCBwcm9jZWVkIHdpdGggY2FsbGluZyBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNDoyNi4zODcxNzgxMjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0NzM4OTY0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfcGVha19zaG93XCIsXG4gICAgXCJtZW1vcnlfcGVha193cml0ZVwiLFxuICAgIFwic3dhcF9wZWFrX3Nob3dcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDQ6MjYuMzg3MTkzMDk3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcwMDM2MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDVlNzZiMmM3NjU2MDFkN2FlNjk3YmViYjQxZTg0OTczYTFjYWE2NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwNDowNDoyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC00NzE0LDYgKzQ3MTQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcXG4gXFxuK1xcdGd1YXJkKHNwaW5sb2NrKShcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbiBcXHRyZXR1cm4gcGVha19zaG93KHNmLCB2LCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSk7XFxuIH1cXG4gXFxuQEAgLTQ3NDMsNyArNDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXFxuIFxcdFxcdFxcdCAgbG9mZl90IG9mZiwgc3RydWN0IHBhZ2VfY291bnRlciAqcGMsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyB1c2FnZTtcXG4rXFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgb2xkX3dhdGVybWFyaztcXG4gXFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG4gXFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTtcXG5AQCAtNDc1MSwxMSArNDc1MiwxMiBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNm1lbWNnLVxcdTAwM2VwZWFrc19sb2NrKTtcXG4gXFxuIFxcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xcbitcXHRvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xcbiBcXHRXUklURV9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxcbi1cXHRcXHRpZiAodXNhZ2UgXFx1MDAzZSBwZWVyX2N0eC1cXHUwMDNldmFsdWUpXFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UocGVlcl9jdHgtXFx1MDAzZXZhbHVlLCB1c2FnZSk7XFxuK1xcdFxcdGlmIChwZWVyX2N0eCAhPSBvZnAgXFx1MDAyNlxcdTAwMjYgb2xkX3dhdGVybWFyayBcXHUwMDNlIHBlZXJfY3R4LVxcdTAwM2V2YWx1ZSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShwZWVyX2N0eC1cXHUwMDNldmFsdWUsIG9sZF93YXRlcm1hcmspO1xcbiBcXG4gXFx0LyogaW5pdGlhbCB3cml0ZSwgcmVnaXN0ZXIgd2F0Y2hlciAqL1xcbiBcXHRpZiAob2ZwLVxcdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVClcXG5AQCAtNTg1OSw2ICs1ODYxLDcgQEAgc3RhdGljIGludCBzd2FwX3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Moc2VxX2NzcyhzZikpO1xcbiBcXG4rXFx0Z3VhcmQoc3BpbmxvY2spKFxcdTAwMjZtZW1jZy1cXHUwMDNlcGVha3NfbG9jayk7XFxuIFxcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA0OjI3Ljk1ODE3Mjg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTEzNTQ5ODk0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfcGVha19zaG93XCIsXG4gICAgXCJtZW1vcnlfcGVha193cml0ZVwiLFxuICAgIFwic3dhcF9wZWFrX3Nob3dcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDVlNzZiMmM3NjU2MDFkN2FlNjk3YmViYjQxZTg0OTczYTFjYWE2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA0OjA0OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00NzE0LDYgKzQ3MTQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbitcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG4gfVxuIFxuQEAgLTQ3NDMsNyArNDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XG4rXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4gXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuQEAgLTQ3NTEsMTEgKzQ3NTIsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbiBcdHNwaW5fbG9jayhcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcbiBcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xuK1x0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuIFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuLVx0XHRpZiAodXNhZ2UgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuLVx0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIHVzYWdlKTtcbitcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4rXHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgb2xkX3dhdGVybWFyayk7XG4gXG4gXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXG4gXHRpZiAob2ZwLVx1MDAzZXZhbHVlID09IE9GUF9QRUFLX1VOU0VUKVxuQEAgLTU4NTksNiArNTg2MSw3IEBAIHN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbitcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA0OjI3Ljk1ODE3NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY5MTUyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBNZW1vcnkgQ29udHJvbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseS4gVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGUgYWRkaXRpb24gb2YgYGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtgIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBwZWFrIHN0YXRpc3RpY3Mgd2l0aCBhIHNwaW5sb2NrLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgZm9yIGNvbmN1cnJlbmN5LiBUaGV5J3JlIGFsc28gZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gYG9sZF93YXRlcm1hcmtgIGFuZCBgcGVlcl9jdHggIT0gb2ZwYCBpbiBgcGVha193cml0ZWAuIEdvdHRhIGRpZyBpbnRvIHRoYXQgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgaXNzdWUsIGJ1dCB0aGUgaW50ZW50IHNlZW1zIHRvIGJlIHRvIGNvcnJlY3QgdGhlIHBlYWsgd3JpdGUgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgZnVuY3Rpb25zIOKAkyBgbWVtb3J5X3BlYWtfc2hvd2AsIGBzd2FwX3BlYWtfc2hvd2AsIGFuZCBgcGVha193cml0ZWAg4oCTIGFyZSBldmVuIHJlYWNoYWJsZSwgeW91IGtub3c/IEl0J3MgZWFzeSB0byBnZXQgbG9zdCBpbiB0aGUgY29kZSwgYW5kIGtub3dpbmcgdGhlIGFjdHVhbCB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBtYWtlIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoIHNvIG11Y2ggc2ltcGxlci4gQWgsIHJpZ2h0LCB0aGVzZSBhcmUgY2dyb3VwIHYyIG1lbW9yeSBjb250cm9sbGVyIGZ1bmN0aW9ucyDigJMgdGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBgbWVtb3J5X3BlYWtfc2hvd2AgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGBtZW1vcnkucGVha2AgZmlsZSwgYW5kIGBzd2FwX3BlYWtfc2hvd2AgZm9yIHRoZSBgc3dhcC5wZWFrYCBmaWxlLiBBbmQgYHBlYWtfd3JpdGVgIGhhbmRsZXMgdGhlIHdyaXRlcyB0byB0aG9zZSBmaWxlcywgbmF0dXJhbGx5LlxuXG5UaW1lIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgYG1lbWNvbnRyb2wuY2AuIEkgaGF2ZSB0byBiZSBzdXJlIGl0IGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNDozMi45MjczMzIxNTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4Mzk3MDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfcGVha19zaG93XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00Njk4PXN0YXRpYyBpbnQgcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ3MTItXFxubW0vbWVtY29udHJvbC5jOjQ3MTM6c3RhdGljIGludCBtZW1vcnlfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxubW0vbWVtY29udHJvbC5jLTQ3MTQte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwODM9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA5My1cXHRcXHQucmVsZWFzZSA9IHBlYWtfcmVsZWFzZSxcXG5tbS9tZW1jb250cm9sLmM6NTA5NDpcXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfcGVha19zaG93LFxcbm1tL21lbWNvbnRyb2wuYy01MDk1LVxcdFxcdC53cml0ZSA9IG1lbW9yeV9wZWFrX3dyaXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNDozNS4zMTEzMDgzNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY2Nzk3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgdGhlIGtleSBoZXJlIGlzIGBDT05GSUdfTUVNQ0dgLiBUaW1lIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkLCBzbyBpZiBgQ09ORklHX01FTUNHYCBpcyBkcml2aW5nIHNvbWV0aGluZywgdGhhdCdzIHdoZXJlIEknbGwgc2VlIGl0LiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGluZGljYXRpb24gdGhlcmUgaWYgSSdtIG9uIHRoZSByaWdodCB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA0OjM4LjM3ODExMDExM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQzODU4NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2wub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDQ6NDAuOTIxOTc0NTc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTU2MDEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBwZWFrX3dyaXRlYCBhbmQgQ09ORklHX01FTUNHKipcblxuUmlnaHQsIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGVhZGluZyBtZSB0byBiZWxpZXZlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBOb3csIEkgd2FudCB0byBkaXZlIGludG8gdGhlIGBwZWFrX3dyaXRlYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIElzIHRoaXMgYSBsb2NhbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgc3BlY2lmaWMgZmlsZSwgb3IgaXMgaXQgZXhwb3NlZCBtb3JlIGJyb2FkbHk/IFVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IGFzc2Vzc2luZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gZ28gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNDo0NS45ODc1MzY3NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMjAxNTQzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZWFrX3dyaXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00NzI5PXN0YXRpYyB2b2lkIHBlYWtfcmVsZWFzZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDc0Mi1cXG5tbS9tZW1jb250cm9sLmM6NDc0MzpzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbm1tL21lbWNvbnRyb2wuYy00NzQ0LVxcdFxcdFxcdCAgbG9mZl90IG9mZiwgc3RydWN0IHBhZ2VfY291bnRlciAqcGMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDc3MS1cXG5tbS9tZW1jb250cm9sLmM6NDc3MjpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5tbS9tZW1jb250cm9sLmMtNDc3My1cXHRcXHRcXHRcXHQgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00Nzc2LVxcbm1tL21lbWNvbnRyb2wuYzo0Nzc3OlxcdHJldHVybiBwZWFrX3dyaXRlKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSxcXG5tbS9tZW1jb250cm9sLmMtNDc3OC1cXHRcXHRcXHQgIFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X3BlYWtzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDgzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwOTQtXFx0XFx0LnNlcV9zaG93ID0gbWVtb3J5X3BlYWtfc2hvdyxcXG5tbS9tZW1jb250cm9sLmM6NTA5NTpcXHRcXHQud3JpdGUgPSBtZW1vcnlfcGVha193cml0ZSxcXG5tbS9tZW1jb250cm9sLmMtNTA5Ni1cXHR9LFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU4NjA9c3RhdGljIGludCBzd2FwX3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NjctXFxubW0vbWVtY29udHJvbC5jOjU4Njg6c3RhdGljIHNzaXplX3Qgc3dhcF9wZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbm1tL21lbWNvbnRyb2wuYy01ODY5LVxcdFxcdFxcdCAgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NzItXFxubW0vbWVtY29udHJvbC5jOjU4NzM6XFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCxcXG5tbS9tZW1jb250cm9sLmMtNTg3NC1cXHRcXHRcXHQgIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcF9wZWFrcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTkzNz1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTk2MC1cXHRcXHQuc2VxX3Nob3cgPSBzd2FwX3BlYWtfc2hvdyxcXG5tbS9tZW1jb250cm9sLmM6NTk2MTpcXHRcXHQud3JpdGUgPSBzd2FwX3BlYWtfd3JpdGUsXFxubW0vbWVtY29udHJvbC5jLTU5NjItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDQ6NDguMzA5NTU2NTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjkzMjA2Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDZ3JvdXAgTWVtb3J5L1N3YXAgUGVhayBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgYW5kIHN3YXAgcGVhayBmdW5jdGlvbnMgd2l0aGluIHRoZSBjZ3JvdXAgY29kZS4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHdhcywgXCJIbW0sIGBtZW1vcnlfcGVha193cml0ZWAsIGBtZW1vcnlfcGVha19zaG93YCwgYHN3YXBfcGVha193cml0ZWAsIGFuZCBgc3dhcF9wZWFrX3Nob3dgIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGEgcmVkIGZsYWcgaW4gbW9zdCBzY2VuYXJpb3MsIGluZGljYXRpbmcgdGhleSBtaWdodCBiZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGV5IGFyZSB1c2VkIGFzIGNhbGxiYWNrcyB3aXRoaW4gYGNmdHlwZWAsIHNvIHRoZXkncmUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGNncm91cGZzLiBUaGF0J3MgdW51c3VhbCBhbmQgaW1wb3J0YW50LlwiXG5cbk15IGZpcnN0IGluc3RpbmN0IHdhcyB0byBzY2FuIGZvciBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMg4oCTIG1vcmUgcm9idXN0IGVudHJ5IHBvaW50cy4gVGhlIHByb21wdCBzdHJlc3NlcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMuIEJ1dCB0aGUgcHJvbXB0IGFsc28gaW5jbHVkZXMgdGhlIGNyaXRlcmlhIHRoYXQgZnVuY3Rpb25zIHdpdGggZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUgbm90IGlubGluZWQuXG5cblRoZW4gSSByZWFsaXplZCwgaG9sZCBvbiwgZXZlbiB0aG91Z2ggdGhleSdyZSBgc3RhdGljYCwgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlICp0YWtlbiogd2l0aGluIGBjZnR5cGVgIChhcyBjYWxsYmFja3MpLCB0aGV5J3JlICpub3QqIGJlaW5nIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGV5IGFyZSByZWFjaGFibGUgdmlhIHVzZXJzcGFjZS4gVGhleSBhcmUgbm90IGlubGluZWQhXG5cblRoZXJlZm9yZSwgSSB0aGluayB0aGUgbW9zdCBhcHByb3ByaWF0ZSBhY3Rpb24gaXMgdG8gbGlzdCB0aGVzZSBmb3VyIGZ1bmN0aW9uczogYG1lbW9yeV9wZWFrX3dyaXRlYCwgYG1lbW9yeV9wZWFrX3Nob3dgLCBgc3dhcF9wZWFrX3dyaXRlYCwgYW5kIGBzd2FwX3BlYWtfc2hvd2AuXG5cbkkgYWxzbyBjaGVja2VkIGZvciBmdW5jdGlvbnMgbGlrZSBgcGVha193cml0ZWAuIEl0J3Mgc3RhdGljLCBhbmQgaXRzIGFkZHJlc3MgKmlzbid0KiB0YWtlbiwgc28gaXQgaXMgcHJvYmFibHkgaW5saW5lZC5cblxuSXQgc2VlbXMgbGlrZSBgQ09ORklHX01FTUNHYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLiBJJ2xsIGRvdWJsZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGJ1dCBJIHN1c3BlY3QgdGhhdCBpcyBhbGwgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA0OjU2LjYwMjc2NTQ5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjE1MTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDQ6NTguOTA0OTIyMzkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDg2NDQzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgTWVtb3J5IENvbnRyb2xsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUga2V5IGNvbmZpZyB2YXJpYWJsZSBoZXJlIGlzIGBNRU1DR2AuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyBpdCdzIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIGluIGBwZWFrX3dyaXRlYCB3aGlsZSBzaW11bHRhbmVvdXNseSBhZGRpbmcgbG9ja3MgdG8gdGhlIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCBmdW5jdGlvbnMgd2l0aGluIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zLCBiZWluZyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIGNncm91cGZzIGJ5IGludGVyYWN0aW5nIHdpdGggdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLCBkaXJlY3RseSBpbXBhY3QgdGhlIG1lbW9yeSBjb250cm9sbGVyJ3MgZnVuY3Rpb25hbGl0eS4gVGhhdCBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gQW55IGNoYW5nZSBhZmZlY3RpbmcgdXNlci1hY2Nlc3NpYmxlIGludGVyZmFjZXMsIGVzcGVjaWFsbHkgb25lcyByZWxhdGVkIHRvIHBlYWsgbWVtb3J5IHVzYWdlLCBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBwcmV2ZW50IHBvdGVudGlhbCBleHBsb2l0cy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gd2FudCB0byBmb2N1cyBvbjogYG1lbW9yeV9wZWFrX3dyaXRlYCwgYG1lbW9yeV9wZWFrX3Nob3dgLCBgc3dhcF9wZWFrX3dyaXRlYCwgYW5kIGBzd2FwX3BlYWtfc2hvd2AuIEkgc2hvdWxkIGFsc28gcXVpY2tseSBjaGVjayBpZiBgc3dhcF9wZWFrX3Nob3dgIGlzIGFsc28gY29uZGl0aW9uYWwgb24gb3RoZXIgY29uZmlncywgc3VjaCBhcyBgQ09ORklHX1NXQVBgLiBJdCB3b3VsZCBiZSBhIHNpbGx5IG92ZXJzaWdodCBub3QgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6MDYuMDEzNTY4OTg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUxNjg3NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfZmlsZXNcXFxcW1xcXFxdXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01OTIzPXN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTkzNi1cXG5tbS9tZW1jb250cm9sLmM6NTkzNzpzdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTU5MzgtXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTYxMzI9c3RhdGljIHNzaXplX3QgenN3YXBfd3JpdGViYWNrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTQ4LVxcbm1tL21lbWNvbnRyb2wuYzo2MTQ5OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTYxNTAtXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTowOC42NjUyNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMTMzMDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHN3YXBfZmlsZXNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGludmVzdGlnYXRlIHRoZSB1c2FnZSBvZiB0aGlzIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgY29kZWJhc2UuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGRvaW5nIGEgcXVpY2sgc2VhcmNoIGZvciBhbGwgdGhlIGluc3RhbmNlcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyByb2xlIGFuZCBkZXBlbmRlbmNpZXMuIE9uY2UgSSd2ZSBnb3QgdGhhdCBvdmVydmlldywgSSBjYW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjYWxscyB0aGVtc2VsdmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbnRleHQ7IHdoYXQgZGF0YSBpcyBiZWluZyBwYXNzZWQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGNsYXNzZXMgYXJlIGludGVyYWN0aW5nLCBhbmQgd2hhdCdzIHRoZSBpbnRlbmRlZCBvdXRjb21lIG9mIHRoaXMgXCJzd2FwcGluZ1wiLiBJIGV4cGVjdCB0aGF0IHRoZSBjYWxsaW5nIGNvZGUgd2lsbCBsaWtlbHkgcHJvdmlkZSBjbHVlcyBhYm91dCB3aGF0IHRoZSBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBhY2hpZXZlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBhbmQgbWFraW5nIGl0IHNhZmUgdG8gbW9kaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTkwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6MTIuNDg2NTk1NjAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTIwMjUzNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfZmlsZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTU5MjM9c3RhdGljIGludCBzd2FwX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01OTM2LVxcbm1tL21lbWNvbnRyb2wuYzo1OTM3OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG5tbS9tZW1jb250cm9sLmMtNTkzOC1cXHR7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjEzMj1zdGF0aWMgc3NpemVfdCB6c3dhcF93cml0ZWJhY2tfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxNDgtXFxubW0vbWVtY29udHJvbC5jOjYxNDk6c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcXG5tbS9tZW1jb250cm9sLmMtNjE1MC1cXHR7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjE3MD1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxNzQtXFxubW0vbWVtY29udHJvbC5jOjYxNzU6XFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcXG5tbS9tZW1jb250cm9sLmMtNjE3Ni0jaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjE3OS0jaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jOjYxODA6XFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jLTYxODEtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjE1LjYwNjg1MzM3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA1Mzc1MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgU3dhcCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgQ2dyb3VwIFN3YXAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBgbWVtX2Nncm91cF9zd2FwX2luaXRgIGZ1bmN0aW9uIGlzIGV2ZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgcHJvcGVyIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIHN3YXAgc3BhY2UgbWFuYWdlbWVudCwgYnV0IHdpdGhvdXQgYENPTkZJR19TV0FQYCBiZWluZyBlbmFibGVkLCB0aGVyZSdzIG5vIHdheSBpdCdzIGdvaW5nIHRvIGJlIGF2YWlsYWJsZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAgZnVuY3Rpb24gaXMgY29udGluZ2VudCB1cG9uIGEgcHJvcGVyIHN3YXAgY29uZmlndXJhdGlvbi4gSW4gb3JkZXIgdG8gZnVuY3Rpb24sIGl0IG5lZWRzIGBDT05GSUdfU1dBUGAgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5IGJlZm9yZSBJIGxvb2sgYXQgYW55dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjE4LjcxMjIzMTM0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NzU0ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NjE0OT1zdGF0aWMgc3RydWN0IGNmdHlwZSB6c3dhcF9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxNjktXFxubW0vbWVtY29udHJvbC5jOjYxNzA6c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG5tbS9tZW1jb250cm9sLmMtNjE3MS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjE4My19XFxubW0vbWVtY29udHJvbC5jOjYxODQ6c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcXG5tbS9tZW1jb250cm9sLmMtNjE4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6MjEuMTg5Nzg0MTQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTE0MTgyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uOiBBIFJvdXRpbmUgRGlhZ25vc3RpYyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gYSBxdWljayBjaGVjay4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgYHN3YXBfZmlsZXNgIGZ1bmN0aW9uIGlzIHByb3Blcmx5IGd1YXJkZWQgYnkgdGhlIGBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIGVzcGVjaWFsbHkgaW4gYSBjb2RlYmFzZSB3aGVyZSBmZWF0dXJlcyBjYW4gYmUgc2VsZWN0aXZlbHkgZW5hYmxlZCBhbmQgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBJdCdzIGFsbW9zdCBzZWNvbmQgbmF0dXJlIOKAkyBhIHF1aWNrIG1lbnRhbCBzY2FuIHRvIGVuc3VyZSB0aGUgc3dhcCBmdW5jdGlvbmFsaXR5IGlzbid0IGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvciBhcHBsaWNhdGlvbiB1bm5lY2Vzc2FyaWx5IGlmIHRoZSBzd2FwIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gV2UgZGVmaW5pdGVseSBkb24ndCB3YW50IGFueSBzdXJwcmlzZXMgbGF0ZXIuIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBObyBzdXJwcmlzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNToyNC40NDEyMDU0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjgyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9Mzc4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDA2LVxcdE5SX1NFQ09OREFSWV9QQUdFVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjQwNzojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNDA4LVxcdE5SX1NXQVBDQUNIRSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjEwLVxcdFBHTEFaWUZSRUVELFxcbm1tL21lbWNvbnRyb2wuYzo2MTE6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTYxMi1cXHRTV1BJTl9aRVJPLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjA5LVxcdHsgXFxcImZpbGVfd3JpdGViYWNrXFxcIixcXHRcXHROUl9XUklURUJBQ0tcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNjEwOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNjExLVxcdHsgXFxcInN3YXBjYWNoZWRcXFwiLFxcdFxcdFxcdE5SX1NXQVBDQUNIRVxcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTY4ND1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MTktXFxubW0vbWVtY29udHJvbC5jOjU3MjA6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTU3MjEtLyoqXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjE4ND1zdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xcbm1tL21lbWNvbnRyb2wuYy02MTg1LVxcbm1tL21lbWNvbnRyb2wuYzo2MTg2OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xcbm1tL21lbWNvbnRyb2wuYy02MTg3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNToyNC41MDM0OTY5MTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NDczMDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIFN3YXAgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCAqYG1tL21lbWNvbnRyb2wuYzo2MTg2OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL2AqIOKAkyB0aGF04oCZcyBhIGZhbWlsaWFyIG1hcmtlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4dGVudCBvZiB0aGUgY29kZSBjb250cm9sbGVkIGJ5IGBDT05GSUdfU1dBUGAgaW4gdGhpcyBmaWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoYXQgYCNpZmRlZiBDT05GSUdfU1dBUGAgYmxvY2sgKmJlZ2lucyouIEknbSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoYXQgc3RhcnQgcG9pbnQuIEVzc2VudGlhbGx5IEkgd2FudCB0byBrbm93IHdoYXQgY29kZSBpcyBjb25kaXRpb25hbCBvbiBzd2FwIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNToyNy43ODgyMzAyMTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzEwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTcxMDpcXHRcXHRtZW1jZ19zaXplID0gc3RydWN0X3NpemVfdChzdHJ1Y3QgbWVtX2Nncm91cCwgbm9kZWluZm8sIG5yX25vZGVfaWRzKTtcXG41NzExOlxcdFxcdG1lbWNnX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKFxcXCJtZW1fY2dyb3VwXFxcIiwgbWVtY2dfc2l6ZSwgMCxcXG41NzEyOlxcdFxcdFxcdFxcdFxcdFxcdCBTTEFCX1BBTklDIHwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTtcXG41NzEzOlxcdFxcbjU3MTQ6XFx0XFx0bWVtY2dfcG5fY2FjaGVwID0gS01FTV9DQUNIRShtZW1fY2dyb3VwX3Blcl9ub2RlLFxcbjU3MTU6XFx0XFx0XFx0XFx0XFx0ICAgICBTTEFCX1BBTklDIHwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcXG41NzE2OlxcdFxcbjU3MTc6XFx0XFx0cmV0dXJuIDA7XFxuNTcxODpcXHR9XFxuNTcxOTpcXHRcXG41NzIwOlxcdCNpZmRlZiBDT05GSUdfU1dBUFxcbjU3MjE6XFx0LyoqXFxuNTcyMjpcXHQgKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG41NzIzOlxcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxcbjU3MjQ6XFx0ICpcXG41NzI1OlxcdCAqIFRyeSB0byBjaGFyZ2UgQGZvbGlvJ3MgbWVtY2cgZm9yIHRoZSBzd2FwIHNwYWNlIGF0IGZvbGlvLVxcdTAwM2Vzd2FwLlxcbjU3MjY6XFx0ICpcXG41NzI3OlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG9uIGZhaWx1cmUuXFxuNTcyODpcXHQgKi9cXG41NzI5OlxcdGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuNTczMDpcXHR7XFxuNTczMTpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuNTczMjpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbjU3MzM6XFx0XFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcXG41NzM0OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41NzM1OlxcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG41NzM2OlxcdFxcbjU3Mzc6XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG41NzM4OlxcdFxcdFxcdHJldHVybiAwO1xcbjU3Mzk6XFx0XFxuNTc0MDpcXHRcXHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcXG41NzQxOlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghb2JqY2csIGZvbGlvKTtcXG41NzQyOlxcdFxcdGlmICghb2JqY2cpXFxuNTc0MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG41NzQ0OlxcdFxcbjU3NDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjU3NDY6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG41NzQ3OlxcdFxcdGlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XFxuNTc0ODpcXHRcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XFxuNTc0OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG41NzUwOlxcdFxcdFxcdHJldHVybiAwO1xcbjU3NTE6XFx0XFx0fVxcbjU3NTI6XFx0XFxuNTc1MzpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XFxuNTc1NDpcXHRcXHQvKiBtZW1jZyBpcyBwaW5lZCBieSBtZW1jZyBJRC4gKi9cXG41NzU1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjU3NTY6XFx0XFxuNTc1NzpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXFx1MDAyNlxcdTAwMjZcXG41NzU4OlxcdFxcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBucl9wYWdlcywgXFx1MDAyNmNvdW50ZXIpKSB7XFxuNTc1OTpcXHRcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG41NzYwOlxcdFxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcXG41NzYxOlxcdFxcdFxcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcXG41NzYyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjU3NjM6XFx0XFx0fVxcbjU3NjQ6XFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9wYWdlcyk7XFxuNTc2NTpcXHRcXG41NzY2OlxcdFxcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XFxuNTc2NzpcXHRcXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVxcdTAwM2Vzd2FwKSwgbnJfcGFnZXMsXFxuNTc2ODpcXHRcXHRcXHRcXHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xcbjU3Njk6XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuNTc3MDpcXHRcXG41NzcxOlxcdFxcdHJldHVybiAwO1xcbjU3NzI6XFx0fVxcbjU3NzM6XFx0XFxuNTc3NDpcXHQvKipcXG41Nzc1OlxcdCAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxcbjU3NzY6XFx0ICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2VcXG41Nzc3OlxcdCAqIEBucl9wYWdlczogdGhlIGFtb3VudCBvZiBzd2FwIHNwYWNlIHRvIHVuY2hhcmdlXFxuNTc3ODpcXHQgKi9cXG41Nzc5OlxcdHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG41NzgwOlxcdHtcXG41NzgxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41NzgyOlxcdFxcbjU3ODM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjU3ODQ6XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7XFxuNTc4NTpcXHRcXHRpZiAobWVtY2cpIHtcXG41Nzg2OlxcdFxcdFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xcbjU3ODc6XFx0XFx0XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG41Nzg4OlxcdFxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XFxuNTc4OTpcXHRcXHRcXHRcXHRlbHNlXFxuNTc5MDpcXHRcXHRcXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBucl9wYWdlcyk7XFxuNTc5MTpcXHRcXHRcXHR9XFxuNTc5MjpcXHRcXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XFxuNTc5MzpcXHRcXHRcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XFxuNTc5NDpcXHRcXHR9XFxuNTc5NTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG41Nzk2OlxcdH1cXG41Nzk3OlxcdFxcbjU3OTg6XFx0bG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG41Nzk5OlxcdHtcXG41ODAwOlxcdFxcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XFxuNTgwMTpcXHRcXG41ODAyOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKVxcbjU4MDM6XFx0XFx0XFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XFxuNTgwNDpcXHRcXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxcbjU4MDU6XFx0XFx0XFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXFxuNTgwNjpcXHRcXHRcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXN3YXAubWF4KSAtXFxuNTgwNzpcXHRcXHRcXHRcXHRcXHQgICAgICBwYWdlX2NvdW50ZXJfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXApKTtcXG41ODA4OlxcdFxcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xcbjU4MDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNToyNy43ODg0NDc4NzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODEzNjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnMuXG5cbioqQW5hbHl6aW5nIE1lbW9yeSBQZWFrIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGF0IHRoZSBgc3dhcF9wZWFrX3Nob3dgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYCBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgZ292ZXJuZWQgYnkgdGhlIGBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGV5IGFyZSByZWxhdGVkIHRvIHN3YXAgbWVtb3J5LCBhZnRlciBhbGwuIEJ1dCwgSSdtIG5vdyBjdXJpb3VzIGFib3V0IHRoZSBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBtZW1vcnlfcGVha193cml0ZWAgZnVuY3Rpb25zLiBUaGUgZmFjdCB0aGF0IHRoZXkgKmFyZW4ndCogdGllZCB0byBgQ09ORklHX1NXQVBgIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlc2UgYW5kIHVuZGVyc3RhbmQgaG93IHRoZWlyIGluY2x1c2lvbi9leGNsdXNpb24gZnJvbSBidWlsZCBjb25maWd1cmF0aW9ucyBpcyBtYW5hZ2VkIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhleSdyZSBhdmFpbGFibGUsIHNpbmNlIHRoZXkncmUgY2xlYXJseSBub3QgZGlyZWN0bHkgbGlua2VkIHRvIHN3YXAgbWVtb3J5IGluIHRoZSBzYW1lIHdheS4gV2hhdCBkcml2ZXMgdGhlaXIgZW5hYmxlbWVudD8gTGV0J3MgY2hlY2sgdGhvc2UgZnVuY3Rpb25zIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6MzEuNDg2NTg3MjQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3MDA6XFx0XFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKHNmLVxcdTAwM2Vwcml2YXRlKTtcXG40NzAxOlxcdFxcdHU2NCBmZF9wZWFrID0gUkVBRF9PTkNFKG9mcC1cXHUwMDNldmFsdWUpLCBwZWFrO1xcbjQ3MDI6XFx0XFxuNDcwMzpcXHRcXHQvKiBVc2VyIHdhbnRzIGdsb2JhbCBvciBsb2NhbCBwZWFrPyAqL1xcbjQ3MDQ6XFx0XFx0aWYgKGZkX3BlYWsgPT0gT0ZQX1BFQUtfVU5TRVQpXFxuNDcwNTpcXHRcXHRcXHRwZWFrID0gcGMtXFx1MDAzZXdhdGVybWFyaztcXG40NzA2OlxcdFxcdGVsc2VcXG40NzA3OlxcdFxcdFxcdHBlYWsgPSBtYXgoZmRfcGVhaywgUkVBRF9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmspKTtcXG40NzA4OlxcdFxcbjQ3MDk6XFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVsbHVcXFxcblxcXCIsIHBlYWsgKiBQQUdFX1NJWkUpO1xcbjQ3MTA6XFx0XFx0cmV0dXJuIDA7XFxuNDcxMTpcXHR9XFxuNDcxMjpcXHRcXG40NzEzOlxcdHN0YXRpYyBpbnQgbWVtb3J5X3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbjQ3MTQ6XFx0e1xcbjQ3MTU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNmKSk7XFxuNDcxNjpcXHRcXG40NzE3OlxcdFxcdGd1YXJkKHNwaW5sb2NrKShcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3MTg6XFx0XFx0cmV0dXJuIHBlYWtfc2hvdyhzZiwgdiwgXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnkpO1xcbjQ3MTk6XFx0fVxcbjQ3MjA6XFx0XFxuNDcyMTpcXHRzdGF0aWMgaW50IHBlYWtfb3BlbihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YpXFxuNDcyMjpcXHR7XFxuNDcyMzpcXHRcXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xcbjQ3MjQ6XFx0XFxuNDcyNTpcXHRcXHRvZnAtXFx1MDAzZXZhbHVlID0gT0ZQX1BFQUtfVU5TRVQ7XFxuNDcyNjpcXHRcXHRyZXR1cm4gMDtcXG40NzI3OlxcdH1cXG40NzI4OlxcdFxcbjQ3Mjk6XFx0c3RhdGljIHZvaWQgcGVha19yZWxlYXNlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZilcXG40NzMwOlxcdHtcXG40NzMxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuNDczMjpcXHRcXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xcbjQ3MzM6XFx0XFxuNDczNDpcXHRcXHRpZiAob2ZwLVxcdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVCkge1xcbjQ3MzU6XFx0XFx0XFx0LyogZmFzdCBwYXRoIChubyB3cml0ZXMgb24gdGhpcyBmZCkgKi9cXG40NzM2OlxcdFxcdFxcdHJldHVybjtcXG40NzM3OlxcdFxcdH1cXG40NzM4OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3Mzk6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm9mcC1cXHUwMDNlbGlzdCk7XFxuNDc0MDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3NDE6XFx0fVxcbjQ3NDI6XFx0XFxuNDc0MzpcXHRzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbjQ3NDQ6XFx0XFx0XFx0XFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcXG40NzQ1OlxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXFxuNDc0NjpcXHR7XFxuNDc0NzpcXHRcXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xcbjQ3NDg6XFx0XFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcXG40NzQ5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuNDc1MDpcXHRcXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xcbjQ3NTE6XFx0XFxuNDc1MjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1lbWNnLVxcdTAwM2VwZWFrc19sb2NrKTtcXG40NzUzOlxcdFxcbjQ3NTQ6XFx0XFx0dXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7XFxuNDc1NTpcXHRcXHRvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xcbjQ3NTY6XFx0XFx0V1JJVEVfT05DRShwYy1cXHUwMDNlbG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7XFxuNDc1NzpcXHRcXG40NzU4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxcbjQ3NTk6XFx0XFx0XFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcXHUwMDI2XFx1MDAyNiBvbGRfd2F0ZXJtYXJrIFxcdTAwM2UgcGVlcl9jdHgtXFx1MDAzZXZhbHVlKVxcbjQ3NjA6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShwZWVyX2N0eC1cXHUwMDNldmFsdWUsIG9sZF93YXRlcm1hcmspO1xcbjQ3NjE6XFx0XFxuNDc2MjpcXHRcXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXFxuNDc2MzpcXHRcXHRpZiAob2ZwLVxcdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVClcXG40NzY0OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZvZnAtXFx1MDAzZWxpc3QsIHdhdGNoZXJzKTtcXG40NzY1OlxcdFxcbjQ3NjY6XFx0XFx0V1JJVEVfT05DRShvZnAtXFx1MDAzZXZhbHVlLCB1c2FnZSk7XFxuNDc2NzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3Njg6XFx0XFxuNDc2OTpcXHRcXHRyZXR1cm4gbmJ5dGVzO1xcbjQ3NzA6XFx0fVxcbjQ3NzE6XFx0XFxuNDc3MjpcXHRzdGF0aWMgc3NpemVfdCBtZW1vcnlfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG40NzczOlxcdFxcdFxcdFxcdFxcdCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbjQ3NzQ6XFx0e1xcbjQ3NzU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG40Nzc2OlxcdFxcbjQ3Nzc6XFx0XFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LFxcbjQ3Nzg6XFx0XFx0XFx0XFx0ICBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9wZWFrcyk7XFxuNDc3OTpcXHR9XFxuNDc4MDpcXHRcXG40NzgxOlxcdCN1bmRlZiBPRlBfUEVBS19VTlNFVFxcbjQ3ODI6XFx0XFxuNDc4MzpcXHRzdGF0aWMgaW50IG1lbW9yeV9taW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNDc4NDpcXHR7XFxuNDc4NTpcXHRcXHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLFxcbjQ3ODY6XFx0XFx0XFx0UkVBRF9PTkNFKG1lbV9jZ3JvdXBfZnJvbV9zZXEobSktXFx1MDAzZW1lbW9yeS5taW4pKTtcXG40Nzg3OlxcdH1cXG40Nzg4OlxcdFxcbjQ3ODk6XFx0c3RhdGljIHNzaXplX3QgbWVtb3J5X21pbl93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuNDc5MDpcXHRcXHRcXHRcXHRcXHRjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuNDc5MTpcXHR7XFxuNDc5MjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xcbjQ3OTM6XFx0XFx0dW5zaWduZWQgbG9uZyBtaW47XFxuNDc5NDpcXHRcXHRpbnQgZXJyO1xcbjQ3OTU6XFx0XFxuNDc5NjpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjQ3OTc6XFx0XFx0ZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgXFxcIm1heFxcXCIsIFxcdTAwMjZtaW4pO1xcbjQ3OTg6XFx0XFx0aWYgKGVycilcXG40Nzk5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjMxLjQ4NjgwNDQyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUyNTY1MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgU3dhcCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gYWJvdXQgYENPTkZJR19TV0FQYCBiZWluZyBhY3RpdmUgaXNuJ3QgdGhlIGNhc2UgaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIHRoZW4gc2hpZnRzIHRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTUVNQ0dgIGFuZCBgU1dBUGAgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkOyBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBtaW5pbWFsIHNldCBvZiBkZXBlbmRlbmNpZXMuIFRoZSBrZXkgaGVyZSwgb2YgY291cnNlLCBpcyB0aGF0IEknbSBjb25zaWRlcmluZyB3aGF0J3MgKm5lZWRlZCogdG8gZ2V0IGNlcnRhaW4gZnVuY3Rpb25hbGl0eSB3b3JraW5nLlxuXG5BaCwgcmlnaHQg4oCTIHRoZSBpbXBvcnRhbnQgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBvciBub3QgYFNXQVBgIGlzIGV2ZW4gYSAqY29uZmlndXJhdGlvbiBvcHRpb24qIGF0IGFsbC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgY29ycmVjdGx5IGV4cG9zZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGVzcGVjaWFsbHkgc2luY2UgSSdtIHRyeWluZyB0byB0ZXN0IGBzd2FwX3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBJdCdzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24uIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5IHRvIGF2b2lkIGFueSB3YXN0ZWQgZWZmb3J0IGNoYXNpbmcgZ2hvc3RzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgYnVpbGQgc3lzdGVtIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzM5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTozNS42MzkzNzI0NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODA1Njc5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL0tjb25maWc9MTI2Mj1jb25maWcgTUlQU19TUFJBTVxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMTI2NC1cXG5hcmNoL21pcHMvS2NvbmZpZzoxMjY1OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9taXBzL0tjb25maWctMTI2Ni1cXHRib29sXFxuLS1cXG5hcmNoL3NoL0tjb25maWc9MTI2PWNvbmZpZyBJT19UUkFQUEVEXFxuLS1cXG5hcmNoL3NoL0tjb25maWctMTI4LVxcbmFyY2gvc2gvS2NvbmZpZzoxMjk6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcXG5hcmNoL3NoL0tjb25maWctMTMwLVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjM3LjkxOTk0NTcxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDM0OTk0ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgU3lzdGVtIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBgU1dBUGAgY29uZmlndXJhdGlvbiDigJMgeWVwLCB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgbm8gc3VycHJpc2VzIHRoZXJlLiBNeSBuZXh0IG1vdmUgaXMgdG8gcXVpY2tseSBhc3Nlc3MgcG90ZW50aWFsIGludGVyZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgd2l0aCByZWdhcmRzIHRvIGBNRU1DR2AuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGlmIG1lbW9yeSBjZ3JvdXBzIGhhdmUgYW55IGhhcmQgcmVxdWlyZW1lbnRzIHRoYXQgYFNXQVBgIG1pZ2h0IGltcGFjdCBvciByZWx5IG9uLiBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzd2FwIGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGlzb2xhdGlvbiBhbmQgY29udHJvbCBwcm92aWRlZCBieSBtZW1vcnkgY2dyb3Vwcy4gQW55IGRlZXBlciBjb25uZWN0aW9ucyBoZXJlIHdpbGwgc3Ryb25nbHkgaW5mb3JtIGhvdyBJIG1hbmFnZSB0aGUgbWVtb3J5IHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTo0My45NTQ5NDM3MzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDcyNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6NDQuMDE0MDI0MTY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjQ4ODEzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGU6IE1FTUNHJ3MgUG9zaXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBvciBgTUVNQ0dgLCBhbmQgd2hlcmUgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIGtlcm5lbCBwaWN0dXJlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW50aW1hdGVseS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cyB3aGVuIG5hdmlnYXRpbmcgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gbGFieXJpbnRoLCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgaW5pdC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgY29uZmlnIE1FTUNHYCB3aWxsIGJlIHRoZSBrZXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBJIGFudGljaXBhdGUgdGhlcmUgbWlnaHQgYmUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgYE1FTUNHYCBzdWJzeXN0ZW0gdGhhdCBJJ2xsIG5lZWQgdG8gY2hhc2UgZG93biBvbmNlIEkndmUgZ290IHRoZSBsYXkgb2YgdGhlIGxhbmQgZnJvbSB0aGlzIGluaXRpYWwgS2NvbmZpZyBzZWN0aW9uLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyBgTUVNQ0dgIGlzIGV4cG9zZWQsIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgd2hhdCBvdGhlciBjb25maWcgb3B0aW9ucyB3aWxsIGJlIGFmZmVjdGVkIGluIHJlbGF0aW9uIHRvIGl0LiBUaW1lIHRvIGRpZyBpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjQ3LjYzODkwODk3OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzA6XFx0XFx0aGVscFxcbjEwNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcXFwiZmF2b3JkeW5tb2RzXFxcIiBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxcbjEwNzI6XFx0XFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXFxuMTA3MzpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwNzQ6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTo0Ny42MzkwODgwNzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNzMxMzg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBzdWJqZWN0IG1hdHRlciBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ2dyb3VwIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHRoaW5nLCBhbmQgaXQncyBsb2NhdGVkIHdpdGhpbiB0aGUgQ2dyb3VwIG1lbnUsIGJ1dCBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQgaXQgZGVwZW5kcyBvbi4gTXkgZ3V0IHRlbGxzIG1lIGl0ICpzaG91bGRuJ3QqIG5lZWQgYW55dGhpbmcgc3BlY2lmaWMgb3V0c2lkZSBvZiB0aGUgZ2VuZXJhbCBDZ3JvdXAgZnJhbWV3b3JrLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHdoZXRoZXIgb3Igbm90IHRoZSBgQ0dST1VQU2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ2xsIGNoZWNrIHRoYXQgZmlyc3QsIGFzIGl0J3MgdGhlIG1vc3QgbGlrZWx5IGRlcGVuZGVuY3kuIEl0J3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpbiB0aGlzIHRyb3VibGVzaG9vdGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc5OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6NTEuMzY2NDA1NzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzA1NzAxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBDR1JPVVBTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDQ2PWNvbmZpZyBTTEFCX09CSl9FWFRcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQ4LVxcbmluaXQvS2NvbmZpZzoxMDQ5Om1lbnVjb25maWcgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMDUwLVxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6NTMuNjk2OTgwNjc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTg3OTk3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgQ0dST1VQU2AgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gYENHUk9VUFNgIGlzIGRlZmluaXRlbHkgdGhlIHRvcC1sZXZlbCBtZW51Y29uZmlnLCB0aGUgcGFyZW50LiBXaXRoaW4gdGhhdCwgd2UncmUgZGVhbGluZyB3aXRoIGBNRU1DR2AgYW5kIGBTV0FQYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb25zIHNlZW1zIHRvIGJlIGFyb3VuZCBgbWVtb3J5X3BlYWtfc2hvd2AsIGBtZW1vcnlfcGVha193cml0ZWAsIGBzd2FwX3BlYWtfc2hvd2AsIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC4gV2FpdCBhIG1pbnV0ZSwgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAgZG9uJ3Qgc2VlbSB0byBiZSBkaXJlY3RseSBtb2RpZmllZCBpbiB0aGVtc2VsdmVzLCBidXQgdGhleSBjYWxsIGBwZWFrX3dyaXRlYCB3aGljaCAqaXMqIG1vZGlmaWVkLiBUaGlzIGNoYW5nZXMgdGhpbmdzIHNvbWV3aGF0LiBXZSBoYXZlIHRoZXNlIGZ1bmN0aW9ucyB0byBjb25zaWRlcjpcblxuKiAgIGBtZW1vcnlfcGVha19zaG93YFxuKiAgIGBtZW1vcnlfcGVha193cml0ZWAgKGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBgcGVha193cml0ZWApXG4qICAgYHN3YXBfcGVha19zaG93YFxuKiAgIGBzd2FwX3BlYWtfd3JpdGVgIChhbmQgaXRzIGRlcGVuZGVuY3kgb24gYHBlYWtfd3JpdGVgKVxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYG1lbW9yeV9wZWFrX3dyaXRlYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgZnVuY3Rpb24gbmFtZS4gR29vZCwgaXQgaXMuXG5cbk5vdywgbGV0J3MgbG9vayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBsaW5rZWQgdG8gdGhpcyBjaGFuZ2UuIEFoYSwgYHBlYWtfd3JpdGVgIGlzIG1hcmtlZCBhcyBzdGF0aWMsIG1lYW5pbmcgaXQgbWlnaHQgYmUgaW5saW5lZC4gQnV0IHNpbmNlIGBtZW1vcnlfcGVha193cml0ZWAgKGFuZCBgc3dhcF9wZWFrX3dyaXRlYCkgZXhwbGljaXRseSBjYWxsIGl0LCBmdXp6aW5nIGVpdGhlciBvZiB0aG9zZSB3aWxsIGVmZmVjdGl2ZWx5IGZ1enogYHBlYWtfd3JpdGVgIGFzIHdlbGwuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cbk9rYXksIHRoYXQncyBldmVyeXRoaW5nLiBUaW1lIHRvIHNldCB1cCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwODMsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjU5LjE5NTc4Mjk0OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzM3NjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfcGVha19zaG93XCIsXG4gICAgXCJtZW1vcnlfcGVha193cml0ZVwiLFxuICAgIFwic3dhcF9wZWFrX3Nob3dcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9wZWFrX3Nob3dcIixcbiAgICBcIm1lbW9yeV9wZWFrX3dyaXRlXCIsXG4gICAgXCJzd2FwX3BlYWtfc2hvd1wiLFxuICAgIFwic3dhcF9wZWFrX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNncm91cCB2MiBtZW1vcnkgY29udHJvbGxlciBieSBhZGRpbmcgbG9ja3MgdG8gYG1lbW9yeV9wZWFrX3Nob3dgIGFuZCBgc3dhcF9wZWFrX3Nob3dgLCBhbmQgZml4aW5nIGEgYnVnIGluIGBwZWFrX3dyaXRlYCB3aGljaCBpcyBjYWxsZWQgYnkgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcyBieSByZWFkaW5nL3dyaXRpbmcgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgZmlsZXMuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTo1OS4zMTMxNjU5MjhaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQ3ODgyNTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6NTkuMzEzNjI4MDE4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTQ3NDA3NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGxvY2tpbmcgdG8gYG1lbW9yeV9wZWFrX3Nob3dgIGFuZCBgc3dhcF9wZWFrX3Nob3dgIHVzaW5nIGBndWFyZChzcGlubG9jaylgLCBhbmQgbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBwZWFrX3dyaXRlYCB0byB1c2UgdGhlIG9sZCB3YXRlcm1hcmsgdmFsdWUgd2hlbiB1cGRhdGluZyBwZWVyIGNvbnRleHRzLiBBbGwgdmFyaWFibGVzIGludHJvZHVjZWQgKGBvbGRfd2F0ZXJtYXJrYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBhbmQgbG9naWMgaXNzdWVzIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIExPQ0tERVAgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDVlNzZiMmM3NjU2MDFkN2FlNjk3YmViYjQxZTg0OTczYTFjYWE2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA0OjA0OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00NzE0LDYgKzQ3MTQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbitcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG4gfVxuIFxuQEAgLTQ3NDMsNyArNDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XG4rXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4gXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuQEAgLTQ3NTEsMTEgKzQ3NTIsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbiBcdHNwaW5fbG9jayhcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcbiBcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xuK1x0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuIFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuLVx0XHRpZiAodXNhZ2UgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuLVx0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIHVzYWdlKTtcbitcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4rXHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgb2xkX3dhdGVybWFyayk7XG4gXG4gXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXG4gXHRpZiAob2ZwLVx1MDAzZXZhbHVlID09IE9GUF9QRUFLX1VOU0VUKVxuQEAgLTU4NTksNiArNTg2MSw3IEBAIHN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbitcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjU5LjMxMzYyODkzOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU0NzM2MTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyB0aGF0J3MgdGhlIGZpcnN0IHRoaW5nIEknbSBjaGVja2luZy4gSXQncyBhZGRpbmcgYGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtgIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgd2hpY2ggaXMgZ29vZDsgaXQgZXhwbGljaXRseSBhZGRyZXNzZXMgY29uY3VycmVuY3kgaXNzdWVzIHdpdGggdGhlIHBlYWsgdmFsdWVzLiBUaGVuLCBpbiBgcGVha193cml0ZWAsIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gaG93IGBwZWVyX2N0eC1cdTAwM2V2YWx1ZWAgaXMgdXBkYXRlZC5cblxuTGV0J3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhlIGxvZ2ljIGluIGBwZWFrX3dyaXRlYC4gV2UncmUgbm93IHVzaW5nIGBvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVx1MDAzZWxvY2FsX3dhdGVybWFyayk7YCBhbmQgdXBkYXRpbmcgYHBlZXJfY3R4LVx1MDAzZXZhbHVlYCB3aXRoIGBvbGRfd2F0ZXJtYXJrYCBpbnN0ZWFkIG9mIGB1c2FnZWAgaWYgYHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWVgLlxuXG5NeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGhlcmUuIFRoZSB2YXJpYWJsZXMgYHVzYWdlYCBhbmQgYG9sZF93YXRlcm1hcmtgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBgdXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7YCBhbmQgYG9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtXHUwMDNlbG9jYWxfd2F0ZXJtYXJrKTtgLiBJdCdzIGFsbCBhYm91dCBsb2NraW5nIGFuZCBjb3JyZWN0bHkgdXBkYXRpbmcgdGhlIHBlYWsgdmFsdWVzIOKAkyBhIGNvbmN1cnJlbmN5L2xvZ2ljIGJ1ZyBmaXguIEtBU0FOLCBMT0NLREVQLCBhbmQgc2ltaWxhciB0b29scyBtaWdodCBjYXRjaCBjb25jdXJyZW5jeSBpc3N1ZXMsIGJ1dCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgSSBkb24ndCBzZWUgYW55IHJpc2tzIGhlcmUuXG5cblJlLXJldmlld2luZyB0aGUgcGF0Y2ggY29uZmlybXMgdGhpczogdGhlIGxvY2sgaXMgYWRkZWQgdG8gdGhlIGBzaG93YCBmdW5jdGlvbnMsIGFuZCB0aGUgbG9naWMgY2hhbmdlIGluIGBwZWFrX3dyaXRlYCBjb3JyZWN0bHkgdXNlcyB0aGUgb2xkIHZhbHVlIGFuZCBpdHMgY29tcGFyaXNvbi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gTmVlZHNLTVNBTiA9IGZhbHNlLiBJJ20gc2F0aXNmaWVkIGFuZCBJJ2xsIHByb2NlZWQgd2l0aCBjYWxsaW5nIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ4LCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA2OjEwLjg2MDk5NDMwOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbG9ja2luZyB0byBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfc2hvd2AgdXNpbmcgYGd1YXJkKHNwaW5sb2NrKWAsIGFuZCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHBlYWtfd3JpdGVgIHRvIHVzZSB0aGUgb2xkIHdhdGVybWFyayB2YWx1ZSB3aGVuIHVwZGF0aW5nIHBlZXIgY29udGV4dHMuIEFsbCB2YXJpYWJsZXMgaW50cm9kdWNlZCAoYG9sZF93YXRlcm1hcmtgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGFuZCBsb2dpYyBpc3N1ZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 03:34:38 +0000 UTC FinishedAt: 2026-08-14 04:06:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2697ef8943c9985c14708a6429e21812693857b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2697ef8943c9985c14708a6429e21812693857b2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CGROUPS", "MEMCG", "SWAP" ], "series_id": "4c0e9d87-9e74-4a23-9114-d856c3e6ebf9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_peak_show", "memory_peak_write", "swap_peak_show", "swap_peak_write" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7bWVtb3J5X3BlYWtfd3JpdGUmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2dyb3VwIHYyIG1lbW9yeSBjb250cm9sbGVyIGJ5IGFkZGluZyBsb2NrcyB0byBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfc2hvd2AsIGFuZCBmaXhpbmcgYSBidWcgaW4gYHBlYWtfd3JpdGVgIHdoaWNoIGlzIGNhbGxlZCBieSBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGJ5IHJlYWRpbmcvd3JpdGluZyBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBmaWxlcy4gVGhlIGNoYW5nZXMgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkNWU3NmIyYzc2NTYwMWQ3YWU2OTdiZWJiNDFlODQ5NzNhMWNhYTY1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDQ6MDQ6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00NzE0LDYgJiM0Mzs0NzE0LDcgQEAgc3RhdGljIGludCBtZW1vcnlfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNmKSk7XG4gXG4mIzQzO1x0Z3VhcmQoc3BpbmxvY2spKFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuIFx0cmV0dXJuIHBlYWtfc2hvdyhzZiwgdiwgXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5KTtcbiB9XG4gXG5AQCAtNDc0Myw3ICYjNDM7NDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB1c2FnZSwgb2xkX3dhdGVybWFyaztcbiBcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqcGVlcl9jdHg7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTtcbkBAIC00NzUxLDExICYjNDM7NDc1MiwxMiBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxuIFx0c3Bpbl9sb2NrKFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuIFxuIFx0dXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7XG4mIzQzO1x0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuIFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuLVx0XHRpZiAodXNhZ2UgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuLVx0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIHVzYWdlKTtcbiYjNDM7XHRcdGlmIChwZWVyX2N0eCAhPSBvZnAgXHUwMDI2XHUwMDI2IG9sZF93YXRlcm1hcmsgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuJiM0MztcdFx0XHRXUklURV9PTkNFKHBlZXJfY3R4LVx1MDAzZXZhbHVlLCBvbGRfd2F0ZXJtYXJrKTtcbiBcbiBcdC8qIGluaXRpYWwgd3JpdGUsIHJlZ2lzdGVyIHdhdGNoZXIgKi9cbiBcdGlmIChvZnAtXHUwMDNldmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpXG5AQCAtNTg1OSw2ICYjNDM7NTg2MSw3IEBAIHN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbiYjNDM7XHRndWFyZChzcGlubG9jaykoXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG4gXHRyZXR1cm4gcGVha19zaG93KHNmLCB2LCBcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7bWVtb3J5X3BlYWtfd3JpdGUmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ1ZTc2YjJjNzY1NjAxZDdhZTY5N2JlYmI0MWU4NDk3M2ExY2FhNjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwNDowNDoyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00NzE0LDYgJiM0Mzs0NzE0LDcgQEAgc3RhdGljIGludCBtZW1vcnlfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNmKSk7CiAKJiM0MzsJZ3VhcmQoc3BpbmxvY2spKCZhbXA7bWVtY2ctJmd0O3BlYWtzX2xvY2spOwogCXJldHVybiBwZWFrX3Nob3coc2YsIHYsICZhbXA7bWVtY2ctJmd0O21lbW9yeSk7CiB9CiAKQEAgLTQ3NDMsNyAmIzQzOzQ3NDQsNyBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAogCQkJICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYywKIAkJCSAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpCiB7Ci0JdW5zaWduZWQgbG9uZyB1c2FnZTsKJiM0MzsJdW5zaWduZWQgbG9uZyB1c2FnZSwgb2xkX3dhdGVybWFyazsKIAlzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKnBlZXJfY3R4OwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7CiAJc3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTsKQEAgLTQ3NTEsMTEgJiM0Mzs0NzUyLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJc3Bpbl9sb2NrKCZhbXA7bWVtY2ctJmd0O3BlYWtzX2xvY2spOwogCiAJdXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7CiYjNDM7CW9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtJmd0O2xvY2FsX3dhdGVybWFyayk7CiAJV1JJVEVfT05DRShwYy0mZ3Q7bG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlZXJfY3R4LCB3YXRjaGVycywgbGlzdCkKLQkJaWYgKHVzYWdlICZndDsgcGVlcl9jdHgtJmd0O3ZhbHVlKQotCQkJV1JJVEVfT05DRShwZWVyX2N0eC0mZ3Q7dmFsdWUsIHVzYWdlKTsKJiM0MzsJCWlmIChwZWVyX2N0eCAhPSBvZnAgJmFtcDsmYW1wOyBvbGRfd2F0ZXJtYXJrICZndDsgcGVlcl9jdHgtJmd0O3ZhbHVlKQomIzQzOwkJCVdSSVRFX09OQ0UocGVlcl9jdHgtJmd0O3ZhbHVlLCBvbGRfd2F0ZXJtYXJrKTsKIAogCS8qIGluaXRpYWwgd3JpdGUsIHJlZ2lzdGVyIHdhdGNoZXIgKi8KIAlpZiAob2ZwLSZndDt2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVCkKQEAgLTU4NTksNiAmIzQzOzU4NjEsNyBAQCBzdGF0aWMgaW50IHN3YXBfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNmKSk7CiAKJiM0MzsJZ3VhcmQoc3BpbmxvY2spKCZhbXA7bWVtY2ctJmd0O3BlYWtzX2xvY2spOwogCXJldHVybiBwZWFrX3Nob3coc2YsIHYsICZhbXA7bWVtY2ctJmd0O3N3YXApOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IE1lbW9yeSBDb250cm9sIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseS4gVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGUgYWRkaXRpb24gb2YgYGd1YXJkKHNwaW5sb2NrKSgmYW1wO21lbWNnLSZndDtwZWFrc19sb2NrKTtgIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBwcm90ZWN0aW5nIGFjY2VzcyB0byB0aGUgcGVhayBzdGF0aXN0aWNzIHdpdGggYSBzcGlubG9jaywgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIGZvciBjb25jdXJyZW5jeS4gVGhleSYjMzk7cmUgYWxzbyBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBgb2xkX3dhdGVybWFya2AgYW5kIGBwZWVyX2N0eCAhPSBvZnBgIGluIGBwZWFrX3dyaXRlYC4gR290dGEgZGlnIGludG8gdGhhdCBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBpc3N1ZSwgYnV0IHRoZSBpbnRlbnQgc2VlbXMgdG8gYmUgdG8gY29ycmVjdCB0aGUgcGVhayB3cml0ZSBmdW5jdGlvbmFsaXR5LgoKTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgZnVuY3Rpb25zIOKAkyBgbWVtb3J5X3BlYWtfc2hvd2AsIGBzd2FwX3BlYWtfc2hvd2AsIGFuZCBgcGVha193cml0ZWAg4oCTIGFyZSBldmVuIHJlYWNoYWJsZSwgeW91IGtub3c/IEl0JiMzOTtzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlIGNvZGUsIGFuZCBrbm93aW5nIHRoZSBhY3R1YWwgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgbWFrZSB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCBzbyBtdWNoIHNpbXBsZXIuIEFoLCByaWdodCwgdGhlc2UgYXJlIGNncm91cCB2MiBtZW1vcnkgY29udHJvbGxlciBmdW5jdGlvbnMg4oCTIHRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIGBtZW1vcnlfcGVha19zaG93YCBpcyByZXNwb25zaWJsZSBmb3Igc2hvd2luZyB0aGUgYG1lbW9yeS5wZWFrYCBmaWxlLCBhbmQgYHN3YXBfcGVha19zaG93YCBmb3IgdGhlIGBzd2FwLnBlYWtgIGZpbGUuIEFuZCBgcGVha193cml0ZWAgaGFuZGxlcyB0aGUgd3JpdGVzIHRvIHRob3NlIGZpbGVzLCBuYXR1cmFsbHkuCgpUaW1lIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgYG1lbWNvbnRyb2wuY2AuIEkgaGF2ZSB0byBiZSBzdXJlIGl0IGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5X3BlYWtfc2hvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDY5OD1zdGF0aWMgaW50IHBlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2LCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDcxMi1cbm1tL21lbWNvbnRyb2wuYzo0NzEzOnN0YXRpYyBpbnQgbWVtb3J5X3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxubW0vbWVtY29udHJvbC5jLTQ3MTQte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MDgzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDkzLVx0XHQucmVsZWFzZSA9IHBlYWtfcmVsZWFzZSxcbm1tL21lbWNvbnRyb2wuYzo1MDk0Olx0XHQuc2VxX3Nob3cgPSBtZW1vcnlfcGVha19zaG93LFxubW0vbWVtY29udHJvbC5jLTUwOTUtXHRcdC53cml0ZSA9IG1lbW9yeV9wZWFrX3dyaXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUga2V5IGhlcmUgaXMgYENPTkZJR19NRU1DR2AuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZCwgc28gaWYgYENPTkZJR19NRU1DR2AgaXMgZHJpdmluZyBzb21ldGhpbmcsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc2VlIGl0LiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBpbmRpY2F0aW9uIHRoZXJlIGlmIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2wubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcGVha193cml0ZWAgYW5kIENPTkZJR19NRU1DRyoqCgpSaWdodCwgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsZWFkaW5nIG1lIHRvIGJlbGlldmUgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjZ3JvdXBzLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNvZGUuIE5vdywgSSB3YW50IHRvIGRpdmUgaW50byB0aGUgYHBlYWtfd3JpdGVgIGZ1bmN0aW9uIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIElzIHRoaXMgYSBsb2NhbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgc3BlY2lmaWMgZmlsZSwgb3IgaXMgaXQgZXhwb3NlZCBtb3JlIGJyb2FkbHk/IFVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IGFzc2Vzc2luZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gZ28gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVha193cml0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDcyOT1zdGF0aWMgdm9pZCBwZWFrX3JlbGVhc2Uoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NzQyLVxubW0vbWVtY29udHJvbC5jOjQ3NDM6c3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbm1tL21lbWNvbnRyb2wuYy00NzQ0LVx0XHRcdCAgbG9mZl90IG9mZiwgc3RydWN0IHBhZ2VfY291bnRlciAqcGMsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ3NzEtXG5tbS9tZW1jb250cm9sLmM6NDc3MjpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbm1tL21lbWNvbnRyb2wuYy00NzczLVx0XHRcdFx0IHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ3NzYtXG5tbS9tZW1jb250cm9sLmM6NDc3NzpcdHJldHVybiBwZWFrX3dyaXRlKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksXG5tbS9tZW1jb250cm9sLmMtNDc3OC1cdFx0XHQgIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9wZWFrcyk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwODM9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUwOTQtXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9wZWFrX3Nob3csXG5tbS9tZW1jb250cm9sLmM6NTA5NTpcdFx0LndyaXRlID0gbWVtb3J5X3BlYWtfd3JpdGUsXG5tbS9tZW1jb250cm9sLmMtNTA5Ni1cdH0sXG4tLVxubW0vbWVtY29udHJvbC5jPTU4NjA9c3RhdGljIGludCBzd2FwX3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODY3LVxubW0vbWVtY29udHJvbC5jOjU4Njg6c3RhdGljIHNzaXplX3Qgc3dhcF9wZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxubW0vbWVtY29udHJvbC5jLTU4NjktXHRcdFx0ICAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NzItXG5tbS9tZW1jb250cm9sLmM6NTg3MzpcdHJldHVybiBwZWFrX3dyaXRlKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLFxubW0vbWVtY29udHJvbC5jLTU4NzQtXHRcdFx0ICBcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX3BlYWtzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTkzNz1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU5NjAtXHRcdC5zZXFfc2hvdyA9IHN3YXBfcGVha19zaG93LFxubW0vbWVtY29udHJvbC5jOjU5NjE6XHRcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcbm1tL21lbWNvbnRyb2wuYy01OTYyLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDZ3JvdXAgTWVtb3J5L1N3YXAgUGVhayBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1lbW9yeSBhbmQgc3dhcCBwZWFrIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNncm91cCBjb2RlLiBJbml0aWFsbHksIG15IHRob3VnaHQgd2FzLCAmIzM0O0htbSwgYG1lbW9yeV9wZWFrX3dyaXRlYCwgYG1lbW9yeV9wZWFrX3Nob3dgLCBgc3dhcF9wZWFrX3dyaXRlYCwgYW5kIGBzd2FwX3BlYWtfc2hvd2AgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcgaW4gbW9zdCBzY2VuYXJpb3MsIGluZGljYXRpbmcgdGhleSBtaWdodCBiZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGV5IGFyZSB1c2VkIGFzIGNhbGxiYWNrcyB3aXRoaW4gYGNmdHlwZWAsIHNvIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBjZ3JvdXBmcy4gVGhhdCYjMzk7cyB1bnVzdWFsIGFuZCBpbXBvcnRhbnQuJiMzNDsKCk15IGZpcnN0IGluc3RpbmN0IHdhcyB0byBzY2FuIGZvciBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMg4oCTIG1vcmUgcm9idXN0IGVudHJ5IHBvaW50cy4gVGhlIHByb21wdCBzdHJlc3NlcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMuIEJ1dCB0aGUgcHJvbXB0IGFsc28gaW5jbHVkZXMgdGhlIGNyaXRlcmlhIHRoYXQgZnVuY3Rpb25zIHdpdGggZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUgbm90IGlubGluZWQuCgpUaGVuIEkgcmVhbGl6ZWQsIGhvbGQgb24sIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIGBzdGF0aWNgLCBiZWNhdXNlIHRoZWlyIGFkZHJlc3NlcyBhcmUgKnRha2VuKiB3aXRoaW4gYGNmdHlwZWAgKGFzIGNhbGxiYWNrcyksIHRoZXkmIzM5O3JlICpub3QqIGJlaW5nIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGV5IGFyZSByZWFjaGFibGUgdmlhIHVzZXJzcGFjZS4gVGhleSBhcmUgbm90IGlubGluZWQhCgpUaGVyZWZvcmUsIEkgdGhpbmsgdGhlIG1vc3QgYXBwcm9wcmlhdGUgYWN0aW9uIGlzIHRvIGxpc3QgdGhlc2UgZm91ciBmdW5jdGlvbnM6IGBtZW1vcnlfcGVha193cml0ZWAsIGBtZW1vcnlfcGVha19zaG93YCwgYHN3YXBfcGVha193cml0ZWAsIGFuZCBgc3dhcF9wZWFrX3Nob3dgLgoKSSBhbHNvIGNoZWNrZWQgZm9yIGZ1bmN0aW9ucyBsaWtlIGBwZWFrX3dyaXRlYC4gSXQmIzM5O3Mgc3RhdGljLCBhbmQgaXRzIGFkZHJlc3MgKmlzbiYjMzk7dCogdGFrZW4sIHNvIGl0IGlzIHByb2JhYmx5IGlubGluZWQuCgpJdCBzZWVtcyBsaWtlIGBDT05GSUdfTUVNQ0dgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aGlzIGFyZWEuIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgSSBzdXNwZWN0IHRoYXQgaXMgYWxsIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgTWVtb3J5IENvbnRyb2xsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBrZXkgY29uZmlnIHZhcmlhYmxlIGhlcmUgaXMgYE1FTUNHYC4gTWFrZXMgc2Vuc2UsIGNvbnNpZGVyaW5nIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIGluIGBwZWFrX3dyaXRlYCB3aGlsZSBzaW11bHRhbmVvdXNseSBhZGRpbmcgbG9ja3MgdG8gdGhlIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCBmdW5jdGlvbnMgd2l0aGluIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgYmVpbmcgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UgdGhyb3VnaCBjZ3JvdXBmcyBieSBpbnRlcmFjdGluZyB3aXRoIHRoZSBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBmaWxlcywgZGlyZWN0bHkgaW1wYWN0IHRoZSBtZW1vcnkgY29udHJvbGxlciYjMzk7cyBmdW5jdGlvbmFsaXR5LiBUaGF0IHNjcmVhbXMgJiMzNDtmdXp6aW5nIHRhcmdldCYjMzQ7IHRvIG1lLiBBbnkgY2hhbmdlIGFmZmVjdGluZyB1c2VyLWFjY2Vzc2libGUgaW50ZXJmYWNlcywgZXNwZWNpYWxseSBvbmVzIHJlbGF0ZWQgdG8gcGVhayBtZW1vcnkgdXNhZ2UsIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSBzdGFiaWxpdHkgYW5kIHByZXZlbnQgcG90ZW50aWFsIGV4cGxvaXRzLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gZm9jdXMgb246IGBtZW1vcnlfcGVha193cml0ZWAsIGBtZW1vcnlfcGVha19zaG93YCwgYHN3YXBfcGVha193cml0ZWAsIGFuZCBgc3dhcF9wZWFrX3Nob3dgLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgaWYgYHN3YXBfcGVha19zaG93YCBpcyBhbHNvIGNvbmRpdGlvbmFsIG9uIG90aGVyIGNvbmZpZ3MsIHN1Y2ggYXMgYENPTkZJR19TV0FQYC4gSXQgd291bGQgYmUgYSBzaWxseSBvdmVyc2lnaHQgbm90IHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2ZpbGVzXFxbXFxdJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01OTIzPXN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTU5MzYtXG5tbS9tZW1jb250cm9sLmM6NTkzNzpzdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG5tbS9tZW1jb250cm9sLmMtNTkzOC1cdHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjEzMj1zdGF0aWMgc3NpemVfdCB6c3dhcF93cml0ZWJhY2tfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wuYy02MTQ4LVxubW0vbWVtY29udHJvbC5jOjYxNDk6c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcbm1tL21lbWNvbnRyb2wuYy02MTUwLVx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTkwCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHN3YXBfZmlsZXNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIHVzYWdlIG9mIHRoaXMgYHN3YXBfZmlsZXNgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIGxhcmdlciBjb2RlYmFzZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIHNlYXJjaCBmb3IgYWxsIHRoZSBpbnN0YW5jZXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZXZhbHVhdGluZyBpdHMgcm9sZSBhbmQgZGVwZW5kZW5jaWVzLiBPbmNlIEkmIzM5O3ZlIGdvdCB0aGF0IG92ZXJ2aWV3LCBJIGNhbiBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGxzIHRoZW1zZWx2ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbnRleHQ7IHdoYXQgZGF0YSBpcyBiZWluZyBwYXNzZWQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGNsYXNzZXMgYXJlIGludGVyYWN0aW5nLCBhbmQgd2hhdCYjMzk7cyB0aGUgaW50ZW5kZWQgb3V0Y29tZSBvZiB0aGlzICYjMzQ7c3dhcHBpbmcmIzM0Oy4gSSBleHBlY3QgdGhhdCB0aGUgY2FsbGluZyBjb2RlIHdpbGwgbGlrZWx5IHByb3ZpZGUgY2x1ZXMgYWJvdXQgd2hhdCB0aGUgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYWNoaWV2ZS4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGFuZCBtYWtpbmcgaXQgc2FmZSB0byBtb2RpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfZmlsZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTU5MjM9c3RhdGljIGludCBzd2FwX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS9tZW1jb250cm9sLmMtNTkzNi1cbm1tL21lbWNvbnRyb2wuYzo1OTM3OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbm1tL21lbWNvbnRyb2wuYy01OTM4LVx0e1xuLS1cbm1tL21lbWNvbnRyb2wuYz02MTMyPXN0YXRpYyBzc2l6ZV90IHpzd2FwX3dyaXRlYmFja193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTYxNDgtXG5tbS9tZW1jb250cm9sLmM6NjE0OTpzdGF0aWMgc3RydWN0IGNmdHlwZSB6c3dhcF9maWxlc1tdID0ge1xubW0vbWVtY29udHJvbC5jLTYxNTAtXHR7XG4tLVxubW0vbWVtY29udHJvbC5jPTYxNzA9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjE3NC1cbm1tL21lbWNvbnRyb2wuYzo2MTc1Olx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xubW0vbWVtY29udHJvbC5jLTYxNzYtI2lmZGVmIENPTkZJR19NRU1DR19WMVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MTc5LSNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYzo2MTgwOlx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbm1tL21lbWNvbnRyb2wuYy02MTgxLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIFN3YXAgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IENncm91cCBTd2FwIEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBgbWVtX2Nncm91cF9zd2FwX2luaXRgIGZ1bmN0aW9uIGlzIGV2ZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UgZm9yIHByb3BlciBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBzd2FwIHNwYWNlIG1hbmFnZW1lbnQsIGJ1dCB3aXRob3V0IGBDT05GSUdfU1dBUGAgYmVpbmcgZW5hYmxlZCwgdGhlcmUmIzM5O3Mgbm8gd2F5IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGF2YWlsYWJsZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAgZnVuY3Rpb24gaXMgY29udGluZ2VudCB1cG9uIGEgcHJvcGVyIHN3YXAgY29uZmlndXJhdGlvbi4gSW4gb3JkZXIgdG8gZnVuY3Rpb24sIGl0IG5lZWRzIGBDT05GSUdfU1dBUGAgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5IGJlZm9yZSBJIGxvb2sgYXQgYW55dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9zd2FwX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTYxNDk9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjE2OS1cbm1tL21lbWNvbnRyb2wuYzo2MTcwOnN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG5tbS9tZW1jb250cm9sLmMtNjE3MS17XG4tLVxubW0vbWVtY29udHJvbC5jLTYxODMtfVxubW0vbWVtY29udHJvbC5jOjYxODQ6c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcbm1tL21lbWNvbnRyb2wuYy02MTg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTQ5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb246IEEgUm91dGluZSBEaWFnbm9zdGljKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgY2hlY2suIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBndWFyZGVkIGJ5IHRoZSBgQ09ORklHX1NXQVBgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlLCBlc3BlY2lhbGx5IGluIGEgY29kZWJhc2Ugd2hlcmUgZmVhdHVyZXMgY2FuIGJlIHNlbGVjdGl2ZWx5IGVuYWJsZWQgYW5kIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4gSXQmIzM5O3MgYWxtb3N0IHNlY29uZCBuYXR1cmUg4oCTIGEgcXVpY2sgbWVudGFsIHNjYW4gdG8gZW5zdXJlIHRoZSBzd2FwIGZ1bmN0aW9uYWxpdHkgaXNuJiMzOTt0IGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvciBhcHBsaWNhdGlvbiB1bm5lY2Vzc2FyaWx5IGlmIHRoZSBzd2FwIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gV2UgZGVmaW5pdGVseSBkb24mIzM5O3Qgd2FudCBhbnkgc3VycHJpc2VzIGxhdGVyLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIE5vIHN1cnByaXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTM3OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX25vZGVfc3RhdF9pdGVtc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MDYtXHROUl9TRUNPTkRBUllfUEFHRVRBQkxFLFxubW0vbWVtY29udHJvbC5jOjQwNzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy00MDgtXHROUl9TV0FQQ0FDSEUsXG4tLVxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjEwLVx0UEdMQVpZRlJFRUQsXG5tbS9tZW1jb250cm9sLmM6NjExOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTYxMi1cdFNXUElOX1pFUk8sXG4tLVxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTYwOS1cdHsgXCYjMzQ7ZmlsZV93cml0ZWJhY2tcJiMzNDssXHRcdE5SX1dSSVRFQkFDS1x0XHRcdH0sXG5tbS9tZW1jb250cm9sLmM6MTYxMDojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy0xNjExLVx0eyBcJiMzNDtzd2FwY2FjaGVkXCYjMzQ7LFx0XHRcdE5SX1NXQVBDQUNIRVx0XHRcdH0sXG4tLVxubW0vbWVtY29udHJvbC5jPTU2ODQ9aW50IF9faW5pdCBtZW1fY2dyb3VwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTcxOS1cbm1tL21lbWNvbnRyb2wuYzo1NzIwOiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC5jLTU3MjEtLyoqXG4tLVxubW0vbWVtY29udHJvbC5jPTYxODQ9c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcbm1tL21lbWNvbnRyb2wuYy02MTg1LVxubW0vbWVtY29udHJvbC5jOjYxODY6I2VuZGlmIC8qIENPTkZJR19TV0FQICovXG5tbS9tZW1jb250cm9sLmMtNjE4Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gU3dhcCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCAqYG1tL21lbWNvbnRyb2wuYzo2MTg2OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL2AqIOKAkyB0aGF04oCZcyBhIGZhbWlsaWFyIG1hcmtlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4dGVudCBvZiB0aGUgY29kZSBjb250cm9sbGVkIGJ5IGBDT05GSUdfU1dBUGAgaW4gdGhpcyBmaWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoYXQgYCNpZmRlZiBDT05GSUdfU1dBUGAgYmxvY2sgKmJlZ2lucyouIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGF0IHN0YXJ0IHBvaW50LiBFc3NlbnRpYWxseSBJIHdhbnQgdG8ga25vdyB3aGF0IGNvZGUgaXMgY29uZGl0aW9uYWwgb24gc3dhcCBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3MTA6XHRcdG1lbWNnX3NpemUgPSBzdHJ1Y3Rfc2l6ZV90KHN0cnVjdCBtZW1fY2dyb3VwLCBub2RlaW5mbywgbnJfbm9kZV9pZHMpO1xuNTcxMTpcdFx0bWVtY2dfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7bWVtX2Nncm91cFwmIzM0OywgbWVtY2dfc2l6ZSwgMCxcbjU3MTI6XHRcdFx0XHRcdFx0IFNMQUJfUEFOSUMgfCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpO1xuNTcxMzpcdFxuNTcxNDpcdFx0bWVtY2dfcG5fY2FjaGVwID0gS01FTV9DQUNIRShtZW1fY2dyb3VwX3Blcl9ub2RlLFxuNTcxNTpcdFx0XHRcdFx0ICAgICBTTEFCX1BBTklDIHwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbjU3MTY6XHRcbjU3MTc6XHRcdHJldHVybiAwO1xuNTcxODpcdH1cbjU3MTk6XHRcbjU3MjA6XHQjaWZkZWYgQ09ORklHX1NXQVBcbjU3MjE6XHQvKipcbjU3MjI6XHQgKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cbjU3MjM6XHQgKiBAZm9saW86IGZvbGlvIGJlaW5nIGFkZGVkIHRvIHN3YXBcbjU3MjQ6XHQgKlxuNTcyNTpcdCAqIFRyeSB0byBjaGFyZ2UgQGZvbGlvJiMzOTtzIG1lbWNnIGZvciB0aGUgc3dhcCBzcGFjZSBhdCBmb2xpby1cdTAwM2Vzd2FwLlxuNTcyNjpcdCAqXG41NzI3Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cbjU3Mjg6XHQgKi9cbjU3Mjk6XHRpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuNTczMDpcdHtcbjU3MzE6XHRcdHVuc2lnbmVkIGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbjU3MzI6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG41NzMzOlx0XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuNTczNDpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNTczNTpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuNTczNjpcdFxuNTczNzpcdFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcbjU3Mzg6XHRcdFx0cmV0dXJuIDA7XG41NzM5Olx0XG41NzQwOlx0XHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcbjU3NDE6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghb2JqY2csIGZvbGlvKTtcbjU3NDI6XHRcdGlmICghb2JqY2cpXG41NzQzOlx0XHRcdHJldHVybiAwO1xuNTc0NDpcdFxuNTc0NTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuNTc0NjpcdFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbjU3NDc6XHRcdGlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG41NzQ4Olx0XHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcbjU3NDk6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG41NzUwOlx0XHRcdHJldHVybiAwO1xuNTc1MTpcdFx0fVxuNTc1MjpcdFxuNTc1MzpcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShtZW1jZywgbnJfcGFnZXMpO1xuNTc1NDpcdFx0LyogbWVtY2cgaXMgcGluZWQgYnkgbWVtY2cgSUQuICovXG41NzU1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjU3NTY6XHRcbjU3NTc6XHRcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSBcdTAwMjZcdTAwMjZcbjU3NTg6XHRcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgbnJfcGFnZXMsIFx1MDAyNmNvdW50ZXIpKSB7XG41NzU5Olx0XHRcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9NQVgpO1xuNTc2MDpcdFx0XHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XG41NzYxOlx0XHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbjU3NjI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG41NzYzOlx0XHR9XG41NzY0Olx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIG5yX3BhZ2VzKTtcbjU3NjU6XHRcbjU3NjY6XHRcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG41NzY3Olx0XHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVx1MDAzZXN3YXApLCBucl9wYWdlcyxcbjU3Njg6XHRcdFx0XHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xuNTc2OTpcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG41NzcwOlx0XG41NzcxOlx0XHRyZXR1cm4gMDtcbjU3NzI6XHR9XG41NzczOlx0XG41Nzc0Olx0LyoqXG41Nzc1Olx0ICogX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBzd2FwIHNwYWNlXG41Nzc2Olx0ICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2VcbjU3Nzc6XHQgKiBAbnJfcGFnZXM6IHRoZSBhbW91bnQgb2Ygc3dhcCBzcGFjZSB0byB1bmNoYXJnZVxuNTc3ODpcdCAqL1xuNTc3OTpcdHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbjU3ODA6XHR7XG41NzgxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41NzgyOlx0XG41NzgzOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG41Nzg0Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKGlkKTtcbjU3ODU6XHRcdGlmIChtZW1jZykge1xuNTc4NjpcdFx0XHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpIHtcbjU3ODc6XHRcdFx0XHRpZiAoZG9fbWVtc3dfYWNjb3VudCgpKVxuNTc4ODpcdFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XG41Nzg5Olx0XHRcdFx0ZWxzZVxuNTc5MDpcdFx0XHRcdFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIG5yX3BhZ2VzKTtcbjU3OTE6XHRcdFx0fVxuNTc5MjpcdFx0XHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XG41NzkzOlx0XHRcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcbjU3OTQ6XHRcdH1cbjU3OTU6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuNTc5NjpcdH1cbjU3OTc6XHRcbjU3OTg6XHRsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuNTc5OTpcdHtcbjU4MDA6XHRcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG41ODAxOlx0XG41ODAyOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8IGRvX21lbXN3X2FjY291bnQoKSlcbjU4MDM6XHRcdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG41ODA0Olx0XHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxuNTgwNTpcdFx0XHRucl9zd2FwX3BhZ2VzID0gbWluX3QobG9uZywgbnJfc3dhcF9wYWdlcyxcbjU4MDY6XHRcdFx0XHRcdCAgICAgIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzd2FwLm1heCkgLVxuNTgwNzpcdFx0XHRcdFx0ICAgICAgcGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCkpO1xuNTgwODpcdFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XG41ODA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDUzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25zaWRlcmF0aW9ucy4KCioqQW5hbHl6aW5nIE1lbW9yeSBQZWFrIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIGBzd2FwX3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfd3JpdGVgIGZ1bmN0aW9ucyBhcmUgZXhwbGljaXRseSBnb3Zlcm5lZCBieSB0aGUgYENPTkZJR19TV0FQYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZXkgYXJlIHJlbGF0ZWQgdG8gc3dhcCBtZW1vcnksIGFmdGVyIGFsbC4gQnV0LCBJJiMzOTttIG5vdyBjdXJpb3VzIGFib3V0IHRoZSBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBtZW1vcnlfcGVha193cml0ZWAgZnVuY3Rpb25zLiBUaGUgZmFjdCB0aGF0IHRoZXkgKmFyZW4mIzM5O3QqIHRpZWQgdG8gYENPTkZJR19TV0FQYCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZXNlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVpciBpbmNsdXNpb24vZXhjbHVzaW9uIGZyb20gYnVpbGQgY29uZmlndXJhdGlvbnMgaXMgbWFuYWdlZCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoZXkmIzM5O3JlIGF2YWlsYWJsZSwgc2luY2UgdGhleSYjMzk7cmUgY2xlYXJseSBub3QgZGlyZWN0bHkgbGlua2VkIHRvIHN3YXAgbWVtb3J5IGluIHRoZSBzYW1lIHdheS4gV2hhdCBkcml2ZXMgdGhlaXIgZW5hYmxlbWVudD8gTGV0JiMzOTtzIGNoZWNrIHRob3NlIGZ1bmN0aW9ucyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDcwMDpcdFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKHNmLVx1MDAzZXByaXZhdGUpO1xuNDcwMTpcdFx0dTY0IGZkX3BlYWsgPSBSRUFEX09OQ0Uob2ZwLVx1MDAzZXZhbHVlKSwgcGVhaztcbjQ3MDI6XHRcbjQ3MDM6XHRcdC8qIFVzZXIgd2FudHMgZ2xvYmFsIG9yIGxvY2FsIHBlYWs/ICovXG40NzA0Olx0XHRpZiAoZmRfcGVhayA9PSBPRlBfUEVBS19VTlNFVClcbjQ3MDU6XHRcdFx0cGVhayA9IHBjLVx1MDAzZXdhdGVybWFyaztcbjQ3MDY6XHRcdGVsc2VcbjQ3MDc6XHRcdFx0cGVhayA9IG1heChmZF9wZWFrLCBSRUFEX09OQ0UocGMtXHUwMDNlbG9jYWxfd2F0ZXJtYXJrKSk7XG40NzA4Olx0XG40NzA5Olx0XHRzZXFfcHJpbnRmKHNmLCBcJiMzNDslbGx1XFxuXCYjMzQ7LCBwZWFrICogUEFHRV9TSVpFKTtcbjQ3MTA6XHRcdHJldHVybiAwO1xuNDcxMTpcdH1cbjQ3MTI6XHRcbjQ3MTM6XHRzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbjQ3MTQ6XHR7XG40NzE1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbjQ3MTY6XHRcbjQ3MTc6XHRcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbjQ3MTg6XHRcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG40NzE5Olx0fVxuNDcyMDpcdFxuNDcyMTpcdHN0YXRpYyBpbnQgcGVha19vcGVuKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZilcbjQ3MjI6XHR7XG40NzIzOlx0XHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuNDcyNDpcdFxuNDcyNTpcdFx0b2ZwLVx1MDAzZXZhbHVlID0gT0ZQX1BFQUtfVU5TRVQ7XG40NzI2Olx0XHRyZXR1cm4gMDtcbjQ3Mjc6XHR9XG40NzI4Olx0XG40NzI5Olx0c3RhdGljIHZvaWQgcGVha19yZWxlYXNlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZilcbjQ3MzA6XHR7XG40NzMxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xuNDczMjpcdFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTtcbjQ3MzM6XHRcbjQ3MzQ6XHRcdGlmIChvZnAtXHUwMDNldmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpIHtcbjQ3MzU6XHRcdFx0LyogZmFzdCBwYXRoIChubyB3cml0ZXMgb24gdGhpcyBmZCkgKi9cbjQ3MzY6XHRcdFx0cmV0dXJuO1xuNDczNzpcdFx0fVxuNDczODpcdFx0c3Bpbl9sb2NrKFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuNDczOTpcdFx0bGlzdF9kZWwoXHUwMDI2b2ZwLVx1MDAzZWxpc3QpO1xuNDc0MDpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG40NzQxOlx0fVxuNDc0MjpcdFxuNDc0MzpcdHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG40NzQ0Olx0XHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbjQ3NDU6XHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuNDc0NjpcdHtcbjQ3NDc6XHRcdHVuc2lnbmVkIGxvbmcgdXNhZ2UsIG9sZF93YXRlcm1hcms7XG40NzQ4Olx0XHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKnBlZXJfY3R4O1xuNDc0OTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbjQ3NTA6XHRcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqb2ZwID0gb2ZfcGVhayhvZik7XG40NzUxOlx0XG40NzUyOlx0XHRzcGluX2xvY2soXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG40NzUzOlx0XG40NzU0Olx0XHR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBjKTtcbjQ3NTU6XHRcdG9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtXHUwMDNlbG9jYWxfd2F0ZXJtYXJrKTtcbjQ3NTY6XHRcdFdSSVRFX09OQ0UocGMtXHUwMDNlbG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7XG40NzU3Olx0XG40NzU4Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlZXJfY3R4LCB3YXRjaGVycywgbGlzdClcbjQ3NTk6XHRcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG40NzYwOlx0XHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgb2xkX3dhdGVybWFyayk7XG40NzYxOlx0XG40NzYyOlx0XHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXG40NzYzOlx0XHRpZiAob2ZwLVx1MDAzZXZhbHVlID09IE9GUF9QRUFLX1VOU0VUKVxuNDc2NDpcdFx0XHRsaXN0X2FkZChcdTAwMjZvZnAtXHUwMDNlbGlzdCwgd2F0Y2hlcnMpO1xuNDc2NTpcdFxuNDc2NjpcdFx0V1JJVEVfT05DRShvZnAtXHUwMDNldmFsdWUsIHVzYWdlKTtcbjQ3Njc6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuNDc2ODpcdFxuNDc2OTpcdFx0cmV0dXJuIG5ieXRlcztcbjQ3NzA6XHR9XG40NzcxOlx0XG40NzcyOlx0c3RhdGljIHNzaXplX3QgbWVtb3J5X3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG40NzczOlx0XHRcdFx0XHQgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbjQ3NzQ6XHR7XG40Nzc1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xuNDc3NjpcdFxuNDc3NzpcdFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSxcbjQ3Nzg6XHRcdFx0XHQgIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9wZWFrcyk7XG40Nzc5Olx0fVxuNDc4MDpcdFxuNDc4MTpcdCN1bmRlZiBPRlBfUEVBS19VTlNFVFxuNDc4MjpcdFxuNDc4MzpcdHN0YXRpYyBpbnQgbWVtb3J5X21pbl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbjQ3ODQ6XHR7XG40Nzg1Olx0XHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLFxuNDc4NjpcdFx0XHRSRUFEX09OQ0UobWVtX2Nncm91cF9mcm9tX3NlcShtKS1cdTAwM2VtZW1vcnkubWluKSk7XG40Nzg3Olx0fVxuNDc4ODpcdFxuNDc4OTpcdHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9taW5fd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuNDc5MDpcdFx0XHRcdFx0Y2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuNDc5MTpcdHtcbjQ3OTI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG40NzkzOlx0XHR1bnNpZ25lZCBsb25nIG1pbjtcbjQ3OTQ6XHRcdGludCBlcnI7XG40Nzk1Olx0XG40Nzk2Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNDc5NzpcdFx0ZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgXCYjMzQ7bWF4XCYjMzQ7LCBcdTAwMjZtaW4pO1xuNDc5ODpcdFx0aWYgKGVycilcbjQ3OTk6XHRcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMzkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgU3dhcCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIGFib3V0IGBDT05GSUdfU1dBUGAgYmVpbmcgYWN0aXZlIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgdGhlbiBzaGlmdHMgdG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBNRU1DR2AgYW5kIGBTV0FQYCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQ7IEkmIzM5O20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBtaW5pbWFsIHNldCBvZiBkZXBlbmRlbmNpZXMuIFRoZSBrZXkgaGVyZSwgb2YgY291cnNlLCBpcyB0aGF0IEkmIzM5O20gY29uc2lkZXJpbmcgd2hhdCYjMzk7cyAqbmVlZGVkKiB0byBnZXQgY2VydGFpbiBmdW5jdGlvbmFsaXR5IHdvcmtpbmcuCgpBaCwgcmlnaHQg4oCTIHRoZSBpbXBvcnRhbnQgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBvciBub3QgYFNXQVBgIGlzIGV2ZW4gYSAqY29uZmlndXJhdGlvbiBvcHRpb24qIGF0IGFsbC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGNvcnJlY3RseSBleHBvc2VkIGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBlc3BlY2lhbGx5IHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIHRlc3QgYHN3YXBfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha193cml0ZWAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24uIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5IHRvIGF2b2lkIGFueSB3YXN0ZWQgZWZmb3J0IGNoYXNpbmcgZ2hvc3RzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGJ1aWxkIHN5c3RlbSB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL21pcHMvS2NvbmZpZz0xMjYyPWNvbmZpZyBNSVBTX1NQUkFNXG4tLVxuYXJjaC9taXBzL0tjb25maWctMTI2NC1cbmFyY2gvbWlwcy9LY29uZmlnOjEyNjU6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjYtXHRib29sXG4tLVxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxuLS1cbmFyY2gvc2gvS2NvbmZpZy0xMjgtXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL3NoL0tjb25maWctMTMwLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgU3lzdGVtIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgYFNXQVBgIGNvbmZpZ3VyYXRpb24g4oCTIHllcCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBubyBzdXJwcmlzZXMgdGhlcmUuIE15IG5leHQgbW92ZSBpcyB0byBxdWlja2x5IGFzc2VzcyBwb3RlbnRpYWwgaW50ZXJkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSB3aXRoIHJlZ2FyZHMgdG8gYE1FTUNHYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGlmIG1lbW9yeSBjZ3JvdXBzIGhhdmUgYW55IGhhcmQgcmVxdWlyZW1lbnRzIHRoYXQgYFNXQVBgIG1pZ2h0IGltcGFjdCBvciByZWx5IG9uLiBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzd2FwIGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGlzb2xhdGlvbiBhbmQgY29udHJvbCBwcm92aWRlZCBieSBtZW1vcnkgY2dyb3Vwcy4gQW55IGRlZXBlciBjb25uZWN0aW9ucyBoZXJlIHdpbGwgc3Ryb25nbHkgaW5mb3JtIGhvdyBJIG1hbmFnZSB0aGUgbWVtb3J5IHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjY2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZTogTUVNQ0cmIzM5O3MgUG9zaXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgY29udHJvbCBncm91cHMsIG9yIGBNRU1DR2AsIGFuZCB3aGVyZSB0aGV5IGZpdCBpbnRvIHRoZSBiaWdnZXIga2VybmVsIHBpY3R1cmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbnRpbWF0ZWx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdoZW4gbmF2aWdhdGluZyB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gbGFieXJpbnRoLCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgaW5pdC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgY29uZmlnIE1FTUNHYCB3aWxsIGJlIHRoZSBrZXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBJIGFudGljaXBhdGUgdGhlcmUgbWlnaHQgYmUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgYE1FTUNHYCBzdWJzeXN0ZW0gdGhhdCBJJiMzOTtsbCBuZWVkIHRvIGNoYXNlIGRvd24gb25jZSBJJiMzOTt2ZSBnb3QgdGhlIGxheSBvZiB0aGUgbGFuZCBmcm9tIHRoaXMgaW5pdGlhbCBLY29uZmlnIHNlY3Rpb24uIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IGBNRU1DR2AgaXMgZXhwb3NlZCwgaG93IHRoZSB2YXJpb3VzIGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCB3aGF0IG90aGVyIGNvbmZpZyBvcHRpb25zIHdpbGwgYmUgYWZmZWN0ZWQgaW4gcmVsYXRpb24gdG8gaXQuIFRpbWUgdG8gZGlnIGluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcwOlx0XHRoZWxwXG4xMDcxOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFwmIzM0O2Zhdm9yZHlubW9kc1wmIzM0OyBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxuMTA3MjpcdFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXG4xMDczOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA3NDpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBzdWJqZWN0IG1hdHRlciBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgYSBDZ3JvdXAgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyB0aGluZywgYW5kIGl0JiMzOTtzIGxvY2F0ZWQgd2l0aGluIHRoZSBDZ3JvdXAgbWVudSwgYnV0IGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQgaXQgZGVwZW5kcyBvbi4gTXkgZ3V0IHRlbGxzIG1lIGl0ICpzaG91bGRuJiMzOTt0KiBuZWVkIGFueXRoaW5nIHNwZWNpZmljIG91dHNpZGUgb2YgdGhlIGdlbmVyYWwgQ2dyb3VwIGZyYW1ld29yaywgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgd2hldGhlciBvciBub3QgdGhlIGBDR1JPVVBTYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYSBoYXJkIHJlcXVpcmVtZW50IGZvciB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O2xsIGNoZWNrIHRoYXQgZmlyc3QsIGFzIGl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBkZXBlbmRlbmN5LiBJdCYjMzk7cyB0aGUgb2J2aW91cyBmaXJzdCBzdGVwIGluIHRoaXMgdHJvdWJsZXNob290aW5nIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0dST1VQUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA0Nj1jb25maWcgU0xBQl9PQkpfRVhUXG4tLVxuaW5pdC9LY29uZmlnLTEwNDgtXG5pbml0L0tjb25maWc6MTA0OTptZW51Y29uZmlnIENHUk9VUFNcbmluaXQvS2NvbmZpZy0xMDUwLVx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODMKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYENHUk9VUFNgIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBgQ0dST1VQU2AgaXMgZGVmaW5pdGVseSB0aGUgdG9wLWxldmVsIG1lbnVjb25maWcsIHRoZSBwYXJlbnQuIFdpdGhpbiB0aGF0LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBNRU1DR2AgYW5kIGBTV0FQYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtcyB0byBiZSBhcm91bmQgYG1lbW9yeV9wZWFrX3Nob3dgLCBgbWVtb3J5X3BlYWtfd3JpdGVgLCBgc3dhcF9wZWFrX3Nob3dgLCBhbmQgYHN3YXBfcGVha193cml0ZWAuIFdhaXQgYSBtaW51dGUsIGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgIGRvbiYjMzk7dCBzZWVtIHRvIGJlIGRpcmVjdGx5IG1vZGlmaWVkIGluIHRoZW1zZWx2ZXMsIGJ1dCB0aGV5IGNhbGwgYHBlYWtfd3JpdGVgIHdoaWNoICppcyogbW9kaWZpZWQuIFRoaXMgY2hhbmdlcyB0aGluZ3Mgc29tZXdoYXQuIFdlIGhhdmUgdGhlc2UgZnVuY3Rpb25zIHRvIGNvbnNpZGVyOgoKKiAgIGBtZW1vcnlfcGVha19zaG93YAoqICAgYG1lbW9yeV9wZWFrX3dyaXRlYCAoYW5kIGl0cyBkZXBlbmRlbmN5IG9uIGBwZWFrX3dyaXRlYCkKKiAgIGBzd2FwX3BlYWtfc2hvd2AKKiAgIGBzd2FwX3BlYWtfd3JpdGVgIChhbmQgaXRzIGRlcGVuZGVuY3kgb24gYHBlYWtfd3JpdGVgKQoKSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbWVtb3J5X3BlYWtfd3JpdGVgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBmdW5jdGlvbiBuYW1lLiBHb29kLCBpdCBpcy4KCk5vdywgbGV0JiMzOTtzIGxvb2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgbGlua2VkIHRvIHRoaXMgY2hhbmdlLiBBaGEsIGBwZWFrX3dyaXRlYCBpcyBtYXJrZWQgYXMgc3RhdGljLCBtZWFuaW5nIGl0IG1pZ2h0IGJlIGlubGluZWQuIEJ1dCBzaW5jZSBgbWVtb3J5X3BlYWtfd3JpdGVgIChhbmQgYHN3YXBfcGVha193cml0ZWApIGV4cGxpY2l0bHkgY2FsbCBpdCwgZnV6emluZyBlaXRoZXIgb2YgdGhvc2Ugd2lsbCBlZmZlY3RpdmVseSBmdXp6IGBwZWFrX3dyaXRlYCBhcyB3ZWxsLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKT2theSwgdGhhdCYjMzk7cyBldmVyeXRoaW5nLiBUaW1lIHRvIHNldCB1cCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NHUk9VUFMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7bWVtb3J5X3BlYWtfd3JpdGUmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3Nob3cmIzM0OywKICAgICYjMzQ7c3dhcF9wZWFrX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0dST1VQUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X3BlYWtfc2hvdyYjMzQ7LAogICAgJiMzNDttZW1vcnlfcGVha193cml0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3BlYWtfc2hvdyYjMzQ7LAogICAgJiMzNDtzd2FwX3BlYWtfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNncm91cCB2MiBtZW1vcnkgY29udHJvbGxlciBieSBhZGRpbmcgbG9ja3MgdG8gYG1lbW9yeV9wZWFrX3Nob3dgIGFuZCBgc3dhcF9wZWFrX3Nob3dgLCBhbmQgZml4aW5nIGEgYnVnIGluIGBwZWFrX3dyaXRlYCB3aGljaCBpcyBjYWxsZWQgYnkgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcyBieSByZWFkaW5nL3dyaXRpbmcgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgZmlsZXMuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNDowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbG9ja2luZyB0byBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfc2hvd2AgdXNpbmcgYGd1YXJkKHNwaW5sb2NrKWAsIGFuZCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHBlYWtfd3JpdGVgIHRvIHVzZSB0aGUgb2xkIHdhdGVybWFyayB2YWx1ZSB3aGVuIHVwZGF0aW5nIHBlZXIgY29udGV4dHMuIEFsbCB2YXJpYWJsZXMgaW50cm9kdWNlZCAoYG9sZF93YXRlcm1hcmtgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGFuZCBsb2dpYyBpc3N1ZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDVlNzZiMmM3NjU2MDFkN2FlNjk3YmViYjQxZTg0OTczYTFjYWE2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDA0OjA0OjI0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDE3ZGExZjQzYjdkM2IuLjU5MzIwNDZjNjM3ZGMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTQ3MTQsNiAmIzQzOzQ3MTQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTsKIAomIzQzOwlndWFyZChzcGlubG9jaykoJmFtcDttZW1jZy0mZ3Q7cGVha3NfbG9jayk7CiAJcmV0dXJuIHBlYWtfc2hvdyhzZiwgdiwgJmFtcDttZW1jZy0mZ3Q7bWVtb3J5KTsKIH0KIApAQCAtNDc0Myw3ICYjNDM7NDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJCQkgIGxvZmZfdCBvZmYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjLAogCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICp3YXRjaGVycykKIHsKLQl1bnNpZ25lZCBsb25nIHVzYWdlOwomIzQzOwl1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrOwogCXN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqcGVlcl9jdHg7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTsKIAlzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpOwpAQCAtNDc1MSwxMSAmIzQzOzQ3NTIsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKIAlzcGluX2xvY2soJmFtcDttZW1jZy0mZ3Q7cGVha3NfbG9jayk7CiAKIAl1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBjKTsKJiM0MzsJb2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy0mZ3Q7bG9jYWxfd2F0ZXJtYXJrKTsKIAlXUklURV9PTkNFKHBjLSZndDtsb2NhbF93YXRlcm1hcmssIHVzYWdlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KQotCQlpZiAodXNhZ2UgJmd0OyBwZWVyX2N0eC0mZ3Q7dmFsdWUpCi0JCQlXUklURV9PTkNFKHBlZXJfY3R4LSZndDt2YWx1ZSwgdXNhZ2UpOwomIzQzOwkJaWYgKHBlZXJfY3R4ICE9IG9mcCAmYW1wOyZhbXA7IG9sZF93YXRlcm1hcmsgJmd0OyBwZWVyX2N0eC0mZ3Q7dmFsdWUpCiYjNDM7CQkJV1JJVEVfT05DRShwZWVyX2N0eC0mZ3Q7dmFsdWUsIG9sZF93YXRlcm1hcmspOwogCiAJLyogaW5pdGlhbCB3cml0ZSwgcmVnaXN0ZXIgd2F0Y2hlciAqLwogCWlmIChvZnAtJmd0O3ZhbHVlID09IE9GUF9QRUFLX1VOU0VUKQpAQCAtNTg1OSw2ICYjNDM7NTg2MSw3IEBAIHN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTsKIAomIzQzOwlndWFyZChzcGlubG9jaykoJmFtcDttZW1jZy0mZ3Q7cGVha3NfbG9jayk7CiAJcmV0dXJuIHBlYWtfc2hvdyhzZiwgdiwgJmFtcDttZW1jZy0mZ3Q7c3dhcCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDgKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogOTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyB0aGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGNoZWNraW5nLiBJdCYjMzk7cyBhZGRpbmcgYGd1YXJkKHNwaW5sb2NrKSgmYW1wO21lbWNnLSZndDtwZWFrc19sb2NrKTtgIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgd2hpY2ggaXMgZ29vZDsgaXQgZXhwbGljaXRseSBhZGRyZXNzZXMgY29uY3VycmVuY3kgaXNzdWVzIHdpdGggdGhlIHBlYWsgdmFsdWVzLiBUaGVuLCBpbiBgcGVha193cml0ZWAsIHRoZXJlJiMzOTtzIGEgY2hhbmdlIGluIGhvdyBgcGVlcl9jdHgtJmd0O3ZhbHVlYCBpcyB1cGRhdGVkLgoKTGV0JiMzOTtzIGxvb2sgbW9yZSBjbG9zZWx5IGF0IHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAuIFdlJiMzOTtyZSBub3cgdXNpbmcgYG9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtJmd0O2xvY2FsX3dhdGVybWFyayk7YCBhbmQgdXBkYXRpbmcgYHBlZXJfY3R4LSZndDt2YWx1ZWAgd2l0aCBgb2xkX3dhdGVybWFya2AgaW5zdGVhZCBvZiBgdXNhZ2VgIGlmIGBwZWVyX2N0eCAhPSBvZnAgJmFtcDsmYW1wOyBvbGRfd2F0ZXJtYXJrICZndDsgcGVlcl9jdHgtJmd0O3ZhbHVlYC4KCk15IGFuYWx5c2lzIGluZGljYXRlcyB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGhlcmUuIFRoZSB2YXJpYWJsZXMgYHVzYWdlYCBhbmQgYG9sZF93YXRlcm1hcmtgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBgdXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7YCBhbmQgYG9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtJmd0O2xvY2FsX3dhdGVybWFyayk7YC4gSXQmIzM5O3MgYWxsIGFib3V0IGxvY2tpbmcgYW5kIGNvcnJlY3RseSB1cGRhdGluZyB0aGUgcGVhayB2YWx1ZXMg4oCTIGEgY29uY3VycmVuY3kvbG9naWMgYnVnIGZpeC4gS0FTQU4sIExPQ0tERVAsIGFuZCBzaW1pbGFyIHRvb2xzIG1pZ2h0IGNhdGNoIGNvbmN1cnJlbmN5IGlzc3VlcywgYnV0IEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IHJpc2tzIGhlcmUuCgpSZS1yZXZpZXdpbmcgdGhlIHBhdGNoIGNvbmZpcm1zIHRoaXM6IHRoZSBsb2NrIGlzIGFkZGVkIHRvIHRoZSBgc2hvd2AgZnVuY3Rpb25zLCBhbmQgdGhlIGxvZ2ljIGNoYW5nZSBpbiBgcGVha193cml0ZWAgY29ycmVjdGx5IHVzZXMgdGhlIG9sZCB2YWx1ZSBhbmQgaXRzIGNvbXBhcmlzb24uCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgc2FmZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBOZWVkc0tNU0FOID0gZmFsc2UuIEkmIzM5O20gc2F0aXNmaWVkIGFuZCBJJiMzOTtsbCBwcm9jZWVkIHdpdGggY2FsbGluZyBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNDoyNi4zODcxNzgxMjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0NzM4OTY0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfcGVha19zaG93XCIsXG4gICAgXCJtZW1vcnlfcGVha193cml0ZVwiLFxuICAgIFwic3dhcF9wZWFrX3Nob3dcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDQ6MjYuMzg3MTkzMDk3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcwMDM2MjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDVlNzZiMmM3NjU2MDFkN2FlNjk3YmViYjQxZTg0OTczYTFjYWE2NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwNDowNDoyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC00NzE0LDYgKzQ3MTQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcXG4gXFxuK1xcdGd1YXJkKHNwaW5sb2NrKShcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbiBcXHRyZXR1cm4gcGVha19zaG93KHNmLCB2LCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSk7XFxuIH1cXG4gXFxuQEAgLTQ3NDMsNyArNDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXFxuIFxcdFxcdFxcdCAgbG9mZl90IG9mZiwgc3RydWN0IHBhZ2VfY291bnRlciAqcGMsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyB1c2FnZTtcXG4rXFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgb2xkX3dhdGVybWFyaztcXG4gXFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG4gXFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTtcXG5AQCAtNDc1MSwxMSArNDc1MiwxMiBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNm1lbWNnLVxcdTAwM2VwZWFrc19sb2NrKTtcXG4gXFxuIFxcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xcbitcXHRvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xcbiBcXHRXUklURV9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxcbi1cXHRcXHRpZiAodXNhZ2UgXFx1MDAzZSBwZWVyX2N0eC1cXHUwMDNldmFsdWUpXFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UocGVlcl9jdHgtXFx1MDAzZXZhbHVlLCB1c2FnZSk7XFxuK1xcdFxcdGlmIChwZWVyX2N0eCAhPSBvZnAgXFx1MDAyNlxcdTAwMjYgb2xkX3dhdGVybWFyayBcXHUwMDNlIHBlZXJfY3R4LVxcdTAwM2V2YWx1ZSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShwZWVyX2N0eC1cXHUwMDNldmFsdWUsIG9sZF93YXRlcm1hcmspO1xcbiBcXG4gXFx0LyogaW5pdGlhbCB3cml0ZSwgcmVnaXN0ZXIgd2F0Y2hlciAqL1xcbiBcXHRpZiAob2ZwLVxcdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVClcXG5AQCAtNTg1OSw2ICs1ODYxLDcgQEAgc3RhdGljIGludCBzd2FwX3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Moc2VxX2NzcyhzZikpO1xcbiBcXG4rXFx0Z3VhcmQoc3BpbmxvY2spKFxcdTAwMjZtZW1jZy1cXHUwMDNlcGVha3NfbG9jayk7XFxuIFxcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA0OjI3Ljk1ODE3Mjg4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTEzNTQ5ODk0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfcGVha19zaG93XCIsXG4gICAgXCJtZW1vcnlfcGVha193cml0ZVwiLFxuICAgIFwic3dhcF9wZWFrX3Nob3dcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDVlNzZiMmM3NjU2MDFkN2FlNjk3YmViYjQxZTg0OTczYTFjYWE2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA0OjA0OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00NzE0LDYgKzQ3MTQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbitcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG4gfVxuIFxuQEAgLTQ3NDMsNyArNDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XG4rXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4gXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuQEAgLTQ3NTEsMTEgKzQ3NTIsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbiBcdHNwaW5fbG9jayhcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcbiBcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xuK1x0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuIFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuLVx0XHRpZiAodXNhZ2UgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuLVx0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIHVzYWdlKTtcbitcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4rXHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgb2xkX3dhdGVybWFyayk7XG4gXG4gXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXG4gXHRpZiAob2ZwLVx1MDAzZXZhbHVlID09IE9GUF9QRUFLX1VOU0VUKVxuQEAgLTU4NTksNiArNTg2MSw3IEBAIHN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbitcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA0OjI3Ljk1ODE3NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTY5MTUyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBNZW1vcnkgQ29udHJvbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AsIHNwZWNpZmljYWxseS4gVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGUgYWRkaXRpb24gb2YgYGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtgIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBwZWFrIHN0YXRpc3RpY3Mgd2l0aCBhIHNwaW5sb2NrLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgZm9yIGNvbmN1cnJlbmN5LiBUaGV5J3JlIGFsc28gZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gYG9sZF93YXRlcm1hcmtgIGFuZCBgcGVlcl9jdHggIT0gb2ZwYCBpbiBgcGVha193cml0ZWAuIEdvdHRhIGRpZyBpbnRvIHRoYXQgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgaXNzdWUsIGJ1dCB0aGUgaW50ZW50IHNlZW1zIHRvIGJlIHRvIGNvcnJlY3QgdGhlIHBlYWsgd3JpdGUgZnVuY3Rpb25hbGl0eS5cblxuTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgZnVuY3Rpb25zIOKAkyBgbWVtb3J5X3BlYWtfc2hvd2AsIGBzd2FwX3BlYWtfc2hvd2AsIGFuZCBgcGVha193cml0ZWAg4oCTIGFyZSBldmVuIHJlYWNoYWJsZSwgeW91IGtub3c/IEl0J3MgZWFzeSB0byBnZXQgbG9zdCBpbiB0aGUgY29kZSwgYW5kIGtub3dpbmcgdGhlIGFjdHVhbCB1c2FnZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBtYWtlIHVuZGVyc3RhbmRpbmcgdGhlIHBhdGNoIHNvIG11Y2ggc2ltcGxlci4gQWgsIHJpZ2h0LCB0aGVzZSBhcmUgY2dyb3VwIHYyIG1lbW9yeSBjb250cm9sbGVyIGZ1bmN0aW9ucyDigJMgdGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBgbWVtb3J5X3BlYWtfc2hvd2AgaXMgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgdGhlIGBtZW1vcnkucGVha2AgZmlsZSwgYW5kIGBzd2FwX3BlYWtfc2hvd2AgZm9yIHRoZSBgc3dhcC5wZWFrYCBmaWxlLiBBbmQgYHBlYWtfd3JpdGVgIGhhbmRsZXMgdGhlIHdyaXRlcyB0byB0aG9zZSBmaWxlcywgbmF0dXJhbGx5LlxuXG5UaW1lIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgYG1lbWNvbnRyb2wuY2AuIEkgaGF2ZSB0byBiZSBzdXJlIGl0IGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNDozMi45MjczMzIxNTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4Mzk3MDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfcGVha19zaG93XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00Njk4PXN0YXRpYyBpbnQgcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ3MTItXFxubW0vbWVtY29udHJvbC5jOjQ3MTM6c3RhdGljIGludCBtZW1vcnlfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxubW0vbWVtY29udHJvbC5jLTQ3MTQte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwODM9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA5My1cXHRcXHQucmVsZWFzZSA9IHBlYWtfcmVsZWFzZSxcXG5tbS9tZW1jb250cm9sLmM6NTA5NDpcXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfcGVha19zaG93LFxcbm1tL21lbWNvbnRyb2wuYy01MDk1LVxcdFxcdC53cml0ZSA9IG1lbW9yeV9wZWFrX3dyaXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNDozNS4zMTEzMDgzNTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY2Nzk3NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgdGhlIGtleSBoZXJlIGlzIGBDT05GSUdfTUVNQ0dgLiBUaW1lIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBpcyBkZWZpbmVkLCBzbyBpZiBgQ09ORklHX01FTUNHYCBpcyBkcml2aW5nIHNvbWV0aGluZywgdGhhdCdzIHdoZXJlIEknbGwgc2VlIGl0LiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGluZGljYXRpb24gdGhlcmUgaWYgSSdtIG9uIHRoZSByaWdodCB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA0OjM4LjM3ODExMDExM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQzODU4NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNvbnRyb2wub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGUtMjktS0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxuLS1cXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDQ6NDAuOTIxOTc0NTc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTU2MDEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBwZWFrX3dyaXRlYCBhbmQgQ09ORklHX01FTUNHKipcblxuUmlnaHQsIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGVhZGluZyBtZSB0byBiZWxpZXZlIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjb2RlLiBOb3csIEkgd2FudCB0byBkaXZlIGludG8gdGhlIGBwZWFrX3dyaXRlYCBmdW5jdGlvbiBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIElzIHRoaXMgYSBsb2NhbCBoZWxwZXIgZnVuY3Rpb24gd2l0aGluIGEgc3BlY2lmaWMgZmlsZSwgb3IgaXMgaXQgZXhwb3NlZCBtb3JlIGJyb2FkbHk/IFVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIGlzIGNydWNpYWwgZm9yIHByb3Blcmx5IGFzc2Vzc2luZyBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gZ28gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNDo0NS45ODc1MzY3NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMjAxNTQzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZWFrX3dyaXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz00NzI5PXN0YXRpYyB2b2lkIHBlYWtfcmVsZWFzZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDc0Mi1cXG5tbS9tZW1jb250cm9sLmM6NDc0MzpzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbm1tL21lbWNvbnRyb2wuYy00NzQ0LVxcdFxcdFxcdCAgbG9mZl90IG9mZiwgc3RydWN0IHBhZ2VfY291bnRlciAqcGMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDc3MS1cXG5tbS9tZW1jb250cm9sLmM6NDc3MjpzdGF0aWMgc3NpemVfdCBtZW1vcnlfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5tbS9tZW1jb250cm9sLmMtNDc3My1cXHRcXHRcXHRcXHQgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00Nzc2LVxcbm1tL21lbWNvbnRyb2wuYzo0Nzc3OlxcdHJldHVybiBwZWFrX3dyaXRlKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSxcXG5tbS9tZW1jb250cm9sLmMtNDc3OC1cXHRcXHRcXHQgIFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X3BlYWtzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDgzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwOTQtXFx0XFx0LnNlcV9zaG93ID0gbWVtb3J5X3BlYWtfc2hvdyxcXG5tbS9tZW1jb250cm9sLmM6NTA5NTpcXHRcXHQud3JpdGUgPSBtZW1vcnlfcGVha193cml0ZSxcXG5tbS9tZW1jb250cm9sLmMtNTA5Ni1cXHR9LFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU4NjA9c3RhdGljIGludCBzd2FwX3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NjctXFxubW0vbWVtY29udHJvbC5jOjU4Njg6c3RhdGljIHNzaXplX3Qgc3dhcF9wZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbm1tL21lbWNvbnRyb2wuYy01ODY5LVxcdFxcdFxcdCAgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4NzItXFxubW0vbWVtY29udHJvbC5jOjU4NzM6XFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCxcXG5tbS9tZW1jb250cm9sLmMtNTg3NC1cXHRcXHRcXHQgIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcF9wZWFrcyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTkzNz1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTk2MC1cXHRcXHQuc2VxX3Nob3cgPSBzd2FwX3BlYWtfc2hvdyxcXG5tbS9tZW1jb250cm9sLmM6NTk2MTpcXHRcXHQud3JpdGUgPSBzd2FwX3BlYWtfd3JpdGUsXFxubW0vbWVtY29udHJvbC5jLTU5NjItXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDQ6NDguMzA5NTU2NTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjkzMjA2Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDZ3JvdXAgTWVtb3J5L1N3YXAgUGVhayBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtZW1vcnkgYW5kIHN3YXAgcGVhayBmdW5jdGlvbnMgd2l0aGluIHRoZSBjZ3JvdXAgY29kZS4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHdhcywgXCJIbW0sIGBtZW1vcnlfcGVha193cml0ZWAsIGBtZW1vcnlfcGVha19zaG93YCwgYHN3YXBfcGVha193cml0ZWAsIGFuZCBgc3dhcF9wZWFrX3Nob3dgIGFyZSBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCdzIGEgcmVkIGZsYWcgaW4gbW9zdCBzY2VuYXJpb3MsIGluZGljYXRpbmcgdGhleSBtaWdodCBiZSBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGV5IGFyZSB1c2VkIGFzIGNhbGxiYWNrcyB3aXRoaW4gYGNmdHlwZWAsIHNvIHRoZXkncmUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGNncm91cGZzLiBUaGF0J3MgdW51c3VhbCBhbmQgaW1wb3J0YW50LlwiXG5cbk15IGZpcnN0IGluc3RpbmN0IHdhcyB0byBzY2FuIGZvciBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMg4oCTIG1vcmUgcm9idXN0IGVudHJ5IHBvaW50cy4gVGhlIHByb21wdCBzdHJlc3NlcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMuIEJ1dCB0aGUgcHJvbXB0IGFsc28gaW5jbHVkZXMgdGhlIGNyaXRlcmlhIHRoYXQgZnVuY3Rpb25zIHdpdGggZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBhcmUgbm90IGlubGluZWQuXG5cblRoZW4gSSByZWFsaXplZCwgaG9sZCBvbiwgZXZlbiB0aG91Z2ggdGhleSdyZSBgc3RhdGljYCwgYmVjYXVzZSB0aGVpciBhZGRyZXNzZXMgYXJlICp0YWtlbiogd2l0aGluIGBjZnR5cGVgIChhcyBjYWxsYmFja3MpLCB0aGV5J3JlICpub3QqIGJlaW5nIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGV5IGFyZSByZWFjaGFibGUgdmlhIHVzZXJzcGFjZS4gVGhleSBhcmUgbm90IGlubGluZWQhXG5cblRoZXJlZm9yZSwgSSB0aGluayB0aGUgbW9zdCBhcHByb3ByaWF0ZSBhY3Rpb24gaXMgdG8gbGlzdCB0aGVzZSBmb3VyIGZ1bmN0aW9uczogYG1lbW9yeV9wZWFrX3dyaXRlYCwgYG1lbW9yeV9wZWFrX3Nob3dgLCBgc3dhcF9wZWFrX3dyaXRlYCwgYW5kIGBzd2FwX3BlYWtfc2hvd2AuXG5cbkkgYWxzbyBjaGVja2VkIGZvciBmdW5jdGlvbnMgbGlrZSBgcGVha193cml0ZWAuIEl0J3Mgc3RhdGljLCBhbmQgaXRzIGFkZHJlc3MgKmlzbid0KiB0YWtlbiwgc28gaXQgaXMgcHJvYmFibHkgaW5saW5lZC5cblxuSXQgc2VlbXMgbGlrZSBgQ09ORklHX01FTUNHYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLiBJJ2xsIGRvdWJsZSBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQsIGJ1dCBJIHN1c3BlY3QgdGhhdCBpcyBhbGwgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA0OjU2LjYwMjc2NTQ5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwMjE1MTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDQ6NTguOTA0OTIyMzkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDg2NDQzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgTWVtb3J5IENvbnRyb2xsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUga2V5IGNvbmZpZyB2YXJpYWJsZSBoZXJlIGlzIGBNRU1DR2AuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyBpdCdzIGRlYWxpbmcgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIGluIGBwZWFrX3dyaXRlYCB3aGlsZSBzaW11bHRhbmVvdXNseSBhZGRpbmcgbG9ja3MgdG8gdGhlIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCBmdW5jdGlvbnMgd2l0aGluIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zLCBiZWluZyBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aHJvdWdoIGNncm91cGZzIGJ5IGludGVyYWN0aW5nIHdpdGggdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLCBkaXJlY3RseSBpbXBhY3QgdGhlIG1lbW9yeSBjb250cm9sbGVyJ3MgZnVuY3Rpb25hbGl0eS4gVGhhdCBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXRcIiB0byBtZS4gQW55IGNoYW5nZSBhZmZlY3RpbmcgdXNlci1hY2Nlc3NpYmxlIGludGVyZmFjZXMsIGVzcGVjaWFsbHkgb25lcyByZWxhdGVkIHRvIHBlYWsgbWVtb3J5IHVzYWdlLCBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBwcmV2ZW50IHBvdGVudGlhbCBleHBsb2l0cy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gd2FudCB0byBmb2N1cyBvbjogYG1lbW9yeV9wZWFrX3dyaXRlYCwgYG1lbW9yeV9wZWFrX3Nob3dgLCBgc3dhcF9wZWFrX3dyaXRlYCwgYW5kIGBzd2FwX3BlYWtfc2hvd2AuIEkgc2hvdWxkIGFsc28gcXVpY2tseSBjaGVjayBpZiBgc3dhcF9wZWFrX3Nob3dgIGlzIGFsc28gY29uZGl0aW9uYWwgb24gb3RoZXIgY29uZmlncywgc3VjaCBhcyBgQ09ORklHX1NXQVBgLiBJdCB3b3VsZCBiZSBhIHNpbGx5IG92ZXJzaWdodCBub3QgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6MDYuMDEzNTY4OTg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUxNjg3NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfZmlsZXNcXFxcW1xcXFxdXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01OTIzPXN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTkzNi1cXG5tbS9tZW1jb250cm9sLmM6NTkzNzpzdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTU5MzgtXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTYxMzI9c3RhdGljIHNzaXplX3QgenN3YXBfd3JpdGViYWNrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTQ4LVxcbm1tL21lbWNvbnRyb2wuYzo2MTQ5OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTYxNTAtXFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTowOC42NjUyNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMTMzMDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYHN3YXBfZmlsZXNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGludmVzdGlnYXRlIHRoZSB1c2FnZSBvZiB0aGlzIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgY29kZWJhc2UuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGRvaW5nIGEgcXVpY2sgc2VhcmNoIGZvciBhbGwgdGhlIGluc3RhbmNlcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyByb2xlIGFuZCBkZXBlbmRlbmNpZXMuIE9uY2UgSSd2ZSBnb3QgdGhhdCBvdmVydmlldywgSSBjYW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjYWxscyB0aGVtc2VsdmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbnRleHQ7IHdoYXQgZGF0YSBpcyBiZWluZyBwYXNzZWQsIHdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGNsYXNzZXMgYXJlIGludGVyYWN0aW5nLCBhbmQgd2hhdCdzIHRoZSBpbnRlbmRlZCBvdXRjb21lIG9mIHRoaXMgXCJzd2FwcGluZ1wiLiBJIGV4cGVjdCB0aGF0IHRoZSBjYWxsaW5nIGNvZGUgd2lsbCBsaWtlbHkgcHJvdmlkZSBjbHVlcyBhYm91dCB3aGF0IHRoZSBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBhY2hpZXZlLiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBhbmQgbWFraW5nIGl0IHNhZmUgdG8gbW9kaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTkwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6MTIuNDg2NTk1NjAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTIwMjUzNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfZmlsZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTU5MjM9c3RhdGljIGludCBzd2FwX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01OTM2LVxcbm1tL21lbWNvbnRyb2wuYzo1OTM3OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG5tbS9tZW1jb250cm9sLmMtNTkzOC1cXHR7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjEzMj1zdGF0aWMgc3NpemVfdCB6c3dhcF93cml0ZWJhY2tfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxNDgtXFxubW0vbWVtY29udHJvbC5jOjYxNDk6c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcXG5tbS9tZW1jb250cm9sLmMtNjE1MC1cXHR7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjE3MD1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxNzQtXFxubW0vbWVtY29udHJvbC5jOjYxNzU6XFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcXG5tbS9tZW1jb250cm9sLmMtNjE3Ni0jaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjE3OS0jaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jOjYxODA6XFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jLTYxODEtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjE1LjYwNjg1MzM3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTA1Mzc1MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgU3dhcCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgQ2dyb3VwIFN3YXAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBgbWVtX2Nncm91cF9zd2FwX2luaXRgIGZ1bmN0aW9uIGlzIGV2ZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgcHJvcGVyIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIHN3YXAgc3BhY2UgbWFuYWdlbWVudCwgYnV0IHdpdGhvdXQgYENPTkZJR19TV0FQYCBiZWluZyBlbmFibGVkLCB0aGVyZSdzIG5vIHdheSBpdCdzIGdvaW5nIHRvIGJlIGF2YWlsYWJsZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5LiBJIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAgZnVuY3Rpb24gaXMgY29udGluZ2VudCB1cG9uIGEgcHJvcGVyIHN3YXAgY29uZmlndXJhdGlvbi4gSW4gb3JkZXIgdG8gZnVuY3Rpb24sIGl0IG5lZWRzIGBDT05GSUdfU1dBUGAgdG8gYmUgZW5hYmxlZC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5IGJlZm9yZSBJIGxvb2sgYXQgYW55dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjE4LjcxMjIzMTM0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NzU0ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NjE0OT1zdGF0aWMgc3RydWN0IGNmdHlwZSB6c3dhcF9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYxNjktXFxubW0vbWVtY29udHJvbC5jOjYxNzA6c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG5tbS9tZW1jb250cm9sLmMtNjE3MS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjE4My19XFxubW0vbWVtY29udHJvbC5jOjYxODQ6c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcXG5tbS9tZW1jb250cm9sLmMtNjE4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6MjEuMTg5Nzg0MTQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTE0MTgyODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uOiBBIFJvdXRpbmUgRGlhZ25vc3RpYyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gYSBxdWljayBjaGVjay4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgYHN3YXBfZmlsZXNgIGZ1bmN0aW9uIGlzIHByb3Blcmx5IGd1YXJkZWQgYnkgdGhlIGBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUsIGVzcGVjaWFsbHkgaW4gYSBjb2RlYmFzZSB3aGVyZSBmZWF0dXJlcyBjYW4gYmUgc2VsZWN0aXZlbHkgZW5hYmxlZCBhbmQgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLiBJdCdzIGFsbW9zdCBzZWNvbmQgbmF0dXJlIOKAkyBhIHF1aWNrIG1lbnRhbCBzY2FuIHRvIGVuc3VyZSB0aGUgc3dhcCBmdW5jdGlvbmFsaXR5IGlzbid0IGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvciBhcHBsaWNhdGlvbiB1bm5lY2Vzc2FyaWx5IGlmIHRoZSBzd2FwIHN1YnN5c3RlbSBpcyBkaXNhYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gV2UgZGVmaW5pdGVseSBkb24ndCB3YW50IGFueSBzdXJwcmlzZXMgbGF0ZXIuIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBObyBzdXJwcmlzZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNToyNC40NDEyMDU0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjgyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9Mzc4PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDA2LVxcdE5SX1NFQ09OREFSWV9QQUdFVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjQwNzojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNDA4LVxcdE5SX1NXQVBDQUNIRSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjEwLVxcdFBHTEFaWUZSRUVELFxcbm1tL21lbWNvbnRyb2wuYzo2MTE6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTYxMi1cXHRTV1BJTl9aRVJPLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjA5LVxcdHsgXFxcImZpbGVfd3JpdGViYWNrXFxcIixcXHRcXHROUl9XUklURUJBQ0tcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNjEwOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNjExLVxcdHsgXFxcInN3YXBjYWNoZWRcXFwiLFxcdFxcdFxcdE5SX1NXQVBDQUNIRVxcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTY4ND1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU3MTktXFxubW0vbWVtY29udHJvbC5jOjU3MjA6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTU3MjEtLyoqXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjE4ND1zdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xcbm1tL21lbWNvbnRyb2wuYy02MTg1LVxcbm1tL21lbWNvbnRyb2wuYzo2MTg2OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xcbm1tL21lbWNvbnRyb2wuYy02MTg3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNToyNC41MDM0OTY5MTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NDczMDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIFN3YXAgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCAqYG1tL21lbWNvbnRyb2wuYzo2MTg2OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL2AqIOKAkyB0aGF04oCZcyBhIGZhbWlsaWFyIG1hcmtlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4dGVudCBvZiB0aGUgY29kZSBjb250cm9sbGVkIGJ5IGBDT05GSUdfU1dBUGAgaW4gdGhpcyBmaWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoYXQgYCNpZmRlZiBDT05GSUdfU1dBUGAgYmxvY2sgKmJlZ2lucyouIEknbSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoYXQgc3RhcnQgcG9pbnQuIEVzc2VudGlhbGx5IEkgd2FudCB0byBrbm93IHdoYXQgY29kZSBpcyBjb25kaXRpb25hbCBvbiBzd2FwIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNToyNy43ODgyMzAyMTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzEwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTcxMDpcXHRcXHRtZW1jZ19zaXplID0gc3RydWN0X3NpemVfdChzdHJ1Y3QgbWVtX2Nncm91cCwgbm9kZWluZm8sIG5yX25vZGVfaWRzKTtcXG41NzExOlxcdFxcdG1lbWNnX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKFxcXCJtZW1fY2dyb3VwXFxcIiwgbWVtY2dfc2l6ZSwgMCxcXG41NzEyOlxcdFxcdFxcdFxcdFxcdFxcdCBTTEFCX1BBTklDIHwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTtcXG41NzEzOlxcdFxcbjU3MTQ6XFx0XFx0bWVtY2dfcG5fY2FjaGVwID0gS01FTV9DQUNIRShtZW1fY2dyb3VwX3Blcl9ub2RlLFxcbjU3MTU6XFx0XFx0XFx0XFx0XFx0ICAgICBTTEFCX1BBTklDIHwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcXG41NzE2OlxcdFxcbjU3MTc6XFx0XFx0cmV0dXJuIDA7XFxuNTcxODpcXHR9XFxuNTcxOTpcXHRcXG41NzIwOlxcdCNpZmRlZiBDT05GSUdfU1dBUFxcbjU3MjE6XFx0LyoqXFxuNTcyMjpcXHQgKiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwIC0gdHJ5IGNoYXJnaW5nIHN3YXAgc3BhY2UgZm9yIGEgZm9saW9cXG41NzIzOlxcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgYWRkZWQgdG8gc3dhcFxcbjU3MjQ6XFx0ICpcXG41NzI1OlxcdCAqIFRyeSB0byBjaGFyZ2UgQGZvbGlvJ3MgbWVtY2cgZm9yIHRoZSBzd2FwIHNwYWNlIGF0IGZvbGlvLVxcdTAwM2Vzd2FwLlxcbjU3MjY6XFx0ICpcXG41NzI3OlxcdCAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG9uIGZhaWx1cmUuXFxuNTcyODpcXHQgKi9cXG41NzI5OlxcdGludCBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuNTczMDpcXHR7XFxuNTczMTpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuNTczMjpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbjU3MzM6XFx0XFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcXG41NzM0OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41NzM1OlxcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG41NzM2OlxcdFxcbjU3Mzc6XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG41NzM4OlxcdFxcdFxcdHJldHVybiAwO1xcbjU3Mzk6XFx0XFxuNTc0MDpcXHRcXHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcXG41NzQxOlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghb2JqY2csIGZvbGlvKTtcXG41NzQyOlxcdFxcdGlmICghb2JqY2cpXFxuNTc0MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG41NzQ0OlxcdFxcbjU3NDU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjU3NDY6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG41NzQ3OlxcdFxcdGlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XFxuNTc0ODpcXHRcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfRkFJTCk7XFxuNTc0OTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG41NzUwOlxcdFxcdFxcdHJldHVybiAwO1xcbjU3NTE6XFx0XFx0fVxcbjU3NTI6XFx0XFxuNTc1MzpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKG1lbWNnLCBucl9wYWdlcyk7XFxuNTc1NDpcXHRcXHQvKiBtZW1jZyBpcyBwaW5lZCBieSBtZW1jZyBJRC4gKi9cXG41NzU1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjU3NTY6XFx0XFxuNTc1NzpcXHRcXHRpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykgXFx1MDAyNlxcdTAwMjZcXG41NzU4OlxcdFxcdCAgICAhcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBucl9wYWdlcywgXFx1MDAyNmNvdW50ZXIpKSB7XFxuNTc1OTpcXHRcXHRcXHRtZW1jZ19tZW1vcnlfZXZlbnQobWVtY2csIE1FTUNHX1NXQVBfTUFYKTtcXG41NzYwOlxcdFxcdFxcdG1lbWNnX21lbW9yeV9ldmVudChtZW1jZywgTUVNQ0dfU1dBUF9GQUlMKTtcXG41NzYxOlxcdFxcdFxcdG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9wdXQobWVtY2csIG5yX3BhZ2VzKTtcXG41NzYyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjU3NjM6XFx0XFx0fVxcbjU3NjQ6XFx0XFx0bW9kX21lbWNnX3N0YXRlKG1lbWNnLCBNRU1DR19TV0FQLCBucl9wYWdlcyk7XFxuNTc2NTpcXHRcXG41NzY2OlxcdFxcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XFxuNTc2NzpcXHRcXHRfX3N3YXBfY2dyb3VwX3NldChjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGZvbGlvLVxcdTAwM2Vzd2FwKSwgbnJfcGFnZXMsXFxuNTc2ODpcXHRcXHRcXHRcXHQgIG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChtZW1jZykpO1xcbjU3Njk6XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuNTc3MDpcXHRcXG41NzcxOlxcdFxcdHJldHVybiAwO1xcbjU3NzI6XFx0fVxcbjU3NzM6XFx0XFxuNTc3NDpcXHQvKipcXG41Nzc1OlxcdCAqIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2Ugc3dhcCBzcGFjZVxcbjU3NzY6XFx0ICogQGlkOiBjZ3JvdXAgaWQgdG8gdW5jaGFyZ2VcXG41Nzc3OlxcdCAqIEBucl9wYWdlczogdGhlIGFtb3VudCBvZiBzd2FwIHNwYWNlIHRvIHVuY2hhcmdlXFxuNTc3ODpcXHQgKi9cXG41Nzc5OlxcdHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG41NzgwOlxcdHtcXG41NzgxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41NzgyOlxcdFxcbjU3ODM6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjU3ODQ6XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZChpZCk7XFxuNTc4NTpcXHRcXHRpZiAobWVtY2cpIHtcXG41Nzg2OlxcdFxcdFxcdGlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkge1xcbjU3ODc6XFx0XFx0XFx0XFx0aWYgKGRvX21lbXN3X2FjY291bnQoKSlcXG41Nzg4OlxcdFxcdFxcdFxcdFxcdHBhZ2VfY291bnRlcl91bmNoYXJnZShcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbXN3LCBucl9wYWdlcyk7XFxuNTc4OTpcXHRcXHRcXHRcXHRlbHNlXFxuNTc5MDpcXHRcXHRcXHRcXHRcXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBucl9wYWdlcyk7XFxuNTc5MTpcXHRcXHRcXHR9XFxuNTc5MjpcXHRcXHRcXHRtb2RfbWVtY2dfc3RhdGUobWVtY2csIE1FTUNHX1NXQVAsIC1ucl9wYWdlcyk7XFxuNTc5MzpcXHRcXHRcXHRtZW1fY2dyb3VwX3ByaXZhdGVfaWRfcHV0KG1lbWNnLCBucl9wYWdlcyk7XFxuNTc5NDpcXHRcXHR9XFxuNTc5NTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG41Nzk2OlxcdH1cXG41Nzk3OlxcdFxcbjU3OTg6XFx0bG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG41Nzk5OlxcdHtcXG41ODAwOlxcdFxcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XFxuNTgwMTpcXHRcXG41ODAyOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgZG9fbWVtc3dfYWNjb3VudCgpKVxcbjU4MDM6XFx0XFx0XFx0cmV0dXJuIG5yX3N3YXBfcGFnZXM7XFxuNTgwNDpcXHRcXHRmb3IgKDsgIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZyk7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKVxcbjU4MDU6XFx0XFx0XFx0bnJfc3dhcF9wYWdlcyA9IG1pbl90KGxvbmcsIG5yX3N3YXBfcGFnZXMsXFxuNTgwNjpcXHRcXHRcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXN3YXAubWF4KSAtXFxuNTgwNzpcXHRcXHRcXHRcXHRcXHQgICAgICBwYWdlX2NvdW50ZXJfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXApKTtcXG41ODA4OlxcdFxcdHJldHVybiBucl9zd2FwX3BhZ2VzO1xcbjU4MDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNToyNy43ODg0NDc4NzNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODEzNjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnMuXG5cbioqQW5hbHl6aW5nIE1lbW9yeSBQZWFrIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGF0IHRoZSBgc3dhcF9wZWFrX3Nob3dgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYCBmdW5jdGlvbnMgYXJlIGV4cGxpY2l0bHkgZ292ZXJuZWQgYnkgdGhlIGBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGV5IGFyZSByZWxhdGVkIHRvIHN3YXAgbWVtb3J5LCBhZnRlciBhbGwuIEJ1dCwgSSdtIG5vdyBjdXJpb3VzIGFib3V0IHRoZSBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBtZW1vcnlfcGVha193cml0ZWAgZnVuY3Rpb25zLiBUaGUgZmFjdCB0aGF0IHRoZXkgKmFyZW4ndCogdGllZCB0byBgQ09ORklHX1NXQVBgIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlc2UgYW5kIHVuZGVyc3RhbmQgaG93IHRoZWlyIGluY2x1c2lvbi9leGNsdXNpb24gZnJvbSBidWlsZCBjb25maWd1cmF0aW9ucyBpcyBtYW5hZ2VkIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhleSdyZSBhdmFpbGFibGUsIHNpbmNlIHRoZXkncmUgY2xlYXJseSBub3QgZGlyZWN0bHkgbGlua2VkIHRvIHN3YXAgbWVtb3J5IGluIHRoZSBzYW1lIHdheS4gV2hhdCBkcml2ZXMgdGhlaXIgZW5hYmxlbWVudD8gTGV0J3MgY2hlY2sgdGhvc2UgZnVuY3Rpb25zIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6MzEuNDg2NTg3MjQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3MDA6XFx0XFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKHNmLVxcdTAwM2Vwcml2YXRlKTtcXG40NzAxOlxcdFxcdHU2NCBmZF9wZWFrID0gUkVBRF9PTkNFKG9mcC1cXHUwMDNldmFsdWUpLCBwZWFrO1xcbjQ3MDI6XFx0XFxuNDcwMzpcXHRcXHQvKiBVc2VyIHdhbnRzIGdsb2JhbCBvciBsb2NhbCBwZWFrPyAqL1xcbjQ3MDQ6XFx0XFx0aWYgKGZkX3BlYWsgPT0gT0ZQX1BFQUtfVU5TRVQpXFxuNDcwNTpcXHRcXHRcXHRwZWFrID0gcGMtXFx1MDAzZXdhdGVybWFyaztcXG40NzA2OlxcdFxcdGVsc2VcXG40NzA3OlxcdFxcdFxcdHBlYWsgPSBtYXgoZmRfcGVhaywgUkVBRF9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmspKTtcXG40NzA4OlxcdFxcbjQ3MDk6XFx0XFx0c2VxX3ByaW50ZihzZiwgXFxcIiVsbHVcXFxcblxcXCIsIHBlYWsgKiBQQUdFX1NJWkUpO1xcbjQ3MTA6XFx0XFx0cmV0dXJuIDA7XFxuNDcxMTpcXHR9XFxuNDcxMjpcXHRcXG40NzEzOlxcdHN0YXRpYyBpbnQgbWVtb3J5X3BlYWtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbjQ3MTQ6XFx0e1xcbjQ3MTU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKHNmKSk7XFxuNDcxNjpcXHRcXG40NzE3OlxcdFxcdGd1YXJkKHNwaW5sb2NrKShcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3MTg6XFx0XFx0cmV0dXJuIHBlYWtfc2hvdyhzZiwgdiwgXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnkpO1xcbjQ3MTk6XFx0fVxcbjQ3MjA6XFx0XFxuNDcyMTpcXHRzdGF0aWMgaW50IHBlYWtfb3BlbihzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YpXFxuNDcyMjpcXHR7XFxuNDcyMzpcXHRcXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xcbjQ3MjQ6XFx0XFxuNDcyNTpcXHRcXHRvZnAtXFx1MDAzZXZhbHVlID0gT0ZQX1BFQUtfVU5TRVQ7XFxuNDcyNjpcXHRcXHRyZXR1cm4gMDtcXG40NzI3OlxcdH1cXG40NzI4OlxcdFxcbjQ3Mjk6XFx0c3RhdGljIHZvaWQgcGVha19yZWxlYXNlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZilcXG40NzMwOlxcdHtcXG40NzMxOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuNDczMjpcXHRcXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xcbjQ3MzM6XFx0XFxuNDczNDpcXHRcXHRpZiAob2ZwLVxcdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVCkge1xcbjQ3MzU6XFx0XFx0XFx0LyogZmFzdCBwYXRoIChubyB3cml0ZXMgb24gdGhpcyBmZCkgKi9cXG40NzM2OlxcdFxcdFxcdHJldHVybjtcXG40NzM3OlxcdFxcdH1cXG40NzM4OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3Mzk6XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm9mcC1cXHUwMDNlbGlzdCk7XFxuNDc0MDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3NDE6XFx0fVxcbjQ3NDI6XFx0XFxuNDc0MzpcXHRzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbjQ3NDQ6XFx0XFx0XFx0XFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcXG40NzQ1OlxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXFxuNDc0NjpcXHR7XFxuNDc0NzpcXHRcXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xcbjQ3NDg6XFx0XFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcXG40NzQ5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuNDc1MDpcXHRcXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xcbjQ3NTE6XFx0XFxuNDc1MjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1lbWNnLVxcdTAwM2VwZWFrc19sb2NrKTtcXG40NzUzOlxcdFxcbjQ3NTQ6XFx0XFx0dXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7XFxuNDc1NTpcXHRcXHRvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xcbjQ3NTY6XFx0XFx0V1JJVEVfT05DRShwYy1cXHUwMDNlbG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7XFxuNDc1NzpcXHRcXG40NzU4OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxcbjQ3NTk6XFx0XFx0XFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcXHUwMDI2XFx1MDAyNiBvbGRfd2F0ZXJtYXJrIFxcdTAwM2UgcGVlcl9jdHgtXFx1MDAzZXZhbHVlKVxcbjQ3NjA6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShwZWVyX2N0eC1cXHUwMDNldmFsdWUsIG9sZF93YXRlcm1hcmspO1xcbjQ3NjE6XFx0XFxuNDc2MjpcXHRcXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXFxuNDc2MzpcXHRcXHRpZiAob2ZwLVxcdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVClcXG40NzY0OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZvZnAtXFx1MDAzZWxpc3QsIHdhdGNoZXJzKTtcXG40NzY1OlxcdFxcbjQ3NjY6XFx0XFx0V1JJVEVfT05DRShvZnAtXFx1MDAzZXZhbHVlLCB1c2FnZSk7XFxuNDc2NzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3Njg6XFx0XFxuNDc2OTpcXHRcXHRyZXR1cm4gbmJ5dGVzO1xcbjQ3NzA6XFx0fVxcbjQ3NzE6XFx0XFxuNDc3MjpcXHRzdGF0aWMgc3NpemVfdCBtZW1vcnlfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG40NzczOlxcdFxcdFxcdFxcdFxcdCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbjQ3NzQ6XFx0e1xcbjQ3NzU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG40Nzc2OlxcdFxcbjQ3Nzc6XFx0XFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LFxcbjQ3Nzg6XFx0XFx0XFx0XFx0ICBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9wZWFrcyk7XFxuNDc3OTpcXHR9XFxuNDc4MDpcXHRcXG40NzgxOlxcdCN1bmRlZiBPRlBfUEVBS19VTlNFVFxcbjQ3ODI6XFx0XFxuNDc4MzpcXHRzdGF0aWMgaW50IG1lbW9yeV9taW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNDc4NDpcXHR7XFxuNDc4NTpcXHRcXHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLFxcbjQ3ODY6XFx0XFx0XFx0UkVBRF9PTkNFKG1lbV9jZ3JvdXBfZnJvbV9zZXEobSktXFx1MDAzZW1lbW9yeS5taW4pKTtcXG40Nzg3OlxcdH1cXG40Nzg4OlxcdFxcbjQ3ODk6XFx0c3RhdGljIHNzaXplX3QgbWVtb3J5X21pbl93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuNDc5MDpcXHRcXHRcXHRcXHRcXHRjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuNDc5MTpcXHR7XFxuNDc5MjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xcbjQ3OTM6XFx0XFx0dW5zaWduZWQgbG9uZyBtaW47XFxuNDc5NDpcXHRcXHRpbnQgZXJyO1xcbjQ3OTU6XFx0XFxuNDc5NjpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjQ3OTc6XFx0XFx0ZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgXFxcIm1heFxcXCIsIFxcdTAwMjZtaW4pO1xcbjQ3OTg6XFx0XFx0aWYgKGVycilcXG40Nzk5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjMxLjQ4NjgwNDQyNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUyNTY1MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgU3dhcCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gYWJvdXQgYENPTkZJR19TV0FQYCBiZWluZyBhY3RpdmUgaXNuJ3QgdGhlIGNhc2UgaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIHRoZW4gc2hpZnRzIHRvIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTUVNQ0dgIGFuZCBgU1dBUGAgY29uZmlndXJhdGlvbnMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkOyBJJ20gdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBtaW5pbWFsIHNldCBvZiBkZXBlbmRlbmNpZXMuIFRoZSBrZXkgaGVyZSwgb2YgY291cnNlLCBpcyB0aGF0IEknbSBjb25zaWRlcmluZyB3aGF0J3MgKm5lZWRlZCogdG8gZ2V0IGNlcnRhaW4gZnVuY3Rpb25hbGl0eSB3b3JraW5nLlxuXG5BaCwgcmlnaHQg4oCTIHRoZSBpbXBvcnRhbnQgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciBvciBub3QgYFNXQVBgIGlzIGV2ZW4gYSAqY29uZmlndXJhdGlvbiBvcHRpb24qIGF0IGFsbC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgY29ycmVjdGx5IGV4cG9zZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIGVzcGVjaWFsbHkgc2luY2UgSSdtIHRyeWluZyB0byB0ZXN0IGBzd2FwX3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBJdCdzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24uIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5IHRvIGF2b2lkIGFueSB3YXN0ZWQgZWZmb3J0IGNoYXNpbmcgZ2hvc3RzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgYnVpbGQgc3lzdGVtIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzM5LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTozNS42MzkzNzI0NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODA1Njc5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9taXBzL0tjb25maWc9MTI2Mj1jb25maWcgTUlQU19TUFJBTVxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMTI2NC1cXG5hcmNoL21pcHMvS2NvbmZpZzoxMjY1OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9taXBzL0tjb25maWctMTI2Ni1cXHRib29sXFxuLS1cXG5hcmNoL3NoL0tjb25maWc9MTI2PWNvbmZpZyBJT19UUkFQUEVEXFxuLS1cXG5hcmNoL3NoL0tjb25maWctMTI4LVxcbmFyY2gvc2gvS2NvbmZpZzoxMjk6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcXG5hcmNoL3NoL0tjb25maWctMTMwLVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjM3LjkxOTk0NTcxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDM0OTk0ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgU3lzdGVtIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBgU1dBUGAgY29uZmlndXJhdGlvbiDigJMgeWVwLCB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgbm8gc3VycHJpc2VzIHRoZXJlLiBNeSBuZXh0IG1vdmUgaXMgdG8gcXVpY2tseSBhc3Nlc3MgcG90ZW50aWFsIGludGVyZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgd2l0aCByZWdhcmRzIHRvIGBNRU1DR2AuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGlmIG1lbW9yeSBjZ3JvdXBzIGhhdmUgYW55IGhhcmQgcmVxdWlyZW1lbnRzIHRoYXQgYFNXQVBgIG1pZ2h0IGltcGFjdCBvciByZWx5IG9uLiBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzd2FwIGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGlzb2xhdGlvbiBhbmQgY29udHJvbCBwcm92aWRlZCBieSBtZW1vcnkgY2dyb3Vwcy4gQW55IGRlZXBlciBjb25uZWN0aW9ucyBoZXJlIHdpbGwgc3Ryb25nbHkgaW5mb3JtIGhvdyBJIG1hbmFnZSB0aGUgbWVtb3J5IHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTo0My45NTQ5NDM3MzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDcyNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6NDQuMDE0MDI0MTY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjQ4ODEzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGU6IE1FTUNHJ3MgUG9zaXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBvciBgTUVNQ0dgLCBhbmQgd2hlcmUgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIGtlcm5lbCBwaWN0dXJlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW50aW1hdGVseS4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cyB3aGVuIG5hdmlnYXRpbmcgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gbGFieXJpbnRoLCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgaW5pdC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgY29uZmlnIE1FTUNHYCB3aWxsIGJlIHRoZSBrZXkuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBJIGFudGljaXBhdGUgdGhlcmUgbWlnaHQgYmUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgYE1FTUNHYCBzdWJzeXN0ZW0gdGhhdCBJJ2xsIG5lZWQgdG8gY2hhc2UgZG93biBvbmNlIEkndmUgZ290IHRoZSBsYXkgb2YgdGhlIGxhbmQgZnJvbSB0aGlzIGluaXRpYWwgS2NvbmZpZyBzZWN0aW9uLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyBgTUVNQ0dgIGlzIGV4cG9zZWQsIGhvdyB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgd2hhdCBvdGhlciBjb25maWcgb3B0aW9ucyB3aWxsIGJlIGFmZmVjdGVkIGluIHJlbGF0aW9uIHRvIGl0LiBUaW1lIHRvIGRpZyBpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI2NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjQ3LjYzODkwODk3OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzA6XFx0XFx0aGVscFxcbjEwNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBcXFwiZmF2b3JkeW5tb2RzXFxcIiBtb3VudCBvcHRpb24gYnkgZGVmYXVsdFxcbjEwNzI6XFx0XFx0ICB3aGljaCByZWR1Y2VzIHRoZSBsYXRlbmNpZXMgb2YgZHluYW1pYyBjZ3JvdXAgbW9kaWZpY2F0aW9ucyBzdWNoXFxuMTA3MzpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwNzQ6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Y29uZmlnIE1FTUNHXFxuMTA3OTpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDgwOlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDgxOlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4MjpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA4MzpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDg0OlxcdFxcdGhlbHBcXG4xMDg1OlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwODY6XFx0XFxuMTA4NzpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwODg6XFx0XFx0Ym9vbFxcbjEwODk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTo0Ny42MzkwODgwNzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNzMxMzg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBzdWJqZWN0IG1hdHRlciBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ2dyb3VwIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHRoaW5nLCBhbmQgaXQncyBsb2NhdGVkIHdpdGhpbiB0aGUgQ2dyb3VwIG1lbnUsIGJ1dCBpdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHdoYXQgaXQgZGVwZW5kcyBvbi4gTXkgZ3V0IHRlbGxzIG1lIGl0ICpzaG91bGRuJ3QqIG5lZWQgYW55dGhpbmcgc3BlY2lmaWMgb3V0c2lkZSBvZiB0aGUgZ2VuZXJhbCBDZ3JvdXAgZnJhbWV3b3JrLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHdoZXRoZXIgb3Igbm90IHRoZSBgQ0dST1VQU2Aga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ2xsIGNoZWNrIHRoYXQgZmlyc3QsIGFzIGl0J3MgdGhlIG1vc3QgbGlrZWx5IGRlcGVuZGVuY3kuIEl0J3MgdGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpbiB0aGlzIHRyb3VibGVzaG9vdGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc5OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6NTEuMzY2NDA1NzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzA1NzAxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBDR1JPVVBTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDQ2PWNvbmZpZyBTTEFCX09CSl9FWFRcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQ4LVxcbmluaXQvS2NvbmZpZzoxMDQ5Om1lbnVjb25maWcgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMDUwLVxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6NTMuNjk2OTgwNjc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTg3OTk3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgQ0dST1VQU2AgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gYENHUk9VUFNgIGlzIGRlZmluaXRlbHkgdGhlIHRvcC1sZXZlbCBtZW51Y29uZmlnLCB0aGUgcGFyZW50LiBXaXRoaW4gdGhhdCwgd2UncmUgZGVhbGluZyB3aXRoIGBNRU1DR2AgYW5kIGBTV0FQYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQuXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb25zIHNlZW1zIHRvIGJlIGFyb3VuZCBgbWVtb3J5X3BlYWtfc2hvd2AsIGBtZW1vcnlfcGVha193cml0ZWAsIGBzd2FwX3BlYWtfc2hvd2AsIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC4gV2FpdCBhIG1pbnV0ZSwgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAgZG9uJ3Qgc2VlbSB0byBiZSBkaXJlY3RseSBtb2RpZmllZCBpbiB0aGVtc2VsdmVzLCBidXQgdGhleSBjYWxsIGBwZWFrX3dyaXRlYCB3aGljaCAqaXMqIG1vZGlmaWVkLiBUaGlzIGNoYW5nZXMgdGhpbmdzIHNvbWV3aGF0LiBXZSBoYXZlIHRoZXNlIGZ1bmN0aW9ucyB0byBjb25zaWRlcjpcblxuKiAgIGBtZW1vcnlfcGVha19zaG93YFxuKiAgIGBtZW1vcnlfcGVha193cml0ZWAgKGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBgcGVha193cml0ZWApXG4qICAgYHN3YXBfcGVha19zaG93YFxuKiAgIGBzd2FwX3BlYWtfd3JpdGVgIChhbmQgaXRzIGRlcGVuZGVuY3kgb24gYHBlYWtfd3JpdGVgKVxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYG1lbW9yeV9wZWFrX3dyaXRlYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgZnVuY3Rpb24gbmFtZS4gR29vZCwgaXQgaXMuXG5cbk5vdywgbGV0J3MgbG9vayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBsaW5rZWQgdG8gdGhpcyBjaGFuZ2UuIEFoYSwgYHBlYWtfd3JpdGVgIGlzIG1hcmtlZCBhcyBzdGF0aWMsIG1lYW5pbmcgaXQgbWlnaHQgYmUgaW5saW5lZC4gQnV0IHNpbmNlIGBtZW1vcnlfcGVha193cml0ZWAgKGFuZCBgc3dhcF9wZWFrX3dyaXRlYCkgZXhwbGljaXRseSBjYWxsIGl0LCBmdXp6aW5nIGVpdGhlciBvZiB0aG9zZSB3aWxsIGVmZmVjdGl2ZWx5IGZ1enogYHBlYWtfd3JpdGVgIGFzIHdlbGwuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cbk9rYXksIHRoYXQncyBldmVyeXRoaW5nLiBUaW1lIHRvIHNldCB1cCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwODMsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjU5LjE5NTc4Mjk0OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzM3NjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0dST1VQU1wiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfcGVha19zaG93XCIsXG4gICAgXCJtZW1vcnlfcGVha193cml0ZVwiLFxuICAgIFwic3dhcF9wZWFrX3Nob3dcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjZ3JvdXAgdjIgbWVtb3J5IGNvbnRyb2xsZXIgYnkgYWRkaW5nIGxvY2tzIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgYW5kIGZpeGluZyBhIGJ1ZyBpbiBgcGVha193cml0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYnkgcmVhZGluZy93cml0aW5nIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzLiBUaGUgY2hhbmdlcyBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgY29udHJvbGxlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDR1JPVVBTXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9wZWFrX3Nob3dcIixcbiAgICBcIm1lbW9yeV9wZWFrX3dyaXRlXCIsXG4gICAgXCJzd2FwX3BlYWtfc2hvd1wiLFxuICAgIFwic3dhcF9wZWFrX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNncm91cCB2MiBtZW1vcnkgY29udHJvbGxlciBieSBhZGRpbmcgbG9ja3MgdG8gYG1lbW9yeV9wZWFrX3Nob3dgIGFuZCBgc3dhcF9wZWFrX3Nob3dgLCBhbmQgZml4aW5nIGEgYnVnIGluIGBwZWFrX3dyaXRlYCB3aGljaCBpcyBjYWxsZWQgYnkgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcyBieSByZWFkaW5nL3dyaXRpbmcgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgZmlsZXMuIFRoZSBjaGFuZ2VzIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNDowNTo1OS4zMTMxNjU5MjhaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQ3ODgyNTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDQ6MDU6NTkuMzEzNjI4MDE4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTQ3NDA3NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGxvY2tpbmcgdG8gYG1lbW9yeV9wZWFrX3Nob3dgIGFuZCBgc3dhcF9wZWFrX3Nob3dgIHVzaW5nIGBndWFyZChzcGlubG9jaylgLCBhbmQgbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBwZWFrX3dyaXRlYCB0byB1c2UgdGhlIG9sZCB3YXRlcm1hcmsgdmFsdWUgd2hlbiB1cGRhdGluZyBwZWVyIGNvbnRleHRzLiBBbGwgdmFyaWFibGVzIGludHJvZHVjZWQgKGBvbGRfd2F0ZXJtYXJrYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBhbmQgbG9naWMgaXNzdWVzIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIExPQ0tERVAgYW5kIEtBU0FOIGFyZSBzdWZmaWNpZW50LCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDVlNzZiMmM3NjU2MDFkN2FlNjk3YmViYjQxZTg0OTczYTFjYWE2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA0OjA0OjI0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxN2RhMWY0M2I3ZDNiLi41OTMyMDQ2YzYzN2RjIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00NzE0LDYgKzQ3MTQsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbitcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG4gfVxuIFxuQEAgLTQ3NDMsNyArNDc0NCw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XG4rXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4gXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuQEAgLTQ3NTEsMTEgKzQ3NTIsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbiBcdHNwaW5fbG9jayhcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcbiBcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xuK1x0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuIFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuLVx0XHRpZiAodXNhZ2UgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuLVx0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIHVzYWdlKTtcbitcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4rXHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgb2xkX3dhdGVybWFyayk7XG4gXG4gXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXG4gXHRpZiAob2ZwLVx1MDAzZXZhbHVlID09IE9GUF9QRUFLX1VOU0VUKVxuQEAgLTU4NTksNiArNTg2MSw3IEBAIHN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3Moc2YpKTtcbiBcbitcdGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA1OjU5LjMxMzYyODkzOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTU0NzM2MTQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYC4gTXkgaW5pdGlhbCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyB0aGF0J3MgdGhlIGZpcnN0IHRoaW5nIEknbSBjaGVja2luZy4gSXQncyBhZGRpbmcgYGd1YXJkKHNwaW5sb2NrKShcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtgIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCwgd2hpY2ggaXMgZ29vZDsgaXQgZXhwbGljaXRseSBhZGRyZXNzZXMgY29uY3VycmVuY3kgaXNzdWVzIHdpdGggdGhlIHBlYWsgdmFsdWVzLiBUaGVuLCBpbiBgcGVha193cml0ZWAsIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gaG93IGBwZWVyX2N0eC1cdTAwM2V2YWx1ZWAgaXMgdXBkYXRlZC5cblxuTGV0J3MgbG9vayBtb3JlIGNsb3NlbHkgYXQgdGhlIGxvZ2ljIGluIGBwZWFrX3dyaXRlYC4gV2UncmUgbm93IHVzaW5nIGBvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVx1MDAzZWxvY2FsX3dhdGVybWFyayk7YCBhbmQgdXBkYXRpbmcgYHBlZXJfY3R4LVx1MDAzZXZhbHVlYCB3aXRoIGBvbGRfd2F0ZXJtYXJrYCBpbnN0ZWFkIG9mIGB1c2FnZWAgaWYgYHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWVgLlxuXG5NeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGhlcmUuIFRoZSB2YXJpYWJsZXMgYHVzYWdlYCBhbmQgYG9sZF93YXRlcm1hcmtgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOiBgdXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7YCBhbmQgYG9sZF93YXRlcm1hcmsgPSBSRUFEX09OQ0UocGMtXHUwMDNlbG9jYWxfd2F0ZXJtYXJrKTtgLiBJdCdzIGFsbCBhYm91dCBsb2NraW5nIGFuZCBjb3JyZWN0bHkgdXBkYXRpbmcgdGhlIHBlYWsgdmFsdWVzIOKAkyBhIGNvbmN1cnJlbmN5L2xvZ2ljIGJ1ZyBmaXguIEtBU0FOLCBMT0NLREVQLCBhbmQgc2ltaWxhciB0b29scyBtaWdodCBjYXRjaCBjb25jdXJyZW5jeSBpc3N1ZXMsIGJ1dCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgSSBkb24ndCBzZWUgYW55IHJpc2tzIGhlcmUuXG5cblJlLXJldmlld2luZyB0aGUgcGF0Y2ggY29uZmlybXMgdGhpczogdGhlIGxvY2sgaXMgYWRkZWQgdG8gdGhlIGBzaG93YCBmdW5jdGlvbnMsIGFuZCB0aGUgbG9naWMgY2hhbmdlIGluIGBwZWFrX3dyaXRlYCBjb3JyZWN0bHkgdXNlcyB0aGUgb2xkIHZhbHVlIGFuZCBpdHMgY29tcGFyaXNvbi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gTmVlZHNLTVNBTiA9IGZhbHNlLiBJJ20gc2F0aXNmaWVkIGFuZCBJJ2xsIHByb2NlZWQgd2l0aCBjYWxsaW5nIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ4LCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA0OjA2OjEwLjg2MDk5NDMwOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBsb2NraW5nIHRvIGBtZW1vcnlfcGVha19zaG93YCBhbmQgYHN3YXBfcGVha19zaG93YCB1c2luZyBgZ3VhcmQoc3BpbmxvY2spYCwgYW5kIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgcGVha193cml0ZWAgdG8gdXNlIHRoZSBvbGQgd2F0ZXJtYXJrIHZhbHVlIHdoZW4gdXBkYXRpbmcgcGVlciBjb250ZXh0cy4gQWxsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChgb2xkX3dhdGVybWFya2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjaGFuZ2VzIGFkZHJlc3MgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGlzc3VlcyByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBMT0NLREVQIGFuZCBLQVNBTiBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbG9ja2luZyB0byBgbWVtb3J5X3BlYWtfc2hvd2AgYW5kIGBzd2FwX3BlYWtfc2hvd2AgdXNpbmcgYGd1YXJkKHNwaW5sb2NrKWAsIGFuZCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHBlYWtfd3JpdGVgIHRvIHVzZSB0aGUgb2xkIHdhdGVybWFyayB2YWx1ZSB3aGVuIHVwZGF0aW5nIHBlZXIgY29udGV4dHMuIEFsbCB2YXJpYWJsZXMgaW50cm9kdWNlZCAoYG9sZF93YXRlcm1hcmtgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGFuZCBsb2dpYyBpc3N1ZXMgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4gYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[1] Phase: Succeeded StartedAt: 2026-08-14 04:06:22 +0000 UTC FinishedAt: 2026-08-14 04:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 04:06:22 +0000 UTC FinishedAt: 2026-08-14 04:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2] Phase: Succeeded StartedAt: 2026-08-14 04:06:22 +0000 UTC FinishedAt: 2026-08-14 07:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 04:06:22 +0000 UTC FinishedAt: 2026-08-14 07:49:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 04:06:22 +0000 UTC FinishedAt: 2026-08-14 04:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 04:06:22 +0000 UTC FinishedAt: 2026-08-14 04:06:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow2bjmp/series-workflow2bjmp-convert-artifact-358293602/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 04:06:32 +0000 UTC FinishedAt: 2026-08-14 04:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 04:06:32 +0000 UTC FinishedAt: 2026-08-14 04:24:59 +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:*fd17a367-da30-4727-8f7b-c4f77b3bd4b7,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-workflow2bjmp/series-workflow2bjmp-convert-artifact-358293602/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": "dfc7b5bd-aec2-42e5-9c4b-b25014207bf0", "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-workflow2bjmp/series-workflow2bjmp-build-action-616986656/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 04:06:32 +0000 UTC FinishedAt: 2026-08-14 04:24:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fd17a367-da30-4727-8f7b-c4f77b3bd4b7,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-workflow2bjmp/series-workflow2bjmp-convert-artifact-358293602/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": "dfc7b5bd-aec2-42e5-9c4b-b25014207bf0", "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-workflow2bjmp/series-workflow2bjmp-build-action-616986656/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 04:24:59 +0000 UTC FinishedAt: 2026-08-14 04:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 04:24:59 +0000 UTC FinishedAt: 2026-08-14 04:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 04:24:59 +0000 UTC FinishedAt: 2026-08-14 04:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 04:24:59 +0000 UTC FinishedAt: 2026-08-14 04:25:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow2bjmp/series-workflow2bjmp-convert-artifact-1785594045/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 04:25:09 +0000 UTC FinishedAt: 2026-08-14 04:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 04:25:09 +0000 UTC FinishedAt: 2026-08-14 04:27:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfc7b5bd-aec2-42e5-9c4b-b25014207bf0,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-workflow2bjmp/series-workflow2bjmp-build-action-616986656/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-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 04:27:20 +0000 UTC FinishedAt: 2026-08-14 04:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 04:27:20 +0000 UTC FinishedAt: 2026-08-14 04:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 04:27:20 +0000 UTC FinishedAt: 2026-08-14 04:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 04:27:20 +0000 UTC FinishedAt: 2026-08-14 04:43:50 +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:*fd17a367-da30-4727-8f7b-c4f77b3bd4b7,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-workflow2bjmp/series-workflow2bjmp-convert-artifact-1785594045/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": "0849aa78-61c2-4acf-9c2d-f20b75faf7a1", "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-workflow2bjmp/series-workflow2bjmp-build-action-3208421401/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 04:27:20 +0000 UTC FinishedAt: 2026-08-14 04:43:40 +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:*fd17a367-da30-4727-8f7b-c4f77b3bd4b7,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-workflow2bjmp/series-workflow2bjmp-convert-artifact-1785594045/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": "0849aa78-61c2-4acf-9c2d-f20b75faf7a1", "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-workflow2bjmp/series-workflow2bjmp-build-action-3208421401/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 04:43:50 +0000 UTC FinishedAt: 2026-08-14 04:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 04:43:50 +0000 UTC FinishedAt: 2026-08-14 04:43:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 04:43:50 +0000 UTC FinishedAt: 2026-08-14 04:46:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 04:43:50 +0000 UTC FinishedAt: 2026-08-14 04:46:09 +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:*0849aa78-61c2-4acf-9c2d-f20b75faf7a1,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-workflow2bjmp/series-workflow2bjmp-build-action-3208421401/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-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 04:46:19 +0000 UTC FinishedAt: 2026-08-14 07:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 04:46:19 +0000 UTC FinishedAt: 2026-08-14 07:49:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"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:*dfc7b5bd-aec2-42e5-9c4b-b25014207bf0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0849aa78-61c2-4acf-9c2d-f20b75faf7a1,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-workflow2bjmp/series-workflow2bjmp-build-action-616986656/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-workflow2bjmp/series-workflow2bjmp-build-action-3208421401/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 04:46:19 +0000 UTC FinishedAt: 2026-08-14 04:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 04:46:19 +0000 UTC FinishedAt: 2026-08-14 04:46:24 +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_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"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-workflow2bjmp/series-workflow2bjmp-convert-artifact-189690690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 04:46:19 +0000 UTC FinishedAt: 2026-08-14 04:46:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 04:46:19 +0000 UTC FinishedAt: 2026-08-14 04:46:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 04:46:19 +0000 UTC FinishedAt: 2026-08-14 04:46:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 04:46:29 +0000 UTC FinishedAt: 2026-08-14 07:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2bjmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_show","memory_peak_write","swap_peak_show","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2697ef8943c9985c14708a6429e21812693857b2","config_name":"upstream-apparmor-kasan.config","enable_configs":["CGROUPS","MEMCG","SWAP"],"series_id":"4c0e9d87-9e74-4a23-9114-d856c3e6ebf9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 04:46:29 +0000 UTC FinishedAt: 2026-08-14 07:49:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfc7b5bd-aec2-42e5-9c4b-b25014207bf0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0849aa78-61c2-4acf-9c2d-f20b75faf7a1,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-workflow2bjmp/series-workflow2bjmp-build-action-616986656/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-workflow2bjmp/series-workflow2bjmp-build-action-3208421401/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-workflow2bjmp/series-workflow2bjmp-convert-artifact-189690690/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,}