Name: series-workflow8hhjs Phase: Succeeded StartedAt: 2026-08-14 23:59:01 +0000 UTC FinishedAt: 2026-08-15 03:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[0] Phase: Succeeded StartedAt: 2026-08-14 23:59:01 +0000 UTC FinishedAt: 2026-08-15 00:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 23:59:01 +0000 UTC FinishedAt: 2026-08-15 00:02:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "series_id": "37f69bea-9bfb-4086-8f74-c2db27350b4e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "identify_secondary_cpu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMgaW4geDg2IGJ5IGNvbnNvbGlkYXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgY3B1aW5mb194ODZgIGZpZWxkcyBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvKClgIGZ1bmN0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gQ1BVIGJvb3QgYW5kIGhvdHBsdWcgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOGQ5NDU1NmEzYTdjYTg3YWYzMzlhMjQ4OTRjMzVjZWEyMDdkZDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDA6MDA6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbmluZGV4IGEzZGYyMWQyNjQ2MDYuLmUwYzcwYTI1MTBhZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG5AQCAtMTc3MiwyNSAmIzQzOzE3NzIsNTAgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9wYXJzZV9lYXJseV9wYXJhbSh2b2lkKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4mIzQzO3tcbiYjNDM7XHRjLVx1MDAzZXg4Nl9jYWNoZV9zaXplID0gMDtcbiYjNDM7XHRjLVx1MDAzZXg4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047XG4mIzQzO1x0Yy1cdTAwM2V4ODZfbW9kZWwgPSBjLVx1MDAzZXg4Nl9zdGVwcGluZyA9IDA7XHQvKiBTbyBmYXIgdW5rbm93bi4uLiAqL1xuJiM0MztcdGMtXHUwMDNleDg2X3ZlbmRvcl9pZFswXSA9ICYjMzk7XFwwJiMzOTs7IC8qIFVuc2V0ICovXG4mIzQzO1x0Yy1cdTAwM2V4ODZfbW9kZWxfaWRbMF0gPSAmIzM5O1xcMCYjMzk7OyAgLyogVW5zZXQgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiYjNDM7XHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSA2NDtcbiYjNDM7XHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzNjtcbiYjNDM7XHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSA0ODtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRjLVx1MDAzZWNwdWlkX2xldmVsID0gLTE7XHQvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi9cbiYjNDM7XHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSAzMjtcbiYjNDM7XHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzMjtcbiYjNDM7XHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSAzMjtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0Yy1cdTAwM2V4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplO1xuJiM0MztcdG1lbXNldChcdTAwMjZjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V4ODZfY2FwYWJpbGl0eSkpO1xuJiM0MztcdG1lbXNldChcdTAwMjZjLVx1MDAzZWNwdWlkLCAwLCBzaXplb2YoYy1cdTAwM2VjcHVpZCkpO1xuJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FU1xuJiM0MztcdG1lbXNldChcdTAwMjZjLVx1MDAzZXZteF9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V2bXhfY2FwYWJpbGl0eSkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRjLVx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIERvIG1pbmltdW0gQ1BVIGRldGVjdGlvbiBlYXJseS5cbiAgKiBGaWVsZHMgcmVhbGx5IG5lZWRlZDogdmVuZG9yLCBjcHVpZF9sZXZlbCwgZmFtaWx5LCBtb2RlbCwgbWFzayxcbiAgKiBjYWNoZSBhbGlnbm1lbnQuXG4tICogVGhlIG90aGVycyBhcmUgbm90IHRvdWNoZWQgdG8gYXZvaWQgdW53YW50ZWQgc2lkZSBlZmZlY3RzLlxuJiM0MzsgKiBUaGUgb3RoZXJzIGFyZSByZXNldCB0byB0aGVpciBkZWZhdWx0cyBoZXJlIGFuZCBvbmx5IGZpbGxlZCBpbiBsYXRlcixcbiYjNDM7ICogYnkgaWRlbnRpZnlfY3B1KCkuXG4gICpcbiAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uIHRoZSBib290IENQVS4gIERvbiYjMzk7dCBhZGQgY29kZVxuICAqIGhlcmUgdGhhdCBpcyBzdXBwb3NlZCB0byBydW4gb24gYWxsIENQVXMuXG4gICovXG4gc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4ge1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5KSk7XG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXHUwMDNlY3B1aWQpKTtcbi1cdGMtXHUwMDNlZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwO1xuJiM0MztcdGluaXRfY3B1X2luZm8oYyk7XG4gXG4gXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcbiBcdFx0aWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7XG4gXG4tXHQvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovXG4mIzQzO1x0LyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovXG4gXHRpZiAoY3B1aWRfZmVhdHVyZSgpKSB7XG4gXHRcdGNwdWlkX3NjYW5fY3B1KGMpO1xuIFx0XHRjcHVfZGV0ZWN0KGMpO1xuQEAgLTE5NTQsMTYgJiM0MzsxOTc5LDIxIEBAIHZvaWQgY2hlY2tfbnVsbF9zZWdfY2xlYXJzX2Jhc2Uoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19OVUxMX1NFRyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIGRvZXMgdGhlIGhhcmQgd29yayBvZiBhY3R1YWxseSBwaWNraW5nIGFwYXJ0IHRoZSBDUFUgc3R1ZmYuLi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4ge1xuLVx0Yy1cdTAwM2VleHRlbmRlZF9jcHVpZF9sZXZlbCA9IDA7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGMtXHUwMDNlbG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5O1xuIFxuIFx0aWYgKCFjcHVpZF9mZWF0dXJlKCkpXG4gXHRcdGlkZW50aWZ5X2NwdV93aXRob3V0X2NwdWlkKGMpO1xuIFxuLVx0LyogY3lyaXggY291bGQgaGF2ZSBjcHVpZCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkqL1xuJiM0MztcdC8qIEN5cml4IGNvdWxkIGhhdmUgQ1BVSUQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpLiAqL1xuIFx0aWYgKCFjcHVpZF9mZWF0dXJlKCkpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdGdvdG8gbm9fY3B1aWQ7XG4gXG4gXHRjcHVpZF9zY2FuX2NwdShjKTtcbiBcdGNwdV9kZXRlY3QoYyk7XG5AQCAtMTk5MSw0MCAmIzQzOzIwMjEsOCBAQCBzdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxuIFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19FU1BGSVgpO1xuICNlbmRpZlxuLX1cbi1cbi0vKlxuLSAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4te1xuLVx0aW50IGk7XG4tXG4tXHRjLVx1MDAzZWxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTtcbi1cdGMtXHUwMDNleDg2X2NhY2hlX3NpemUgPSAwO1xuLVx0Yy1cdTAwM2V4ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOO1xuLVx0Yy1cdTAwM2V4ODZfbW9kZWwgPSBjLVx1MDAzZXg4Nl9zdGVwcGluZyA9IDA7XHQvKiBTbyBmYXIgdW5rbm93bi4uLiAqL1xuLVx0Yy1cdTAwM2V4ODZfdmVuZG9yX2lkWzBdID0gJiMzOTtcXDAmIzM5OzsgLyogVW5zZXQgKi9cbi1cdGMtXHUwMDNleDg2X21vZGVsX2lkWzBdID0gJiMzOTtcXDAmIzM5OzsgIC8qIFVuc2V0ICovXG4tI2lmZGVmIENPTkZJR19YODZfNjRcbi1cdGMtXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDY0O1xuLVx0Yy1cdTAwM2V4ODZfcGh5c19iaXRzID0gMzY7XG4tXHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSA0ODtcbi0jZWxzZVxuLVx0Yy1cdTAwM2VjcHVpZF9sZXZlbCA9IC0xO1x0LyogQ1BVSUQgbm90IGRldGVjdGVkICovXG4tXHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSAzMjtcbi1cdGMtXHUwMDNleDg2X3BoeXNfYml0cyA9IDMyO1xuLVx0Yy1cdTAwM2V4ODZfdmlydF9iaXRzID0gMzI7XG4tI2VuZGlmXG4tXHRjLVx1MDAzZXg4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemU7XG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2V4ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXHUwMDNleDg2X2NhcGFiaWxpdHkpKTtcbi1cdG1lbXNldChcdTAwMjZjLVx1MDAzZWNwdWlkLCAwLCBzaXplb2YoYy1cdTAwM2VjcHVpZCkpO1xuLSNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTXG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2V2bXhfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXHUwMDNldm14X2NhcGFiaWxpdHkpKTtcbi0jZW5kaWZcbi1cbi1cdGdlbmVyaWNfaWRlbnRpZnkoYyk7XG4gXG4mIzQzO25vX2NwdWlkOlxuIFx0Y3B1X3BhcnNlX3RvcG9sb2d5KGMpO1xuIFxuIFx0aWYgKHRoaXNfY3B1LVx1MDAzZWNfaWRlbnRpZnkpXG5AQCAtMjExNiw2ICYjNDM7MjExNCw5IEBAIHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gXHRtY2hlY2tfY3B1X2luaXQoYyk7XG4gXG4gXHRudW1hX2FkZF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXG4mIzQzO1x0XHRlbmFibGVfc2VwX2NwdSgpO1xuIH1cbiBcbiAvKlxuQEAgLTIxNTMsOSAmIzQzOzIxNTQsNiBAQCBzdGF0aWMgX19pbml0IHZvaWQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZClcbiBcdGlkZW50aWZ5X2NwdShcdTAwMjZib290X2NwdV9kYXRhKTtcbiBcdGlmIChIQVNfS0VSTkVMX0lCVCBcdTAwMjZcdTAwMjYgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9JQlQpKVxuIFx0XHRwcl9pbmZvKFwmIzM0O0NFVCBkZXRlY3RlZDogSW5kaXJlY3QgQnJhbmNoIFRyYWNraW5nIGVuYWJsZWRcXG5cJiMzNDspO1xuLSNpZmRlZiBDT05GSUdfWDg2XzMyXG4tXHRlbmFibGVfc2VwX2NwdSgpO1xuLSNlbmRpZlxuIFx0Y3B1X2RldGVjdF90bGIoXHUwMDI2Ym9vdF9jcHVfZGF0YSk7XG4gXHRzZXR1cF9jcl9waW5uaW5nKCk7XG4gXG5AQCAtMjE3NCwxMCAmIzQzOzIxNzIsOCBAQCB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSlcbiBcdFx0KmMgPSBib290X2NwdV9kYXRhO1xuIFx0Yy1cdTAwM2VjcHVfaW5kZXggPSBjcHU7XG4gXG4mIzQzO1x0aW5pdF9jcHVfaW5mbyhjKTtcbiBcdGlkZW50aWZ5X2NwdShjKTtcbi0jaWZkZWYgQ09ORklHX1g4Nl8zMlxuLVx0ZW5hYmxlX3NlcF9jcHUoKTtcbi0jZW5kaWZcbiBcdHg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTtcbiBcdHVwZGF0ZV9zcmJkc19tc3IoKTtcbiBcdGlmIChib290X2NwdV9oYXNfYnVnKFg4Nl9CVUdfR0RTKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZGVudGlmeV9zZWNvbmRhcnlfY3B1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB4ODYgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljLCBtb3ZpbmcgaW5pdGlhbGl6YXRpb24gaW50byBhIG5ldyBgaW5pdF9jcHVfaW5mb2AgZnVuY3Rpb24gYW5kIG1lcmdpbmcgYGdlbmVyaWNfaWRlbnRpZnlgIGludG8gYGlkZW50aWZ5X2NwdWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBDUFUgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBhcmUgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkLiBXaGlsZSBtdWNoIG9mIHRoaXMgcnVucyBkdXJpbmcgZWFybHkgYm9vdCwgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGlzIGV4ZWN1dGVkIHdoZW4gc2Vjb25kYXJ5IENQVXMgYXJlIGJyb3VnaHQgb25saW5lLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiBGdXp6aW5nIENQVSBob3RwbHVnIGNvdWxkIHJldmVhbCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBpbmNvcnJlY3QgZmVhdHVyZSBkZXRlY3Rpb24gaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYThkOTQ1NTZhM2E3Y2E4N2FmMzM5YTI0ODk0YzM1Y2VhMjA3ZGQ1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDE1IDAwOjAwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggYTNkZjIxZDI2NDYwNi4uZTBjNzBhMjUxMGFmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC0xNzcyLDI1ICYjNDM7MTc3Miw1MCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY3B1X3BhcnNlX2Vhcmx5X3BhcmFtKHZvaWQpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiYjNDM7ewomIzQzOwljLSZndDt4ODZfY2FjaGVfc2l6ZSA9IDA7CiYjNDM7CWMtJmd0O3g4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047CiYjNDM7CWMtJmd0O3g4Nl9tb2RlbCA9IGMtJmd0O3g4Nl9zdGVwcGluZyA9IDA7CS8qIFNvIGZhciB1bmtub3duLi4uICovCiYjNDM7CWMtJmd0O3g4Nl92ZW5kb3JfaWRbMF0gPSAmIzM5O1wwJiMzOTs7IC8qIFVuc2V0ICovCiYjNDM7CWMtJmd0O3g4Nl9tb2RlbF9pZFswXSA9ICYjMzk7XDAmIzM5OzsgIC8qIFVuc2V0ICovCiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKJiM0MzsJYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZSA9IDY0OwomIzQzOwljLSZndDt4ODZfcGh5c19iaXRzID0gMzY7CiYjNDM7CWMtJmd0O3g4Nl92aXJ0X2JpdHMgPSA0ODsKJiM0MzsjZWxzZQomIzQzOwljLSZndDtjcHVpZF9sZXZlbCA9IC0xOwkvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi8KJiM0MzsJYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZSA9IDMyOwomIzQzOwljLSZndDt4ODZfcGh5c19iaXRzID0gMzI7CiYjNDM7CWMtJmd0O3g4Nl92aXJ0X2JpdHMgPSAzMjsKJiM0MzsjZW5kaWYKJiM0MzsJYy0mZ3Q7eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtJmd0O3g4Nl9jbGZsdXNoX3NpemU7CiYjNDM7CW1lbXNldCgmYW1wO2MtJmd0O3g4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy0mZ3Q7eDg2X2NhcGFiaWxpdHkpKTsKJiM0MzsJbWVtc2V0KCZhbXA7Yy0mZ3Q7Y3B1aWQsIDAsIHNpemVvZihjLSZndDtjcHVpZCkpOwomIzQzOyNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTCiYjNDM7CW1lbXNldCgmYW1wO2MtJmd0O3ZteF9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy0mZ3Q7dm14X2NhcGFiaWxpdHkpKTsKJiM0MzsjZW5kaWYKJiM0MzsJYy0mZ3Q7ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwOwomIzQzO30KJiM0MzsKIC8qCiAgKiBEbyBtaW5pbXVtIENQVSBkZXRlY3Rpb24gZWFybHkuCiAgKiBGaWVsZHMgcmVhbGx5IG5lZWRlZDogdmVuZG9yLCBjcHVpZF9sZXZlbCwgZmFtaWx5LCBtb2RlbCwgbWFzaywKICAqIGNhY2hlIGFsaWdubWVudC4KLSAqIFRoZSBvdGhlcnMgYXJlIG5vdCB0b3VjaGVkIHRvIGF2b2lkIHVud2FudGVkIHNpZGUgZWZmZWN0cy4KJiM0MzsgKiBUaGUgb3RoZXJzIGFyZSByZXNldCB0byB0aGVpciBkZWZhdWx0cyBoZXJlIGFuZCBvbmx5IGZpbGxlZCBpbiBsYXRlciwKJiM0MzsgKiBieSBpZGVudGlmeV9jcHUoKS4KICAqCiAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uIHRoZSBib290IENQVS4gIERvbiYjMzk7dCBhZGQgY29kZQogICogaGVyZSB0aGF0IGlzIHN1cHBvc2VkIHRvIHJ1biBvbiBhbGwgQ1BVcy4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JbWVtc2V0KCZhbXA7Yy0mZ3Q7eDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt4ODZfY2FwYWJpbGl0eSkpOwotCW1lbXNldCgmYW1wO2MtJmd0O2NwdWlkLCAwLCBzaXplb2YoYy0mZ3Q7Y3B1aWQpKTsKLQljLSZndDtleHRlbmRlZF9jcHVpZF9sZXZlbCA9IDA7CiYjNDM7CWluaXRfY3B1X2luZm8oYyk7CiAKIAlpZiAoIWNwdWlkX2ZlYXR1cmUoKSkKIAkJaWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7CiAKLQkvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovCiYjNDM7CS8qIEN5cml4IGNvdWxkIGhhdmUgQ1BVSUQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpLiAqLwogCWlmIChjcHVpZF9mZWF0dXJlKCkpIHsKIAkJY3B1aWRfc2Nhbl9jcHUoYyk7CiAJCWNwdV9kZXRlY3QoYyk7CkBAIC0xOTU0LDE2ICYjNDM7MTk3OSwyMSBAQCB2b2lkIGNoZWNrX251bGxfc2VnX2NsZWFyc19iYXNlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAlzZXRfY3B1X2J1ZyhjLCBYODZfQlVHX05VTExfU0VHKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXJpY19pZGVudGlmeShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiYjNDM7LyoKJiM0MzsgKiBUaGlzIGRvZXMgdGhlIGhhcmQgd29yayBvZiBhY3R1YWxseSBwaWNraW5nIGFwYXJ0IHRoZSBDUFUgc3R1ZmYuLi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCWMtJmd0O2V4dGVuZGVkX2NwdWlkX2xldmVsID0gMDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWMtJmd0O2xvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKIAogCWlmICghY3B1aWRfZmVhdHVyZSgpKQogCQlpZGVudGlmeV9jcHVfd2l0aG91dF9jcHVpZChjKTsKIAotCS8qIGN5cml4IGNvdWxkIGhhdmUgY3B1aWQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpKi8KJiM0MzsJLyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovCiAJaWYgKCFjcHVpZF9mZWF0dXJlKCkpCi0JCXJldHVybjsKJiM0MzsJCWdvdG8gbm9fY3B1aWQ7CiAKIAljcHVpZF9zY2FuX2NwdShjKTsKIAljcHVfZGV0ZWN0KGMpOwpAQCAtMTk5MSw0MCAmIzQzOzIwMjEsOCBAQCBzdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJc2V0X2NwdV9idWcoYywgWDg2X0JVR19FU1BGSVgpOwogI2VuZGlmCi19Ci0KLS8qCi0gKiBUaGlzIGRvZXMgdGhlIGhhcmQgd29yayBvZiBhY3R1YWxseSBwaWNraW5nIGFwYXJ0IHRoZSBDUFUgc3R1ZmYuLi4KLSAqLwotc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLXsKLQlpbnQgaTsKLQotCWMtJmd0O2xvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKLQljLSZndDt4ODZfY2FjaGVfc2l6ZSA9IDA7Ci0JYy0mZ3Q7eDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTjsKLQljLSZndDt4ODZfbW9kZWwgPSBjLSZndDt4ODZfc3RlcHBpbmcgPSAwOwkvKiBTbyBmYXIgdW5rbm93bi4uLiAqLwotCWMtJmd0O3g4Nl92ZW5kb3JfaWRbMF0gPSAmIzM5O1wwJiMzOTs7IC8qIFVuc2V0ICovCi0JYy0mZ3Q7eDg2X21vZGVsX2lkWzBdID0gJiMzOTtcMCYjMzk7OyAgLyogVW5zZXQgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZSA9IDY0OwotCWMtJmd0O3g4Nl9waHlzX2JpdHMgPSAzNjsKLQljLSZndDt4ODZfdmlydF9iaXRzID0gNDg7Ci0jZWxzZQotCWMtJmd0O2NwdWlkX2xldmVsID0gLTE7CS8qIENQVUlEIG5vdCBkZXRlY3RlZCAqLwotCWMtJmd0O3g4Nl9jbGZsdXNoX3NpemUgPSAzMjsKLQljLSZndDt4ODZfcGh5c19iaXRzID0gMzI7Ci0JYy0mZ3Q7eDg2X3ZpcnRfYml0cyA9IDMyOwotI2VuZGlmCi0JYy0mZ3Q7eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtJmd0O3g4Nl9jbGZsdXNoX3NpemU7Ci0JbWVtc2V0KCZhbXA7Yy0mZ3Q7eDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt4ODZfY2FwYWJpbGl0eSkpOwotCW1lbXNldCgmYW1wO2MtJmd0O2NwdWlkLCAwLCBzaXplb2YoYy0mZ3Q7Y3B1aWQpKTsKLSNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTCi0JbWVtc2V0KCZhbXA7Yy0mZ3Q7dm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt2bXhfY2FwYWJpbGl0eSkpOwotI2VuZGlmCi0KLQlnZW5lcmljX2lkZW50aWZ5KGMpOwogCiYjNDM7bm9fY3B1aWQ6CiAJY3B1X3BhcnNlX3RvcG9sb2d5KGMpOwogCiAJaWYgKHRoaXNfY3B1LSZndDtjX2lkZW50aWZ5KQpAQCAtMjExNiw2ICYjNDM7MjExNCw5IEBAIHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiAJbWNoZWNrX2NwdV9pbml0KGMpOwogCiAJbnVtYV9hZGRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19YODZfMzIpKQomIzQzOwkJZW5hYmxlX3NlcF9jcHUoKTsKIH0KIAogLyoKQEAgLTIxNTMsOSAmIzQzOzIxNTQsNiBAQCBzdGF0aWMgX19pbml0IHZvaWQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZCkKIAlpZGVudGlmeV9jcHUoJmFtcDtib290X2NwdV9kYXRhKTsKIAlpZiAoSEFTX0tFUk5FTF9JQlQgJmFtcDsmYW1wOyBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0lCVCkpCiAJCXByX2luZm8oJiMzNDtDRVQgZGV0ZWN0ZWQ6IEluZGlyZWN0IEJyYW5jaCBUcmFja2luZyBlbmFibGVkXG4mIzM0Oyk7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWVuYWJsZV9zZXBfY3B1KCk7Ci0jZW5kaWYKIAljcHVfZGV0ZWN0X3RsYigmYW1wO2Jvb3RfY3B1X2RhdGEpOwogCXNldHVwX2NyX3Bpbm5pbmcoKTsKIApAQCAtMjE3NCwxMCAmIzQzOzIxNzIsOCBAQCB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSkKIAkJKmMgPSBib290X2NwdV9kYXRhOwogCWMtJmd0O2NwdV9pbmRleCA9IGNwdTsKIAomIzQzOwlpbml0X2NwdV9pbmZvKGMpOwogCWlkZW50aWZ5X2NwdShjKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZW5hYmxlX3NlcF9jcHUoKTsKLSNlbmRpZgogCXg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTsKIAl1cGRhdGVfc3JiZHNfbXNyKCk7CiAJaWYgKGJvb3RfY3B1X2hhc19idWcoWDg2X0JVR19HRFMpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogQ1BVIElkZW50aWZpY2F0aW9uIFJlZmFjdG9yaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIENQVSBpZGVudGlmaWNhdGlvbiBjb2RlIGluIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYC4gSXQmIzM5O3MgbW92aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgaW5pdF9jcHVfaW5mbygpYCwgYW5kIGNvbnNvbGlkYXRpbmcgc29tZSBvdGhlciBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4KCkluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgYSByZWZhY3RvcmluZy4gQnV0IHdhaXQsIHRoaXMgYGluaXRfY3B1X2luZm8oKWAgY2FsbCBoYXMgYmVlbiBtb3ZlZCBpbnRvIGBlYXJseV9pZGVudGlmeV9jcHUoKWAuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGBpbml0X2NwdV9pbmZvKClgIG5vdyByZXNldHMgYSBidW5jaCBvZiBgY3B1aW5mb194ODZgIG1lbWJlcnMgdGhhdCB3ZXJlICpub3QqIHJlc2V0IHByZXZpb3VzbHkuIFRoaXMgcGFydCBpcyBleGVjdXRlZCB2ZXJ5IGVhcmx5LCBiZWZvcmUgdGhlIGZ1enplciB0eXBpY2FsbHkgcnVucywgbWFraW5nIGl0IGxlc3Mgb2YgYSBwcmlvcml0eSBmb3Igc3l6a2FsbGVyLgoKSG93ZXZlciwgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAgaXMgbm93IGFsc28gY2FsbGluZyB0aGUgc2FtZSByZWZhY3RvcmVkIGNvZGUuIEFuZCBzZWNvbmRhcnkgQ1BVIGlkZW50aWZpY2F0aW9uIGhhcHBlbnMgZHVyaW5nIENQVSBob3RwbHVnLCB3aGljaCAqaXMqIHNvbWV0aGluZyBhIGZ1enplciBjYW4gdHJpZ2dlci4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZyEgU28sIHRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhpcyByZWZhY3RvcmluZyBleHBvc2UgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJvZHVjZSBhIGJ1Zz8gSXQgaXMgdmVyeSBsaWtlbHksIHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggQ1BVIGluaXRpYWxpemF0aW9uLCB0aGF0IGEgYnVnIGNvdWxkIHJlc3VsdCBpbiBzdGFsZSBkYXRhIG9uIGEgc2Vjb25kYXJ5IENQVS4KClRoZSBjb21taXQgbWVzc2FnZSBpdHNlbGYgaXMgYSBiaXQgZ2VuZXJpYyAoJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0OykuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgYSBTeXprYWxsZXItcmVsYXRlZCBjaGFuZ2UsIHdoaWNoIG1lYW5zIHdlIHNob3VsZCBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbi4KCkFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiwgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4gSG93ZXZlciwgdGhpcyBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSwgYXMgQ1BVIGhvdHBsdWcgaXMgcG9zc2libGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuIFRoaXMgbW9kaWZpY2F0aW9uIHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMgKHg4NiBDUFUgaWRlbnRpZmljYXRpb24pIGFuZCBjYW4gYmUgcmVhY2hlZC4gU28sIGJhc2VkIG9uIHRoZSBkb2N1bWVudGVkIGd1aWRlbGluZXMsIEkgc2hvdWxkIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbj8gRGVmaW5pdGVseSBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAsIGJlY2F1c2UgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBob3RwbHVnLiBgZWFybHlfaWRlbnRpZnlfY3B1YCBpcyBsZXNzIGltcG9ydGFudCBub3csIGFzIGl0IGV4ZWN1dGVzIHNvIGVhcmx5LiBgaWRlbnRpZnlfY3B1YCBpcyBhbm90aGVyIGtleSBvbmUsIHNpbmNlIGl0IGlzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uLiBBbmQgYGVuYWJsZV9zZXBfY3B1YCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaWRlbnRpZnlfY3B1YC4KCkkgbmVlZCB0byBjb25maXJtIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCBpcyByZWFjaGFibGUuIFllcCwgdmlhIENQVSBob3RwbHVnLCB0aGF0JiMzOTtzIHdoYXQmIzM5O3Mga2V5IGhlcmUuIEFuZCBgZW5hYmxlX3NlcF9jcHVgIHdpbGwgbm93IGJlIGltcGFjdGVkIGJ5IENQVSBob3RwbHVnIGFzIGl0IGlzIGNhbGxlZCBieSBgaWRlbnRpZnlfY3B1YAoKSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBjb25maXJtIG15IGZpbmRpbmdzIG9uIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBtYWtlIHN1cmUgbXkgY29uY2x1c2lvbnMgYXJlIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkZW50aWZ5X3NlY29uZGFyeV9jcHUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MjM3PWV4dGVybiB2b2lkIGVhcmx5X2NwdV9pbml0KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MjM4OmV4dGVybiB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0yMzktZXh0ZXJuIHZvaWQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9feDg2ICopO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM9MjA3PXN0YXRpYyB2b2lkIGluaXRfYW1kX2s3KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTIzOC1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MjM5Olx0LyogY2FsbGluZyBpcyBmcm9tIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKSA/ICovXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTI0MC1cdGlmICghYy1cdTAwM2VjcHVfaW5kZXgpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYz0yMTUyPXN0YXRpYyBfX2luaXQgdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjE2NS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmM6MjE2Njp2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjE2Ny17XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jPTM2Mj1zdGF0aWMgdm9pZCBpbnRlbF9zbXBfY2hlY2soc3RydWN0IGNwdWluZm9feDg2ICpjKVxuYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jLTM2My17XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmM6MzY0Olx0LyogY2FsbGluZyBpcyBmcm9tIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKSA/ICovXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMtMzY1LVx0aWYgKCFjLVx1MDAzZWNwdV9pbmRleClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jPTE3MD1zdGF0aWMgdm9pZCBhcF9zdGFydGluZyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zbXBib290LmMtMTg5LVx0LyogU2F2ZSB0aGUgcHJvY2Vzc29yIHBhcmFtZXRlcnMuICovXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jOjE5MDpcdGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoY3B1aWQpO1xuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0xOTEtXG4tLVxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYz0yMTE9c3RhdGljIHZvaWQgYXBfY2FsaWJyYXRlX2RlbGF5KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0yMTQtXHQgKiBDYWxpYnJhdGUgdGhlIGRlbGF5IGxvb3AgYW5kIHVwZGF0ZSBsb29wc19wZXJfamlmZnkgaW4gY3B1X2RhdGEuXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jOjIxNTpcdCAqIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKSBzdG9yZWQgYSB2YWx1ZSB0aGF0IGlzIGNsb3NlIGJ1dCBub3QgYXNcbmFyY2gveDg2L2tlcm5lbC9zbXBib290LmMtMjE2LVx0ICogYWNjdXJhdGUgYXMgdGhlIHZhbHVlIGp1c3QgY2FsY3VsYXRlZC5cbi0tXG5hcmNoL3g4Ni94ZW4vc21wX3B2LmM9NTc9c3RhdGljIHZvaWQgY3B1X2JyaW5ndXAodm9pZClcbi0tXG5hcmNoL3g4Ni94ZW4vc21wX3B2LmMtNzEtXHRjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG5hcmNoL3g4Ni94ZW4vc21wX3B2LmM6NzI6XHRpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGNwdSk7XG5hcmNoL3g4Ni94ZW4vc21wX3B2LmMtNzMtXHRzZXRfY3B1X3NpYmxpbmdfbWFwKGNwdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgY2FsbGVkIGZyb20gYGFwX3N0YXJ0aW5nYCBhbmQgYGNwdV9icmluZ3VwYCwgYm90aCByZWxhdGVkIHRvIENQVSBob3RwbHVnLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIENQVSBob3RwbHVnIGlzIGRlZmluaXRlbHkgYSBmdXp6YWJsZSBhcmVhLCBhbmQgU3l6a2FsbGVyIGNhbiwgaW4gZmFjdCwgb2ZmbGluZSBhbmQgb25saW5lIENQVXMuIFRoYXQgbWFrZXMgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgYSBmb2N1c2VkIGZ1enppbmcgdGFyZ2V0LgoKTm93LCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBpZGVudGlmeV9jcHVgLiBCdXQgd2FpdCwgaXQmIzM5O3MgYHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdSgpYC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IGEgYmFkIGNob2ljZSBmb3IgZnV6emluZyBiZWNhdXNlIHRoZXkgYXJlIGRpZmZpY3VsdCB0byByZWFjaCBmcm9tIHRoZSBvdXRzaWRlLiBTbywgYGlkZW50aWZ5X2NwdWAsIGBpbml0X2NwdV9pbmZvYCBhbmQgYGVhcmx5X2lkZW50aWZ5X2NwdWAgYXJlIG91dC4KCk9rYXksIGJhY2sgdG8gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgLiBJdCBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IHJlYWNoYWJsZSBmdW5jdGlvbiBtb2RpZmllZCBieSB0aGUgcGF0Y2gsIHRoYXQgaXNuJiMzOTt0IHN0YXRpYy4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBleHBvcnRlZCBhbmQgbm90IHN0YXRpYy4uLiBhbmQgeWVzLCBgdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpYCBjb25maXJtcyBpdCBpcyBub24tc3RhdGljLiBHb29kLgoKVGhlIHBhdGNoIG1lbnRpb25zIGEgZmV3IGBDT05GSUdgIG9wdGlvbnM6IGBDT05GSUdfWDg2XzMyYCwgYENPTkZJR19YODZfNjRgLCBhbmQgYENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVNgLiBUaGUgbGF0dGVyIHR3byBhcmUgZmFpcmx5IHN0YW5kYXJkIGZvciB4ODYuIFRoZSBmaXJzdCBtaWdodCBiZSBpbnRlcmVzdGluZyBpZiB3ZSB3YW50IHRvIHRlc3QgYSAzMi1iaXQgeDg2IGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzbiYjMzk7dCB0aGUgU3l6a2FsbGVyIGRlZmF1bHQuIFRoZSBtb3JlIGltcG9ydGFudCBjb25maWd1cmF0aW9uIGFwcGVhcnMgdG8gYmUgYENPTkZJR19IT1RQTFVHX0NQVWAsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBlc3NlbnRpYWwuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlIHRoYXQgYGdlbmVyaWNfaWRlbnRpZnlgIGhhcyBiZWVuIG1lcmdlZCBpbnRvIGBpZGVudGlmeV9jcHVgLiBFc3NlbnRpYWxseSwgYGlkZW50aWZ5X2NwdWAgaGFzIGJlZW4gdXBkYXRlZCBhbmQgbm93IGhvbGRzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBtZXJnZWQgZnVuY3Rpb24uCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgLCBlbnN1cmluZyB0aGF0IEkgaGF2ZSBgQ09ORklHX0hPVFBMVUdfQ1BVYCBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYENPTkZJR19YODZfMzJgIG1pZ2h0IGJlIHJlbGV2YW50IGlmIEkgd2FudCB0byBleHBsb3JlIDMyLWJpdCBzcGVjaWZpYyBiZWhhdmlvci4gSSBzaG91bGQgYWxzbyBiZSBtaW5kZnVsIG9mIHRoZSBjaGFuZ2VzIHRvIGBpZGVudGlmeV9jcHVgLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIHNpbmNlIHRob3NlIGNoYW5nZXMgYXJlIG5vdyBwYXJ0IG9mIHRoZSBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgY2FsbCBjaGFpbi4gSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGluIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYCB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFuZCBmb2N1c2VkIGFwcHJvYWNoIHRvIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTIzNz1leHRlcm4gdm9pZCBlYXJseV9jcHVfaW5pdCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIzODpleHRlcm4gdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMjM5LWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jPTIxNTI9c3RhdGljIF9faW5pdCB2b2lkIGlkZW50aWZ5X2Jvb3RfY3B1KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yMTY1LVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYzoyMTY2OnZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yMTY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTkzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDUFUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3IgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgaXQgbWlnaHQgZGVwZW5kIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgaGVyZS4KClJpZ2h0LCBJIHNlZSB0aGF0IGBDT05GSUdfWDg2XzMyYCBhbmQgYENPTkZJR19YODZfNjRgIGFyZSBib3RoIGJlaW5nIHVzZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbmF0dXJlIG9mIENQVSBpZGVudGlmaWNhdGlvbi4gSSBhbHNvIHNwb3QgYENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVNgIHdoaWNoIGlzIGludGVyZXN0aW5nLCBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gdGhlIGJhY2sgb2YgbXkgbWluZC4KCk5vdywgYSBxdWljayB0aG91Z2h0OiBzaG91bGQgd2UgYmUgZXhwbGljaXRseSBlbmFibGluZyBgSE9UUExVR19DUFVgIGhlcmU/IEl0JiMzOTtzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl0IG1pZ2h0IGJlIHdvcnRoIG1ha2luZyB0aGF0IGRlcGVuZGVuY3kgZXhwbGljaXQgZm9yIGNsYXJpdHkgYW5kIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgcnVuIGludG8gYW55IHVuZXhwZWN0ZWQgaXNzdWVzLiBJJiMzOTtsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBIT1RQTFVHX0NQVWAgaXMgdGhlIGNvcnJlY3QgbmFtZSBmb3IgdGhlIGNvbmZpZyBiZWZvcmUgSSBhZGQgaXQuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBkZXRhaWxzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIT1RQTFVHX0NQVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnPTEwNTE9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL2FybS9LY29uZmlnLTEwNjItXG5hcmNoL2FybS9LY29uZmlnOjEwNjM6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL2FybS9LY29uZmlnLTEwNjQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1wmIzM0O1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0xNTY3PWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE1NzEtXG5hcmNoL2FybTY0L0tjb25maWc6MTU3Mjpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTczLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcJiMzNDtcbi0tXG5hcmNoL2Nza3kvS2NvbmZpZz0zMzA9Y29uZmlnIERSQU1fQkFTRVxuLS1cbmFyY2gvY3NreS9LY29uZmlnLTMzMy1cbmFyY2gvY3NreS9LY29uZmlnOjMzNDpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvY3NreS9LY29uZmlnLTMzNS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz01MTQ9Y29uZmlnIFNNUFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTMxLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1MzI6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUzMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9taXBzL0tjb25maWc9MjcwND1jb25maWcgU01QXG4tLVxuYXJjaC9taXBzL0tjb25maWctMjcyNS1cbmFyY2gvbWlwcy9LY29uZmlnOjI3MjY6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL21pcHMvS2NvbmZpZy0yNzI3LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcJiMzNDtcbi0tXG5hcmNoL3BhcmlzYy9LY29uZmlnPTMzMT1jb25maWcgSVJRU1RBQ0tTXG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zMzgtXG5hcmNoL3BhcmlzYy9LY29uZmlnOjMzOTpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvcGFyaXNjL0tjb25maWctMzQwLVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnPTU4MD1jb25maWcgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORV9OVU1fUkVTRVJWRVxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU5MS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnOjU5Mjpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU5My1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIENQVXNcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9NDUwPWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ1OS1cbmFyY2gvcmlzY3YvS2NvbmZpZzo0NjA6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3Jpc2N2L0tjb25maWctNDYxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz01MjU9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01MzYtXG5hcmNoL3MzOTAvS2NvbmZpZzo1Mzc6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3MzOTAvS2NvbmZpZy01MzgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zaC9LY29uZmlnPTU5MT1jb25maWcgTlJfQ1BVU1xuLS1cbmFyY2gvc2gvS2NvbmZpZy02MDQtXG5hcmNoL3NoL0tjb25maWc6NjA1OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9zaC9LY29uZmlnLTYwNi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTIyMD1jb25maWcgRUFSTFlGQlxuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZy0yMjgtXG5hcmNoL3NwYXJjL0tjb25maWc6MjI5OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9zcGFyYy9LY29uZmlnLTIzMC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz0yMTUwPWNvbmZpZyBBRERSRVNTX01BU0tJTkdcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjEtXG5hcmNoL3g4Ni9LY29uZmlnOjIxNjI6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjMtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94dGVuc2EvS2NvbmZpZz0yNTM9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL3h0ZW5zYS9LY29uZmlnLTI1OC1cbmFyY2gveHRlbnNhL0tjb25maWc6MjU5OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC94dGVuc2EvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O0VuYWJsZSBDUFUgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMwoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHg4NiBDUFUgSWRlbnRpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gYEhPVFBMVUdfQ1BVYCBpcyAqYWx3YXlzKiBlbmFibGVkIG9uIHg4NiDigJMgZHVoLCBgZGVmX2Jvb2wgeWAuIE5vIG5lZWQgdG8gZXZlbiB0aGluayBhYm91dCBhZGRpbmcgaXQgdG8gYW55IGNvbmZpZ3VyYXRpb24gbGlzdC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgZWxzZSBkb2VzIHRoaXMgcGF0Y2ggdG91Y2g/IGBjaGVja19udWxsX3NlZ19jbGVhcnNfYmFzZWAgaXMgdW50b3VjaGVkLCBnb29kLiBgaWRlbnRpZnlfYm9vdF9jcHVgIGlzIGBfX2luaXRgLCBhcyBpcyBgZWFybHlfaWRlbnRpZnlfY3B1YC4gIGBpbml0X2NwdV9pbmZvYCBhbmQgYGlkZW50aWZ5X2NwdWAgYXJlIGJvdGggc3RhdGljLiBUaGF0IGxlYXZlcyB1cyB3aXRoIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIG9ubHkgZnVuY3Rpb24gcG90ZW50aWFsbHkgYWZmZWN0ZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiAqQ2xpY2tpdHktY2xpY2ssIHNjcm9sbGluZy4uLiogQWgsIGl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZy4gVGhlIG9sZCBgZ2VuZXJpY19pZGVudGlmeWAgZnVuY3Rpb24gaXMgZ29uZSwgcmVwbGFjZWQgd2l0aCBgaWRlbnRpZnlfY3B1YC4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhpcyBpcyB3aGVyZSB0aGUgKnJlYWwqIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyByZXNpZGVzLiBUaGVyZSYjMzk7cyBzb21lIGNoYW5nZXMgd2l0aGluIHRoZSBgaWRlbnRpZnlfY3B1YCBmdW5jdGlvbiBpdHNlbGYuIEl0JiMzOTtzIGluaXRpYWxpemluZyBgYy0mZ3Q7bG9vcHNfcGVyX2ppZmZ5YCBub3csIGFuZCB0aGUgcHJldmlvdXMgY2hlY2sgZm9yIENQVUlEIGlzIG5vdyBkb25lIHZpYSBhIGNhbGwgdG8gYGNwdWlkX2ZlYXR1cmUoKWAuCgpIbW0sIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyEgVGhpcyBtb2RpZmllcyBjb3JlIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMhIEl0JiMzOTtzICpyZWFjaGFibGUqIGR1cmluZyBDUFUgaG90cGx1ZywgYW5kIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYSBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gUmVmYWN0b3JpbmcsIGhvd2V2ZXIgbWlub3IgaXQgc2VlbXMsIGlzIGFuIG9wcG9ydHVuaXR5IHRvIGludHJvZHVjZSBzdWJ0bGUgYnVncy4gV2UgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcywgaW5jb3JyZWN0IENQVSBmZWF0dXJlIGRldGVjdGlvbiwgb3Igc29tZXRoaW5nIGp1c3QgcGxhaW4gYnJva2VuLCB3aGljaCBtaWdodCBtYW5pZmVzdCBhcyBhIGNyYXNoIGxhdGVyLiBMZXQmIzM5O3MgZ2V0IHRoaXMgaW50byB0aGUgZnV6emluZyBwaXBlbGluZSwgc3RhdCEgT2theSwgSSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZGVudGlmeV9zZWNvbmRhcnlfY3B1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB4ODYgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljLCBtb3ZpbmcgaW5pdGlhbGl6YXRpb24gaW50byBhIG5ldyBgaW5pdF9jcHVfaW5mb2AgZnVuY3Rpb24gYW5kIG1lcmdpbmcgYGdlbmVyaWNfaWRlbnRpZnlgIGludG8gYGlkZW50aWZ5X2NwdWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBDUFUgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBhcmUgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkLiBXaGlsZSBtdWNoIG9mIHRoaXMgcnVucyBkdXJpbmcgZWFybHkgYm9vdCwgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGlzIGV4ZWN1dGVkIHdoZW4gc2Vjb25kYXJ5IENQVXMgYXJlIGJyb3VnaHQgb25saW5lLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiBGdXp6aW5nIENQVSBob3RwbHVnIGNvdWxkIHJldmVhbCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBpbmNvcnJlY3QgZmVhdHVyZSBkZXRlY3Rpb24gaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkZW50aWZ5X3NlY29uZGFyeV9jcHUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyBpbiB4ODYgYnkgY29uc29saWRhdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBjcHVpbmZvX3g4NmAgZmllbGRzIGludG8gYSBuZXcgYGluaXRfY3B1X2luZm8oKWAgZnVuY3Rpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byBDUFUgYm9vdCBhbmQgaG90cGx1ZyBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOGQ5NDU1NmEzYTdjYTg3YWYzMzlhMjQ4OTRjMzVjZWEyMDdkZDVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMDA6MDA6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCBhM2RmMjFkMjY0NjA2Li5lMGM3MGEyNTEwYWZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTE3NzIsMjUgJiM0MzsxNzcyLDUwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcHVfcGFyc2VfZWFybHlfcGFyYW0odm9pZCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpbml0X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKJiM0Mzt7CiYjNDM7CWMtJmd0O3g4Nl9jYWNoZV9zaXplID0gMDsKJiM0MzsJYy0mZ3Q7eDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTjsKJiM0MzsJYy0mZ3Q7eDg2X21vZGVsID0gYy0mZ3Q7eDg2X3N0ZXBwaW5nID0gMDsJLyogU28gZmFyIHVua25vd24uLi4gKi8KJiM0MzsJYy0mZ3Q7eDg2X3ZlbmRvcl9pZFswXSA9ICYjMzk7XDAmIzM5OzsgLyogVW5zZXQgKi8KJiM0MzsJYy0mZ3Q7eDg2X21vZGVsX2lkWzBdID0gJiMzOTtcMCYjMzk7OyAgLyogVW5zZXQgKi8KJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAomIzQzOwljLSZndDt4ODZfY2xmbHVzaF9zaXplID0gNjQ7CiYjNDM7CWMtJmd0O3g4Nl9waHlzX2JpdHMgPSAzNjsKJiM0MzsJYy0mZ3Q7eDg2X3ZpcnRfYml0cyA9IDQ4OwomIzQzOyNlbHNlCiYjNDM7CWMtJmd0O2NwdWlkX2xldmVsID0gLTE7CS8qIENQVUlEIG5vdCBkZXRlY3RlZCAqLwomIzQzOwljLSZndDt4ODZfY2xmbHVzaF9zaXplID0gMzI7CiYjNDM7CWMtJmd0O3g4Nl9waHlzX2JpdHMgPSAzMjsKJiM0MzsJYy0mZ3Q7eDg2X3ZpcnRfYml0cyA9IDMyOwomIzQzOyNlbmRpZgomIzQzOwljLSZndDt4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZTsKJiM0MzsJbWVtc2V0KCZhbXA7Yy0mZ3Q7eDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt4ODZfY2FwYWJpbGl0eSkpOwomIzQzOwltZW1zZXQoJmFtcDtjLSZndDtjcHVpZCwgMCwgc2l6ZW9mKGMtJmd0O2NwdWlkKSk7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVMKJiM0MzsJbWVtc2V0KCZhbXA7Yy0mZ3Q7dm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt2bXhfY2FwYWJpbGl0eSkpOwomIzQzOyNlbmRpZgomIzQzOwljLSZndDtleHRlbmRlZF9jcHVpZF9sZXZlbCA9IDA7CiYjNDM7fQomIzQzOwogLyoKICAqIERvIG1pbmltdW0gQ1BVIGRldGVjdGlvbiBlYXJseS4KICAqIEZpZWxkcyByZWFsbHkgbmVlZGVkOiB2ZW5kb3IsIGNwdWlkX2xldmVsLCBmYW1pbHksIG1vZGVsLCBtYXNrLAogICogY2FjaGUgYWxpZ25tZW50LgotICogVGhlIG90aGVycyBhcmUgbm90IHRvdWNoZWQgdG8gYXZvaWQgdW53YW50ZWQgc2lkZSBlZmZlY3RzLgomIzQzOyAqIFRoZSBvdGhlcnMgYXJlIHJlc2V0IHRvIHRoZWlyIGRlZmF1bHRzIGhlcmUgYW5kIG9ubHkgZmlsbGVkIGluIGxhdGVyLAomIzQzOyAqIGJ5IGlkZW50aWZ5X2NwdSgpLgogICoKICAqIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gdGhlIGJvb3QgQ1BVLiAgRG9uJiMzOTt0IGFkZCBjb2RlCiAgKiBoZXJlIHRoYXQgaXMgc3VwcG9zZWQgdG8gcnVuIG9uIGFsbCBDUFVzLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQltZW1zZXQoJmFtcDtjLSZndDt4ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtJmd0O3g4Nl9jYXBhYmlsaXR5KSk7Ci0JbWVtc2V0KCZhbXA7Yy0mZ3Q7Y3B1aWQsIDAsIHNpemVvZihjLSZndDtjcHVpZCkpOwotCWMtJmd0O2V4dGVuZGVkX2NwdWlkX2xldmVsID0gMDsKJiM0MzsJaW5pdF9jcHVfaW5mbyhjKTsKIAogCWlmICghY3B1aWRfZmVhdHVyZSgpKQogCQlpZGVudGlmeV9jcHVfd2l0aG91dF9jcHVpZChjKTsKIAotCS8qIGN5cml4IGNvdWxkIGhhdmUgY3B1aWQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpKi8KJiM0MzsJLyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovCiAJaWYgKGNwdWlkX2ZlYXR1cmUoKSkgewogCQljcHVpZF9zY2FuX2NwdShjKTsKIAkJY3B1X2RldGVjdChjKTsKQEAgLTE5NTQsMTYgJiM0MzsxOTc5LDIxIEBAIHZvaWQgY2hlY2tfbnVsbF9zZWdfY2xlYXJzX2Jhc2Uoc3RydWN0IGNwdWluZm9feDg2ICpjKQogCXNldF9jcHVfYnVnKGMsIFg4Nl9CVUdfTlVMTF9TRUcpOwogfQogCi1zdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKJiM0MzsvKgomIzQzOyAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JYy0mZ3Q7ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJYy0mZ3Q7bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OwogCiAJaWYgKCFjcHVpZF9mZWF0dXJlKCkpCiAJCWlkZW50aWZ5X2NwdV93aXRob3V0X2NwdWlkKGMpOwogCi0JLyogY3lyaXggY291bGQgaGF2ZSBjcHVpZCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkqLwomIzQzOwkvKiBDeXJpeCBjb3VsZCBoYXZlIENQVUlEIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKS4gKi8KIAlpZiAoIWNwdWlkX2ZlYXR1cmUoKSkKLQkJcmV0dXJuOwomIzQzOwkJZ290byBub19jcHVpZDsKIAogCWNwdWlkX3NjYW5fY3B1KGMpOwogCWNwdV9kZXRlY3QoYyk7CkBAIC0xOTkxLDQwICYjNDM7MjAyMSw4IEBAIHN0YXRpYyB2b2lkIGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKQogI2lmZGVmIENPTkZJR19YODZfMzIKIAlzZXRfY3B1X2J1ZyhjLCBYODZfQlVHX0VTUEZJWCk7CiAjZW5kaWYKLX0KLQotLyoKLSAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLgotICovCi1zdGF0aWMgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCWludCBpOwotCi0JYy0mZ3Q7bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OwotCWMtJmd0O3g4Nl9jYWNoZV9zaXplID0gMDsKLQljLSZndDt4ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOOwotCWMtJmd0O3g4Nl9tb2RlbCA9IGMtJmd0O3g4Nl9zdGVwcGluZyA9IDA7CS8qIFNvIGZhciB1bmtub3duLi4uICovCi0JYy0mZ3Q7eDg2X3ZlbmRvcl9pZFswXSA9ICYjMzk7XDAmIzM5OzsgLyogVW5zZXQgKi8KLQljLSZndDt4ODZfbW9kZWxfaWRbMF0gPSAmIzM5O1wwJiMzOTs7ICAvKiBVbnNldCAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLQljLSZndDt4ODZfY2xmbHVzaF9zaXplID0gNjQ7Ci0JYy0mZ3Q7eDg2X3BoeXNfYml0cyA9IDM2OwotCWMtJmd0O3g4Nl92aXJ0X2JpdHMgPSA0ODsKLSNlbHNlCi0JYy0mZ3Q7Y3B1aWRfbGV2ZWwgPSAtMTsJLyogQ1BVSUQgbm90IGRldGVjdGVkICovCi0JYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZSA9IDMyOwotCWMtJmd0O3g4Nl9waHlzX2JpdHMgPSAzMjsKLQljLSZndDt4ODZfdmlydF9iaXRzID0gMzI7Ci0jZW5kaWYKLQljLSZndDt4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZTsKLQltZW1zZXQoJmFtcDtjLSZndDt4ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtJmd0O3g4Nl9jYXBhYmlsaXR5KSk7Ci0JbWVtc2V0KCZhbXA7Yy0mZ3Q7Y3B1aWQsIDAsIHNpemVvZihjLSZndDtjcHVpZCkpOwotI2lmZGVmIENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVMKLQltZW1zZXQoJmFtcDtjLSZndDt2bXhfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtJmd0O3ZteF9jYXBhYmlsaXR5KSk7Ci0jZW5kaWYKLQotCWdlbmVyaWNfaWRlbnRpZnkoYyk7CiAKJiM0Mztub19jcHVpZDoKIAljcHVfcGFyc2VfdG9wb2xvZ3koYyk7CiAKIAlpZiAodGhpc19jcHUtJmd0O2NfaWRlbnRpZnkpCkBAIC0yMTE2LDYgJiM0MzsyMTE0LDkgQEAgc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAltY2hlY2tfY3B1X2luaXQoYyk7CiAKIAludW1hX2FkZF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKJiM0MzsKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpCiYjNDM7CQllbmFibGVfc2VwX2NwdSgpOwogfQogCiAvKgpAQCAtMjE1Myw5ICYjNDM7MjE1NCw2IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKQogCWlkZW50aWZ5X2NwdSgmYW1wO2Jvb3RfY3B1X2RhdGEpOwogCWlmIChIQVNfS0VSTkVMX0lCVCAmYW1wOyZhbXA7IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJUKSkKIAkJcHJfaW5mbygmIzM0O0NFVCBkZXRlY3RlZDogSW5kaXJlY3QgQnJhbmNoIFRyYWNraW5nIGVuYWJsZWRcbiYjMzQ7KTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZW5hYmxlX3NlcF9jcHUoKTsKLSNlbmRpZgogCWNwdV9kZXRlY3RfdGxiKCZhbXA7Ym9vdF9jcHVfZGF0YSk7CiAJc2V0dXBfY3JfcGlubmluZygpOwogCkBAIC0yMTc0LDEwICYjNDM7MjE3Miw4IEBAIHZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KQogCQkqYyA9IGJvb3RfY3B1X2RhdGE7CiAJYy0mZ3Q7Y3B1X2luZGV4ID0gY3B1OwogCiYjNDM7CWluaXRfY3B1X2luZm8oYyk7CiAJaWRlbnRpZnlfY3B1KGMpOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQllbmFibGVfc2VwX2NwdSgpOwotI2VuZGlmCiAJeDg2X3NwZWNfY3RybF9zZXR1cF9hcCgpOwogCXVwZGF0ZV9zcmJkc19tc3IoKTsKIAlpZiAoYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX0dEUykpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODM4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ1BVIElkZW50aWZpY2F0aW9uIFJlZmFjdG9yKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNgLCBzcGVjaWZpY2FsbHkgdGhlIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSByZWZhY3RvcmluZyBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpYCwgd2hpY2ggc2VlbXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgZmllbGRzIG9mIHRoZSBgc3RydWN0IGNwdWluZm9feDg2YC4gSXQmIzM5O3MgY2FsbGVkIGluIGJvdGggYGVhcmx5X2lkZW50aWZ5X2NwdSgpYCBhbmQgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAsIGFuZCB0aGUgb2xkIGBnZW5lcmljX2lkZW50aWZ5KClgIGhhcyBiZWVuIG1lcmdlZCBpbnRvIGBpZGVudGlmeV9jcHUoKWAuIEluaXRpYWxpemF0aW9uIGxvZ2ljIGhhcyBhbHNvIGJlZW4gbW92ZWQgZnJvbSBgaWRlbnRpZnlfY3B1KClgIHRvIGBpbml0X2NwdV9pbmZvKClgLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBhY3R1YWxseSAqYWRkcyogaW5pdGlhbGl6YXRpb24gaW4gYGVhcmx5X2lkZW50aWZ5X2NwdSgpYCBhbmQgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAuIFByZXZpb3VzbHksIGBlYXJseV9pZGVudGlmeV9jcHUoKWAgd2FzIGRvaW5nIG9ubHkgYSBgbWVtc2V0YCBvbiBhIGZldyBrZXkgYXJlYXMgKGB4ODZfY2FwYWJpbGl0eWAsIGBjcHVpZGApIGFuZCBzZXR0aW5nIGBleHRlbmRlZF9jcHVpZF9sZXZlbGAgdG8gMC4gTm93LCBgaW5pdF9jcHVfaW5mbyhjKWAgaXMgY2FsbGVkIHdoaWNoIGRvZXMgdGhpcyBhbmQgbW9yZS4gVGhhdOKAmXMgYSBnb29kIHNpZ24sIHJlZHVjZXMgdGhlIHJpc2sgb2Ygc29tZSBzdWJ0bGUsIGx1cmtpbmcgaXNzdWUuCgpCdXQgdGhlbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzZWNvbmRhcnkgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljIHdvcmtzLiBJbiBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpYCwgSSBzZWU6CgpgYGBjCglpZiAoYyA9PSAmYW1wO2Jvb3RfY3B1X2RhdGEpCgkJKmMgPSBib290X2NwdV9kYXRhOwoJYy0mZ3Q7Y3B1X2luZGV4ID0gY3B1OwoKCWluaXRfY3B1X2luZm8oYyk7CglpZGVudGlmeV9jcHUoYyk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHNldHMgYCpjID0gYm9vdF9jcHVfZGF0YWAgaWYgYGNgIGlzIHRoZSBib290IENQVS4gQnV0ICpjKiBpcyBhIHBvaW50ZXIhIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIHRyYWNlIGl0IGJhY2suIE9rYXksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZDoKCmBgYGMKCWlmIChjID09ICZhbXA7Ym9vdF9jcHVfZGF0YSkKCQkqYyA9IGJvb3RfY3B1X2RhdGE7CmBgYAoKVGhhdCBjYW4mIzM5O3QgYmUgcmlnaHQ7IGl0IHdvdWxkIGJlIGEgbm8tb3AhIEFoLCB0aGF0JiMzOTtzIG5vdCByaWdodCwgbGV0IG1lIGNoZWNrIHRoZSBvcmlnaW5hbCBjb2RlIGFnYWluLiBUaGUgb3JpZ2luYWwgY29kZSB3YXM6CgpgYGBjCglpZiAoYyA9PSAmYW1wO2Jvb3RfY3B1X2RhdGEpCgkJcmV0dXJuOwpgYGAKCk9rYXksIEkgbmVlZCB0byBzZWUgdGhlIGFjdHVhbCBkaWZmLiBMZXQmIzM5O3MgbG9vazoKCmBgYGMKQEAgLTIxNzQsMTAgJiM0MzsyMTcyLDggQEAgdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpCiAJCSpjID0gYm9vdF9jcHVfZGF0YTsKIAljLSZndDtjcHVfaW5kZXggPSBjcHU7CiAKJiM0MzsJaW5pdF9jcHVfaW5mbyhjKTsKIAlpZGVudGlmeV9jcHUoYyk7CmBgYAoKT2theSwgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgZGlmZjoKCmBgYGMKIAlpZiAoYyA9PSAmYW1wO2Jvb3RfY3B1X2RhdGEpCiAJCSpjID0gYm9vdF9jcHVfZGF0YTsKIAljLSZndDtjcHVfaW5kZXggPSBjcHU7CmBgYAoKQWgsIHJpZ2h0ISBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dCBmcm9tIHRoZSBmaWxlIGl0c2VsZi4KCmBgYGMKdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpCnsKCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZhbXA7Y3B1X2RhdGEoY3B1KTsKCglpZiAoYyA9PSAmYW1wO2Jvb3RfY3B1X2RhdGEpCgkJcmV0dXJuOyAvLyB3YWl0LCBubywgdGhlIGRpZmYgc2F5czoKYGBgCgpTbywgdGhlIG9yaWdpbmFsIGNvZGUgcmV0dXJuZWQgaWYgaXQgd2FzIHRoZSBib290IENQVSwgd2hpbGUgbm93IGBpbml0X2NwdV9pbmZvKGMpYCBpcyBjYWxsZWQuIFRoaXMgaXMgdGhlIGRpZmZlcmVuY2UsIHNvIG5vIGlzc3VlIGlmIGBjID09ICZhbXA7Ym9vdF9jcHVfZGF0YWAgaXMgdHJ1ZS4gR29vZC4gQWxsIGluIGFsbCwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCByZWZhY3Rvci4gSXQmIzM5O3MgYWRkaW5nIGluaXRpYWxpemF0aW9uLCB3aGljaCByZWR1Y2VzIHRoZSBjaGFuY2Ugb2Ygc29tZSBvYnNjdXJlIGJ1Zy4gTmVlZCB0byBkb3VibGUtY2hlY2sgc29tZSBjb3JuZXIgY2FzZXMsIGJ1dCBvdmVyYWxsLCBzZWVtcyBzb2xpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTY1Olx0XG4yMTY2Olx0dm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpXG4yMTY3Olx0e1xuMjE2ODpcdFx0c3RydWN0IGNwdWluZm9feDg2ICpjID0gXHUwMDI2Y3B1X2RhdGEoY3B1KTtcbjIxNjk6XHRcbjIxNzA6XHRcdC8qIENvcHkgYm9vdF9jcHVfZGF0YSBvbmx5IG9uIHRoZSBmaXJzdCBicmluZ3VwICovXG4yMTcxOlx0XHRpZiAoIWMtXHUwMDNlaW5pdGlhbGl6ZWQpXG4yMTcyOlx0XHRcdCpjID0gYm9vdF9jcHVfZGF0YTtcbjIxNzM6XHRcdGMtXHUwMDNlY3B1X2luZGV4ID0gY3B1O1xuMjE3NDpcdFxuMjE3NTpcdFx0aW5pdF9jcHVfaW5mbyhjKTtcbjIxNzY6XHRcdGlkZW50aWZ5X2NwdShjKTtcbjIxNzc6XHRcdHg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTtcbjIxNzg6XHRcdHVwZGF0ZV9zcmJkc19tc3IoKTtcbjIxNzk6XHRcdGlmIChib290X2NwdV9oYXNfYnVnKFg4Nl9CVUdfR0RTKSlcbjIxODA6XHRcdFx0dXBkYXRlX2dkc19tc3IoKTtcbjIxODE6XHRcbjIxODI6XHRcdHRzeF9hcF9pbml0KCk7XG4yMTgzOlx0XHRjLVx1MDAzZWluaXRpYWxpemVkID0gdHJ1ZTtcbjIxODQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODEKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENQVSBJZGVudGlmaWNhdGlvbiBSZWZhY3RvcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMuIFJpZ2h0LCBzbyBgaW5pdF9jcHVfaW5mbyhjKWAgaXMgYmVpbmcgY2FsbGVkLCB3aGljaCB0aGVuIHNldHMgdGhlIENQVSBpbmZvcm1hdGlvbi4gVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCB3aGljaCBpcyBnb29kLiBUaGUgY29kZSBpdHNlbGYsIGFzIEkgc2VlIGl0LCBzZXRzIHRoZSBpbml0aWFsIGRhdGEgaW4gdGhlIGJvb3Qgb2YgdGhlIENQVSwgaXQmIzM5O3Mgbm90IGNoYW5naW5nIGFueSBib3VuZHMgY2hlY2tzLCBub3IgaXMgaXQgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaXMganVzdCBjbGVhbmluZyB1cCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3aXRoaW4gYGluaXRfY3B1X2luZm8oKWAuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgaW50ZXJuYWwgdG8gdGhlIENQVSBpZGVudGlmaWNhdGlvbiByb3V0aW5lcyBkdXJpbmcgYm9vdCBhbmQgaG90cGx1Zywgd2hpY2gsIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgaXMgYSBwb3NpdGl2ZSBjaGFuZ2UuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBpbnRlcm5hbCwgYW5kIGl0IGlzIGEgcmVmYWN0b3JpbmcsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gS0FTQU4gYW5kIHRoZSB1c3VhbCBzdGFuZGFyZCBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55dGhpbmcuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4gVGhlIGBzdHJ1Y3QgY3B1aW5mb194ODZgIGlzbiYjMzk7dCBkaXJlY3RseSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ3JlYXQg4oCTIGl0JiMzOTtzIGV4cG9zZWQgdmlhIGAvcHJvYy9jcHVpbmZvYCwgYnV0IHRoYXQgb25seSBwcmludHMgc3BlY2lmaWMgZmllbGRzLCByaWdodD8gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNob3VsZCBiZSBleHBvc2VkLCBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29udHJvbCBmbG93IGhhemFyZHMsIGFzIGZhciBhcyBJIGNhbiBzZWUuCgpTbywgaGVyZSYjMzk7cyB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggaXMgYWJvdXQgQ1BVIGlkZW50aWZpY2F0aW9uIHJlZmFjdG9yaW5nIGFuZCBjb25zb2xpZGF0aW9uLCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBjb25zb2xpZGF0ZWQgaW50byBgaW5pdF9jcHVfaW5mbygpYC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IG1pZ2h0IGxlYWsgaW5mb3JtYXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBleHBvc2VkLCB3aGljaCByZW1vdmVzIGFueSByaXNrIG9mIG1lbW9yeSBsZWFrcyBvciB1c2UgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgZW5vdWdoIHRvIHRha2UgY2FyZSBvZiBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBtYXkgZXhpc3QgaGVyZS4gSXQgbG9va3Mgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyBpbiB4ODYgYnkgY29uc29saWRhdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBjcHVpbmZvX3g4NmAgZmllbGRzIGludG8gYSBuZXcgYGluaXRfY3B1X2luZm8oKWAgZnVuY3Rpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byBDUFUgYm9vdCBhbmQgaG90cGx1ZyBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyBpbiB4ODYgYnkgY29uc29saWRhdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBjcHVpbmZvX3g4NmAgZmllbGRzIGludG8gYSBuZXcgYGluaXRfY3B1X2luZm8oKWAgZnVuY3Rpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byBDUFUgYm9vdCBhbmQgaG90cGx1ZyBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMDo1Ni4yNDgwNDMxMTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk3ODU1MTA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGVudGlmeV9zZWNvbmRhcnlfY3B1XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljIGluIHg4NiBieSBjb25zb2xpZGF0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBmaWVsZHMgaW50byBhIG5ldyBgaW5pdF9jcHVfaW5mbygpYCBmdW5jdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGludGVybmFsIHRvIENQVSBib290IGFuZCBob3RwbHVnIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAwOjU2LjI0ODA0ODY4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxMDMzMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYThkOTQ1NTZhM2E3Y2E4N2FmMzM5YTI0ODk0YzM1Y2VhMjA3ZGQ1ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDowMDo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xcbmluZGV4IGEzZGYyMWQyNjQ2MDYuLmUwYzcwYTI1MTBhZmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcXG5AQCAtMTc3MiwyNSArMTc3Miw1MCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY3B1X3BhcnNlX2Vhcmx5X3BhcmFtKHZvaWQpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuK3tcXG4rXFx0Yy1cXHUwMDNleDg2X2NhY2hlX3NpemUgPSAwO1xcbitcXHRjLVxcdTAwM2V4ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOO1xcbitcXHRjLVxcdTAwM2V4ODZfbW9kZWwgPSBjLVxcdTAwM2V4ODZfc3RlcHBpbmcgPSAwO1xcdC8qIFNvIGZhciB1bmtub3duLi4uICovXFxuK1xcdGMtXFx1MDAzZXg4Nl92ZW5kb3JfaWRbMF0gPSAnXFxcXDAnOyAvKiBVbnNldCAqL1xcbitcXHRjLVxcdTAwM2V4ODZfbW9kZWxfaWRbMF0gPSAnXFxcXDAnOyAgLyogVW5zZXQgKi9cXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4rXFx0Yy1cXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDY0O1xcbitcXHRjLVxcdTAwM2V4ODZfcGh5c19iaXRzID0gMzY7XFxuK1xcdGMtXFx1MDAzZXg4Nl92aXJ0X2JpdHMgPSA0ODtcXG4rI2Vsc2VcXG4rXFx0Yy1cXHUwMDNlY3B1aWRfbGV2ZWwgPSAtMTtcXHQvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi9cXG4rXFx0Yy1cXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDMyO1xcbitcXHRjLVxcdTAwM2V4ODZfcGh5c19iaXRzID0gMzI7XFxuK1xcdGMtXFx1MDAzZXg4Nl92aXJ0X2JpdHMgPSAzMjtcXG4rI2VuZGlmXFxuK1xcdGMtXFx1MDAzZXg4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLVxcdTAwM2V4ODZfY2xmbHVzaF9zaXplO1xcbitcXHRtZW1zZXQoXFx1MDAyNmMtXFx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cXHUwMDNleDg2X2NhcGFiaWxpdHkpKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZjLVxcdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXFx1MDAzZWNwdWlkKSk7XFxuKyNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTXFxuK1xcdG1lbXNldChcXHUwMDI2Yy1cXHUwMDNldm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVxcdTAwM2V2bXhfY2FwYWJpbGl0eSkpO1xcbisjZW5kaWZcXG4rXFx0Yy1cXHUwMDNlZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBEbyBtaW5pbXVtIENQVSBkZXRlY3Rpb24gZWFybHkuXFxuICAqIEZpZWxkcyByZWFsbHkgbmVlZGVkOiB2ZW5kb3IsIGNwdWlkX2xldmVsLCBmYW1pbHksIG1vZGVsLCBtYXNrLFxcbiAgKiBjYWNoZSBhbGlnbm1lbnQuXFxuLSAqIFRoZSBvdGhlcnMgYXJlIG5vdCB0b3VjaGVkIHRvIGF2b2lkIHVud2FudGVkIHNpZGUgZWZmZWN0cy5cXG4rICogVGhlIG90aGVycyBhcmUgcmVzZXQgdG8gdGhlaXIgZGVmYXVsdHMgaGVyZSBhbmQgb25seSBmaWxsZWQgaW4gbGF0ZXIsXFxuKyAqIGJ5IGlkZW50aWZ5X2NwdSgpLlxcbiAgKlxcbiAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uIHRoZSBib290IENQVS4gIERvbid0IGFkZCBjb2RlXFxuICAqIGhlcmUgdGhhdCBpcyBzdXBwb3NlZCB0byBydW4gb24gYWxsIENQVXMuXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG4ge1xcbi1cXHRtZW1zZXQoXFx1MDAyNmMtXFx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cXHUwMDNleDg2X2NhcGFiaWxpdHkpKTtcXG4tXFx0bWVtc2V0KFxcdTAwMjZjLVxcdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXFx1MDAzZWNwdWlkKSk7XFxuLVxcdGMtXFx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcXG4rXFx0aW5pdF9jcHVfaW5mbyhjKTtcXG4gXFxuIFxcdGlmICghY3B1aWRfZmVhdHVyZSgpKVxcbiBcXHRcXHRpZGVudGlmeV9jcHVfd2l0aG91dF9jcHVpZChjKTtcXG4gXFxuLVxcdC8qIGN5cml4IGNvdWxkIGhhdmUgY3B1aWQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpKi9cXG4rXFx0LyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovXFxuIFxcdGlmIChjcHVpZF9mZWF0dXJlKCkpIHtcXG4gXFx0XFx0Y3B1aWRfc2Nhbl9jcHUoYyk7XFxuIFxcdFxcdGNwdV9kZXRlY3QoYyk7XFxuQEAgLTE5NTQsMTYgKzE5NzksMjEgQEAgdm9pZCBjaGVja19udWxsX3NlZ19jbGVhcnNfYmFzZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIFxcdHNldF9jcHVfYnVnKGMsIFg4Nl9CVUdfTlVMTF9TRUcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG4rLypcXG4rICogVGhpcyBkb2VzIHRoZSBoYXJkIHdvcmsgb2YgYWN0dWFsbHkgcGlja2luZyBhcGFydCB0aGUgQ1BVIHN0dWZmLi4uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbiB7XFxuLVxcdGMtXFx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjLVxcdTAwM2Vsb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7XFxuIFxcbiBcXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcXG4gXFx0XFx0aWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7XFxuIFxcbi1cXHQvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovXFxuK1xcdC8qIEN5cml4IGNvdWxkIGhhdmUgQ1BVSUQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpLiAqL1xcbiBcXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRnb3RvIG5vX2NwdWlkO1xcbiBcXG4gXFx0Y3B1aWRfc2Nhbl9jcHUoYyk7XFxuIFxcdGNwdV9kZXRlY3QoYyk7XFxuQEAgLTE5OTEsNDAgKzIwMjEsOCBAQCBzdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG4gI2lmZGVmIENPTkZJR19YODZfMzJcXG4gXFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19FU1BGSVgpO1xcbiAjZW5kaWZcXG4tfVxcbi1cXG4tLypcXG4tICogVGhpcyBkb2VzIHRoZSBoYXJkIHdvcmsgb2YgYWN0dWFsbHkgcGlja2luZyBhcGFydCB0aGUgQ1BVIHN0dWZmLi4uXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbi17XFxuLVxcdGludCBpO1xcbi1cXG4tXFx0Yy1cXHUwMDNlbG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5O1xcbi1cXHRjLVxcdTAwM2V4ODZfY2FjaGVfc2l6ZSA9IDA7XFxuLVxcdGMtXFx1MDAzZXg4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047XFxuLVxcdGMtXFx1MDAzZXg4Nl9tb2RlbCA9IGMtXFx1MDAzZXg4Nl9zdGVwcGluZyA9IDA7XFx0LyogU28gZmFyIHVua25vd24uLi4gKi9cXG4tXFx0Yy1cXHUwMDNleDg2X3ZlbmRvcl9pZFswXSA9ICdcXFxcMCc7IC8qIFVuc2V0ICovXFxuLVxcdGMtXFx1MDAzZXg4Nl9tb2RlbF9pZFswXSA9ICdcXFxcMCc7ICAvKiBVbnNldCAqL1xcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbi1cXHRjLVxcdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gNjQ7XFxuLVxcdGMtXFx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzNjtcXG4tXFx0Yy1cXHUwMDNleDg2X3ZpcnRfYml0cyA9IDQ4O1xcbi0jZWxzZVxcbi1cXHRjLVxcdTAwM2VjcHVpZF9sZXZlbCA9IC0xO1xcdC8qIENQVUlEIG5vdCBkZXRlY3RlZCAqL1xcbi1cXHRjLVxcdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gMzI7XFxuLVxcdGMtXFx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzMjtcXG4tXFx0Yy1cXHUwMDNleDg2X3ZpcnRfYml0cyA9IDMyO1xcbi0jZW5kaWZcXG4tXFx0Yy1cXHUwMDNleDg2X2NhY2hlX2FsaWdubWVudCA9IGMtXFx1MDAzZXg4Nl9jbGZsdXNoX3NpemU7XFxuLVxcdG1lbXNldChcXHUwMDI2Yy1cXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVxcdTAwM2V4ODZfY2FwYWJpbGl0eSkpO1xcbi1cXHRtZW1zZXQoXFx1MDAyNmMtXFx1MDAzZWNwdWlkLCAwLCBzaXplb2YoYy1cXHUwMDNlY3B1aWQpKTtcXG4tI2lmZGVmIENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVNcXG4tXFx0bWVtc2V0KFxcdTAwMjZjLVxcdTAwM2V2bXhfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXFx1MDAzZXZteF9jYXBhYmlsaXR5KSk7XFxuLSNlbmRpZlxcbi1cXG4tXFx0Z2VuZXJpY19pZGVudGlmeShjKTtcXG4gXFxuK25vX2NwdWlkOlxcbiBcXHRjcHVfcGFyc2VfdG9wb2xvZ3koYyk7XFxuIFxcbiBcXHRpZiAodGhpc19jcHUtXFx1MDAzZWNfaWRlbnRpZnkpXFxuQEAgLTIxMTYsNiArMjExNCw5IEBAIHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIFxcdG1jaGVja19jcHVfaW5pdChjKTtcXG4gXFxuIFxcdG51bWFfYWRkX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpO1xcbitcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXFxuK1xcdFxcdGVuYWJsZV9zZXBfY3B1KCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTIxNTMsOSArMjE1NCw2IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKVxcbiBcXHRpZGVudGlmeV9jcHUoXFx1MDAyNmJvb3RfY3B1X2RhdGEpO1xcbiBcXHRpZiAoSEFTX0tFUk5FTF9JQlQgXFx1MDAyNlxcdTAwMjYgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9JQlQpKVxcbiBcXHRcXHRwcl9pbmZvKFxcXCJDRVQgZGV0ZWN0ZWQ6IEluZGlyZWN0IEJyYW5jaCBUcmFja2luZyBlbmFibGVkXFxcXG5cXFwiKTtcXG4tI2lmZGVmIENPTkZJR19YODZfMzJcXG4tXFx0ZW5hYmxlX3NlcF9jcHUoKTtcXG4tI2VuZGlmXFxuIFxcdGNwdV9kZXRlY3RfdGxiKFxcdTAwMjZib290X2NwdV9kYXRhKTtcXG4gXFx0c2V0dXBfY3JfcGlubmluZygpO1xcbiBcXG5AQCAtMjE3NCwxMCArMjE3Miw4IEBAIHZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxcbiBcXHRcXHQqYyA9IGJvb3RfY3B1X2RhdGE7XFxuIFxcdGMtXFx1MDAzZWNwdV9pbmRleCA9IGNwdTtcXG4gXFxuK1xcdGluaXRfY3B1X2luZm8oYyk7XFxuIFxcdGlkZW50aWZ5X2NwdShjKTtcXG4tI2lmZGVmIENPTkZJR19YODZfMzJcXG4tXFx0ZW5hYmxlX3NlcF9jcHUoKTtcXG4tI2VuZGlmXFxuIFxcdHg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTtcXG4gXFx0dXBkYXRlX3NyYmRzX21zcigpO1xcbiBcXHRpZiAoYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX0dEUykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAwOjU2LjY2OTcwMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTYxNTQ2MTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGVudGlmeV9zZWNvbmRhcnlfY3B1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4ZDk0NTU2YTNhN2NhODdhZjMzOWEyNDg5NGMzNWNlYTIwN2RkNWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDowMDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG5pbmRleCBhM2RmMjFkMjY0NjA2Li5lMGM3MGEyNTEwYWZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuQEAgLTE3NzIsMjUgKzE3NzIsNTAgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9wYXJzZV9lYXJseV9wYXJhbSh2b2lkKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBpbml0X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbit7XG4rXHRjLVx1MDAzZXg4Nl9jYWNoZV9zaXplID0gMDtcbitcdGMtXHUwMDNleDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTjtcbitcdGMtXHUwMDNleDg2X21vZGVsID0gYy1cdTAwM2V4ODZfc3RlcHBpbmcgPSAwO1x0LyogU28gZmFyIHVua25vd24uLi4gKi9cbitcdGMtXHUwMDNleDg2X3ZlbmRvcl9pZFswXSA9ICdcXDAnOyAvKiBVbnNldCAqL1xuK1x0Yy1cdTAwM2V4ODZfbW9kZWxfaWRbMF0gPSAnXFwwJzsgIC8qIFVuc2V0ICovXG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdGMtXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDY0O1xuK1x0Yy1cdTAwM2V4ODZfcGh5c19iaXRzID0gMzY7XG4rXHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSA0ODtcbisjZWxzZVxuK1x0Yy1cdTAwM2VjcHVpZF9sZXZlbCA9IC0xO1x0LyogQ1BVSUQgbm90IGRldGVjdGVkICovXG4rXHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSAzMjtcbitcdGMtXHUwMDNleDg2X3BoeXNfYml0cyA9IDMyO1xuK1x0Yy1cdTAwM2V4ODZfdmlydF9iaXRzID0gMzI7XG4rI2VuZGlmXG4rXHRjLVx1MDAzZXg4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemU7XG4rXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2V4ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXHUwMDNleDg2X2NhcGFiaWxpdHkpKTtcbitcdG1lbXNldChcdTAwMjZjLVx1MDAzZWNwdWlkLCAwLCBzaXplb2YoYy1cdTAwM2VjcHVpZCkpO1xuKyNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTXG4rXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2V2bXhfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXHUwMDNldm14X2NhcGFiaWxpdHkpKTtcbisjZW5kaWZcbitcdGMtXHUwMDNlZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwO1xuK31cbitcbiAvKlxuICAqIERvIG1pbmltdW0gQ1BVIGRldGVjdGlvbiBlYXJseS5cbiAgKiBGaWVsZHMgcmVhbGx5IG5lZWRlZDogdmVuZG9yLCBjcHVpZF9sZXZlbCwgZmFtaWx5LCBtb2RlbCwgbWFzayxcbiAgKiBjYWNoZSBhbGlnbm1lbnQuXG4tICogVGhlIG90aGVycyBhcmUgbm90IHRvdWNoZWQgdG8gYXZvaWQgdW53YW50ZWQgc2lkZSBlZmZlY3RzLlxuKyAqIFRoZSBvdGhlcnMgYXJlIHJlc2V0IHRvIHRoZWlyIGRlZmF1bHRzIGhlcmUgYW5kIG9ubHkgZmlsbGVkIGluIGxhdGVyLFxuKyAqIGJ5IGlkZW50aWZ5X2NwdSgpLlxuICAqXG4gICogV0FSTklORzogdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgYm9vdCBDUFUuICBEb24ndCBhZGQgY29kZVxuICAqIGhlcmUgdGhhdCBpcyBzdXBwb3NlZCB0byBydW4gb24gYWxsIENQVXMuXG4gICovXG4gc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4ge1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5KSk7XG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXHUwMDNlY3B1aWQpKTtcbi1cdGMtXHUwMDNlZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwO1xuK1x0aW5pdF9jcHVfaW5mbyhjKTtcbiBcbiBcdGlmICghY3B1aWRfZmVhdHVyZSgpKVxuIFx0XHRpZGVudGlmeV9jcHVfd2l0aG91dF9jcHVpZChjKTtcbiBcbi1cdC8qIGN5cml4IGNvdWxkIGhhdmUgY3B1aWQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpKi9cbitcdC8qIEN5cml4IGNvdWxkIGhhdmUgQ1BVSUQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpLiAqL1xuIFx0aWYgKGNwdWlkX2ZlYXR1cmUoKSkge1xuIFx0XHRjcHVpZF9zY2FuX2NwdShjKTtcbiBcdFx0Y3B1X2RldGVjdChjKTtcbkBAIC0xOTU0LDE2ICsxOTc5LDIxIEBAIHZvaWQgY2hlY2tfbnVsbF9zZWdfY2xlYXJzX2Jhc2Uoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19OVUxMX1NFRyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuKy8qXG4rICogVGhpcyBkb2VzIHRoZSBoYXJkIHdvcmsgb2YgYWN0dWFsbHkgcGlja2luZyBhcGFydCB0aGUgQ1BVIHN0dWZmLi4uXG4rICovXG4rc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiB7XG4tXHRjLVx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcbitcdGludCBpO1xuK1xuK1x0Yy1cdTAwM2Vsb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7XG4gXG4gXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcbiBcdFx0aWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7XG4gXG4tXHQvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovXG4rXHQvKiBDeXJpeCBjb3VsZCBoYXZlIENQVUlEIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKS4gKi9cbiBcdGlmICghY3B1aWRfZmVhdHVyZSgpKVxuLVx0XHRyZXR1cm47XG4rXHRcdGdvdG8gbm9fY3B1aWQ7XG4gXG4gXHRjcHVpZF9zY2FuX2NwdShjKTtcbiBcdGNwdV9kZXRlY3QoYyk7XG5AQCAtMTk5MSw0MCArMjAyMSw4IEBAIHN0YXRpYyB2b2lkIGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuICNpZmRlZiBDT05GSUdfWDg2XzMyXG4gXHRzZXRfY3B1X2J1ZyhjLCBYODZfQlVHX0VTUEZJWCk7XG4gI2VuZGlmXG4tfVxuLVxuLS8qXG4tICogVGhpcyBkb2VzIHRoZSBoYXJkIHdvcmsgb2YgYWN0dWFsbHkgcGlja2luZyBhcGFydCB0aGUgQ1BVIHN0dWZmLi4uXG4tICovXG4tc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbi17XG4tXHRpbnQgaTtcbi1cbi1cdGMtXHUwMDNlbG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5O1xuLVx0Yy1cdTAwM2V4ODZfY2FjaGVfc2l6ZSA9IDA7XG4tXHRjLVx1MDAzZXg4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047XG4tXHRjLVx1MDAzZXg4Nl9tb2RlbCA9IGMtXHUwMDNleDg2X3N0ZXBwaW5nID0gMDtcdC8qIFNvIGZhciB1bmtub3duLi4uICovXG4tXHRjLVx1MDAzZXg4Nl92ZW5kb3JfaWRbMF0gPSAnXFwwJzsgLyogVW5zZXQgKi9cbi1cdGMtXHUwMDNleDg2X21vZGVsX2lkWzBdID0gJ1xcMCc7ICAvKiBVbnNldCAqL1xuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4tXHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSA2NDtcbi1cdGMtXHUwMDNleDg2X3BoeXNfYml0cyA9IDM2O1xuLVx0Yy1cdTAwM2V4ODZfdmlydF9iaXRzID0gNDg7XG4tI2Vsc2Vcbi1cdGMtXHUwMDNlY3B1aWRfbGV2ZWwgPSAtMTtcdC8qIENQVUlEIG5vdCBkZXRlY3RlZCAqL1xuLVx0Yy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gMzI7XG4tXHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzMjtcbi1cdGMtXHUwMDNleDg2X3ZpcnRfYml0cyA9IDMyO1xuLSNlbmRpZlxuLVx0Yy1cdTAwM2V4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplO1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5KSk7XG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXHUwMDNlY3B1aWQpKTtcbi0jaWZkZWYgQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FU1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNldm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXZteF9jYXBhYmlsaXR5KSk7XG4tI2VuZGlmXG4tXG4tXHRnZW5lcmljX2lkZW50aWZ5KGMpO1xuIFxuK25vX2NwdWlkOlxuIFx0Y3B1X3BhcnNlX3RvcG9sb2d5KGMpO1xuIFxuIFx0aWYgKHRoaXNfY3B1LVx1MDAzZWNfaWRlbnRpZnkpXG5AQCAtMjExNiw2ICsyMTE0LDkgQEAgc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiBcdG1jaGVja19jcHVfaW5pdChjKTtcbiBcbiBcdG51bWFfYWRkX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpO1xuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXG4rXHRcdGVuYWJsZV9zZXBfY3B1KCk7XG4gfVxuIFxuIC8qXG5AQCAtMjE1Myw5ICsyMTU0LDYgQEAgc3RhdGljIF9faW5pdCB2b2lkIGlkZW50aWZ5X2Jvb3RfY3B1KHZvaWQpXG4gXHRpZGVudGlmeV9jcHUoXHUwMDI2Ym9vdF9jcHVfZGF0YSk7XG4gXHRpZiAoSEFTX0tFUk5FTF9JQlQgXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJUKSlcbiBcdFx0cHJfaW5mbyhcIkNFVCBkZXRlY3RlZDogSW5kaXJlY3QgQnJhbmNoIFRyYWNraW5nIGVuYWJsZWRcXG5cIik7XG4tI2lmZGVmIENPTkZJR19YODZfMzJcbi1cdGVuYWJsZV9zZXBfY3B1KCk7XG4tI2VuZGlmXG4gXHRjcHVfZGV0ZWN0X3RsYihcdTAwMjZib290X2NwdV9kYXRhKTtcbiBcdHNldHVwX2NyX3Bpbm5pbmcoKTtcbiBcbkBAIC0yMTc0LDEwICsyMTcyLDggQEAgdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpXG4gXHRcdCpjID0gYm9vdF9jcHVfZGF0YTtcbiBcdGMtXHUwMDNlY3B1X2luZGV4ID0gY3B1O1xuIFxuK1x0aW5pdF9jcHVfaW5mbyhjKTtcbiBcdGlkZW50aWZ5X2NwdShjKTtcbi0jaWZkZWYgQ09ORklHX1g4Nl8zMlxuLVx0ZW5hYmxlX3NlcF9jcHUoKTtcbi0jZW5kaWZcbiBcdHg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTtcbiBcdHVwZGF0ZV9zcmJkc19tc3IoKTtcbiBcdGlmIChib290X2NwdV9oYXNfYnVnKFg4Nl9CVUdfR0RTKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAwOjU2LjY2OTcwMTM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1ODc4OTE5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBDUFUgSWRlbnRpZmljYXRpb24gUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uIGNvZGUgaW4gYGFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNgLiBJdCdzIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBjcHVpbmZvX3g4NmAgaW50byBhIG5ldyBmdW5jdGlvbiwgYGluaXRfY3B1X2luZm8oKWAsIGFuZCBjb25zb2xpZGF0aW5nIHNvbWUgb3RoZXIgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuXG5cbkluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgYSByZWZhY3RvcmluZy4gQnV0IHdhaXQsIHRoaXMgYGluaXRfY3B1X2luZm8oKWAgY2FsbCBoYXMgYmVlbiBtb3ZlZCBpbnRvIGBlYXJseV9pZGVudGlmeV9jcHUoKWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgYGluaXRfY3B1X2luZm8oKWAgbm93IHJlc2V0cyBhIGJ1bmNoIG9mIGBjcHVpbmZvX3g4NmAgbWVtYmVycyB0aGF0IHdlcmUgKm5vdCogcmVzZXQgcHJldmlvdXNseS4gVGhpcyBwYXJ0IGlzIGV4ZWN1dGVkIHZlcnkgZWFybHksIGJlZm9yZSB0aGUgZnV6emVyIHR5cGljYWxseSBydW5zLCBtYWtpbmcgaXQgbGVzcyBvZiBhIHByaW9yaXR5IGZvciBzeXprYWxsZXIuXG5cbkhvd2V2ZXIsIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KClgIGlzIG5vdyBhbHNvIGNhbGxpbmcgdGhlIHNhbWUgcmVmYWN0b3JlZCBjb2RlLiBBbmQgc2Vjb25kYXJ5IENQVSBpZGVudGlmaWNhdGlvbiBoYXBwZW5zIGR1cmluZyBDUFUgaG90cGx1Zywgd2hpY2ggKmlzKiBzb21ldGhpbmcgYSBmdXp6ZXIgY2FuIHRyaWdnZXIuIFRoYXQncyBpbnRlcmVzdGluZyEgU28sIHRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhpcyByZWZhY3RvcmluZyBleHBvc2UgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJvZHVjZSBhIGJ1Zz8gSXQgaXMgdmVyeSBsaWtlbHksIHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggQ1BVIGluaXRpYWxpemF0aW9uLCB0aGF0IGEgYnVnIGNvdWxkIHJlc3VsdCBpbiBzdGFsZSBkYXRhIG9uIGEgc2Vjb25kYXJ5IENQVS5cblxuVGhlIGNvbW1pdCBtZXNzYWdlIGl0c2VsZiBpcyBhIGJpdCBnZW5lcmljIChcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiKS4gVGhpcyBzdWdnZXN0cyBpdCdzIGEgU3l6a2FsbGVyLXJlbGF0ZWQgY2hhbmdlLCB3aGljaCBtZWFucyB3ZSBzaG91bGQgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24uXG5cbkFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiwgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLiBIb3dldmVyLCB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBhcyBDUFUgaG90cGx1ZyBpcyBwb3NzaWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gVGhpcyBtb2RpZmljYXRpb24gdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyAoeDg2IENQVSBpZGVudGlmaWNhdGlvbikgYW5kIGNhbiBiZSByZWFjaGVkLiBTbywgYmFzZWQgb24gdGhlIGRvY3VtZW50ZWQgZ3VpZGVsaW5lcywgSSBzaG91bGQgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgd2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24/IERlZmluaXRlbHkgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgLCBiZWNhdXNlIGl0J3MgY2FsbGVkIGR1cmluZyBob3RwbHVnLiBgZWFybHlfaWRlbnRpZnlfY3B1YCBpcyBsZXNzIGltcG9ydGFudCBub3csIGFzIGl0IGV4ZWN1dGVzIHNvIGVhcmx5LiBgaWRlbnRpZnlfY3B1YCBpcyBhbm90aGVyIGtleSBvbmUsIHNpbmNlIGl0IGlzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uLiBBbmQgYGVuYWJsZV9zZXBfY3B1YCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaWRlbnRpZnlfY3B1YC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGlzIHJlYWNoYWJsZS4gWWVwLCB2aWEgQ1BVIGhvdHBsdWcsIHRoYXQncyB3aGF0J3Mga2V5IGhlcmUuIEFuZCBgZW5hYmxlX3NlcF9jcHVgIHdpbGwgbm93IGJlIGltcGFjdGVkIGJ5IENQVSBob3RwbHVnIGFzIGl0IGlzIGNhbGxlZCBieSBgaWRlbnRpZnlfY3B1YFxuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gY29uZmlybSBteSBmaW5kaW5ncyBvbiBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gbWFrZSBzdXJlIG15IGNvbmNsdXNpb25zIGFyZSBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjA3LjI1NzU5NTQ1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNTUzNjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkZW50aWZ5X3NlY29uZGFyeV9jcHVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MjM3PWV4dGVybiB2b2lkIGVhcmx5X2NwdV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIzODpleHRlcm4gdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTIzOS1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTIwNz1zdGF0aWMgdm9pZCBpbml0X2FtZF9rNyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTIzOC1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jOjIzOTpcXHQvKiBjYWxsaW5nIGlzIGZyb20gaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpID8gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTI0MC1cXHRpZiAoIWMtXFx1MDAzZWNwdV9pbmRleClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmM9MjE1Mj1zdGF0aWMgX19pbml0IHZvaWQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjE2NS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jOjIxNjY6dm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpXFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yMTY3LXtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYz0zNjI9c3RhdGljIHZvaWQgaW50ZWxfc21wX2NoZWNrKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMtMzYzLXtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmM6MzY0OlxcdC8qIGNhbGxpbmcgaXMgZnJvbSBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KCkgPyAqL1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYy0zNjUtXFx0aWYgKCFjLVxcdTAwM2VjcHVfaW5kZXgpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jPTE3MD1zdGF0aWMgdm9pZCBhcF9zdGFydGluZyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0xODktXFx0LyogU2F2ZSB0aGUgcHJvY2Vzc29yIHBhcmFtZXRlcnMuICovXFxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYzoxOTA6XFx0aWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShjcHVpZCk7XFxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0xOTEtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jPTIxMT1zdGF0aWMgdm9pZCBhcF9jYWxpYnJhdGVfZGVsYXkodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zbXBib290LmMtMjE0LVxcdCAqIENhbGlicmF0ZSB0aGUgZGVsYXkgbG9vcCBhbmQgdXBkYXRlIGxvb3BzX3Blcl9qaWZmeSBpbiBjcHVfZGF0YS5cXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jOjIxNTpcXHQgKiBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KCkgc3RvcmVkIGEgdmFsdWUgdGhhdCBpcyBjbG9zZSBidXQgbm90IGFzXFxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0yMTYtXFx0ICogYWNjdXJhdGUgYXMgdGhlIHZhbHVlIGp1c3QgY2FsY3VsYXRlZC5cXG4tLVxcbmFyY2gveDg2L3hlbi9zbXBfcHYuYz01Nz1zdGF0aWMgdm9pZCBjcHVfYnJpbmd1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYveGVuL3NtcF9wdi5jLTcxLVxcdGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcXG5hcmNoL3g4Ni94ZW4vc21wX3B2LmM6NzI6XFx0aWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShjcHUpO1xcbmFyY2gveDg2L3hlbi9zbXBfcHYuYy03My1cXHRzZXRfY3B1X3NpYmxpbmdfbWFwKGNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjA4Ljk1MTE1MzYzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMTI5MzEwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCBpcyBjYWxsZWQgZnJvbSBgYXBfc3RhcnRpbmdgIGFuZCBgY3B1X2JyaW5ndXBgLCBib3RoIHJlbGF0ZWQgdG8gQ1BVIGhvdHBsdWcsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gQ1BVIGhvdHBsdWcgaXMgZGVmaW5pdGVseSBhIGZ1enphYmxlIGFyZWEsIGFuZCBTeXprYWxsZXIgY2FuLCBpbiBmYWN0LCBvZmZsaW5lIGFuZCBvbmxpbmUgQ1BVcy4gVGhhdCBtYWtlcyBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBhIGZvY3VzZWQgZnV6emluZyB0YXJnZXQuXG5cbk5vdywgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgaWRlbnRpZnlfY3B1YC4gQnV0IHdhaXQsIGl0J3MgYHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdSgpYC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IGEgYmFkIGNob2ljZSBmb3IgZnV6emluZyBiZWNhdXNlIHRoZXkgYXJlIGRpZmZpY3VsdCB0byByZWFjaCBmcm9tIHRoZSBvdXRzaWRlLiBTbywgYGlkZW50aWZ5X2NwdWAsIGBpbml0X2NwdV9pbmZvYCBhbmQgYGVhcmx5X2lkZW50aWZ5X2NwdWAgYXJlIG91dC5cblxuT2theSwgYmFjayB0byBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAuIEl0IGFwcGVhcnMgdG8gYmUgdGhlIHByaW1hcnkgcmVhY2hhYmxlIGZ1bmN0aW9uIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaCwgdGhhdCBpc24ndCBzdGF0aWMuIExldCdzIGNvbmZpcm0gdGhhdCBpdCdzIGV4cG9ydGVkIGFuZCBub3Qgc3RhdGljLi4uIGFuZCB5ZXMsIGB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSlgIGNvbmZpcm1zIGl0IGlzIG5vbi1zdGF0aWMuIEdvb2QuXG5cblRoZSBwYXRjaCBtZW50aW9ucyBhIGZldyBgQ09ORklHYCBvcHRpb25zOiBgQ09ORklHX1g4Nl8zMmAsIGBDT05GSUdfWDg2XzY0YCwgYW5kIGBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTYC4gVGhlIGxhdHRlciB0d28gYXJlIGZhaXJseSBzdGFuZGFyZCBmb3IgeDg2LiBUaGUgZmlyc3QgbWlnaHQgYmUgaW50ZXJlc3RpbmcgaWYgd2Ugd2FudCB0byB0ZXN0IGEgMzItYml0IHg4NiBjb25maWd1cmF0aW9uLCB3aGljaCBpc24ndCB0aGUgU3l6a2FsbGVyIGRlZmF1bHQuIFRoZSBtb3JlIGltcG9ydGFudCBjb25maWd1cmF0aW9uIGFwcGVhcnMgdG8gYmUgYENPTkZJR19IT1RQTFVHX0NQVWAsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBlc3NlbnRpYWwuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgSSBzZWUgdGhhdCBgZ2VuZXJpY19pZGVudGlmeWAgaGFzIGJlZW4gbWVyZ2VkIGludG8gYGlkZW50aWZ5X2NwdWAuIEVzc2VudGlhbGx5LCBgaWRlbnRpZnlfY3B1YCBoYXMgYmVlbiB1cGRhdGVkIGFuZCBub3cgaG9sZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG1lcmdlZCBmdW5jdGlvbi5cblxuU28sIGluIHN1bW1hcnksIEknbSBnb2luZyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgLCBlbnN1cmluZyB0aGF0IEkgaGF2ZSBgQ09ORklHX0hPVFBMVUdfQ1BVYCBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgQ09ORklHX1g4Nl8zMmAgbWlnaHQgYmUgcmVsZXZhbnQgaWYgSSB3YW50IHRvIGV4cGxvcmUgMzItYml0IHNwZWNpZmljIGJlaGF2aW9yLiBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YgdGhlIGNoYW5nZXMgdG8gYGlkZW50aWZ5X2NwdWAsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBzaW5jZSB0aG9zZSBjaGFuZ2VzIGFyZSBub3cgcGFydCBvZiB0aGUgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGNhbGwgY2hhaW4uIEknbGwgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGluIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYCB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYW5kIGZvY3VzZWQgYXBwcm9hY2ggdG8gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMToxNy45NjQwODY4MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MDgwMTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MjM3PWV4dGVybiB2b2lkIGVhcmx5X2NwdV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIzODpleHRlcm4gdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTIzOS1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jPTIxNTI9c3RhdGljIF9faW5pdCB2b2lkIGlkZW50aWZ5X2Jvb3RfY3B1KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jLTIxNjUtXFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYzoyMTY2OnZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjE2Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjE5LjgzNDg5MjcxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDQ4Mzk0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENQVSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGZ1bmN0aW9uIGFuZCBpdCdzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBob3cgaXQncyB1c2VkIGFuZCB3aGF0IGl0IG1pZ2h0IGRlcGVuZCBvbi4gTGV0J3Mgc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgaGVyZS5cblxuUmlnaHQsIEkgc2VlIHRoYXQgYENPTkZJR19YODZfMzJgIGFuZCBgQ09ORklHX1g4Nl82NGAgYXJlIGJvdGggYmVpbmcgdXNlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBuYXR1cmUgb2YgQ1BVIGlkZW50aWZpY2F0aW9uLiBJIGFsc28gc3BvdCBgQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FU2Agd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEknbGwga2VlcCB0aGF0IGluIHRoZSBiYWNrIG9mIG15IG1pbmQuXG5cbk5vdywgYSBxdWljayB0aG91Z2h0OiBzaG91bGQgd2UgYmUgZXhwbGljaXRseSBlbmFibGluZyBgSE9UUExVR19DUFVgIGhlcmU/IEl0J3Mgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXQgbWlnaHQgYmUgd29ydGggbWFraW5nIHRoYXQgZGVwZW5kZW5jeSBleHBsaWNpdCBmb3IgY2xhcml0eSBhbmQgdG8gZW5zdXJlIHdlIGRvbid0IHJ1biBpbnRvIGFueSB1bmV4cGVjdGVkIGlzc3Vlcy4gSSdsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBIT1RQTFVHX0NQVWAgaXMgdGhlIGNvcnJlY3QgbmFtZSBmb3IgdGhlIGNvbmZpZyBiZWZvcmUgSSBhZGQgaXQuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBkZXRhaWxzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTkzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjIzLjY3OTczNTg3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTczMjkzOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIT1RQTFVHX0NQVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTEwNTE9Y29uZmlnIE5SX0NQVVNcXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTA2Mi1cXG5hcmNoL2FybS9LY29uZmlnOjEwNjM6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9hcm0vS2NvbmZpZy0xMDY0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1xcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNTY3PWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTU3MS1cXG5hcmNoL2FybTY0L0tjb25maWc6MTU3Mjpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL2FybTY0L0tjb25maWctMTU3My1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL2Nza3kvS2NvbmZpZz0zMzA9Y29uZmlnIERSQU1fQkFTRVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWctMzMzLVxcbmFyY2gvY3NreS9LY29uZmlnOjMzNDpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL2Nza3kvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz01MTQ9Y29uZmlnIFNNUFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzEtXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1MzI6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MjcwND1jb25maWcgU01QXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0yNzI1LVxcbmFyY2gvbWlwcy9LY29uZmlnOjI3MjY6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9taXBzL0tjb25maWctMjcyNy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnPTMzMT1jb25maWcgSVJRU1RBQ0tTXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnLTMzOC1cXG5hcmNoL3BhcmlzYy9LY29uZmlnOjMzOTpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3BhcmlzYy9LY29uZmlnLTM0MC1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz01ODA9Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVfTlVNX1JFU0VSVkVcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU5MS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1OTI6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTkzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBDUFVzXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTQ1MD1jb25maWcgTlJfQ1BVU1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ1OS1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDYwOmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00NjEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NTI1PWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01MzYtXFxuYXJjaC9zMzkwL0tjb25maWc6NTM3OmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gvczM5MC9LY29uZmlnLTUzOC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3NoL0tjb25maWc9NTkxPWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL3NoL0tjb25maWctNjA0LVxcbmFyY2gvc2gvS2NvbmZpZzo2MDU6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9zaC9LY29uZmlnLTYwNi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXMgKEVYUEVSSU1FTlRBTClcXFwiXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWc9MjIwPWNvbmZpZyBFQVJMWUZCXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMjI4LVxcbmFyY2gvc3BhcmMvS2NvbmZpZzoyMjk6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9zcGFyYy9LY29uZmlnLTIzMC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTIxNTA9Y29uZmlnIEFERFJFU1NfTUFTS0lOR1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTYxLVxcbmFyY2gveDg2L0tjb25maWc6MjE2Mjpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94dGVuc2EvS2NvbmZpZz0yNTM9Y29uZmlnIE5SX0NQVVNcXG4tLVxcbmFyY2gveHRlbnNhL0tjb25maWctMjU4LVxcbmFyY2gveHRlbnNhL0tjb25maWc6MjU5OmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gveHRlbnNhL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIkVuYWJsZSBDUFUgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMToyNS4yNTMwMzM2ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDMyMDk1OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSB4ODYgQ1BVIElkZW50aWZpY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gYEhPVFBMVUdfQ1BVYCBpcyAqYWx3YXlzKiBlbmFibGVkIG9uIHg4NiDigJMgZHVoLCBgZGVmX2Jvb2wgeWAuIE5vIG5lZWQgdG8gZXZlbiB0aGluayBhYm91dCBhZGRpbmcgaXQgdG8gYW55IGNvbmZpZ3VyYXRpb24gbGlzdC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgZWxzZSBkb2VzIHRoaXMgcGF0Y2ggdG91Y2g/IGBjaGVja19udWxsX3NlZ19jbGVhcnNfYmFzZWAgaXMgdW50b3VjaGVkLCBnb29kLiBgaWRlbnRpZnlfYm9vdF9jcHVgIGlzIGBfX2luaXRgLCBhcyBpcyBgZWFybHlfaWRlbnRpZnlfY3B1YC4gIGBpbml0X2NwdV9pbmZvYCBhbmQgYGlkZW50aWZ5X2NwdWAgYXJlIGJvdGggc3RhdGljLiBUaGF0IGxlYXZlcyB1cyB3aXRoIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIG9ubHkgZnVuY3Rpb24gcG90ZW50aWFsbHkgYWZmZWN0ZWQuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy4gKkNsaWNraXR5LWNsaWNrLCBzY3JvbGxpbmcuLi4qIEFoLCBpdCBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcuIFRoZSBvbGQgYGdlbmVyaWNfaWRlbnRpZnlgIGZ1bmN0aW9uIGlzIGdvbmUsIHJlcGxhY2VkIHdpdGggYGlkZW50aWZ5X2NwdWAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIHRoaXMgaXMgd2hlcmUgdGhlICpyZWFsKiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMgcmVzaWRlcy4gVGhlcmUncyBzb21lIGNoYW5nZXMgd2l0aGluIHRoZSBgaWRlbnRpZnlfY3B1YCBmdW5jdGlvbiBpdHNlbGYuIEl0J3MgaW5pdGlhbGl6aW5nIGBjLVx1MDAzZWxvb3BzX3Blcl9qaWZmeWAgbm93LCBhbmQgdGhlIHByZXZpb3VzIGNoZWNrIGZvciBDUFVJRCBpcyBub3cgZG9uZSB2aWEgYSBjYWxsIHRvIGBjcHVpZF9mZWF0dXJlKClgLlxuXG5IbW0sIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyEgVGhpcyBtb2RpZmllcyBjb3JlIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMhIEl0J3MgKnJlYWNoYWJsZSogZHVyaW5nIENQVSBob3RwbHVnLCBhbmQgYW55IGNoYW5nZXMgaW4gdGhpcyBhcmVhIGNvdWxkIGJlIHByb2JsZW1hdGljLiBSZWZhY3RvcmluZywgaG93ZXZlciBtaW5vciBpdCBzZWVtcywgaXMgYW4gb3Bwb3J0dW5pdHkgdG8gaW50cm9kdWNlIHN1YnRsZSBidWdzLiBXZSBjb3VsZCBoYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBpbmNvcnJlY3QgQ1BVIGZlYXR1cmUgZGV0ZWN0aW9uLCBvciBzb21ldGhpbmcganVzdCBwbGFpbiBicm9rZW4sIHdoaWNoIG1pZ2h0IG1hbmlmZXN0IGFzIGEgY3Jhc2ggbGF0ZXIuIExldCdzIGdldCB0aGlzIGludG8gdGhlIGZ1enppbmcgcGlwZWxpbmUsIHN0YXQhIE9rYXksIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDEzLCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTozMi4yODUxMzI3NTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlkZW50aWZ5X3NlY29uZGFyeV9jcHVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgeDg2IENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYywgbW92aW5nIGluaXRpYWxpemF0aW9uIGludG8gYSBuZXcgYGluaXRfY3B1X2luZm9gIGZ1bmN0aW9uIGFuZCBtZXJnaW5nIGBnZW5lcmljX2lkZW50aWZ5YCBpbnRvIGBpZGVudGlmeV9jcHVgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgQ1BVIGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZC4gV2hpbGUgbXVjaCBvZiB0aGlzIHJ1bnMgZHVyaW5nIGVhcmx5IGJvb3QsIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCBpcyBleGVjdXRlZCB3aGVuIHNlY29uZGFyeSBDUFVzIGFyZSBicm91Z2h0IG9ubGluZSwgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCB2aWEgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gRnV6emluZyBDUFUgaG90cGx1ZyBjb3VsZCByZXZlYWwgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgaW5jb3JyZWN0IGZlYXR1cmUgZGV0ZWN0aW9uIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGVudGlmeV9zZWNvbmRhcnlfY3B1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjMyLjI4NTE2MzQwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDE0MjA5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTozMi4yODU2NTk1MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTY5NDA5MTkyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMgaW4geDg2IGJ5IGNvbnNvbGlkYXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgY3B1aW5mb194ODZgIGZpZWxkcyBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvKClgIGZ1bmN0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gQ1BVIGJvb3QgYW5kIGhvdHBsdWcgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOGQ5NDU1NmEzYTdjYTg3YWYzMzlhMjQ4OTRjMzVjZWEyMDdkZDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDA6MDA6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuaW5kZXggYTNkZjIxZDI2NDYwNi4uZTBjNzBhMjUxMGFmYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbkBAIC0xNzcyLDI1ICsxNzcyLDUwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcHVfcGFyc2VfZWFybHlfcGFyYW0odm9pZClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4re1xuK1x0Yy1cdTAwM2V4ODZfY2FjaGVfc2l6ZSA9IDA7XG4rXHRjLVx1MDAzZXg4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047XG4rXHRjLVx1MDAzZXg4Nl9tb2RlbCA9IGMtXHUwMDNleDg2X3N0ZXBwaW5nID0gMDtcdC8qIFNvIGZhciB1bmtub3duLi4uICovXG4rXHRjLVx1MDAzZXg4Nl92ZW5kb3JfaWRbMF0gPSAnXFwwJzsgLyogVW5zZXQgKi9cbitcdGMtXHUwMDNleDg2X21vZGVsX2lkWzBdID0gJ1xcMCc7ICAvKiBVbnNldCAqL1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSA2NDtcbitcdGMtXHUwMDNleDg2X3BoeXNfYml0cyA9IDM2O1xuK1x0Yy1cdTAwM2V4ODZfdmlydF9iaXRzID0gNDg7XG4rI2Vsc2VcbitcdGMtXHUwMDNlY3B1aWRfbGV2ZWwgPSAtMTtcdC8qIENQVUlEIG5vdCBkZXRlY3RlZCAqL1xuK1x0Yy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gMzI7XG4rXHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzMjtcbitcdGMtXHUwMDNleDg2X3ZpcnRfYml0cyA9IDMyO1xuKyNlbmRpZlxuK1x0Yy1cdTAwM2V4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplO1xuK1x0bWVtc2V0KFx1MDAyNmMtXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5KSk7XG4rXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXHUwMDNlY3B1aWQpKTtcbisjaWZkZWYgQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FU1xuK1x0bWVtc2V0KFx1MDAyNmMtXHUwMDNldm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXZteF9jYXBhYmlsaXR5KSk7XG4rI2VuZGlmXG4rXHRjLVx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcbit9XG4rXG4gLypcbiAgKiBEbyBtaW5pbXVtIENQVSBkZXRlY3Rpb24gZWFybHkuXG4gICogRmllbGRzIHJlYWxseSBuZWVkZWQ6IHZlbmRvciwgY3B1aWRfbGV2ZWwsIGZhbWlseSwgbW9kZWwsIG1hc2ssXG4gICogY2FjaGUgYWxpZ25tZW50LlxuLSAqIFRoZSBvdGhlcnMgYXJlIG5vdCB0b3VjaGVkIHRvIGF2b2lkIHVud2FudGVkIHNpZGUgZWZmZWN0cy5cbisgKiBUaGUgb3RoZXJzIGFyZSByZXNldCB0byB0aGVpciBkZWZhdWx0cyBoZXJlIGFuZCBvbmx5IGZpbGxlZCBpbiBsYXRlcixcbisgKiBieSBpZGVudGlmeV9jcHUoKS5cbiAgKlxuICAqIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gdGhlIGJvb3QgQ1BVLiAgRG9uJ3QgYWRkIGNvZGVcbiAgKiBoZXJlIHRoYXQgaXMgc3VwcG9zZWQgdG8gcnVuIG9uIGFsbCBDUFVzLlxuICAqL1xuIHN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9pZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIHtcbi1cdG1lbXNldChcdTAwMjZjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V4ODZfY2FwYWJpbGl0eSkpO1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNlY3B1aWQsIDAsIHNpemVvZihjLVx1MDAzZWNwdWlkKSk7XG4tXHRjLVx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcbitcdGluaXRfY3B1X2luZm8oYyk7XG4gXG4gXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcbiBcdFx0aWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7XG4gXG4tXHQvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovXG4rXHQvKiBDeXJpeCBjb3VsZCBoYXZlIENQVUlEIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKS4gKi9cbiBcdGlmIChjcHVpZF9mZWF0dXJlKCkpIHtcbiBcdFx0Y3B1aWRfc2Nhbl9jcHUoYyk7XG4gXHRcdGNwdV9kZXRlY3QoYyk7XG5AQCAtMTk1NCwxNiArMTk3OSwyMSBAQCB2b2lkIGNoZWNrX251bGxfc2VnX2NsZWFyc19iYXNlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiBcdHNldF9jcHVfYnVnKGMsIFg4Nl9CVUdfTlVMTF9TRUcpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbisvKlxuKyAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4ge1xuLVx0Yy1cdTAwM2VleHRlbmRlZF9jcHVpZF9sZXZlbCA9IDA7XG4rXHRpbnQgaTtcbitcbitcdGMtXHUwMDNlbG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5O1xuIFxuIFx0aWYgKCFjcHVpZF9mZWF0dXJlKCkpXG4gXHRcdGlkZW50aWZ5X2NwdV93aXRob3V0X2NwdWlkKGMpO1xuIFxuLVx0LyogY3lyaXggY291bGQgaGF2ZSBjcHVpZCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkqL1xuK1x0LyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovXG4gXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRnb3RvIG5vX2NwdWlkO1xuIFxuIFx0Y3B1aWRfc2Nhbl9jcHUoYyk7XG4gXHRjcHVfZGV0ZWN0KGMpO1xuQEAgLTE5OTEsNDAgKzIwMjEsOCBAQCBzdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxuIFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19FU1BGSVgpO1xuICNlbmRpZlxuLX1cbi1cbi0vKlxuLSAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4te1xuLVx0aW50IGk7XG4tXG4tXHRjLVx1MDAzZWxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTtcbi1cdGMtXHUwMDNleDg2X2NhY2hlX3NpemUgPSAwO1xuLVx0Yy1cdTAwM2V4ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOO1xuLVx0Yy1cdTAwM2V4ODZfbW9kZWwgPSBjLVx1MDAzZXg4Nl9zdGVwcGluZyA9IDA7XHQvKiBTbyBmYXIgdW5rbm93bi4uLiAqL1xuLVx0Yy1cdTAwM2V4ODZfdmVuZG9yX2lkWzBdID0gJ1xcMCc7IC8qIFVuc2V0ICovXG4tXHRjLVx1MDAzZXg4Nl9tb2RlbF9pZFswXSA9ICdcXDAnOyAgLyogVW5zZXQgKi9cbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuLVx0Yy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gNjQ7XG4tXHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzNjtcbi1cdGMtXHUwMDNleDg2X3ZpcnRfYml0cyA9IDQ4O1xuLSNlbHNlXG4tXHRjLVx1MDAzZWNwdWlkX2xldmVsID0gLTE7XHQvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi9cbi1cdGMtXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDMyO1xuLVx0Yy1cdTAwM2V4ODZfcGh5c19iaXRzID0gMzI7XG4tXHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSAzMjtcbi0jZW5kaWZcbi1cdGMtXHUwMDNleDg2X2NhY2hlX2FsaWdubWVudCA9IGMtXHUwMDNleDg2X2NsZmx1c2hfc2l6ZTtcbi1cdG1lbXNldChcdTAwMjZjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V4ODZfY2FwYWJpbGl0eSkpO1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNlY3B1aWQsIDAsIHNpemVvZihjLVx1MDAzZWNwdWlkKSk7XG4tI2lmZGVmIENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVNcbi1cdG1lbXNldChcdTAwMjZjLVx1MDAzZXZteF9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V2bXhfY2FwYWJpbGl0eSkpO1xuLSNlbmRpZlxuLVxuLVx0Z2VuZXJpY19pZGVudGlmeShjKTtcbiBcbitub19jcHVpZDpcbiBcdGNwdV9wYXJzZV90b3BvbG9neShjKTtcbiBcbiBcdGlmICh0aGlzX2NwdS1cdTAwM2VjX2lkZW50aWZ5KVxuQEAgLTIxMTYsNiArMjExNCw5IEBAIHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gXHRtY2hlY2tfY3B1X2luaXQoYyk7XG4gXG4gXHRudW1hX2FkZF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbitcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19YODZfMzIpKVxuK1x0XHRlbmFibGVfc2VwX2NwdSgpO1xuIH1cbiBcbiAvKlxuQEAgLTIxNTMsOSArMjE1NCw2IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKVxuIFx0aWRlbnRpZnlfY3B1KFx1MDAyNmJvb3RfY3B1X2RhdGEpO1xuIFx0aWYgKEhBU19LRVJORUxfSUJUIFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0lCVCkpXG4gXHRcdHByX2luZm8oXCJDRVQgZGV0ZWN0ZWQ6IEluZGlyZWN0IEJyYW5jaCBUcmFja2luZyBlbmFibGVkXFxuXCIpO1xuLSNpZmRlZiBDT05GSUdfWDg2XzMyXG4tXHRlbmFibGVfc2VwX2NwdSgpO1xuLSNlbmRpZlxuIFx0Y3B1X2RldGVjdF90bGIoXHUwMDI2Ym9vdF9jcHVfZGF0YSk7XG4gXHRzZXR1cF9jcl9waW5uaW5nKCk7XG4gXG5AQCAtMjE3NCwxMCArMjE3Miw4IEBAIHZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxuIFx0XHQqYyA9IGJvb3RfY3B1X2RhdGE7XG4gXHRjLVx1MDAzZWNwdV9pbmRleCA9IGNwdTtcbiBcbitcdGluaXRfY3B1X2luZm8oYyk7XG4gXHRpZGVudGlmeV9jcHUoYyk7XG4tI2lmZGVmIENPTkZJR19YODZfMzJcbi1cdGVuYWJsZV9zZXBfY3B1KCk7XG4tI2VuZGlmXG4gXHR4ODZfc3BlY19jdHJsX3NldHVwX2FwKCk7XG4gXHR1cGRhdGVfc3JiZHNfbXNyKCk7XG4gXHRpZiAoYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX0dEUykpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTozMi4yODU2NjA4ODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyNzI5MjYyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDUFUgSWRlbnRpZmljYXRpb24gUmVmYWN0b3IqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgcmVmYWN0b3JpbmcgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGluaXRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKWAsIHdoaWNoIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGZpZWxkcyBvZiB0aGUgYHN0cnVjdCBjcHVpbmZvX3g4NmAuIEl0J3MgY2FsbGVkIGluIGJvdGggYGVhcmx5X2lkZW50aWZ5X2NwdSgpYCBhbmQgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAsIGFuZCB0aGUgb2xkIGBnZW5lcmljX2lkZW50aWZ5KClgIGhhcyBiZWVuIG1lcmdlZCBpbnRvIGBpZGVudGlmeV9jcHUoKWAuIEluaXRpYWxpemF0aW9uIGxvZ2ljIGhhcyBhbHNvIGJlZW4gbW92ZWQgZnJvbSBgaWRlbnRpZnlfY3B1KClgIHRvIGBpbml0X2NwdV9pbmZvKClgLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIGFjdHVhbGx5ICphZGRzKiBpbml0aWFsaXphdGlvbiBpbiBgZWFybHlfaWRlbnRpZnlfY3B1KClgIGFuZCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpYC4gUHJldmlvdXNseSwgYGVhcmx5X2lkZW50aWZ5X2NwdSgpYCB3YXMgZG9pbmcgb25seSBhIGBtZW1zZXRgIG9uIGEgZmV3IGtleSBhcmVhcyAoYHg4Nl9jYXBhYmlsaXR5YCwgYGNwdWlkYCkgYW5kIHNldHRpbmcgYGV4dGVuZGVkX2NwdWlkX2xldmVsYCB0byAwLiBOb3csIGBpbml0X2NwdV9pbmZvKGMpYCBpcyBjYWxsZWQgd2hpY2ggZG9lcyB0aGlzIGFuZCBtb3JlLiBUaGF04oCZcyBhIGdvb2Qgc2lnbiwgcmVkdWNlcyB0aGUgcmlzayBvZiBzb21lIHN1YnRsZSwgbHVya2luZyBpc3N1ZS5cblxuQnV0IHRoZW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2Vjb25kYXJ5IENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyB3b3Jrcy4gSW4gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAsIEkgc2VlOlxuXG5gYGBjXG5cdGlmIChjID09IFx1MDAyNmJvb3RfY3B1X2RhdGEpXG5cdFx0KmMgPSBib290X2NwdV9kYXRhO1xuXHRjLVx1MDAzZWNwdV9pbmRleCA9IGNwdTtcblxuXHRpbml0X2NwdV9pbmZvKGMpO1xuXHRpZGVudGlmeV9jcHUoYyk7XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHNldHMgYCpjID0gYm9vdF9jcHVfZGF0YWAgaWYgYGNgIGlzIHRoZSBib290IENQVS4gQnV0ICpjKiBpcyBhIHBvaW50ZXIhIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0J3MgdHJhY2UgaXQgYmFjay4gT2theSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkOlxuXG5gYGBjXG5cdGlmIChjID09IFx1MDAyNmJvb3RfY3B1X2RhdGEpXG5cdFx0KmMgPSBib290X2NwdV9kYXRhO1xuYGBgXG5cblRoYXQgY2FuJ3QgYmUgcmlnaHQ7IGl0IHdvdWxkIGJlIGEgbm8tb3AhIEFoLCB0aGF0J3Mgbm90IHJpZ2h0LCBsZXQgbWUgY2hlY2sgdGhlIG9yaWdpbmFsIGNvZGUgYWdhaW4uIFRoZSBvcmlnaW5hbCBjb2RlIHdhczpcblxuYGBgY1xuXHRpZiAoYyA9PSBcdTAwMjZib290X2NwdV9kYXRhKVxuXHRcdHJldHVybjtcbmBgYFxuXG5Pa2F5LCBJIG5lZWQgdG8gc2VlIHRoZSBhY3R1YWwgZGlmZi4gTGV0J3MgbG9vazpcblxuYGBgY1xuQEAgLTIxNzQsMTAgKzIxNzIsOCBAQCB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSlcbiBcdFx0KmMgPSBib290X2NwdV9kYXRhO1xuIFx0Yy1cdTAwM2VjcHVfaW5kZXggPSBjcHU7XG4gXG4rXHRpbml0X2NwdV9pbmZvKGMpO1xuIFx0aWRlbnRpZnlfY3B1KGMpO1xuYGBgXG5cbk9rYXksIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IGRpZmY6XG5cbmBgYGNcbiBcdGlmIChjID09IFx1MDAyNmJvb3RfY3B1X2RhdGEpXG4gXHRcdCpjID0gYm9vdF9jcHVfZGF0YTtcbiBcdGMtXHUwMDNlY3B1X2luZGV4ID0gY3B1O1xuYGBgXG5cbkFoLCByaWdodCEgSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQgZnJvbSB0aGUgZmlsZSBpdHNlbGYuXG5cbmBgYGNcbnZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxue1xuXHRzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBcdTAwMjZjcHVfZGF0YShjcHUpO1xuXG5cdGlmIChjID09IFx1MDAyNmJvb3RfY3B1X2RhdGEpXG5cdFx0cmV0dXJuOyAvLyB3YWl0LCBubywgdGhlIGRpZmYgc2F5czpcbmBgYFxuXG5TbywgdGhlIG9yaWdpbmFsIGNvZGUgcmV0dXJuZWQgaWYgaXQgd2FzIHRoZSBib290IENQVSwgd2hpbGUgbm93IGBpbml0X2NwdV9pbmZvKGMpYCBpcyBjYWxsZWQuIFRoaXMgaXMgdGhlIGRpZmZlcmVuY2UsIHNvIG5vIGlzc3VlIGlmIGBjID09IFx1MDAyNmJvb3RfY3B1X2RhdGFgIGlzIHRydWUuIEdvb2QuIEFsbCBpbiBhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgcmVmYWN0b3IuIEl0J3MgYWRkaW5nIGluaXRpYWxpemF0aW9uLCB3aGljaCByZWR1Y2VzIHRoZSBjaGFuY2Ugb2Ygc29tZSBvYnNjdXJlIGJ1Zy4gTmVlZCB0byBkb3VibGUtY2hlY2sgc29tZSBjb3JuZXIgY2FzZXMsIGJ1dCBvdmVyYWxsLCBzZWVtcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjQyLjU1ODU4OTU0NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTY1OlxcdFxcbjIxNjY6XFx0dm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpXFxuMjE2NzpcXHR7XFxuMjE2ODpcXHRcXHRzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBcXHUwMDI2Y3B1X2RhdGEoY3B1KTtcXG4yMTY5OlxcdFxcbjIxNzA6XFx0XFx0LyogQ29weSBib290X2NwdV9kYXRhIG9ubHkgb24gdGhlIGZpcnN0IGJyaW5ndXAgKi9cXG4yMTcxOlxcdFxcdGlmICghYy1cXHUwMDNlaW5pdGlhbGl6ZWQpXFxuMjE3MjpcXHRcXHRcXHQqYyA9IGJvb3RfY3B1X2RhdGE7XFxuMjE3MzpcXHRcXHRjLVxcdTAwM2VjcHVfaW5kZXggPSBjcHU7XFxuMjE3NDpcXHRcXG4yMTc1OlxcdFxcdGluaXRfY3B1X2luZm8oYyk7XFxuMjE3NjpcXHRcXHRpZGVudGlmeV9jcHUoYyk7XFxuMjE3NzpcXHRcXHR4ODZfc3BlY19jdHJsX3NldHVwX2FwKCk7XFxuMjE3ODpcXHRcXHR1cGRhdGVfc3JiZHNfbXNyKCk7XFxuMjE3OTpcXHRcXHRpZiAoYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX0dEUykpXFxuMjE4MDpcXHRcXHRcXHR1cGRhdGVfZ2RzX21zcigpO1xcbjIxODE6XFx0XFxuMjE4MjpcXHRcXHR0c3hfYXBfaW5pdCgpO1xcbjIxODM6XFx0XFx0Yy1cXHUwMDNlaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbjIxODQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTo0Mi41NTg3MTcxODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2NzgzODg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDUFUgSWRlbnRpZmljYXRpb24gUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljLiBSaWdodCwgc28gYGluaXRfY3B1X2luZm8oYylgIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggdGhlbiBzZXRzIHRoZSBDUFUgaW5mb3JtYXRpb24uIFRoaXMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGNvZGUgaXRzZWxmLCBhcyBJIHNlZSBpdCwgc2V0cyB0aGUgaW5pdGlhbCBkYXRhIGluIHRoZSBib290IG9mIHRoZSBDUFUsIGl0J3Mgbm90IGNoYW5naW5nIGFueSBib3VuZHMgY2hlY2tzLCBub3IgaXMgaXQgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaXMganVzdCBjbGVhbmluZyB1cCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3aXRoaW4gYGluaXRfY3B1X2luZm8oKWAuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgaW50ZXJuYWwgdG8gdGhlIENQVSBpZGVudGlmaWNhdGlvbiByb3V0aW5lcyBkdXJpbmcgYm9vdCBhbmQgaG90cGx1Zywgd2hpY2gsIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBpcyBhIHBvc2l0aXZlIGNoYW5nZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY2hhbmdlcyBhcmUgaW50ZXJuYWwsIGFuZCBpdCBpcyBhIHJlZmFjdG9yaW5nLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIGFuZCB0aGUgdXN1YWwgc3RhbmRhcmQgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueXRoaW5nLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLiBUaGUgYHN0cnVjdCBjcHVpbmZvX3g4NmAgaXNuJ3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIGdyZWF0IOKAkyBpdCdzIGV4cG9zZWQgdmlhIGAvcHJvYy9jcHVpbmZvYCwgYnV0IHRoYXQgb25seSBwcmludHMgc3BlY2lmaWMgZmllbGRzLCByaWdodD8gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNob3VsZCBiZSBleHBvc2VkLCBhbmQgdGhlcmUgYXJlbid0IGFueSBjb250cm9sIGZsb3cgaGF6YXJkcywgYXMgZmFyIGFzIEkgY2FuIHNlZS5cblxuU28sIGhlcmUncyB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggaXMgYWJvdXQgQ1BVIGlkZW50aWZpY2F0aW9uIHJlZmFjdG9yaW5nIGFuZCBjb25zb2xpZGF0aW9uLCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBjb25zb2xpZGF0ZWQgaW50byBgaW5pdF9jcHVfaW5mbygpYC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IG1pZ2h0IGxlYWsgaW5mb3JtYXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBleHBvc2VkLCB3aGljaCByZW1vdmVzIGFueSByaXNrIG9mIG1lbW9yeSBsZWFrcyBvciB1c2UgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgZW5vdWdoIHRvIHRha2UgY2FyZSBvZiBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBtYXkgZXhpc3QgaGVyZS4gSXQgbG9va3Mgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY4MSwiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTo0OS4yMjY1NTk2MzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMgaW4geDg2IGJ5IGNvbnNvbGlkYXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgY3B1aW5mb194ODZgIGZpZWxkcyBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvKClgIGZ1bmN0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gQ1BVIGJvb3QgYW5kIGhvdHBsdWcgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljIGluIHg4NiBieSBjb25zb2xpZGF0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBmaWVsZHMgaW50byBhIG5ldyBgaW5pdF9jcHVfaW5mbygpYCBmdW5jdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGludGVybmFsIHRvIENQVSBib290IGFuZCBob3RwbHVnIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 23:59:01 +0000 UTC FinishedAt: 2026-08-15 00:01:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "series_id": "37f69bea-9bfb-4086-8f74-c2db27350b4e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "identify_secondary_cpu" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMgaW4geDg2IGJ5IGNvbnNvbGlkYXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgY3B1aW5mb194ODZgIGZpZWxkcyBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvKClgIGZ1bmN0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gQ1BVIGJvb3QgYW5kIGhvdHBsdWcgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhOGQ5NDU1NmEzYTdjYTg3YWYzMzlhMjQ4OTRjMzVjZWEyMDdkZDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDA6MDA6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbmluZGV4IGEzZGYyMWQyNjQ2MDYuLmUwYzcwYTI1MTBhZmMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG5AQCAtMTc3MiwyNSAmIzQzOzE3NzIsNTAgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9wYXJzZV9lYXJseV9wYXJhbSh2b2lkKVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4mIzQzO3tcbiYjNDM7XHRjLVx1MDAzZXg4Nl9jYWNoZV9zaXplID0gMDtcbiYjNDM7XHRjLVx1MDAzZXg4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047XG4mIzQzO1x0Yy1cdTAwM2V4ODZfbW9kZWwgPSBjLVx1MDAzZXg4Nl9zdGVwcGluZyA9IDA7XHQvKiBTbyBmYXIgdW5rbm93bi4uLiAqL1xuJiM0MztcdGMtXHUwMDNleDg2X3ZlbmRvcl9pZFswXSA9ICYjMzk7XFwwJiMzOTs7IC8qIFVuc2V0ICovXG4mIzQzO1x0Yy1cdTAwM2V4ODZfbW9kZWxfaWRbMF0gPSAmIzM5O1xcMCYjMzk7OyAgLyogVW5zZXQgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiYjNDM7XHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSA2NDtcbiYjNDM7XHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzNjtcbiYjNDM7XHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSA0ODtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRjLVx1MDAzZWNwdWlkX2xldmVsID0gLTE7XHQvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi9cbiYjNDM7XHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSAzMjtcbiYjNDM7XHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzMjtcbiYjNDM7XHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSAzMjtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0Yy1cdTAwM2V4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplO1xuJiM0MztcdG1lbXNldChcdTAwMjZjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V4ODZfY2FwYWJpbGl0eSkpO1xuJiM0MztcdG1lbXNldChcdTAwMjZjLVx1MDAzZWNwdWlkLCAwLCBzaXplb2YoYy1cdTAwM2VjcHVpZCkpO1xuJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FU1xuJiM0MztcdG1lbXNldChcdTAwMjZjLVx1MDAzZXZteF9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V2bXhfY2FwYWJpbGl0eSkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRjLVx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIERvIG1pbmltdW0gQ1BVIGRldGVjdGlvbiBlYXJseS5cbiAgKiBGaWVsZHMgcmVhbGx5IG5lZWRlZDogdmVuZG9yLCBjcHVpZF9sZXZlbCwgZmFtaWx5LCBtb2RlbCwgbWFzayxcbiAgKiBjYWNoZSBhbGlnbm1lbnQuXG4tICogVGhlIG90aGVycyBhcmUgbm90IHRvdWNoZWQgdG8gYXZvaWQgdW53YW50ZWQgc2lkZSBlZmZlY3RzLlxuJiM0MzsgKiBUaGUgb3RoZXJzIGFyZSByZXNldCB0byB0aGVpciBkZWZhdWx0cyBoZXJlIGFuZCBvbmx5IGZpbGxlZCBpbiBsYXRlcixcbiYjNDM7ICogYnkgaWRlbnRpZnlfY3B1KCkuXG4gICpcbiAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uIHRoZSBib290IENQVS4gIERvbiYjMzk7dCBhZGQgY29kZVxuICAqIGhlcmUgdGhhdCBpcyBzdXBwb3NlZCB0byBydW4gb24gYWxsIENQVXMuXG4gICovXG4gc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4ge1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5KSk7XG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXHUwMDNlY3B1aWQpKTtcbi1cdGMtXHUwMDNlZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwO1xuJiM0MztcdGluaXRfY3B1X2luZm8oYyk7XG4gXG4gXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcbiBcdFx0aWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7XG4gXG4tXHQvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovXG4mIzQzO1x0LyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovXG4gXHRpZiAoY3B1aWRfZmVhdHVyZSgpKSB7XG4gXHRcdGNwdWlkX3NjYW5fY3B1KGMpO1xuIFx0XHRjcHVfZGV0ZWN0KGMpO1xuQEAgLTE5NTQsMTYgJiM0MzsxOTc5LDIxIEBAIHZvaWQgY2hlY2tfbnVsbF9zZWdfY2xlYXJzX2Jhc2Uoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19OVUxMX1NFRyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIGRvZXMgdGhlIGhhcmQgd29yayBvZiBhY3R1YWxseSBwaWNraW5nIGFwYXJ0IHRoZSBDUFUgc3R1ZmYuLi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4ge1xuLVx0Yy1cdTAwM2VleHRlbmRlZF9jcHVpZF9sZXZlbCA9IDA7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGMtXHUwMDNlbG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5O1xuIFxuIFx0aWYgKCFjcHVpZF9mZWF0dXJlKCkpXG4gXHRcdGlkZW50aWZ5X2NwdV93aXRob3V0X2NwdWlkKGMpO1xuIFxuLVx0LyogY3lyaXggY291bGQgaGF2ZSBjcHVpZCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkqL1xuJiM0MztcdC8qIEN5cml4IGNvdWxkIGhhdmUgQ1BVSUQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpLiAqL1xuIFx0aWYgKCFjcHVpZF9mZWF0dXJlKCkpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdGdvdG8gbm9fY3B1aWQ7XG4gXG4gXHRjcHVpZF9zY2FuX2NwdShjKTtcbiBcdGNwdV9kZXRlY3QoYyk7XG5AQCAtMTk5MSw0MCAmIzQzOzIwMjEsOCBAQCBzdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxuIFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19FU1BGSVgpO1xuICNlbmRpZlxuLX1cbi1cbi0vKlxuLSAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4te1xuLVx0aW50IGk7XG4tXG4tXHRjLVx1MDAzZWxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTtcbi1cdGMtXHUwMDNleDg2X2NhY2hlX3NpemUgPSAwO1xuLVx0Yy1cdTAwM2V4ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOO1xuLVx0Yy1cdTAwM2V4ODZfbW9kZWwgPSBjLVx1MDAzZXg4Nl9zdGVwcGluZyA9IDA7XHQvKiBTbyBmYXIgdW5rbm93bi4uLiAqL1xuLVx0Yy1cdTAwM2V4ODZfdmVuZG9yX2lkWzBdID0gJiMzOTtcXDAmIzM5OzsgLyogVW5zZXQgKi9cbi1cdGMtXHUwMDNleDg2X21vZGVsX2lkWzBdID0gJiMzOTtcXDAmIzM5OzsgIC8qIFVuc2V0ICovXG4tI2lmZGVmIENPTkZJR19YODZfNjRcbi1cdGMtXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDY0O1xuLVx0Yy1cdTAwM2V4ODZfcGh5c19iaXRzID0gMzY7XG4tXHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSA0ODtcbi0jZWxzZVxuLVx0Yy1cdTAwM2VjcHVpZF9sZXZlbCA9IC0xO1x0LyogQ1BVSUQgbm90IGRldGVjdGVkICovXG4tXHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSAzMjtcbi1cdGMtXHUwMDNleDg2X3BoeXNfYml0cyA9IDMyO1xuLVx0Yy1cdTAwM2V4ODZfdmlydF9iaXRzID0gMzI7XG4tI2VuZGlmXG4tXHRjLVx1MDAzZXg4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemU7XG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2V4ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXHUwMDNleDg2X2NhcGFiaWxpdHkpKTtcbi1cdG1lbXNldChcdTAwMjZjLVx1MDAzZWNwdWlkLCAwLCBzaXplb2YoYy1cdTAwM2VjcHVpZCkpO1xuLSNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTXG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2V2bXhfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXHUwMDNldm14X2NhcGFiaWxpdHkpKTtcbi0jZW5kaWZcbi1cbi1cdGdlbmVyaWNfaWRlbnRpZnkoYyk7XG4gXG4mIzQzO25vX2NwdWlkOlxuIFx0Y3B1X3BhcnNlX3RvcG9sb2d5KGMpO1xuIFxuIFx0aWYgKHRoaXNfY3B1LVx1MDAzZWNfaWRlbnRpZnkpXG5AQCAtMjExNiw2ICYjNDM7MjExNCw5IEBAIHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gXHRtY2hlY2tfY3B1X2luaXQoYyk7XG4gXG4gXHRudW1hX2FkZF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXG4mIzQzO1x0XHRlbmFibGVfc2VwX2NwdSgpO1xuIH1cbiBcbiAvKlxuQEAgLTIxNTMsOSAmIzQzOzIxNTQsNiBAQCBzdGF0aWMgX19pbml0IHZvaWQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZClcbiBcdGlkZW50aWZ5X2NwdShcdTAwMjZib290X2NwdV9kYXRhKTtcbiBcdGlmIChIQVNfS0VSTkVMX0lCVCBcdTAwMjZcdTAwMjYgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9JQlQpKVxuIFx0XHRwcl9pbmZvKFwmIzM0O0NFVCBkZXRlY3RlZDogSW5kaXJlY3QgQnJhbmNoIFRyYWNraW5nIGVuYWJsZWRcXG5cJiMzNDspO1xuLSNpZmRlZiBDT05GSUdfWDg2XzMyXG4tXHRlbmFibGVfc2VwX2NwdSgpO1xuLSNlbmRpZlxuIFx0Y3B1X2RldGVjdF90bGIoXHUwMDI2Ym9vdF9jcHVfZGF0YSk7XG4gXHRzZXR1cF9jcl9waW5uaW5nKCk7XG4gXG5AQCAtMjE3NCwxMCAmIzQzOzIxNzIsOCBAQCB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSlcbiBcdFx0KmMgPSBib290X2NwdV9kYXRhO1xuIFx0Yy1cdTAwM2VjcHVfaW5kZXggPSBjcHU7XG4gXG4mIzQzO1x0aW5pdF9jcHVfaW5mbyhjKTtcbiBcdGlkZW50aWZ5X2NwdShjKTtcbi0jaWZkZWYgQ09ORklHX1g4Nl8zMlxuLVx0ZW5hYmxlX3NlcF9jcHUoKTtcbi0jZW5kaWZcbiBcdHg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTtcbiBcdHVwZGF0ZV9zcmJkc19tc3IoKTtcbiBcdGlmIChib290X2NwdV9oYXNfYnVnKFg4Nl9CVUdfR0RTKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZGVudGlmeV9zZWNvbmRhcnlfY3B1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB4ODYgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljLCBtb3ZpbmcgaW5pdGlhbGl6YXRpb24gaW50byBhIG5ldyBgaW5pdF9jcHVfaW5mb2AgZnVuY3Rpb24gYW5kIG1lcmdpbmcgYGdlbmVyaWNfaWRlbnRpZnlgIGludG8gYGlkZW50aWZ5X2NwdWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBDUFUgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBhcmUgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkLiBXaGlsZSBtdWNoIG9mIHRoaXMgcnVucyBkdXJpbmcgZWFybHkgYm9vdCwgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGlzIGV4ZWN1dGVkIHdoZW4gc2Vjb25kYXJ5IENQVXMgYXJlIGJyb3VnaHQgb25saW5lLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiBGdXp6aW5nIENQVSBob3RwbHVnIGNvdWxkIHJldmVhbCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBpbmNvcnJlY3QgZmVhdHVyZSBkZXRlY3Rpb24gaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYThkOTQ1NTZhM2E3Y2E4N2FmMzM5YTI0ODk0YzM1Y2VhMjA3ZGQ1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDE1IDAwOjAwOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggYTNkZjIxZDI2NDYwNi4uZTBjNzBhMjUxMGFmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC0xNzcyLDI1ICYjNDM7MTc3Miw1MCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY3B1X3BhcnNlX2Vhcmx5X3BhcmFtKHZvaWQpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiYjNDM7ewomIzQzOwljLSZndDt4ODZfY2FjaGVfc2l6ZSA9IDA7CiYjNDM7CWMtJmd0O3g4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047CiYjNDM7CWMtJmd0O3g4Nl9tb2RlbCA9IGMtJmd0O3g4Nl9zdGVwcGluZyA9IDA7CS8qIFNvIGZhciB1bmtub3duLi4uICovCiYjNDM7CWMtJmd0O3g4Nl92ZW5kb3JfaWRbMF0gPSAmIzM5O1wwJiMzOTs7IC8qIFVuc2V0ICovCiYjNDM7CWMtJmd0O3g4Nl9tb2RlbF9pZFswXSA9ICYjMzk7XDAmIzM5OzsgIC8qIFVuc2V0ICovCiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKJiM0MzsJYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZSA9IDY0OwomIzQzOwljLSZndDt4ODZfcGh5c19iaXRzID0gMzY7CiYjNDM7CWMtJmd0O3g4Nl92aXJ0X2JpdHMgPSA0ODsKJiM0MzsjZWxzZQomIzQzOwljLSZndDtjcHVpZF9sZXZlbCA9IC0xOwkvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi8KJiM0MzsJYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZSA9IDMyOwomIzQzOwljLSZndDt4ODZfcGh5c19iaXRzID0gMzI7CiYjNDM7CWMtJmd0O3g4Nl92aXJ0X2JpdHMgPSAzMjsKJiM0MzsjZW5kaWYKJiM0MzsJYy0mZ3Q7eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtJmd0O3g4Nl9jbGZsdXNoX3NpemU7CiYjNDM7CW1lbXNldCgmYW1wO2MtJmd0O3g4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy0mZ3Q7eDg2X2NhcGFiaWxpdHkpKTsKJiM0MzsJbWVtc2V0KCZhbXA7Yy0mZ3Q7Y3B1aWQsIDAsIHNpemVvZihjLSZndDtjcHVpZCkpOwomIzQzOyNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTCiYjNDM7CW1lbXNldCgmYW1wO2MtJmd0O3ZteF9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy0mZ3Q7dm14X2NhcGFiaWxpdHkpKTsKJiM0MzsjZW5kaWYKJiM0MzsJYy0mZ3Q7ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwOwomIzQzO30KJiM0MzsKIC8qCiAgKiBEbyBtaW5pbXVtIENQVSBkZXRlY3Rpb24gZWFybHkuCiAgKiBGaWVsZHMgcmVhbGx5IG5lZWRlZDogdmVuZG9yLCBjcHVpZF9sZXZlbCwgZmFtaWx5LCBtb2RlbCwgbWFzaywKICAqIGNhY2hlIGFsaWdubWVudC4KLSAqIFRoZSBvdGhlcnMgYXJlIG5vdCB0b3VjaGVkIHRvIGF2b2lkIHVud2FudGVkIHNpZGUgZWZmZWN0cy4KJiM0MzsgKiBUaGUgb3RoZXJzIGFyZSByZXNldCB0byB0aGVpciBkZWZhdWx0cyBoZXJlIGFuZCBvbmx5IGZpbGxlZCBpbiBsYXRlciwKJiM0MzsgKiBieSBpZGVudGlmeV9jcHUoKS4KICAqCiAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uIHRoZSBib290IENQVS4gIERvbiYjMzk7dCBhZGQgY29kZQogICogaGVyZSB0aGF0IGlzIHN1cHBvc2VkIHRvIHJ1biBvbiBhbGwgQ1BVcy4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JbWVtc2V0KCZhbXA7Yy0mZ3Q7eDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt4ODZfY2FwYWJpbGl0eSkpOwotCW1lbXNldCgmYW1wO2MtJmd0O2NwdWlkLCAwLCBzaXplb2YoYy0mZ3Q7Y3B1aWQpKTsKLQljLSZndDtleHRlbmRlZF9jcHVpZF9sZXZlbCA9IDA7CiYjNDM7CWluaXRfY3B1X2luZm8oYyk7CiAKIAlpZiAoIWNwdWlkX2ZlYXR1cmUoKSkKIAkJaWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7CiAKLQkvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovCiYjNDM7CS8qIEN5cml4IGNvdWxkIGhhdmUgQ1BVSUQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpLiAqLwogCWlmIChjcHVpZF9mZWF0dXJlKCkpIHsKIAkJY3B1aWRfc2Nhbl9jcHUoYyk7CiAJCWNwdV9kZXRlY3QoYyk7CkBAIC0xOTU0LDE2ICYjNDM7MTk3OSwyMSBAQCB2b2lkIGNoZWNrX251bGxfc2VnX2NsZWFyc19iYXNlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAlzZXRfY3B1X2J1ZyhjLCBYODZfQlVHX05VTExfU0VHKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXJpY19pZGVudGlmeShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiYjNDM7LyoKJiM0MzsgKiBUaGlzIGRvZXMgdGhlIGhhcmQgd29yayBvZiBhY3R1YWxseSBwaWNraW5nIGFwYXJ0IHRoZSBDUFUgc3R1ZmYuLi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCWMtJmd0O2V4dGVuZGVkX2NwdWlkX2xldmVsID0gMDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWMtJmd0O2xvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKIAogCWlmICghY3B1aWRfZmVhdHVyZSgpKQogCQlpZGVudGlmeV9jcHVfd2l0aG91dF9jcHVpZChjKTsKIAotCS8qIGN5cml4IGNvdWxkIGhhdmUgY3B1aWQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpKi8KJiM0MzsJLyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovCiAJaWYgKCFjcHVpZF9mZWF0dXJlKCkpCi0JCXJldHVybjsKJiM0MzsJCWdvdG8gbm9fY3B1aWQ7CiAKIAljcHVpZF9zY2FuX2NwdShjKTsKIAljcHVfZGV0ZWN0KGMpOwpAQCAtMTk5MSw0MCAmIzQzOzIwMjEsOCBAQCBzdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJc2V0X2NwdV9idWcoYywgWDg2X0JVR19FU1BGSVgpOwogI2VuZGlmCi19Ci0KLS8qCi0gKiBUaGlzIGRvZXMgdGhlIGhhcmQgd29yayBvZiBhY3R1YWxseSBwaWNraW5nIGFwYXJ0IHRoZSBDUFUgc3R1ZmYuLi4KLSAqLwotc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLXsKLQlpbnQgaTsKLQotCWMtJmd0O2xvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKLQljLSZndDt4ODZfY2FjaGVfc2l6ZSA9IDA7Ci0JYy0mZ3Q7eDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTjsKLQljLSZndDt4ODZfbW9kZWwgPSBjLSZndDt4ODZfc3RlcHBpbmcgPSAwOwkvKiBTbyBmYXIgdW5rbm93bi4uLiAqLwotCWMtJmd0O3g4Nl92ZW5kb3JfaWRbMF0gPSAmIzM5O1wwJiMzOTs7IC8qIFVuc2V0ICovCi0JYy0mZ3Q7eDg2X21vZGVsX2lkWzBdID0gJiMzOTtcMCYjMzk7OyAgLyogVW5zZXQgKi8KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZSA9IDY0OwotCWMtJmd0O3g4Nl9waHlzX2JpdHMgPSAzNjsKLQljLSZndDt4ODZfdmlydF9iaXRzID0gNDg7Ci0jZWxzZQotCWMtJmd0O2NwdWlkX2xldmVsID0gLTE7CS8qIENQVUlEIG5vdCBkZXRlY3RlZCAqLwotCWMtJmd0O3g4Nl9jbGZsdXNoX3NpemUgPSAzMjsKLQljLSZndDt4ODZfcGh5c19iaXRzID0gMzI7Ci0JYy0mZ3Q7eDg2X3ZpcnRfYml0cyA9IDMyOwotI2VuZGlmCi0JYy0mZ3Q7eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtJmd0O3g4Nl9jbGZsdXNoX3NpemU7Ci0JbWVtc2V0KCZhbXA7Yy0mZ3Q7eDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt4ODZfY2FwYWJpbGl0eSkpOwotCW1lbXNldCgmYW1wO2MtJmd0O2NwdWlkLCAwLCBzaXplb2YoYy0mZ3Q7Y3B1aWQpKTsKLSNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTCi0JbWVtc2V0KCZhbXA7Yy0mZ3Q7dm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt2bXhfY2FwYWJpbGl0eSkpOwotI2VuZGlmCi0KLQlnZW5lcmljX2lkZW50aWZ5KGMpOwogCiYjNDM7bm9fY3B1aWQ6CiAJY3B1X3BhcnNlX3RvcG9sb2d5KGMpOwogCiAJaWYgKHRoaXNfY3B1LSZndDtjX2lkZW50aWZ5KQpAQCAtMjExNiw2ICYjNDM7MjExNCw5IEBAIHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiAJbWNoZWNrX2NwdV9pbml0KGMpOwogCiAJbnVtYV9hZGRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiYjNDM7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19YODZfMzIpKQomIzQzOwkJZW5hYmxlX3NlcF9jcHUoKTsKIH0KIAogLyoKQEAgLTIxNTMsOSAmIzQzOzIxNTQsNiBAQCBzdGF0aWMgX19pbml0IHZvaWQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZCkKIAlpZGVudGlmeV9jcHUoJmFtcDtib290X2NwdV9kYXRhKTsKIAlpZiAoSEFTX0tFUk5FTF9JQlQgJmFtcDsmYW1wOyBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0lCVCkpCiAJCXByX2luZm8oJiMzNDtDRVQgZGV0ZWN0ZWQ6IEluZGlyZWN0IEJyYW5jaCBUcmFja2luZyBlbmFibGVkXG4mIzM0Oyk7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWVuYWJsZV9zZXBfY3B1KCk7Ci0jZW5kaWYKIAljcHVfZGV0ZWN0X3RsYigmYW1wO2Jvb3RfY3B1X2RhdGEpOwogCXNldHVwX2NyX3Bpbm5pbmcoKTsKIApAQCAtMjE3NCwxMCAmIzQzOzIxNzIsOCBAQCB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSkKIAkJKmMgPSBib290X2NwdV9kYXRhOwogCWMtJmd0O2NwdV9pbmRleCA9IGNwdTsKIAomIzQzOwlpbml0X2NwdV9pbmZvKGMpOwogCWlkZW50aWZ5X2NwdShjKTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZW5hYmxlX3NlcF9jcHUoKTsKLSNlbmRpZgogCXg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTsKIAl1cGRhdGVfc3JiZHNfbXNyKCk7CiAJaWYgKGJvb3RfY3B1X2hhc19idWcoWDg2X0JVR19HRFMpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogQ1BVIElkZW50aWZpY2F0aW9uIFJlZmFjdG9yaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIENQVSBpZGVudGlmaWNhdGlvbiBjb2RlIGluIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYC4gSXQmIzM5O3MgbW92aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgaW5pdF9jcHVfaW5mbygpYCwgYW5kIGNvbnNvbGlkYXRpbmcgc29tZSBvdGhlciBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggZnV6emluZy4KCkluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgYSByZWZhY3RvcmluZy4gQnV0IHdhaXQsIHRoaXMgYGluaXRfY3B1X2luZm8oKWAgY2FsbCBoYXMgYmVlbiBtb3ZlZCBpbnRvIGBlYXJseV9pZGVudGlmeV9jcHUoKWAuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGBpbml0X2NwdV9pbmZvKClgIG5vdyByZXNldHMgYSBidW5jaCBvZiBgY3B1aW5mb194ODZgIG1lbWJlcnMgdGhhdCB3ZXJlICpub3QqIHJlc2V0IHByZXZpb3VzbHkuIFRoaXMgcGFydCBpcyBleGVjdXRlZCB2ZXJ5IGVhcmx5LCBiZWZvcmUgdGhlIGZ1enplciB0eXBpY2FsbHkgcnVucywgbWFraW5nIGl0IGxlc3Mgb2YgYSBwcmlvcml0eSBmb3Igc3l6a2FsbGVyLgoKSG93ZXZlciwgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAgaXMgbm93IGFsc28gY2FsbGluZyB0aGUgc2FtZSByZWZhY3RvcmVkIGNvZGUuIEFuZCBzZWNvbmRhcnkgQ1BVIGlkZW50aWZpY2F0aW9uIGhhcHBlbnMgZHVyaW5nIENQVSBob3RwbHVnLCB3aGljaCAqaXMqIHNvbWV0aGluZyBhIGZ1enplciBjYW4gdHJpZ2dlci4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZyEgU28sIHRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhpcyByZWZhY3RvcmluZyBleHBvc2UgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJvZHVjZSBhIGJ1Zz8gSXQgaXMgdmVyeSBsaWtlbHksIHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggQ1BVIGluaXRpYWxpemF0aW9uLCB0aGF0IGEgYnVnIGNvdWxkIHJlc3VsdCBpbiBzdGFsZSBkYXRhIG9uIGEgc2Vjb25kYXJ5IENQVS4KClRoZSBjb21taXQgbWVzc2FnZSBpdHNlbGYgaXMgYSBiaXQgZ2VuZXJpYyAoJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0OykuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgYSBTeXprYWxsZXItcmVsYXRlZCBjaGFuZ2UsIHdoaWNoIG1lYW5zIHdlIHNob3VsZCBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbi4KCkFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiwgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZy4gSG93ZXZlciwgdGhpcyBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSwgYXMgQ1BVIGhvdHBsdWcgaXMgcG9zc2libGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuIFRoaXMgbW9kaWZpY2F0aW9uIHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMgKHg4NiBDUFUgaWRlbnRpZmljYXRpb24pIGFuZCBjYW4gYmUgcmVhY2hlZC4gU28sIGJhc2VkIG9uIHRoZSBkb2N1bWVudGVkIGd1aWRlbGluZXMsIEkgc2hvdWxkIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbj8gRGVmaW5pdGVseSBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAsIGJlY2F1c2UgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBob3RwbHVnLiBgZWFybHlfaWRlbnRpZnlfY3B1YCBpcyBsZXNzIGltcG9ydGFudCBub3csIGFzIGl0IGV4ZWN1dGVzIHNvIGVhcmx5LiBgaWRlbnRpZnlfY3B1YCBpcyBhbm90aGVyIGtleSBvbmUsIHNpbmNlIGl0IGlzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uLiBBbmQgYGVuYWJsZV9zZXBfY3B1YCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaWRlbnRpZnlfY3B1YC4KCkkgbmVlZCB0byBjb25maXJtIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCBpcyByZWFjaGFibGUuIFllcCwgdmlhIENQVSBob3RwbHVnLCB0aGF0JiMzOTtzIHdoYXQmIzM5O3Mga2V5IGhlcmUuIEFuZCBgZW5hYmxlX3NlcF9jcHVgIHdpbGwgbm93IGJlIGltcGFjdGVkIGJ5IENQVSBob3RwbHVnIGFzIGl0IGlzIGNhbGxlZCBieSBgaWRlbnRpZnlfY3B1YAoKSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBjb25maXJtIG15IGZpbmRpbmdzIG9uIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBtYWtlIHN1cmUgbXkgY29uY2x1c2lvbnMgYXJlIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkZW50aWZ5X3NlY29uZGFyeV9jcHUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MjM3PWV4dGVybiB2b2lkIGVhcmx5X2NwdV9pbml0KHZvaWQpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6MjM4OmV4dGVybiB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaC0yMzktZXh0ZXJuIHZvaWQgcHJpbnRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9feDg2ICopO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM9MjA3PXN0YXRpYyB2b2lkIGluaXRfYW1kX2s3KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTIzOC1cbmFyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmM6MjM5Olx0LyogY2FsbGluZyBpcyBmcm9tIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKSA/ICovXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTI0MC1cdGlmICghYy1cdTAwM2VjcHVfaW5kZXgpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYz0yMTUyPXN0YXRpYyBfX2luaXQgdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjE2NS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmM6MjE2Njp2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjE2Ny17XG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jPTM2Mj1zdGF0aWMgdm9pZCBpbnRlbF9zbXBfY2hlY2soc3RydWN0IGNwdWluZm9feDg2ICpjKVxuYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jLTM2My17XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmM6MzY0Olx0LyogY2FsbGluZyBpcyBmcm9tIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKSA/ICovXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMtMzY1LVx0aWYgKCFjLVx1MDAzZWNwdV9pbmRleClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jPTE3MD1zdGF0aWMgdm9pZCBhcF9zdGFydGluZyh2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zbXBib290LmMtMTg5LVx0LyogU2F2ZSB0aGUgcHJvY2Vzc29yIHBhcmFtZXRlcnMuICovXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jOjE5MDpcdGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoY3B1aWQpO1xuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0xOTEtXG4tLVxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYz0yMTE9c3RhdGljIHZvaWQgYXBfY2FsaWJyYXRlX2RlbGF5KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0yMTQtXHQgKiBDYWxpYnJhdGUgdGhlIGRlbGF5IGxvb3AgYW5kIHVwZGF0ZSBsb29wc19wZXJfamlmZnkgaW4gY3B1X2RhdGEuXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jOjIxNTpcdCAqIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKSBzdG9yZWQgYSB2YWx1ZSB0aGF0IGlzIGNsb3NlIGJ1dCBub3QgYXNcbmFyY2gveDg2L2tlcm5lbC9zbXBib290LmMtMjE2LVx0ICogYWNjdXJhdGUgYXMgdGhlIHZhbHVlIGp1c3QgY2FsY3VsYXRlZC5cbi0tXG5hcmNoL3g4Ni94ZW4vc21wX3B2LmM9NTc9c3RhdGljIHZvaWQgY3B1X2JyaW5ndXAodm9pZClcbi0tXG5hcmNoL3g4Ni94ZW4vc21wX3B2LmMtNzEtXHRjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG5hcmNoL3g4Ni94ZW4vc21wX3B2LmM6NzI6XHRpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGNwdSk7XG5hcmNoL3g4Ni94ZW4vc21wX3B2LmMtNzMtXHRzZXRfY3B1X3NpYmxpbmdfbWFwKGNwdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgY2FsbGVkIGZyb20gYGFwX3N0YXJ0aW5nYCBhbmQgYGNwdV9icmluZ3VwYCwgYm90aCByZWxhdGVkIHRvIENQVSBob3RwbHVnLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIENQVSBob3RwbHVnIGlzIGRlZmluaXRlbHkgYSBmdXp6YWJsZSBhcmVhLCBhbmQgU3l6a2FsbGVyIGNhbiwgaW4gZmFjdCwgb2ZmbGluZSBhbmQgb25saW5lIENQVXMuIFRoYXQgbWFrZXMgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgYSBmb2N1c2VkIGZ1enppbmcgdGFyZ2V0LgoKTm93LCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBpZGVudGlmeV9jcHVgLiBCdXQgd2FpdCwgaXQmIzM5O3MgYHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdSgpYC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IGEgYmFkIGNob2ljZSBmb3IgZnV6emluZyBiZWNhdXNlIHRoZXkgYXJlIGRpZmZpY3VsdCB0byByZWFjaCBmcm9tIHRoZSBvdXRzaWRlLiBTbywgYGlkZW50aWZ5X2NwdWAsIGBpbml0X2NwdV9pbmZvYCBhbmQgYGVhcmx5X2lkZW50aWZ5X2NwdWAgYXJlIG91dC4KCk9rYXksIGJhY2sgdG8gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgLiBJdCBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IHJlYWNoYWJsZSBmdW5jdGlvbiBtb2RpZmllZCBieSB0aGUgcGF0Y2gsIHRoYXQgaXNuJiMzOTt0IHN0YXRpYy4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBleHBvcnRlZCBhbmQgbm90IHN0YXRpYy4uLiBhbmQgeWVzLCBgdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpYCBjb25maXJtcyBpdCBpcyBub24tc3RhdGljLiBHb29kLgoKVGhlIHBhdGNoIG1lbnRpb25zIGEgZmV3IGBDT05GSUdgIG9wdGlvbnM6IGBDT05GSUdfWDg2XzMyYCwgYENPTkZJR19YODZfNjRgLCBhbmQgYENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVNgLiBUaGUgbGF0dGVyIHR3byBhcmUgZmFpcmx5IHN0YW5kYXJkIGZvciB4ODYuIFRoZSBmaXJzdCBtaWdodCBiZSBpbnRlcmVzdGluZyBpZiB3ZSB3YW50IHRvIHRlc3QgYSAzMi1iaXQgeDg2IGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzbiYjMzk7dCB0aGUgU3l6a2FsbGVyIGRlZmF1bHQuIFRoZSBtb3JlIGltcG9ydGFudCBjb25maWd1cmF0aW9uIGFwcGVhcnMgdG8gYmUgYENPTkZJR19IT1RQTFVHX0NQVWAsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBlc3NlbnRpYWwuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlIHRoYXQgYGdlbmVyaWNfaWRlbnRpZnlgIGhhcyBiZWVuIG1lcmdlZCBpbnRvIGBpZGVudGlmeV9jcHVgLiBFc3NlbnRpYWxseSwgYGlkZW50aWZ5X2NwdWAgaGFzIGJlZW4gdXBkYXRlZCBhbmQgbm93IGhvbGRzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBtZXJnZWQgZnVuY3Rpb24uCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgLCBlbnN1cmluZyB0aGF0IEkgaGF2ZSBgQ09ORklHX0hPVFBMVUdfQ1BVYCBlbmFibGVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYENPTkZJR19YODZfMzJgIG1pZ2h0IGJlIHJlbGV2YW50IGlmIEkgd2FudCB0byBleHBsb3JlIDMyLWJpdCBzcGVjaWZpYyBiZWhhdmlvci4gSSBzaG91bGQgYWxzbyBiZSBtaW5kZnVsIG9mIHRoZSBjaGFuZ2VzIHRvIGBpZGVudGlmeV9jcHVgLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMsIHNpbmNlIHRob3NlIGNoYW5nZXMgYXJlIG5vdyBwYXJ0IG9mIHRoZSBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgY2FsbCBjaGFpbi4gSSYjMzk7bGwgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGluIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYCB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFuZCBmb2N1c2VkIGFwcHJvYWNoIHRvIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oPTIzNz1leHRlcm4gdm9pZCBlYXJseV9jcHVfaW5pdCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIzODpleHRlcm4gdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgtMjM5LWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jPTIxNTI9c3RhdGljIF9faW5pdCB2b2lkIGlkZW50aWZ5X2Jvb3RfY3B1KHZvaWQpXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yMTY1LVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYzoyMTY2OnZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yMTY3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTkzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDUFUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCBmb3IgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgaXQgbWlnaHQgZGVwZW5kIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgaGVyZS4KClJpZ2h0LCBJIHNlZSB0aGF0IGBDT05GSUdfWDg2XzMyYCBhbmQgYENPTkZJR19YODZfNjRgIGFyZSBib3RoIGJlaW5nIHVzZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbmF0dXJlIG9mIENQVSBpZGVudGlmaWNhdGlvbi4gSSBhbHNvIHNwb3QgYENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVNgIHdoaWNoIGlzIGludGVyZXN0aW5nLCBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gdGhlIGJhY2sgb2YgbXkgbWluZC4KCk5vdywgYSBxdWljayB0aG91Z2h0OiBzaG91bGQgd2UgYmUgZXhwbGljaXRseSBlbmFibGluZyBgSE9UUExVR19DUFVgIGhlcmU/IEl0JiMzOTtzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl0IG1pZ2h0IGJlIHdvcnRoIG1ha2luZyB0aGF0IGRlcGVuZGVuY3kgZXhwbGljaXQgZm9yIGNsYXJpdHkgYW5kIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3QgcnVuIGludG8gYW55IHVuZXhwZWN0ZWQgaXNzdWVzLiBJJiMzOTtsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBIT1RQTFVHX0NQVWAgaXMgdGhlIGNvcnJlY3QgbmFtZSBmb3IgdGhlIGNvbmZpZyBiZWZvcmUgSSBhZGQgaXQuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBkZXRhaWxzIHJpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIT1RQTFVHX0NQVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnPTEwNTE9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL2FybS9LY29uZmlnLTEwNjItXG5hcmNoL2FybS9LY29uZmlnOjEwNjM6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL2FybS9LY29uZmlnLTEwNjQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1wmIzM0O1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0xNTY3PWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE1NzEtXG5hcmNoL2FybTY0L0tjb25maWc6MTU3Mjpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTczLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcJiMzNDtcbi0tXG5hcmNoL2Nza3kvS2NvbmZpZz0zMzA9Y29uZmlnIERSQU1fQkFTRVxuLS1cbmFyY2gvY3NreS9LY29uZmlnLTMzMy1cbmFyY2gvY3NreS9LY29uZmlnOjMzNDpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvY3NreS9LY29uZmlnLTMzNS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz01MTQ9Y29uZmlnIFNNUFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctNTMxLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1MzI6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUzMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9taXBzL0tjb25maWc9MjcwND1jb25maWcgU01QXG4tLVxuYXJjaC9taXBzL0tjb25maWctMjcyNS1cbmFyY2gvbWlwcy9LY29uZmlnOjI3MjY6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL21pcHMvS2NvbmZpZy0yNzI3LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcJiMzNDtcbi0tXG5hcmNoL3BhcmlzYy9LY29uZmlnPTMzMT1jb25maWcgSVJRU1RBQ0tTXG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zMzgtXG5hcmNoL3BhcmlzYy9LY29uZmlnOjMzOTpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvcGFyaXNjL0tjb25maWctMzQwLVx0Ym9vbFxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnPTU4MD1jb25maWcgUFBDX0ZUUkFDRV9PVVRfT0ZfTElORV9OVU1fUkVTRVJWRVxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU5MS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnOjU5Mjpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU5My1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIENQVXNcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9NDUwPWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ1OS1cbmFyY2gvcmlzY3YvS2NvbmZpZzo0NjA6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3Jpc2N2L0tjb25maWctNDYxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcJiMzNDtcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZz01MjU9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy01MzYtXG5hcmNoL3MzOTAvS2NvbmZpZzo1Mzc6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3MzOTAvS2NvbmZpZy01MzgtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC9zaC9LY29uZmlnPTU5MT1jb25maWcgTlJfQ1BVU1xuLS1cbmFyY2gvc2gvS2NvbmZpZy02MDQtXG5hcmNoL3NoL0tjb25maWc6NjA1OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9zaC9LY29uZmlnLTYwNi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpXCYjMzQ7XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTIyMD1jb25maWcgRUFSTFlGQlxuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZy0yMjgtXG5hcmNoL3NwYXJjL0tjb25maWc6MjI5OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9zcGFyYy9LY29uZmlnLTIzMC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz0yMTUwPWNvbmZpZyBBRERSRVNTX01BU0tJTkdcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjEtXG5hcmNoL3g4Ni9LY29uZmlnOjIxNjI6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjMtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94dGVuc2EvS2NvbmZpZz0yNTM9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL3h0ZW5zYS9LY29uZmlnLTI1OC1cbmFyY2gveHRlbnNhL0tjb25maWc6MjU5OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC94dGVuc2EvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O0VuYWJsZSBDUFUgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMwoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHg4NiBDUFUgSWRlbnRpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gYEhPVFBMVUdfQ1BVYCBpcyAqYWx3YXlzKiBlbmFibGVkIG9uIHg4NiDigJMgZHVoLCBgZGVmX2Jvb2wgeWAuIE5vIG5lZWQgdG8gZXZlbiB0aGluayBhYm91dCBhZGRpbmcgaXQgdG8gYW55IGNvbmZpZ3VyYXRpb24gbGlzdC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQgZWxzZSBkb2VzIHRoaXMgcGF0Y2ggdG91Y2g/IGBjaGVja19udWxsX3NlZ19jbGVhcnNfYmFzZWAgaXMgdW50b3VjaGVkLCBnb29kLiBgaWRlbnRpZnlfYm9vdF9jcHVgIGlzIGBfX2luaXRgLCBhcyBpcyBgZWFybHlfaWRlbnRpZnlfY3B1YC4gIGBpbml0X2NwdV9pbmZvYCBhbmQgYGlkZW50aWZ5X2NwdWAgYXJlIGJvdGggc3RhdGljLiBUaGF0IGxlYXZlcyB1cyB3aXRoIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIG9ubHkgZnVuY3Rpb24gcG90ZW50aWFsbHkgYWZmZWN0ZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiAqQ2xpY2tpdHktY2xpY2ssIHNjcm9sbGluZy4uLiogQWgsIGl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZy4gVGhlIG9sZCBgZ2VuZXJpY19pZGVudGlmeWAgZnVuY3Rpb24gaXMgZ29uZSwgcmVwbGFjZWQgd2l0aCBgaWRlbnRpZnlfY3B1YC4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhpcyBpcyB3aGVyZSB0aGUgKnJlYWwqIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyByZXNpZGVzLiBUaGVyZSYjMzk7cyBzb21lIGNoYW5nZXMgd2l0aGluIHRoZSBgaWRlbnRpZnlfY3B1YCBmdW5jdGlvbiBpdHNlbGYuIEl0JiMzOTtzIGluaXRpYWxpemluZyBgYy0mZ3Q7bG9vcHNfcGVyX2ppZmZ5YCBub3csIGFuZCB0aGUgcHJldmlvdXMgY2hlY2sgZm9yIENQVUlEIGlzIG5vdyBkb25lIHZpYSBhIGNhbGwgdG8gYGNwdWlkX2ZlYXR1cmUoKWAuCgpIbW0sIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyEgVGhpcyBtb2RpZmllcyBjb3JlIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMhIEl0JiMzOTtzICpyZWFjaGFibGUqIGR1cmluZyBDUFUgaG90cGx1ZywgYW5kIGFueSBjaGFuZ2VzIGluIHRoaXMgYXJlYSBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gUmVmYWN0b3JpbmcsIGhvd2V2ZXIgbWlub3IgaXQgc2VlbXMsIGlzIGFuIG9wcG9ydHVuaXR5IHRvIGludHJvZHVjZSBzdWJ0bGUgYnVncy4gV2UgY291bGQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcywgaW5jb3JyZWN0IENQVSBmZWF0dXJlIGRldGVjdGlvbiwgb3Igc29tZXRoaW5nIGp1c3QgcGxhaW4gYnJva2VuLCB3aGljaCBtaWdodCBtYW5pZmVzdCBhcyBhIGNyYXNoIGxhdGVyLiBMZXQmIzM5O3MgZ2V0IHRoaXMgaW50byB0aGUgZnV6emluZyBwaXBlbGluZSwgc3RhdCEgT2theSwgSSBuZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZGVudGlmeV9zZWNvbmRhcnlfY3B1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB4ODYgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljLCBtb3ZpbmcgaW5pdGlhbGl6YXRpb24gaW50byBhIG5ldyBgaW5pdF9jcHVfaW5mb2AgZnVuY3Rpb24gYW5kIG1lcmdpbmcgYGdlbmVyaWNfaWRlbnRpZnlgIGludG8gYGlkZW50aWZ5X2NwdWAuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBDUFUgZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBhcmUgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVkLiBXaGlsZSBtdWNoIG9mIHRoaXMgcnVucyBkdXJpbmcgZWFybHkgYm9vdCwgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGlzIGV4ZWN1dGVkIHdoZW4gc2Vjb25kYXJ5IENQVXMgYXJlIGJyb3VnaHQgb25saW5lLCB3aGljaCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiBGdXp6aW5nIENQVSBob3RwbHVnIGNvdWxkIHJldmVhbCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBpbmNvcnJlY3QgZmVhdHVyZSBkZXRlY3Rpb24gaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkZW50aWZ5X3NlY29uZGFyeV9jcHUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyBpbiB4ODYgYnkgY29uc29saWRhdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBjcHVpbmZvX3g4NmAgZmllbGRzIGludG8gYSBuZXcgYGluaXRfY3B1X2luZm8oKWAgZnVuY3Rpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byBDUFUgYm9vdCBhbmQgaG90cGx1ZyBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOGQ5NDU1NmEzYTdjYTg3YWYzMzlhMjQ4OTRjMzVjZWEyMDdkZDVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMDA6MDA6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCBhM2RmMjFkMjY0NjA2Li5lMGM3MGEyNTEwYWZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTE3NzIsMjUgJiM0MzsxNzcyLDUwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcHVfcGFyc2VfZWFybHlfcGFyYW0odm9pZCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpbml0X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKJiM0Mzt7CiYjNDM7CWMtJmd0O3g4Nl9jYWNoZV9zaXplID0gMDsKJiM0MzsJYy0mZ3Q7eDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTjsKJiM0MzsJYy0mZ3Q7eDg2X21vZGVsID0gYy0mZ3Q7eDg2X3N0ZXBwaW5nID0gMDsJLyogU28gZmFyIHVua25vd24uLi4gKi8KJiM0MzsJYy0mZ3Q7eDg2X3ZlbmRvcl9pZFswXSA9ICYjMzk7XDAmIzM5OzsgLyogVW5zZXQgKi8KJiM0MzsJYy0mZ3Q7eDg2X21vZGVsX2lkWzBdID0gJiMzOTtcMCYjMzk7OyAgLyogVW5zZXQgKi8KJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAomIzQzOwljLSZndDt4ODZfY2xmbHVzaF9zaXplID0gNjQ7CiYjNDM7CWMtJmd0O3g4Nl9waHlzX2JpdHMgPSAzNjsKJiM0MzsJYy0mZ3Q7eDg2X3ZpcnRfYml0cyA9IDQ4OwomIzQzOyNlbHNlCiYjNDM7CWMtJmd0O2NwdWlkX2xldmVsID0gLTE7CS8qIENQVUlEIG5vdCBkZXRlY3RlZCAqLwomIzQzOwljLSZndDt4ODZfY2xmbHVzaF9zaXplID0gMzI7CiYjNDM7CWMtJmd0O3g4Nl9waHlzX2JpdHMgPSAzMjsKJiM0MzsJYy0mZ3Q7eDg2X3ZpcnRfYml0cyA9IDMyOwomIzQzOyNlbmRpZgomIzQzOwljLSZndDt4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZTsKJiM0MzsJbWVtc2V0KCZhbXA7Yy0mZ3Q7eDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt4ODZfY2FwYWJpbGl0eSkpOwomIzQzOwltZW1zZXQoJmFtcDtjLSZndDtjcHVpZCwgMCwgc2l6ZW9mKGMtJmd0O2NwdWlkKSk7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVMKJiM0MzsJbWVtc2V0KCZhbXA7Yy0mZ3Q7dm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLSZndDt2bXhfY2FwYWJpbGl0eSkpOwomIzQzOyNlbmRpZgomIzQzOwljLSZndDtleHRlbmRlZF9jcHVpZF9sZXZlbCA9IDA7CiYjNDM7fQomIzQzOwogLyoKICAqIERvIG1pbmltdW0gQ1BVIGRldGVjdGlvbiBlYXJseS4KICAqIEZpZWxkcyByZWFsbHkgbmVlZGVkOiB2ZW5kb3IsIGNwdWlkX2xldmVsLCBmYW1pbHksIG1vZGVsLCBtYXNrLAogICogY2FjaGUgYWxpZ25tZW50LgotICogVGhlIG90aGVycyBhcmUgbm90IHRvdWNoZWQgdG8gYXZvaWQgdW53YW50ZWQgc2lkZSBlZmZlY3RzLgomIzQzOyAqIFRoZSBvdGhlcnMgYXJlIHJlc2V0IHRvIHRoZWlyIGRlZmF1bHRzIGhlcmUgYW5kIG9ubHkgZmlsbGVkIGluIGxhdGVyLAomIzQzOyAqIGJ5IGlkZW50aWZ5X2NwdSgpLgogICoKICAqIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gdGhlIGJvb3QgQ1BVLiAgRG9uJiMzOTt0IGFkZCBjb2RlCiAgKiBoZXJlIHRoYXQgaXMgc3VwcG9zZWQgdG8gcnVuIG9uIGFsbCBDUFVzLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQltZW1zZXQoJmFtcDtjLSZndDt4ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtJmd0O3g4Nl9jYXBhYmlsaXR5KSk7Ci0JbWVtc2V0KCZhbXA7Yy0mZ3Q7Y3B1aWQsIDAsIHNpemVvZihjLSZndDtjcHVpZCkpOwotCWMtJmd0O2V4dGVuZGVkX2NwdWlkX2xldmVsID0gMDsKJiM0MzsJaW5pdF9jcHVfaW5mbyhjKTsKIAogCWlmICghY3B1aWRfZmVhdHVyZSgpKQogCQlpZGVudGlmeV9jcHVfd2l0aG91dF9jcHVpZChjKTsKIAotCS8qIGN5cml4IGNvdWxkIGhhdmUgY3B1aWQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpKi8KJiM0MzsJLyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovCiAJaWYgKGNwdWlkX2ZlYXR1cmUoKSkgewogCQljcHVpZF9zY2FuX2NwdShjKTsKIAkJY3B1X2RldGVjdChjKTsKQEAgLTE5NTQsMTYgJiM0MzsxOTc5LDIxIEBAIHZvaWQgY2hlY2tfbnVsbF9zZWdfY2xlYXJzX2Jhc2Uoc3RydWN0IGNwdWluZm9feDg2ICpjKQogCXNldF9jcHVfYnVnKGMsIFg4Nl9CVUdfTlVMTF9TRUcpOwogfQogCi1zdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKJiM0MzsvKgomIzQzOyAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JYy0mZ3Q7ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJYy0mZ3Q7bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OwogCiAJaWYgKCFjcHVpZF9mZWF0dXJlKCkpCiAJCWlkZW50aWZ5X2NwdV93aXRob3V0X2NwdWlkKGMpOwogCi0JLyogY3lyaXggY291bGQgaGF2ZSBjcHVpZCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkqLwomIzQzOwkvKiBDeXJpeCBjb3VsZCBoYXZlIENQVUlEIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKS4gKi8KIAlpZiAoIWNwdWlkX2ZlYXR1cmUoKSkKLQkJcmV0dXJuOwomIzQzOwkJZ290byBub19jcHVpZDsKIAogCWNwdWlkX3NjYW5fY3B1KGMpOwogCWNwdV9kZXRlY3QoYyk7CkBAIC0xOTkxLDQwICYjNDM7MjAyMSw4IEBAIHN0YXRpYyB2b2lkIGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKQogI2lmZGVmIENPTkZJR19YODZfMzIKIAlzZXRfY3B1X2J1ZyhjLCBYODZfQlVHX0VTUEZJWCk7CiAjZW5kaWYKLX0KLQotLyoKLSAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLgotICovCi1zdGF0aWMgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCWludCBpOwotCi0JYy0mZ3Q7bG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5OwotCWMtJmd0O3g4Nl9jYWNoZV9zaXplID0gMDsKLQljLSZndDt4ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOOwotCWMtJmd0O3g4Nl9tb2RlbCA9IGMtJmd0O3g4Nl9zdGVwcGluZyA9IDA7CS8qIFNvIGZhciB1bmtub3duLi4uICovCi0JYy0mZ3Q7eDg2X3ZlbmRvcl9pZFswXSA9ICYjMzk7XDAmIzM5OzsgLyogVW5zZXQgKi8KLQljLSZndDt4ODZfbW9kZWxfaWRbMF0gPSAmIzM5O1wwJiMzOTs7ICAvKiBVbnNldCAqLwotI2lmZGVmIENPTkZJR19YODZfNjQKLQljLSZndDt4ODZfY2xmbHVzaF9zaXplID0gNjQ7Ci0JYy0mZ3Q7eDg2X3BoeXNfYml0cyA9IDM2OwotCWMtJmd0O3g4Nl92aXJ0X2JpdHMgPSA0ODsKLSNlbHNlCi0JYy0mZ3Q7Y3B1aWRfbGV2ZWwgPSAtMTsJLyogQ1BVSUQgbm90IGRldGVjdGVkICovCi0JYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZSA9IDMyOwotCWMtJmd0O3g4Nl9waHlzX2JpdHMgPSAzMjsKLQljLSZndDt4ODZfdmlydF9iaXRzID0gMzI7Ci0jZW5kaWYKLQljLSZndDt4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0mZ3Q7eDg2X2NsZmx1c2hfc2l6ZTsKLQltZW1zZXQoJmFtcDtjLSZndDt4ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtJmd0O3g4Nl9jYXBhYmlsaXR5KSk7Ci0JbWVtc2V0KCZhbXA7Yy0mZ3Q7Y3B1aWQsIDAsIHNpemVvZihjLSZndDtjcHVpZCkpOwotI2lmZGVmIENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVMKLQltZW1zZXQoJmFtcDtjLSZndDt2bXhfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtJmd0O3ZteF9jYXBhYmlsaXR5KSk7Ci0jZW5kaWYKLQotCWdlbmVyaWNfaWRlbnRpZnkoYyk7CiAKJiM0Mztub19jcHVpZDoKIAljcHVfcGFyc2VfdG9wb2xvZ3koYyk7CiAKIAlpZiAodGhpc19jcHUtJmd0O2NfaWRlbnRpZnkpCkBAIC0yMTE2LDYgJiM0MzsyMTE0LDkgQEAgc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAltY2hlY2tfY3B1X2luaXQoYyk7CiAKIAludW1hX2FkZF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKJiM0MzsKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpCiYjNDM7CQllbmFibGVfc2VwX2NwdSgpOwogfQogCiAvKgpAQCAtMjE1Myw5ICYjNDM7MjE1NCw2IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKQogCWlkZW50aWZ5X2NwdSgmYW1wO2Jvb3RfY3B1X2RhdGEpOwogCWlmIChIQVNfS0VSTkVMX0lCVCAmYW1wOyZhbXA7IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJUKSkKIAkJcHJfaW5mbygmIzM0O0NFVCBkZXRlY3RlZDogSW5kaXJlY3QgQnJhbmNoIFRyYWNraW5nIGVuYWJsZWRcbiYjMzQ7KTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JZW5hYmxlX3NlcF9jcHUoKTsKLSNlbmRpZgogCWNwdV9kZXRlY3RfdGxiKCZhbXA7Ym9vdF9jcHVfZGF0YSk7CiAJc2V0dXBfY3JfcGlubmluZygpOwogCkBAIC0yMTc0LDEwICYjNDM7MjE3Miw4IEBAIHZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KQogCQkqYyA9IGJvb3RfY3B1X2RhdGE7CiAJYy0mZ3Q7Y3B1X2luZGV4ID0gY3B1OwogCiYjNDM7CWluaXRfY3B1X2luZm8oYyk7CiAJaWRlbnRpZnlfY3B1KGMpOwotI2lmZGVmIENPTkZJR19YODZfMzIKLQllbmFibGVfc2VwX2NwdSgpOwotI2VuZGlmCiAJeDg2X3NwZWNfY3RybF9zZXR1cF9hcCgpOwogCXVwZGF0ZV9zcmJkc19tc3IoKTsKIAlpZiAoYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX0dEUykpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAwMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODM4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ1BVIElkZW50aWZpY2F0aW9uIFJlZmFjdG9yKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNgLCBzcGVjaWZpY2FsbHkgdGhlIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSByZWZhY3RvcmluZyBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpYCwgd2hpY2ggc2VlbXMgdG8gYmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgZmllbGRzIG9mIHRoZSBgc3RydWN0IGNwdWluZm9feDg2YC4gSXQmIzM5O3MgY2FsbGVkIGluIGJvdGggYGVhcmx5X2lkZW50aWZ5X2NwdSgpYCBhbmQgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAsIGFuZCB0aGUgb2xkIGBnZW5lcmljX2lkZW50aWZ5KClgIGhhcyBiZWVuIG1lcmdlZCBpbnRvIGBpZGVudGlmeV9jcHUoKWAuIEluaXRpYWxpemF0aW9uIGxvZ2ljIGhhcyBhbHNvIGJlZW4gbW92ZWQgZnJvbSBgaWRlbnRpZnlfY3B1KClgIHRvIGBpbml0X2NwdV9pbmZvKClgLgoKTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBhY3R1YWxseSAqYWRkcyogaW5pdGlhbGl6YXRpb24gaW4gYGVhcmx5X2lkZW50aWZ5X2NwdSgpYCBhbmQgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAuIFByZXZpb3VzbHksIGBlYXJseV9pZGVudGlmeV9jcHUoKWAgd2FzIGRvaW5nIG9ubHkgYSBgbWVtc2V0YCBvbiBhIGZldyBrZXkgYXJlYXMgKGB4ODZfY2FwYWJpbGl0eWAsIGBjcHVpZGApIGFuZCBzZXR0aW5nIGBleHRlbmRlZF9jcHVpZF9sZXZlbGAgdG8gMC4gTm93LCBgaW5pdF9jcHVfaW5mbyhjKWAgaXMgY2FsbGVkIHdoaWNoIGRvZXMgdGhpcyBhbmQgbW9yZS4gVGhhdOKAmXMgYSBnb29kIHNpZ24sIHJlZHVjZXMgdGhlIHJpc2sgb2Ygc29tZSBzdWJ0bGUsIGx1cmtpbmcgaXNzdWUuCgpCdXQgdGhlbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzZWNvbmRhcnkgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljIHdvcmtzLiBJbiBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpYCwgSSBzZWU6CgpgYGBjCglpZiAoYyA9PSAmYW1wO2Jvb3RfY3B1X2RhdGEpCgkJKmMgPSBib290X2NwdV9kYXRhOwoJYy0mZ3Q7Y3B1X2luZGV4ID0gY3B1OwoKCWluaXRfY3B1X2luZm8oYyk7CglpZGVudGlmeV9jcHUoYyk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHNldHMgYCpjID0gYm9vdF9jcHVfZGF0YWAgaWYgYGNgIGlzIHRoZSBib290IENQVS4gQnV0ICpjKiBpcyBhIHBvaW50ZXIhIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIHRyYWNlIGl0IGJhY2suIE9rYXksIHRoZSBvcmlnaW5hbCBjb2RlIGhhZDoKCmBgYGMKCWlmIChjID09ICZhbXA7Ym9vdF9jcHVfZGF0YSkKCQkqYyA9IGJvb3RfY3B1X2RhdGE7CmBgYAoKVGhhdCBjYW4mIzM5O3QgYmUgcmlnaHQ7IGl0IHdvdWxkIGJlIGEgbm8tb3AhIEFoLCB0aGF0JiMzOTtzIG5vdCByaWdodCwgbGV0IG1lIGNoZWNrIHRoZSBvcmlnaW5hbCBjb2RlIGFnYWluLiBUaGUgb3JpZ2luYWwgY29kZSB3YXM6CgpgYGBjCglpZiAoYyA9PSAmYW1wO2Jvb3RfY3B1X2RhdGEpCgkJcmV0dXJuOwpgYGAKCk9rYXksIEkgbmVlZCB0byBzZWUgdGhlIGFjdHVhbCBkaWZmLiBMZXQmIzM5O3MgbG9vazoKCmBgYGMKQEAgLTIxNzQsMTAgJiM0MzsyMTcyLDggQEAgdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpCiAJCSpjID0gYm9vdF9jcHVfZGF0YTsKIAljLSZndDtjcHVfaW5kZXggPSBjcHU7CiAKJiM0MzsJaW5pdF9jcHVfaW5mbyhjKTsKIAlpZGVudGlmeV9jcHUoYyk7CmBgYAoKT2theSwgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgZGlmZjoKCmBgYGMKIAlpZiAoYyA9PSAmYW1wO2Jvb3RfY3B1X2RhdGEpCiAJCSpjID0gYm9vdF9jcHVfZGF0YTsKIAljLSZndDtjcHVfaW5kZXggPSBjcHU7CmBgYAoKQWgsIHJpZ2h0ISBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dCBmcm9tIHRoZSBmaWxlIGl0c2VsZi4KCmBgYGMKdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpCnsKCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZhbXA7Y3B1X2RhdGEoY3B1KTsKCglpZiAoYyA9PSAmYW1wO2Jvb3RfY3B1X2RhdGEpCgkJcmV0dXJuOyAvLyB3YWl0LCBubywgdGhlIGRpZmYgc2F5czoKYGBgCgpTbywgdGhlIG9yaWdpbmFsIGNvZGUgcmV0dXJuZWQgaWYgaXQgd2FzIHRoZSBib290IENQVSwgd2hpbGUgbm93IGBpbml0X2NwdV9pbmZvKGMpYCBpcyBjYWxsZWQuIFRoaXMgaXMgdGhlIGRpZmZlcmVuY2UsIHNvIG5vIGlzc3VlIGlmIGBjID09ICZhbXA7Ym9vdF9jcHVfZGF0YWAgaXMgdHJ1ZS4gR29vZC4gQWxsIGluIGFsbCwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCByZWZhY3Rvci4gSXQmIzM5O3MgYWRkaW5nIGluaXRpYWxpemF0aW9uLCB3aGljaCByZWR1Y2VzIHRoZSBjaGFuY2Ugb2Ygc29tZSBvYnNjdXJlIGJ1Zy4gTmVlZCB0byBkb3VibGUtY2hlY2sgc29tZSBjb3JuZXIgY2FzZXMsIGJ1dCBvdmVyYWxsLCBzZWVtcyBzb2xpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTY1Olx0XG4yMTY2Olx0dm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpXG4yMTY3Olx0e1xuMjE2ODpcdFx0c3RydWN0IGNwdWluZm9feDg2ICpjID0gXHUwMDI2Y3B1X2RhdGEoY3B1KTtcbjIxNjk6XHRcbjIxNzA6XHRcdC8qIENvcHkgYm9vdF9jcHVfZGF0YSBvbmx5IG9uIHRoZSBmaXJzdCBicmluZ3VwICovXG4yMTcxOlx0XHRpZiAoIWMtXHUwMDNlaW5pdGlhbGl6ZWQpXG4yMTcyOlx0XHRcdCpjID0gYm9vdF9jcHVfZGF0YTtcbjIxNzM6XHRcdGMtXHUwMDNlY3B1X2luZGV4ID0gY3B1O1xuMjE3NDpcdFxuMjE3NTpcdFx0aW5pdF9jcHVfaW5mbyhjKTtcbjIxNzY6XHRcdGlkZW50aWZ5X2NwdShjKTtcbjIxNzc6XHRcdHg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTtcbjIxNzg6XHRcdHVwZGF0ZV9zcmJkc19tc3IoKTtcbjIxNzk6XHRcdGlmIChib290X2NwdV9oYXNfYnVnKFg4Nl9CVUdfR0RTKSlcbjIxODA6XHRcdFx0dXBkYXRlX2dkc19tc3IoKTtcbjIxODE6XHRcbjIxODI6XHRcdHRzeF9hcF9pbml0KCk7XG4yMTgzOlx0XHRjLVx1MDAzZWluaXRpYWxpemVkID0gdHJ1ZTtcbjIxODQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDAwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODEKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENQVSBJZGVudGlmaWNhdGlvbiBSZWZhY3RvcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHJlZmFjdG9yaW5nIHRoZSBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMuIFJpZ2h0LCBzbyBgaW5pdF9jcHVfaW5mbyhjKWAgaXMgYmVpbmcgY2FsbGVkLCB3aGljaCB0aGVuIHNldHMgdGhlIENQVSBpbmZvcm1hdGlvbi4gVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCB3aGljaCBpcyBnb29kLiBUaGUgY29kZSBpdHNlbGYsIGFzIEkgc2VlIGl0LCBzZXRzIHRoZSBpbml0aWFsIGRhdGEgaW4gdGhlIGJvb3Qgb2YgdGhlIENQVSwgaXQmIzM5O3Mgbm90IGNoYW5naW5nIGFueSBib3VuZHMgY2hlY2tzLCBub3IgaXMgaXQgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaXMganVzdCBjbGVhbmluZyB1cCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3aXRoaW4gYGluaXRfY3B1X2luZm8oKWAuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgaW50ZXJuYWwgdG8gdGhlIENQVSBpZGVudGlmaWNhdGlvbiByb3V0aW5lcyBkdXJpbmcgYm9vdCBhbmQgaG90cGx1Zywgd2hpY2gsIGZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgaXMgYSBwb3NpdGl2ZSBjaGFuZ2UuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBjaGFuZ2VzIGFyZSBpbnRlcm5hbCwgYW5kIGl0IGlzIGEgcmVmYWN0b3JpbmcsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gS0FTQU4gYW5kIHRoZSB1c3VhbCBzdGFuZGFyZCBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55dGhpbmcuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4gVGhlIGBzdHJ1Y3QgY3B1aW5mb194ODZgIGlzbiYjMzk7dCBkaXJlY3RseSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ3JlYXQg4oCTIGl0JiMzOTtzIGV4cG9zZWQgdmlhIGAvcHJvYy9jcHVpbmZvYCwgYnV0IHRoYXQgb25seSBwcmludHMgc3BlY2lmaWMgZmllbGRzLCByaWdodD8gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNob3VsZCBiZSBleHBvc2VkLCBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29udHJvbCBmbG93IGhhemFyZHMsIGFzIGZhciBhcyBJIGNhbiBzZWUuCgpTbywgaGVyZSYjMzk7cyB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggaXMgYWJvdXQgQ1BVIGlkZW50aWZpY2F0aW9uIHJlZmFjdG9yaW5nIGFuZCBjb25zb2xpZGF0aW9uLCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBjb25zb2xpZGF0ZWQgaW50byBgaW5pdF9jcHVfaW5mbygpYC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IG1pZ2h0IGxlYWsgaW5mb3JtYXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBleHBvc2VkLCB3aGljaCByZW1vdmVzIGFueSByaXNrIG9mIG1lbW9yeSBsZWFrcyBvciB1c2UgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgZW5vdWdoIHRvIHRha2UgY2FyZSBvZiBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBtYXkgZXhpc3QgaGVyZS4gSXQgbG9va3Mgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMDA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyBpbiB4ODYgYnkgY29uc29saWRhdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBjcHVpbmZvX3g4NmAgZmllbGRzIGludG8gYSBuZXcgYGluaXRfY3B1X2luZm8oKWAgZnVuY3Rpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byBDUFUgYm9vdCBhbmQgaG90cGx1ZyBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyBpbiB4ODYgYnkgY29uc29saWRhdGluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBjcHVpbmZvX3g4NmAgZmllbGRzIGludG8gYSBuZXcgYGluaXRfY3B1X2luZm8oKWAgZnVuY3Rpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGludHJvZHVjZSBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSBpbnRlcm5hbCB0byBDUFUgYm9vdCBhbmQgaG90cGx1ZyBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMDo1Ni4yNDgwNDMxMTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk3ODU1MTA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGVudGlmeV9zZWNvbmRhcnlfY3B1XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljIGluIHg4NiBieSBjb25zb2xpZGF0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBmaWVsZHMgaW50byBhIG5ldyBgaW5pdF9jcHVfaW5mbygpYCBmdW5jdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGludGVybmFsIHRvIENQVSBib290IGFuZCBob3RwbHVnIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAwOjU2LjI0ODA0ODY4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxMDMzMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYThkOTQ1NTZhM2E3Y2E4N2FmMzM5YTI0ODk0YzM1Y2VhMjA3ZGQ1ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDowMDo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xcbmluZGV4IGEzZGYyMWQyNjQ2MDYuLmUwYzcwYTI1MTBhZmMgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcXG5AQCAtMTc3MiwyNSArMTc3Miw1MCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY3B1X3BhcnNlX2Vhcmx5X3BhcmFtKHZvaWQpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuK3tcXG4rXFx0Yy1cXHUwMDNleDg2X2NhY2hlX3NpemUgPSAwO1xcbitcXHRjLVxcdTAwM2V4ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOO1xcbitcXHRjLVxcdTAwM2V4ODZfbW9kZWwgPSBjLVxcdTAwM2V4ODZfc3RlcHBpbmcgPSAwO1xcdC8qIFNvIGZhciB1bmtub3duLi4uICovXFxuK1xcdGMtXFx1MDAzZXg4Nl92ZW5kb3JfaWRbMF0gPSAnXFxcXDAnOyAvKiBVbnNldCAqL1xcbitcXHRjLVxcdTAwM2V4ODZfbW9kZWxfaWRbMF0gPSAnXFxcXDAnOyAgLyogVW5zZXQgKi9cXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4rXFx0Yy1cXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDY0O1xcbitcXHRjLVxcdTAwM2V4ODZfcGh5c19iaXRzID0gMzY7XFxuK1xcdGMtXFx1MDAzZXg4Nl92aXJ0X2JpdHMgPSA0ODtcXG4rI2Vsc2VcXG4rXFx0Yy1cXHUwMDNlY3B1aWRfbGV2ZWwgPSAtMTtcXHQvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi9cXG4rXFx0Yy1cXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDMyO1xcbitcXHRjLVxcdTAwM2V4ODZfcGh5c19iaXRzID0gMzI7XFxuK1xcdGMtXFx1MDAzZXg4Nl92aXJ0X2JpdHMgPSAzMjtcXG4rI2VuZGlmXFxuK1xcdGMtXFx1MDAzZXg4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLVxcdTAwM2V4ODZfY2xmbHVzaF9zaXplO1xcbitcXHRtZW1zZXQoXFx1MDAyNmMtXFx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cXHUwMDNleDg2X2NhcGFiaWxpdHkpKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZjLVxcdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXFx1MDAzZWNwdWlkKSk7XFxuKyNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTXFxuK1xcdG1lbXNldChcXHUwMDI2Yy1cXHUwMDNldm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVxcdTAwM2V2bXhfY2FwYWJpbGl0eSkpO1xcbisjZW5kaWZcXG4rXFx0Yy1cXHUwMDNlZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBEbyBtaW5pbXVtIENQVSBkZXRlY3Rpb24gZWFybHkuXFxuICAqIEZpZWxkcyByZWFsbHkgbmVlZGVkOiB2ZW5kb3IsIGNwdWlkX2xldmVsLCBmYW1pbHksIG1vZGVsLCBtYXNrLFxcbiAgKiBjYWNoZSBhbGlnbm1lbnQuXFxuLSAqIFRoZSBvdGhlcnMgYXJlIG5vdCB0b3VjaGVkIHRvIGF2b2lkIHVud2FudGVkIHNpZGUgZWZmZWN0cy5cXG4rICogVGhlIG90aGVycyBhcmUgcmVzZXQgdG8gdGhlaXIgZGVmYXVsdHMgaGVyZSBhbmQgb25seSBmaWxsZWQgaW4gbGF0ZXIsXFxuKyAqIGJ5IGlkZW50aWZ5X2NwdSgpLlxcbiAgKlxcbiAgKiBXQVJOSU5HOiB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uIHRoZSBib290IENQVS4gIERvbid0IGFkZCBjb2RlXFxuICAqIGhlcmUgdGhhdCBpcyBzdXBwb3NlZCB0byBydW4gb24gYWxsIENQVXMuXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG4ge1xcbi1cXHRtZW1zZXQoXFx1MDAyNmMtXFx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cXHUwMDNleDg2X2NhcGFiaWxpdHkpKTtcXG4tXFx0bWVtc2V0KFxcdTAwMjZjLVxcdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXFx1MDAzZWNwdWlkKSk7XFxuLVxcdGMtXFx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcXG4rXFx0aW5pdF9jcHVfaW5mbyhjKTtcXG4gXFxuIFxcdGlmICghY3B1aWRfZmVhdHVyZSgpKVxcbiBcXHRcXHRpZGVudGlmeV9jcHVfd2l0aG91dF9jcHVpZChjKTtcXG4gXFxuLVxcdC8qIGN5cml4IGNvdWxkIGhhdmUgY3B1aWQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpKi9cXG4rXFx0LyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovXFxuIFxcdGlmIChjcHVpZF9mZWF0dXJlKCkpIHtcXG4gXFx0XFx0Y3B1aWRfc2Nhbl9jcHUoYyk7XFxuIFxcdFxcdGNwdV9kZXRlY3QoYyk7XFxuQEAgLTE5NTQsMTYgKzE5NzksMjEgQEAgdm9pZCBjaGVja19udWxsX3NlZ19jbGVhcnNfYmFzZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIFxcdHNldF9jcHVfYnVnKGMsIFg4Nl9CVUdfTlVMTF9TRUcpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG4rLypcXG4rICogVGhpcyBkb2VzIHRoZSBoYXJkIHdvcmsgb2YgYWN0dWFsbHkgcGlja2luZyBhcGFydCB0aGUgQ1BVIHN0dWZmLi4uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbiB7XFxuLVxcdGMtXFx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjLVxcdTAwM2Vsb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7XFxuIFxcbiBcXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcXG4gXFx0XFx0aWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7XFxuIFxcbi1cXHQvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovXFxuK1xcdC8qIEN5cml4IGNvdWxkIGhhdmUgQ1BVSUQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpLiAqL1xcbiBcXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRnb3RvIG5vX2NwdWlkO1xcbiBcXG4gXFx0Y3B1aWRfc2Nhbl9jcHUoYyk7XFxuIFxcdGNwdV9kZXRlY3QoYyk7XFxuQEAgLTE5OTEsNDAgKzIwMjEsOCBAQCBzdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG4gI2lmZGVmIENPTkZJR19YODZfMzJcXG4gXFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19FU1BGSVgpO1xcbiAjZW5kaWZcXG4tfVxcbi1cXG4tLypcXG4tICogVGhpcyBkb2VzIHRoZSBoYXJkIHdvcmsgb2YgYWN0dWFsbHkgcGlja2luZyBhcGFydCB0aGUgQ1BVIHN0dWZmLi4uXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKVxcbi17XFxuLVxcdGludCBpO1xcbi1cXG4tXFx0Yy1cXHUwMDNlbG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5O1xcbi1cXHRjLVxcdTAwM2V4ODZfY2FjaGVfc2l6ZSA9IDA7XFxuLVxcdGMtXFx1MDAzZXg4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047XFxuLVxcdGMtXFx1MDAzZXg4Nl9tb2RlbCA9IGMtXFx1MDAzZXg4Nl9zdGVwcGluZyA9IDA7XFx0LyogU28gZmFyIHVua25vd24uLi4gKi9cXG4tXFx0Yy1cXHUwMDNleDg2X3ZlbmRvcl9pZFswXSA9ICdcXFxcMCc7IC8qIFVuc2V0ICovXFxuLVxcdGMtXFx1MDAzZXg4Nl9tb2RlbF9pZFswXSA9ICdcXFxcMCc7ICAvKiBVbnNldCAqL1xcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbi1cXHRjLVxcdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gNjQ7XFxuLVxcdGMtXFx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzNjtcXG4tXFx0Yy1cXHUwMDNleDg2X3ZpcnRfYml0cyA9IDQ4O1xcbi0jZWxzZVxcbi1cXHRjLVxcdTAwM2VjcHVpZF9sZXZlbCA9IC0xO1xcdC8qIENQVUlEIG5vdCBkZXRlY3RlZCAqL1xcbi1cXHRjLVxcdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gMzI7XFxuLVxcdGMtXFx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzMjtcXG4tXFx0Yy1cXHUwMDNleDg2X3ZpcnRfYml0cyA9IDMyO1xcbi0jZW5kaWZcXG4tXFx0Yy1cXHUwMDNleDg2X2NhY2hlX2FsaWdubWVudCA9IGMtXFx1MDAzZXg4Nl9jbGZsdXNoX3NpemU7XFxuLVxcdG1lbXNldChcXHUwMDI2Yy1cXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVxcdTAwM2V4ODZfY2FwYWJpbGl0eSkpO1xcbi1cXHRtZW1zZXQoXFx1MDAyNmMtXFx1MDAzZWNwdWlkLCAwLCBzaXplb2YoYy1cXHUwMDNlY3B1aWQpKTtcXG4tI2lmZGVmIENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVNcXG4tXFx0bWVtc2V0KFxcdTAwMjZjLVxcdTAwM2V2bXhfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXFx1MDAzZXZteF9jYXBhYmlsaXR5KSk7XFxuLSNlbmRpZlxcbi1cXG4tXFx0Z2VuZXJpY19pZGVudGlmeShjKTtcXG4gXFxuK25vX2NwdWlkOlxcbiBcXHRjcHVfcGFyc2VfdG9wb2xvZ3koYyk7XFxuIFxcbiBcXHRpZiAodGhpc19jcHUtXFx1MDAzZWNfaWRlbnRpZnkpXFxuQEAgLTIxMTYsNiArMjExNCw5IEBAIHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIFxcdG1jaGVja19jcHVfaW5pdChjKTtcXG4gXFxuIFxcdG51bWFfYWRkX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpO1xcbitcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXFxuK1xcdFxcdGVuYWJsZV9zZXBfY3B1KCk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTIxNTMsOSArMjE1NCw2IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKVxcbiBcXHRpZGVudGlmeV9jcHUoXFx1MDAyNmJvb3RfY3B1X2RhdGEpO1xcbiBcXHRpZiAoSEFTX0tFUk5FTF9JQlQgXFx1MDAyNlxcdTAwMjYgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9JQlQpKVxcbiBcXHRcXHRwcl9pbmZvKFxcXCJDRVQgZGV0ZWN0ZWQ6IEluZGlyZWN0IEJyYW5jaCBUcmFja2luZyBlbmFibGVkXFxcXG5cXFwiKTtcXG4tI2lmZGVmIENPTkZJR19YODZfMzJcXG4tXFx0ZW5hYmxlX3NlcF9jcHUoKTtcXG4tI2VuZGlmXFxuIFxcdGNwdV9kZXRlY3RfdGxiKFxcdTAwMjZib290X2NwdV9kYXRhKTtcXG4gXFx0c2V0dXBfY3JfcGlubmluZygpO1xcbiBcXG5AQCAtMjE3NCwxMCArMjE3Miw4IEBAIHZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxcbiBcXHRcXHQqYyA9IGJvb3RfY3B1X2RhdGE7XFxuIFxcdGMtXFx1MDAzZWNwdV9pbmRleCA9IGNwdTtcXG4gXFxuK1xcdGluaXRfY3B1X2luZm8oYyk7XFxuIFxcdGlkZW50aWZ5X2NwdShjKTtcXG4tI2lmZGVmIENPTkZJR19YODZfMzJcXG4tXFx0ZW5hYmxlX3NlcF9jcHUoKTtcXG4tI2VuZGlmXFxuIFxcdHg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTtcXG4gXFx0dXBkYXRlX3NyYmRzX21zcigpO1xcbiBcXHRpZiAoYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX0dEUykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAwOjU2LjY2OTcwMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTYxNTQ2MTEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGVudGlmeV9zZWNvbmRhcnlfY3B1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4ZDk0NTU2YTNhN2NhODdhZjMzOWEyNDg5NGMzNWNlYTIwN2RkNWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxNSAwMDowMDo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG5pbmRleCBhM2RmMjFkMjY0NjA2Li5lMGM3MGEyNTEwYWZjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuQEAgLTE3NzIsMjUgKzE3NzIsNTAgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9wYXJzZV9lYXJseV9wYXJhbSh2b2lkKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBpbml0X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbit7XG4rXHRjLVx1MDAzZXg4Nl9jYWNoZV9zaXplID0gMDtcbitcdGMtXHUwMDNleDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTjtcbitcdGMtXHUwMDNleDg2X21vZGVsID0gYy1cdTAwM2V4ODZfc3RlcHBpbmcgPSAwO1x0LyogU28gZmFyIHVua25vd24uLi4gKi9cbitcdGMtXHUwMDNleDg2X3ZlbmRvcl9pZFswXSA9ICdcXDAnOyAvKiBVbnNldCAqL1xuK1x0Yy1cdTAwM2V4ODZfbW9kZWxfaWRbMF0gPSAnXFwwJzsgIC8qIFVuc2V0ICovXG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdGMtXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDY0O1xuK1x0Yy1cdTAwM2V4ODZfcGh5c19iaXRzID0gMzY7XG4rXHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSA0ODtcbisjZWxzZVxuK1x0Yy1cdTAwM2VjcHVpZF9sZXZlbCA9IC0xO1x0LyogQ1BVSUQgbm90IGRldGVjdGVkICovXG4rXHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSAzMjtcbitcdGMtXHUwMDNleDg2X3BoeXNfYml0cyA9IDMyO1xuK1x0Yy1cdTAwM2V4ODZfdmlydF9iaXRzID0gMzI7XG4rI2VuZGlmXG4rXHRjLVx1MDAzZXg4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemU7XG4rXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2V4ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXHUwMDNleDg2X2NhcGFiaWxpdHkpKTtcbitcdG1lbXNldChcdTAwMjZjLVx1MDAzZWNwdWlkLCAwLCBzaXplb2YoYy1cdTAwM2VjcHVpZCkpO1xuKyNpZmRlZiBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTXG4rXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2V2bXhfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mKGMtXHUwMDNldm14X2NhcGFiaWxpdHkpKTtcbisjZW5kaWZcbitcdGMtXHUwMDNlZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwO1xuK31cbitcbiAvKlxuICAqIERvIG1pbmltdW0gQ1BVIGRldGVjdGlvbiBlYXJseS5cbiAgKiBGaWVsZHMgcmVhbGx5IG5lZWRlZDogdmVuZG9yLCBjcHVpZF9sZXZlbCwgZmFtaWx5LCBtb2RlbCwgbWFzayxcbiAgKiBjYWNoZSBhbGlnbm1lbnQuXG4tICogVGhlIG90aGVycyBhcmUgbm90IHRvdWNoZWQgdG8gYXZvaWQgdW53YW50ZWQgc2lkZSBlZmZlY3RzLlxuKyAqIFRoZSBvdGhlcnMgYXJlIHJlc2V0IHRvIHRoZWlyIGRlZmF1bHRzIGhlcmUgYW5kIG9ubHkgZmlsbGVkIGluIGxhdGVyLFxuKyAqIGJ5IGlkZW50aWZ5X2NwdSgpLlxuICAqXG4gICogV0FSTklORzogdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgYm9vdCBDUFUuICBEb24ndCBhZGQgY29kZVxuICAqIGhlcmUgdGhhdCBpcyBzdXBwb3NlZCB0byBydW4gb24gYWxsIENQVXMuXG4gICovXG4gc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4ge1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5KSk7XG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXHUwMDNlY3B1aWQpKTtcbi1cdGMtXHUwMDNlZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSAwO1xuK1x0aW5pdF9jcHVfaW5mbyhjKTtcbiBcbiBcdGlmICghY3B1aWRfZmVhdHVyZSgpKVxuIFx0XHRpZGVudGlmeV9jcHVfd2l0aG91dF9jcHVpZChjKTtcbiBcbi1cdC8qIGN5cml4IGNvdWxkIGhhdmUgY3B1aWQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpKi9cbitcdC8qIEN5cml4IGNvdWxkIGhhdmUgQ1BVSUQgZW5hYmxlZCB2aWEgY19pZGVudGlmeSgpLiAqL1xuIFx0aWYgKGNwdWlkX2ZlYXR1cmUoKSkge1xuIFx0XHRjcHVpZF9zY2FuX2NwdShjKTtcbiBcdFx0Y3B1X2RldGVjdChjKTtcbkBAIC0xOTU0LDE2ICsxOTc5LDIxIEBAIHZvaWQgY2hlY2tfbnVsbF9zZWdfY2xlYXJzX2Jhc2Uoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19OVUxMX1NFRyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuKy8qXG4rICogVGhpcyBkb2VzIHRoZSBoYXJkIHdvcmsgb2YgYWN0dWFsbHkgcGlja2luZyBhcGFydCB0aGUgQ1BVIHN0dWZmLi4uXG4rICovXG4rc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiB7XG4tXHRjLVx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcbitcdGludCBpO1xuK1xuK1x0Yy1cdTAwM2Vsb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7XG4gXG4gXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcbiBcdFx0aWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7XG4gXG4tXHQvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovXG4rXHQvKiBDeXJpeCBjb3VsZCBoYXZlIENQVUlEIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKS4gKi9cbiBcdGlmICghY3B1aWRfZmVhdHVyZSgpKVxuLVx0XHRyZXR1cm47XG4rXHRcdGdvdG8gbm9fY3B1aWQ7XG4gXG4gXHRjcHVpZF9zY2FuX2NwdShjKTtcbiBcdGNwdV9kZXRlY3QoYyk7XG5AQCAtMTk5MSw0MCArMjAyMSw4IEBAIHN0YXRpYyB2b2lkIGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuICNpZmRlZiBDT05GSUdfWDg2XzMyXG4gXHRzZXRfY3B1X2J1ZyhjLCBYODZfQlVHX0VTUEZJWCk7XG4gI2VuZGlmXG4tfVxuLVxuLS8qXG4tICogVGhpcyBkb2VzIHRoZSBoYXJkIHdvcmsgb2YgYWN0dWFsbHkgcGlja2luZyBhcGFydCB0aGUgQ1BVIHN0dWZmLi4uXG4tICovXG4tc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbi17XG4tXHRpbnQgaTtcbi1cbi1cdGMtXHUwMDNlbG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5O1xuLVx0Yy1cdTAwM2V4ODZfY2FjaGVfc2l6ZSA9IDA7XG4tXHRjLVx1MDAzZXg4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047XG4tXHRjLVx1MDAzZXg4Nl9tb2RlbCA9IGMtXHUwMDNleDg2X3N0ZXBwaW5nID0gMDtcdC8qIFNvIGZhciB1bmtub3duLi4uICovXG4tXHRjLVx1MDAzZXg4Nl92ZW5kb3JfaWRbMF0gPSAnXFwwJzsgLyogVW5zZXQgKi9cbi1cdGMtXHUwMDNleDg2X21vZGVsX2lkWzBdID0gJ1xcMCc7ICAvKiBVbnNldCAqL1xuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4tXHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSA2NDtcbi1cdGMtXHUwMDNleDg2X3BoeXNfYml0cyA9IDM2O1xuLVx0Yy1cdTAwM2V4ODZfdmlydF9iaXRzID0gNDg7XG4tI2Vsc2Vcbi1cdGMtXHUwMDNlY3B1aWRfbGV2ZWwgPSAtMTtcdC8qIENQVUlEIG5vdCBkZXRlY3RlZCAqL1xuLVx0Yy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gMzI7XG4tXHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzMjtcbi1cdGMtXHUwMDNleDg2X3ZpcnRfYml0cyA9IDMyO1xuLSNlbmRpZlxuLVx0Yy1cdTAwM2V4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplO1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5KSk7XG4tXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXHUwMDNlY3B1aWQpKTtcbi0jaWZkZWYgQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FU1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNldm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXZteF9jYXBhYmlsaXR5KSk7XG4tI2VuZGlmXG4tXG4tXHRnZW5lcmljX2lkZW50aWZ5KGMpO1xuIFxuK25vX2NwdWlkOlxuIFx0Y3B1X3BhcnNlX3RvcG9sb2d5KGMpO1xuIFxuIFx0aWYgKHRoaXNfY3B1LVx1MDAzZWNfaWRlbnRpZnkpXG5AQCAtMjExNiw2ICsyMTE0LDkgQEAgc3RhdGljIHZvaWQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiBcdG1jaGVja19jcHVfaW5pdChjKTtcbiBcbiBcdG51bWFfYWRkX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpO1xuK1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1g4Nl8zMikpXG4rXHRcdGVuYWJsZV9zZXBfY3B1KCk7XG4gfVxuIFxuIC8qXG5AQCAtMjE1Myw5ICsyMTU0LDYgQEAgc3RhdGljIF9faW5pdCB2b2lkIGlkZW50aWZ5X2Jvb3RfY3B1KHZvaWQpXG4gXHRpZGVudGlmeV9jcHUoXHUwMDI2Ym9vdF9jcHVfZGF0YSk7XG4gXHRpZiAoSEFTX0tFUk5FTF9JQlQgXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJUKSlcbiBcdFx0cHJfaW5mbyhcIkNFVCBkZXRlY3RlZDogSW5kaXJlY3QgQnJhbmNoIFRyYWNraW5nIGVuYWJsZWRcXG5cIik7XG4tI2lmZGVmIENPTkZJR19YODZfMzJcbi1cdGVuYWJsZV9zZXBfY3B1KCk7XG4tI2VuZGlmXG4gXHRjcHVfZGV0ZWN0X3RsYihcdTAwMjZib290X2NwdV9kYXRhKTtcbiBcdHNldHVwX2NyX3Bpbm5pbmcoKTtcbiBcbkBAIC0yMTc0LDEwICsyMTcyLDggQEAgdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpXG4gXHRcdCpjID0gYm9vdF9jcHVfZGF0YTtcbiBcdGMtXHUwMDNlY3B1X2luZGV4ID0gY3B1O1xuIFxuK1x0aW5pdF9jcHVfaW5mbyhjKTtcbiBcdGlkZW50aWZ5X2NwdShjKTtcbi0jaWZkZWYgQ09ORklHX1g4Nl8zMlxuLVx0ZW5hYmxlX3NlcF9jcHUoKTtcbi0jZW5kaWZcbiBcdHg4Nl9zcGVjX2N0cmxfc2V0dXBfYXAoKTtcbiBcdHVwZGF0ZV9zcmJkc19tc3IoKTtcbiBcdGlmIChib290X2NwdV9oYXNfYnVnKFg4Nl9CVUdfR0RTKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAwOjU2LjY2OTcwMTM3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1ODc4OTE5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBDUFUgSWRlbnRpZmljYXRpb24gUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uIGNvZGUgaW4gYGFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNgLiBJdCdzIG1vdmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCBjcHVpbmZvX3g4NmAgaW50byBhIG5ldyBmdW5jdGlvbiwgYGluaXRfY3B1X2luZm8oKWAsIGFuZCBjb25zb2xpZGF0aW5nIHNvbWUgb3RoZXIgZnVuY3Rpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuXG5cbkluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgYSByZWZhY3RvcmluZy4gQnV0IHdhaXQsIHRoaXMgYGluaXRfY3B1X2luZm8oKWAgY2FsbCBoYXMgYmVlbiBtb3ZlZCBpbnRvIGBlYXJseV9pZGVudGlmeV9jcHUoKWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgYGluaXRfY3B1X2luZm8oKWAgbm93IHJlc2V0cyBhIGJ1bmNoIG9mIGBjcHVpbmZvX3g4NmAgbWVtYmVycyB0aGF0IHdlcmUgKm5vdCogcmVzZXQgcHJldmlvdXNseS4gVGhpcyBwYXJ0IGlzIGV4ZWN1dGVkIHZlcnkgZWFybHksIGJlZm9yZSB0aGUgZnV6emVyIHR5cGljYWxseSBydW5zLCBtYWtpbmcgaXQgbGVzcyBvZiBhIHByaW9yaXR5IGZvciBzeXprYWxsZXIuXG5cbkhvd2V2ZXIsIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KClgIGlzIG5vdyBhbHNvIGNhbGxpbmcgdGhlIHNhbWUgcmVmYWN0b3JlZCBjb2RlLiBBbmQgc2Vjb25kYXJ5IENQVSBpZGVudGlmaWNhdGlvbiBoYXBwZW5zIGR1cmluZyBDUFUgaG90cGx1Zywgd2hpY2ggKmlzKiBzb21ldGhpbmcgYSBmdXp6ZXIgY2FuIHRyaWdnZXIuIFRoYXQncyBpbnRlcmVzdGluZyEgU28sIHRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhpcyByZWZhY3RvcmluZyBleHBvc2UgbmV3IGF0dGFjayBzdXJmYWNlIG9yIGludHJvZHVjZSBhIGJ1Zz8gSXQgaXMgdmVyeSBsaWtlbHksIHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggQ1BVIGluaXRpYWxpemF0aW9uLCB0aGF0IGEgYnVnIGNvdWxkIHJlc3VsdCBpbiBzdGFsZSBkYXRhIG9uIGEgc2Vjb25kYXJ5IENQVS5cblxuVGhlIGNvbW1pdCBtZXNzYWdlIGl0c2VsZiBpcyBhIGJpdCBnZW5lcmljIChcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiKS4gVGhpcyBzdWdnZXN0cyBpdCdzIGEgU3l6a2FsbGVyLXJlbGF0ZWQgY2hhbmdlLCB3aGljaCBtZWFucyB3ZSBzaG91bGQgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24uXG5cbkFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiwgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLiBIb3dldmVyLCB0aGlzIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlLCBhcyBDUFUgaG90cGx1ZyBpcyBwb3NzaWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gVGhpcyBtb2RpZmljYXRpb24gdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyAoeDg2IENQVSBpZGVudGlmaWNhdGlvbikgYW5kIGNhbiBiZSByZWFjaGVkLiBTbywgYmFzZWQgb24gdGhlIGRvY3VtZW50ZWQgZ3VpZGVsaW5lcywgSSBzaG91bGQgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgd2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24/IERlZmluaXRlbHkgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgLCBiZWNhdXNlIGl0J3MgY2FsbGVkIGR1cmluZyBob3RwbHVnLiBgZWFybHlfaWRlbnRpZnlfY3B1YCBpcyBsZXNzIGltcG9ydGFudCBub3csIGFzIGl0IGV4ZWN1dGVzIHNvIGVhcmx5LiBgaWRlbnRpZnlfY3B1YCBpcyBhbm90aGVyIGtleSBvbmUsIHNpbmNlIGl0IGlzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uLiBBbmQgYGVuYWJsZV9zZXBfY3B1YCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaWRlbnRpZnlfY3B1YC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGlzIHJlYWNoYWJsZS4gWWVwLCB2aWEgQ1BVIGhvdHBsdWcsIHRoYXQncyB3aGF0J3Mga2V5IGhlcmUuIEFuZCBgZW5hYmxlX3NlcF9jcHVgIHdpbGwgbm93IGJlIGltcGFjdGVkIGJ5IENQVSBob3RwbHVnIGFzIGl0IGlzIGNhbGxlZCBieSBgaWRlbnRpZnlfY3B1YFxuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gY29uZmlybSBteSBmaW5kaW5ncyBvbiBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gbWFrZSBzdXJlIG15IGNvbmNsdXNpb25zIGFyZSBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjA3LjI1NzU5NTQ1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNTUzNjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkZW50aWZ5X3NlY29uZGFyeV9jcHVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MjM3PWV4dGVybiB2b2lkIGVhcmx5X2NwdV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIzODpleHRlcm4gdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTIzOS1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jPTIwNz1zdGF0aWMgdm9pZCBpbml0X2FtZF9rNyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTIzOC1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jOjIzOTpcXHQvKiBjYWxsaW5nIGlzIGZyb20gaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpID8gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jLTI0MC1cXHRpZiAoIWMtXFx1MDAzZWNwdV9pbmRleClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmM9MjE1Mj1zdGF0aWMgX19pbml0IHZvaWQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjE2NS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jOjIxNjY6dm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpXFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYy0yMTY3LXtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYz0zNjI9c3RhdGljIHZvaWQgaW50ZWxfc21wX2NoZWNrKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMtMzYzLXtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmM6MzY0OlxcdC8qIGNhbGxpbmcgaXMgZnJvbSBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KCkgPyAqL1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYy0zNjUtXFx0aWYgKCFjLVxcdTAwM2VjcHVfaW5kZXgpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jPTE3MD1zdGF0aWMgdm9pZCBhcF9zdGFydGluZyh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0xODktXFx0LyogU2F2ZSB0aGUgcHJvY2Vzc29yIHBhcmFtZXRlcnMuICovXFxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYzoxOTA6XFx0aWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShjcHVpZCk7XFxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0xOTEtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jPTIxMT1zdGF0aWMgdm9pZCBhcF9jYWxpYnJhdGVfZGVsYXkodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zbXBib290LmMtMjE0LVxcdCAqIENhbGlicmF0ZSB0aGUgZGVsYXkgbG9vcCBhbmQgdXBkYXRlIGxvb3BzX3Blcl9qaWZmeSBpbiBjcHVfZGF0YS5cXG5hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jOjIxNTpcXHQgKiBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KCkgc3RvcmVkIGEgdmFsdWUgdGhhdCBpcyBjbG9zZSBidXQgbm90IGFzXFxuYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYy0yMTYtXFx0ICogYWNjdXJhdGUgYXMgdGhlIHZhbHVlIGp1c3QgY2FsY3VsYXRlZC5cXG4tLVxcbmFyY2gveDg2L3hlbi9zbXBfcHYuYz01Nz1zdGF0aWMgdm9pZCBjcHVfYnJpbmd1cCh2b2lkKVxcbi0tXFxuYXJjaC94ODYveGVuL3NtcF9wdi5jLTcxLVxcdGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcXG5hcmNoL3g4Ni94ZW4vc21wX3B2LmM6NzI6XFx0aWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShjcHUpO1xcbmFyY2gveDg2L3hlbi9zbXBfcHYuYy03My1cXHRzZXRfY3B1X3NpYmxpbmdfbWFwKGNwdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjA4Ljk1MTE1MzYzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMTI5MzEwMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCBpcyBjYWxsZWQgZnJvbSBgYXBfc3RhcnRpbmdgIGFuZCBgY3B1X2JyaW5ndXBgLCBib3RoIHJlbGF0ZWQgdG8gQ1BVIGhvdHBsdWcsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gQ1BVIGhvdHBsdWcgaXMgZGVmaW5pdGVseSBhIGZ1enphYmxlIGFyZWEsIGFuZCBTeXprYWxsZXIgY2FuLCBpbiBmYWN0LCBvZmZsaW5lIGFuZCBvbmxpbmUgQ1BVcy4gVGhhdCBtYWtlcyBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBhIGZvY3VzZWQgZnV6emluZyB0YXJnZXQuXG5cbk5vdywgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgaWRlbnRpZnlfY3B1YC4gQnV0IHdhaXQsIGl0J3MgYHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdSgpYC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgZ2VuZXJhbGx5IGEgYmFkIGNob2ljZSBmb3IgZnV6emluZyBiZWNhdXNlIHRoZXkgYXJlIGRpZmZpY3VsdCB0byByZWFjaCBmcm9tIHRoZSBvdXRzaWRlLiBTbywgYGlkZW50aWZ5X2NwdWAsIGBpbml0X2NwdV9pbmZvYCBhbmQgYGVhcmx5X2lkZW50aWZ5X2NwdWAgYXJlIG91dC5cblxuT2theSwgYmFjayB0byBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAuIEl0IGFwcGVhcnMgdG8gYmUgdGhlIHByaW1hcnkgcmVhY2hhYmxlIGZ1bmN0aW9uIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaCwgdGhhdCBpc24ndCBzdGF0aWMuIExldCdzIGNvbmZpcm0gdGhhdCBpdCdzIGV4cG9ydGVkIGFuZCBub3Qgc3RhdGljLi4uIGFuZCB5ZXMsIGB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSlgIGNvbmZpcm1zIGl0IGlzIG5vbi1zdGF0aWMuIEdvb2QuXG5cblRoZSBwYXRjaCBtZW50aW9ucyBhIGZldyBgQ09ORklHYCBvcHRpb25zOiBgQ09ORklHX1g4Nl8zMmAsIGBDT05GSUdfWDg2XzY0YCwgYW5kIGBDT05GSUdfWDg2X1ZNWF9GRUFUVVJFX05BTUVTYC4gVGhlIGxhdHRlciB0d28gYXJlIGZhaXJseSBzdGFuZGFyZCBmb3IgeDg2LiBUaGUgZmlyc3QgbWlnaHQgYmUgaW50ZXJlc3RpbmcgaWYgd2Ugd2FudCB0byB0ZXN0IGEgMzItYml0IHg4NiBjb25maWd1cmF0aW9uLCB3aGljaCBpc24ndCB0aGUgU3l6a2FsbGVyIGRlZmF1bHQuIFRoZSBtb3JlIGltcG9ydGFudCBjb25maWd1cmF0aW9uIGFwcGVhcnMgdG8gYmUgYENPTkZJR19IT1RQTFVHX0NQVWAsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBlc3NlbnRpYWwuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgSSBzZWUgdGhhdCBgZ2VuZXJpY19pZGVudGlmeWAgaGFzIGJlZW4gbWVyZ2VkIGludG8gYGlkZW50aWZ5X2NwdWAuIEVzc2VudGlhbGx5LCBgaWRlbnRpZnlfY3B1YCBoYXMgYmVlbiB1cGRhdGVkIGFuZCBub3cgaG9sZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG1lcmdlZCBmdW5jdGlvbi5cblxuU28sIGluIHN1bW1hcnksIEknbSBnb2luZyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgLCBlbnN1cmluZyB0aGF0IEkgaGF2ZSBgQ09ORklHX0hPVFBMVUdfQ1BVYCBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgQ09ORklHX1g4Nl8zMmAgbWlnaHQgYmUgcmVsZXZhbnQgaWYgSSB3YW50IHRvIGV4cGxvcmUgMzItYml0IHNwZWNpZmljIGJlaGF2aW9yLiBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YgdGhlIGNoYW5nZXMgdG8gYGlkZW50aWZ5X2NwdWAsIGV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBzaW5jZSB0aG9zZSBjaGFuZ2VzIGFyZSBub3cgcGFydCBvZiB0aGUgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGNhbGwgY2hhaW4uIEknbGwgZG91YmxlIGNoZWNrIHRoZSBjb2RlIGluIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYCB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYW5kIGZvY3VzZWQgYXBwcm9hY2ggdG8gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEyMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMToxNy45NjQwODY4MjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MDgwMTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg9MjM3PWV4dGVybiB2b2lkIGVhcmx5X2NwdV9pbml0KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOjIzODpleHRlcm4gdm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLTIzOS1leHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jPTIxNTI9c3RhdGljIF9faW5pdCB2b2lkIGlkZW50aWZ5X2Jvb3RfY3B1KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jLTIxNjUtXFxuYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYzoyMTY2OnZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMtMjE2Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjE5LjgzNDg5MjcxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDQ4Mzk0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENQVSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHVgIGZ1bmN0aW9uIGFuZCBpdCdzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBob3cgaXQncyB1c2VkIGFuZCB3aGF0IGl0IG1pZ2h0IGRlcGVuZCBvbi4gTGV0J3Mgc2VlIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgaGVyZS5cblxuUmlnaHQsIEkgc2VlIHRoYXQgYENPTkZJR19YODZfMzJgIGFuZCBgQ09ORklHX1g4Nl82NGAgYXJlIGJvdGggYmVpbmcgdXNlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBuYXR1cmUgb2YgQ1BVIGlkZW50aWZpY2F0aW9uLiBJIGFsc28gc3BvdCBgQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FU2Agd2hpY2ggaXMgaW50ZXJlc3RpbmcsIEknbGwga2VlcCB0aGF0IGluIHRoZSBiYWNrIG9mIG15IG1pbmQuXG5cbk5vdywgYSBxdWljayB0aG91Z2h0OiBzaG91bGQgd2UgYmUgZXhwbGljaXRseSBlbmFibGluZyBgSE9UUExVR19DUFVgIGhlcmU/IEl0J3Mgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXQgbWlnaHQgYmUgd29ydGggbWFraW5nIHRoYXQgZGVwZW5kZW5jeSBleHBsaWNpdCBmb3IgY2xhcml0eSBhbmQgdG8gZW5zdXJlIHdlIGRvbid0IHJ1biBpbnRvIGFueSB1bmV4cGVjdGVkIGlzc3Vlcy4gSSdsbCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBIT1RQTFVHX0NQVWAgaXMgdGhlIGNvcnJlY3QgbmFtZSBmb3IgdGhlIGNvbmZpZyBiZWZvcmUgSSBhZGQgaXQuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBkZXRhaWxzIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTkzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjIzLjY3OTczNTg3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTczMjkzOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIT1RQTFVHX0NQVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTEwNTE9Y29uZmlnIE5SX0NQVVNcXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTA2Mi1cXG5hcmNoL2FybS9LY29uZmlnOjEwNjM6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9hcm0vS2NvbmZpZy0xMDY0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1xcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNTY3PWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTU3MS1cXG5hcmNoL2FybTY0L0tjb25maWc6MTU3Mjpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL2FybTY0L0tjb25maWctMTU3My1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL2Nza3kvS2NvbmZpZz0zMzA9Y29uZmlnIERSQU1fQkFTRVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWctMzMzLVxcbmFyY2gvY3NreS9LY29uZmlnOjMzNDpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL2Nza3kvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz01MTQ9Y29uZmlnIFNNUFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzEtXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1MzI6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MjcwND1jb25maWcgU01QXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0yNzI1LVxcbmFyY2gvbWlwcy9LY29uZmlnOjI3MjY6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9taXBzL0tjb25maWctMjcyNy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnPTMzMT1jb25maWcgSVJRU1RBQ0tTXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnLTMzOC1cXG5hcmNoL3BhcmlzYy9LY29uZmlnOjMzOTpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3BhcmlzYy9LY29uZmlnLTM0MC1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz01ODA9Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVfTlVNX1JFU0VSVkVcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU5MS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1OTI6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTkzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBDUFVzXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTQ1MD1jb25maWcgTlJfQ1BVU1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ1OS1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDYwOmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00NjEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NTI1PWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01MzYtXFxuYXJjaC9zMzkwL0tjb25maWc6NTM3OmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gvczM5MC9LY29uZmlnLTUzOC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3NoL0tjb25maWc9NTkxPWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL3NoL0tjb25maWctNjA0LVxcbmFyY2gvc2gvS2NvbmZpZzo2MDU6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9zaC9LY29uZmlnLTYwNi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXMgKEVYUEVSSU1FTlRBTClcXFwiXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWc9MjIwPWNvbmZpZyBFQVJMWUZCXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMjI4LVxcbmFyY2gvc3BhcmMvS2NvbmZpZzoyMjk6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9zcGFyYy9LY29uZmlnLTIzMC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTIxNTA9Y29uZmlnIEFERFJFU1NfTUFTS0lOR1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTYxLVxcbmFyY2gveDg2L0tjb25maWc6MjE2Mjpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94dGVuc2EvS2NvbmZpZz0yNTM9Y29uZmlnIE5SX0NQVVNcXG4tLVxcbmFyY2gveHRlbnNhL0tjb25maWctMjU4LVxcbmFyY2gveHRlbnNhL0tjb25maWc6MjU5OmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gveHRlbnNhL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIkVuYWJsZSBDUFUgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMToyNS4yNTMwMzM2ODdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDMyMDk1OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSB4ODYgQ1BVIElkZW50aWZpY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gYEhPVFBMVUdfQ1BVYCBpcyAqYWx3YXlzKiBlbmFibGVkIG9uIHg4NiDigJMgZHVoLCBgZGVmX2Jvb2wgeWAuIE5vIG5lZWQgdG8gZXZlbiB0aGluayBhYm91dCBhZGRpbmcgaXQgdG8gYW55IGNvbmZpZ3VyYXRpb24gbGlzdC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgZWxzZSBkb2VzIHRoaXMgcGF0Y2ggdG91Y2g/IGBjaGVja19udWxsX3NlZ19jbGVhcnNfYmFzZWAgaXMgdW50b3VjaGVkLCBnb29kLiBgaWRlbnRpZnlfYm9vdF9jcHVgIGlzIGBfX2luaXRgLCBhcyBpcyBgZWFybHlfaWRlbnRpZnlfY3B1YC4gIGBpbml0X2NwdV9pbmZvYCBhbmQgYGlkZW50aWZ5X2NwdWAgYXJlIGJvdGggc3RhdGljLiBUaGF0IGxlYXZlcyB1cyB3aXRoIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIG9ubHkgZnVuY3Rpb24gcG90ZW50aWFsbHkgYWZmZWN0ZWQuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlcy4gKkNsaWNraXR5LWNsaWNrLCBzY3JvbGxpbmcuLi4qIEFoLCBpdCBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcuIFRoZSBvbGQgYGdlbmVyaWNfaWRlbnRpZnlgIGZ1bmN0aW9uIGlzIGdvbmUsIHJlcGxhY2VkIHdpdGggYGlkZW50aWZ5X2NwdWAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIHRoaXMgaXMgd2hlcmUgdGhlICpyZWFsKiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMgcmVzaWRlcy4gVGhlcmUncyBzb21lIGNoYW5nZXMgd2l0aGluIHRoZSBgaWRlbnRpZnlfY3B1YCBmdW5jdGlvbiBpdHNlbGYuIEl0J3MgaW5pdGlhbGl6aW5nIGBjLVx1MDAzZWxvb3BzX3Blcl9qaWZmeWAgbm93LCBhbmQgdGhlIHByZXZpb3VzIGNoZWNrIGZvciBDUFVJRCBpcyBub3cgZG9uZSB2aWEgYSBjYWxsIHRvIGBjcHVpZF9mZWF0dXJlKClgLlxuXG5IbW0sIGlzIHRoaXMgd29ydGggZnV6emluZz8gWWVzLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyEgVGhpcyBtb2RpZmllcyBjb3JlIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMhIEl0J3MgKnJlYWNoYWJsZSogZHVyaW5nIENQVSBob3RwbHVnLCBhbmQgYW55IGNoYW5nZXMgaW4gdGhpcyBhcmVhIGNvdWxkIGJlIHByb2JsZW1hdGljLiBSZWZhY3RvcmluZywgaG93ZXZlciBtaW5vciBpdCBzZWVtcywgaXMgYW4gb3Bwb3J0dW5pdHkgdG8gaW50cm9kdWNlIHN1YnRsZSBidWdzLiBXZSBjb3VsZCBoYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBpbmNvcnJlY3QgQ1BVIGZlYXR1cmUgZGV0ZWN0aW9uLCBvciBzb21ldGhpbmcganVzdCBwbGFpbiBicm9rZW4sIHdoaWNoIG1pZ2h0IG1hbmlmZXN0IGFzIGEgY3Jhc2ggbGF0ZXIuIExldCdzIGdldCB0aGlzIGludG8gdGhlIGZ1enppbmcgcGlwZWxpbmUsIHN0YXQhIE9rYXksIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDEzLCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTozMi4yODUxMzI3NTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlkZW50aWZ5X3NlY29uZGFyeV9jcHVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgeDg2IENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYywgbW92aW5nIGluaXRpYWxpemF0aW9uIGludG8gYSBuZXcgYGluaXRfY3B1X2luZm9gIGZ1bmN0aW9uIGFuZCBtZXJnaW5nIGBnZW5lcmljX2lkZW50aWZ5YCBpbnRvIGBpZGVudGlmeV9jcHVgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgQ1BVIGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgYXJlIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZC4gV2hpbGUgbXVjaCBvZiB0aGlzIHJ1bnMgZHVyaW5nIGVhcmx5IGJvb3QsIGBpZGVudGlmeV9zZWNvbmRhcnlfY3B1YCBpcyBleGVjdXRlZCB3aGVuIHNlY29uZGFyeSBDUFVzIGFyZSBicm91Z2h0IG9ubGluZSwgd2hpY2ggY2FuIGJlIHRyaWdnZXJlZCB2aWEgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gRnV6emluZyBDUFUgaG90cGx1ZyBjb3VsZCByZXZlYWwgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgaW5jb3JyZWN0IGZlYXR1cmUgZGV0ZWN0aW9uIGludHJvZHVjZWQgYnkgdGhpcyByZWZhY3RvcmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGVudGlmeV9zZWNvbmRhcnlfY3B1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHg4NiBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMsIG1vdmluZyBpbml0aWFsaXphdGlvbiBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvYCBmdW5jdGlvbiBhbmQgbWVyZ2luZyBgZ2VuZXJpY19pZGVudGlmeWAgaW50byBgaWRlbnRpZnlfY3B1YC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IENQVSBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIGFyZSBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZWQuIFdoaWxlIG11Y2ggb2YgdGhpcyBydW5zIGR1cmluZyBlYXJseSBib290LCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdWAgaXMgZXhlY3V0ZWQgd2hlbiBzZWNvbmRhcnkgQ1BVcyBhcmUgYnJvdWdodCBvbmxpbmUsIHdoaWNoIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIEZ1enppbmcgQ1BVIGhvdHBsdWcgY291bGQgcmV2ZWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIGluY29ycmVjdCBmZWF0dXJlIGRldGVjdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjMyLjI4NTE2MzQwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDE0MjA5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTozMi4yODU2NTk1MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTY5NDA5MTkyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMgaW4geDg2IGJ5IGNvbnNvbGlkYXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgY3B1aW5mb194ODZgIGZpZWxkcyBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvKClgIGZ1bmN0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gQ1BVIGJvb3QgYW5kIGhvdHBsdWcgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhOGQ5NDU1NmEzYTdjYTg3YWYzMzlhMjQ4OTRjMzVjZWEyMDdkZDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMDA6MDA6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuaW5kZXggYTNkZjIxZDI2NDYwNi4uZTBjNzBhMjUxMGFmYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbkBAIC0xNzcyLDI1ICsxNzcyLDUwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcHVfcGFyc2VfZWFybHlfcGFyYW0odm9pZClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgaW5pdF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4re1xuK1x0Yy1cdTAwM2V4ODZfY2FjaGVfc2l6ZSA9IDA7XG4rXHRjLVx1MDAzZXg4Nl92ZW5kb3IgPSBYODZfVkVORE9SX1VOS05PV047XG4rXHRjLVx1MDAzZXg4Nl9tb2RlbCA9IGMtXHUwMDNleDg2X3N0ZXBwaW5nID0gMDtcdC8qIFNvIGZhciB1bmtub3duLi4uICovXG4rXHRjLVx1MDAzZXg4Nl92ZW5kb3JfaWRbMF0gPSAnXFwwJzsgLyogVW5zZXQgKi9cbitcdGMtXHUwMDNleDg2X21vZGVsX2lkWzBdID0gJ1xcMCc7ICAvKiBVbnNldCAqL1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4rXHRjLVx1MDAzZXg4Nl9jbGZsdXNoX3NpemUgPSA2NDtcbitcdGMtXHUwMDNleDg2X3BoeXNfYml0cyA9IDM2O1xuK1x0Yy1cdTAwM2V4ODZfdmlydF9iaXRzID0gNDg7XG4rI2Vsc2VcbitcdGMtXHUwMDNlY3B1aWRfbGV2ZWwgPSAtMTtcdC8qIENQVUlEIG5vdCBkZXRlY3RlZCAqL1xuK1x0Yy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gMzI7XG4rXHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzMjtcbitcdGMtXHUwMDNleDg2X3ZpcnRfYml0cyA9IDMyO1xuKyNlbmRpZlxuK1x0Yy1cdTAwM2V4ODZfY2FjaGVfYWxpZ25tZW50ID0gYy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplO1xuK1x0bWVtc2V0KFx1MDAyNmMtXHUwMDNleDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5KSk7XG4rXHRtZW1zZXQoXHUwMDI2Yy1cdTAwM2VjcHVpZCwgMCwgc2l6ZW9mKGMtXHUwMDNlY3B1aWQpKTtcbisjaWZkZWYgQ09ORklHX1g4Nl9WTVhfRkVBVFVSRV9OQU1FU1xuK1x0bWVtc2V0KFx1MDAyNmMtXHUwMDNldm14X2NhcGFiaWxpdHksIDAsIHNpemVvZihjLVx1MDAzZXZteF9jYXBhYmlsaXR5KSk7XG4rI2VuZGlmXG4rXHRjLVx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcbit9XG4rXG4gLypcbiAgKiBEbyBtaW5pbXVtIENQVSBkZXRlY3Rpb24gZWFybHkuXG4gICogRmllbGRzIHJlYWxseSBuZWVkZWQ6IHZlbmRvciwgY3B1aWRfbGV2ZWwsIGZhbWlseSwgbW9kZWwsIG1hc2ssXG4gICogY2FjaGUgYWxpZ25tZW50LlxuLSAqIFRoZSBvdGhlcnMgYXJlIG5vdCB0b3VjaGVkIHRvIGF2b2lkIHVud2FudGVkIHNpZGUgZWZmZWN0cy5cbisgKiBUaGUgb3RoZXJzIGFyZSByZXNldCB0byB0aGVpciBkZWZhdWx0cyBoZXJlIGFuZCBvbmx5IGZpbGxlZCBpbiBsYXRlcixcbisgKiBieSBpZGVudGlmeV9jcHUoKS5cbiAgKlxuICAqIFdBUk5JTkc6IHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gdGhlIGJvb3QgQ1BVLiAgRG9uJ3QgYWRkIGNvZGVcbiAgKiBoZXJlIHRoYXQgaXMgc3VwcG9zZWQgdG8gcnVuIG9uIGFsbCBDUFVzLlxuICAqL1xuIHN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9pZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIHtcbi1cdG1lbXNldChcdTAwMjZjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V4ODZfY2FwYWJpbGl0eSkpO1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNlY3B1aWQsIDAsIHNpemVvZihjLVx1MDAzZWNwdWlkKSk7XG4tXHRjLVx1MDAzZWV4dGVuZGVkX2NwdWlkX2xldmVsID0gMDtcbitcdGluaXRfY3B1X2luZm8oYyk7XG4gXG4gXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcbiBcdFx0aWRlbnRpZnlfY3B1X3dpdGhvdXRfY3B1aWQoYyk7XG4gXG4tXHQvKiBjeXJpeCBjb3VsZCBoYXZlIGNwdWlkIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKSovXG4rXHQvKiBDeXJpeCBjb3VsZCBoYXZlIENQVUlEIGVuYWJsZWQgdmlhIGNfaWRlbnRpZnkoKS4gKi9cbiBcdGlmIChjcHVpZF9mZWF0dXJlKCkpIHtcbiBcdFx0Y3B1aWRfc2Nhbl9jcHUoYyk7XG4gXHRcdGNwdV9kZXRlY3QoYyk7XG5AQCAtMTk1NCwxNiArMTk3OSwyMSBAQCB2b2lkIGNoZWNrX251bGxfc2VnX2NsZWFyc19iYXNlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiBcdHNldF9jcHVfYnVnKGMsIFg4Nl9CVUdfTlVMTF9TRUcpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbisvKlxuKyAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4ge1xuLVx0Yy1cdTAwM2VleHRlbmRlZF9jcHVpZF9sZXZlbCA9IDA7XG4rXHRpbnQgaTtcbitcbitcdGMtXHUwMDNlbG9vcHNfcGVyX2ppZmZ5ID0gbG9vcHNfcGVyX2ppZmZ5O1xuIFxuIFx0aWYgKCFjcHVpZF9mZWF0dXJlKCkpXG4gXHRcdGlkZW50aWZ5X2NwdV93aXRob3V0X2NwdWlkKGMpO1xuIFxuLVx0LyogY3lyaXggY291bGQgaGF2ZSBjcHVpZCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkqL1xuK1x0LyogQ3lyaXggY291bGQgaGF2ZSBDUFVJRCBlbmFibGVkIHZpYSBjX2lkZW50aWZ5KCkuICovXG4gXHRpZiAoIWNwdWlkX2ZlYXR1cmUoKSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRnb3RvIG5vX2NwdWlkO1xuIFxuIFx0Y3B1aWRfc2Nhbl9jcHUoYyk7XG4gXHRjcHVfZGV0ZWN0KGMpO1xuQEAgLTE5OTEsNDAgKzIwMjEsOCBAQCBzdGF0aWMgdm9pZCBnZW5lcmljX2lkZW50aWZ5KHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxuIFx0c2V0X2NwdV9idWcoYywgWDg2X0JVR19FU1BGSVgpO1xuICNlbmRpZlxuLX1cbi1cbi0vKlxuLSAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4te1xuLVx0aW50IGk7XG4tXG4tXHRjLVx1MDAzZWxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTtcbi1cdGMtXHUwMDNleDg2X2NhY2hlX3NpemUgPSAwO1xuLVx0Yy1cdTAwM2V4ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOO1xuLVx0Yy1cdTAwM2V4ODZfbW9kZWwgPSBjLVx1MDAzZXg4Nl9zdGVwcGluZyA9IDA7XHQvKiBTbyBmYXIgdW5rbm93bi4uLiAqL1xuLVx0Yy1cdTAwM2V4ODZfdmVuZG9yX2lkWzBdID0gJ1xcMCc7IC8qIFVuc2V0ICovXG4tXHRjLVx1MDAzZXg4Nl9tb2RlbF9pZFswXSA9ICdcXDAnOyAgLyogVW5zZXQgKi9cbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuLVx0Yy1cdTAwM2V4ODZfY2xmbHVzaF9zaXplID0gNjQ7XG4tXHRjLVx1MDAzZXg4Nl9waHlzX2JpdHMgPSAzNjtcbi1cdGMtXHUwMDNleDg2X3ZpcnRfYml0cyA9IDQ4O1xuLSNlbHNlXG4tXHRjLVx1MDAzZWNwdWlkX2xldmVsID0gLTE7XHQvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi9cbi1cdGMtXHUwMDNleDg2X2NsZmx1c2hfc2l6ZSA9IDMyO1xuLVx0Yy1cdTAwM2V4ODZfcGh5c19iaXRzID0gMzI7XG4tXHRjLVx1MDAzZXg4Nl92aXJ0X2JpdHMgPSAzMjtcbi0jZW5kaWZcbi1cdGMtXHUwMDNleDg2X2NhY2hlX2FsaWdubWVudCA9IGMtXHUwMDNleDg2X2NsZmx1c2hfc2l6ZTtcbi1cdG1lbXNldChcdTAwMjZjLVx1MDAzZXg4Nl9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V4ODZfY2FwYWJpbGl0eSkpO1xuLVx0bWVtc2V0KFx1MDAyNmMtXHUwMDNlY3B1aWQsIDAsIHNpemVvZihjLVx1MDAzZWNwdWlkKSk7XG4tI2lmZGVmIENPTkZJR19YODZfVk1YX0ZFQVRVUkVfTkFNRVNcbi1cdG1lbXNldChcdTAwMjZjLVx1MDAzZXZteF9jYXBhYmlsaXR5LCAwLCBzaXplb2YoYy1cdTAwM2V2bXhfY2FwYWJpbGl0eSkpO1xuLSNlbmRpZlxuLVxuLVx0Z2VuZXJpY19pZGVudGlmeShjKTtcbiBcbitub19jcHVpZDpcbiBcdGNwdV9wYXJzZV90b3BvbG9neShjKTtcbiBcbiBcdGlmICh0aGlzX2NwdS1cdTAwM2VjX2lkZW50aWZ5KVxuQEAgLTIxMTYsNiArMjExNCw5IEBAIHN0YXRpYyB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXG4gXHRtY2hlY2tfY3B1X2luaXQoYyk7XG4gXG4gXHRudW1hX2FkZF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbitcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19YODZfMzIpKVxuK1x0XHRlbmFibGVfc2VwX2NwdSgpO1xuIH1cbiBcbiAvKlxuQEAgLTIxNTMsOSArMjE1NCw2IEBAIHN0YXRpYyBfX2luaXQgdm9pZCBpZGVudGlmeV9ib290X2NwdSh2b2lkKVxuIFx0aWRlbnRpZnlfY3B1KFx1MDAyNmJvb3RfY3B1X2RhdGEpO1xuIFx0aWYgKEhBU19LRVJORUxfSUJUIFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0lCVCkpXG4gXHRcdHByX2luZm8oXCJDRVQgZGV0ZWN0ZWQ6IEluZGlyZWN0IEJyYW5jaCBUcmFja2luZyBlbmFibGVkXFxuXCIpO1xuLSNpZmRlZiBDT05GSUdfWDg2XzMyXG4tXHRlbmFibGVfc2VwX2NwdSgpO1xuLSNlbmRpZlxuIFx0Y3B1X2RldGVjdF90bGIoXHUwMDI2Ym9vdF9jcHVfZGF0YSk7XG4gXHRzZXR1cF9jcl9waW5uaW5nKCk7XG4gXG5AQCAtMjE3NCwxMCArMjE3Miw4IEBAIHZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxuIFx0XHQqYyA9IGJvb3RfY3B1X2RhdGE7XG4gXHRjLVx1MDAzZWNwdV9pbmRleCA9IGNwdTtcbiBcbitcdGluaXRfY3B1X2luZm8oYyk7XG4gXHRpZGVudGlmeV9jcHUoYyk7XG4tI2lmZGVmIENPTkZJR19YODZfMzJcbi1cdGVuYWJsZV9zZXBfY3B1KCk7XG4tI2VuZGlmXG4gXHR4ODZfc3BlY19jdHJsX3NldHVwX2FwKCk7XG4gXHR1cGRhdGVfc3JiZHNfbXNyKCk7XG4gXHRpZiAoYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX0dEUykpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTozMi4yODU2NjA4ODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyNzI5MjYyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDUFUgSWRlbnRpZmljYXRpb24gUmVmYWN0b3IqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgcmVmYWN0b3JpbmcgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYGluaXRfY3B1X2luZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKWAsIHdoaWNoIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIGZpZWxkcyBvZiB0aGUgYHN0cnVjdCBjcHVpbmZvX3g4NmAuIEl0J3MgY2FsbGVkIGluIGJvdGggYGVhcmx5X2lkZW50aWZ5X2NwdSgpYCBhbmQgYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAsIGFuZCB0aGUgb2xkIGBnZW5lcmljX2lkZW50aWZ5KClgIGhhcyBiZWVuIG1lcmdlZCBpbnRvIGBpZGVudGlmeV9jcHUoKWAuIEluaXRpYWxpemF0aW9uIGxvZ2ljIGhhcyBhbHNvIGJlZW4gbW92ZWQgZnJvbSBgaWRlbnRpZnlfY3B1KClgIHRvIGBpbml0X2NwdV9pbmZvKClgLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIGFjdHVhbGx5ICphZGRzKiBpbml0aWFsaXphdGlvbiBpbiBgZWFybHlfaWRlbnRpZnlfY3B1KClgIGFuZCBgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpYC4gUHJldmlvdXNseSwgYGVhcmx5X2lkZW50aWZ5X2NwdSgpYCB3YXMgZG9pbmcgb25seSBhIGBtZW1zZXRgIG9uIGEgZmV3IGtleSBhcmVhcyAoYHg4Nl9jYXBhYmlsaXR5YCwgYGNwdWlkYCkgYW5kIHNldHRpbmcgYGV4dGVuZGVkX2NwdWlkX2xldmVsYCB0byAwLiBOb3csIGBpbml0X2NwdV9pbmZvKGMpYCBpcyBjYWxsZWQgd2hpY2ggZG9lcyB0aGlzIGFuZCBtb3JlLiBUaGF04oCZcyBhIGdvb2Qgc2lnbiwgcmVkdWNlcyB0aGUgcmlzayBvZiBzb21lIHN1YnRsZSwgbHVya2luZyBpc3N1ZS5cblxuQnV0IHRoZW4sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc2Vjb25kYXJ5IENQVSBpZGVudGlmaWNhdGlvbiBsb2dpYyB3b3Jrcy4gSW4gYGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKWAsIEkgc2VlOlxuXG5gYGBjXG5cdGlmIChjID09IFx1MDAyNmJvb3RfY3B1X2RhdGEpXG5cdFx0KmMgPSBib290X2NwdV9kYXRhO1xuXHRjLVx1MDAzZWNwdV9pbmRleCA9IGNwdTtcblxuXHRpbml0X2NwdV9pbmZvKGMpO1xuXHRpZGVudGlmeV9jcHUoYyk7XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHNldHMgYCpjID0gYm9vdF9jcHVfZGF0YWAgaWYgYGNgIGlzIHRoZSBib290IENQVS4gQnV0ICpjKiBpcyBhIHBvaW50ZXIhIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0J3MgdHJhY2UgaXQgYmFjay4gT2theSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkOlxuXG5gYGBjXG5cdGlmIChjID09IFx1MDAyNmJvb3RfY3B1X2RhdGEpXG5cdFx0KmMgPSBib290X2NwdV9kYXRhO1xuYGBgXG5cblRoYXQgY2FuJ3QgYmUgcmlnaHQ7IGl0IHdvdWxkIGJlIGEgbm8tb3AhIEFoLCB0aGF0J3Mgbm90IHJpZ2h0LCBsZXQgbWUgY2hlY2sgdGhlIG9yaWdpbmFsIGNvZGUgYWdhaW4uIFRoZSBvcmlnaW5hbCBjb2RlIHdhczpcblxuYGBgY1xuXHRpZiAoYyA9PSBcdTAwMjZib290X2NwdV9kYXRhKVxuXHRcdHJldHVybjtcbmBgYFxuXG5Pa2F5LCBJIG5lZWQgdG8gc2VlIHRoZSBhY3R1YWwgZGlmZi4gTGV0J3MgbG9vazpcblxuYGBgY1xuQEAgLTIxNzQsMTAgKzIxNzIsOCBAQCB2b2lkIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUodW5zaWduZWQgaW50IGNwdSlcbiBcdFx0KmMgPSBib290X2NwdV9kYXRhO1xuIFx0Yy1cdTAwM2VjcHVfaW5kZXggPSBjcHU7XG4gXG4rXHRpbml0X2NwdV9pbmZvKGMpO1xuIFx0aWRlbnRpZnlfY3B1KGMpO1xuYGBgXG5cbk9rYXksIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IGRpZmY6XG5cbmBgYGNcbiBcdGlmIChjID09IFx1MDAyNmJvb3RfY3B1X2RhdGEpXG4gXHRcdCpjID0gYm9vdF9jcHVfZGF0YTtcbiBcdGMtXHUwMDNlY3B1X2luZGV4ID0gY3B1O1xuYGBgXG5cbkFoLCByaWdodCEgSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQgZnJvbSB0aGUgZmlsZSBpdHNlbGYuXG5cbmBgYGNcbnZvaWQgaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxue1xuXHRzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBcdTAwMjZjcHVfZGF0YShjcHUpO1xuXG5cdGlmIChjID09IFx1MDAyNmJvb3RfY3B1X2RhdGEpXG5cdFx0cmV0dXJuOyAvLyB3YWl0LCBubywgdGhlIGRpZmYgc2F5czpcbmBgYFxuXG5TbywgdGhlIG9yaWdpbmFsIGNvZGUgcmV0dXJuZWQgaWYgaXQgd2FzIHRoZSBib290IENQVSwgd2hpbGUgbm93IGBpbml0X2NwdV9pbmZvKGMpYCBpcyBjYWxsZWQuIFRoaXMgaXMgdGhlIGRpZmZlcmVuY2UsIHNvIG5vIGlzc3VlIGlmIGBjID09IFx1MDAyNmJvb3RfY3B1X2RhdGFgIGlzIHRydWUuIEdvb2QuIEFsbCBpbiBhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgcmVmYWN0b3IuIEl0J3MgYWRkaW5nIGluaXRpYWxpemF0aW9uLCB3aGljaCByZWR1Y2VzIHRoZSBjaGFuY2Ugb2Ygc29tZSBvYnNjdXJlIGJ1Zy4gTmVlZCB0byBkb3VibGUtY2hlY2sgc29tZSBjb3JuZXIgY2FzZXMsIGJ1dCBvdmVyYWxsLCBzZWVtcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgzOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDAwOjAxOjQyLjU1ODU4OTU0NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTY1OlxcdFxcbjIxNjY6XFx0dm9pZCBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KHVuc2lnbmVkIGludCBjcHUpXFxuMjE2NzpcXHR7XFxuMjE2ODpcXHRcXHRzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBcXHUwMDI2Y3B1X2RhdGEoY3B1KTtcXG4yMTY5OlxcdFxcbjIxNzA6XFx0XFx0LyogQ29weSBib290X2NwdV9kYXRhIG9ubHkgb24gdGhlIGZpcnN0IGJyaW5ndXAgKi9cXG4yMTcxOlxcdFxcdGlmICghYy1cXHUwMDNlaW5pdGlhbGl6ZWQpXFxuMjE3MjpcXHRcXHRcXHQqYyA9IGJvb3RfY3B1X2RhdGE7XFxuMjE3MzpcXHRcXHRjLVxcdTAwM2VjcHVfaW5kZXggPSBjcHU7XFxuMjE3NDpcXHRcXG4yMTc1OlxcdFxcdGluaXRfY3B1X2luZm8oYyk7XFxuMjE3NjpcXHRcXHRpZGVudGlmeV9jcHUoYyk7XFxuMjE3NzpcXHRcXHR4ODZfc3BlY19jdHJsX3NldHVwX2FwKCk7XFxuMjE3ODpcXHRcXHR1cGRhdGVfc3JiZHNfbXNyKCk7XFxuMjE3OTpcXHRcXHRpZiAoYm9vdF9jcHVfaGFzX2J1ZyhYODZfQlVHX0dEUykpXFxuMjE4MDpcXHRcXHRcXHR1cGRhdGVfZ2RzX21zcigpO1xcbjIxODE6XFx0XFxuMjE4MjpcXHRcXHR0c3hfYXBfaW5pdCgpO1xcbjIxODM6XFx0XFx0Yy1cXHUwMDNlaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbjIxODQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTo0Mi41NTg3MTcxODNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2NzgzODg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDUFUgSWRlbnRpZmljYXRpb24gUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyB0aGUgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljLiBSaWdodCwgc28gYGluaXRfY3B1X2luZm8oYylgIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggdGhlbiBzZXRzIHRoZSBDUFUgaW5mb3JtYXRpb24uIFRoaXMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGNvZGUgaXRzZWxmLCBhcyBJIHNlZSBpdCwgc2V0cyB0aGUgaW5pdGlhbCBkYXRhIGluIHRoZSBib290IG9mIHRoZSBDUFUsIGl0J3Mgbm90IGNoYW5naW5nIGFueSBib3VuZHMgY2hlY2tzLCBub3IgaXMgaXQgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaXMganVzdCBjbGVhbmluZyB1cCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3aXRoaW4gYGluaXRfY3B1X2luZm8oKWAuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgaW50ZXJuYWwgdG8gdGhlIENQVSBpZGVudGlmaWNhdGlvbiByb3V0aW5lcyBkdXJpbmcgYm9vdCBhbmQgaG90cGx1Zywgd2hpY2gsIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBpcyBhIHBvc2l0aXZlIGNoYW5nZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY2hhbmdlcyBhcmUgaW50ZXJuYWwsIGFuZCBpdCBpcyBhIHJlZmFjdG9yaW5nLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIGFuZCB0aGUgdXN1YWwgc3RhbmRhcmQgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueXRoaW5nLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBpbmZvcm1hdGlvbiBsZWFrcyBoZXJlLiBUaGUgYHN0cnVjdCBjcHVpbmZvX3g4NmAgaXNuJ3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIGdyZWF0IOKAkyBpdCdzIGV4cG9zZWQgdmlhIGAvcHJvYy9jcHVpbmZvYCwgYnV0IHRoYXQgb25seSBwcmludHMgc3BlY2lmaWMgZmllbGRzLCByaWdodD8gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNob3VsZCBiZSBleHBvc2VkLCBhbmQgdGhlcmUgYXJlbid0IGFueSBjb250cm9sIGZsb3cgaGF6YXJkcywgYXMgZmFyIGFzIEkgY2FuIHNlZS5cblxuU28sIGhlcmUncyB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggaXMgYWJvdXQgQ1BVIGlkZW50aWZpY2F0aW9uIHJlZmFjdG9yaW5nIGFuZCBjb25zb2xpZGF0aW9uLCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBjb25zb2xpZGF0ZWQgaW50byBgaW5pdF9jcHVfaW5mbygpYC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IG1pZ2h0IGxlYWsgaW5mb3JtYXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBleHBvc2VkLCB3aGljaCByZW1vdmVzIGFueSByaXNrIG9mIG1lbW9yeSBsZWFrcyBvciB1c2UgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgZW5vdWdoIHRvIHRha2UgY2FyZSBvZiBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgdGhhdCBtYXkgZXhpc3QgaGVyZS4gSXQgbG9va3Mgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY4MSwiT3V0cHV0VG9rZW5zIjoxNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQwMDowMTo0OS4yMjY1NTk2MzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBDUFUgaWRlbnRpZmljYXRpb24gbG9naWMgaW4geDg2IGJ5IGNvbnNvbGlkYXRpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgY3B1aW5mb194ODZgIGZpZWxkcyBpbnRvIGEgbmV3IGBpbml0X2NwdV9pbmZvKClgIGZ1bmN0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBpbnRyb2R1Y2UgY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW50ZXJuYWwgdG8gQ1BVIGJvb3QgYW5kIGhvdHBsdWcgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgQ1BVIGlkZW50aWZpY2F0aW9uIGxvZ2ljIGluIHg4NiBieSBjb25zb2xpZGF0aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGNwdWluZm9feDg2YCBmaWVsZHMgaW50byBhIG5ldyBgaW5pdF9jcHVfaW5mbygpYCBmdW5jdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgaW50cm9kdWNlIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGludGVybmFsIHRvIENQVSBib290IGFuZCBob3RwbHVnIGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW50cm9kdWNlZCBieSB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[1] Phase: Succeeded StartedAt: 2026-08-15 00:02:00 +0000 UTC FinishedAt: 2026-08-15 00:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 00:02:00 +0000 UTC FinishedAt: 2026-08-15 00:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2] Phase: Succeeded StartedAt: 2026-08-15 00:02:00 +0000 UTC FinishedAt: 2026-08-15 03:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-15 00:02:00 +0000 UTC FinishedAt: 2026-08-15 03:43:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-15 00:02:00 +0000 UTC FinishedAt: 2026-08-15 00:02:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-15 00:02:00 +0000 UTC FinishedAt: 2026-08-15 00:02:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8hhjs/series-workflow8hhjs-convert-artifact-2594769676/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-15 00:02:11 +0000 UTC FinishedAt: 2026-08-15 00:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-15 00:02:11 +0000 UTC FinishedAt: 2026-08-15 00:19:26 +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:*e8dd4345-385e-4cd2-82f7-e75d129ea599,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-workflow8hhjs/series-workflow8hhjs-convert-artifact-2594769676/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": "39aa9701-4383-440a-b6e9-d21b46914880", "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-workflow8hhjs/series-workflow8hhjs-build-action-2974273850/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-15 00:02:11 +0000 UTC FinishedAt: 2026-08-15 00:19:16 +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:*e8dd4345-385e-4cd2-82f7-e75d129ea599,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-workflow8hhjs/series-workflow8hhjs-convert-artifact-2594769676/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": "39aa9701-4383-440a-b6e9-d21b46914880", "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-workflow8hhjs/series-workflow8hhjs-build-action-2974273850/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-15 00:19:26 +0000 UTC FinishedAt: 2026-08-15 00:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-15 00:19:26 +0000 UTC FinishedAt: 2026-08-15 00:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-15 00:19:26 +0000 UTC FinishedAt: 2026-08-15 00:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-15 00:19:26 +0000 UTC FinishedAt: 2026-08-15 00:19:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8hhjs/series-workflow8hhjs-convert-artifact-778637387/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-15 00:19:36 +0000 UTC FinishedAt: 2026-08-15 00:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-15 00:19:36 +0000 UTC FinishedAt: 2026-08-15 00:21:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*39aa9701-4383-440a-b6e9-d21b46914880,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-workflow8hhjs/series-workflow8hhjs-build-action-2974273850/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-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-15 00:21:35 +0000 UTC FinishedAt: 2026-08-15 00:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-15 00:21:35 +0000 UTC FinishedAt: 2026-08-15 00:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-15 00:21:35 +0000 UTC FinishedAt: 2026-08-15 00:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-15 00:21:35 +0000 UTC FinishedAt: 2026-08-15 00:38:33 +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:*e8dd4345-385e-4cd2-82f7-e75d129ea599,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-workflow8hhjs/series-workflow8hhjs-convert-artifact-778637387/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": "e271e2ee-a471-4fb9-8ef3-74ef930d3e45", "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-workflow8hhjs/series-workflow8hhjs-build-action-3655808239/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-15 00:21:35 +0000 UTC FinishedAt: 2026-08-15 00:38:23 +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:*e8dd4345-385e-4cd2-82f7-e75d129ea599,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-workflow8hhjs/series-workflow8hhjs-convert-artifact-778637387/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": "e271e2ee-a471-4fb9-8ef3-74ef930d3e45", "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-workflow8hhjs/series-workflow8hhjs-build-action-3655808239/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-15 00:38:33 +0000 UTC FinishedAt: 2026-08-15 00:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-15 00:38:33 +0000 UTC FinishedAt: 2026-08-15 00:38:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-15 00:38:33 +0000 UTC FinishedAt: 2026-08-15 00:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-15 00:38:33 +0000 UTC FinishedAt: 2026-08-15 00:40:25 +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:*e271e2ee-a471-4fb9-8ef3-74ef930d3e45,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-workflow8hhjs/series-workflow8hhjs-build-action-3655808239/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-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-15 00:40:34 +0000 UTC FinishedAt: 2026-08-15 03:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-15 00:40:34 +0000 UTC FinishedAt: 2026-08-15 03:43:24 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"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:*39aa9701-4383-440a-b6e9-d21b46914880,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e271e2ee-a471-4fb9-8ef3-74ef930d3e45,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-workflow8hhjs/series-workflow8hhjs-build-action-2974273850/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-workflow8hhjs/series-workflow8hhjs-build-action-3655808239/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-15 00:40:34 +0000 UTC FinishedAt: 2026-08-15 00:40:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-15 00:40:34 +0000 UTC FinishedAt: 2026-08-15 00:40:39 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"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-workflow8hhjs/series-workflow8hhjs-convert-artifact-2610445028/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-15 00:40:34 +0000 UTC FinishedAt: 2026-08-15 00:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-15 00:40:34 +0000 UTC FinishedAt: 2026-08-15 00:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-15 00:40:34 +0000 UTC FinishedAt: 2026-08-15 00:40:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-15 00:40:44 +0000 UTC FinishedAt: 2026-08-15 03:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8hhjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["identify_secondary_cpu"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","series_id":"37f69bea-9bfb-4086-8f74-c2db27350b4e","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-15 00:40:44 +0000 UTC FinishedAt: 2026-08-15 03:43:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*39aa9701-4383-440a-b6e9-d21b46914880,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e271e2ee-a471-4fb9-8ef3-74ef930d3e45,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-workflow8hhjs/series-workflow8hhjs-build-action-2974273850/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-workflow8hhjs/series-workflow8hhjs-build-action-3655808239/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-workflow8hhjs/series-workflow8hhjs-convert-artifact-2610445028/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,}