Name: series-workflowtlrm9 Phase: Succeeded StartedAt: 2026-08-23 04:53:25 +0000 UTC FinishedAt: 2026-08-23 08:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[0] Phase: Succeeded StartedAt: 2026-08-23 04:53:25 +0000 UTC FinishedAt: 2026-08-23 05:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 04:53:25 +0000 UTC FinishedAt: 2026-08-23 05:12:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9be9236e9c27a8ba64e06902e26d1e4a9b0a736d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE", "MEMORY_HOTPLUG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9be9236e9c27a8ba64e06902e26d1e4a9b0a736d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE", "MEMORY_HOTPLUG" ], "series_id": "9382a3a9-5af9-4190-9e20-14d5d33dc7bb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dissolve_free_hugetlb_folio", "dissolve_free_hugetlb_folios", "remove_hugetlb_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zJiMzNDssCiAgICAmIzM0O3JlbW92ZV9odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbGlzdCBjb3JydXB0aW9uIGlzc3VlIGluIHRoZSBodWdldGxiIHN1YnN5c3RlbSB3aGVuIGRpc3NvbHZpbmcgZ2lnYW50aWMgcGFnZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQuIEl0IG1vZGlmaWVzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIHRvIGJhaWwgb3V0IGVhcmx5IGZvciBzdWNoIGhzdGF0ZXMsIGFuZCBhZGRzIHdhcm5pbmdzIGluIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgYW5kIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYC4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IGxpc3QgY29ycnVwdGlvbiBvbiB2bWVtbWFwIHJlc3RvcmUgZmFpbHVyZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gbGlzdCBjb3JydXB0aW9uLCB3aGljaCBjYW4gbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLiBUaGVzZSBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFkMThhYWY0ZjM3ZWIwNDJkZWEzYTJhZTg3NjBlODE0YzkyNTM3NzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwNTowOTo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjY3YTUwMjI5MzY5ODMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzOTgsOCAmIzQzOzEzOTgsMTEgQEAgdm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Vk1fQlVHX09OX0ZPTElPKGh1Z2V0bGJfY2dyb3VwX2Zyb21fZm9saW9fcnN2ZChmb2xpbyksIGZvbGlvKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbiYjNDM7XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHtcbiYjNDM7XHRcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cbiYjNDM7XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiBcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXG5AQCAtMTQ2MCw4ICYjNDM7MTQ2MywxMSBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4ge1xuIFx0Ym9vbCBjbGVhcl9mbGFnID0gZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcbiBcbi1cdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbiYjNDM7XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHtcbiYjNDM7XHRcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cbiYjNDM7XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiBcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBkb24mIzM5O3Qga25vdyB3aGljaCBzdWJwYWdlcyBhcmUgaHdwb2lzb25lZCwgd2UgY2FuJiMzOTt0IGZyZWVcbkBAIC0xOTc3LDYgJiM0MzsxOTgzLDE1IEBAIGludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShmb2xpbyk7XG4gXHRcdGJvb2wgYWRqdXN0X3N1cnBsdXMgPSBmYWxzZTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpL3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgYmFpbFxuJiM0MztcdFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXG4mIzQzO1x0XHQgKiBoZXJlIHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QgYW5kLCBvbiB2bWVtbWFwIHJlc3RvcmVcbiYjNDM7XHRcdCAqIGZhaWx1cmUsIHRoZSBhZGRfaHVnZXRsYl9mb2xpbygpIHJvbGxiYWNrIGNvcnJ1cHRzIHRoYXQgbGlzdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRcdGlmICghYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zJiMzNDssCiAgICAmIzM0O3JlbW92ZV9odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkMThhYWY0ZjM3ZWIwNDJkZWEzYTJhZTg3NjBlODE0YzkyNTM3NzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyMyAwNTowOTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBlOTNjNGQyNDU2YWE0Li42N2E1MDIyOTM2OTgzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzk4LDggJiM0MzsxMzk4LDExIEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlWTV9CVUdfT05fRk9MSU8oaHVnZXRsYl9jZ3JvdXBfZnJvbV9mb2xpb19yc3ZkKGZvbGlvKSwgZm9saW8pOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2h1Z2V0bGJfbG9jayk7Ci0JaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKQomIzQzOwlpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHsKJiM0MzsJCS8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi8KJiM0MzsJCVZNX1dBUk5fT05fT05DRSgxKTsKIAkJcmV0dXJuOwomIzQzOwl9CiAKIAlsaXN0X2RlbCgmYW1wO2ZvbGlvLSZndDtscnUpOwogCkBAIC0xNDYwLDggJiM0MzsxNDYzLDExIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIHsKIAlib29sIGNsZWFyX2ZsYWcgPSBmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pOwogCi0JaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKQomIzQzOwlpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHsKJiM0MzsJCS8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi8KJiM0MzsJCVZNX1dBUk5fT05fT05DRSgxKTsKIAkJcmV0dXJuOwomIzQzOwl9CiAKIAkvKgogCSAqIElmIHdlIGRvbiYjMzk7dCBrbm93IHdoaWNoIHN1YnBhZ2VzIGFyZSBod3BvaXNvbmVkLCB3ZSBjYW4mIzM5O3QgZnJlZQpAQCAtMTk3Nyw2ICYjNDM7MTk4MywxNSBAQCBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCXN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUoZm9saW8pOwogCQlib29sIGFkanVzdF9zdXJwbHVzID0gZmFsc2U7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpL3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgYmFpbAomIzQzOwkJICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lCiYjNDM7CQkgKiBoZXJlIHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QgYW5kLCBvbiB2bWVtbWFwIHJlc3RvcmUKJiM0MzsJCSAqIGZhaWx1cmUsIHRoZSBhZGRfaHVnZXRsYl9mb2xpbygpIHJvbGxiYWNrIGNvcnJ1cHRzIHRoYXQgbGlzdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwogCQlpZiAoIWF2YWlsYWJsZV9odWdlX3BhZ2VzKGgpKQogCQkJZ290byBvdXQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBodWdldGxiIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdldGxiLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGZldyBjb25kaXRpb25hbCBjaGVja3MuIEZpcnN0LCBpbiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKClgLCB0aGVyZSYjMzk7cyBub3cgYW4gYGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlgIGNoZWNrLCBhbmQgaXQgYmFpbHMgb3V0IGVhcmx5IGlmIHRoYXQgY29uZGl0aW9uIGlzIG1ldC4gVGhleSBhbHNvIHRocmV3IGluIGBWTV9XQVJOX09OX09OQ0UoMSlgIHN0YXRlbWVudHMgd2l0aGluIGByZW1vdmVfaHVnZXRsYl9mb2xpbygpYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKWAg4oCTIGFnYWluLCB0cmlnZ2VyZWQgd2hlbiBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaClgIGlzIHRydWUuCgpSaWdodCwgc28gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpYCBpcyByZXNwb25zaWJsZSBmb3IgZGlzc29sdmluZyBmcmVlIGh1Z2V0bGIgZm9saW9zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGdpZ2FudGljIGZvbGlvcywgbGlrZWx5IHRob3NlIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBUaGUgY2hhbmdlIGlzIHRvIHByZXZlbnQgYXR0ZW1wdGluZyB0byBkaXNzb2x2ZSBhIGdpZ2FudGljIGZvbGlvIHRoYXQgKnNob3VsZG4mIzM5O3QqIGJlIGRpc3NvbHZlZCBiZWNhdXNlIG9mIHRoZSBgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKWAgb3IgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKWAgYmFpbC1vdXRzLiBTZWVtcyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgbGVhZGluZyB0byBwb3RlbnRpYWwgbGlzdCBjb3JydXB0aW9uIGR1cmluZyB2bWVtbWFwIHJlc3RvcmUgZmFpbHVyZSBpZiB0aGUgZm9saW8gZW5kZWQgdXAgb24gdGhlIGZyZWUgbGlzdC4KClRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIGZvciBodWdldGxiIGhhbmRsaW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0LiBXaGVyZSBpcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBhY3R1YWxseSAqdXNlZCo/IEkga25vdyBpdCBpcyBjYWxsZWQgZnJvbSBgZGlzc29sdmVfZnJlZV9odWdlX3BhZ2VgIGFuZCBgZGlzc29sdmVfZnJlZV9odWdlX3BhZ2VzYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRob3NlIGNhbGwgc2l0ZXMgdG8gc2VlIGlmIHRoZSBuZXcgY2hlY2sgaXMgcmVhY2hhYmxlIGluIHJlYWwtd29ybGQgc2NlbmFyaW9zLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9ODcxPXN0YXRpYyBpbmxpbmUgaW50IGhzdGF0ZV9pbmRleChzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg3NS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjg3NjppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODc3OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODc4LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTIwNT1zdGF0aWMgaW5saW5lIGludCBoc3RhdGVfaW5kZXgoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjA5LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTIxMDpzdGF0aWMgaW5saW5lIGludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyMTEte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyMTQtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjE1OnN0YXRpYyBpbmxpbmUgaW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjE2LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vaHVnZXRsYi5jPTE5Mjk9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmVtb3ZlX3Bvb2xfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xOTY2LSAqL1xubW0vaHVnZXRsYi5jOjE5Njc6aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZXRsYi5jLTE5Njgte1xuLS1cbm1tL2h1Z2V0bGIuYy0yMDU5LSAqIHBhcnQgb2YgaXQgbGllcyB3aXRoaW4gdGhlIGdpdmVuIHJhbmdlLlxubW0vaHVnZXRsYi5jOjIwNjA6ICogQWxzbyBub3RlIHRoYXQgaWYgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKCkgcmV0dXJucyB3aXRoIGFuIGVycm9yLCBhbGxcbm1tL2h1Z2V0bGIuYy0yMDYxLSAqIGZyZWUgaHVnZXRsYiBmb2xpb3MgdGhhdCB3ZXJlIGRpc3NvbHZlZCBiZWZvcmUgdGhhdCBlcnJvciBhcmUgbG9zdC5cbm1tL2h1Z2V0bGIuYy0yMDYyLSAqL1xubW0vaHVnZXRsYi5jOjIwNjM6aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbm1tL2h1Z2V0bGIuYy0yMDY0LXtcbi0tXG5tbS9odWdldGxiLmMtMjA3OS1cdFx0Zm9saW8gPSBwZm5fZm9saW8ocGZuKTtcbm1tL2h1Z2V0bGIuYzoyMDgwOlx0XHRyYyA9IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhmb2xpbyk7XG5tbS9odWdldGxiLmMtMjA4MS1cdFx0aWYgKHJjKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTcxPXN0YXRpYyBpbnQgX19wYWdlX2hhbmRsZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzUtXHR6b25lX3BjcF9kaXNhYmxlKHBhZ2Vfem9uZShwYWdlKSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3NjpcdHJldCA9IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhwYWdlX2ZvbGlvKHBhZ2UpKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc3LVx0aWYgKCFyZXQpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODQ9c3RhdGljIGJvb2wgcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGh1Z2VwYWdlX29yX2ZyZWVwYWdlLCBib29sIHJlbGVhc2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODgtXHRcdCAqIERvaW5nIHRoaXMgY2hlY2sgZm9yIGZyZWUgcGFnZXMgaXMgYWxzbyBmaW5lIHNpbmNlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4OTpcdFx0ICogZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKCkgcmV0dXJucyAwIGZvciBub24taHVnZXRsYiBmb2xpb3MgYXMgd2VsbC5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkwLVx0XHQgKi9cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDMzLVx0XHQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MjAzNDpcdFx0cmV0ID0gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdGFydF9wZm4sIGVuZF9wZm4pO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDM1LVx0XHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gKioKCk9rYXksIHNvIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCBoYXMgbXVsdGlwbGUgY2FsbCBwYXRocy4gSXQmIzM5O3MgcmVhY2hlZCBmcm9tIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgb2ZmbGluZV9wYWdlc2AgcmVsYXRlZCB0byBtZW1vcnkgaG90cGx1ZywgYW5kIGFsc28gZnJvbSBgX19wYWdlX2hhbmRsZV9wb2lzb25gLCB3aGljaCBkZWFscyB3aXRoIG1lbW9yeSBmYWlsdXJlLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIG5vdCBzb21lIGRlYWQgY29kZS4gR2l2ZW4gdGhhdCBpdCBoYXMgdGhlc2UgdHdvIGRpc3RpbmN0IHBhdGhzLCBib3RoIHRpZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gY29uZmlkZW50IGl0JiMzOTtzIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBzaG91bGQgZmxhZyB0aGlzIGFzIHNvbWV0aGluZyB0byBmdXp6LCBkZWZpbml0ZWx5LCBhbmQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpUaGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kIGFyZSBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3NgLCBhcyB0aGV5IGFyZSB0aGUgY29yZSBvZiB0aGlzLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGlzIHVzZWQgd2hlbiBgSFVHRVRMQl9QQUdFYCBpcyBlbmFibGVkIGFuZCBlaXRoZXIgYE1FTU9SWV9IT1RQTFVHYCBvciBgTUVNT1JZX0ZBSUxVUkVgIGFyZSBhbHNvLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIGBtbS9odWdldGxiLmNgIHRvIHNlZSBob3cgdGhlc2UgY29uZmlncyBpbnRlcmFjdCB3aXRoIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEh1Z2UgUGFnZXMgYW5kIE1lbW9yeSBGYWlsdXJlcyoqCgpSaWdodCwgc28gYEhVR0VUTEJfUEFHRWAuLi4gdGhhdCBsb29rcyBsaWtlIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYEhVR0VUTEJGU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdCYjMzk7cyBhIGBkZWZfYm9vbGAsIG1lYW5pbmcgYEhVR0VUTEJGU2AgaXMgdGhlIGFjdHVhbCBjb25maWcgb3B0aW9uIHdlIG5lZWQgdG8gZW5hYmxlIGh1Z2UgcGFnZXMgZnVuY3Rpb25hbGl0eS4gR290IGl0LgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgYXJlYXMuIEdpdmVuIHRoaXMgZm9jdXMgb24gbWVtb3J5LCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIGluIHRob3NlIHNjZW5hcmlvcywgZXNwZWNpYWxseSB3aXRoIGh1Z2UgcGFnZXMgaW52b2x2ZWQuIE1pZ2h0IGJlIGFuIGludGVyZXN0aW5nIGludGVycGxheSB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uczogTWVtb3J5KioKClJpZ2h0LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhpcyBtZW1vcnkgY29uZmlndXJhdGlvbi4gYE1FTU9SWV9GQUlMVVJFYCDigJMgeWVhaCwgdGhhdCBmZWVscyByaWdodCwgdGhhdCYjMzk7cyBhIHNvbGlkIGNob2ljZSBmb3IgZXJyb3IgaGFuZGxpbmcsIGZvciByZXNpbGllbmNlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZ3JhY2VmdWxseSBoYW5kbGUgcG90ZW50aWFsIG1lbW9yeSBmYWlsdXJlcywgYW5kIHRoYXQgY29uZmlnIHByb2JhYmx5IG9mZmVycyBhIHJvYnVzdCBtZWNoYW5pc20uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBBbmQgdGhlbiwgcmVsYXRlZCB0byB0aGF0LCBgTUVNT1JZX0hPVFBMVUdgIGlzIGNydWNpYWwuIFRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IGFkZCBvciByZW1vdmUgbWVtb3J5IHdpdGhvdXQgYSByZWJvb3Q/IEFic29sdXRlbHkgZXNzZW50aWFsIGZvciBhbnkgbW9kZXJuIHN5c3RlbSB0aGF0IG5lZWRzIHRvIGJlIGhpZ2hseSBhdmFpbGFibGUgb3IgZWFzaWx5IHNjYWxlZC4gSXQgdGllcyBpbiBwZXJmZWN0bHkgd2l0aCBhIGdvb2QgZmFpbHVyZSBzdHJhdGVneS4gVGhlc2UgdHdvIGNvbmZpZ3VyYXRpb25zLCB3b3JraW5nIHRvZ2V0aGVyLCBjcmVhdGUgYSBtb3JlIHJvYnVzdCBtZW1vcnkgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFBMVUcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MTk9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4tLVxubW0vS2NvbmZpZy01MjItIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICYjMzk7c2VsZWN0IFNQQVJTRU1FTSYjMzk7XG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUyNC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2V0bGIgRm9saW8gSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYEhVR0VUTEJGU2AsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgTUVNT1JZX0hPVFBMVUdgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGZvbGlvIG1hbmFnZW1lbnQsIGZvY3VzaW5nIG9uIGhvdyB0aGVzZSBpbnRlcmFjdC4gSSYjMzk7bSBpbW1lZGlhdGVseSBkcmF3biB0byBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBoYXMgYSB3aWRlIHJlYWNoOyBpdCYjMzk7cyBjYWxsZWQgYnkgYHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGZyZWVfaHVnZV9mb2xpb2AsIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AsIGBpc29sYXRlX2h1Z2V0bGJgLCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgaW4gY29tcGFyaXNvbiwgc2VlbXMgbW9yZSBmb2N1c2VkLCBjYWxsZWQgb25seSBieSBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFuZCBgZnJlZV9ocGFnZV93b3JrZm5gLgoKVGhlIHBhdGNoIHRhcmdldHMgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIEtub3dpbmcgdGhhdCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2Agc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGl0JiMzOTtzIGEgY3JpdGljYWwgZm9jdXMuIEJ1dCBzbyBpcyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBnaXZlbiBob3cgZmFyLXJlYWNoaW5nIGl0cyBpbXBhY3QgaXMuIFdpdGggYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGJlaW5nIHN0YXRpYywgSSYjMzk7bSB0aGlua2luZyBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIHRoZSBiZXR0ZXIgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gR290dGEgY29uZmlybSBpdCYjMzk7cyBub3Qgc3RhdGljIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xNDMxPXZvaWQgYWRkX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMTQ2MC1cbm1tL2h1Z2V0bGIuYzoxNDYxOnN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy0xNDYyLVx0XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE1MjAtLypcbm1tL2h1Z2V0bGIuYzoxNTIxOiAqIEFzIHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgY2FuIGJlIGNhbGxlZCB1bmRlciBhbnkgY29udGV4dCwgc28gd2UgY2Fubm90XG5tbS9odWdldGxiLmMtMTUyMi0gKiB1c2UgR0ZQX0tFUk5FTCB0byBhbGxvY2F0ZSB2bWVtbWFwIHBhZ2VzLiBIb3dldmVyLCB3ZSBjYW4gZGVmZXIgdGhlXG4tLVxubW0vaHVnZXRsYi5jPTE1MzM9c3RhdGljIHZvaWQgZnJlZV9ocGFnZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNTU0LVxubW0vaHVnZXRsYi5jOjE1NTU6XHRcdF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8pO1xubW0vaHVnZXRsYi5jLTE1NTYtXG4tLVxubW0vaHVnZXRsYi5jPTE1NjI9c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ZyZWVfaHBhZ2Vfd29yayhzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNTY3LVxubW0vaHVnZXRsYi5jOjE1Njg6c3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2h1Z2V0bGIuYy0xNTY5LVx0XHRcdFx0IGJvb2wgYXRvbWljKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNTcxLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pIHx8ICFhdG9taWMpIHtcbm1tL2h1Z2V0bGIuYzoxNTcyOlx0XHRfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNTczLVx0XHRyZXR1cm47XG4tLVxubW0vaHVnZXRsYi5jPTE1ODc9c3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTYwNS1cdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNjA2Olx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMTYwNy1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9odWdldGxiLmMtMTYzMC1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjE2MzE6XHRcdFx0XHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTE2MzItXHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9odWdldGxiLmM9MTYzOD1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjczLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0X2ZvbGlvLCBcdTAwMjZub25faHZvX2ZvbGlvcywgbHJ1KSB7XG5tbS9odWdldGxiLmM6MTY3NDpcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy0xNjc1LVx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9odWdldGxiLmM9MTY5MD12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNzQ0LVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xubW0vaHVnZXRsYi5jOjE3NDU6XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCB0cnVlKTtcbm1tL2h1Z2V0bGIuYy0xNzQ2LVx0fSBlbHNlIGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0pIHtcbi0tXG5tbS9odWdldGxiLmMtMTc0OS1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYzoxNzUwOlx0XHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgdHJ1ZSk7XG5tbS9odWdldGxiLmMtMTc1MS1cdH0gZWxzZSB7XG4tLVxubW0vaHVnZXRsYi5jPTE5Njc9aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xOTg2LVx0XHQvKlxubW0vaHVnZXRsYi5jOjE5ODc6XHRcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvKCkvdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKSBiYWlsXG5tbS9odWdldGxiLmMtMTk4OC1cdFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXG4tLVxubW0vaHVnZXRsYi5jLTIwNDYtXG5tbS9odWdldGxiLmM6MjA0NzpcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy0yMDQ4LVx0XHRyZXR1cm4gcmM7XG4tLVxubW0vaHVnZXRsYi5jPTI2NTY9c3RhdGljIGludCBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMjcyOC1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MjcyOTpcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgb2xkX2ZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMjczMC1cdH1cbi0tXG5tbS9odWdldGxiLmMtMjczNi1cdGlmIChuZXdfZm9saW8pXG5tbS9odWdldGxiLmM6MjczNzpcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgbmV3X2ZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMjczOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgwMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlVExCIEZvbGlvIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEh1Z2VUTEIgZm9saW8gbWFuYWdlbWVudCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0IGFuZCBub3QgYWNjZXNzaWJsZSBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUuIEdvb2QgdG8ga25vdy4gQnV0LCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYW5kIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCBhcmUgKm5vdCogZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgaW1wbGllcyBhIGJyb2FkZXIgc2NvcGUsIHBvdGVudGlhbGx5IGJlaW5nIGNhbGxlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGFuZCBhIGRldGFpbCB0byBrZWVwIGluIG1pbmQuIE5vdywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiBhbmQgY2FsbCBzaXRlcyB0byBzZWUgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZS4gSXQmIzM5O3MgdGhlIG1vc3QgcGVydGluZW50IGZ1bmN0aW9uIHRvIGV4YW1pbmUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM3Nz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmMtMTM5MS0gKi9cbm1tL2h1Z2V0bGIuYzoxMzkyOnZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2h1Z2V0bGIuYy0xMzkzLVx0XHRcdCAgYm9vbCBhZGp1c3Rfc3VycGx1cylcbi0tXG5tbS9odWdldGxiLmM9MTUzMz1zdGF0aWMgdm9pZCBmcmVlX2hwYWdlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vaHVnZXRsYi5jLTE1NDktXHRcdCAqIGZvbGlvX2hzdGF0ZSgpIGlzIGdvaW5nIHRvIHRyaWdnZXIgYmVjYXVzZSBhIHByZXZpb3VzIGNhbGwgdG9cbm1tL2h1Z2V0bGIuYzoxNTUwOlx0XHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpIHdpbGwgY2xlYXIgdGhlIGh1Z2V0bGIgYml0LCBzbyBkb1xubW0vaHVnZXRsYi5jLTE1NTEtXHRcdCAqIG5vdCB1c2UgZm9saW9faHN0YXRlKCkgZGlyZWN0bHkuXG4tLVxubW0vaHVnZXRsYi5jPTE2OTA9dm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTc0Mi1cdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdGVtcG9yYXJ5KGZvbGlvKSkge1xubW0vaHVnZXRsYi5jOjE3NDM6XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMTc0NC1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmMtMTc0Ny1cdFx0LyogcmVtb3ZlIHRoZSBwYWdlIGZyb20gYWN0aXZlIGxpc3QgKi9cbm1tL2h1Z2V0bGIuYzoxNzQ4Olx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgdHJ1ZSk7XG5tbS9odWdldGxiLmMtMTc0OS1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmM9MTkyOT1zdGF0aWMgc3RydWN0IGZvbGlvICpyZW1vdmVfcG9vbF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5NDQtXHRcdFx0XHRcdCAgc3RydWN0IGZvbGlvLCBscnUpO1xubW0vaHVnZXRsYi5jOjE5NDU6XHRcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFjY3Rfc3VycGx1cyk7XG5tbS9odWdldGxiLmMtMTk0Ni1cdFx0XHRicmVhaztcbi0tXG5tbS9odWdldGxiLmM9MTk2Nz1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE5ODYtXHRcdC8qXG5tbS9odWdldGxiLmM6MTk4NzpcdFx0ICogcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKS91cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpIGJhaWxcbm1tL2h1Z2V0bGIuYy0xOTg4LVx0XHQgKiBmb3IgZ2lnYW50aWMgaHN0YXRlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydCwgc28gZGlzc29sdmluZyBvbmVcbi0tXG5tbS9odWdldGxiLmMtMjAxOC1cdFx0XHRhZGp1c3Rfc3VycGx1cyA9IHRydWU7XG5tbS9odWdldGxiLmM6MjAxOTpcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcbm1tL2h1Z2V0bGIuYy0yMDIwLVx0XHRoLVx1MDAzZW1heF9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jLTIwMzEtXHRcdCAqIFRoZSBmb2xpb190ZXN0X2h1Z2V0bGIgY2hlY2sgaGVyZSBpcyBiZWNhdXNlXG5tbS9odWdldGxiLmM6MjAzMjpcdFx0ICogcmVtb3ZlX2h1Z2V0bGJfZm9saW8gd2lsbCBjbGVhciBodWdldGxiIGZvbGlvIGZsYWcgZm9yXG5tbS9odWdldGxiLmMtMjAzMy1cdFx0ICogbm9uLXZtZW1tYXAgb3B0aW1pemVkIGh1Z2V0bGIgZm9saW9zLlxuLS1cbm1tL2h1Z2V0bGIuYz0yNjU2PXN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTI3MTUtXHRcdCAqL1xubW0vaHVnZXRsYi5jOjI3MTY6XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIG9sZF9mb2xpbywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTI3MTctXG4tLVxubW0vaHVnZXRsYi5jPTM2NzM9c3RhdGljIHZvaWQgdHJ5X3RvX2ZyZWVfbG93KHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4tLVxubW0vaHVnZXRsYi5jLTM2OTMtXHRcdFx0XHRjb250aW51ZTtcbm1tL2h1Z2V0bGIuYzozNjk0Olx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMzY5NS1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNnBhZ2VfbGlzdCk7XG4tLVxubW0vaHVnZXRsYi5jPTM5OTM9bG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxuLS1cbm1tL2h1Z2V0bGIuYy00MDE4LVxubW0vaHVnZXRsYi5jOjQwMTk6XHRcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTQwMjAtXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZsaXN0KTtcbi0tXG5tbS9odWdldGxiX2ludGVybmFsLmg9NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk0LVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjk1OmV4dGVybiB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9odWdldGxiX2ludGVybmFsLmgtOTYtXHRcdFx0XHQgYm9vbCBhZGp1c3Rfc3VycGx1cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBIdWdldGxiIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBzeW1ib2wgdmlzaWJpbGl0eS4gSSBzZWUgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBpcyBkZWZpbmVkIGluIGBtbS9odWdldGxiX2ludGVybmFsLmhgLCB3aGljaCBpcyBnb29kIGZvciBpbnRlcm5hbCBrZXJuZWwgdXNlLCBidXQgaXQmIzM5O3MgKm5vdCogZXhwbGljaXRseSBleHBvcnRlZCBmb3IgbW9kdWxlcy4gSSBrbm93IGl0JiMzOTtzIHVzZWQgaW4gYG1tL2h1Z2V0bGIuY2AsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gc2luY2UgaXQmIzM5O3MgKm5vdCogYHN0YXRpY2AsIHRoYXQgbWVhbnMgaXQgY2FuIGJlIGEgZm9jdXMgc3ltYm9sLCBpbnRlcmVzdGluZyEgSSBhbHNvIHNlZSB0aGF0IGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGFuZCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc2AgYXJlICphbHNvKiBub3Qgc3RhdGljLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBwb3RlbnRpYWwgdGFyZ2V0cy4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncy4gYEhVR0VUTEJGU2AgaXMgdGhlIGJpZyBvbmUsIG9idmlvdXNseS4gSSBhbHNvIHRoaW5rIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBNRU1PUllfSE9UUExVR2AgYXJlIHJlbGV2YW50IGhlcmUuIFRob3NlIGFyZSBnb29kIHRhcmdldHMgdG8gZW5hYmxlLgoKT2theSwgbGV0JiMzOTtzIHJlLXJlYWQgdGhlIHBhdGNoIGl0c2VsZi4gQWgsIGhlcmUgd2UgZ28uLi4gaXQmIzM5O3MgYWRkaW5nIGEgYFZNX1dBUk5fT05fT05DRSgxKWAgaWYgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBpcyB0cnVlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZy4gQW5kIGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCB0aGVyZSYjMzk7cyBhIGd1YXJkIG5vdyBhZ2FpbnN0IGRpc3NvbHZpbmcgZ2lnYW50aWMgZm9saW9zICp3aXRob3V0KiBydW50aW1lIHN1cHBvcnQuIFRoZSBjb21tZW50IGNsYXJpZmllcyB3aHk6IGl0IHByZXZlbnRzIGxpc3QgY29ycnVwdGlvbiBkdXJpbmcgdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUgaWYgdGhlIGZvbGlvIGlzbiYjMzk7dCBwcm9wZXJseSBoYW5kbGVkIHVwc3RyZWFtLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgYSBzcGVjaWZpYyBjcmFzaCBvciBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpby4KClNvLCBpbiBteSBqdWRnZW1lbnQsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSXQgdG91Y2hlcyBjcml0aWNhbCBmb2xpbyBtYW5pcHVsYXRpb24uCgpIZXJlJiMzOTtzIHRoZSBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUKKiAgICoqRm9jdXNTeW1ib2xzOioqIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc2AsIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSFVHRVRMQkZTYCwgYE1FTU9SWV9GQUlMVVJFYCwgYE1FTU9SWV9IT1RQTFVHYAoKQW5kIHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeS4uLiBgSFVHRVRMQl9QQUdFYCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIGBkZWZfYm9vbCBIVUdFVExCRlNgLiBTbyBlbmFibGluZyBgSFVHRVRMQkZTYCB3aWxsIGluaGVyZW50bHkgZW5hYmxlIGBIVUdFVExCX1BBR0VgLgoKSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgaWYgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lYCBoYXMgYW55IHJlbGV2YW50IGNvbmZpZyBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzkyPXZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMTQwMC1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNDAxOlx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG5tbS9odWdldGxiLmMtMTQwMi1cdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz0xNDYxPXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTQ2NS1cbm1tL2h1Z2V0bGIuYzoxNDY2Olx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG5tbS9odWdldGxiLmMtMTQ2Ny1cdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz0xOTY3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTk5MS1cdFx0ICovXG5tbS9odWdldGxiLmM6MTk5MjpcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxubW0vaHVnZXRsYi5jLTE5OTMtXHRcdFx0Z290byBvdXQ7XG4tLVxubW0vaHVnZXRsYi5jPTIwOTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIwOTUtXG5tbS9odWdldGxiLmM6MjA5NjpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGIuYy0yMDk3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9odWdldGxiLmM9MjM2NT1zdGF0aWMgdm9pZCByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjM3NC1cbm1tL2h1Z2V0bGIuYzoyMzc1Olx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxubW0vaHVnZXRsYi5jLTIzNzYtXHRcdGdvdG8gb3V0O1xuLS1cbm1tL2h1Z2V0bGIuYz0zNjEwPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNjM1LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzozNjM2Olx0XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiLmMtMzYzNy1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9odWdldGxiLmM9NDA2Mj1zc2l6ZV90IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxuLS1cbm1tL2h1Z2V0bGIuYy00MDY4LVxubW0vaHVnZXRsYi5jOjQwNjk6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiLmMtNDA3MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTE4LSAqL1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjE5OnN0YXRpYyBpbmxpbmUgYm9vbCBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIwLXtcbi0tXG5tbS9odWdldGxiX3N5c2N0bC5jPTcwPXN0YXRpYyBpbnQgaHVnZXRsYl9vdmVyY29tbWl0X2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5tbS9odWdldGxiX3N5c2N0bC5jLTgxLVxubW0vaHVnZXRsYl9zeXNjdGwuYzo4MjpcdGlmICh3cml0ZSBcdTAwMjZcdTAwMjYgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiX3N5c2N0bC5jLTgzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmM9MTE3PXN0YXRpYyBzc2l6ZV90IG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMjMtXG5tbS9odWdldGxiX3N5c2ZzLmM6MTI0Olx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxubW0vaHVnZXRsYl9zeXNmcy5jLTEyNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTg2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gSHVnZVRMQiBJbnRlcm5hbHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWVgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDtSaWdodCwgdGhhdCYjMzk7cyBhIG1hY3JvLCBvciBwb3RlbnRpYWxseSBhIGZ1bmN0aW9uLCBkZWZpbmVkIHdpdGhpbiB0aGUgaGVhcnQgb2YgdGhlIEh1Z2VUTEIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGJfaW50ZXJuYWwuaGAuJiMzNDsgTXkgbWVudGFsIGdlYXJzIHN0YXJ0IHR1cm5pbmcsIHJlY2FsbGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueXRoaW5nIGZvdW5kIGluIHRoYXQgcGFydGljdWxhciBoZWFkZXIuIEl0IHN1Z2dlc3RzIHRoaXMgaXMgYSBjcnVjaWFsIGludGVybmFsIGRldGFpbC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBpbiB0aGUgYGh1Z2V0bGJfaW50ZXJuYWwuaGAgaGVhZGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBzb21ldGhpbmcgSSYjMzk7ZCBleHBlY3QgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgSHVnZVRMQiBjb3JlLgoKVGhlIG5hbWUgaXRzZWxmLCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWVgLCBpbW1lZGlhdGVseSBoaW50cyBhdCBpdHMgcHVycG9zZS4gSXQmIzM5O3MgbGlrZWx5IGNoZWNraW5nIGlmIGEgcGFydGljdWxhciBIdWdlVExCIHBhZ2Ugc2l6ZSAoYGhzdGF0ZWApIGlzIG9mIHRoZSAmIzM0O2dpZ2FudGljJiMzNDsgdmFyaWV0eSwgcHJvYmFibHkgdGhlIGxhcmdlc3QgZGVmaW5lZCBzaXplLCBhbmQgKm1vcmUgc2lnbmlmaWNhbnRseSosIHRoYXQgaXQgZG9lcyBzbyB3aXRob3V0IHJlcXVpcmluZyBydW50aW1lIGNhbGN1bGF0aW9ucyBvciBkeW5hbWljIGxvb2t1cHMuIE15IGJyYWluIGFscmVhZHkgc3RhcnRzIHRvIGh5cG90aGVzaXplIGFib3V0IHRoZSB1c2UgY2FzZXM6IHRoaXMgd291bGQgYmUgZXNzZW50aWFsIGZvciBlZmZpY2llbnQsIGZhc3QtcGF0aCBjaGVja3Mgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbiBvciBUTEIgaGFuZGxpbmcuIEl0JiMzOTtzIGRlc2lnbmVkIGZvciBzcGVlZC4gVGhpcyByZWluZm9yY2VzIHRoZSBhc3N1bXB0aW9uIHRoaXMgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIGNoZWNrLiBLbm93aW5nIGl0IGlzIGJlaW5nIHVzZWQgaW4gSHVnZVRMQiwgSSBxdWlja2x5IHJlY29nbml6ZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfaW50ZXJuYWwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiX2ludGVybmFsLmgtMTgtICovXG5tbS9odWdldGxiX2ludGVybmFsLmg6MTk6c3RhdGljIGlubGluZSBib29sIGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiX2ludGVybmFsLmgtMjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIEhlcmUmIzM5O3MgYSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgc3RhcnRpbmcgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvcmUgQ29uY2VwdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gZm9ybXVsYXRlIGEgY29tcHJlaGVuc2l2ZSBhbmFseXNpcywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgSSYjMzk7bSBvcGVyYXRpbmcgZnJvbSBhIHNoYXJlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBjb25jZXB0IGF0IGhhbmQuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIGdldCBsb3N0IGluIG51YW5jZXMgYW5kIGFwcGxpY2F0aW9ucyBpZiB0aGUgZm91bmRhdGlvbmFsIGRlZmluaXRpb24gaXNuJiMzOTt0IGFpcnRpZ2h0LiBTbywgSSYjMzk7bGwgdGFrZSBhIG1vbWVudCwgYSAqbmVjZXNzYXJ5KiBtb21lbnQsIHRvIG1ldGljdWxvdXNseSBzY3J1dGluaXplIHRoZSBhY2NlcHRlZCBkZWZpbml0aW9uLiBJJiMzOTttIG5vdCBsb29raW5nIGZvciBhIHN1cGVyZmljaWFsIHVuZGVyc3RhbmRpbmc7IEkmIzM5O20gc2Vla2luZyB0aGUgcHJlY2lzZSwgbnVhbmNlZCBhcnRpY3VsYXRpb24gdGhhdCB3aWxsIHNlcnZlIGFzIHRoZSBiZWRyb2NrIGZvciBhbnkgbWVhbmluZ2Z1bCBkaXNjdXNzaW9uIG9yIGFzc2Vzc21lbnQuIFRoaXMgaXMgbm90IGFib3V0IHJvdGUgbWVtb3JpemF0aW9uOyBpdCYjMzk7cyBhYm91dCBpbnRlcm5hbGl6aW5nIHRoZSBjb3JlIGVzc2VuY2UgYW5kIGFueSBzdWJ0bGUgaW1wbGljYXRpb25zIHdpdGhpbiB0aGF0IGRlZmluaXRpb24uIE9ubHkgdGhlbiBjYW4gSSBiZSBjb25maWRlbnQgdGhhdCBJJiMzOTttIGJ1aWxkaW5nIG9uIGEgc29saWQgZm91bmRhdGlvbiwgYW5kIHRoYXQgYW55IHN1YnNlcXVlbnQgZXhwbG9yYXRpb24gd2lsbCBiZSB0cnVseSBpbnNpZ2h0ZnVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfaW50ZXJuYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHQgKiBydW50aW1lIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gVGhpcyBpcyBhIGNvbW1vbiBjb25kaXRpb24gdXNlZCB0b1xuICAxNjpcdCAqIHNraXAgb3BlcmF0aW9ucyB0aGF0IGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gZ2lnYW50aWMgcGFnZXMgd2hlbiBydW50aW1lXG4gIDE3Olx0ICogc3VwcG9ydCBpcyBkaXNhYmxlZC5cbiAgMTg6XHQgKi9cbiAgMTk6XHRzdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoc3RydWN0IGhzdGF0ZSAqaClcbiAgMjA6XHR7XG4gIDIxOlx0XHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiAhZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpO1xuICAyMjpcdH1cbiAgMjM6XHRcbiAgMjQ6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKldoZXJlJiMzOTtzIFRoYXQgRnVuY3Rpb24gRGVmaW5lZD8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBhY3R1YWxseSAqZGVmaW5lZCo/IEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uLiBJcyBpdCBpbiBhIGhlYWRlciBmaWxlPyBBIHNwZWNpZmljIHNvdXJjZSBmaWxlPyBJcyBpdCBwYXJ0IG9mIGEgbGlicmFyeT8gVW5kZXJzdGFuZGluZyBpdHMgb3JpZ2luIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBkZWZpbml0aW9uIHRvIGZpZ3VyZSBvdXQgd2hhdCBmaWxlcyB0byBzdGFydCBkaWdnaW5nIHRocm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9odWdldGxiLmg9MTk9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2dldF9wc2l6ZShzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9odWdldGxiLmgtMzgtI2RlZmluZSBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaDozOTpzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9odWdldGxiLmgtNDAte1xuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oPTExOD1zdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTI0LSNpZm5kZWYgX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg6MTI1OnN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMjYte1xuLS1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xOT1zdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoc3RydWN0IGhzdGF0ZSAqaClcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0yMC17XG5tbS9odWdldGxiX2ludGVybmFsLmg6MjE6XHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiAhZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpO1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGRlZmluaXRpb24gZmlsZSBmb3IgZ2VuZXJpYyBIdWdlVExCIHN1cHBvcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyB0aGF0IHVuZGVycGluIHRoZSBzeXN0ZW0tYWdub3N0aWMgYXNwZWN0cyBvZiB0aGUgaHVnZSBwYWdlIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgYGluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oYC4gVGhpcyBmaWxlIHNob3VsZCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcsIGxldHRpbmcgbWUgdGhlbiB0cmFjZSBmcm9tIHRoZXJlIGludG8gdGhlIG1vcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaWYgSSBuZWVkIHRvLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiBob3cgdGhlIGdlbmVyaWMgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbnVhbmNlcyBvZiBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBrZXkgZGVmaW5pdGlvbnMsIGFueSBpbmxpbmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcGFnZSBtYW5hZ2VtZW50IG9yIGFsbG9jYXRpb24sIGFuZCBhbnkgY29yZSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNlbnRyYWwgdG8gdGhlIGh1Z2UgcGFnZSBpbXBsZW1lbnRhdGlvbiBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRyZXR1cm4gcHRlcF9nZXQocHRlcCk7XG4gMTIxOlx0fVxuIDEyMjpcdCNlbmRpZlxuIDEyMzpcdFxuIDEyNDpcdCNpZm5kZWYgX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRFxuIDEyNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXG4gMTI2Olx0e1xuIDEyNzpcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpO1xuIDEyODpcdH1cbiAxMjk6XHQjZW5kaWYgLyogX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRCAqL1xuIDEzMDpcdFxuIDEzMTpcdCNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfSFVHRVRMQl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDY2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2lnYW50aWMgUGFnZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBoaW5nZXMgb24gYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gUmlnaHQsIGlmIHRoaXMgaXMgZW5hYmxlZCwgdGhlbiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCByZXR1cm5zIHRydWUsIGFuZCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoKWAgcmV0dXJucyBmYWxzZS4gVGhlIHBhdGNoIGluY2x1ZGVzIGEgY2hlY2sgZm9yIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAuIFNvLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICppcyogZW5hYmxlZCwgdGhlbiB0aGlzIGNoZWNrIGlzIGVmZmVjdGl2ZWx5IHNraXBwZWQsIHVubGVzcyB0aGUgYXJjaGl0ZWN0dXJlIGRvZXMgc29tZXRoaW5nIGNsZXZlciB3aXRoIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgIHRvIG1ha2UgaXQgZHluYW1pY2FsbHkgcmV0dXJuIGZhbHNlLgoKQnV0LCBoYW5nIG9uLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzICpub3QqIGVuYWJsZWQsIHRoZW4gYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgKmlzKiBmYWxzZS4gQW5kLCBpbiB0aGF0IHNjZW5hcmlvLCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaClgIHJldHVybnMgdHJ1ZSBmb3IgZ2lnYW50aWMgcGFnZXMuIFNvLCB0aGlzIGNoZWNrICp3b3VsZCogYmUgZXhlY3V0ZWQuCgpTbywgdGhlIGludGVuZGVkIGJlaGF2aW9yLi4uaXQgc291bmRzIGxpa2Ugd2UgKndhbnQqIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgdG8gYmUgZGlzYWJsZWQ/IE9yIG1heWJlIGl0IGlzIGVuYWJsZWQsIGJ1dCB0aGUgYXJjaGl0ZWN0dXJlICpzaG91bGQqIG5vdCBzdXBwb3J0IGdpZ2FudGljIHBhZ2VzIGF0IHJ1bnRpbWU/CgpMZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoIGFnYWluLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICppcyogZGlzYWJsZWQsIHRoZW4sIHdpdGhvdXQgYW4gb3ZlcnJpZGUsIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgICppcyogZmFsc2UsIHJpZ2h0PwoKSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBvciBgYXJjaC9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAuIFRoYXQgc2hvdWxkIGNsYXJpZnkgdGhlIGludGVuZGVkIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI4Mz1jb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4tLVxuZnMvS2NvbmZpZy0yODYtXG5mcy9LY29uZmlnOjI4Nzpjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuZnMvS2NvbmZpZy0yODgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjQ4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6ICYjMzQ7V2h5IGlzIHRoaXMgYmVpbmcgY2hlY2tlZCBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsgIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiAgSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIGxhcmdlIG1lbW9yeSBwYWdlcywgb2Z0ZW4gcmVmZXJyZWQgdG8gYXMgaHVnZSBwYWdlcyBvciBnaWdhbnRpYyBwYWdlcywgYWx0aG91Z2ggdGhlIGV4YWN0IHRlcm0gZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uLgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyBJIGtub3cuICBXaGljaCBvbmVzICp3b3VsZG4mIzM5O3QqIGhhdmUgdGhpcywgYW5kIHdoeT8gIEFSTT8gIHg4Nj8gIFJJU0MtVj8gIFBvd2VyUEM/ICBJdCYjMzk7cyB1c3VhbGx5IHByZXR0eSBvYnZpb3VzIHdoaWNoIG9uZXMgYXJlIGRlc2lnbmVkIHdpdGggdGhpcyBjb25jZXB0IGluIG1pbmQsIGJ1dCBldmVuIHRoZSBvbmVzIHRoYXQgZG8gc3VwcG9ydCB0aGlzLCBoYXZlIHVuaXF1ZSBpbXBsZW1lbnRhdGlvbnMgdG8gY29udGVuZCB3aXRoLgoKVGhlIGNoZWNrIGl0c2VsZiBzdWdnZXN0cyB0aGF0IHRoZSBjb2RlIGJhc2UgbmVlZHMgdG8gYWRhcHQgaXRzIGJlaGF2aW9yIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnRzIGFuZCB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHJlYWxseSBiaWcgbWVtb3J5IHBhZ2VzLiAgVGhpcyBwcm9iYWJseSB0aWVzIGludG8gbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgcGFnZSB0YWJsZSBoYW5kbGluZywgb3IgcG90ZW50aWFsbHkgb3B0aW1pemF0aW9ucyBpbiBkcml2ZXJzIG9yIG90aGVyIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGtlcm5lbCBzdWJzeXN0ZW1zLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiAgSWYgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGRlZmluZWQsIHRoZSBjb2RlIG1pZ2h0IHVzZSBkaWZmZXJlbnQgZGF0YSBzdHJ1Y3R1cmVzLCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiwgb3IgZXZlbiBjb21wbGV0ZWx5IGRpZmZlcmVudCBjb2RlIHBhdGhzIHRvIG1hbmFnZSB0aG9zZSBwb3RlbnRpYWxseSBodWdlIGNodW5rcyBvZiBtZW1vcnkuICBUaGVyZSBtYXkgYmUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IHRvIHVzaW5nIHRoaXMgb24gYW4gYXJjaGl0ZWN0dXJlIHdoaWNoIGhhcyBzdXBwb3J0LCBhcyBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggYSBzbWFsbGVyIHBhZ2Ugc2l6ZSBjYW4gYmVjb21lIHNpZ25pZmljYW50LiAgVGhlcmUgYWxzbyBtaWdodCBiZSByZXN0cmljdGlvbnMgdG8gaG93IGl0IGNhbiBiZSB1c2VkLCBob3dldmVyLgoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIHRvIHNlZSBob3cgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzICp1c2VkKiAtLSB0aGF0JiMzOTtzIHRoZSByZWFsIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuICBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBgI2lmZGVmIEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGJsb2Nrcywgb2J2aW91c2x5LCBidXQgYWxzbyBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiAgVGhlIHVzZSBjYXNlIHdpbGwgdGVsbCB0aGUgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0zMi1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL2FybTY0L0tjb25maWc6MzM6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC9hcm02NC9LY29uZmlnLTM0LVx0c2VsZWN0IEFSQ0hfSEFTX0tDT1Zcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEzOC1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxMzk6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVx0XHRpZiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuYXJjaC9wb3dlcnBjL0tjb25maWctMTQwLVx0c2VsZWN0IEFSQ0hfSEFTX0tDT1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTM1LVx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcbmFyY2gvcmlzY3YvS2NvbmZpZzozNjpcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG5hcmNoL3Jpc2N2L0tjb25maWctMzctXHRzZWxlY3QgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05Ny1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL3MzOTAvS2NvbmZpZzo5ODpcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4tLVxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxuLS1cbmFyY2gvc2gvS2NvbmZpZy05LVx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuYXJjaC9zaC9LY29uZmlnOjEwOlx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmFyY2gvc2gvS2NvbmZpZy0xMS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTcwPWNvbmZpZyBTUEFSQzY0XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnLTEwNy1cdHNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0lcbmFyY2gvc3BhcmMvS2NvbmZpZzoxMDg6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC9zcGFyYy9LY29uZmlnLTEwOS1cdHNlbGVjdCBIQVZFX1NPRlRJUlFfT05fT1dOX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZz0yMz1jb25maWcgWDg2XzY0XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yNi1cdCMgT3B0aW9ucyB0aGF0IGFyZSBpbmhlcmVudGx5IDY0LWJpdCBrZXJuZWwgb25seTpcbmFyY2gveDg2L0tjb25maWc6Mjc6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC94ODYvS2NvbmZpZy0yOC1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwNgoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgR2lnYW50aWMgUGFnZSBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb2RlIGFuZCB0cnlpbmcgdG8gZm9sbG93IHRoZSBsb2dpYyBhcm91bmQgZ2lnYW50aWMgcGFnZXMuIEl0IHNlZW1zIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBpcyBlbmFibGVkIGFjcm9zcyBzZXZlcmFsIGFyY2hpdGVjdHVyZXM6IHg4Nl82NCwgYXJtNjQsIHJpc2N2LCBzMzkwLCBzaCwgc3BhcmM2NCwgYW5kIHBvd2VycGMuICBUaGUga2V5IGhlcmUgaXMgdGhhdCBpZiB0aGF0IGZsYWcgaXMgc2V0LCB0aGVuIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgICpzaG91bGQqIHJldHVybiB0cnVlLgoKQnV0IHdhaXQgYSBtaW51dGUuLi5pZiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCBkb2VzIHJldHVybiB0cnVlLCB0aGVuIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIGZhbHNlLiAgQW5kIGlmICp0aGF0KiBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB0aGUgY29kZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgaXNuJiMzOTt0IGFjdHVhbGx5IGV4ZWN1dGVkLi4uIHVubGVzcywgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvdmVycmlkZXMgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAuIFNvIHRoZSBiZWhhdmlvciBvZiB0aGUgcGF0Y2ggd2lsbCBkZXBlbmQgb24gdGhlIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbi4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgaW4gcG93ZXJwYyBzcGVjaWZpY2FsbHkuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIG1pZ2h0IGhhcHBlbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcdH1cbiAgMzY6XHR9XG4gIDM3Olx0XG4gIDM4Olx0I2RlZmluZSBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEXG4gIDM5Olx0c3RhdGljIGlubGluZSBib29sIGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQodm9pZClcbiAgNDA6XHR7XG4gIDQxOlx0XHQvKlxuICA0MjpcdFx0ICogV2UgdXNlZCBnaWdhbnRpYyBwYWdlIHJlc2VydmF0aW9uIHdpdGggaHlwZXJ2aXNvciBhc3Npc3QgaW4gc29tZSBjYXNlLlxuICA0MzpcdFx0ICogV2UgY2Fubm90IHVzZSBydW50aW1lIGFsbG9jYXRpb24gb2YgZ2lnYW50aWMgcGFnZXMgaW4gdGhvc2UgcGxhdGZvcm1zXG4gIDQ0Olx0XHQgKiBUaGlzIGlzIGhhc2ggdHJhbnNsYXRpb24gbW9kZSBMUEFScy5cbiAgNDU6XHRcdCAqL1xuICA0NjpcdFx0aWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikgXHUwMDI2XHUwMDI2ICFyYWRpeF9lbmFibGVkKCkpXG4gIDQ3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDg6XHRcbiAgNDk6XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA2MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdpZ2FudGljIFBhZ2UgQ29kZSBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE9uIFBvd2VyUEMsIHRoaXMgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgZnVuY3Rpb24gY291bGQgcmV0dXJuIGBmYWxzZWAsIHdoaWNoIGlzIGZpbmUsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgd2hhdCBhYm91dCB4ODY/IE9uIHg4NiwgaXQgZG9lc24mIzM5O3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQsIHNvIGl0IHJldHVybnMgdGhlIHZhbHVlIG9mIGBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKWAuIFRoYXQmIzM5O3MgYHRydWVgIG9uIHg4Nl82NCwgd2hpY2ggaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGxvb2sgZm9yIHdoZXJlIGEgcG9zc2libGUgcHJvYmxlbSBtYXkgYmUuIElmIGl0JiMzOTtzIHRydWUgb24geDg2XzY0LCB0aGVuIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgKmFsd2F5cyogZW5kcyB1cCBiZWluZyBmYWxzZS4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiB0aGUgYWRkZWQgY29uZGl0aW9uYWwgYGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlgIHdvdWxkIG5ldmVyIGJlIGVudGVyZWQgb24geDg2XzY0ISBCdXQuLi4gc3l6Ym90IGZvdW5kIHRoaXMsIGFuZCBzeXpib3QgdXN1YWxseSBydW5zIG9uIHg4Nl82NC4gVGhhdCYjMzk7cyBjb25mdXNpbmcuCgpTbywgc3l6Ym90LiBEb2VzIGl0IG9ubHkgcnVuIG9uIHg4Nl82ND8gTWF5YmUgaXQgY2FuIGFsc28gdGVzdCB4ODZfMzI/IExldCYjMzk7cyBjaGVjay4gQWgsIHN5emJvdCBkb2VzIGhhdmUgeDg2XzMyIGluc3RhbmNlcy4gSG93ZXZlciwgbWF5YmUgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIG5vdCBlbmFibGVkIG9uIHg4Nl8zMj8gV2FpdCwgYENPTkZJR19YODZfNjRgIGFjdHVhbGx5ICpzZWxlY3RzKiBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAuIFNvIHRoYXQgbWVhbnMsIG9uIHg4Nl8zMiwgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIE5PVCBzZWxlY3RlZC4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCB3b3VsZCByZXR1cm4gYGZhbHNlYC4gQW5kIGluIHRoYXQgY2FzZSwgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCB3b3VsZCByZXR1cm4gYHRydWVgIGZvciBnaWdhbnRpYyBwYWdlcyEgT2theSwgc28gdGhpcyBjb2RlICppcyogcmVhY2hhYmxlIG9uIHg4Nl8zMiwgYW5kIGFsc28gb24gUG93ZXJQQy4KCkJ1dCB3YWl0LCBjYW4gc3l6Ym90ICpyZWFsbHkqIHJ1biBvbiB4ODZfMzI/IFllcywgaXQgZG9lcy4gQW5kIGl0IGFsc28gdGVzdHMgb3RoZXIgYXJjaGl0ZWN0dXJlcyBsaWtlIEFSTSBhbmQgUklTQy1WLiBCdXQgY291bGQgc3l6Ym90IGJlIHRlc3RpbmcgYW4geDg2XzY0IGNvbmZpZ3VyYXRpb24gd2l0aCB4ODZfMzIgZW5hYmxlZD8gQWgsIG5vLCBgQ09ORklHX1g4Nl8zMmAgaXMgbm90IGEgdGhpbmcsIGl0JiMzOTtzIGBDT05GSUdfWDg2XzMyYCBvciBgQ09ORklHX1g4Nl82NGAuCgpPa2F5LCBhcmUgdGhlcmUgYW55IG90aGVyIHdheXMgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lYCBjYW4gYmUgdHJ1ZT8gTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNoZWNrIGBoc3RhdGVfaXNfZ2lnYW50aWNgIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzdGF0ZV9pc19naWdhbnRpYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03OTk9c3RhdGljIGlubGluZSBib29sIG9yZGVyX2lzX2dpZ2FudGljKHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04MDMtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4MDQ6c3RhdGljIGlubGluZSBib29sIGhzdGF0ZV9pc19naWdhbnRpYyhzdHJ1Y3QgaHN0YXRlICpoKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODA1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD05Mjc9c3RhdGljIGlubGluZSBib29sIGh1Z2VwYWdlX21vdmFibGVfc3VwcG9ydGVkKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtOTMxLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6OTMyOlx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcdTAwMjZcdTAwMjYgIW1vdmFibGVfZ2lnYW50aWNfcGFnZXMpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC05MzMtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTg1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh1Z2VfcGFnZV9zaGlmdChzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExODktXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTkwOnN0YXRpYyBpbmxpbmUgYm9vbCBoc3RhdGVfaXNfZ2lnYW50aWMoc3RydWN0IGhzdGF0ZSAqaClcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExOTEte1xuLS1cbm1tL2h1Z2V0bGIuYz0xMzkyPXZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMTQwMC1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNDAxOlx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG5tbS9odWdldGxiLmMtMTQwMi1cdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz0xNDYxPXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTQ2NS1cbm1tL2h1Z2V0bGIuYzoxNDY2Olx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG5tbS9odWdldGxiLmMtMTQ2Ny1cdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz0xOTY3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTk5MS1cdFx0ICovXG5tbS9odWdldGxiLmM6MTk5MjpcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxubW0vaHVnZXRsYi5jLTE5OTMtXHRcdFx0Z290byBvdXQ7XG4tLVxubW0vaHVnZXRsYi5jPTIwOTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIwOTUtXG5tbS9odWdldGxiLmM6MjA5NjpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGIuYy0yMDk3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9odWdldGxiLmM9MjEzOT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTIxNDMtXG5tbS9odWdldGxiLmM6MjE0NDpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWMoaCkpXG5tbS9odWdldGxiLmMtMjE0NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZXRsYi5jPTIzNjU9c3RhdGljIHZvaWQgcmV0dXJuX3VudXNlZF9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIzNzQtXG5tbS9odWdldGxiLmM6MjM3NTpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGIuYy0yMzc2LVx0XHRnb3RvIG91dDtcbi0tXG5tbS9odWdldGxiLmM9Mjc3Mz1pbnQgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuLS1cbm1tL2h1Z2V0bGIuYy0yNzgyLVx0Zm9yX2VhY2hfaHN0YXRlKGgpIHtcbm1tL2h1Z2V0bGIuYzoyNzgzOlx0XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxubW0vaHVnZXRsYi5jLTI3ODQtXHRcdFx0Y29udGludWU7XG4tLVxubW0vaHVnZXRsYi5jPTMyOTY9c3RhdGljIHZvaWQgX19pbml0IGdhdGhlcl9ib290bWVtX3ByZWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBuaWQpXG4tLVxubW0vaHVnZXRsYi5jLTMzMjUtXG5tbS9odWdldGxiLmM6MzMyNjpcdFx0Vk1fQlVHX09OKCFoc3RhdGVfaXNfZ2lnYW50aWMoaCkpO1xubW0vaHVnZXRsYi5jLTMzMjctXHRcdFdBUk5fT04oZm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPSAxKTtcbi0tXG5tbS9odWdldGxiLmM9MzM4Nz1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zMzkzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaC1cdTAwM2VtYXhfaHVnZV9wYWdlc19ub2RlW25pZF07ICYjNDM7JiM0MztpKSB7XG5tbS9odWdldGxiLmM6MzM5NDpcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSkge1xubW0vaHVnZXRsYi5jLTMzOTUtXHRcdFx0aWYgKCFhbGxvY19ib290bWVtX2h1Z2VfcGFnZShoLCBuaWQpKVxuLS1cbm1tL2h1Z2V0bGIuYz0zNTgwPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNTg3LVx0ICovXG5tbS9odWdldGxiLmM6MzU4ODpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfY21hX3RvdGFsX3NpemUoKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2V0bGIuYy0zNTg5LVx0ICAgICFodWdldGxiX2Vhcmx5X2NtYShoKSkge1xuLS1cbm1tL2h1Z2V0bGIuYy0zNjAxLVx0LyogYmVsb3cgd2lsbCBkbyBhbGwgbm9kZSBiYWxhbmNlZCBhbGxvYyAqL1xubW0vaHVnZXRsYi5jOjM2MDI6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxubW0vaHVnZXRsYi5jLTM2MDMtXHRcdGFsbG9jYXRlZCA9IGh1Z2V0bGJfZ2lnYW50aWNfcGFnZXNfYWxsb2NfYm9vdChoKTtcbi0tXG5tbS9odWdldGxiLmM9MzYxMD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9pbml0X2hzdGF0ZXModm9pZClcbi0tXG5tbS9odWdldGxiLmMtMzYyNC1cdFx0Lyogb3ZlcnNpemUgaHVnZXBhZ2VzIHdlcmUgaW5pdCYjMzk7ZWQgaW4gZWFybHkgYm9vdCAqL1xubW0vaHVnZXRsYi5jOjM2MjU6XHRcdGlmICghaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxubW0vaHVnZXRsYi5jLTM2MjYtXHRcdFx0aHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoaCk7XG4tLVxubW0vaHVnZXRsYi5jLTM2MzUtXHRcdCAqL1xubW0vaHVnZXRsYi5jOjM2MzY6XHRcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGIuYy0zNjM3LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL2h1Z2V0bGIuYz0zNjczPXN0YXRpYyB2b2lkIHRyeV90b19mcmVlX2xvdyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuLS1cbm1tL2h1Z2V0bGIuYy0zNjc5LVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjM2ODA6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxubW0vaHVnZXRsYi5jLTM2ODEtXHRcdHJldHVybjtcbi0tXG5tbS9odWdldGxiLmM9Mzc0NT1zdGF0aWMgaW50IHNldF9tYXhfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0zODAxLVx0ICovXG5tbS9odWdldGxiLmM6MzgwMjpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DT05USUdfQUxMT0MpKSB7XG5tbS9odWdldGxiLmMtMzgwMy1cdFx0aWYgKGNvdW50IFx1MDAzZSBwZXJzaXN0ZW50X2h1Z2VfcGFnZXMoaCkpIHtcbi0tXG5tbS9odWdldGxiLmM9NDA2Mj1zc2l6ZV90IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxuLS1cbm1tL2h1Z2V0bGIuYy00MDY4LVxubW0vaHVnZXRsYi5jOjQwNjk6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiLmMtNDA3MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vaHVnZXRsYi5jPTQ0NzM9dm9pZCBfX2luaXQgaHVnZXRsYl9ib290bWVtX2FsbG9jKHZvaWQpXG4tLVxubW0vaHVnZXRsYi5jLTQ0ODctXG5tbS9odWdldGxiLmM6NDQ4ODpcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcbm1tL2h1Z2V0bGIuYy00NDg5LVx0XHRcdGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzKGgpO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9Mjg3PWJvb2wgX19pbml0IGh1Z2V0bGJfZWFybHlfY21hKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yOTEtXG5tbS9odWdldGxiX2NtYS5jOjI5MjpcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfY21hX29ubHk7XG5tbS9odWdldGxiX2NtYS5jLTI5My19XG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTE4LSAqL1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjE5OnN0YXRpYyBpbmxpbmUgYm9vbCBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIwLXtcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoyMTpcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2ICFnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKCk7XG5tbS9odWdldGxiX2ludGVybmFsLmgtMjItfVxuLS1cbm1tL2h1Z2V0bGJfc3lzY3RsLmM9NzA9c3RhdGljIGludCBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm1tL2h1Z2V0bGJfc3lzY3RsLmMtODEtXG5tbS9odWdldGxiX3N5c2N0bC5jOjgyOlx0aWYgKHdyaXRlIFx1MDAyNlx1MDAyNiBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtODMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYz0xMTc9c3RhdGljIHNzaXplX3QgbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTEyMy1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoxMjQ6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiX3N5c2ZzLmMtMTI1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3ODQKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogNTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgSHVnZXRsYiBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SXMgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBldmVuIGEgcmVhbCBjb25kaXRpb24/JiMzNDsgQnV0IHRoZW4gSSB0cmFjZWQgaXQgdGhyb3VnaCB0aGUgY29kZSDigJMgaXQgKmlzKiB1c2VkIGluIHNldmVyYWwgY3J1Y2lhbCBwbGFjZXM6IGBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZWAsIGBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcmAsIGFuZCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgc28gaXQmIzM5O3MgYSB2YWxpZCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc3RhdGUuIFRoaXMgcGF0Y2ggY29ycmVjdGx5IGFkZHJlc3NlcyB0aGF0LgoKVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgY2hlY2sgZm9yIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgd2l0aGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLiBUaGF0IG1ha2VzIGl0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUuIEl0IHNlZW1zIHRoaXMgZml4IHByZXZlbnRzIGNvcnJ1cHRpb24gaW4gdGhlIGZyZWVsaXN0IHdoZW4gZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LCB3aGljaCBoYXBwZW5zIHVwb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZnV6emluZyBzdHJhdGVneS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUuIFRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlOiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3NgLCBhbmQgYHJlbW92ZV9odWdldGxiX2ZvbGlvYC4KCmBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaG9pY2UsIHNpbmNlIGl0IGNhbGxzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGluIGEgbG9vcC4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBpcyBhbm90aGVyIGdvb2QgY2hvaWNlLCBzaW5jZSBpdCYjMzk7cyBhIGNvcmUgaHVnZXRsYiBmdW5jdGlvbiB3aXRoIHRoZSBgVk1fV0FSTl9PTl9PTkNFKDEpYCBhZGRpdGlvbiBpbiB0aGUgcGF0Y2gsIHdoaWNoIG1ha2VzIGl0IGltcG9ydGFudCB0byB0cmFjZSBhbmQgZnV6ei4KCkZvciB0aGUgY29uZmlndXJhdGlvbnMsIGBIVUdFVExCRlNgIGlzIGVzc2VudGlhbCwgc2luY2UgaXQgZW5hYmxlcyBgSFVHRVRMQl9QQUdFYC4gQW5kLCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgTUVNT1JZX0hPVFBMVUdgIGFyZSB0aGUgY29ycmVjdCBjb25maWdzIGFzIHRoZXkgYXJlIHRoZSBjYWxsZXJzIG9mIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zJiMzNDssCiAgICAmIzM0O3JlbW92ZV9odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3MmIzM0OywKICAgICYjMzQ7cmVtb3ZlX2h1Z2V0bGJfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gaHVnZXRsYiB3aGVyZSBkaXNzb2x2aW5nIGEgZ2lnYW50aWMgZm9saW8gd2l0aG91dCBydW50aW1lIHN1cHBvcnQgd291bGQgbGVhdmUgaXQgb24gdGhlIGZyZWUgbGlzdCwgbGVhZGluZyB0byBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIEl0IGFkZHMgYSBjaGVjayBpbiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBmb2xpb3MsIGFuZCBhZGRzIHdhcm5pbmdzIGluIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgYW5kIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1lbW9yeSBob3RwbHVnIG9yIG1lbW9yeSBmYWlsdXJlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDE4YWFmNGYzN2ViMDQyZGVhM2EyYWU4NzYwZTgxNGM5MjUzNzc0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDU6MDk6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZTkzYzRkMjQ1NmFhNC4uNjdhNTAyMjkzNjk4MyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMTM5OCw4ICYjNDM7MTM5OCwxMSBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJVk1fQlVHX09OX0ZPTElPKGh1Z2V0bGJfY2dyb3VwX2Zyb21fZm9saW9fcnN2ZChmb2xpbyksIGZvbGlvKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtodWdldGxiX2xvY2spOwotCWlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkKJiM0MzsJaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7CiYjNDM7CQkvKiBDYWxsZXJzIG11c3QgZmlsdGVyIGdpZ2FudGljX25vX3J1bnRpbWUgdXBzdHJlYW0uICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0UoMSk7CiAJCXJldHVybjsKJiM0MzsJfQogCiAJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKIApAQCAtMTQ2MCw4ICYjNDM7MTQ2MywxMSBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiB7CiAJYm9vbCBjbGVhcl9mbGFnID0gZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTsKIAotCWlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkKJiM0MzsJaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7CiYjNDM7CQkvKiBDYWxsZXJzIG11c3QgZmlsdGVyIGdpZ2FudGljX25vX3J1bnRpbWUgdXBzdHJlYW0uICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0UoMSk7CiAJCXJldHVybjsKJiM0MzsJfQogCiAJLyoKIAkgKiBJZiB3ZSBkb24mIzM5O3Qga25vdyB3aGljaCBzdWJwYWdlcyBhcmUgaHdwb2lzb25lZCwgd2UgY2FuJiMzOTt0IGZyZWUKQEAgLTE5NzcsNiAmIzQzOzE5ODMsMTUgQEAgaW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlzdHJ1Y3QgaHN0YXRlICpoID0gZm9saW9faHN0YXRlKGZvbGlvKTsKIAkJYm9vbCBhZGp1c3Rfc3VycGx1cyA9IGZhbHNlOwogCiYjNDM7CQkvKgomIzQzOwkJICogcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKS91cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpIGJhaWwKJiM0MzsJCSAqIGZvciBnaWdhbnRpYyBoc3RhdGVzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LCBzbyBkaXNzb2x2aW5nIG9uZQomIzQzOwkJICogaGVyZSB3b3VsZCBsZWF2ZSBpdCBvbiB0aGUgZnJlZSBsaXN0IGFuZCwgb24gdm1lbW1hcCByZXN0b3JlCiYjNDM7CQkgKiBmYWlsdXJlLCB0aGUgYWRkX2h1Z2V0bGJfZm9saW8oKSByb2xsYmFjayBjb3JydXB0cyB0aGF0IGxpc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKIAkJaWYgKCFhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSkKIAkJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA4CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2V0bGIgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgZ2lnYW50aWMgcGFnZXMgYXJlIGhhbmRsZWQgd2hlbiBydW50aW1lIHN1cHBvcnQgaXNuJiMzOTt0IHByZXNlbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgY29uY2VybnMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgY29udHJvbCBmbG93IGFuZCBsaXN0IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGFkZGluZyBgVk1fV0FSTl9PTl9PTkNFKDEpYCBjYWxscyB3aXRoaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIHdoZW4gYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBpcyB0cnVlLiBJdCYjMzk7cyBhbHNvIGJhaWxpbmcgb3V0IGVhcmx5IGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbi4gVGhlIGdvYWwgaGVyZSBpcyBjbGVhcmx5IHRvIHByZXZlbnQgbGlzdCBjb3JydXB0aW9uLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLgoKTm93LCBjb25zaWRlcmluZyBteSBhcmVhIG9mIGV4cGVydGlzZSwgbGV0JiMzOTtzIGRyaWxsIGludG8gdGhlIEtNU0FOIGltcGxpY2F0aW9ucy4gVGhlIHByaW1hcnkgd29ycnkgaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhpcyBsb29rcyBsaWtlIGEgY29udHJvbC1mbG93IGNoYW5nZSBkZXNpZ25lZCB0byAqYXZvaWQqIG1lbW9yeSBzYWZldHkgaXNzdWVzIHJhdGhlciB0aGFuIGludHJvZHVjZSBuZXcgb25lcy4gVGhlIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgZmllbGRzIHdpdGhpbiBzdHJ1Y3RzLCBhbmQgbm90aGluZyBpcyBiZWluZyB3cml0dGVuIHRvIHVzZXJzcGFjZSB0aGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljLiBDcnVjaWFsbHksIEkgc2VlIG5vIGluZGljYXRpb24gdGhhdCB0aGUgY2hhbmdlcyBhcmUgY3JlYXRpbmcgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuCgpMaXN0IGNvcnJ1cHRpb24gaXMgYSB3ZWxsLWRlZmluZWQgY2xhc3Mgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgLS0gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgZXRjLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzIGFyZSBhbHJlYWR5IHdlbGwgZXF1aXBwZWQgdG8gY2F0Y2ggdGhvc2Uga2luZHMgb2YgcHJvYmxlbXMuIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IHRpZ2h0ZW5pbmcgdGhlIGV4aXN0aW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCB0aG9zZSBzY2VuYXJpb3MgaW4gYSBzcGVjaWZpYyBlZGdlIGNhc2UuCgpUaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIHByZXZlbnQgYSBzcGVjaWZpYyBsaXN0IGNvcnJ1cHRpb24gaXNzdWUgd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBUaGlzIGlzIGEgY29udHJvbC1mbG93IGNoYW5nZSwgaW1wcm92aW5nIG1lbW9yeSBzYWZldHkgYnkgYXZvaWRpbmcgY2VydGFpbiBtZW1vcnkgYWNjZXNzIGlzc3Vlcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkLiBUaGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYWRkcmVzc2VkIGFyZSB3aXRoaW4gdGhlIHB1cnZpZXcgb2YgZXhpc3RpbmcgZGVidWdnaW5nIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBsaXN0IGNvcnJ1cHRpb24gaXNzdWUgaW4gdGhlIGh1Z2V0bGIgc3Vic3lzdGVtIHdoZW4gZGlzc29sdmluZyBnaWdhbnRpYyBwYWdlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydC4gSXQgbW9kaWZpZXMgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggaHN0YXRlcywgYW5kIGFkZHMgd2FybmluZ3MgaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBsaXN0IGNvcnJ1cHRpb24sIHdoaWNoIGNhbiBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMuIFRoZXNlIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNTowOTo1NS4yNzUwMzQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTIyMTc4NjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc1wiLFxuICAgIFwicmVtb3ZlX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MDk6NTUuMjc1MDM5NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjI1MjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFkMThhYWY0ZjM3ZWIwNDJkZWEzYTJhZTg3NjBlODE0YzkyNTM3NzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMDU6MDk6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggZTkzYzRkMjQ1NmFhNC4uNjdhNTAyMjkzNjk4MyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMTM5OCw4ICsxMzk4LDExIEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGh1Z2V0bGJfY2dyb3VwX2Zyb21fZm9saW9fcnN2ZChmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG4rXFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XFxuK1xcdFxcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cXG4rXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4gXFxuQEAgLTE0NjAsOCArMTQ2MywxMSBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuIHtcXG4gXFx0Ym9vbCBjbGVhcl9mbGFnID0gZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcXG4gXFxuLVxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG4rXFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XFxuK1xcdFxcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cXG4rXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGRvbid0IGtub3cgd2hpY2ggc3VicGFnZXMgYXJlIGh3cG9pc29uZWQsIHdlIGNhbid0IGZyZWVcXG5AQCAtMTk3Nyw2ICsxOTgzLDE1IEBAIGludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShmb2xpbyk7XFxuIFxcdFxcdGJvb2wgYWRqdXN0X3N1cnBsdXMgPSBmYWxzZTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvKCkvdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKSBiYWlsXFxuK1xcdFxcdCAqIGZvciBnaWdhbnRpYyBoc3RhdGVzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LCBzbyBkaXNzb2x2aW5nIG9uZVxcbitcXHRcXHQgKiBoZXJlIHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QgYW5kLCBvbiB2bWVtbWFwIHJlc3RvcmVcXG4rXFx0XFx0ICogZmFpbHVyZSwgdGhlIGFkZF9odWdldGxiX2ZvbGlvKCkgcm9sbGJhY2sgY29ycnVwdHMgdGhhdCBsaXN0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdFxcdGlmICghYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MDk6NTUuNzE4MDMzNzE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5NzM0MDIzNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zXCIsXG4gICAgXCJyZW1vdmVfaHVnZXRsYl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQxOGFhZjRmMzdlYjA0MmRlYTNhMmFlODc2MGU4MTRjOTI1Mzc3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDA1OjA5OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBlOTNjNGQyNDU2YWE0Li42N2E1MDIyOTM2OTgzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0xMzk4LDggKzEzOTgsMTEgQEAgdm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Vk1fQlVHX09OX0ZPTElPKGh1Z2V0bGJfY2dyb3VwX2Zyb21fZm9saW9fcnN2ZChmb2xpbyksIGZvbGlvKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbitcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkge1xuK1x0XHQvKiBDYWxsZXJzIG11c3QgZmlsdGVyIGdpZ2FudGljX25vX3J1bnRpbWUgdXBzdHJlYW0uICovXG4rXHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiBcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcbkBAIC0xNDYwLDggKzE0NjMsMTEgQEAgc3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIHtcbiBcdGJvb2wgY2xlYXJfZmxhZyA9IGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XG4gXG4tXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG4rXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHtcbitcdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuK1x0XHRWTV9XQVJOX09OX09OQ0UoMSk7XG4gXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBkb24ndCBrbm93IHdoaWNoIHN1YnBhZ2VzIGFyZSBod3BvaXNvbmVkLCB3ZSBjYW4ndCBmcmVlXG5AQCAtMTk3Nyw2ICsxOTgzLDE1IEBAIGludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShmb2xpbyk7XG4gXHRcdGJvb2wgYWRqdXN0X3N1cnBsdXMgPSBmYWxzZTtcbiBcbitcdFx0LypcbitcdFx0ICogcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKS91cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpIGJhaWxcbitcdFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXG4rXHRcdCAqIGhlcmUgd291bGQgbGVhdmUgaXQgb24gdGhlIGZyZWUgbGlzdCBhbmQsIG9uIHZtZW1tYXAgcmVzdG9yZVxuK1x0XHQgKiBmYWlsdXJlLCB0aGUgYWRkX2h1Z2V0bGJfZm9saW8oKSByb2xsYmFjayBjb3JydXB0cyB0aGF0IGxpc3QuXG4rXHRcdCAqL1xuK1x0XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4gXHRcdGlmICghYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNTowOTo1NS43MTgwMzUwMTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQyNDcxNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGh1Z2V0bGIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdldGxiLmNgLiBJdCBzZWVtcyB0aGV5J3ZlIGFkZGVkIGEgZmV3IGNvbmRpdGlvbmFsIGNoZWNrcy4gRmlyc3QsIGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKWAsIHRoZXJlJ3Mgbm93IGFuIGBpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpYCBjaGVjaywgYW5kIGl0IGJhaWxzIG91dCBlYXJseSBpZiB0aGF0IGNvbmRpdGlvbiBpcyBtZXQuIFRoZXkgYWxzbyB0aHJldyBpbiBgVk1fV0FSTl9PTl9PTkNFKDEpYCBzdGF0ZW1lbnRzIHdpdGhpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKClgIOKAkyBhZ2FpbiwgdHJpZ2dlcmVkIHdoZW4gYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBpcyB0cnVlLlxuXG5SaWdodCwgc28gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpYCBpcyByZXNwb25zaWJsZSBmb3IgZGlzc29sdmluZyBmcmVlIGh1Z2V0bGIgZm9saW9zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGdpZ2FudGljIGZvbGlvcywgbGlrZWx5IHRob3NlIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBUaGUgY2hhbmdlIGlzIHRvIHByZXZlbnQgYXR0ZW1wdGluZyB0byBkaXNzb2x2ZSBhIGdpZ2FudGljIGZvbGlvIHRoYXQgKnNob3VsZG4ndCogYmUgZGlzc29sdmVkIGJlY2F1c2Ugb2YgdGhlIGByZW1vdmVfaHVnZXRsYl9mb2xpbygpYCBvciBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpYCBiYWlsLW91dHMuIFNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBsZWFkaW5nIHRvIHBvdGVudGlhbCBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlIGlmIHRoZSBmb2xpbyBlbmRlZCB1cCBvbiB0aGUgZnJlZSBsaXN0LlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgY29kZSBmb3IgaHVnZXRsYiBoYW5kbGluZywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gV2hlcmUgaXMgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYWN0dWFsbHkgKnVzZWQqPyBJIGtub3cgaXQgaXMgY2FsbGVkIGZyb20gYGRpc3NvbHZlX2ZyZWVfaHVnZV9wYWdlYCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZV9wYWdlc2AsIHNvIEkgbmVlZCB0byBjaGVjayB0aG9zZSBjYWxsIHNpdGVzIHRvIHNlZSBpZiB0aGUgbmV3IGNoZWNrIGlzIHJlYWNoYWJsZSBpbiByZWFsLXdvcmxkIHNjZW5hcmlvcy4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjAyLjc2MDUwOTEyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkzMDAwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD04NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04NzUtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODc2OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODc3OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg3OC1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyMDU9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjA5LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMTA6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTIxMS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjE0LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMTU6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjE2LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xOTI5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJlbW92ZV9wb29sX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTY2LSAqL1xcbm1tL2h1Z2V0bGIuYzoxOTY3OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiLmMtMTk2OC17XFxuLS1cXG5tbS9odWdldGxiLmMtMjA1OS0gKiBwYXJ0IG9mIGl0IGxpZXMgd2l0aGluIHRoZSBnaXZlbiByYW5nZS5cXG5tbS9odWdldGxiLmM6MjA2MDogKiBBbHNvIG5vdGUgdGhhdCBpZiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIHdpdGggYW4gZXJyb3IsIGFsbFxcbm1tL2h1Z2V0bGIuYy0yMDYxLSAqIGZyZWUgaHVnZXRsYiBmb2xpb3MgdGhhdCB3ZXJlIGRpc3NvbHZlZCBiZWZvcmUgdGhhdCBlcnJvciBhcmUgbG9zdC5cXG5tbS9odWdldGxiLmMtMjA2Mi0gKi9cXG5tbS9odWdldGxiLmM6MjA2MzppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbm1tL2h1Z2V0bGIuYy0yMDY0LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMDc5LVxcdFxcdGZvbGlvID0gcGZuX2ZvbGlvKHBmbik7XFxubW0vaHVnZXRsYi5jOjIwODA6XFx0XFx0cmMgPSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yMDgxLVxcdFxcdGlmIChyYylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTcxPXN0YXRpYyBpbnQgX19wYWdlX2hhbmRsZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3NS1cXHR6b25lX3BjcF9kaXNhYmxlKHBhZ2Vfem9uZShwYWdlKSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzY6XFx0cmV0ID0gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHBhZ2VfZm9saW8ocGFnZSkpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc3LVxcdGlmICghcmV0KVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODQ9c3RhdGljIGJvb2wgcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGh1Z2VwYWdlX29yX2ZyZWVwYWdlLCBib29sIHJlbGVhc2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4OC1cXHRcXHQgKiBEb2luZyB0aGlzIGNoZWNrIGZvciBmcmVlIHBhZ2VzIGlzIGFsc28gZmluZSBzaW5jZVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg5OlxcdFxcdCAqIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpIHJldHVybnMgMCBmb3Igbm9uLWh1Z2V0bGIgZm9saW9zIGFzIHdlbGwuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTAtXFx0XFx0ICovXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwMzMtXFx0XFx0ICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMDM0OlxcdFxcdHJldCA9IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RhcnRfcGZuLCBlbmRfcGZuKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwMzUtXFx0XFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDowNC41NTM1MTY5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTEyNjg3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCoqXG5cbk9rYXksIHNvIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCBoYXMgbXVsdGlwbGUgY2FsbCBwYXRocy4gSXQncyByZWFjaGVkIGZyb20gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3NgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBvZmZsaW5lX3BhZ2VzYCByZWxhdGVkIHRvIG1lbW9yeSBob3RwbHVnLCBhbmQgYWxzbyBmcm9tIGBfX3BhZ2VfaGFuZGxlX3BvaXNvbmAsIHdoaWNoIGRlYWxzIHdpdGggbWVtb3J5IGZhaWx1cmUuIFRoaXMgbWVhbnMgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBub3Qgc29tZSBkZWFkIGNvZGUuIEdpdmVuIHRoYXQgaXQgaGFzIHRoZXNlIHR3byBkaXN0aW5jdCBwYXRocywgYm90aCB0aWVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBJJ20gY29uZmlkZW50IGl0J3Mgd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIHNob3VsZCBmbGFnIHRoaXMgYXMgc29tZXRoaW5nIHRvIGZ1enosIGRlZmluaXRlbHksIGFuZCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmUgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCwgYXMgdGhleSBhcmUgdGhlIGNvcmUgb2YgdGhpcy5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGlzIHVzZWQgd2hlbiBgSFVHRVRMQl9QQUdFYCBpcyBlbmFibGVkIGFuZCBlaXRoZXIgYE1FTU9SWV9IT1RQTFVHYCBvciBgTUVNT1JZX0ZBSUxVUkVgIGFyZSBhbHNvLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gYG1tL2h1Z2V0bGIuY2AgdG8gc2VlIGhvdyB0aGVzZSBjb25maWdzIGludGVyYWN0IHdpdGggdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDowOS4xNjQ3ODg1NjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2ODgzNjA0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6MTAuOTMzNjM0MzE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNTIzNzI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIGFuZCBNZW1vcnkgRmFpbHVyZXMqKlxuXG5SaWdodCwgc28gYEhVR0VUTEJfUEFHRWAuLi4gdGhhdCBsb29rcyBsaWtlIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYEhVR0VUTEJGU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdCdzIGEgYGRlZl9ib29sYCwgbWVhbmluZyBgSFVHRVRMQkZTYCBpcyB0aGUgYWN0dWFsIGNvbmZpZyBvcHRpb24gd2UgbmVlZCB0byBlbmFibGUgaHVnZSBwYWdlcyBmdW5jdGlvbmFsaXR5LiBHb3QgaXQuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgYXJlYXMuIEdpdmVuIHRoaXMgZm9jdXMgb24gbWVtb3J5LCBpdCdzIHdvcnRoIGNoZWNraW5nIGBNRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgaW4gdGhvc2Ugc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHdpdGggaHVnZSBwYWdlcyBpbnZvbHZlZC4gTWlnaHQgYmUgYW4gaW50ZXJlc3RpbmcgaW50ZXJwbGF5IHRoZXJlLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDoxNC41NDg4NzQ1MDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjQ3OTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjE2LjEyMTM1OTU2NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTE5MjkxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zOiBNZW1vcnkqKlxuXG5SaWdodCwgbGV0J3MgdGhpbmsgYWJvdXQgdGhpcyBtZW1vcnkgY29uZmlndXJhdGlvbi4gYE1FTU9SWV9GQUlMVVJFYCDigJMgeWVhaCwgdGhhdCBmZWVscyByaWdodCwgdGhhdCdzIGEgc29saWQgY2hvaWNlIGZvciBlcnJvciBoYW5kbGluZywgZm9yIHJlc2lsaWVuY2UuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBncmFjZWZ1bGx5IGhhbmRsZSBwb3RlbnRpYWwgbWVtb3J5IGZhaWx1cmVzLCBhbmQgdGhhdCBjb25maWcgcHJvYmFibHkgb2ZmZXJzIGEgcm9idXN0IG1lY2hhbmlzbS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQW5kIHRoZW4sIHJlbGF0ZWQgdG8gdGhhdCwgYE1FTU9SWV9IT1RQTFVHYCBpcyBjcnVjaWFsLiBUaGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSBhZGQgb3IgcmVtb3ZlIG1lbW9yeSB3aXRob3V0IGEgcmVib290PyBBYnNvbHV0ZWx5IGVzc2VudGlhbCBmb3IgYW55IG1vZGVybiBzeXN0ZW0gdGhhdCBuZWVkcyB0byBiZSBoaWdobHkgYXZhaWxhYmxlIG9yIGVhc2lseSBzY2FsZWQuIEl0IHRpZXMgaW4gcGVyZmVjdGx5IHdpdGggYSBnb29kIGZhaWx1cmUgc3RyYXRlZ3kuIFRoZXNlIHR3byBjb25maWd1cmF0aW9ucywgd29ya2luZyB0b2dldGhlciwgY3JlYXRlIGEgbW9yZSByb2J1c3QgbWVtb3J5IHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjIwLjE3MzI5MjIzN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTczMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFBMVUdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MTk9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXFxuLS1cXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxubW0vS2NvbmZpZzo1MjM6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTI0LVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDoyMS43MzMwMzE5OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1NTg3NTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEh1Z2V0bGIgRm9saW8gSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBIVUdFVExCRlNgLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYE1FTU9SWV9IT1RQTFVHYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBmb2xpbyBtYW5hZ2VtZW50LCBmb2N1c2luZyBvbiBob3cgdGhlc2UgaW50ZXJhY3QuIEknbSBpbW1lZGlhdGVseSBkcmF3biB0byBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIExldCdzIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbmByZW1vdmVfaHVnZXRsYl9mb2xpb2AgaGFzIGEgd2lkZSByZWFjaDsgaXQncyBjYWxsZWQgYnkgYHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGZyZWVfaHVnZV9mb2xpb2AsIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AsIGBpc29sYXRlX2h1Z2V0bGJgLCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgaW4gY29tcGFyaXNvbiwgc2VlbXMgbW9yZSBmb2N1c2VkLCBjYWxsZWQgb25seSBieSBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFuZCBgZnJlZV9ocGFnZV93b3JrZm5gLlxuXG5UaGUgcGF0Y2ggdGFyZ2V0cyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYC4gS25vd2luZyB0aGF0LCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgaXQncyBhIGNyaXRpY2FsIGZvY3VzLiBCdXQgc28gaXMgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgZ2l2ZW4gaG93IGZhci1yZWFjaGluZyBpdHMgaW1wYWN0IGlzLiBXaXRoIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBiZWluZyBzdGF0aWMsIEknbSB0aGlua2luZyBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIHRoZSBiZXR0ZXIgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gR290dGEgY29uZmlybSBpdCdzIG5vdCBzdGF0aWMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDoyNy4yODg5MTA3NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDQzMjk3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTE0MzE9dm9pZCBhZGRfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE0NjAtXFxubW0vaHVnZXRsYi5jOjE0NjE6c3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0xNDYyLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTUyMC0vKlxcbm1tL2h1Z2V0bGIuYzoxNTIxOiAqIEFzIHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgY2FuIGJlIGNhbGxlZCB1bmRlciBhbnkgY29udGV4dCwgc28gd2UgY2Fubm90XFxubW0vaHVnZXRsYi5jLTE1MjItICogdXNlIEdGUF9LRVJORUwgdG8gYWxsb2NhdGUgdm1lbW1hcCBwYWdlcy4gSG93ZXZlciwgd2UgY2FuIGRlZmVyIHRoZVxcbi0tXFxubW0vaHVnZXRsYi5jPTE1MzM9c3RhdGljIHZvaWQgZnJlZV9ocGFnZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE1NTQtXFxubW0vaHVnZXRsYi5jOjE1NTU6XFx0XFx0X191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1NTYtXFxuLS1cXG5tbS9odWdldGxiLmM9MTU2Mj1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZnJlZV9ocGFnZV93b3JrKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtMTU2Ny1cXG5tbS9odWdldGxiLmM6MTU2ODpzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2h1Z2V0bGIuYy0xNTY5LVxcdFxcdFxcdFxcdCBib29sIGF0b21pYylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTcxLVxcdGlmICghZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSB8fCAhYXRvbWljKSB7XFxubW0vaHVnZXRsYi5jOjE1NzI6XFx0XFx0X191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1NzMtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE1ODc9c3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjA1LVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MTYwNjpcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy0xNjA3LVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTE2MzAtXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbm1tL2h1Z2V0bGIuYzoxNjMxOlxcdFxcdFxcdFxcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTE2MzItXFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTYzOD1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE2NzMtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0X2ZvbGlvLCBcXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSkge1xcbm1tL2h1Z2V0bGIuYzoxNjc0OlxcdFxcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTE2NzUtXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTY5MD12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3NDQtXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XFxubW0vaHVnZXRsYi5jOjE3NDU6XFx0XFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIHRydWUpO1xcbm1tL2h1Z2V0bGIuYy0xNzQ2LVxcdH0gZWxzZSBpZiAoaC1cXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmlkXSkge1xcbi0tXFxubW0vaHVnZXRsYi5jLTE3NDktXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XFxubW0vaHVnZXRsYi5jOjE3NTA6XFx0XFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIHRydWUpO1xcbm1tL2h1Z2V0bGIuYy0xNzUxLVxcdH0gZWxzZSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MTk2Nz1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTk4Ni1cXHRcXHQvKlxcbm1tL2h1Z2V0bGIuYzoxOTg3OlxcdFxcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvKCkvdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKSBiYWlsXFxubW0vaHVnZXRsYi5jLTE5ODgtXFx0XFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXFxuLS1cXG5tbS9odWdldGxiLmMtMjA0Ni1cXG5tbS9odWdldGxiLmM6MjA0NzpcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy0yMDQ4LVxcdFxcdHJldHVybiByYztcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNjU2PXN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMjcyOC1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjI3Mjk6XFx0XFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgb2xkX2ZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTI3MzAtXFx0fVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MzYtXFx0aWYgKG5ld19mb2xpbylcXG5tbS9odWdldGxiLmM6MjczNzpcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBuZXdfZm9saW8sIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtMjczOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6MjguODMzMjQ3Njc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDA2ODA4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgRm9saW8gTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEh1Z2VUTEIgZm9saW8gbWFuYWdlbWVudCBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCBhbmQgbm90IGFjY2Vzc2libGUgZnJvbSBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBHb29kIHRvIGtub3cuIEJ1dCwgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc2AgYXJlICpub3QqIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltcGxpZXMgYSBicm9hZGVyIHNjb3BlLCBwb3RlbnRpYWxseSBiZWluZyBjYWxsZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGFuZCBhIGRldGFpbCB0byBrZWVwIGluIG1pbmQuIE5vdywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLiBMZXQncyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uJ3MgaW1wbGVtZW50YXRpb24gYW5kIGNhbGwgc2l0ZXMgdG8gc2VlIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuIEl0J3MgdGhlIG1vc3QgcGVydGluZW50IGZ1bmN0aW9uIHRvIGV4YW1pbmUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6MzQuMTczOTMyMzc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk2MzI1ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlbW92ZV9odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzc3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzOTEtICovXFxubW0vaHVnZXRsYi5jOjEzOTI6dm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2h1Z2V0bGIuYy0xMzkzLVxcdFxcdFxcdCAgYm9vbCBhZGp1c3Rfc3VycGx1cylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTMzPXN0YXRpYyB2b2lkIGZyZWVfaHBhZ2Vfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTQ5LVxcdFxcdCAqIGZvbGlvX2hzdGF0ZSgpIGlzIGdvaW5nIHRvIHRyaWdnZXIgYmVjYXVzZSBhIHByZXZpb3VzIGNhbGwgdG9cXG5tbS9odWdldGxiLmM6MTU1MDpcXHRcXHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpIHdpbGwgY2xlYXIgdGhlIGh1Z2V0bGIgYml0LCBzbyBkb1xcbm1tL2h1Z2V0bGIuYy0xNTUxLVxcdFxcdCAqIG5vdCB1c2UgZm9saW9faHN0YXRlKCkgZGlyZWN0bHkuXFxuLS1cXG5tbS9odWdldGxiLmM9MTY5MD12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3NDItXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl90ZW1wb3JhcnkoZm9saW8pKSB7XFxubW0vaHVnZXRsYi5jOjE3NDM6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtMTc0NC1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzQ3LVxcdFxcdC8qIHJlbW92ZSB0aGUgcGFnZSBmcm9tIGFjdGl2ZSBsaXN0ICovXFxubW0vaHVnZXRsYi5jOjE3NDg6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIHRydWUpO1xcbm1tL2h1Z2V0bGIuYy0xNzQ5LVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE5Mjk9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmVtb3ZlX3Bvb2xfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE5NDQtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8sIGxydSk7XFxubW0vaHVnZXRsYi5jOjE5NDU6XFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFjY3Rfc3VycGx1cyk7XFxubW0vaHVnZXRsYi5jLTE5NDYtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9odWdldGxiLmM9MTk2Nz1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTk4Ni1cXHRcXHQvKlxcbm1tL2h1Z2V0bGIuYzoxOTg3OlxcdFxcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvKCkvdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKSBiYWlsXFxubW0vaHVnZXRsYi5jLTE5ODgtXFx0XFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXFxuLS1cXG5tbS9odWdldGxiLmMtMjAxOC1cXHRcXHRcXHRhZGp1c3Rfc3VycGx1cyA9IHRydWU7XFxubW0vaHVnZXRsYi5jOjIwMTk6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcXG5tbS9odWdldGxiLmMtMjAyMC1cXHRcXHRoLVxcdTAwM2VtYXhfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jLTIwMzEtXFx0XFx0ICogVGhlIGZvbGlvX3Rlc3RfaHVnZXRsYiBjaGVjayBoZXJlIGlzIGJlY2F1c2VcXG5tbS9odWdldGxiLmM6MjAzMjpcXHRcXHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbyB3aWxsIGNsZWFyIGh1Z2V0bGIgZm9saW8gZmxhZyBmb3JcXG5tbS9odWdldGxiLmMtMjAzMy1cXHRcXHQgKiBub24tdm1lbW1hcCBvcHRpbWl6ZWQgaHVnZXRsYiBmb2xpb3MuXFxuLS1cXG5tbS9odWdldGxiLmM9MjY1Nj1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MTUtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI3MTY6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgb2xkX2ZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTI3MTctXFxuLS1cXG5tbS9odWdldGxiLmM9MzY3Mz1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNjkzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGIuYzozNjk0OlxcdFxcdFxcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTM2OTUtXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZwYWdlX2xpc3QpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM5OTM9bG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQwMTgtXFxubW0vaHVnZXRsYi5jOjQwMTk6XFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy00MDIwLVxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bGlzdCk7XFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmg9NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmgtOTQtXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjk1OmV4dGVybiB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVxcdFxcdFxcdFxcdCBib29sIGFkanVzdF9zdXJwbHVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6MzUuNzcwMjY0MzE0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzg1NzQ2NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgSHVnZXRsYiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBodWdlIHBhZ2VzLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IHN5bWJvbCB2aXNpYmlsaXR5LiBJIHNlZSBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGlzIGRlZmluZWQgaW4gYG1tL2h1Z2V0bGJfaW50ZXJuYWwuaGAsIHdoaWNoIGlzIGdvb2QgZm9yIGludGVybmFsIGtlcm5lbCB1c2UsIGJ1dCBpdCdzICpub3QqIGV4cGxpY2l0bHkgZXhwb3J0ZWQgZm9yIG1vZHVsZXMuIEkga25vdyBpdCdzIHVzZWQgaW4gYG1tL2h1Z2V0bGIuY2AsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gc2luY2UgaXQncyAqbm90KiBgc3RhdGljYCwgdGhhdCBtZWFucyBpdCBjYW4gYmUgYSBmb2N1cyBzeW1ib2wsIGludGVyZXN0aW5nISBJIGFsc28gc2VlIHRoYXQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCBhcmUgKmFsc28qIG5vdCBzdGF0aWMuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHBvdGVudGlhbCB0YXJnZXRzLlxuXG5Ob3csIGxldCBtZSBjaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MuIGBIVUdFVExCRlNgIGlzIHRoZSBiaWcgb25lLCBvYnZpb3VzbHkuIEkgYWxzbyB0aGluayBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgTUVNT1JZX0hPVFBMVUdgIGFyZSByZWxldmFudCBoZXJlLiBUaG9zZSBhcmUgZ29vZCB0YXJnZXRzIHRvIGVuYWJsZS5cblxuT2theSwgbGV0J3MgcmUtcmVhZCB0aGUgcGF0Y2ggaXRzZWxmLiBBaCwgaGVyZSB3ZSBnby4uLiBpdCdzIGFkZGluZyBhIGBWTV9XQVJOX09OX09OQ0UoMSlgIGlmIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgaXMgdHJ1ZS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcuIEFuZCBpbiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgdGhlcmUncyBhIGd1YXJkIG5vdyBhZ2FpbnN0IGRpc3NvbHZpbmcgZ2lnYW50aWMgZm9saW9zICp3aXRob3V0KiBydW50aW1lIHN1cHBvcnQuIFRoZSBjb21tZW50IGNsYXJpZmllcyB3aHk6IGl0IHByZXZlbnRzIGxpc3QgY29ycnVwdGlvbiBkdXJpbmcgdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUgaWYgdGhlIGZvbGlvIGlzbid0IHByb3Blcmx5IGhhbmRsZWQgdXBzdHJlYW0uIEl0IGxvb2tzIGxpa2UgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIGEgc3BlY2lmaWMgY3Jhc2ggb3IgbWVtb3J5IGNvcnJ1cHRpb24gc2NlbmFyaW8uXG5cblNvLCBpbiBteSBqdWRnZW1lbnQsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSXQgdG91Y2hlcyBjcml0aWNhbCBmb2xpbyBtYW5pcHVsYXRpb24uXG5cbkhlcmUncyB0aGUgc3VtbWFyeTpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3NgLCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gXG4qICAgKipFbmFibGVDb25maWdzOioqIGBIVUdFVExCRlNgLCBgTUVNT1JZX0ZBSUxVUkVgLCBgTUVNT1JZX0hPVFBMVUdgXG5cbkFuZCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkuLi4gYEhVR0VUTEJfUEFHRWAgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gU28gZW5hYmxpbmcgYEhVR0VUTEJGU2Agd2lsbCBpbmhlcmVudGx5IGVuYWJsZSBgSFVHRVRMQl9QQUdFYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgaWYgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lYCBoYXMgYW55IHJlbGV2YW50IGNvbmZpZyBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzOTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6NDYuNTU2MDE0NTAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4MTM4NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzkyPXZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDAwLVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjE0MDE6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XFxubW0vaHVnZXRsYi5jLTE0MDItXFx0XFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xcbi0tXFxubW0vaHVnZXRsYi5jPTE0NjE9c3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE0NjUtXFxubW0vaHVnZXRsYi5jOjE0NjY6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XFxubW0vaHVnZXRsYi5jLTE0NjctXFx0XFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xcbi0tXFxubW0vaHVnZXRsYi5jPTE5Njc9aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE5OTEtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjE5OTI6XFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbm1tL2h1Z2V0bGIuYy0xOTkzLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vaHVnZXRsYi5jPTIwOTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjA5NS1cXG5tbS9odWdldGxiLmM6MjA5NjpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXFxubW0vaHVnZXRsYi5jLTIwOTctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9odWdldGxiLmM9MjM2NT1zdGF0aWMgdm9pZCByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMzc0LVxcbm1tL2h1Z2V0bGIuYzoyMzc1OlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiLmMtMjM3Ni1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNjEwPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTM2MzUtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjM2MzY6XFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbm1tL2h1Z2V0bGIuYy0zNjM3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQwNjI9c3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDY4LVxcbm1tL2h1Z2V0bGIuYzo0MDY5OlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiLmMtNDA3MC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xOC0gKi9cXG5tbS9odWdldGxiX2ludGVybmFsLmg6MTk6c3RhdGljIGlubGluZSBib29sIGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIwLXtcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmM9NzA9c3RhdGljIGludCBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNjdGwuYy04MS1cXG5tbS9odWdldGxiX3N5c2N0bC5jOjgyOlxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiX3N5c2N0bC5jLTgzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jPTExNz1zdGF0aWMgc3NpemVfdCBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMjMtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjEyNDpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXFxubW0vaHVnZXRsYl9zeXNmcy5jLTEyNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6NDguMTU0MTU5OTc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzUwNTE4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBJbnRlcm5hbHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIFwiUmlnaHQsIHRoYXQncyBhIG1hY3JvLCBvciBwb3RlbnRpYWxseSBhIGZ1bmN0aW9uLCBkZWZpbmVkIHdpdGhpbiB0aGUgaGVhcnQgb2YgdGhlIEh1Z2VUTEIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGJfaW50ZXJuYWwuaGAuXCIgTXkgbWVudGFsIGdlYXJzIHN0YXJ0IHR1cm5pbmcsIHJlY2FsbGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueXRoaW5nIGZvdW5kIGluIHRoYXQgcGFydGljdWxhciBoZWFkZXIuIEl0IHN1Z2dlc3RzIHRoaXMgaXMgYSBjcnVjaWFsIGludGVybmFsIGRldGFpbC4gR2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBgaHVnZXRsYl9pbnRlcm5hbC5oYCBoZWFkZXIsIGl0J3MgZGVmaW5pdGVseSBub3Qgc29tZXRoaW5nIEknZCBleHBlY3QgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgSHVnZVRMQiBjb3JlLlxuXG5UaGUgbmFtZSBpdHNlbGYsIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZWAsIGltbWVkaWF0ZWx5IGhpbnRzIGF0IGl0cyBwdXJwb3NlLiBJdCdzIGxpa2VseSBjaGVja2luZyBpZiBhIHBhcnRpY3VsYXIgSHVnZVRMQiBwYWdlIHNpemUgKGBoc3RhdGVgKSBpcyBvZiB0aGUgXCJnaWdhbnRpY1wiIHZhcmlldHksIHByb2JhYmx5IHRoZSBsYXJnZXN0IGRlZmluZWQgc2l6ZSwgYW5kICptb3JlIHNpZ25pZmljYW50bHkqLCB0aGF0IGl0IGRvZXMgc28gd2l0aG91dCByZXF1aXJpbmcgcnVudGltZSBjYWxjdWxhdGlvbnMgb3IgZHluYW1pYyBsb29rdXBzLiBNeSBicmFpbiBhbHJlYWR5IHN0YXJ0cyB0byBoeXBvdGhlc2l6ZSBhYm91dCB0aGUgdXNlIGNhc2VzOiB0aGlzIHdvdWxkIGJlIGVzc2VudGlhbCBmb3IgZWZmaWNpZW50LCBmYXN0LXBhdGggY2hlY2tzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgcGFydGljdWxhcmx5IGR1cmluZyBwYWdlIGFsbG9jYXRpb24gb3IgVExCIGhhbmRsaW5nLiBJdCdzIGRlc2lnbmVkIGZvciBzcGVlZC4gVGhpcyByZWluZm9yY2VzIHRoZSBhc3N1bXB0aW9uIHRoaXMgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIGNoZWNrLiBLbm93aW5nIGl0IGlzIGJlaW5nIHVzZWQgaW4gSHVnZVRMQiwgSSBxdWlja2x5IHJlY29nbml6ZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU4NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjUyLjcyOTIxNDQ4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NjA4OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGJfaW50ZXJuYWwuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiX2ludGVybmFsLmgtMTgtICovXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjE5OnN0YXRpYyBpbmxpbmUgYm9vbCBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0yMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjUzLjEzNjgzMjE2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY5MjA3MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIEhlcmUncyBhIHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbXkgZmllbGQsIHN0YXJ0aW5nIHdpdGggdGhlIGJvbGRlZCBoZWFkZXI6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvcmUgQ29uY2VwdCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBCZWZvcmUgSSBldmVuIGJlZ2luIHRvIGZvcm11bGF0ZSBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IEknbSBvcGVyYXRpbmcgZnJvbSBhIHNoYXJlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBjb25jZXB0IGF0IGhhbmQuIEl0J3MgdG9vIGVhc3kgdG8gZ2V0IGxvc3QgaW4gbnVhbmNlcyBhbmQgYXBwbGljYXRpb25zIGlmIHRoZSBmb3VuZGF0aW9uYWwgZGVmaW5pdGlvbiBpc24ndCBhaXJ0aWdodC4gU28sIEknbGwgdGFrZSBhIG1vbWVudCwgYSAqbmVjZXNzYXJ5KiBtb21lbnQsIHRvIG1ldGljdWxvdXNseSBzY3J1dGluaXplIHRoZSBhY2NlcHRlZCBkZWZpbml0aW9uLiBJJ20gbm90IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgdW5kZXJzdGFuZGluZzsgSSdtIHNlZWtpbmcgdGhlIHByZWNpc2UsIG51YW5jZWQgYXJ0aWN1bGF0aW9uIHRoYXQgd2lsbCBzZXJ2ZSBhcyB0aGUgYmVkcm9jayBmb3IgYW55IG1lYW5pbmdmdWwgZGlzY3Vzc2lvbiBvciBhc3Nlc3NtZW50LiBUaGlzIGlzIG5vdCBhYm91dCByb3RlIG1lbW9yaXphdGlvbjsgaXQncyBhYm91dCBpbnRlcm5hbGl6aW5nIHRoZSBjb3JlIGVzc2VuY2UgYW5kIGFueSBzdWJ0bGUgaW1wbGljYXRpb25zIHdpdGhpbiB0aGF0IGRlZmluaXRpb24uIE9ubHkgdGhlbiBjYW4gSSBiZSBjb25maWRlbnQgdGhhdCBJJ20gYnVpbGRpbmcgb24gYSBzb2xpZCBmb3VuZGF0aW9uLCBhbmQgdGhhdCBhbnkgc3Vic2VxdWVudCBleHBsb3JhdGlvbiB3aWxsIGJlIHRydWx5IGluc2lnaHRmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDo1Ni41MDYwNDMwODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYl9pbnRlcm5hbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdCAqIHJ1bnRpbWUgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiBUaGlzIGlzIGEgY29tbW9uIGNvbmRpdGlvbiB1c2VkIHRvXFxuICAxNjpcXHQgKiBza2lwIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIGdpZ2FudGljIHBhZ2VzIHdoZW4gcnVudGltZVxcbiAgMTc6XFx0ICogc3VwcG9ydCBpcyBkaXNhYmxlZC5cXG4gIDE4OlxcdCAqL1xcbiAgMTk6XFx0c3RhdGljIGlubGluZSBib29sIGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKHN0cnVjdCBoc3RhdGUgKmgpXFxuICAyMDpcXHR7XFxuICAyMTpcXHRcXHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2ICFnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKCk7XFxuICAyMjpcXHR9XFxuICAyMzpcXHRcXG4gIDI0OlxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjU2LjUwNjE0MzAxMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI3NDQ4OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipXaGVyZSdzIFRoYXQgRnVuY3Rpb24gRGVmaW5lZD8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYC4gTXkgZmlyc3QgdGhvdWdodCBpcywgd2hlcmUgaW4gdGhlIGNvZGViYXNlIGlzIHRoaXMgYWN0dWFsbHkgKmRlZmluZWQqPyBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbi4gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gQSBzcGVjaWZpYyBzb3VyY2UgZmlsZT8gSXMgaXQgcGFydCBvZiBhIGxpYnJhcnk/IFVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbiBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVmaW5pdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQgZmlsZXMgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ1MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6NTkuNTMzNjAyMzM5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MDgwMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9odWdldGxiLmg9MTk9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2dldF9wc2l6ZShzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaC0zOC0jZGVmaW5lIF9fSEFWRV9BUkNIX0dJR0FOVElDX1BBR0VfUlVOVElNRV9TVVBQT1JURURcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaDozOTpzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaHVnZXRsYi5oLTQwLXtcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oPTExOD1zdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMjQtI2lmbmRlZiBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg6MTI1OnN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTI2LXtcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xOT1zdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoc3RydWN0IGhzdGF0ZSAqaClcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMjAte1xcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoyMTpcXHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2ICFnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKCk7XFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MDEuMTMyNjg4OTY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDc3ODY0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgSHVnZVRMQiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGRlZmluaXRpb24gZmlsZSBmb3IgZ2VuZXJpYyBIdWdlVExCIHN1cHBvcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyB0aGF0IHVuZGVycGluIHRoZSBzeXN0ZW0tYWdub3N0aWMgYXNwZWN0cyBvZiB0aGUgaHVnZSBwYWdlIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgYGluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oYC4gVGhpcyBmaWxlIHNob3VsZCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcsIGxldHRpbmcgbWUgdGhlbiB0cmFjZSBmcm9tIHRoZXJlIGludG8gdGhlIG1vcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaWYgSSBuZWVkIHRvLiBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZ2VuZXJpYyBmdW5jdGlvbmFsaXR5IGlzIHN0cnVjdHVyZWQgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBudWFuY2VzIG9mIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Uga2V5IGRlZmluaXRpb25zLCBhbnkgaW5saW5lIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhZ2UgbWFuYWdlbWVudCBvciBhbGxvY2F0aW9uLCBhbmQgYW55IGNvcmUgc3RydWN0dXJlcyB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MDUuNDgwNDc4NTAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHRyZXR1cm4gcHRlcF9nZXQocHRlcCk7XFxuIDEyMTpcXHR9XFxuIDEyMjpcXHQjZW5kaWZcXG4gMTIzOlxcdFxcbiAxMjQ6XFx0I2lmbmRlZiBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEXFxuIDEyNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKVxcbiAxMjY6XFx0e1xcbiAxMjc6XFx0XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpO1xcbiAxMjg6XFx0fVxcbiAxMjk6XFx0I2VuZGlmIC8qIF9fSEFWRV9BUkNIX0dJR0FOVElDX1BBR0VfUlVOVElNRV9TVVBQT1JURUQgKi9cXG4gMTMwOlxcdFxcbiAxMzE6XFx0I2VuZGlmIC8qIF9BU01fR0VORVJJQ19IVUdFVExCX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MDUuNDgwNTUxMzQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxODg5Mjc3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHaWdhbnRpYyBQYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBoaW5nZXMgb24gYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gUmlnaHQsIGlmIHRoaXMgaXMgZW5hYmxlZCwgdGhlbiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCByZXR1cm5zIHRydWUsIGFuZCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoKWAgcmV0dXJucyBmYWxzZS4gVGhlIHBhdGNoIGluY2x1ZGVzIGEgY2hlY2sgZm9yIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAuIFNvLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICppcyogZW5hYmxlZCwgdGhlbiB0aGlzIGNoZWNrIGlzIGVmZmVjdGl2ZWx5IHNraXBwZWQsIHVubGVzcyB0aGUgYXJjaGl0ZWN0dXJlIGRvZXMgc29tZXRoaW5nIGNsZXZlciB3aXRoIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgIHRvIG1ha2UgaXQgZHluYW1pY2FsbHkgcmV0dXJuIGZhbHNlLlxuXG5CdXQsIGhhbmcgb24sIGlmIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgKm5vdCogZW5hYmxlZCwgdGhlbiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCAqaXMqIGZhbHNlLiBBbmQsIGluIHRoYXQgc2NlbmFyaW8sIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgcmV0dXJucyB0cnVlIGZvciBnaWdhbnRpYyBwYWdlcy4gU28sIHRoaXMgY2hlY2sgKndvdWxkKiBiZSBleGVjdXRlZC5cblxuU28sIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4uLml0IHNvdW5kcyBsaWtlIHdlICp3YW50KiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIHRvIGJlIGRpc2FibGVkPyBPciBtYXliZSBpdCBpcyBlbmFibGVkLCBidXQgdGhlIGFyY2hpdGVjdHVyZSAqc2hvdWxkKiBub3Qgc3VwcG9ydCBnaWdhbnRpYyBwYWdlcyBhdCBydW50aW1lP1xuXG5MZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoIGFnYWluLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICppcyogZGlzYWJsZWQsIHRoZW4sIHdpdGhvdXQgYW4gb3ZlcnJpZGUsIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgICppcyogZmFsc2UsIHJpZ2h0P1xuXG5JIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgYG1tL0tjb25maWdgIG9yIGBhcmNoL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgaW50ZW5kZWQgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDY2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MTEuNjY5NDgxNjg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEwMTM5OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjgzPWNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG4tLVxcbmZzL0tjb25maWctMjg2LVxcbmZzL0tjb25maWc6Mjg3OmNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuZnMvS2NvbmZpZy0yODgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMToxMy4yNzk2MjcyOTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMTM4MTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBcIldoeSBpcyB0aGlzIGJlaW5nIGNoZWNrZWQgaW4gdGhlIGZpcnN0IHBsYWNlP1wiICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIGxhcmdlIG1lbW9yeSBwYWdlcywgb2Z0ZW4gcmVmZXJyZWQgdG8gYXMgaHVnZSBwYWdlcyBvciBnaWdhbnRpYyBwYWdlcywgYWx0aG91Z2ggdGhlIGV4YWN0IHRlcm0gZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uLlxuXG5JJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgSSBrbm93LiAgV2hpY2ggb25lcyAqd291bGRuJ3QqIGhhdmUgdGhpcywgYW5kIHdoeT8gIEFSTT8gIHg4Nj8gIFJJU0MtVj8gIFBvd2VyUEM/ICBJdCdzIHVzdWFsbHkgcHJldHR5IG9idmlvdXMgd2hpY2ggb25lcyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGNvbmNlcHQgaW4gbWluZCwgYnV0IGV2ZW4gdGhlIG9uZXMgdGhhdCBkbyBzdXBwb3J0IHRoaXMsIGhhdmUgdW5pcXVlIGltcGxlbWVudGF0aW9ucyB0byBjb250ZW5kIHdpdGguXG5cblRoZSBjaGVjayBpdHNlbGYgc3VnZ2VzdHMgdGhhdCB0aGUgY29kZSBiYXNlIG5lZWRzIHRvIGFkYXB0IGl0cyBiZWhhdmlvciBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0cyBhbmQgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIHRvIHVzZSByZWFsbHkgYmlnIG1lbW9yeSBwYWdlcy4gIFRoaXMgcHJvYmFibHkgdGllcyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMsIHBhZ2UgdGFibGUgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IG9wdGltaXphdGlvbnMgaW4gZHJpdmVycyBvciBvdGhlciBwZXJmb3JtYW5jZS1jcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuICBJZiBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgZGVmaW5lZCwgdGhlIGNvZGUgbWlnaHQgdXNlIGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBvciBldmVuIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvZGUgcGF0aHMgdG8gbWFuYWdlIHRob3NlIHBvdGVudGlhbGx5IGh1Z2UgY2h1bmtzIG9mIG1lbW9yeS4gIFRoZXJlIG1heSBiZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgdG8gdXNpbmcgdGhpcyBvbiBhbiBhcmNoaXRlY3R1cmUgd2hpY2ggaGFzIHN1cHBvcnQsIGFzIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBhIHNtYWxsZXIgcGFnZSBzaXplIGNhbiBiZWNvbWUgc2lnbmlmaWNhbnQuICBUaGVyZSBhbHNvIG1pZ2h0IGJlIHJlc3RyaWN0aW9ucyB0byBob3cgaXQgY2FuIGJlIHVzZWQsIGhvd2V2ZXIuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIHRvIHNlZSBob3cgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzICp1c2VkKiAtLSB0aGF0J3MgdGhlIHJlYWwga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gIEknbSBsb29raW5nIGZvciB0aGUgYCNpZmRlZiBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBibG9ja3MsIG9idmlvdXNseSwgYnV0IGFsc28gZm9yIGluZGlyZWN0IGRlcGVuZGVuY2llcy4gIFRoZSB1c2UgY2FzZSB3aWxsIHRlbGwgdGhlIHN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjE4LjAxMTAxMjg3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyODAzMjY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zMi1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmFyY2gvYXJtNjQvS2NvbmZpZzozMzpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zNC1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEzOC1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjEzOTpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcdFxcdGlmIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTQwLVxcdHNlbGVjdCBBUkNIX0hBU19LQ09WXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMzUtXFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcXG5hcmNoL3Jpc2N2L0tjb25maWc6MzY6XFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcXG5hcmNoL3Jpc2N2L0tjb25maWctMzctXFx0c2VsZWN0IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk3LVxcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXFxuYXJjaC9zMzkwL0tjb25maWc6OTg6XFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTktXFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxcbmFyY2gvc2gvS2NvbmZpZzoxMDpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmFyY2gvc2gvS2NvbmZpZy0xMS1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTcwPWNvbmZpZyBTUEFSQzY0XFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMTA3LVxcdHNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0lcXG5hcmNoL3NwYXJjL0tjb25maWc6MTA4OlxcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuYXJjaC9zcGFyYy9LY29uZmlnLTEwOS1cXHRzZWxlY3QgSEFWRV9TT0ZUSVJRX09OX09XTl9TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0yMz1jb25maWcgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI2LVxcdCMgT3B0aW9ucyB0aGF0IGFyZSBpbmhlcmVudGx5IDY0LWJpdCBrZXJuZWwgb25seTpcXG5hcmNoL3g4Ni9LY29uZmlnOjI3OlxcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuYXJjaC94ODYvS2NvbmZpZy0yOC1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MTkuNjM5MDU1NTkxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTYzNzM3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEdpZ2FudGljIFBhZ2UgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvZGUgYW5kIHRyeWluZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFyb3VuZCBnaWdhbnRpYyBwYWdlcy4gSXQgc2VlbXMgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGVuYWJsZWQgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlczogeDg2XzY0LCBhcm02NCwgcmlzY3YsIHMzOTAsIHNoLCBzcGFyYzY0LCBhbmQgcG93ZXJwYy4gIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGlmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZW4gYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgKnNob3VsZCogcmV0dXJuIHRydWUuXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uaWYgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgZG9lcyByZXR1cm4gdHJ1ZSwgdGhlbiBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaClgIGlzIHN1cHBvc2VkIHRvIHJldHVybiBmYWxzZS4gIEFuZCBpZiAqdGhhdCogZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIGNvZGUgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGlzbid0IGFjdHVhbGx5IGV4ZWN1dGVkLi4uIHVubGVzcywgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvdmVycmlkZXMgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAuIFNvIHRoZSBiZWhhdmlvciBvZiB0aGUgcGF0Y2ggd2lsbCBkZXBlbmQgb24gdGhlIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbi5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCBpbiBwb3dlcnBjIHNwZWNpZmljYWxseS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgbWlnaHQgaGFwcGVuLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjI1LjA1NTQzMjY1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXHR9XFxuICAzNjpcXHR9XFxuICAzNzpcXHRcXG4gIDM4OlxcdCNkZWZpbmUgX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRFxcbiAgMzk6XFx0c3RhdGljIGlubGluZSBib29sIGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQodm9pZClcXG4gIDQwOlxcdHtcXG4gIDQxOlxcdFxcdC8qXFxuICA0MjpcXHRcXHQgKiBXZSB1c2VkIGdpZ2FudGljIHBhZ2UgcmVzZXJ2YXRpb24gd2l0aCBoeXBlcnZpc29yIGFzc2lzdCBpbiBzb21lIGNhc2UuXFxuICA0MzpcXHRcXHQgKiBXZSBjYW5ub3QgdXNlIHJ1bnRpbWUgYWxsb2NhdGlvbiBvZiBnaWdhbnRpYyBwYWdlcyBpbiB0aG9zZSBwbGF0Zm9ybXNcXG4gIDQ0OlxcdFxcdCAqIFRoaXMgaXMgaGFzaCB0cmFuc2xhdGlvbiBtb2RlIExQQVJzLlxcbiAgNDU6XFx0XFx0ICovXFxuICA0NjpcXHRcXHRpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSBcXHUwMDI2XFx1MDAyNiAhcmFkaXhfZW5hYmxlZCgpKVxcbiAgNDc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MjUuMDU1NTE0MDczWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDg1MDU3NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2lnYW50aWMgUGFnZSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE9uIFBvd2VyUEMsIHRoaXMgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgZnVuY3Rpb24gY291bGQgcmV0dXJuIGBmYWxzZWAsIHdoaWNoIGlzIGZpbmUsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgd2hhdCBhYm91dCB4ODY/IE9uIHg4NiwgaXQgZG9lc24ndCBvdmVycmlkZSB0aGUgZGVmYXVsdCwgc28gaXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgYElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpYC4gVGhhdCdzIGB0cnVlYCBvbiB4ODZfNjQsIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byBsb29rIGZvciB3aGVyZSBhIHBvc3NpYmxlIHByb2JsZW0gbWF5IGJlLiBJZiBpdCdzIHRydWUgb24geDg2XzY0LCB0aGVuIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgKmFsd2F5cyogZW5kcyB1cCBiZWluZyBmYWxzZS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIHRoZSBhZGRlZCBjb25kaXRpb25hbCBgaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKWAgd291bGQgbmV2ZXIgYmUgZW50ZXJlZCBvbiB4ODZfNjQhIEJ1dC4uLiBzeXpib3QgZm91bmQgdGhpcywgYW5kIHN5emJvdCB1c3VhbGx5IHJ1bnMgb24geDg2XzY0LiBUaGF0J3MgY29uZnVzaW5nLlxuXG5Tbywgc3l6Ym90LiBEb2VzIGl0IG9ubHkgcnVuIG9uIHg4Nl82ND8gTWF5YmUgaXQgY2FuIGFsc28gdGVzdCB4ODZfMzI/IExldCdzIGNoZWNrLiBBaCwgc3l6Ym90IGRvZXMgaGF2ZSB4ODZfMzIgaW5zdGFuY2VzLiBIb3dldmVyLCBtYXliZSBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgbm90IGVuYWJsZWQgb24geDg2XzMyPyBXYWl0LCBgQ09ORklHX1g4Nl82NGAgYWN0dWFsbHkgKnNlbGVjdHMqIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gU28gdGhhdCBtZWFucywgb24geDg2XzMyLCBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgTk9UIHNlbGVjdGVkLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgd291bGQgcmV0dXJuIGBmYWxzZWAuIEFuZCBpbiB0aGF0IGNhc2UsIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgd291bGQgcmV0dXJuIGB0cnVlYCBmb3IgZ2lnYW50aWMgcGFnZXMhIE9rYXksIHNvIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZSBvbiB4ODZfMzIsIGFuZCBhbHNvIG9uIFBvd2VyUEMuXG5cbkJ1dCB3YWl0LCBjYW4gc3l6Ym90ICpyZWFsbHkqIHJ1biBvbiB4ODZfMzI/IFllcywgaXQgZG9lcy4gQW5kIGl0IGFsc28gdGVzdHMgb3RoZXIgYXJjaGl0ZWN0dXJlcyBsaWtlIEFSTSBhbmQgUklTQy1WLiBCdXQgY291bGQgc3l6Ym90IGJlIHRlc3RpbmcgYW4geDg2XzY0IGNvbmZpZ3VyYXRpb24gd2l0aCB4ODZfMzIgZW5hYmxlZD8gQWgsIG5vLCBgQ09ORklHX1g4Nl8zMmAgaXMgbm90IGEgdGhpbmcsIGl0J3MgYENPTkZJR19YODZfMzJgIG9yIGBDT05GSUdfWDg2XzY0YC5cblxuT2theSwgYXJlIHRoZXJlIGFueSBvdGhlciB3YXlzIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZWAgY2FuIGJlIHRydWU/IExldCdzIGdvIGJhY2sgYW5kIGNoZWNrIGBoc3RhdGVfaXNfZ2lnYW50aWNgIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMTozNS4xNDA1NzQ0MzlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQyOTk0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHN0YXRlX2lzX2dpZ2FudGljXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTc5OT1zdGF0aWMgaW5saW5lIGJvb2wgb3JkZXJfaXNfZ2lnYW50aWModW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODAzLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjgwNDpzdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljKHN0cnVjdCBoc3RhdGUgKmgpXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODA1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTkyNz1zdGF0aWMgaW5saW5lIGJvb2wgaHVnZXBhZ2VfbW92YWJsZV9zdXBwb3J0ZWQoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTkzMS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo5MzI6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcXHUwMDI2XFx1MDAyNiAhbW92YWJsZV9naWdhbnRpY19wYWdlcylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC05MzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTE4NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBodWdlX3BhZ2Vfc2hpZnQoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExODktXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTE5MDpzdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljKHN0cnVjdCBoc3RhdGUgKmgpXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTE5MS17XFxuLS1cXG5tbS9odWdldGxiLmM9MTM5Mj12b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMTQwMC1cXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbm1tL2h1Z2V0bGIuYzoxNDAxOlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkge1xcbm1tL2h1Z2V0bGIuYy0xNDAyLVxcdFxcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNDYxPXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDY1LVxcbm1tL2h1Z2V0bGIuYzoxNDY2OlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkge1xcbm1tL2h1Z2V0bGIuYy0xNDY3LVxcdFxcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xOTY3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTkxLVxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoxOTkyOlxcdFxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiLmMtMTk5My1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMDkxPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIwOTUtXFxubW0vaHVnZXRsYi5jOjIwOTY6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbm1tL2h1Z2V0bGIuYy0yMDk3LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vaHVnZXRsYi5jPTIxMzk9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNDMtXFxubW0vaHVnZXRsYi5jOjIxNDQ6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcXG5tbS9odWdldGxiLmMtMjE0NS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMzY1PXN0YXRpYyB2b2lkIHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIzNzQtXFxubW0vaHVnZXRsYi5jOjIzNzU6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbm1tL2h1Z2V0bGIuYy0yMzc2LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vaHVnZXRsYi5jPTI3NzM9aW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNzgyLVxcdGZvcl9lYWNoX2hzdGF0ZShoKSB7XFxubW0vaHVnZXRsYi5jOjI3ODM6XFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcXG5tbS9odWdldGxiLmMtMjc4NC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zMjk2PXN0YXRpYyB2b2lkIF9faW5pdCBnYXRoZXJfYm9vdG1lbV9wcmVhbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgbmlkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTMzMjUtXFxubW0vaHVnZXRsYi5jOjMzMjY6XFx0XFx0Vk1fQlVHX09OKCFoc3RhdGVfaXNfZ2lnYW50aWMoaCkpO1xcbm1tL2h1Z2V0bGIuYy0zMzI3LVxcdFxcdFdBUk5fT04oZm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPSAxKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zMzg3PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMzM5My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaC1cXHUwMDNlbWF4X2h1Z2VfcGFnZXNfbm9kZVtuaWRdOyArK2kpIHtcXG5tbS9odWdldGxiLmM6MzM5NDpcXHRcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKSB7XFxubW0vaHVnZXRsYi5jLTMzOTUtXFx0XFx0XFx0aWYgKCFhbGxvY19ib290bWVtX2h1Z2VfcGFnZShoLCBuaWQpKVxcbi0tXFxubW0vaHVnZXRsYi5jPTM1ODA9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtMzU4Ny1cXHQgKi9cXG5tbS9odWdldGxiLmM6MzU4ODpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfY21hX3RvdGFsX3NpemUoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2V0bGIuYy0zNTg5LVxcdCAgICAhaHVnZXRsYl9lYXJseV9jbWEoaCkpIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNjAxLVxcdC8qIGJlbG93IHdpbGwgZG8gYWxsIG5vZGUgYmFsYW5jZWQgYWxsb2MgKi9cXG5tbS9odWdldGxiLmM6MzYwMjpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxcbm1tL2h1Z2V0bGIuYy0zNjAzLVxcdFxcdGFsbG9jYXRlZCA9IGh1Z2V0bGJfZ2lnYW50aWNfcGFnZXNfYWxsb2NfYm9vdChoKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNjEwPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTM2MjQtXFx0XFx0Lyogb3ZlcnNpemUgaHVnZXBhZ2VzIHdlcmUgaW5pdCdlZCBpbiBlYXJseSBib290ICovXFxubW0vaHVnZXRsYi5jOjM2MjU6XFx0XFx0aWYgKCFoc3RhdGVfaXNfZ2lnYW50aWMoaCkpXFxubW0vaHVnZXRsYi5jLTM2MjYtXFx0XFx0XFx0aHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoaCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzYzNS1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6MzYzNjpcXHRcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXFxubW0vaHVnZXRsYi5jLTM2MzctXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9odWdldGxiLmM9MzY3Mz1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNjc5LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjM2ODA6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcXG5tbS9odWdldGxiLmMtMzY4MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9odWdldGxiLmM9Mzc0NT1zdGF0aWMgaW50IHNldF9tYXhfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTM4MDEtXFx0ICovXFxubW0vaHVnZXRsYi5jOjM4MDI6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfQ09OVElHX0FMTE9DKSkge1xcbm1tL2h1Z2V0bGIuYy0zODAzLVxcdFxcdGlmIChjb3VudCBcXHUwMDNlIHBlcnNpc3RlbnRfaHVnZV9wYWdlcyhoKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTQwNjI9c3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDY4LVxcbm1tL2h1Z2V0bGIuYzo0MDY5OlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiLmMtNDA3MC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00NDczPXZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9hbGxvYyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTQ0ODctXFxubW0vaHVnZXRsYi5jOjQ0ODg6XFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcXG5tbS9odWdldGxiLmMtNDQ4OS1cXHRcXHRcXHRodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlcyhoKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjg3PWJvb2wgX19pbml0IGh1Z2V0bGJfZWFybHlfY21hKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI5MS1cXG5tbS9odWdldGxiX2NtYS5jOjI5MjpcXHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfY21hX29ubHk7XFxubW0vaHVnZXRsYl9jbWEuYy0yOTMtfVxcbi0tXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTE4LSAqL1xcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoxOTpzdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoc3RydWN0IGhzdGF0ZSAqaClcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMjAte1xcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoyMTpcXHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2ICFnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKCk7XFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIyLX1cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmM9NzA9c3RhdGljIGludCBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNjdGwuYy04MS1cXG5tbS9odWdldGxiX3N5c2N0bC5jOjgyOlxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiX3N5c2N0bC5jLTgzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jPTExNz1zdGF0aWMgc3NpemVfdCBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMjMtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjEyNDpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXFxubW0vaHVnZXRsYl9zeXNmcy5jLTEyNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MzYuNjM0ODc5NDQ4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NDE5ODg5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBIdWdldGxiIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSXMgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBldmVuIGEgcmVhbCBjb25kaXRpb24/XCIgQnV0IHRoZW4gSSB0cmFjZWQgaXQgdGhyb3VnaCB0aGUgY29kZSDigJMgaXQgKmlzKiB1c2VkIGluIHNldmVyYWwgY3J1Y2lhbCBwbGFjZXM6IGBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZWAsIGBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcmAsIGFuZCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgc28gaXQncyBhIHZhbGlkIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzdGF0ZS4gVGhpcyBwYXRjaCBjb3JyZWN0bHkgYWRkcmVzc2VzIHRoYXQuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIGZvciBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaClgIHdpdGhpbiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYC4gVGhhdCBtYWtlcyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlLiBJdCBzZWVtcyB0aGlzIGZpeCBwcmV2ZW50cyBjb3JydXB0aW9uIGluIHRoZSBmcmVlbGlzdCB3aGVuIGRpc3NvbHZpbmcgYSBnaWdhbnRpYyBmb2xpbyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydCwgd2hpY2ggaGFwcGVucyB1cG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCDigJMgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZTogYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCwgYW5kIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AuXG5cbmBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaG9pY2UsIHNpbmNlIGl0IGNhbGxzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGluIGEgbG9vcC4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBpcyBhbm90aGVyIGdvb2QgY2hvaWNlLCBzaW5jZSBpdCdzIGEgY29yZSBodWdldGxiIGZ1bmN0aW9uIHdpdGggdGhlIGBWTV9XQVJOX09OX09OQ0UoMSlgIGFkZGl0aW9uIGluIHRoZSBwYXRjaCwgd2hpY2ggbWFrZXMgaXQgaW1wb3J0YW50IHRvIHRyYWNlIGFuZCBmdXp6LlxuXG5Gb3IgdGhlIGNvbmZpZ3VyYXRpb25zLCBgSFVHRVRMQkZTYCBpcyBlc3NlbnRpYWwsIHNpbmNlIGl0IGVuYWJsZXMgYEhVR0VUTEJfUEFHRWAuIEFuZCwgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBhcmUgdGhlIGNvcnJlY3QgY29uZmlncyBhcyB0aGV5IGFyZSB0aGUgY2FsbGVycyBvZiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYC5cblxuT2theSwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4NCwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6NDUuMzc2ODcyNjY2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxODEyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zXCIsXG4gICAgXCJyZW1vdmVfaHVnZXRsYl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc1wiLFxuICAgIFwicmVtb3ZlX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBodWdldGxiIHdoZXJlIGRpc3NvbHZpbmcgYSBnaWdhbnRpYyBmb2xpbyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydCB3b3VsZCBsZWF2ZSBpdCBvbiB0aGUgZnJlZSBsaXN0LCBsZWFkaW5nIHRvIGxpc3QgY29ycnVwdGlvbiBvbiB2bWVtbWFwIHJlc3RvcmUgZmFpbHVyZS4gSXQgYWRkcyBhIGNoZWNrIGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIHRvIGJhaWwgb3V0IGVhcmx5IGZvciBzdWNoIGZvbGlvcywgYW5kIGFkZHMgd2FybmluZ3MgaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbWVtb3J5IGhvdHBsdWcgb3IgbWVtb3J5IGZhaWx1cmUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjQ1LjQ1MjA2MDg1NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0NDc1MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjQ1LjQ1MjYzMDkwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDQ0MTU5NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsaXN0IGNvcnJ1cHRpb24gaXNzdWUgaW4gdGhlIGh1Z2V0bGIgc3Vic3lzdGVtIHdoZW4gZGlzc29sdmluZyBnaWdhbnRpYyBwYWdlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydC4gSXQgbW9kaWZpZXMgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggaHN0YXRlcywgYW5kIGFkZHMgd2FybmluZ3MgaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBsaXN0IGNvcnJ1cHRpb24sIHdoaWNoIGNhbiBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMuIFRoZXNlIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDE4YWFmNGYzN2ViMDQyZGVhM2EyYWU4NzYwZTgxNGM5MjUzNzc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDU6MDk6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjY3YTUwMjI5MzY5ODMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzOTgsOCArMTM5OCwxMSBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRWTV9CVUdfT05fRk9MSU8oaHVnZXRsYl9jZ3JvdXBfZnJvbV9mb2xpb19yc3ZkKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxuK1x0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG4rXHRcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cbitcdFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xuIFx0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuIFxuQEAgLTE0NjAsOCArMTQ2MywxMSBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4ge1xuIFx0Ym9vbCBjbGVhcl9mbGFnID0gZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcbiBcbi1cdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbitcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkge1xuK1x0XHQvKiBDYWxsZXJzIG11c3QgZmlsdGVyIGdpZ2FudGljX25vX3J1bnRpbWUgdXBzdHJlYW0uICovXG4rXHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiBcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIElmIHdlIGRvbid0IGtub3cgd2hpY2ggc3VicGFnZXMgYXJlIGh3cG9pc29uZWQsIHdlIGNhbid0IGZyZWVcbkBAIC0xOTc3LDYgKzE5ODMsMTUgQEAgaW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gZm9saW9faHN0YXRlKGZvbGlvKTtcbiBcdFx0Ym9vbCBhZGp1c3Rfc3VycGx1cyA9IGZhbHNlO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpL3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgYmFpbFxuK1x0XHQgKiBmb3IgZ2lnYW50aWMgaHN0YXRlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydCwgc28gZGlzc29sdmluZyBvbmVcbitcdFx0ICogaGVyZSB3b3VsZCBsZWF2ZSBpdCBvbiB0aGUgZnJlZSBsaXN0IGFuZCwgb24gdm1lbW1hcCByZXN0b3JlXG4rXHRcdCAqIGZhaWx1cmUsIHRoZSBhZGRfaHVnZXRsYl9mb2xpbygpIHJvbGxiYWNrIGNvcnJ1cHRzIHRoYXQgbGlzdC5cbitcdFx0ICovXG4rXHRcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbiBcdFx0aWYgKCFhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjQ1LjQ1MjYzMTgyNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDQ0MTM4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgZ2lnYW50aWMgcGFnZXMgYXJlIGhhbmRsZWQgd2hlbiBydW50aW1lIHN1cHBvcnQgaXNuJ3QgcHJlc2VudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBjb25jZXJucywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGNvbnRyb2wgZmxvdyBhbmQgbGlzdCBtYW5hZ2VtZW50LiBJdCdzIGFkZGluZyBgVk1fV0FSTl9PTl9PTkNFKDEpYCBjYWxscyB3aXRoaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIHdoZW4gYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBpcyB0cnVlLiBJdCdzIGFsc28gYmFpbGluZyBvdXQgZWFybHkgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9uLiBUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gcHJldmVudCBsaXN0IGNvcnJ1cHRpb24sIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2Ygdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuXG5cbk5vdywgY29uc2lkZXJpbmcgbXkgYXJlYSBvZiBleHBlcnRpc2UsIGxldCdzIGRyaWxsIGludG8gdGhlIEtNU0FOIGltcGxpY2F0aW9ucy4gVGhlIHByaW1hcnkgd29ycnkgaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhpcyBsb29rcyBsaWtlIGEgY29udHJvbC1mbG93IGNoYW5nZSBkZXNpZ25lZCB0byAqYXZvaWQqIG1lbW9yeSBzYWZldHkgaXNzdWVzIHJhdGhlciB0aGFuIGludHJvZHVjZSBuZXcgb25lcy4gVGhlIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBmaWVsZHMgd2l0aGluIHN0cnVjdHMsIGFuZCBub3RoaW5nIGlzIGJlaW5nIHdyaXR0ZW4gdG8gdXNlcnNwYWNlIHRoYXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMuIENydWNpYWxseSwgSSBzZWUgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBjcmVhdGluZyBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cblxuTGlzdCBjb3JydXB0aW9uIGlzIGEgd2VsbC1kZWZpbmVkIGNsYXNzIG9mIG1lbW9yeSBzYWZldHkgaXNzdWVzIC0tIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGV0Yy4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29scyBhcmUgYWxyZWFkeSB3ZWxsIGVxdWlwcGVkIHRvIGNhdGNoIHRob3NlIGtpbmRzIG9mIHByb2JsZW1zLiBUaGlzIHBhdGNoIGlzIHNpbXBseSB0aWdodGVuaW5nIHRoZSBleGlzdGluZyBtZWNoYW5pc21zIHRvIHByZXZlbnQgdGhvc2Ugc2NlbmFyaW9zIGluIGEgc3BlY2lmaWMgZWRnZSBjYXNlLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzLCB0aGUgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoJ3MgY2hhbmdlcyBwcmV2ZW50IGEgc3BlY2lmaWMgbGlzdCBjb3JydXB0aW9uIGlzc3VlIHdoZW4gZGlzc29sdmluZyBnaWdhbnRpYyBwYWdlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydC4gVGhpcyBpcyBhIGNvbnRyb2wtZmxvdyBjaGFuZ2UsIGltcHJvdmluZyBtZW1vcnkgc2FmZXR5IGJ5IGF2b2lkaW5nIGNlcnRhaW4gbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZC4gVGhlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFkZHJlc3NlZCBhcmUgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIGV4aXN0aW5nIGRlYnVnZ2luZyB0b29scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwOCwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMTo1NC40OTY3NzM1NDdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowtlrm9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 04:53:25 +0000 UTC FinishedAt: 2026-08-23 05:11:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9be9236e9c27a8ba64e06902e26d1e4a9b0a736d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE", "MEMORY_HOTPLUG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9be9236e9c27a8ba64e06902e26d1e4a9b0a736d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE", "MEMORY_HOTPLUG" ], "series_id": "9382a3a9-5af9-4190-9e20-14d5d33dc7bb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dissolve_free_hugetlb_folio", "dissolve_free_hugetlb_folios", "remove_hugetlb_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zJiMzNDssCiAgICAmIzM0O3JlbW92ZV9odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgbGlzdCBjb3JydXB0aW9uIGlzc3VlIGluIHRoZSBodWdldGxiIHN1YnN5c3RlbSB3aGVuIGRpc3NvbHZpbmcgZ2lnYW50aWMgcGFnZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQuIEl0IG1vZGlmaWVzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIHRvIGJhaWwgb3V0IGVhcmx5IGZvciBzdWNoIGhzdGF0ZXMsIGFuZCBhZGRzIHdhcm5pbmdzIGluIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgYW5kIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYC4gVGhlc2UgY2hhbmdlcyBwcmV2ZW50IGxpc3QgY29ycnVwdGlvbiBvbiB2bWVtbWFwIHJlc3RvcmUgZmFpbHVyZS4gVGhlIGJ1Z3MgcHJldmVudGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIHJlbGF0ZWQgdG8gbGlzdCBjb3JydXB0aW9uLCB3aGljaCBjYW4gbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLiBUaGVzZSBhcmUgd2VsbCB3aXRoaW4gdGhlIHNjb3BlIG9mIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2guIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFkMThhYWY0ZjM3ZWIwNDJkZWEzYTJhZTg3NjBlODE0YzkyNTM3NzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwNTowOTo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjY3YTUwMjI5MzY5ODMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzOTgsOCAmIzQzOzEzOTgsMTEgQEAgdm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Vk1fQlVHX09OX0ZPTElPKGh1Z2V0bGJfY2dyb3VwX2Zyb21fZm9saW9fcnN2ZChmb2xpbyksIGZvbGlvKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbiYjNDM7XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHtcbiYjNDM7XHRcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cbiYjNDM7XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiBcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdGxpc3RfZGVsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSk7XG4gXG5AQCAtMTQ2MCw4ICYjNDM7MTQ2MywxMSBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4ge1xuIFx0Ym9vbCBjbGVhcl9mbGFnID0gZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcbiBcbi1cdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbiYjNDM7XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHtcbiYjNDM7XHRcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cbiYjNDM7XHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiBcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBkb24mIzM5O3Qga25vdyB3aGljaCBzdWJwYWdlcyBhcmUgaHdwb2lzb25lZCwgd2UgY2FuJiMzOTt0IGZyZWVcbkBAIC0xOTc3LDYgJiM0MzsxOTgzLDE1IEBAIGludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShmb2xpbyk7XG4gXHRcdGJvb2wgYWRqdXN0X3N1cnBsdXMgPSBmYWxzZTtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpL3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgYmFpbFxuJiM0MztcdFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXG4mIzQzO1x0XHQgKiBoZXJlIHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QgYW5kLCBvbiB2bWVtbWFwIHJlc3RvcmVcbiYjNDM7XHRcdCAqIGZhaWx1cmUsIHRoZSBhZGRfaHVnZXRsYl9mb2xpbygpIHJvbGxiYWNrIGNvcnJ1cHRzIHRoYXQgbGlzdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRcdGlmICghYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zJiMzNDssCiAgICAmIzM0O3JlbW92ZV9odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkMThhYWY0ZjM3ZWIwNDJkZWEzYTJhZTg3NjBlODE0YzkyNTM3NzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyMyAwNTowOTo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBlOTNjNGQyNDU2YWE0Li42N2E1MDIyOTM2OTgzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzk4LDggJiM0MzsxMzk4LDExIEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbywKIAlWTV9CVUdfT05fRk9MSU8oaHVnZXRsYl9jZ3JvdXBfZnJvbV9mb2xpb19yc3ZkKGZvbGlvKSwgZm9saW8pOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2h1Z2V0bGJfbG9jayk7Ci0JaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKQomIzQzOwlpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHsKJiM0MzsJCS8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi8KJiM0MzsJCVZNX1dBUk5fT05fT05DRSgxKTsKIAkJcmV0dXJuOwomIzQzOwl9CiAKIAlsaXN0X2RlbCgmYW1wO2ZvbGlvLSZndDtscnUpOwogCkBAIC0xNDYwLDggJiM0MzsxNDYzLDExIEBAIHN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIHsKIAlib29sIGNsZWFyX2ZsYWcgPSBmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pOwogCi0JaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKQomIzQzOwlpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHsKJiM0MzsJCS8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi8KJiM0MzsJCVZNX1dBUk5fT05fT05DRSgxKTsKIAkJcmV0dXJuOwomIzQzOwl9CiAKIAkvKgogCSAqIElmIHdlIGRvbiYjMzk7dCBrbm93IHdoaWNoIHN1YnBhZ2VzIGFyZSBod3BvaXNvbmVkLCB3ZSBjYW4mIzM5O3QgZnJlZQpAQCAtMTk3Nyw2ICYjNDM7MTk4MywxNSBAQCBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCXN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUoZm9saW8pOwogCQlib29sIGFkanVzdF9zdXJwbHVzID0gZmFsc2U7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpL3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgYmFpbAomIzQzOwkJICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lCiYjNDM7CQkgKiBoZXJlIHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QgYW5kLCBvbiB2bWVtbWFwIHJlc3RvcmUKJiM0MzsJCSAqIGZhaWx1cmUsIHRoZSBhZGRfaHVnZXRsYl9mb2xpbygpIHJvbGxiYWNrIGNvcnJ1cHRzIHRoYXQgbGlzdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwogCQlpZiAoIWF2YWlsYWJsZV9odWdlX3BhZ2VzKGgpKQogCQkJZ290byBvdXQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBodWdldGxiIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdldGxiLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIGZldyBjb25kaXRpb25hbCBjaGVja3MuIEZpcnN0LCBpbiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKClgLCB0aGVyZSYjMzk7cyBub3cgYW4gYGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlgIGNoZWNrLCBhbmQgaXQgYmFpbHMgb3V0IGVhcmx5IGlmIHRoYXQgY29uZGl0aW9uIGlzIG1ldC4gVGhleSBhbHNvIHRocmV3IGluIGBWTV9XQVJOX09OX09OQ0UoMSlgIHN0YXRlbWVudHMgd2l0aGluIGByZW1vdmVfaHVnZXRsYl9mb2xpbygpYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKWAg4oCTIGFnYWluLCB0cmlnZ2VyZWQgd2hlbiBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaClgIGlzIHRydWUuCgpSaWdodCwgc28gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpYCBpcyByZXNwb25zaWJsZSBmb3IgZGlzc29sdmluZyBmcmVlIGh1Z2V0bGIgZm9saW9zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGdpZ2FudGljIGZvbGlvcywgbGlrZWx5IHRob3NlIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBUaGUgY2hhbmdlIGlzIHRvIHByZXZlbnQgYXR0ZW1wdGluZyB0byBkaXNzb2x2ZSBhIGdpZ2FudGljIGZvbGlvIHRoYXQgKnNob3VsZG4mIzM5O3QqIGJlIGRpc3NvbHZlZCBiZWNhdXNlIG9mIHRoZSBgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKWAgb3IgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKWAgYmFpbC1vdXRzLiBTZWVtcyB0aGUgb3JpZ2luYWwgY29kZSB3YXMgbGVhZGluZyB0byBwb3RlbnRpYWwgbGlzdCBjb3JydXB0aW9uIGR1cmluZyB2bWVtbWFwIHJlc3RvcmUgZmFpbHVyZSBpZiB0aGUgZm9saW8gZW5kZWQgdXAgb24gdGhlIGZyZWUgbGlzdC4KClRoaXMgc2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBjb2RlIGZvciBodWdldGxiIGhhbmRsaW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0LiBXaGVyZSBpcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBhY3R1YWxseSAqdXNlZCo/IEkga25vdyBpdCBpcyBjYWxsZWQgZnJvbSBgZGlzc29sdmVfZnJlZV9odWdlX3BhZ2VgIGFuZCBgZGlzc29sdmVfZnJlZV9odWdlX3BhZ2VzYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRob3NlIGNhbGwgc2l0ZXMgdG8gc2VlIGlmIHRoZSBuZXcgY2hlY2sgaXMgcmVhY2hhYmxlIGluIHJlYWwtd29ybGQgc2NlbmFyaW9zLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9ODcxPXN0YXRpYyBpbmxpbmUgaW50IGhzdGF0ZV9pbmRleChzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg3NS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjg3NjppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODc3OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODc4LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTIwNT1zdGF0aWMgaW5saW5lIGludCBoc3RhdGVfaW5kZXgoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjA5LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTIxMDpzdGF0aWMgaW5saW5lIGludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyMTEte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyMTQtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjE1OnN0YXRpYyBpbmxpbmUgaW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjE2LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vaHVnZXRsYi5jPTE5Mjk9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmVtb3ZlX3Bvb2xfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xOTY2LSAqL1xubW0vaHVnZXRsYi5jOjE5Njc6aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vaHVnZXRsYi5jLTE5Njgte1xuLS1cbm1tL2h1Z2V0bGIuYy0yMDU5LSAqIHBhcnQgb2YgaXQgbGllcyB3aXRoaW4gdGhlIGdpdmVuIHJhbmdlLlxubW0vaHVnZXRsYi5jOjIwNjA6ICogQWxzbyBub3RlIHRoYXQgaWYgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKCkgcmV0dXJucyB3aXRoIGFuIGVycm9yLCBhbGxcbm1tL2h1Z2V0bGIuYy0yMDYxLSAqIGZyZWUgaHVnZXRsYiBmb2xpb3MgdGhhdCB3ZXJlIGRpc3NvbHZlZCBiZWZvcmUgdGhhdCBlcnJvciBhcmUgbG9zdC5cbm1tL2h1Z2V0bGIuYy0yMDYyLSAqL1xubW0vaHVnZXRsYi5jOjIwNjM6aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbm1tL2h1Z2V0bGIuYy0yMDY0LXtcbi0tXG5tbS9odWdldGxiLmMtMjA3OS1cdFx0Zm9saW8gPSBwZm5fZm9saW8ocGZuKTtcbm1tL2h1Z2V0bGIuYzoyMDgwOlx0XHRyYyA9IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhmb2xpbyk7XG5tbS9odWdldGxiLmMtMjA4MS1cdFx0aWYgKHJjKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTcxPXN0YXRpYyBpbnQgX19wYWdlX2hhbmRsZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzUtXHR6b25lX3BjcF9kaXNhYmxlKHBhZ2Vfem9uZShwYWdlKSk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3NjpcdHJldCA9IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhwYWdlX2ZvbGlvKHBhZ2UpKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc3LVx0aWYgKCFyZXQpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODQ9c3RhdGljIGJvb2wgcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGh1Z2VwYWdlX29yX2ZyZWVwYWdlLCBib29sIHJlbGVhc2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODgtXHRcdCAqIERvaW5nIHRoaXMgY2hlY2sgZm9yIGZyZWUgcGFnZXMgaXMgYWxzbyBmaW5lIHNpbmNlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE4OTpcdFx0ICogZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKCkgcmV0dXJucyAwIGZvciBub24taHVnZXRsYiBmb2xpb3MgYXMgd2VsbC5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkwLVx0XHQgKi9cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDMzLVx0XHQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MjAzNDpcdFx0cmV0ID0gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyhzdGFydF9wZm4sIGVuZF9wZm4pO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDM1LVx0XHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gKioKCk9rYXksIHNvIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCBoYXMgbXVsdGlwbGUgY2FsbCBwYXRocy4gSXQmIzM5O3MgcmVhY2hlZCBmcm9tIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgb2ZmbGluZV9wYWdlc2AgcmVsYXRlZCB0byBtZW1vcnkgaG90cGx1ZywgYW5kIGFsc28gZnJvbSBgX19wYWdlX2hhbmRsZV9wb2lzb25gLCB3aGljaCBkZWFscyB3aXRoIG1lbW9yeSBmYWlsdXJlLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24sIG5vdCBzb21lIGRlYWQgY29kZS4gR2l2ZW4gdGhhdCBpdCBoYXMgdGhlc2UgdHdvIGRpc3RpbmN0IHBhdGhzLCBib3RoIHRpZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gY29uZmlkZW50IGl0JiMzOTtzIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBzaG91bGQgZmxhZyB0aGlzIGFzIHNvbWV0aGluZyB0byBmdXp6LCBkZWZpbml0ZWx5LCBhbmQgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpUaGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kIGFyZSBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3NgLCBhcyB0aGV5IGFyZSB0aGUgY29yZSBvZiB0aGlzLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGlzIHVzZWQgd2hlbiBgSFVHRVRMQl9QQUdFYCBpcyBlbmFibGVkIGFuZCBlaXRoZXIgYE1FTU9SWV9IT1RQTFVHYCBvciBgTUVNT1JZX0ZBSUxVUkVgIGFyZSBhbHNvLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIGBtbS9odWdldGxiLmNgIHRvIHNlZSBob3cgdGhlc2UgY29uZmlncyBpbnRlcmFjdCB3aXRoIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIEh1Z2UgUGFnZXMgYW5kIE1lbW9yeSBGYWlsdXJlcyoqCgpSaWdodCwgc28gYEhVR0VUTEJfUEFHRWAuLi4gdGhhdCBsb29rcyBsaWtlIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYEhVR0VUTEJGU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdCYjMzk7cyBhIGBkZWZfYm9vbGAsIG1lYW5pbmcgYEhVR0VUTEJGU2AgaXMgdGhlIGFjdHVhbCBjb25maWcgb3B0aW9uIHdlIG5lZWQgdG8gZW5hYmxlIGh1Z2UgcGFnZXMgZnVuY3Rpb25hbGl0eS4gR290IGl0LgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgYXJlYXMuIEdpdmVuIHRoaXMgZm9jdXMgb24gbWVtb3J5LCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyBgTUVNT1JZX0ZBSUxVUkVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIGluIHRob3NlIHNjZW5hcmlvcywgZXNwZWNpYWxseSB3aXRoIGh1Z2UgcGFnZXMgaW52b2x2ZWQuIE1pZ2h0IGJlIGFuIGludGVyZXN0aW5nIGludGVycGxheSB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uczogTWVtb3J5KioKClJpZ2h0LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhpcyBtZW1vcnkgY29uZmlndXJhdGlvbi4gYE1FTU9SWV9GQUlMVVJFYCDigJMgeWVhaCwgdGhhdCBmZWVscyByaWdodCwgdGhhdCYjMzk7cyBhIHNvbGlkIGNob2ljZSBmb3IgZXJyb3IgaGFuZGxpbmcsIGZvciByZXNpbGllbmNlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gZ3JhY2VmdWxseSBoYW5kbGUgcG90ZW50aWFsIG1lbW9yeSBmYWlsdXJlcywgYW5kIHRoYXQgY29uZmlnIHByb2JhYmx5IG9mZmVycyBhIHJvYnVzdCBtZWNoYW5pc20uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBBbmQgdGhlbiwgcmVsYXRlZCB0byB0aGF0LCBgTUVNT1JZX0hPVFBMVUdgIGlzIGNydWNpYWwuIFRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IGFkZCBvciByZW1vdmUgbWVtb3J5IHdpdGhvdXQgYSByZWJvb3Q/IEFic29sdXRlbHkgZXNzZW50aWFsIGZvciBhbnkgbW9kZXJuIHN5c3RlbSB0aGF0IG5lZWRzIHRvIGJlIGhpZ2hseSBhdmFpbGFibGUgb3IgZWFzaWx5IHNjYWxlZC4gSXQgdGllcyBpbiBwZXJmZWN0bHkgd2l0aCBhIGdvb2QgZmFpbHVyZSBzdHJhdGVneS4gVGhlc2UgdHdvIGNvbmZpZ3VyYXRpb25zLCB3b3JraW5nIHRvZ2V0aGVyLCBjcmVhdGUgYSBtb3JlIHJvYnVzdCBtZW1vcnkgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0hPVFBMVUcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MTk9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4tLVxubW0vS2NvbmZpZy01MjItIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICYjMzk7c2VsZWN0IFNQQVJTRU1FTSYjMzk7XG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUyNC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2V0bGIgRm9saW8gSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYEhVR0VUTEJGU2AsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgTUVNT1JZX0hPVFBMVUdgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGZvbGlvIG1hbmFnZW1lbnQsIGZvY3VzaW5nIG9uIGhvdyB0aGVzZSBpbnRlcmFjdC4gSSYjMzk7bSBpbW1lZGlhdGVseSBkcmF3biB0byBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBoYXMgYSB3aWRlIHJlYWNoOyBpdCYjMzk7cyBjYWxsZWQgYnkgYHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGZyZWVfaHVnZV9mb2xpb2AsIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AsIGBpc29sYXRlX2h1Z2V0bGJgLCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgaW4gY29tcGFyaXNvbiwgc2VlbXMgbW9yZSBmb2N1c2VkLCBjYWxsZWQgb25seSBieSBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFuZCBgZnJlZV9ocGFnZV93b3JrZm5gLgoKVGhlIHBhdGNoIHRhcmdldHMgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIEtub3dpbmcgdGhhdCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2Agc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGl0JiMzOTtzIGEgY3JpdGljYWwgZm9jdXMuIEJ1dCBzbyBpcyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBnaXZlbiBob3cgZmFyLXJlYWNoaW5nIGl0cyBpbXBhY3QgaXMuIFdpdGggYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGJlaW5nIHN0YXRpYywgSSYjMzk7bSB0aGlua2luZyBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIHRoZSBiZXR0ZXIgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gR290dGEgY29uZmlybSBpdCYjMzk7cyBub3Qgc3RhdGljIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xNDMxPXZvaWQgYWRkX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMTQ2MC1cbm1tL2h1Z2V0bGIuYzoxNDYxOnN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy0xNDYyLVx0XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE1MjAtLypcbm1tL2h1Z2V0bGIuYzoxNTIxOiAqIEFzIHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgY2FuIGJlIGNhbGxlZCB1bmRlciBhbnkgY29udGV4dCwgc28gd2UgY2Fubm90XG5tbS9odWdldGxiLmMtMTUyMi0gKiB1c2UgR0ZQX0tFUk5FTCB0byBhbGxvY2F0ZSB2bWVtbWFwIHBhZ2VzLiBIb3dldmVyLCB3ZSBjYW4gZGVmZXIgdGhlXG4tLVxubW0vaHVnZXRsYi5jPTE1MzM9c3RhdGljIHZvaWQgZnJlZV9ocGFnZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNTU0LVxubW0vaHVnZXRsYi5jOjE1NTU6XHRcdF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8pO1xubW0vaHVnZXRsYi5jLTE1NTYtXG4tLVxubW0vaHVnZXRsYi5jPTE1NjI9c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ZyZWVfaHBhZ2Vfd29yayhzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNTY3LVxubW0vaHVnZXRsYi5jOjE1Njg6c3RhdGljIHZvaWQgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2h1Z2V0bGIuYy0xNTY5LVx0XHRcdFx0IGJvb2wgYXRvbWljKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNTcxLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZWQoZm9saW8pIHx8ICFhdG9taWMpIHtcbm1tL2h1Z2V0bGIuYzoxNTcyOlx0XHRfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvKTtcbm1tL2h1Z2V0bGIuYy0xNTczLVx0XHRyZXR1cm47XG4tLVxubW0vaHVnZXRsYi5jPTE1ODc9c3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTYwNS1cdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNjA2Olx0XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMTYwNy1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9odWdldGxiLmMtMTYzMC1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjE2MzE6XHRcdFx0XHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTE2MzItXHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9odWdldGxiLmM9MTYzOD1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNjczLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0X2ZvbGlvLCBcdTAwMjZub25faHZvX2ZvbGlvcywgbHJ1KSB7XG5tbS9odWdldGxiLmM6MTY3NDpcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy0xNjc1LVx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9odWdldGxiLmM9MTY5MD12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xNzQ0LVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xubW0vaHVnZXRsYi5jOjE3NDU6XHRcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCB0cnVlKTtcbm1tL2h1Z2V0bGIuYy0xNzQ2LVx0fSBlbHNlIGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25pZF0pIHtcbi0tXG5tbS9odWdldGxiLmMtMTc0OS1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYzoxNzUwOlx0XHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgdHJ1ZSk7XG5tbS9odWdldGxiLmMtMTc1MS1cdH0gZWxzZSB7XG4tLVxubW0vaHVnZXRsYi5jPTE5Njc9aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy0xOTg2LVx0XHQvKlxubW0vaHVnZXRsYi5jOjE5ODc6XHRcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvKCkvdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKSBiYWlsXG5tbS9odWdldGxiLmMtMTk4OC1cdFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXG4tLVxubW0vaHVnZXRsYi5jLTIwNDYtXG5tbS9odWdldGxiLmM6MjA0NzpcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy0yMDQ4LVx0XHRyZXR1cm4gcmM7XG4tLVxubW0vaHVnZXRsYi5jPTI2NTY9c3RhdGljIGludCBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMjcyOC1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MjcyOTpcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgb2xkX2ZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMjczMC1cdH1cbi0tXG5tbS9odWdldGxiLmMtMjczNi1cdGlmIChuZXdfZm9saW8pXG5tbS9odWdldGxiLmM6MjczNzpcdFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgbmV3X2ZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMjczOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgwMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlVExCIEZvbGlvIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEh1Z2VUTEIgZm9saW8gbWFuYWdlbWVudCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0IGFuZCBub3QgYWNjZXNzaWJsZSBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUuIEdvb2QgdG8ga25vdy4gQnV0LCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYW5kIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCBhcmUgKm5vdCogZGVjbGFyZWQgYHN0YXRpY2AuIFRoYXQgaW1wbGllcyBhIGJyb2FkZXIgc2NvcGUsIHBvdGVudGlhbGx5IGJlaW5nIGNhbGxlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGFuZCBhIGRldGFpbCB0byBrZWVwIGluIG1pbmQuIE5vdywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbiBhbmQgY2FsbCBzaXRlcyB0byBzZWUgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZS4gSXQmIzM5O3MgdGhlIG1vc3QgcGVydGluZW50IGZ1bmN0aW9uIHRvIGV4YW1pbmUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM3Nz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcbi0tXG5tbS9odWdldGxiLmMtMTM5MS0gKi9cbm1tL2h1Z2V0bGIuYzoxMzkyOnZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2h1Z2V0bGIuYy0xMzkzLVx0XHRcdCAgYm9vbCBhZGp1c3Rfc3VycGx1cylcbi0tXG5tbS9odWdldGxiLmM9MTUzMz1zdGF0aWMgdm9pZCBmcmVlX2hwYWdlX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vaHVnZXRsYi5jLTE1NDktXHRcdCAqIGZvbGlvX2hzdGF0ZSgpIGlzIGdvaW5nIHRvIHRyaWdnZXIgYmVjYXVzZSBhIHByZXZpb3VzIGNhbGwgdG9cbm1tL2h1Z2V0bGIuYzoxNTUwOlx0XHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpIHdpbGwgY2xlYXIgdGhlIGh1Z2V0bGIgYml0LCBzbyBkb1xubW0vaHVnZXRsYi5jLTE1NTEtXHRcdCAqIG5vdCB1c2UgZm9saW9faHN0YXRlKCkgZGlyZWN0bHkuXG4tLVxubW0vaHVnZXRsYi5jPTE2OTA9dm9pZCBmcmVlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTc0Mi1cdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdGVtcG9yYXJ5KGZvbGlvKSkge1xubW0vaHVnZXRsYi5jOjE3NDM6XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMTc0NC1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmMtMTc0Ny1cdFx0LyogcmVtb3ZlIHRoZSBwYWdlIGZyb20gYWN0aXZlIGxpc3QgKi9cbm1tL2h1Z2V0bGIuYzoxNzQ4Olx0XHRyZW1vdmVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgdHJ1ZSk7XG5tbS9odWdldGxiLmMtMTc0OS1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcbi0tXG5tbS9odWdldGxiLmM9MTkyOT1zdGF0aWMgc3RydWN0IGZvbGlvICpyZW1vdmVfcG9vbF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5NDQtXHRcdFx0XHRcdCAgc3RydWN0IGZvbGlvLCBscnUpO1xubW0vaHVnZXRsYi5jOjE5NDU6XHRcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFjY3Rfc3VycGx1cyk7XG5tbS9odWdldGxiLmMtMTk0Ni1cdFx0XHRicmVhaztcbi0tXG5tbS9odWdldGxiLmM9MTk2Nz1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE5ODYtXHRcdC8qXG5tbS9odWdldGxiLmM6MTk4NzpcdFx0ICogcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKS91cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpIGJhaWxcbm1tL2h1Z2V0bGIuYy0xOTg4LVx0XHQgKiBmb3IgZ2lnYW50aWMgaHN0YXRlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydCwgc28gZGlzc29sdmluZyBvbmVcbi0tXG5tbS9odWdldGxiLmMtMjAxOC1cdFx0XHRhZGp1c3Rfc3VycGx1cyA9IHRydWU7XG5tbS9odWdldGxiLmM6MjAxOTpcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcbm1tL2h1Z2V0bGIuYy0yMDIwLVx0XHRoLVx1MDAzZW1heF9odWdlX3BhZ2VzLS07XG4tLVxubW0vaHVnZXRsYi5jLTIwMzEtXHRcdCAqIFRoZSBmb2xpb190ZXN0X2h1Z2V0bGIgY2hlY2sgaGVyZSBpcyBiZWNhdXNlXG5tbS9odWdldGxiLmM6MjAzMjpcdFx0ICogcmVtb3ZlX2h1Z2V0bGJfZm9saW8gd2lsbCBjbGVhciBodWdldGxiIGZvbGlvIGZsYWcgZm9yXG5tbS9odWdldGxiLmMtMjAzMy1cdFx0ICogbm9uLXZtZW1tYXAgb3B0aW1pemVkIGh1Z2V0bGIgZm9saW9zLlxuLS1cbm1tL2h1Z2V0bGIuYz0yNjU2PXN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG4tLVxubW0vaHVnZXRsYi5jLTI3MTUtXHRcdCAqL1xubW0vaHVnZXRsYi5jOjI3MTY6XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIG9sZF9mb2xpbywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTI3MTctXG4tLVxubW0vaHVnZXRsYi5jPTM2NzM9c3RhdGljIHZvaWQgdHJ5X3RvX2ZyZWVfbG93KHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4tLVxubW0vaHVnZXRsYi5jLTM2OTMtXHRcdFx0XHRjb250aW51ZTtcbm1tL2h1Z2V0bGIuYzozNjk0Olx0XHRcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtMzY5NS1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNnBhZ2VfbGlzdCk7XG4tLVxubW0vaHVnZXRsYi5jPTM5OTM9bG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxuLS1cbm1tL2h1Z2V0bGIuYy00MDE4LVxubW0vaHVnZXRsYi5jOjQwMTk6XHRcdFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTQwMjAtXHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZsaXN0KTtcbi0tXG5tbS9odWdldGxiX2ludGVybmFsLmg9NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk0LVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjk1OmV4dGVybiB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9odWdldGxiX2ludGVybmFsLmgtOTYtXHRcdFx0XHQgYm9vbCBhZGp1c3Rfc3VycGx1cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzOTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1ODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBIdWdldGxiIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyBhYm91dCBzeW1ib2wgdmlzaWJpbGl0eS4gSSBzZWUgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBpcyBkZWZpbmVkIGluIGBtbS9odWdldGxiX2ludGVybmFsLmhgLCB3aGljaCBpcyBnb29kIGZvciBpbnRlcm5hbCBrZXJuZWwgdXNlLCBidXQgaXQmIzM5O3MgKm5vdCogZXhwbGljaXRseSBleHBvcnRlZCBmb3IgbW9kdWxlcy4gSSBrbm93IGl0JiMzOTtzIHVzZWQgaW4gYG1tL2h1Z2V0bGIuY2AsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gc2luY2UgaXQmIzM5O3MgKm5vdCogYHN0YXRpY2AsIHRoYXQgbWVhbnMgaXQgY2FuIGJlIGEgZm9jdXMgc3ltYm9sLCBpbnRlcmVzdGluZyEgSSBhbHNvIHNlZSB0aGF0IGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGFuZCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc2AgYXJlICphbHNvKiBub3Qgc3RhdGljLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBwb3RlbnRpYWwgdGFyZ2V0cy4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncy4gYEhVR0VUTEJGU2AgaXMgdGhlIGJpZyBvbmUsIG9idmlvdXNseS4gSSBhbHNvIHRoaW5rIGBNRU1PUllfRkFJTFVSRWAgYW5kIGBNRU1PUllfSE9UUExVR2AgYXJlIHJlbGV2YW50IGhlcmUuIFRob3NlIGFyZSBnb29kIHRhcmdldHMgdG8gZW5hYmxlLgoKT2theSwgbGV0JiMzOTtzIHJlLXJlYWQgdGhlIHBhdGNoIGl0c2VsZi4gQWgsIGhlcmUgd2UgZ28uLi4gaXQmIzM5O3MgYWRkaW5nIGEgYFZNX1dBUk5fT05fT05DRSgxKWAgaWYgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBpcyB0cnVlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZy4gQW5kIGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCB0aGVyZSYjMzk7cyBhIGd1YXJkIG5vdyBhZ2FpbnN0IGRpc3NvbHZpbmcgZ2lnYW50aWMgZm9saW9zICp3aXRob3V0KiBydW50aW1lIHN1cHBvcnQuIFRoZSBjb21tZW50IGNsYXJpZmllcyB3aHk6IGl0IHByZXZlbnRzIGxpc3QgY29ycnVwdGlvbiBkdXJpbmcgdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUgaWYgdGhlIGZvbGlvIGlzbiYjMzk7dCBwcm9wZXJseSBoYW5kbGVkIHVwc3RyZWFtLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgYSBzcGVjaWZpYyBjcmFzaCBvciBtZW1vcnkgY29ycnVwdGlvbiBzY2VuYXJpby4KClNvLCBpbiBteSBqdWRnZW1lbnQsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSXQgdG91Y2hlcyBjcml0aWNhbCBmb2xpbyBtYW5pcHVsYXRpb24uCgpIZXJlJiMzOTtzIHRoZSBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUKKiAgICoqRm9jdXNTeW1ib2xzOioqIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc2AsIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSFVHRVRMQkZTYCwgYE1FTU9SWV9GQUlMVVJFYCwgYE1FTU9SWV9IT1RQTFVHYAoKQW5kIHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeS4uLiBgSFVHRVRMQl9QQUdFYCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIGBkZWZfYm9vbCBIVUdFVExCRlNgLiBTbyBlbmFibGluZyBgSFVHRVRMQkZTYCB3aWxsIGluaGVyZW50bHkgZW5hYmxlIGBIVUdFVExCX1BBR0VgLgoKSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgaWYgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lYCBoYXMgYW55IHJlbGV2YW50IGNvbmZpZyBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xMzkyPXZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMTQwMC1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNDAxOlx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG5tbS9odWdldGxiLmMtMTQwMi1cdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz0xNDYxPXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTQ2NS1cbm1tL2h1Z2V0bGIuYzoxNDY2Olx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG5tbS9odWdldGxiLmMtMTQ2Ny1cdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz0xOTY3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTk5MS1cdFx0ICovXG5tbS9odWdldGxiLmM6MTk5MjpcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxubW0vaHVnZXRsYi5jLTE5OTMtXHRcdFx0Z290byBvdXQ7XG4tLVxubW0vaHVnZXRsYi5jPTIwOTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIwOTUtXG5tbS9odWdldGxiLmM6MjA5NjpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGIuYy0yMDk3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9odWdldGxiLmM9MjM2NT1zdGF0aWMgdm9pZCByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjM3NC1cbm1tL2h1Z2V0bGIuYzoyMzc1Olx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxubW0vaHVnZXRsYi5jLTIzNzYtXHRcdGdvdG8gb3V0O1xuLS1cbm1tL2h1Z2V0bGIuYz0zNjEwPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNjM1LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzozNjM2Olx0XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiLmMtMzYzNy1cdFx0XHRjb250aW51ZTtcbi0tXG5tbS9odWdldGxiLmM9NDA2Mj1zc2l6ZV90IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxuLS1cbm1tL2h1Z2V0bGIuYy00MDY4LVxubW0vaHVnZXRsYi5jOjQwNjk6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiLmMtNDA3MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTE4LSAqL1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjE5OnN0YXRpYyBpbmxpbmUgYm9vbCBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIwLXtcbi0tXG5tbS9odWdldGxiX3N5c2N0bC5jPTcwPXN0YXRpYyBpbnQgaHVnZXRsYl9vdmVyY29tbWl0X2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcbi0tXG5tbS9odWdldGxiX3N5c2N0bC5jLTgxLVxubW0vaHVnZXRsYl9zeXNjdGwuYzo4MjpcdGlmICh3cml0ZSBcdTAwMjZcdTAwMjYgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiX3N5c2N0bC5jLTgzLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5tbS9odWdldGxiX3N5c2ZzLmM9MTE3PXN0YXRpYyBzc2l6ZV90IG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMjMtXG5tbS9odWdldGxiX3N5c2ZzLmM6MTI0Olx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxubW0vaHVnZXRsYl9zeXNmcy5jLTEyNS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTg2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gSHVnZVRMQiBJbnRlcm5hbHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWVgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDtSaWdodCwgdGhhdCYjMzk7cyBhIG1hY3JvLCBvciBwb3RlbnRpYWxseSBhIGZ1bmN0aW9uLCBkZWZpbmVkIHdpdGhpbiB0aGUgaGVhcnQgb2YgdGhlIEh1Z2VUTEIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGJfaW50ZXJuYWwuaGAuJiMzNDsgTXkgbWVudGFsIGdlYXJzIHN0YXJ0IHR1cm5pbmcsIHJlY2FsbGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueXRoaW5nIGZvdW5kIGluIHRoYXQgcGFydGljdWxhciBoZWFkZXIuIEl0IHN1Z2dlc3RzIHRoaXMgaXMgYSBjcnVjaWFsIGludGVybmFsIGRldGFpbC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBpbiB0aGUgYGh1Z2V0bGJfaW50ZXJuYWwuaGAgaGVhZGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBzb21ldGhpbmcgSSYjMzk7ZCBleHBlY3QgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgSHVnZVRMQiBjb3JlLgoKVGhlIG5hbWUgaXRzZWxmLCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWVgLCBpbW1lZGlhdGVseSBoaW50cyBhdCBpdHMgcHVycG9zZS4gSXQmIzM5O3MgbGlrZWx5IGNoZWNraW5nIGlmIGEgcGFydGljdWxhciBIdWdlVExCIHBhZ2Ugc2l6ZSAoYGhzdGF0ZWApIGlzIG9mIHRoZSAmIzM0O2dpZ2FudGljJiMzNDsgdmFyaWV0eSwgcHJvYmFibHkgdGhlIGxhcmdlc3QgZGVmaW5lZCBzaXplLCBhbmQgKm1vcmUgc2lnbmlmaWNhbnRseSosIHRoYXQgaXQgZG9lcyBzbyB3aXRob3V0IHJlcXVpcmluZyBydW50aW1lIGNhbGN1bGF0aW9ucyBvciBkeW5hbWljIGxvb2t1cHMuIE15IGJyYWluIGFscmVhZHkgc3RhcnRzIHRvIGh5cG90aGVzaXplIGFib3V0IHRoZSB1c2UgY2FzZXM6IHRoaXMgd291bGQgYmUgZXNzZW50aWFsIGZvciBlZmZpY2llbnQsIGZhc3QtcGF0aCBjaGVja3Mgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbiBvciBUTEIgaGFuZGxpbmcuIEl0JiMzOTtzIGRlc2lnbmVkIGZvciBzcGVlZC4gVGhpcyByZWluZm9yY2VzIHRoZSBhc3N1bXB0aW9uIHRoaXMgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIGNoZWNrLiBLbm93aW5nIGl0IGlzIGJlaW5nIHVzZWQgaW4gSHVnZVRMQiwgSSBxdWlja2x5IHJlY29nbml6ZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfaW50ZXJuYWwuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiX2ludGVybmFsLmgtMTgtICovXG5tbS9odWdldGxiX2ludGVybmFsLmg6MTk6c3RhdGljIGlubGluZSBib29sIGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKHN0cnVjdCBoc3RhdGUgKmgpXG5tbS9odWdldGxiX2ludGVybmFsLmgtMjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIEhlcmUmIzM5O3MgYSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBteSBmaWVsZCwgc3RhcnRpbmcgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvcmUgQ29uY2VwdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gZm9ybXVsYXRlIGEgY29tcHJlaGVuc2l2ZSBhbmFseXNpcywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgSSYjMzk7bSBvcGVyYXRpbmcgZnJvbSBhIHNoYXJlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBjb25jZXB0IGF0IGhhbmQuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIGdldCBsb3N0IGluIG51YW5jZXMgYW5kIGFwcGxpY2F0aW9ucyBpZiB0aGUgZm91bmRhdGlvbmFsIGRlZmluaXRpb24gaXNuJiMzOTt0IGFpcnRpZ2h0LiBTbywgSSYjMzk7bGwgdGFrZSBhIG1vbWVudCwgYSAqbmVjZXNzYXJ5KiBtb21lbnQsIHRvIG1ldGljdWxvdXNseSBzY3J1dGluaXplIHRoZSBhY2NlcHRlZCBkZWZpbml0aW9uLiBJJiMzOTttIG5vdCBsb29raW5nIGZvciBhIHN1cGVyZmljaWFsIHVuZGVyc3RhbmRpbmc7IEkmIzM5O20gc2Vla2luZyB0aGUgcHJlY2lzZSwgbnVhbmNlZCBhcnRpY3VsYXRpb24gdGhhdCB3aWxsIHNlcnZlIGFzIHRoZSBiZWRyb2NrIGZvciBhbnkgbWVhbmluZ2Z1bCBkaXNjdXNzaW9uIG9yIGFzc2Vzc21lbnQuIFRoaXMgaXMgbm90IGFib3V0IHJvdGUgbWVtb3JpemF0aW9uOyBpdCYjMzk7cyBhYm91dCBpbnRlcm5hbGl6aW5nIHRoZSBjb3JlIGVzc2VuY2UgYW5kIGFueSBzdWJ0bGUgaW1wbGljYXRpb25zIHdpdGhpbiB0aGF0IGRlZmluaXRpb24uIE9ubHkgdGhlbiBjYW4gSSBiZSBjb25maWRlbnQgdGhhdCBJJiMzOTttIGJ1aWxkaW5nIG9uIGEgc29saWQgZm91bmRhdGlvbiwgYW5kIHRoYXQgYW55IHN1YnNlcXVlbnQgZXhwbG9yYXRpb24gd2lsbCBiZSB0cnVseSBpbnNpZ2h0ZnVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfaW50ZXJuYWwuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHQgKiBydW50aW1lIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gVGhpcyBpcyBhIGNvbW1vbiBjb25kaXRpb24gdXNlZCB0b1xuICAxNjpcdCAqIHNraXAgb3BlcmF0aW9ucyB0aGF0IGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gZ2lnYW50aWMgcGFnZXMgd2hlbiBydW50aW1lXG4gIDE3Olx0ICogc3VwcG9ydCBpcyBkaXNhYmxlZC5cbiAgMTg6XHQgKi9cbiAgMTk6XHRzdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoc3RydWN0IGhzdGF0ZSAqaClcbiAgMjA6XHR7XG4gIDIxOlx0XHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiAhZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpO1xuICAyMjpcdH1cbiAgMjM6XHRcbiAgMjQ6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKldoZXJlJiMzOTtzIFRoYXQgRnVuY3Rpb24gRGVmaW5lZD8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBhY3R1YWxseSAqZGVmaW5lZCo/IEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uLiBJcyBpdCBpbiBhIGhlYWRlciBmaWxlPyBBIHNwZWNpZmljIHNvdXJjZSBmaWxlPyBJcyBpdCBwYXJ0IG9mIGEgbGlicmFyeT8gVW5kZXJzdGFuZGluZyBpdHMgb3JpZ2luIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBkZWZpbml0aW9uIHRvIGZpZ3VyZSBvdXQgd2hhdCBmaWxlcyB0byBzdGFydCBkaWdnaW5nIHRocm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9odWdldGxiLmg9MTk9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2dldF9wc2l6ZShzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9odWdldGxiLmgtMzgtI2RlZmluZSBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaDozOTpzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9odWdldGxiLmgtNDAte1xuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oPTExOD1zdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTI0LSNpZm5kZWYgX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg6MTI1OnN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMjYte1xuLS1cbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xOT1zdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoc3RydWN0IGhzdGF0ZSAqaClcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0yMC17XG5tbS9odWdldGxiX2ludGVybmFsLmg6MjE6XHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFx1MDAyNlx1MDAyNiAhZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpO1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGRlZmluaXRpb24gZmlsZSBmb3IgZ2VuZXJpYyBIdWdlVExCIHN1cHBvcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyB0aGF0IHVuZGVycGluIHRoZSBzeXN0ZW0tYWdub3N0aWMgYXNwZWN0cyBvZiB0aGUgaHVnZSBwYWdlIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgYGluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oYC4gVGhpcyBmaWxlIHNob3VsZCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcsIGxldHRpbmcgbWUgdGhlbiB0cmFjZSBmcm9tIHRoZXJlIGludG8gdGhlIG1vcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaWYgSSBuZWVkIHRvLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiBob3cgdGhlIGdlbmVyaWMgZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkIGJlZm9yZSBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbnVhbmNlcyBvZiBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBrZXkgZGVmaW5pdGlvbnMsIGFueSBpbmxpbmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcGFnZSBtYW5hZ2VtZW50IG9yIGFsbG9jYXRpb24sIGFuZCBhbnkgY29yZSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNlbnRyYWwgdG8gdGhlIGh1Z2UgcGFnZSBpbXBsZW1lbnRhdGlvbiBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRyZXR1cm4gcHRlcF9nZXQocHRlcCk7XG4gMTIxOlx0fVxuIDEyMjpcdCNlbmRpZlxuIDEyMzpcdFxuIDEyNDpcdCNpZm5kZWYgX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRFxuIDEyNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXG4gMTI2Olx0e1xuIDEyNzpcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpO1xuIDEyODpcdH1cbiAxMjk6XHQjZW5kaWYgLyogX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRCAqL1xuIDEzMDpcdFxuIDEzMTpcdCNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfSFVHRVRMQl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDY2CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2lnYW50aWMgUGFnZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBoaW5nZXMgb24gYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gUmlnaHQsIGlmIHRoaXMgaXMgZW5hYmxlZCwgdGhlbiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCByZXR1cm5zIHRydWUsIGFuZCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoKWAgcmV0dXJucyBmYWxzZS4gVGhlIHBhdGNoIGluY2x1ZGVzIGEgY2hlY2sgZm9yIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAuIFNvLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICppcyogZW5hYmxlZCwgdGhlbiB0aGlzIGNoZWNrIGlzIGVmZmVjdGl2ZWx5IHNraXBwZWQsIHVubGVzcyB0aGUgYXJjaGl0ZWN0dXJlIGRvZXMgc29tZXRoaW5nIGNsZXZlciB3aXRoIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgIHRvIG1ha2UgaXQgZHluYW1pY2FsbHkgcmV0dXJuIGZhbHNlLgoKQnV0LCBoYW5nIG9uLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzICpub3QqIGVuYWJsZWQsIHRoZW4gYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgKmlzKiBmYWxzZS4gQW5kLCBpbiB0aGF0IHNjZW5hcmlvLCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaClgIHJldHVybnMgdHJ1ZSBmb3IgZ2lnYW50aWMgcGFnZXMuIFNvLCB0aGlzIGNoZWNrICp3b3VsZCogYmUgZXhlY3V0ZWQuCgpTbywgdGhlIGludGVuZGVkIGJlaGF2aW9yLi4uaXQgc291bmRzIGxpa2Ugd2UgKndhbnQqIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgdG8gYmUgZGlzYWJsZWQ/IE9yIG1heWJlIGl0IGlzIGVuYWJsZWQsIGJ1dCB0aGUgYXJjaGl0ZWN0dXJlICpzaG91bGQqIG5vdCBzdXBwb3J0IGdpZ2FudGljIHBhZ2VzIGF0IHJ1bnRpbWU/CgpMZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoIGFnYWluLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICppcyogZGlzYWJsZWQsIHRoZW4sIHdpdGhvdXQgYW4gb3ZlcnJpZGUsIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgICppcyogZmFsc2UsIHJpZ2h0PwoKSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBvciBgYXJjaC9LY29uZmlnYCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAuIFRoYXQgc2hvdWxkIGNsYXJpZnkgdGhlIGludGVuZGVkIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI4Mz1jb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG4tLVxuZnMvS2NvbmZpZy0yODYtXG5mcy9LY29uZmlnOjI4Nzpjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuZnMvS2NvbmZpZy0yODgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjQ4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLiAgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6ICYjMzQ7V2h5IGlzIHRoaXMgYmVpbmcgY2hlY2tlZCBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsgIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiAgSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIGxhcmdlIG1lbW9yeSBwYWdlcywgb2Z0ZW4gcmVmZXJyZWQgdG8gYXMgaHVnZSBwYWdlcyBvciBnaWdhbnRpYyBwYWdlcywgYWx0aG91Z2ggdGhlIGV4YWN0IHRlcm0gZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uLgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcyBJIGtub3cuICBXaGljaCBvbmVzICp3b3VsZG4mIzM5O3QqIGhhdmUgdGhpcywgYW5kIHdoeT8gIEFSTT8gIHg4Nj8gIFJJU0MtVj8gIFBvd2VyUEM/ICBJdCYjMzk7cyB1c3VhbGx5IHByZXR0eSBvYnZpb3VzIHdoaWNoIG9uZXMgYXJlIGRlc2lnbmVkIHdpdGggdGhpcyBjb25jZXB0IGluIG1pbmQsIGJ1dCBldmVuIHRoZSBvbmVzIHRoYXQgZG8gc3VwcG9ydCB0aGlzLCBoYXZlIHVuaXF1ZSBpbXBsZW1lbnRhdGlvbnMgdG8gY29udGVuZCB3aXRoLgoKVGhlIGNoZWNrIGl0c2VsZiBzdWdnZXN0cyB0aGF0IHRoZSBjb2RlIGJhc2UgbmVlZHMgdG8gYWRhcHQgaXRzIGJlaGF2aW9yIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1cHBvcnRzIGFuZCB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHJlYWxseSBiaWcgbWVtb3J5IHBhZ2VzLiAgVGhpcyBwcm9iYWJseSB0aWVzIGludG8gbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgcGFnZSB0YWJsZSBoYW5kbGluZywgb3IgcG90ZW50aWFsbHkgb3B0aW1pemF0aW9ucyBpbiBkcml2ZXJzIG9yIG90aGVyIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGtlcm5lbCBzdWJzeXN0ZW1zLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiAgSWYgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGRlZmluZWQsIHRoZSBjb2RlIG1pZ2h0IHVzZSBkaWZmZXJlbnQgZGF0YSBzdHJ1Y3R1cmVzLCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiwgb3IgZXZlbiBjb21wbGV0ZWx5IGRpZmZlcmVudCBjb2RlIHBhdGhzIHRvIG1hbmFnZSB0aG9zZSBwb3RlbnRpYWxseSBodWdlIGNodW5rcyBvZiBtZW1vcnkuICBUaGVyZSBtYXkgYmUgYSBwZXJmb3JtYW5jZSBiZW5lZml0IHRvIHVzaW5nIHRoaXMgb24gYW4gYXJjaGl0ZWN0dXJlIHdoaWNoIGhhcyBzdXBwb3J0LCBhcyBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggYSBzbWFsbGVyIHBhZ2Ugc2l6ZSBjYW4gYmVjb21lIHNpZ25pZmljYW50LiAgVGhlcmUgYWxzbyBtaWdodCBiZSByZXN0cmljdGlvbnMgdG8gaG93IGl0IGNhbiBiZSB1c2VkLCBob3dldmVyLgoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIHRvIHNlZSBob3cgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzICp1c2VkKiAtLSB0aGF0JiMzOTtzIHRoZSByZWFsIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuICBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBgI2lmZGVmIEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGJsb2Nrcywgb2J2aW91c2x5LCBidXQgYWxzbyBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiAgVGhlIHVzZSBjYXNlIHdpbGwgdGVsbCB0aGUgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0zMi1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL2FybTY0L0tjb25maWc6MzM6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC9hcm02NC9LY29uZmlnLTM0LVx0c2VsZWN0IEFSQ0hfSEFTX0tDT1Zcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEzOC1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxMzk6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVx0XHRpZiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuYXJjaC9wb3dlcnBjL0tjb25maWctMTQwLVx0c2VsZWN0IEFSQ0hfSEFTX0tDT1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTM1LVx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcbmFyY2gvcmlzY3YvS2NvbmZpZzozNjpcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG5hcmNoL3Jpc2N2L0tjb25maWctMzctXHRzZWxlY3QgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy05Ny1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG5hcmNoL3MzOTAvS2NvbmZpZzo5ODpcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cdHNlbGVjdCBBUkNIX0hBU19LQ09WXG4tLVxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxuLS1cbmFyY2gvc2gvS2NvbmZpZy05LVx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuYXJjaC9zaC9LY29uZmlnOjEwOlx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmFyY2gvc2gvS2NvbmZpZy0xMS1cdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTcwPWNvbmZpZyBTUEFSQzY0XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnLTEwNy1cdHNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0lcbmFyY2gvc3BhcmMvS2NvbmZpZzoxMDg6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC9zcGFyYy9LY29uZmlnLTEwOS1cdHNlbGVjdCBIQVZFX1NPRlRJUlFfT05fT1dOX1NUQUNLXG4tLVxuYXJjaC94ODYvS2NvbmZpZz0yMz1jb25maWcgWDg2XzY0XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yNi1cdCMgT3B0aW9ucyB0aGF0IGFyZSBpbmhlcmVudGx5IDY0LWJpdCBrZXJuZWwgb25seTpcbmFyY2gveDg2L0tjb25maWc6Mjc6XHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxuYXJjaC94ODYvS2NvbmZpZy0yOC1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01TRUFMX1NZU1RFTV9NQVBQSU5HU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQwNgoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgR2lnYW50aWMgUGFnZSBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb2RlIGFuZCB0cnlpbmcgdG8gZm9sbG93IHRoZSBsb2dpYyBhcm91bmQgZ2lnYW50aWMgcGFnZXMuIEl0IHNlZW1zIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBpcyBlbmFibGVkIGFjcm9zcyBzZXZlcmFsIGFyY2hpdGVjdHVyZXM6IHg4Nl82NCwgYXJtNjQsIHJpc2N2LCBzMzkwLCBzaCwgc3BhcmM2NCwgYW5kIHBvd2VycGMuICBUaGUga2V5IGhlcmUgaXMgdGhhdCBpZiB0aGF0IGZsYWcgaXMgc2V0LCB0aGVuIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgICpzaG91bGQqIHJldHVybiB0cnVlLgoKQnV0IHdhaXQgYSBtaW51dGUuLi5pZiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCBkb2VzIHJldHVybiB0cnVlLCB0aGVuIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIGZhbHNlLiAgQW5kIGlmICp0aGF0KiBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB0aGUgY29kZSB0aGlzIHBhdGNoIGludHJvZHVjZXMgaXNuJiMzOTt0IGFjdHVhbGx5IGV4ZWN1dGVkLi4uIHVubGVzcywgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvdmVycmlkZXMgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAuIFNvIHRoZSBiZWhhdmlvciBvZiB0aGUgcGF0Y2ggd2lsbCBkZXBlbmQgb24gdGhlIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbi4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb24gb2YgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgaW4gcG93ZXJwYyBzcGVjaWZpY2FsbHkuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIG1pZ2h0IGhhcHBlbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcdH1cbiAgMzY6XHR9XG4gIDM3Olx0XG4gIDM4Olx0I2RlZmluZSBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEXG4gIDM5Olx0c3RhdGljIGlubGluZSBib29sIGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQodm9pZClcbiAgNDA6XHR7XG4gIDQxOlx0XHQvKlxuICA0MjpcdFx0ICogV2UgdXNlZCBnaWdhbnRpYyBwYWdlIHJlc2VydmF0aW9uIHdpdGggaHlwZXJ2aXNvciBhc3Npc3QgaW4gc29tZSBjYXNlLlxuICA0MzpcdFx0ICogV2UgY2Fubm90IHVzZSBydW50aW1lIGFsbG9jYXRpb24gb2YgZ2lnYW50aWMgcGFnZXMgaW4gdGhvc2UgcGxhdGZvcm1zXG4gIDQ0Olx0XHQgKiBUaGlzIGlzIGhhc2ggdHJhbnNsYXRpb24gbW9kZSBMUEFScy5cbiAgNDU6XHRcdCAqL1xuICA0NjpcdFx0aWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikgXHUwMDI2XHUwMDI2ICFyYWRpeF9lbmFibGVkKCkpXG4gIDQ3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDg6XHRcbiAgNDk6XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA2MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdpZ2FudGljIFBhZ2UgQ29kZSBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE9uIFBvd2VyUEMsIHRoaXMgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgZnVuY3Rpb24gY291bGQgcmV0dXJuIGBmYWxzZWAsIHdoaWNoIGlzIGZpbmUsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgd2hhdCBhYm91dCB4ODY/IE9uIHg4NiwgaXQgZG9lc24mIzM5O3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQsIHNvIGl0IHJldHVybnMgdGhlIHZhbHVlIG9mIGBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKWAuIFRoYXQmIzM5O3MgYHRydWVgIG9uIHg4Nl82NCwgd2hpY2ggaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGxvb2sgZm9yIHdoZXJlIGEgcG9zc2libGUgcHJvYmxlbSBtYXkgYmUuIElmIGl0JiMzOTtzIHRydWUgb24geDg2XzY0LCB0aGVuIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgKmFsd2F5cyogZW5kcyB1cCBiZWluZyBmYWxzZS4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiB0aGUgYWRkZWQgY29uZGl0aW9uYWwgYGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlgIHdvdWxkIG5ldmVyIGJlIGVudGVyZWQgb24geDg2XzY0ISBCdXQuLi4gc3l6Ym90IGZvdW5kIHRoaXMsIGFuZCBzeXpib3QgdXN1YWxseSBydW5zIG9uIHg4Nl82NC4gVGhhdCYjMzk7cyBjb25mdXNpbmcuCgpTbywgc3l6Ym90LiBEb2VzIGl0IG9ubHkgcnVuIG9uIHg4Nl82ND8gTWF5YmUgaXQgY2FuIGFsc28gdGVzdCB4ODZfMzI/IExldCYjMzk7cyBjaGVjay4gQWgsIHN5emJvdCBkb2VzIGhhdmUgeDg2XzMyIGluc3RhbmNlcy4gSG93ZXZlciwgbWF5YmUgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIG5vdCBlbmFibGVkIG9uIHg4Nl8zMj8gV2FpdCwgYENPTkZJR19YODZfNjRgIGFjdHVhbGx5ICpzZWxlY3RzKiBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAuIFNvIHRoYXQgbWVhbnMsIG9uIHg4Nl8zMiwgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIE5PVCBzZWxlY3RlZC4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCB3b3VsZCByZXR1cm4gYGZhbHNlYC4gQW5kIGluIHRoYXQgY2FzZSwgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCB3b3VsZCByZXR1cm4gYHRydWVgIGZvciBnaWdhbnRpYyBwYWdlcyEgT2theSwgc28gdGhpcyBjb2RlICppcyogcmVhY2hhYmxlIG9uIHg4Nl8zMiwgYW5kIGFsc28gb24gUG93ZXJQQy4KCkJ1dCB3YWl0LCBjYW4gc3l6Ym90ICpyZWFsbHkqIHJ1biBvbiB4ODZfMzI/IFllcywgaXQgZG9lcy4gQW5kIGl0IGFsc28gdGVzdHMgb3RoZXIgYXJjaGl0ZWN0dXJlcyBsaWtlIEFSTSBhbmQgUklTQy1WLiBCdXQgY291bGQgc3l6Ym90IGJlIHRlc3RpbmcgYW4geDg2XzY0IGNvbmZpZ3VyYXRpb24gd2l0aCB4ODZfMzIgZW5hYmxlZD8gQWgsIG5vLCBgQ09ORklHX1g4Nl8zMmAgaXMgbm90IGEgdGhpbmcsIGl0JiMzOTtzIGBDT05GSUdfWDg2XzMyYCBvciBgQ09ORklHX1g4Nl82NGAuCgpPa2F5LCBhcmUgdGhlcmUgYW55IG90aGVyIHdheXMgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lYCBjYW4gYmUgdHJ1ZT8gTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNoZWNrIGBoc3RhdGVfaXNfZ2lnYW50aWNgIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzdGF0ZV9pc19naWdhbnRpYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD03OTk9c3RhdGljIGlubGluZSBib29sIG9yZGVyX2lzX2dpZ2FudGljKHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04MDMtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4MDQ6c3RhdGljIGlubGluZSBib29sIGhzdGF0ZV9pc19naWdhbnRpYyhzdHJ1Y3QgaHN0YXRlICpoKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODA1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD05Mjc9c3RhdGljIGlubGluZSBib29sIGh1Z2VwYWdlX21vdmFibGVfc3VwcG9ydGVkKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtOTMxLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6OTMyOlx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcdTAwMjZcdTAwMjYgIW1vdmFibGVfZ2lnYW50aWNfcGFnZXMpXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC05MzMtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTg1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh1Z2VfcGFnZV9zaGlmdChzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExODktXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTkwOnN0YXRpYyBpbmxpbmUgYm9vbCBoc3RhdGVfaXNfZ2lnYW50aWMoc3RydWN0IGhzdGF0ZSAqaClcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExOTEte1xuLS1cbm1tL2h1Z2V0bGIuYz0xMzkyPXZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9odWdldGxiLmMtMTQwMC1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoxNDAxOlx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG5tbS9odWdldGxiLmMtMTQwMi1cdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz0xNDYxPXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTQ2NS1cbm1tL2h1Z2V0bGIuYzoxNDY2Olx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG5tbS9odWdldGxiLmMtMTQ2Ny1cdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz0xOTY3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiLmMtMTk5MS1cdFx0ICovXG5tbS9odWdldGxiLmM6MTk5MjpcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxubW0vaHVnZXRsYi5jLTE5OTMtXHRcdFx0Z290byBvdXQ7XG4tLVxubW0vaHVnZXRsYi5jPTIwOTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIwOTUtXG5tbS9odWdldGxiLmM6MjA5NjpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGIuYy0yMDk3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5tbS9odWdldGxiLmM9MjEzOT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTIxNDMtXG5tbS9odWdldGxiLmM6MjE0NDpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWMoaCkpXG5tbS9odWdldGxiLmMtMjE0NS1cdFx0cmV0dXJuIE5VTEw7XG4tLVxubW0vaHVnZXRsYi5jPTIzNjU9c3RhdGljIHZvaWQgcmV0dXJuX3VudXNlZF9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIzNzQtXG5tbS9odWdldGxiLmM6MjM3NTpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGIuYy0yMzc2LVx0XHRnb3RvIG91dDtcbi0tXG5tbS9odWdldGxiLmM9Mjc3Mz1pbnQgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuLS1cbm1tL2h1Z2V0bGIuYy0yNzgyLVx0Zm9yX2VhY2hfaHN0YXRlKGgpIHtcbm1tL2h1Z2V0bGIuYzoyNzgzOlx0XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxubW0vaHVnZXRsYi5jLTI3ODQtXHRcdFx0Y29udGludWU7XG4tLVxubW0vaHVnZXRsYi5jPTMyOTY9c3RhdGljIHZvaWQgX19pbml0IGdhdGhlcl9ib290bWVtX3ByZWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBuaWQpXG4tLVxubW0vaHVnZXRsYi5jLTMzMjUtXG5tbS9odWdldGxiLmM6MzMyNjpcdFx0Vk1fQlVHX09OKCFoc3RhdGVfaXNfZ2lnYW50aWMoaCkpO1xubW0vaHVnZXRsYi5jLTMzMjctXHRcdFdBUk5fT04oZm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPSAxKTtcbi0tXG5tbS9odWdldGxiLmM9MzM4Nz1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zMzkzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaC1cdTAwM2VtYXhfaHVnZV9wYWdlc19ub2RlW25pZF07ICYjNDM7JiM0MztpKSB7XG5tbS9odWdldGxiLmM6MzM5NDpcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSkge1xubW0vaHVnZXRsYi5jLTMzOTUtXHRcdFx0aWYgKCFhbGxvY19ib290bWVtX2h1Z2VfcGFnZShoLCBuaWQpKVxuLS1cbm1tL2h1Z2V0bGIuYz0zNTgwPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNTg3LVx0ICovXG5tbS9odWdldGxiLmM6MzU4ODpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfY21hX3RvdGFsX3NpemUoKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2V0bGIuYy0zNTg5LVx0ICAgICFodWdldGxiX2Vhcmx5X2NtYShoKSkge1xuLS1cbm1tL2h1Z2V0bGIuYy0zNjAxLVx0LyogYmVsb3cgd2lsbCBkbyBhbGwgbm9kZSBiYWxhbmNlZCBhbGxvYyAqL1xubW0vaHVnZXRsYi5jOjM2MDI6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxubW0vaHVnZXRsYi5jLTM2MDMtXHRcdGFsbG9jYXRlZCA9IGh1Z2V0bGJfZ2lnYW50aWNfcGFnZXNfYWxsb2NfYm9vdChoKTtcbi0tXG5tbS9odWdldGxiLmM9MzYxMD1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9pbml0X2hzdGF0ZXModm9pZClcbi0tXG5tbS9odWdldGxiLmMtMzYyNC1cdFx0Lyogb3ZlcnNpemUgaHVnZXBhZ2VzIHdlcmUgaW5pdCYjMzk7ZWQgaW4gZWFybHkgYm9vdCAqL1xubW0vaHVnZXRsYi5jOjM2MjU6XHRcdGlmICghaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxubW0vaHVnZXRsYi5jLTM2MjYtXHRcdFx0aHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoaCk7XG4tLVxubW0vaHVnZXRsYi5jLTM2MzUtXHRcdCAqL1xubW0vaHVnZXRsYi5jOjM2MzY6XHRcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGIuYy0zNjM3LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL2h1Z2V0bGIuYz0zNjczPXN0YXRpYyB2b2lkIHRyeV90b19mcmVlX2xvdyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuLS1cbm1tL2h1Z2V0bGIuYy0zNjc5LVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZodWdldGxiX2xvY2spO1xubW0vaHVnZXRsYi5jOjM2ODA6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxubW0vaHVnZXRsYi5jLTM2ODEtXHRcdHJldHVybjtcbi0tXG5tbS9odWdldGxiLmM9Mzc0NT1zdGF0aWMgaW50IHNldF9tYXhfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0zODAxLVx0ICovXG5tbS9odWdldGxiLmM6MzgwMjpcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DT05USUdfQUxMT0MpKSB7XG5tbS9odWdldGxiLmMtMzgwMy1cdFx0aWYgKGNvdW50IFx1MDAzZSBwZXJzaXN0ZW50X2h1Z2VfcGFnZXMoaCkpIHtcbi0tXG5tbS9odWdldGxiLmM9NDA2Mj1zc2l6ZV90IF9fbnJfaHVnZXBhZ2VzX3N0b3JlX2NvbW1vbihib29sIG9iZXlfbWVtcG9saWN5LFxuLS1cbm1tL2h1Z2V0bGIuYy00MDY4LVxubW0vaHVnZXRsYi5jOjQwNjk6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiLmMtNDA3MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vaHVnZXRsYi5jPTQ0NzM9dm9pZCBfX2luaXQgaHVnZXRsYl9ib290bWVtX2FsbG9jKHZvaWQpXG4tLVxubW0vaHVnZXRsYi5jLTQ0ODctXG5tbS9odWdldGxiLmM6NDQ4ODpcdFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcbm1tL2h1Z2V0bGIuYy00NDg5LVx0XHRcdGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzKGgpO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmM9Mjg3PWJvb2wgX19pbml0IGh1Z2V0bGJfZWFybHlfY21hKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yOTEtXG5tbS9odWdldGxiX2NtYS5jOjI5MjpcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2IGh1Z2V0bGJfY21hX29ubHk7XG5tbS9odWdldGxiX2NtYS5jLTI5My19XG4tLVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTE4LSAqL1xubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjE5OnN0YXRpYyBpbmxpbmUgYm9vbCBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIwLXtcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoyMTpcdHJldHVybiBoc3RhdGVfaXNfZ2lnYW50aWMoaCkgXHUwMDI2XHUwMDI2ICFnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKCk7XG5tbS9odWdldGxiX2ludGVybmFsLmgtMjItfVxuLS1cbm1tL2h1Z2V0bGJfc3lzY3RsLmM9NzA9c3RhdGljIGludCBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxuLS1cbm1tL2h1Z2V0bGJfc3lzY3RsLmMtODEtXG5tbS9odWdldGxiX3N5c2N0bC5jOjgyOlx0aWYgKHdyaXRlIFx1MDAyNlx1MDAyNiBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbm1tL2h1Z2V0bGJfc3lzY3RsLmMtODMtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm1tL2h1Z2V0bGJfc3lzZnMuYz0xMTc9c3RhdGljIHNzaXplX3QgbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vaHVnZXRsYl9zeXNmcy5jLTEyMy1cbm1tL2h1Z2V0bGJfc3lzZnMuYzoxMjQ6XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG5tbS9odWdldGxiX3N5c2ZzLmMtMTI1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3ODQKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogNTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgSHVnZXRsYiBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SXMgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBldmVuIGEgcmVhbCBjb25kaXRpb24/JiMzNDsgQnV0IHRoZW4gSSB0cmFjZWQgaXQgdGhyb3VnaCB0aGUgY29kZSDigJMgaXQgKmlzKiB1c2VkIGluIHNldmVyYWwgY3J1Y2lhbCBwbGFjZXM6IGBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZWAsIGBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcmAsIGFuZCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgc28gaXQmIzM5O3MgYSB2YWxpZCBhbmQgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgc3RhdGUuIFRoaXMgcGF0Y2ggY29ycmVjdGx5IGFkZHJlc3NlcyB0aGF0LgoKVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgY2hlY2sgZm9yIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgd2l0aGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLiBUaGF0IG1ha2VzIGl0IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpcyByZWFjaGFibGUuIEl0IHNlZW1zIHRoaXMgZml4IHByZXZlbnRzIGNvcnJ1cHRpb24gaW4gdGhlIGZyZWVsaXN0IHdoZW4gZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LCB3aGljaCBoYXBwZW5zIHVwb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZnV6emluZyBzdHJhdGVneS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgIOKAkyB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUuIFRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlOiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3NgLCBhbmQgYHJlbW92ZV9odWdldGxiX2ZvbGlvYC4KCmBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaG9pY2UsIHNpbmNlIGl0IGNhbGxzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGluIGEgbG9vcC4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBpcyBhbm90aGVyIGdvb2QgY2hvaWNlLCBzaW5jZSBpdCYjMzk7cyBhIGNvcmUgaHVnZXRsYiBmdW5jdGlvbiB3aXRoIHRoZSBgVk1fV0FSTl9PTl9PTkNFKDEpYCBhZGRpdGlvbiBpbiB0aGUgcGF0Y2gsIHdoaWNoIG1ha2VzIGl0IGltcG9ydGFudCB0byB0cmFjZSBhbmQgZnV6ei4KCkZvciB0aGUgY29uZmlndXJhdGlvbnMsIGBIVUdFVExCRlNgIGlzIGVzc2VudGlhbCwgc2luY2UgaXQgZW5hYmxlcyBgSFVHRVRMQl9QQUdFYC4gQW5kLCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgTUVNT1JZX0hPVFBMVUdgIGFyZSB0aGUgY29ycmVjdCBjb25maWdzIGFzIHRoZXkgYXJlIHRoZSBjYWxsZXJzIG9mIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zJiMzNDssCiAgICAmIzM0O3JlbW92ZV9odWdldGxiX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2Rpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3MmIzM0OywKICAgICYjMzQ7cmVtb3ZlX2h1Z2V0bGJfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gaHVnZXRsYiB3aGVyZSBkaXNzb2x2aW5nIGEgZ2lnYW50aWMgZm9saW8gd2l0aG91dCBydW50aW1lIHN1cHBvcnQgd291bGQgbGVhdmUgaXQgb24gdGhlIGZyZWUgbGlzdCwgbGVhZGluZyB0byBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIEl0IGFkZHMgYSBjaGVjayBpbiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBmb2xpb3MsIGFuZCBhZGRzIHdhcm5pbmdzIGluIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AgYW5kIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBpcyByZWFjaGFibGUgdmlhIG1lbW9yeSBob3RwbHVnIG9yIG1lbW9yeSBmYWlsdXJlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZDE4YWFmNGYzN2ViMDQyZGVhM2EyYWU4NzYwZTgxNGM5MjUzNzc0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDU6MDk6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZTkzYzRkMjQ1NmFhNC4uNjdhNTAyMjkzNjk4MyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMTM5OCw4ICYjNDM7MTM5OCwxMSBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJVk1fQlVHX09OX0ZPTElPKGh1Z2V0bGJfY2dyb3VwX2Zyb21fZm9saW9fcnN2ZChmb2xpbyksIGZvbGlvKTsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtodWdldGxiX2xvY2spOwotCWlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkKJiM0MzsJaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7CiYjNDM7CQkvKiBDYWxsZXJzIG11c3QgZmlsdGVyIGdpZ2FudGljX25vX3J1bnRpbWUgdXBzdHJlYW0uICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0UoMSk7CiAJCXJldHVybjsKJiM0MzsJfQogCiAJbGlzdF9kZWwoJmFtcDtmb2xpby0mZ3Q7bHJ1KTsKIApAQCAtMTQ2MCw4ICYjNDM7MTQ2MywxMSBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiB7CiAJYm9vbCBjbGVhcl9mbGFnID0gZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTsKIAotCWlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkKJiM0MzsJaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7CiYjNDM7CQkvKiBDYWxsZXJzIG11c3QgZmlsdGVyIGdpZ2FudGljX25vX3J1bnRpbWUgdXBzdHJlYW0uICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0UoMSk7CiAJCXJldHVybjsKJiM0MzsJfQogCiAJLyoKIAkgKiBJZiB3ZSBkb24mIzM5O3Qga25vdyB3aGljaCBzdWJwYWdlcyBhcmUgaHdwb2lzb25lZCwgd2UgY2FuJiMzOTt0IGZyZWUKQEAgLTE5NzcsNiAmIzQzOzE5ODMsMTUgQEAgaW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlzdHJ1Y3QgaHN0YXRlICpoID0gZm9saW9faHN0YXRlKGZvbGlvKTsKIAkJYm9vbCBhZGp1c3Rfc3VycGx1cyA9IGZhbHNlOwogCiYjNDM7CQkvKgomIzQzOwkJICogcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKS91cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpIGJhaWwKJiM0MzsJCSAqIGZvciBnaWdhbnRpYyBoc3RhdGVzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LCBzbyBkaXNzb2x2aW5nIG9uZQomIzQzOwkJICogaGVyZSB3b3VsZCBsZWF2ZSBpdCBvbiB0aGUgZnJlZSBsaXN0IGFuZCwgb24gdm1lbW1hcCByZXN0b3JlCiYjNDM7CQkgKiBmYWlsdXJlLCB0aGUgYWRkX2h1Z2V0bGJfZm9saW8oKSByb2xsYmFjayBjb3JydXB0cyB0aGF0IGxpc3QuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKIAkJaWYgKCFhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSkKIAkJCWdvdG8gb3V0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA4CgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2V0bGIgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgZ2lnYW50aWMgcGFnZXMgYXJlIGhhbmRsZWQgd2hlbiBydW50aW1lIHN1cHBvcnQgaXNuJiMzOTt0IHByZXNlbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgY29uY2VybnMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgY29udHJvbCBmbG93IGFuZCBsaXN0IG1hbmFnZW1lbnQuIEl0JiMzOTtzIGFkZGluZyBgVk1fV0FSTl9PTl9PTkNFKDEpYCBjYWxscyB3aXRoaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIHdoZW4gYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBpcyB0cnVlLiBJdCYjMzk7cyBhbHNvIGJhaWxpbmcgb3V0IGVhcmx5IGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbi4gVGhlIGdvYWwgaGVyZSBpcyBjbGVhcmx5IHRvIHByZXZlbnQgbGlzdCBjb3JydXB0aW9uLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLgoKTm93LCBjb25zaWRlcmluZyBteSBhcmVhIG9mIGV4cGVydGlzZSwgbGV0JiMzOTtzIGRyaWxsIGludG8gdGhlIEtNU0FOIGltcGxpY2F0aW9ucy4gVGhlIHByaW1hcnkgd29ycnkgaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhpcyBsb29rcyBsaWtlIGEgY29udHJvbC1mbG93IGNoYW5nZSBkZXNpZ25lZCB0byAqYXZvaWQqIG1lbW9yeSBzYWZldHkgaXNzdWVzIHJhdGhlciB0aGFuIGludHJvZHVjZSBuZXcgb25lcy4gVGhlIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgZmllbGRzIHdpdGhpbiBzdHJ1Y3RzLCBhbmQgbm90aGluZyBpcyBiZWluZyB3cml0dGVuIHRvIHVzZXJzcGFjZSB0aGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljLiBDcnVjaWFsbHksIEkgc2VlIG5vIGluZGljYXRpb24gdGhhdCB0aGUgY2hhbmdlcyBhcmUgY3JlYXRpbmcgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHJlYWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuCgpMaXN0IGNvcnJ1cHRpb24gaXMgYSB3ZWxsLWRlZmluZWQgY2xhc3Mgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgLS0gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgZXRjLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xzIGFyZSBhbHJlYWR5IHdlbGwgZXF1aXBwZWQgdG8gY2F0Y2ggdGhvc2Uga2luZHMgb2YgcHJvYmxlbXMuIFRoaXMgcGF0Y2ggaXMgc2ltcGx5IHRpZ2h0ZW5pbmcgdGhlIGV4aXN0aW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCB0aG9zZSBzY2VuYXJpb3MgaW4gYSBzcGVjaWZpYyBlZGdlIGNhc2UuCgpUaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIHByZXZlbnQgYSBzcGVjaWZpYyBsaXN0IGNvcnJ1cHRpb24gaXNzdWUgd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBUaGlzIGlzIGEgY29udHJvbC1mbG93IGNoYW5nZSwgaW1wcm92aW5nIG1lbW9yeSBzYWZldHkgYnkgYXZvaWRpbmcgY2VydGFpbiBtZW1vcnkgYWNjZXNzIGlzc3Vlcy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkLiBUaGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYWRkcmVzc2VkIGFyZSB3aXRoaW4gdGhlIHB1cnZpZXcgb2YgZXhpc3RpbmcgZGVidWdnaW5nIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBsaXN0IGNvcnJ1cHRpb24gaXNzdWUgaW4gdGhlIGh1Z2V0bGIgc3Vic3lzdGVtIHdoZW4gZGlzc29sdmluZyBnaWdhbnRpYyBwYWdlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydC4gSXQgbW9kaWZpZXMgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggaHN0YXRlcywgYW5kIGFkZHMgd2FybmluZ3MgaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBsaXN0IGNvcnJ1cHRpb24sIHdoaWNoIGNhbiBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMuIFRoZXNlIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNTowOTo1NS4yNzUwMzQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTIyMTc4NjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc1wiLFxuICAgIFwicmVtb3ZlX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MDk6NTUuMjc1MDM5NThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjI1MjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFkMThhYWY0ZjM3ZWIwNDJkZWEzYTJhZTg3NjBlODE0YzkyNTM3NzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMDU6MDk6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggZTkzYzRkMjQ1NmFhNC4uNjdhNTAyMjkzNjk4MyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMTM5OCw4ICsxMzk4LDExIEBAIHZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKGh1Z2V0bGJfY2dyb3VwX2Zyb21fZm9saW9fcnN2ZChmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG4rXFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XFxuK1xcdFxcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cXG4rXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1KTtcXG4gXFxuQEAgLTE0NjAsOCArMTQ2MywxMSBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuIHtcXG4gXFx0Ym9vbCBjbGVhcl9mbGFnID0gZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcXG4gXFxuLVxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG4rXFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XFxuK1xcdFxcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cXG4rXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xcbiBcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGRvbid0IGtub3cgd2hpY2ggc3VicGFnZXMgYXJlIGh3cG9pc29uZWQsIHdlIGNhbid0IGZyZWVcXG5AQCAtMTk3Nyw2ICsxOTgzLDE1IEBAIGludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShmb2xpbyk7XFxuIFxcdFxcdGJvb2wgYWRqdXN0X3N1cnBsdXMgPSBmYWxzZTtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvKCkvdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKSBiYWlsXFxuK1xcdFxcdCAqIGZvciBnaWdhbnRpYyBoc3RhdGVzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LCBzbyBkaXNzb2x2aW5nIG9uZVxcbitcXHRcXHQgKiBoZXJlIHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QgYW5kLCBvbiB2bWVtbWFwIHJlc3RvcmVcXG4rXFx0XFx0ICogZmFpbHVyZSwgdGhlIGFkZF9odWdldGxiX2ZvbGlvKCkgcm9sbGJhY2sgY29ycnVwdHMgdGhhdCBsaXN0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdFxcdGlmICghYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MDk6NTUuNzE4MDMzNzE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA5NzM0MDIzNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zXCIsXG4gICAgXCJyZW1vdmVfaHVnZXRsYl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQxOGFhZjRmMzdlYjA0MmRlYTNhMmFlODc2MGU4MTRjOTI1Mzc3NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDA1OjA5OjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCBlOTNjNGQyNDU2YWE0Li42N2E1MDIyOTM2OTgzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0xMzk4LDggKzEzOTgsMTEgQEAgdm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Vk1fQlVHX09OX0ZPTElPKGh1Z2V0bGJfY2dyb3VwX2Zyb21fZm9saW9fcnN2ZChmb2xpbyksIGZvbGlvKTtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbitcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkge1xuK1x0XHQvKiBDYWxsZXJzIG11c3QgZmlsdGVyIGdpZ2FudGljX25vX3J1bnRpbWUgdXBzdHJlYW0uICovXG4rXHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiBcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0bGlzdF9kZWwoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1KTtcbiBcbkBAIC0xNDYwLDggKzE0NjMsMTEgQEAgc3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIHtcbiBcdGJvb2wgY2xlYXJfZmxhZyA9IGZvbGlvX3Rlc3RfaHVnZXRsYl92bWVtbWFwX29wdGltaXplZChmb2xpbyk7XG4gXG4tXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG4rXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpIHtcbitcdFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xuK1x0XHRWTV9XQVJOX09OX09OQ0UoMSk7XG4gXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBkb24ndCBrbm93IHdoaWNoIHN1YnBhZ2VzIGFyZSBod3BvaXNvbmVkLCB3ZSBjYW4ndCBmcmVlXG5AQCAtMTk3Nyw2ICsxOTgzLDE1IEBAIGludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShmb2xpbyk7XG4gXHRcdGJvb2wgYWRqdXN0X3N1cnBsdXMgPSBmYWxzZTtcbiBcbitcdFx0LypcbitcdFx0ICogcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKS91cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpIGJhaWxcbitcdFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXG4rXHRcdCAqIGhlcmUgd291bGQgbGVhdmUgaXQgb24gdGhlIGZyZWUgbGlzdCBhbmQsIG9uIHZtZW1tYXAgcmVzdG9yZVxuK1x0XHQgKiBmYWlsdXJlLCB0aGUgYWRkX2h1Z2V0bGJfZm9saW8oKSByb2xsYmFjayBjb3JydXB0cyB0aGF0IGxpc3QuXG4rXHRcdCAqL1xuK1x0XHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4gXHRcdGlmICghYXZhaWxhYmxlX2h1Z2VfcGFnZXMoaCkpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNTowOTo1NS43MTgwMzUwMTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQyNDcxNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGh1Z2V0bGIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdldGxiLmNgLiBJdCBzZWVtcyB0aGV5J3ZlIGFkZGVkIGEgZmV3IGNvbmRpdGlvbmFsIGNoZWNrcy4gRmlyc3QsIGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKWAsIHRoZXJlJ3Mgbm93IGFuIGBpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpYCBjaGVjaywgYW5kIGl0IGJhaWxzIG91dCBlYXJseSBpZiB0aGF0IGNvbmRpdGlvbiBpcyBtZXQuIFRoZXkgYWxzbyB0aHJldyBpbiBgVk1fV0FSTl9PTl9PTkNFKDEpYCBzdGF0ZW1lbnRzIHdpdGhpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKClgIOKAkyBhZ2FpbiwgdHJpZ2dlcmVkIHdoZW4gYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBpcyB0cnVlLlxuXG5SaWdodCwgc28gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpYCBpcyByZXNwb25zaWJsZSBmb3IgZGlzc29sdmluZyBmcmVlIGh1Z2V0bGIgZm9saW9zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGdpZ2FudGljIGZvbGlvcywgbGlrZWx5IHRob3NlIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBUaGUgY2hhbmdlIGlzIHRvIHByZXZlbnQgYXR0ZW1wdGluZyB0byBkaXNzb2x2ZSBhIGdpZ2FudGljIGZvbGlvIHRoYXQgKnNob3VsZG4ndCogYmUgZGlzc29sdmVkIGJlY2F1c2Ugb2YgdGhlIGByZW1vdmVfaHVnZXRsYl9mb2xpbygpYCBvciBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbygpYCBiYWlsLW91dHMuIFNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBsZWFkaW5nIHRvIHBvdGVudGlhbCBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlIGlmIHRoZSBmb2xpbyBlbmRlZCB1cCBvbiB0aGUgZnJlZSBsaXN0LlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgY29kZSBmb3IgaHVnZXRsYiBoYW5kbGluZywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gV2hlcmUgaXMgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYWN0dWFsbHkgKnVzZWQqPyBJIGtub3cgaXQgaXMgY2FsbGVkIGZyb20gYGRpc3NvbHZlX2ZyZWVfaHVnZV9wYWdlYCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZV9wYWdlc2AsIHNvIEkgbmVlZCB0byBjaGVjayB0aG9zZSBjYWxsIHNpdGVzIHRvIHNlZSBpZiB0aGUgbmV3IGNoZWNrIGlzIHJlYWNoYWJsZSBpbiByZWFsLXdvcmxkIHNjZW5hcmlvcy4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgbGVhZHMgdG8gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjAyLjc2MDUwOTEyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkzMDAwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD04NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC04NzUtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODc2OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6ODc3OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTg3OC1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyMDU9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2luZGV4KHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjA5LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMTA6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTIxMS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjE0LVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyMTU6c3RhdGljIGlubGluZSBpbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjE2LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xOTI5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnJlbW92ZV9wb29sX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTY2LSAqL1xcbm1tL2h1Z2V0bGIuYzoxOTY3OmludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiLmMtMTk2OC17XFxuLS1cXG5tbS9odWdldGxiLmMtMjA1OS0gKiBwYXJ0IG9mIGl0IGxpZXMgd2l0aGluIHRoZSBnaXZlbiByYW5nZS5cXG5tbS9odWdldGxiLmM6MjA2MDogKiBBbHNvIG5vdGUgdGhhdCBpZiBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oKSByZXR1cm5zIHdpdGggYW4gZXJyb3IsIGFsbFxcbm1tL2h1Z2V0bGIuYy0yMDYxLSAqIGZyZWUgaHVnZXRsYiBmb2xpb3MgdGhhdCB3ZXJlIGRpc3NvbHZlZCBiZWZvcmUgdGhhdCBlcnJvciBhcmUgbG9zdC5cXG5tbS9odWdldGxiLmMtMjA2Mi0gKi9cXG5tbS9odWdldGxiLmM6MjA2MzppbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbm1tL2h1Z2V0bGIuYy0yMDY0LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMDc5LVxcdFxcdGZvbGlvID0gcGZuX2ZvbGlvKHBmbik7XFxubW0vaHVnZXRsYi5jOjIwODA6XFx0XFx0cmMgPSBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy0yMDgxLVxcdFxcdGlmIChyYylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTcxPXN0YXRpYyBpbnQgX19wYWdlX2hhbmRsZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3NS1cXHR6b25lX3BjcF9kaXNhYmxlKHBhZ2Vfem9uZShwYWdlKSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzY6XFx0cmV0ID0gZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHBhZ2VfZm9saW8ocGFnZSkpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTc3LVxcdGlmICghcmV0KVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODQ9c3RhdGljIGJvb2wgcGFnZV9oYW5kbGVfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGh1Z2VwYWdlX29yX2ZyZWVwYWdlLCBib29sIHJlbGVhc2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4OC1cXHRcXHQgKiBEb2luZyB0aGlzIGNoZWNrIGZvciBmcmVlIHBhZ2VzIGlzIGFsc28gZmluZSBzaW5jZVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg5OlxcdFxcdCAqIGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbygpIHJldHVybnMgMCBmb3Igbm9uLWh1Z2V0bGIgZm9saW9zIGFzIHdlbGwuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTAtXFx0XFx0ICovXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwMzMtXFx0XFx0ICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMDM0OlxcdFxcdHJldCA9IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3Moc3RhcnRfcGZuLCBlbmRfcGZuKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwMzUtXFx0XFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDowNC41NTM1MTY5MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTEyNjg3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCoqXG5cbk9rYXksIHNvIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIGRlZmluaXRlbHkgYWN0aXZlIGFuZCBoYXMgbXVsdGlwbGUgY2FsbCBwYXRocy4gSXQncyByZWFjaGVkIGZyb20gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3NgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBvZmZsaW5lX3BhZ2VzYCByZWxhdGVkIHRvIG1lbW9yeSBob3RwbHVnLCBhbmQgYWxzbyBmcm9tIGBfX3BhZ2VfaGFuZGxlX3BvaXNvbmAsIHdoaWNoIGRlYWxzIHdpdGggbWVtb3J5IGZhaWx1cmUuIFRoaXMgbWVhbnMgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBub3Qgc29tZSBkZWFkIGNvZGUuIEdpdmVuIHRoYXQgaXQgaGFzIHRoZXNlIHR3byBkaXN0aW5jdCBwYXRocywgYm90aCB0aWVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBJJ20gY29uZmlkZW50IGl0J3Mgd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIHNob3VsZCBmbGFnIHRoaXMgYXMgc29tZXRoaW5nIHRvIGZ1enosIGRlZmluaXRlbHksIGFuZCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgaW4gbWluZCBhcmUgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCwgYXMgdGhleSBhcmUgdGhlIGNvcmUgb2YgdGhpcy5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGlzIHVzZWQgd2hlbiBgSFVHRVRMQl9QQUdFYCBpcyBlbmFibGVkIGFuZCBlaXRoZXIgYE1FTU9SWV9IT1RQTFVHYCBvciBgTUVNT1JZX0ZBSUxVUkVgIGFyZSBhbHNvLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gYG1tL2h1Z2V0bGIuY2AgdG8gc2VlIGhvdyB0aGVzZSBjb25maWdzIGludGVyYWN0IHdpdGggdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDowOS4xNjQ3ODg1NjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2ODgzNjA0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiNjRrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXFx0Ym9vbCBcXFwiMjU2a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXFx0Ym9vbCBcXFwiMU1CXFxcIlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCI0TUJcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVxcdGJvb2wgXFxcIjY0TUJcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc4LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6MTAuOTMzNjM0MzE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNTIzNzI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBIdWdlIFBhZ2VzIGFuZCBNZW1vcnkgRmFpbHVyZXMqKlxuXG5SaWdodCwgc28gYEhVR0VUTEJfUEFHRWAuLi4gdGhhdCBsb29rcyBsaWtlIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYEhVR0VUTEJGU2AuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0LiBJdCdzIGEgYGRlZl9ib29sYCwgbWVhbmluZyBgSFVHRVRMQkZTYCBpcyB0aGUgYWN0dWFsIGNvbmZpZyBvcHRpb24gd2UgbmVlZCB0byBlbmFibGUgaHVnZSBwYWdlcyBmdW5jdGlvbmFsaXR5LiBHb3QgaXQuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgYXJlYXMuIEdpdmVuIHRoaXMgZm9jdXMgb24gbWVtb3J5LCBpdCdzIHdvcnRoIGNoZWNraW5nIGBNRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgaW4gdGhvc2Ugc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHdpdGggaHVnZSBwYWdlcyBpbnZvbHZlZC4gTWlnaHQgYmUgYW4gaW50ZXJlc3RpbmcgaW50ZXJwbGF5IHRoZXJlLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDoxNC41NDg4NzQ1MDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjQ3OTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzc2LVxcbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzc4LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjE2LjEyMTM1OTU2NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTE5MjkxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zOiBNZW1vcnkqKlxuXG5SaWdodCwgbGV0J3MgdGhpbmsgYWJvdXQgdGhpcyBtZW1vcnkgY29uZmlndXJhdGlvbi4gYE1FTU9SWV9GQUlMVVJFYCDigJMgeWVhaCwgdGhhdCBmZWVscyByaWdodCwgdGhhdCdzIGEgc29saWQgY2hvaWNlIGZvciBlcnJvciBoYW5kbGluZywgZm9yIHJlc2lsaWVuY2UuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBncmFjZWZ1bGx5IGhhbmRsZSBwb3RlbnRpYWwgbWVtb3J5IGZhaWx1cmVzLCBhbmQgdGhhdCBjb25maWcgcHJvYmFibHkgb2ZmZXJzIGEgcm9idXN0IG1lY2hhbmlzbS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQW5kIHRoZW4sIHJlbGF0ZWQgdG8gdGhhdCwgYE1FTU9SWV9IT1RQTFVHYCBpcyBjcnVjaWFsLiBUaGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSBhZGQgb3IgcmVtb3ZlIG1lbW9yeSB3aXRob3V0IGEgcmVib290PyBBYnNvbHV0ZWx5IGVzc2VudGlhbCBmb3IgYW55IG1vZGVybiBzeXN0ZW0gdGhhdCBuZWVkcyB0byBiZSBoaWdobHkgYXZhaWxhYmxlIG9yIGVhc2lseSBzY2FsZWQuIEl0IHRpZXMgaW4gcGVyZmVjdGx5IHdpdGggYSBnb29kIGZhaWx1cmUgc3RyYXRlZ3kuIFRoZXNlIHR3byBjb25maWd1cmF0aW9ucywgd29ya2luZyB0b2dldGhlciwgY3JlYXRlIGEgbW9yZSByb2J1c3QgbWVtb3J5IHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjIwLjE3MzI5MjIzN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTczMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFBMVUdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MTk9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXFxuLS1cXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJ3NlbGVjdCBTUEFSU0VNRU0nXFxubW0vS2NvbmZpZzo1MjM6bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTI0LVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDoyMS43MzMwMzE5OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1NTg3NTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEh1Z2V0bGIgRm9saW8gSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBIVUdFVExCRlNgLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYE1FTU9SWV9IT1RQTFVHYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBmb2xpbyBtYW5hZ2VtZW50LCBmb2N1c2luZyBvbiBob3cgdGhlc2UgaW50ZXJhY3QuIEknbSBpbW1lZGlhdGVseSBkcmF3biB0byBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIExldCdzIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cbmByZW1vdmVfaHVnZXRsYl9mb2xpb2AgaGFzIGEgd2lkZSByZWFjaDsgaXQncyBjYWxsZWQgYnkgYHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGZyZWVfaHVnZV9mb2xpb2AsIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AsIGBpc29sYXRlX2h1Z2V0bGJgLCBhbmQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCwgaW4gY29tcGFyaXNvbiwgc2VlbXMgbW9yZSBmb2N1c2VkLCBjYWxsZWQgb25seSBieSBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGFuZCBgZnJlZV9ocGFnZV93b3JrZm5gLlxuXG5UaGUgcGF0Y2ggdGFyZ2V0cyBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYC4gS25vd2luZyB0aGF0LCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgaXQncyBhIGNyaXRpY2FsIGZvY3VzLiBCdXQgc28gaXMgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgZ2l2ZW4gaG93IGZhci1yZWFjaGluZyBpdHMgaW1wYWN0IGlzLiBXaXRoIGBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvYCBiZWluZyBzdGF0aWMsIEknbSB0aGlua2luZyBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIHRoZSBiZXR0ZXIgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gR290dGEgY29uZmlybSBpdCdzIG5vdCBzdGF0aWMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDoyNy4yODg5MTA3NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDQzMjk3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTE0MzE9dm9pZCBhZGRfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE0NjAtXFxubW0vaHVnZXRsYi5jOjE0NjE6c3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0xNDYyLVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTUyMC0vKlxcbm1tL2h1Z2V0bGIuYzoxNTIxOiAqIEFzIHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgY2FuIGJlIGNhbGxlZCB1bmRlciBhbnkgY29udGV4dCwgc28gd2UgY2Fubm90XFxubW0vaHVnZXRsYi5jLTE1MjItICogdXNlIEdGUF9LRVJORUwgdG8gYWxsb2NhdGUgdm1lbW1hcCBwYWdlcy4gSG93ZXZlciwgd2UgY2FuIGRlZmVyIHRoZVxcbi0tXFxubW0vaHVnZXRsYi5jPTE1MzM9c3RhdGljIHZvaWQgZnJlZV9ocGFnZV93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE1NTQtXFxubW0vaHVnZXRsYi5jOjE1NTU6XFx0XFx0X191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1NTYtXFxuLS1cXG5tbS9odWdldGxiLmM9MTU2Mj1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZnJlZV9ocGFnZV93b3JrKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtMTU2Ny1cXG5tbS9odWdldGxiLmM6MTU2ODpzdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2h1Z2V0bGIuYy0xNTY5LVxcdFxcdFxcdFxcdCBib29sIGF0b21pYylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTcxLVxcdGlmICghZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKSB8fCAhYXRvbWljKSB7XFxubW0vaHVnZXRsYi5jOjE1NzI6XFx0XFx0X191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbyk7XFxubW0vaHVnZXRsYi5jLTE1NzMtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE1ODc9c3RhdGljIHZvaWQgYnVsa192bWVtbWFwX3Jlc3RvcmVfZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNjA1LVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MTYwNjpcXHRcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy0xNjA3LVxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTE2MzAtXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbm1tL2h1Z2V0bGIuYzoxNjMxOlxcdFxcdFxcdFxcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTE2MzItXFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTYzOD1zdGF0aWMgdm9pZCB1cGRhdGVfYW5kX2ZyZWVfcGFnZXNfYnVsayhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE2NzMtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCB0X2ZvbGlvLCBcXHUwMDI2bm9uX2h2b19mb2xpb3MsIGxydSkge1xcbm1tL2h1Z2V0bGIuYzoxNjc0OlxcdFxcdHVwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTE2NzUtXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTY5MD12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3NDQtXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XFxubW0vaHVnZXRsYi5jOjE3NDU6XFx0XFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIHRydWUpO1xcbm1tL2h1Z2V0bGIuYy0xNzQ2LVxcdH0gZWxzZSBpZiAoaC1cXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmlkXSkge1xcbi0tXFxubW0vaHVnZXRsYi5jLTE3NDktXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHVnZXRsYl9sb2NrLCBmbGFncyk7XFxubW0vaHVnZXRsYi5jOjE3NTA6XFx0XFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIHRydWUpO1xcbm1tL2h1Z2V0bGIuYy0xNzUxLVxcdH0gZWxzZSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MTk2Nz1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTk4Ni1cXHRcXHQvKlxcbm1tL2h1Z2V0bGIuYzoxOTg3OlxcdFxcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvKCkvdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKSBiYWlsXFxubW0vaHVnZXRsYi5jLTE5ODgtXFx0XFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXFxuLS1cXG5tbS9odWdldGxiLmMtMjA0Ni1cXG5tbS9odWdldGxiLmM6MjA0NzpcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy0yMDQ4LVxcdFxcdHJldHVybiByYztcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNjU2PXN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMjcyOC1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjI3Mjk6XFx0XFx0dXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oaCwgb2xkX2ZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTI3MzAtXFx0fVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MzYtXFx0aWYgKG5ld19mb2xpbylcXG5tbS9odWdldGxiLmM6MjczNzpcXHRcXHR1cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhoLCBuZXdfZm9saW8sIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtMjczOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6MjguODMzMjQ3Njc0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDA2ODA4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgRm9saW8gTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEh1Z2VUTEIgZm9saW8gbWFuYWdlbWVudCBmdW5jdGlvbnMuIExldCdzIHNlZS4uLiBgdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCBhbmQgbm90IGFjY2Vzc2libGUgZnJvbSBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlLiBHb29kIHRvIGtub3cuIEJ1dCwgYHJlbW92ZV9odWdldGxiX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGFuZCBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc2AgYXJlICpub3QqIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltcGxpZXMgYSBicm9hZGVyIHNjb3BlLCBwb3RlbnRpYWxseSBiZWluZyBjYWxsZWQgZnJvbSBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIGFuZCBhIGRldGFpbCB0byBrZWVwIGluIG1pbmQuIE5vdywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gLiBMZXQncyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uJ3MgaW1wbGVtZW50YXRpb24gYW5kIGNhbGwgc2l0ZXMgdG8gc2VlIHdoZXJlIGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUuIEl0J3MgdGhlIG1vc3QgcGVydGluZW50IGZ1bmN0aW9uIHRvIGV4YW1pbmUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6MzQuMTczOTMyMzc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk2MzI1ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlbW92ZV9odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzc3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzOTEtICovXFxubW0vaHVnZXRsYi5jOjEzOTI6dm9pZCByZW1vdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2h1Z2V0bGIuYy0xMzkzLVxcdFxcdFxcdCAgYm9vbCBhZGp1c3Rfc3VycGx1cylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNTMzPXN0YXRpYyB2b2lkIGZyZWVfaHBhZ2Vfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNTQ5LVxcdFxcdCAqIGZvbGlvX2hzdGF0ZSgpIGlzIGdvaW5nIHRvIHRyaWdnZXIgYmVjYXVzZSBhIHByZXZpb3VzIGNhbGwgdG9cXG5tbS9odWdldGxiLmM6MTU1MDpcXHRcXHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpIHdpbGwgY2xlYXIgdGhlIGh1Z2V0bGIgYml0LCBzbyBkb1xcbm1tL2h1Z2V0bGIuYy0xNTUxLVxcdFxcdCAqIG5vdCB1c2UgZm9saW9faHN0YXRlKCkgZGlyZWN0bHkuXFxuLS1cXG5tbS9odWdldGxiLmM9MTY5MD12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3NDItXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl90ZW1wb3JhcnkoZm9saW8pKSB7XFxubW0vaHVnZXRsYi5jOjE3NDM6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtMTc0NC1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZodWdldGxiX2xvY2ssIGZsYWdzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNzQ3LVxcdFxcdC8qIHJlbW92ZSB0aGUgcGFnZSBmcm9tIGFjdGl2ZSBsaXN0ICovXFxubW0vaHVnZXRsYi5jOjE3NDg6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIHRydWUpO1xcbm1tL2h1Z2V0bGIuYy0xNzQ5LVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh1Z2V0bGJfbG9jaywgZmxhZ3MpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTE5Mjk9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmVtb3ZlX3Bvb2xfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE5NDQtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8sIGxydSk7XFxubW0vaHVnZXRsYi5jOjE5NDU6XFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFjY3Rfc3VycGx1cyk7XFxubW0vaHVnZXRsYi5jLTE5NDYtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9odWdldGxiLmM9MTk2Nz1pbnQgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtMTk4Ni1cXHRcXHQvKlxcbm1tL2h1Z2V0bGIuYzoxOTg3OlxcdFxcdCAqIHJlbW92ZV9odWdldGxiX2ZvbGlvKCkvdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oKSBiYWlsXFxubW0vaHVnZXRsYi5jLTE5ODgtXFx0XFx0ICogZm9yIGdpZ2FudGljIGhzdGF0ZXMgd2l0aG91dCBydW50aW1lIHN1cHBvcnQsIHNvIGRpc3NvbHZpbmcgb25lXFxuLS1cXG5tbS9odWdldGxiLmMtMjAxOC1cXHRcXHRcXHRhZGp1c3Rfc3VycGx1cyA9IHRydWU7XFxubW0vaHVnZXRsYi5jOjIwMTk6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgZm9saW8sIGFkanVzdF9zdXJwbHVzKTtcXG5tbS9odWdldGxiLmMtMjAyMC1cXHRcXHRoLVxcdTAwM2VtYXhfaHVnZV9wYWdlcy0tO1xcbi0tXFxubW0vaHVnZXRsYi5jLTIwMzEtXFx0XFx0ICogVGhlIGZvbGlvX3Rlc3RfaHVnZXRsYiBjaGVjayBoZXJlIGlzIGJlY2F1c2VcXG5tbS9odWdldGxiLmM6MjAzMjpcXHRcXHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbyB3aWxsIGNsZWFyIGh1Z2V0bGIgZm9saW8gZmxhZyBmb3JcXG5tbS9odWdldGxiLmMtMjAzMy1cXHRcXHQgKiBub24tdm1lbW1hcCBvcHRpbWl6ZWQgaHVnZXRsYiBmb2xpb3MuXFxuLS1cXG5tbS9odWdldGxiLmM9MjY1Nj1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MTUtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjI3MTY6XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oaCwgb2xkX2ZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTI3MTctXFxuLS1cXG5tbS9odWdldGxiLmM9MzY3Mz1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNjkzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2h1Z2V0bGIuYzozNjk0OlxcdFxcdFxcdHJlbW92ZV9odWdldGxiX2ZvbGlvKGgsIGZvbGlvLCBmYWxzZSk7XFxubW0vaHVnZXRsYi5jLTM2OTUtXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZwYWdlX2xpc3QpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTM5OTM9bG9uZyBkZW1vdGVfcG9vbF9odWdlX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqc3JjLCBub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTQwMTgtXFxubW0vaHVnZXRsYi5jOjQwMTk6XFx0XFx0XFx0cmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3JjLCBmb2xpbywgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy00MDIwLVxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bGlzdCk7XFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmg9NzE9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX25leHRfbm9kZV90b19mcmVlKHN0cnVjdCBoc3RhdGUgKmgsIG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQpXFxuLS1cXG5tbS9odWdldGxiX2ludGVybmFsLmgtOTQtXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjk1OmV4dGVybiB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTk2LVxcdFxcdFxcdFxcdCBib29sIGFkanVzdF9zdXJwbHVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6MzUuNzcwMjY0MzE0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzg1NzQ2NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgSHVnZXRsYiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBodWdlIHBhZ2VzLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IHN5bWJvbCB2aXNpYmlsaXR5LiBJIHNlZSBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGlzIGRlZmluZWQgaW4gYG1tL2h1Z2V0bGJfaW50ZXJuYWwuaGAsIHdoaWNoIGlzIGdvb2QgZm9yIGludGVybmFsIGtlcm5lbCB1c2UsIGJ1dCBpdCdzICpub3QqIGV4cGxpY2l0bHkgZXhwb3J0ZWQgZm9yIG1vZHVsZXMuIEkga25vdyBpdCdzIHVzZWQgaW4gYG1tL2h1Z2V0bGIuY2AsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFdhaXQgYSBtaW51dGUuLi4gc2luY2UgaXQncyAqbm90KiBgc3RhdGljYCwgdGhhdCBtZWFucyBpdCBjYW4gYmUgYSBmb2N1cyBzeW1ib2wsIGludGVyZXN0aW5nISBJIGFsc28gc2VlIHRoYXQgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgYW5kIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCBhcmUgKmFsc28qIG5vdCBzdGF0aWMuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHBvdGVudGlhbCB0YXJnZXRzLlxuXG5Ob3csIGxldCBtZSBjaGVjayB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MuIGBIVUdFVExCRlNgIGlzIHRoZSBiaWcgb25lLCBvYnZpb3VzbHkuIEkgYWxzbyB0aGluayBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgTUVNT1JZX0hPVFBMVUdgIGFyZSByZWxldmFudCBoZXJlLiBUaG9zZSBhcmUgZ29vZCB0YXJnZXRzIHRvIGVuYWJsZS5cblxuT2theSwgbGV0J3MgcmUtcmVhZCB0aGUgcGF0Y2ggaXRzZWxmLiBBaCwgaGVyZSB3ZSBnby4uLiBpdCdzIGFkZGluZyBhIGBWTV9XQVJOX09OX09OQ0UoMSlgIGlmIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgaXMgdHJ1ZS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcuIEFuZCBpbiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgdGhlcmUncyBhIGd1YXJkIG5vdyBhZ2FpbnN0IGRpc3NvbHZpbmcgZ2lnYW50aWMgZm9saW9zICp3aXRob3V0KiBydW50aW1lIHN1cHBvcnQuIFRoZSBjb21tZW50IGNsYXJpZmllcyB3aHk6IGl0IHByZXZlbnRzIGxpc3QgY29ycnVwdGlvbiBkdXJpbmcgdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUgaWYgdGhlIGZvbGlvIGlzbid0IHByb3Blcmx5IGhhbmRsZWQgdXBzdHJlYW0uIEl0IGxvb2tzIGxpa2UgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIGEgc3BlY2lmaWMgY3Jhc2ggb3IgbWVtb3J5IGNvcnJ1cHRpb24gc2NlbmFyaW8uXG5cblNvLCBpbiBteSBqdWRnZW1lbnQsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gSXQgdG91Y2hlcyBjcml0aWNhbCBmb2xpbyBtYW5pcHVsYXRpb24uXG5cbkhlcmUncyB0aGUgc3VtbWFyeTpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCwgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb3NgLCBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gXG4qICAgKipFbmFibGVDb25maWdzOioqIGBIVUdFVExCRlNgLCBgTUVNT1JZX0ZBSUxVUkVgLCBgTUVNT1JZX0hPVFBMVUdgXG5cbkFuZCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkuLi4gYEhVR0VUTEJfUEFHRWAgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyBgZGVmX2Jvb2wgSFVHRVRMQkZTYC4gU28gZW5hYmxpbmcgYEhVR0VUTEJGU2Agd2lsbCBpbmhlcmVudGx5IGVuYWJsZSBgSFVHRVRMQl9QQUdFYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgaWYgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lYCBoYXMgYW55IHJlbGV2YW50IGNvbmZpZyBkZXBlbmRlbmNpZXMsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzOTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6NDYuNTU2MDE0NTAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4MTM4NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzkyPXZvaWQgcmVtb3ZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDAwLVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjE0MDE6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XFxubW0vaHVnZXRsYi5jLTE0MDItXFx0XFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xcbi0tXFxubW0vaHVnZXRsYi5jPTE0NjE9c3RhdGljIHZvaWQgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTE0NjUtXFxubW0vaHVnZXRsYi5jOjE0NjY6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XFxubW0vaHVnZXRsYi5jLTE0NjctXFx0XFx0LyogQ2FsbGVycyBtdXN0IGZpbHRlciBnaWdhbnRpY19ub19ydW50aW1lIHVwc3RyZWFtLiAqL1xcbi0tXFxubW0vaHVnZXRsYi5jPTE5Njc9aW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE5OTEtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjE5OTI6XFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbm1tL2h1Z2V0bGIuYy0xOTkzLVxcdFxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vaHVnZXRsYi5jPTIwOTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjA5NS1cXG5tbS9odWdldGxiLmM6MjA5NjpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXFxubW0vaHVnZXRsYi5jLTIwOTctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9odWdldGxiLmM9MjM2NT1zdGF0aWMgdm9pZCByZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMzc0LVxcbm1tL2h1Z2V0bGIuYzoyMzc1OlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiLmMtMjM3Ni1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNjEwPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTM2MzUtXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjM2MzY6XFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbm1tL2h1Z2V0bGIuYy0zNjM3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vaHVnZXRsYi5jPTQwNjI9c3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDY4LVxcbm1tL2h1Z2V0bGIuYzo0MDY5OlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiLmMtNDA3MC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0xOC0gKi9cXG5tbS9odWdldGxiX2ludGVybmFsLmg6MTk6c3RhdGljIGlubGluZSBib29sIGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKHN0cnVjdCBoc3RhdGUgKmgpXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIwLXtcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmM9NzA9c3RhdGljIGludCBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNjdGwuYy04MS1cXG5tbS9odWdldGxiX3N5c2N0bC5jOjgyOlxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiX3N5c2N0bC5jLTgzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jPTExNz1zdGF0aWMgc3NpemVfdCBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMjMtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjEyNDpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXFxubW0vaHVnZXRsYl9zeXNmcy5jLTEyNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6NDguMTU0MTU5OTc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NzUwNTE4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBJbnRlcm5hbHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIFwiUmlnaHQsIHRoYXQncyBhIG1hY3JvLCBvciBwb3RlbnRpYWxseSBhIGZ1bmN0aW9uLCBkZWZpbmVkIHdpdGhpbiB0aGUgaGVhcnQgb2YgdGhlIEh1Z2VUTEIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGJfaW50ZXJuYWwuaGAuXCIgTXkgbWVudGFsIGdlYXJzIHN0YXJ0IHR1cm5pbmcsIHJlY2FsbGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueXRoaW5nIGZvdW5kIGluIHRoYXQgcGFydGljdWxhciBoZWFkZXIuIEl0IHN1Z2dlc3RzIHRoaXMgaXMgYSBjcnVjaWFsIGludGVybmFsIGRldGFpbC4gR2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBgaHVnZXRsYl9pbnRlcm5hbC5oYCBoZWFkZXIsIGl0J3MgZGVmaW5pdGVseSBub3Qgc29tZXRoaW5nIEknZCBleHBlY3QgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgSHVnZVRMQiBjb3JlLlxuXG5UaGUgbmFtZSBpdHNlbGYsIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZWAsIGltbWVkaWF0ZWx5IGhpbnRzIGF0IGl0cyBwdXJwb3NlLiBJdCdzIGxpa2VseSBjaGVja2luZyBpZiBhIHBhcnRpY3VsYXIgSHVnZVRMQiBwYWdlIHNpemUgKGBoc3RhdGVgKSBpcyBvZiB0aGUgXCJnaWdhbnRpY1wiIHZhcmlldHksIHByb2JhYmx5IHRoZSBsYXJnZXN0IGRlZmluZWQgc2l6ZSwgYW5kICptb3JlIHNpZ25pZmljYW50bHkqLCB0aGF0IGl0IGRvZXMgc28gd2l0aG91dCByZXF1aXJpbmcgcnVudGltZSBjYWxjdWxhdGlvbnMgb3IgZHluYW1pYyBsb29rdXBzLiBNeSBicmFpbiBhbHJlYWR5IHN0YXJ0cyB0byBoeXBvdGhlc2l6ZSBhYm91dCB0aGUgdXNlIGNhc2VzOiB0aGlzIHdvdWxkIGJlIGVzc2VudGlhbCBmb3IgZWZmaWNpZW50LCBmYXN0LXBhdGggY2hlY2tzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgcGFydGljdWxhcmx5IGR1cmluZyBwYWdlIGFsbG9jYXRpb24gb3IgVExCIGhhbmRsaW5nLiBJdCdzIGRlc2lnbmVkIGZvciBzcGVlZC4gVGhpcyByZWluZm9yY2VzIHRoZSBhc3N1bXB0aW9uIHRoaXMgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIGNoZWNrLiBLbm93aW5nIGl0IGlzIGJlaW5nIHVzZWQgaW4gSHVnZVRMQiwgSSBxdWlja2x5IHJlY29nbml6ZSB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU4NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjUyLjcyOTIxNDQ4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NjA4OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGJfaW50ZXJuYWwuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiX2ludGVybmFsLmgtMTgtICovXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oOjE5OnN0YXRpYyBpbmxpbmUgYm9vbCBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaC0yMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjUzLjEzNjgzMjE2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzY5MjA3MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIEhlcmUncyBhIHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbXkgZmllbGQsIHN0YXJ0aW5nIHdpdGggdGhlIGJvbGRlZCBoZWFkZXI6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvcmUgQ29uY2VwdCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBCZWZvcmUgSSBldmVuIGJlZ2luIHRvIGZvcm11bGF0ZSBhIGNvbXByZWhlbnNpdmUgYW5hbHlzaXMsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IEknbSBvcGVyYXRpbmcgZnJvbSBhIHNoYXJlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5kYW1lbnRhbCBjb25jZXB0IGF0IGhhbmQuIEl0J3MgdG9vIGVhc3kgdG8gZ2V0IGxvc3QgaW4gbnVhbmNlcyBhbmQgYXBwbGljYXRpb25zIGlmIHRoZSBmb3VuZGF0aW9uYWwgZGVmaW5pdGlvbiBpc24ndCBhaXJ0aWdodC4gU28sIEknbGwgdGFrZSBhIG1vbWVudCwgYSAqbmVjZXNzYXJ5KiBtb21lbnQsIHRvIG1ldGljdWxvdXNseSBzY3J1dGluaXplIHRoZSBhY2NlcHRlZCBkZWZpbml0aW9uLiBJJ20gbm90IGxvb2tpbmcgZm9yIGEgc3VwZXJmaWNpYWwgdW5kZXJzdGFuZGluZzsgSSdtIHNlZWtpbmcgdGhlIHByZWNpc2UsIG51YW5jZWQgYXJ0aWN1bGF0aW9uIHRoYXQgd2lsbCBzZXJ2ZSBhcyB0aGUgYmVkcm9jayBmb3IgYW55IG1lYW5pbmdmdWwgZGlzY3Vzc2lvbiBvciBhc3Nlc3NtZW50LiBUaGlzIGlzIG5vdCBhYm91dCByb3RlIG1lbW9yaXphdGlvbjsgaXQncyBhYm91dCBpbnRlcm5hbGl6aW5nIHRoZSBjb3JlIGVzc2VuY2UgYW5kIGFueSBzdWJ0bGUgaW1wbGljYXRpb25zIHdpdGhpbiB0aGF0IGRlZmluaXRpb24uIE9ubHkgdGhlbiBjYW4gSSBiZSBjb25maWRlbnQgdGhhdCBJJ20gYnVpbGRpbmcgb24gYSBzb2xpZCBmb3VuZGF0aW9uLCBhbmQgdGhhdCBhbnkgc3Vic2VxdWVudCBleHBsb3JhdGlvbiB3aWxsIGJlIHRydWx5IGluc2lnaHRmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMDo1Ni41MDYwNDMwODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYl9pbnRlcm5hbC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdCAqIHJ1bnRpbWUgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiBUaGlzIGlzIGEgY29tbW9uIGNvbmRpdGlvbiB1c2VkIHRvXFxuICAxNjpcXHQgKiBza2lwIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIGdpZ2FudGljIHBhZ2VzIHdoZW4gcnVudGltZVxcbiAgMTc6XFx0ICogc3VwcG9ydCBpcyBkaXNhYmxlZC5cXG4gIDE4OlxcdCAqL1xcbiAgMTk6XFx0c3RhdGljIGlubGluZSBib29sIGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKHN0cnVjdCBoc3RhdGUgKmgpXFxuICAyMDpcXHR7XFxuICAyMTpcXHRcXHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2ICFnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKCk7XFxuICAyMjpcXHR9XFxuICAyMzpcXHRcXG4gIDI0OlxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjEwOjU2LjUwNjE0MzAxMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI3NDQ4OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipXaGVyZSdzIFRoYXQgRnVuY3Rpb24gRGVmaW5lZD8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYC4gTXkgZmlyc3QgdGhvdWdodCBpcywgd2hlcmUgaW4gdGhlIGNvZGViYXNlIGlzIHRoaXMgYWN0dWFsbHkgKmRlZmluZWQqPyBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbi4gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gQSBzcGVjaWZpYyBzb3VyY2UgZmlsZT8gSXMgaXQgcGFydCBvZiBhIGxpYnJhcnk/IFVuZGVyc3RhbmRpbmcgaXRzIG9yaWdpbiBpcyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZGVmaW5pdGlvbiB0byBmaWd1cmUgb3V0IHdoYXQgZmlsZXMgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ1MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTA6NTkuNTMzNjAyMzM5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk5MDgwMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9odWdldGxiLmg9MTk9c3RhdGljIGlubGluZSBpbnQgaHN0YXRlX2dldF9wc2l6ZShzdHJ1Y3QgaHN0YXRlICpoc3RhdGUpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaC0zOC0jZGVmaW5lIF9fSEFWRV9BUkNIX0dJR0FOVElDX1BBR0VfUlVOVElNRV9TVVBQT1JURURcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaDozOTpzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaHVnZXRsYi5oLTQwLXtcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oPTExOD1zdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMjQtI2lmbmRlZiBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg6MTI1OnN0YXRpYyBpbmxpbmUgYm9vbCBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKHZvaWQpXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTI2LXtcXG4tLVxcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaD0xOT1zdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoc3RydWN0IGhzdGF0ZSAqaClcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMjAte1xcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoyMTpcXHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2ICFnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKCk7XFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MDEuMTMyNjg4OTY2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDc3ODY0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgSHVnZVRMQiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGRlZmluaXRpb24gZmlsZSBmb3IgZ2VuZXJpYyBIdWdlVExCIHN1cHBvcnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyB0aGF0IHVuZGVycGluIHRoZSBzeXN0ZW0tYWdub3N0aWMgYXNwZWN0cyBvZiB0aGUgaHVnZSBwYWdlIGltcGxlbWVudGF0aW9uLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgYGluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oYC4gVGhpcyBmaWxlIHNob3VsZCBwcm92aWRlIGEgZm91bmRhdGlvbmFsIHVuZGVyc3RhbmRpbmcsIGxldHRpbmcgbWUgdGhlbiB0cmFjZSBmcm9tIHRoZXJlIGludG8gdGhlIG1vcmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaWYgSSBuZWVkIHRvLiBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZ2VuZXJpYyBmdW5jdGlvbmFsaXR5IGlzIHN0cnVjdHVyZWQgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBudWFuY2VzIG9mIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Uga2V5IGRlZmluaXRpb25zLCBhbnkgaW5saW5lIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhZ2UgbWFuYWdlbWVudCBvciBhbGxvY2F0aW9uLCBhbmQgYW55IGNvcmUgc3RydWN0dXJlcyB0aGF0IGFyZSBjZW50cmFsIHRvIHRoZSBodWdlIHBhZ2UgaW1wbGVtZW50YXRpb24gYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MDUuNDgwNDc4NTAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHRyZXR1cm4gcHRlcF9nZXQocHRlcCk7XFxuIDEyMTpcXHR9XFxuIDEyMjpcXHQjZW5kaWZcXG4gMTIzOlxcdFxcbiAxMjQ6XFx0I2lmbmRlZiBfX0hBVkVfQVJDSF9HSUdBTlRJQ19QQUdFX1JVTlRJTUVfU1VQUE9SVEVEXFxuIDEyNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCh2b2lkKVxcbiAxMjY6XFx0e1xcbiAxMjc6XFx0XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpO1xcbiAxMjg6XFx0fVxcbiAxMjk6XFx0I2VuZGlmIC8qIF9fSEFWRV9BUkNIX0dJR0FOVElDX1BBR0VfUlVOVElNRV9TVVBQT1JURUQgKi9cXG4gMTMwOlxcdFxcbiAxMzE6XFx0I2VuZGlmIC8qIF9BU01fR0VORVJJQ19IVUdFVExCX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MDUuNDgwNTUxMzQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxODg5Mjc3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHaWdhbnRpYyBQYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBoaW5nZXMgb24gYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gUmlnaHQsIGlmIHRoaXMgaXMgZW5hYmxlZCwgdGhlbiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCByZXR1cm5zIHRydWUsIGFuZCBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoKWAgcmV0dXJucyBmYWxzZS4gVGhlIHBhdGNoIGluY2x1ZGVzIGEgY2hlY2sgZm9yIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAuIFNvLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICppcyogZW5hYmxlZCwgdGhlbiB0aGlzIGNoZWNrIGlzIGVmZmVjdGl2ZWx5IHNraXBwZWQsIHVubGVzcyB0aGUgYXJjaGl0ZWN0dXJlIGRvZXMgc29tZXRoaW5nIGNsZXZlciB3aXRoIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgIHRvIG1ha2UgaXQgZHluYW1pY2FsbHkgcmV0dXJuIGZhbHNlLlxuXG5CdXQsIGhhbmcgb24sIGlmIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgKm5vdCogZW5hYmxlZCwgdGhlbiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCAqaXMqIGZhbHNlLiBBbmQsIGluIHRoYXQgc2NlbmFyaW8sIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgcmV0dXJucyB0cnVlIGZvciBnaWdhbnRpYyBwYWdlcy4gU28sIHRoaXMgY2hlY2sgKndvdWxkKiBiZSBleGVjdXRlZC5cblxuU28sIHRoZSBpbnRlbmRlZCBiZWhhdmlvci4uLml0IHNvdW5kcyBsaWtlIHdlICp3YW50KiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIHRvIGJlIGRpc2FibGVkPyBPciBtYXliZSBpdCBpcyBlbmFibGVkLCBidXQgdGhlIGFyY2hpdGVjdHVyZSAqc2hvdWxkKiBub3Qgc3VwcG9ydCBnaWdhbnRpYyBwYWdlcyBhdCBydW50aW1lP1xuXG5MZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoIGFnYWluLCBpZiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgICppcyogZGlzYWJsZWQsIHRoZW4sIHdpdGhvdXQgYW4gb3ZlcnJpZGUsIGBnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKClgICppcyogZmFsc2UsIHJpZ2h0P1xuXG5JIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgYG1tL0tjb25maWdgIG9yIGBhcmNoL0tjb25maWdgIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgaW50ZW5kZWQgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDY2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MTEuNjY5NDgxNjg0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEwMTM5OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjgzPWNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcXG4tLVxcbmZzL0tjb25maWctMjg2LVxcbmZzL0tjb25maWc6Mjg3OmNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuZnMvS2NvbmZpZy0yODgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMToxMy4yNzk2MjcyOTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMTM4MTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBcIldoeSBpcyB0aGlzIGJlaW5nIGNoZWNrZWQgaW4gdGhlIGZpcnN0IHBsYWNlP1wiICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN1cHBvcnQgZm9yIGxhcmdlIG1lbW9yeSBwYWdlcywgb2Z0ZW4gcmVmZXJyZWQgdG8gYXMgaHVnZSBwYWdlcyBvciBnaWdhbnRpYyBwYWdlcywgYWx0aG91Z2ggdGhlIGV4YWN0IHRlcm0gZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uLlxuXG5JJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgSSBrbm93LiAgV2hpY2ggb25lcyAqd291bGRuJ3QqIGhhdmUgdGhpcywgYW5kIHdoeT8gIEFSTT8gIHg4Nj8gIFJJU0MtVj8gIFBvd2VyUEM/ICBJdCdzIHVzdWFsbHkgcHJldHR5IG9idmlvdXMgd2hpY2ggb25lcyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGNvbmNlcHQgaW4gbWluZCwgYnV0IGV2ZW4gdGhlIG9uZXMgdGhhdCBkbyBzdXBwb3J0IHRoaXMsIGhhdmUgdW5pcXVlIGltcGxlbWVudGF0aW9ucyB0byBjb250ZW5kIHdpdGguXG5cblRoZSBjaGVjayBpdHNlbGYgc3VnZ2VzdHMgdGhhdCB0aGUgY29kZSBiYXNlIG5lZWRzIHRvIGFkYXB0IGl0cyBiZWhhdmlvciBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBzdXBwb3J0cyBhbmQgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIHRvIHVzZSByZWFsbHkgYmlnIG1lbW9yeSBwYWdlcy4gIFRoaXMgcHJvYmFibHkgdGllcyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMsIHBhZ2UgdGFibGUgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IG9wdGltaXphdGlvbnMgaW4gZHJpdmVycyBvciBvdGhlciBwZXJmb3JtYW5jZS1jcml0aWNhbCBrZXJuZWwgc3Vic3lzdGVtcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuICBJZiBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgZGVmaW5lZCwgdGhlIGNvZGUgbWlnaHQgdXNlIGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uLCBvciBldmVuIGNvbXBsZXRlbHkgZGlmZmVyZW50IGNvZGUgcGF0aHMgdG8gbWFuYWdlIHRob3NlIHBvdGVudGlhbGx5IGh1Z2UgY2h1bmtzIG9mIG1lbW9yeS4gIFRoZXJlIG1heSBiZSBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgdG8gdXNpbmcgdGhpcyBvbiBhbiBhcmNoaXRlY3R1cmUgd2hpY2ggaGFzIHN1cHBvcnQsIGFzIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBhIHNtYWxsZXIgcGFnZSBzaXplIGNhbiBiZWNvbWUgc2lnbmlmaWNhbnQuICBUaGVyZSBhbHNvIG1pZ2h0IGJlIHJlc3RyaWN0aW9ucyB0byBob3cgaXQgY2FuIGJlIHVzZWQsIGhvd2V2ZXIuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIHRvIHNlZSBob3cgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzICp1c2VkKiAtLSB0aGF0J3MgdGhlIHJlYWwga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gIEknbSBsb29raW5nIGZvciB0aGUgYCNpZmRlZiBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYCBibG9ja3MsIG9idmlvdXNseSwgYnV0IGFsc28gZm9yIGluZGlyZWN0IGRlcGVuZGVuY2llcy4gIFRoZSB1c2UgY2FzZSB3aWxsIHRlbGwgdGhlIHN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjE4LjAxMTAxMjg3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyODAzMjY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zMi1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmFyY2gvYXJtNjQvS2NvbmZpZzozMzpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0zNC1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTEzOC1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjEzOTpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcdFxcdGlmIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTQwLVxcdHNlbGVjdCBBUkNIX0hBU19LQ09WXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMzUtXFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcXG5hcmNoL3Jpc2N2L0tjb25maWc6MzY6XFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcXG5hcmNoL3Jpc2N2L0tjb25maWctMzctXFx0c2VsZWN0IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTk3LVxcdHNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMXFxuYXJjaC9zMzkwL0tjb25maWc6OTg6XFx0c2VsZWN0IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcXG5hcmNoL3MzOTAvS2NvbmZpZy05OS1cXHRzZWxlY3QgQVJDSF9IQVNfS0NPVlxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTI9Y29uZmlnIFNVUEVSSFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTktXFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxcbmFyY2gvc2gvS2NvbmZpZzoxMDpcXHRzZWxlY3QgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmFyY2gvc2gvS2NvbmZpZy0xMS1cXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTcwPWNvbmZpZyBTUEFSQzY0XFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMTA3LVxcdHNlbGVjdCBQQ0lfRE9NQUlOUyBpZiBQQ0lcXG5hcmNoL3NwYXJjL0tjb25maWc6MTA4OlxcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuYXJjaC9zcGFyYy9LY29uZmlnLTEwOS1cXHRzZWxlY3QgSEFWRV9TT0ZUSVJRX09OX09XTl9TVEFDS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0yMz1jb25maWcgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI2LVxcdCMgT3B0aW9ucyB0aGF0IGFyZSBpbmhlcmVudGx5IDY0LWJpdCBrZXJuZWwgb25seTpcXG5hcmNoL3g4Ni9LY29uZmlnOjI3OlxcdHNlbGVjdCBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXFxuYXJjaC94ODYvS2NvbmZpZy0yOC1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NU0VBTF9TWVNURU1fTUFQUElOR1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MTkuNjM5MDU1NTkxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTYzNzM3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEdpZ2FudGljIFBhZ2UgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvZGUgYW5kIHRyeWluZyB0byBmb2xsb3cgdGhlIGxvZ2ljIGFyb3VuZCBnaWdhbnRpYyBwYWdlcy4gSXQgc2VlbXMgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGVuYWJsZWQgYWNyb3NzIHNldmVyYWwgYXJjaGl0ZWN0dXJlczogeDg2XzY0LCBhcm02NCwgcmlzY3YsIHMzOTAsIHNoLCBzcGFyYzY0LCBhbmQgcG93ZXJwYy4gIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGlmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZW4gYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgKnNob3VsZCogcmV0dXJuIHRydWUuXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uaWYgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgZG9lcyByZXR1cm4gdHJ1ZSwgdGhlbiBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaClgIGlzIHN1cHBvc2VkIHRvIHJldHVybiBmYWxzZS4gIEFuZCBpZiAqdGhhdCogZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIGNvZGUgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGlzbid0IGFjdHVhbGx5IGV4ZWN1dGVkLi4uIHVubGVzcywgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvdmVycmlkZXMgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAuIFNvIHRoZSBiZWhhdmlvciBvZiB0aGUgcGF0Y2ggd2lsbCBkZXBlbmQgb24gdGhlIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbi5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgZ2lnYW50aWNfcGFnZV9ydW50aW1lX3N1cHBvcnRlZCgpYCBpbiBwb3dlcnBjIHNwZWNpZmljYWxseS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgbWlnaHQgaGFwcGVuLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjI1LjA1NTQzMjY1M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2h1Z2V0bGIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNTpcXHRcXHR9XFxuICAzNjpcXHR9XFxuICAzNzpcXHRcXG4gIDM4OlxcdCNkZWZpbmUgX19IQVZFX0FSQ0hfR0lHQU5USUNfUEFHRV9SVU5USU1FX1NVUFBPUlRFRFxcbiAgMzk6XFx0c3RhdGljIGlubGluZSBib29sIGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQodm9pZClcXG4gIDQwOlxcdHtcXG4gIDQxOlxcdFxcdC8qXFxuICA0MjpcXHRcXHQgKiBXZSB1c2VkIGdpZ2FudGljIHBhZ2UgcmVzZXJ2YXRpb24gd2l0aCBoeXBlcnZpc29yIGFzc2lzdCBpbiBzb21lIGNhc2UuXFxuICA0MzpcXHRcXHQgKiBXZSBjYW5ub3QgdXNlIHJ1bnRpbWUgYWxsb2NhdGlvbiBvZiBnaWdhbnRpYyBwYWdlcyBpbiB0aG9zZSBwbGF0Zm9ybXNcXG4gIDQ0OlxcdFxcdCAqIFRoaXMgaXMgaGFzaCB0cmFuc2xhdGlvbiBtb2RlIExQQVJzLlxcbiAgNDU6XFx0XFx0ICovXFxuICA0NjpcXHRcXHRpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSBcXHUwMDI2XFx1MDAyNiAhcmFkaXhfZW5hYmxlZCgpKVxcbiAgNDc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MjUuMDU1NTE0MDczWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDg1MDU3NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2lnYW50aWMgUGFnZSBDb2RlIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE9uIFBvd2VyUEMsIHRoaXMgYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgZnVuY3Rpb24gY291bGQgcmV0dXJuIGBmYWxzZWAsIHdoaWNoIGlzIGZpbmUsIHRoYXQgbWFrZXMgc2Vuc2UuIE5vdywgd2hhdCBhYm91dCB4ODY/IE9uIHg4NiwgaXQgZG9lc24ndCBvdmVycmlkZSB0aGUgZGVmYXVsdCwgc28gaXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgYElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpYC4gVGhhdCdzIGB0cnVlYCBvbiB4ODZfNjQsIHdoaWNoIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byBsb29rIGZvciB3aGVyZSBhIHBvc3NpYmxlIHByb2JsZW0gbWF5IGJlLiBJZiBpdCdzIHRydWUgb24geDg2XzY0LCB0aGVuIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgKmFsd2F5cyogZW5kcyB1cCBiZWluZyBmYWxzZS4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIHRoZSBhZGRlZCBjb25kaXRpb25hbCBgaWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKWAgd291bGQgbmV2ZXIgYmUgZW50ZXJlZCBvbiB4ODZfNjQhIEJ1dC4uLiBzeXpib3QgZm91bmQgdGhpcywgYW5kIHN5emJvdCB1c3VhbGx5IHJ1bnMgb24geDg2XzY0LiBUaGF0J3MgY29uZnVzaW5nLlxuXG5Tbywgc3l6Ym90LiBEb2VzIGl0IG9ubHkgcnVuIG9uIHg4Nl82ND8gTWF5YmUgaXQgY2FuIGFsc28gdGVzdCB4ODZfMzI/IExldCdzIGNoZWNrLiBBaCwgc3l6Ym90IGRvZXMgaGF2ZSB4ODZfMzIgaW5zdGFuY2VzLiBIb3dldmVyLCBtYXliZSBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgbm90IGVuYWJsZWQgb24geDg2XzMyPyBXYWl0LCBgQ09ORklHX1g4Nl82NGAgYWN0dWFsbHkgKnNlbGVjdHMqIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gU28gdGhhdCBtZWFucywgb24geDg2XzMyLCBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgTk9UIHNlbGVjdGVkLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZW4gYGdpZ2FudGljX3BhZ2VfcnVudGltZV9zdXBwb3J0ZWQoKWAgd291bGQgcmV0dXJuIGBmYWxzZWAuIEFuZCBpbiB0aGF0IGNhc2UsIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKWAgd291bGQgcmV0dXJuIGB0cnVlYCBmb3IgZ2lnYW50aWMgcGFnZXMhIE9rYXksIHNvIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZSBvbiB4ODZfMzIsIGFuZCBhbHNvIG9uIFBvd2VyUEMuXG5cbkJ1dCB3YWl0LCBjYW4gc3l6Ym90ICpyZWFsbHkqIHJ1biBvbiB4ODZfMzI/IFllcywgaXQgZG9lcy4gQW5kIGl0IGFsc28gdGVzdHMgb3RoZXIgYXJjaGl0ZWN0dXJlcyBsaWtlIEFSTSBhbmQgUklTQy1WLiBCdXQgY291bGQgc3l6Ym90IGJlIHRlc3RpbmcgYW4geDg2XzY0IGNvbmZpZ3VyYXRpb24gd2l0aCB4ODZfMzIgZW5hYmxlZD8gQWgsIG5vLCBgQ09ORklHX1g4Nl8zMmAgaXMgbm90IGEgdGhpbmcsIGl0J3MgYENPTkZJR19YODZfMzJgIG9yIGBDT05GSUdfWDg2XzY0YC5cblxuT2theSwgYXJlIHRoZXJlIGFueSBvdGhlciB3YXlzIGBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZWAgY2FuIGJlIHRydWU/IExldCdzIGdvIGJhY2sgYW5kIGNoZWNrIGBoc3RhdGVfaXNfZ2lnYW50aWNgIG1vcmUgY2xvc2VseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMTozNS4xNDA1NzQ0MzlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTQyOTk0MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHN0YXRlX2lzX2dpZ2FudGljXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTc5OT1zdGF0aWMgaW5saW5lIGJvb2wgb3JkZXJfaXNfZ2lnYW50aWModW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODAzLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjgwNDpzdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljKHN0cnVjdCBoc3RhdGUgKmgpXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODA1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTkyNz1zdGF0aWMgaW5saW5lIGJvb2wgaHVnZXBhZ2VfbW92YWJsZV9zdXBwb3J0ZWQoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTkzMS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo5MzI6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcXHUwMDI2XFx1MDAyNiAhbW92YWJsZV9naWdhbnRpY19wYWdlcylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC05MzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTE4NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBodWdlX3BhZ2Vfc2hpZnQoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExODktXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTE5MDpzdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljKHN0cnVjdCBoc3RhdGUgKmgpXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTE5MS17XFxuLS1cXG5tbS9odWdldGxiLmM9MTM5Mj12b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9odWdldGxiLmMtMTQwMC1cXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbm1tL2h1Z2V0bGIuYzoxNDAxOlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkge1xcbm1tL2h1Z2V0bGIuYy0xNDAyLVxcdFxcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNDYxPXN0YXRpYyB2b2lkIF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xNDY1LVxcbm1tL2h1Z2V0bGIuYzoxNDY2OlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkge1xcbm1tL2h1Z2V0bGIuYy0xNDY3LVxcdFxcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYz0xOTY3PWludCBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xOTkxLVxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoxOTkyOlxcdFxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiLmMtMTk5My1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMDkxPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIwOTUtXFxubW0vaHVnZXRsYi5jOjIwOTY6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbm1tL2h1Z2V0bGIuYy0yMDk3LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubW0vaHVnZXRsYi5jPTIxMzk9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNDMtXFxubW0vaHVnZXRsYi5jOjIxNDQ6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcXG5tbS9odWdldGxiLmMtMjE0NS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMzY1PXN0YXRpYyB2b2lkIHJldHVybl91bnVzZWRfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIzNzQtXFxubW0vaHVnZXRsYi5jOjIzNzU6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxcbm1tL2h1Z2V0bGIuYy0yMzc2LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vaHVnZXRsYi5jPTI3NzM9aW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNzgyLVxcdGZvcl9lYWNoX2hzdGF0ZShoKSB7XFxubW0vaHVnZXRsYi5jOjI3ODM6XFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcXG5tbS9odWdldGxiLmMtMjc4NC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zMjk2PXN0YXRpYyB2b2lkIF9faW5pdCBnYXRoZXJfYm9vdG1lbV9wcmVhbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgbmlkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTMzMjUtXFxubW0vaHVnZXRsYi5jOjMzMjY6XFx0XFx0Vk1fQlVHX09OKCFoc3RhdGVfaXNfZ2lnYW50aWMoaCkpO1xcbm1tL2h1Z2V0bGIuYy0zMzI3LVxcdFxcdFdBUk5fT04oZm9saW9fcmVmX2NvdW50KGZvbGlvKSAhPSAxKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zMzg3PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMzM5My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaC1cXHUwMDNlbWF4X2h1Z2VfcGFnZXNfbm9kZVtuaWRdOyArK2kpIHtcXG5tbS9odWdldGxiLmM6MzM5NDpcXHRcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKSB7XFxubW0vaHVnZXRsYi5jLTMzOTUtXFx0XFx0XFx0aWYgKCFhbGxvY19ib290bWVtX2h1Z2VfcGFnZShoLCBuaWQpKVxcbi0tXFxubW0vaHVnZXRsYi5jPTM1ODA9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiLmMtMzU4Ny1cXHQgKi9cXG5tbS9odWdldGxiLmM6MzU4ODpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfY21hX3RvdGFsX3NpemUoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2V0bGIuYy0zNTg5LVxcdCAgICAhaHVnZXRsYl9lYXJseV9jbWEoaCkpIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNjAxLVxcdC8qIGJlbG93IHdpbGwgZG8gYWxsIG5vZGUgYmFsYW5jZWQgYWxsb2MgKi9cXG5tbS9odWdldGxiLmM6MzYwMjpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljKGgpKVxcbm1tL2h1Z2V0bGIuYy0zNjAzLVxcdFxcdGFsbG9jYXRlZCA9IGh1Z2V0bGJfZ2lnYW50aWNfcGFnZXNfYWxsb2NfYm9vdChoKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0zNjEwPXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTM2MjQtXFx0XFx0Lyogb3ZlcnNpemUgaHVnZXBhZ2VzIHdlcmUgaW5pdCdlZCBpbiBlYXJseSBib290ICovXFxubW0vaHVnZXRsYi5jOjM2MjU6XFx0XFx0aWYgKCFoc3RhdGVfaXNfZ2lnYW50aWMoaCkpXFxubW0vaHVnZXRsYi5jLTM2MjYtXFx0XFx0XFx0aHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoaCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzYzNS1cXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6MzYzNjpcXHRcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXFxubW0vaHVnZXRsYi5jLTM2MzctXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9odWdldGxiLmM9MzY3Mz1zdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9sb3coc3RydWN0IGhzdGF0ZSAqaCwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNjc5LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjM2ODA6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcXG5tbS9odWdldGxiLmMtMzY4MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9odWdldGxiLmM9Mzc0NT1zdGF0aWMgaW50IHNldF9tYXhfaHVnZV9wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTM4MDEtXFx0ICovXFxubW0vaHVnZXRsYi5jOjM4MDI6XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSBcXHUwMDI2XFx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfQ09OVElHX0FMTE9DKSkge1xcbm1tL2h1Z2V0bGIuYy0zODAzLVxcdFxcdGlmIChjb3VudCBcXHUwMDNlIHBlcnNpc3RlbnRfaHVnZV9wYWdlcyhoKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTQwNjI9c3NpemVfdCBfX25yX2h1Z2VwYWdlc19zdG9yZV9jb21tb24oYm9vbCBvYmV5X21lbXBvbGljeSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00MDY4LVxcbm1tL2h1Z2V0bGIuYzo0MDY5OlxcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiLmMtNDA3MC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2h1Z2V0bGIuYz00NDczPXZvaWQgX19pbml0IGh1Z2V0bGJfYm9vdG1lbV9hbGxvYyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTQ0ODctXFxubW0vaHVnZXRsYi5jOjQ0ODg6XFx0XFx0aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSlcXG5tbS9odWdldGxiLmMtNDQ4OS1cXHRcXHRcXHRodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlcyhoKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmM9Mjg3PWJvb2wgX19pbml0IGh1Z2V0bGJfZWFybHlfY21hKHN0cnVjdCBoc3RhdGUgKmgpXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI5MS1cXG5tbS9odWdldGxiX2NtYS5jOjI5MjpcXHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2IGh1Z2V0bGJfY21hX29ubHk7XFxubW0vaHVnZXRsYl9jbWEuYy0yOTMtfVxcbi0tXFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTE4LSAqL1xcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoxOTpzdGF0aWMgaW5saW5lIGJvb2wgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoc3RydWN0IGhzdGF0ZSAqaClcXG5tbS9odWdldGxiX2ludGVybmFsLmgtMjAte1xcbm1tL2h1Z2V0bGJfaW50ZXJuYWwuaDoyMTpcXHRyZXR1cm4gaHN0YXRlX2lzX2dpZ2FudGljKGgpIFxcdTAwMjZcXHUwMDI2ICFnaWdhbnRpY19wYWdlX3J1bnRpbWVfc3VwcG9ydGVkKCk7XFxubW0vaHVnZXRsYl9pbnRlcm5hbC5oLTIyLX1cXG4tLVxcbm1tL2h1Z2V0bGJfc3lzY3RsLmM9NzA9c3RhdGljIGludCBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubW0vaHVnZXRsYl9zeXNjdGwuYy04MS1cXG5tbS9odWdldGxiX3N5c2N0bC5jOjgyOlxcdGlmICh3cml0ZSBcXHUwMDI2XFx1MDAyNiBoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcXG5tbS9odWdldGxiX3N5c2N0bC5jLTgzLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubW0vaHVnZXRsYl9zeXNmcy5jPTExNz1zdGF0aWMgc3NpemVfdCBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2V0bGJfc3lzZnMuYy0xMjMtXFxubW0vaHVnZXRsYl9zeXNmcy5jOjEyNDpcXHRpZiAoaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaCkpXFxubW0vaHVnZXRsYl9zeXNmcy5jLTEyNS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6MzYuNjM0ODc5NDQ4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NDE5ODg5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBIdWdldGxiIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSXMgYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBldmVuIGEgcmVhbCBjb25kaXRpb24/XCIgQnV0IHRoZW4gSSB0cmFjZWQgaXQgdGhyb3VnaCB0aGUgY29kZSDigJMgaXQgKmlzKiB1c2VkIGluIHNldmVyYWwgY3J1Y2lhbCBwbGFjZXM6IGBucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19zdG9yZWAsIGBodWdldGxiX292ZXJjb21taXRfaGFuZGxlcmAsIGFuZCBgX19ucl9odWdlcGFnZXNfc3RvcmVfY29tbW9uYCwgc28gaXQncyBhIHZhbGlkIGFuZCBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBzdGF0ZS4gVGhpcyBwYXRjaCBjb3JyZWN0bHkgYWRkcmVzc2VzIHRoYXQuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIGNoZWNrIGZvciBgaHN0YXRlX2lzX2dpZ2FudGljX25vX3J1bnRpbWUoaClgIHdpdGhpbiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYC4gVGhhdCBtYWtlcyBpdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaXMgcmVhY2hhYmxlLiBJdCBzZWVtcyB0aGlzIGZpeCBwcmV2ZW50cyBjb3JydXB0aW9uIGluIHRoZSBmcmVlbGlzdCB3aGVuIGRpc3NvbHZpbmcgYSBnaWdhbnRpYyBmb2xpbyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydCwgd2hpY2ggaGFwcGVucyB1cG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCDigJMgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlLiBUaGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZTogYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AsIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCwgYW5kIGByZW1vdmVfaHVnZXRsYl9mb2xpb2AuXG5cbmBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjaG9pY2UsIHNpbmNlIGl0IGNhbGxzIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIGluIGEgbG9vcC4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBpcyBhbm90aGVyIGdvb2QgY2hvaWNlLCBzaW5jZSBpdCdzIGEgY29yZSBodWdldGxiIGZ1bmN0aW9uIHdpdGggdGhlIGBWTV9XQVJOX09OX09OQ0UoMSlgIGFkZGl0aW9uIGluIHRoZSBwYXRjaCwgd2hpY2ggbWFrZXMgaXQgaW1wb3J0YW50IHRvIHRyYWNlIGFuZCBmdXp6LlxuXG5Gb3IgdGhlIGNvbmZpZ3VyYXRpb25zLCBgSFVHRVRMQkZTYCBpcyBlc3NlbnRpYWwsIHNpbmNlIGl0IGVuYWJsZXMgYEhVR0VUTEJfUEFHRWAuIEFuZCwgYE1FTU9SWV9GQUlMVVJFYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBhcmUgdGhlIGNvcnJlY3QgY29uZmlncyBhcyB0aGV5IGFyZSB0aGUgY2FsbGVycyBvZiBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYC5cblxuT2theSwgSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4NCwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDU6MTE6NDUuMzc2ODcyNjY2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxODEyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9zXCIsXG4gICAgXCJyZW1vdmVfaHVnZXRsYl9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGh1Z2V0bGIgd2hlcmUgZGlzc29sdmluZyBhIGdpZ2FudGljIGZvbGlvIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0IHdvdWxkIGxlYXZlIGl0IG9uIHRoZSBmcmVlIGxpc3QsIGxlYWRpbmcgdG8gbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBJdCBhZGRzIGEgY2hlY2sgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggZm9saW9zLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgZmFpbHVyZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvc1wiLFxuICAgIFwicmVtb3ZlX2h1Z2V0bGJfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBodWdldGxiIHdoZXJlIGRpc3NvbHZpbmcgYSBnaWdhbnRpYyBmb2xpbyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydCB3b3VsZCBsZWF2ZSBpdCBvbiB0aGUgZnJlZSBsaXN0LCBsZWFkaW5nIHRvIGxpc3QgY29ycnVwdGlvbiBvbiB2bWVtbWFwIHJlc3RvcmUgZmFpbHVyZS4gSXQgYWRkcyBhIGNoZWNrIGluIGBkaXNzb2x2ZV9mcmVlX2h1Z2V0bGJfZm9saW9gIHRvIGJhaWwgb3V0IGVhcmx5IGZvciBzdWNoIGZvbGlvcywgYW5kIGFkZHMgd2FybmluZ3MgaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgbWVtb3J5IGhvdHBsdWcgb3IgbWVtb3J5IGZhaWx1cmUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjQ1LjQ1MjA2MDg1NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0NDc1MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjQ1LjQ1MjYzMDkwNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDQ0MTU5NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBsaXN0IGNvcnJ1cHRpb24gaXNzdWUgaW4gdGhlIGh1Z2V0bGIgc3Vic3lzdGVtIHdoZW4gZGlzc29sdmluZyBnaWdhbnRpYyBwYWdlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydC4gSXQgbW9kaWZpZXMgYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdG8gYmFpbCBvdXQgZWFybHkgZm9yIHN1Y2ggaHN0YXRlcywgYW5kIGFkZHMgd2FybmluZ3MgaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gLiBUaGVzZSBjaGFuZ2VzIHByZXZlbnQgbGlzdCBjb3JydXB0aW9uIG9uIHZtZW1tYXAgcmVzdG9yZSBmYWlsdXJlLiBUaGUgYnVncyBwcmV2ZW50ZWQgYnkgdGhpcyBwYXRjaCBhcmUgcmVsYXRlZCB0byBsaXN0IGNvcnJ1cHRpb24sIHdoaWNoIGNhbiBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMuIFRoZXNlIGFyZSB3ZWxsIHdpdGhpbiB0aGUgc2NvcGUgb2YgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZDE4YWFmNGYzN2ViMDQyZGVhM2EyYWU4NzYwZTgxNGM5MjUzNzc0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDU6MDk6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IGU5M2M0ZDI0NTZhYTQuLjY3YTUwMjI5MzY5ODMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzOTgsOCArMTM5OCwxMSBAQCB2b2lkIHJlbW92ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRWTV9CVUdfT05fRk9MSU8oaHVnZXRsYl9jZ3JvdXBfZnJvbV9mb2xpb19yc3ZkKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKVxuK1x0aWYgKGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpKSB7XG4rXHRcdC8qIENhbGxlcnMgbXVzdCBmaWx0ZXIgZ2lnYW50aWNfbm9fcnVudGltZSB1cHN0cmVhbS4gKi9cbitcdFx0Vk1fV0FSTl9PTl9PTkNFKDEpO1xuIFx0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHRsaXN0X2RlbChcdTAwMjZmb2xpby1cdTAwM2VscnUpO1xuIFxuQEAgLTE0NjAsOCArMTQ2MywxMSBAQCBzdGF0aWMgdm9pZCBfX3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4ge1xuIFx0Ym9vbCBjbGVhcl9mbGFnID0gZm9saW9fdGVzdF9odWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkKGZvbGlvKTtcbiBcbi1cdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbitcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSkge1xuK1x0XHQvKiBDYWxsZXJzIG11c3QgZmlsdGVyIGdpZ2FudGljX25vX3J1bnRpbWUgdXBzdHJlYW0uICovXG4rXHRcdFZNX1dBUk5fT05fT05DRSgxKTtcbiBcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LypcbiBcdCAqIElmIHdlIGRvbid0IGtub3cgd2hpY2ggc3VicGFnZXMgYXJlIGh3cG9pc29uZWQsIHdlIGNhbid0IGZyZWVcbkBAIC0xOTc3LDYgKzE5ODMsMTUgQEAgaW50IGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gZm9saW9faHN0YXRlKGZvbGlvKTtcbiBcdFx0Ym9vbCBhZGp1c3Rfc3VycGx1cyA9IGZhbHNlO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiByZW1vdmVfaHVnZXRsYl9mb2xpbygpL3VwZGF0ZV9hbmRfZnJlZV9odWdldGxiX2ZvbGlvKCkgYmFpbFxuK1x0XHQgKiBmb3IgZ2lnYW50aWMgaHN0YXRlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydCwgc28gZGlzc29sdmluZyBvbmVcbitcdFx0ICogaGVyZSB3b3VsZCBsZWF2ZSBpdCBvbiB0aGUgZnJlZSBsaXN0IGFuZCwgb24gdm1lbW1hcCByZXN0b3JlXG4rXHRcdCAqIGZhaWx1cmUsIHRoZSBhZGRfaHVnZXRsYl9mb2xpbygpIHJvbGxiYWNrIGNvcnJ1cHRzIHRoYXQgbGlzdC5cbitcdFx0ICovXG4rXHRcdGlmIChoc3RhdGVfaXNfZ2lnYW50aWNfbm9fcnVudGltZShoKSlcbitcdFx0XHRnb3RvIG91dDtcbitcbiBcdFx0aWYgKCFhdmFpbGFibGVfaHVnZV9wYWdlcyhoKSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA1OjExOjQ1LjQ1MjYzMTgyNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDQ0MTM4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZXRsYiBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgZ2lnYW50aWMgcGFnZXMgYXJlIGhhbmRsZWQgd2hlbiBydW50aW1lIHN1cHBvcnQgaXNuJ3QgcHJlc2VudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBjb25jZXJucywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGNvbnRyb2wgZmxvdyBhbmQgbGlzdCBtYW5hZ2VtZW50LiBJdCdzIGFkZGluZyBgVk1fV0FSTl9PTl9PTkNFKDEpYCBjYWxscyB3aXRoaW4gYHJlbW92ZV9odWdldGxiX2ZvbGlvYCBhbmQgYF9fdXBkYXRlX2FuZF9mcmVlX2h1Z2V0bGJfZm9saW9gIHdoZW4gYGhzdGF0ZV9pc19naWdhbnRpY19ub19ydW50aW1lKGgpYCBpcyB0cnVlLiBJdCdzIGFsc28gYmFpbGluZyBvdXQgZWFybHkgaW4gYGRpc3NvbHZlX2ZyZWVfaHVnZXRsYl9mb2xpb2AgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9uLiBUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gcHJldmVudCBsaXN0IGNvcnJ1cHRpb24sIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2Ygdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuXG5cbk5vdywgY29uc2lkZXJpbmcgbXkgYXJlYSBvZiBleHBlcnRpc2UsIGxldCdzIGRyaWxsIGludG8gdGhlIEtNU0FOIGltcGxpY2F0aW9ucy4gVGhlIHByaW1hcnkgd29ycnkgaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhpcyBsb29rcyBsaWtlIGEgY29udHJvbC1mbG93IGNoYW5nZSBkZXNpZ25lZCB0byAqYXZvaWQqIG1lbW9yeSBzYWZldHkgaXNzdWVzIHJhdGhlciB0aGFuIGludHJvZHVjZSBuZXcgb25lcy4gVGhlIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBmaWVsZHMgd2l0aGluIHN0cnVjdHMsIGFuZCBub3RoaW5nIGlzIGJlaW5nIHdyaXR0ZW4gdG8gdXNlcnNwYWNlIHRoYXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMuIENydWNpYWxseSwgSSBzZWUgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBjcmVhdGluZyBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cblxuTGlzdCBjb3JydXB0aW9uIGlzIGEgd2VsbC1kZWZpbmVkIGNsYXNzIG9mIG1lbW9yeSBzYWZldHkgaXNzdWVzIC0tIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIGV0Yy4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29scyBhcmUgYWxyZWFkeSB3ZWxsIGVxdWlwcGVkIHRvIGNhdGNoIHRob3NlIGtpbmRzIG9mIHByb2JsZW1zLiBUaGlzIHBhdGNoIGlzIHNpbXBseSB0aWdodGVuaW5nIHRoZSBleGlzdGluZyBtZWNoYW5pc21zIHRvIHByZXZlbnQgdGhvc2Ugc2NlbmFyaW9zIGluIGEgc3BlY2lmaWMgZWRnZSBjYXNlLlxuXG5UaGVyZWZvcmUsIGdpdmVuIG15IGFuYWx5c2lzLCB0aGUgcGF0Y2ggZG9lc24ndCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoJ3MgY2hhbmdlcyBwcmV2ZW50IGEgc3BlY2lmaWMgbGlzdCBjb3JydXB0aW9uIGlzc3VlIHdoZW4gZGlzc29sdmluZyBnaWdhbnRpYyBwYWdlcyB3aXRob3V0IHJ1bnRpbWUgc3VwcG9ydC4gVGhpcyBpcyBhIGNvbnRyb2wtZmxvdyBjaGFuZ2UsIGltcHJvdmluZyBtZW1vcnkgc2FmZXR5IGJ5IGF2b2lkaW5nIGNlcnRhaW4gbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgaW50cm9kdWNlZC4gVGhlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFkZHJlc3NlZCBhcmUgd2l0aGluIHRoZSBwdXJ2aWV3IG9mIGV4aXN0aW5nIGRlYnVnZ2luZyB0b29scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwOCwiT3V0cHV0VG9rZW5zIjoxOTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNToxMTo1NC40OTY3NzM1NDdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGxpc3QgY29ycnVwdGlvbiBpc3N1ZSBpbiB0aGUgaHVnZXRsYiBzdWJzeXN0ZW0gd2hlbiBkaXNzb2x2aW5nIGdpZ2FudGljIHBhZ2VzIHdpdGhvdXQgcnVudGltZSBzdXBwb3J0LiBJdCBtb2RpZmllcyBgZGlzc29sdmVfZnJlZV9odWdldGxiX2ZvbGlvYCB0byBiYWlsIG91dCBlYXJseSBmb3Igc3VjaCBoc3RhdGVzLCBhbmQgYWRkcyB3YXJuaW5ncyBpbiBgcmVtb3ZlX2h1Z2V0bGJfZm9saW9gIGFuZCBgX191cGRhdGVfYW5kX2ZyZWVfaHVnZXRsYl9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgcHJldmVudCBsaXN0IGNvcnJ1cHRpb24gb24gdm1lbW1hcCByZXN0b3JlIGZhaWx1cmUuIFRoZSBidWdzIHByZXZlbnRlZCBieSB0aGlzIHBhdGNoIGFyZSByZWxhdGVkIHRvIGxpc3QgY29ycnVwdGlvbiwgd2hpY2ggY2FuIGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlc2UgYXJlIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowtlrm9[1] Phase: Succeeded StartedAt: 2026-08-23 05:12:05 +0000 UTC FinishedAt: 2026-08-23 05:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 05:12:05 +0000 UTC FinishedAt: 2026-08-23 05:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2] Phase: Succeeded StartedAt: 2026-08-23 05:12:05 +0000 UTC FinishedAt: 2026-08-23 08:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 05:12:05 +0000 UTC FinishedAt: 2026-08-23 08:57:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 05:12:05 +0000 UTC FinishedAt: 2026-08-23 05:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 05:12:05 +0000 UTC FinishedAt: 2026-08-23 05:12:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtlrm9/series-workflowtlrm9-convert-artifact-833576025/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 05:12:15 +0000 UTC FinishedAt: 2026-08-23 05:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 05:12:15 +0000 UTC FinishedAt: 2026-08-23 05:28:36 +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:*beb1eb7d-a966-4b98-98b7-b9d14e80cde3,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-workflowtlrm9/series-workflowtlrm9-convert-artifact-833576025/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": "ec942a9c-63ff-491d-9b53-cafcdddb3e78", "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-workflowtlrm9/series-workflowtlrm9-build-action-1831042295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 05:12:15 +0000 UTC FinishedAt: 2026-08-23 05:28:27 +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:*beb1eb7d-a966-4b98-98b7-b9d14e80cde3,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-workflowtlrm9/series-workflowtlrm9-convert-artifact-833576025/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": "ec942a9c-63ff-491d-9b53-cafcdddb3e78", "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-workflowtlrm9/series-workflowtlrm9-build-action-1831042295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 05:28:36 +0000 UTC FinishedAt: 2026-08-23 05:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 05:28:36 +0000 UTC FinishedAt: 2026-08-23 05:28:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 05:28:36 +0000 UTC FinishedAt: 2026-08-23 05:28:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 05:28:36 +0000 UTC FinishedAt: 2026-08-23 05:28:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtlrm9/series-workflowtlrm9-convert-artifact-275891244/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 05:28:47 +0000 UTC FinishedAt: 2026-08-23 05:31:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 05:28:47 +0000 UTC FinishedAt: 2026-08-23 05:31:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ec942a9c-63ff-491d-9b53-cafcdddb3e78,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-workflowtlrm9/series-workflowtlrm9-build-action-1831042295/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-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 05:31:48 +0000 UTC FinishedAt: 2026-08-23 05:31:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 05:31:48 +0000 UTC FinishedAt: 2026-08-23 05:31:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 05:31:48 +0000 UTC FinishedAt: 2026-08-23 05:48:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 05:31:48 +0000 UTC FinishedAt: 2026-08-23 05:48:02 +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:*beb1eb7d-a966-4b98-98b7-b9d14e80cde3,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-workflowtlrm9/series-workflowtlrm9-convert-artifact-275891244/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": "42fbb352-7eb0-4576-b103-acc2bc1bbced", "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-workflowtlrm9/series-workflowtlrm9-build-action-2106804936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 05:31:48 +0000 UTC FinishedAt: 2026-08-23 05:47:52 +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:*beb1eb7d-a966-4b98-98b7-b9d14e80cde3,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-workflowtlrm9/series-workflowtlrm9-convert-artifact-275891244/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": "42fbb352-7eb0-4576-b103-acc2bc1bbced", "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-workflowtlrm9/series-workflowtlrm9-build-action-2106804936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 05:48:02 +0000 UTC FinishedAt: 2026-08-23 05:48:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 05:48:02 +0000 UTC FinishedAt: 2026-08-23 05:48:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 05:48:02 +0000 UTC FinishedAt: 2026-08-23 05:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 05:48:02 +0000 UTC FinishedAt: 2026-08-23 05:49:28 +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:*42fbb352-7eb0-4576-b103-acc2bc1bbced,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-workflowtlrm9/series-workflowtlrm9-build-action-2106804936/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-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 05:49:38 +0000 UTC FinishedAt: 2026-08-23 08:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 05:49:38 +0000 UTC FinishedAt: 2026-08-23 08:57:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"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:*ec942a9c-63ff-491d-9b53-cafcdddb3e78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42fbb352-7eb0-4576-b103-acc2bc1bbced,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-workflowtlrm9/series-workflowtlrm9-build-action-1831042295/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-workflowtlrm9/series-workflowtlrm9-build-action-2106804936/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 05:49:38 +0000 UTC FinishedAt: 2026-08-23 05:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 05:49:38 +0000 UTC FinishedAt: 2026-08-23 05:49:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"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-workflowtlrm9/series-workflowtlrm9-convert-artifact-200873237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 05:49:38 +0000 UTC FinishedAt: 2026-08-23 05:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 05:49:38 +0000 UTC FinishedAt: 2026-08-23 05:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 05:49:39 +0000 UTC FinishedAt: 2026-08-23 05:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 05:49:49 +0000 UTC FinishedAt: 2026-08-23 08:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlrm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dissolve_free_hugetlb_folio","dissolve_free_hugetlb_folios","remove_hugetlb_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9be9236e9c27a8ba64e06902e26d1e4a9b0a736d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE","MEMORY_HOTPLUG"],"series_id":"9382a3a9-5af9-4190-9e20-14d5d33dc7bb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 05:49:49 +0000 UTC FinishedAt: 2026-08-23 08:56:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ec942a9c-63ff-491d-9b53-cafcdddb3e78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42fbb352-7eb0-4576-b103-acc2bc1bbced,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-workflowtlrm9/series-workflowtlrm9-build-action-1831042295/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-workflowtlrm9/series-workflowtlrm9-build-action-2106804936/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-workflowtlrm9/series-workflowtlrm9-convert-artifact-200873237/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,}