Name: series-workflowjcsnj Phase: Succeeded StartedAt: 2026-09-08 01:20:44 +0000 UTC FinishedAt: 2026-09-08 05:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[0] Phase: Succeeded StartedAt: 2026-09-08 01:20:44 +0000 UTC FinishedAt: 2026-09-08 01:24:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 01:20:44 +0000 UTC FinishedAt: 2026-09-08 01:24:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "SECURITY", "SECURITY_SELINUX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "SECURITY", "SECURITY_SELINUX" ], "series_id": "3567c67b-d32d-490a-981e-26674c835ec2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_open", "proc_mem_foll_force", "mem_rw", "mem_release_with_private", "security_mem_foll_force", "selinux_mem_foll_force" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9vcGVuJiMzNDssCiAgICAmIzM0O3Byb2NfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7bWVtX3J3JiMzNDssCiAgICAmIzM0O21lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X21lbV9mb2xsX2ZvcmNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgbWVtX2ZvbGxfZm9yY2VgIGFuZCByZXBsYWNlcyB0aGUgZGlyZWN0IGBtbV9zdHJ1Y3RgIHBvaW50ZXIgaW4gYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYCBvZiBgL3Byb2MvJHBpZC9tZW1gIHdpdGggYSBzbWFsbCBjb250YWluZXIgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgY29udGFpbmluZyBgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYC5cblxuLSBJbiBgbWVtX29wZW4oKWAsIHRoZSBoZWFwIGFsbG9jYXRpb24gYGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSlgIGhhcyBhbGwgaXRzIGZpZWxkcyAoYG1tYCBhbmQgYG9wZW5lZF9ieV9vd25lcmApIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gYmVpbmcgYXNzaWduZWQgdG8gYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYC5cbi0gSW4gYHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoKWAsIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBhdl9kZWNpc2lvbiBhdmRgIGlzIHBhc3NlZCBhcyBhbiBvdXRwdXQgYnVmZmVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpYCwgYW5kIGl0cyBmaWVsZHMgYXJlIG5vdCByZWFkIGJlZm9yZSBpbml0aWFsaXphdGlvbi5cbi0gTm8ga2VybmVsIGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIChzdWNoIGFzIGxpZmV0aW1lL2ZyZWVpbmcgb2YgYHByaXZgIG9yIGBtbWApIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MgdGhhdCBhcmUgcHJvcGVybHkgY292ZXJlZCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFkNTFjM2I0NDUwOTdlOTA5YTJkNzM1MDU1MDc0ODg4NTU1N2Y4MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAxOjIzOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9iYXNlLmNcbkBAIC04NDgsMTUgJiM0Mzs4NDgsMzUgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovXG4mIzQzO3N0cnVjdCBtZW1fcHJpdmF0ZSB7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxuJiM0MztcdCAqIHRoZSBzYW1lIE1NIChpbnRyb3NwZWN0aW9uKT9cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIG9wZW5lZF9ieV9vd25lcjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4mIzQzO1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4mIzQzO1x0cHJpdi1cdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXHUwMDNlbW0pKVxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbW0gPyBQVFJfRVJSKHByaXYtXHUwMDNlbW0pIDogLUVTUkNIO1xuJiM0MztcdHByaXYtXHUwMDNlb3BlbmVkX2J5X293bmVyID0gcHJpdi1cdTAwM2VtbSA9PSBjdXJyZW50LVx1MDAzZW1tO1xuJiM0MztcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbiBcdGJvb2wgcHRyYWNlX2FjdGl2ZSA9IGZhbHNlO1xuIFxuQEAgLTg3MSwxNiAmIzQzOzg5MSwyMCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdFx0XHRcdFx0UkVBRF9PTkNFKHRhc2stXHUwMDNlcGFyZW50KSA9PSBjdXJyZW50O1xuIFx0XHRcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcbiBcdFx0fVxuLVx0XHRyZXR1cm4gcHRyYWNlX2FjdGl2ZTtcbiYjNDM7XHRcdGlmICghcHRyYWNlX2FjdGl2ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuJiM0MztcdHJldHVybiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShmaWxlLVx1MDAzZWZfY3JlZCwgcHJpdi1cdTAwM2VvcGVuZWRfYnlfb3duZXIpID09IDA7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywgaW50IHdyaXRlKVxuIHtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVx1MDAzZW1tO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKnBwb3M7XG4gXHRzc2l6ZV90IGNvcGllZDtcbiBcdGNoYXIgKnBhZ2U7XG5AQCAtOTcwLDEyICYjNDM7OTk0LDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdG1tZHJvcChwcml2LVx1MDAzZW1tKTtcbiYjNDM7XHRrZnJlZShwcml2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xuIFx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2VlayxcbiBcdC5yZWFkXHRcdD0gbWVtX3JlYWQsXG4gXHQud3JpdGVcdFx0PSBtZW1fd3JpdGUsXG4gXHQub3Blblx0XHQ9IG1lbV9vcGVuLFxuLVx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2UsXG4mIzQzO1x0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxuIFx0LmZvcF9mbGFnc1x0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uMTJmODRhMWU2ZmFiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTM2LDYgJiM0MzszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX2FjY2Vzc19jaGVjaywgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcbiBcdCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBtZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKVxuIExTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHQga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBzZXQsIHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li5lOGJjMmU2NDQyNDFiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC0zMzgsNiAmIzQzOzMzOCw3IEBAIGludCBzZWN1cml0eV9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XG4mIzQzO2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpO1xuIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0ICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5AQCAtNjc2LDYgJiM0Mzs2NzcsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCxcbiYjNDM7XHRcdFx0XHRcdCAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdFx0XHQgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDcxYWVhOGZkZjAxNDIuLjJjZGUxZWZkYjdhNjIgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtNTk1LDYgJiM0Mzs1OTUsMzEgQEAgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0cmV0dXJuIGNhbGxfaW50X2hvb2socHRyYWNlX3RyYWNlbWUsIHBhcmVudCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxuJiM0MzsgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZFxuJiM0MzsgKiBAb3BlbmVkX2J5X293bmVyOiB3aGV0aGVyIGNoZWNrcyBvbiBvcGVuKCkgd2VyZSBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXJcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgaGFzIHRoZSBzYW1lIE1NIGFzIHRoZSB0YXJnZXRcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhY2Nlc3NpbmcgcHJvY2VzcyBtZW1vcnkgdGhyb3VnaFxuJiM0MzsgKiAvcHJvYy8kcGlkL21lbS4gb3BlbmVkX2J5X293bmVyIHNpZ25hbHMgd2hldGhlciB0aGUgb3BlbmVyJiMzOTtzIE1NIHdhcyB0aGUgc2FtZVxuJiM0MzsgKiBhcyB0aGUgdGFyZ2V0IE1NLCBtZWFuaW5nIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vayB3YXNcbiYjNDM7ICogYnlwYXNzZWQgb24gb3BlbigpLlxuJiM0MzsgKiAoQ3VycmVudCBjdXJyZW50LVx1MDAzZW1tIGRvZXMgbm90IG1hdHRlciBmb3IgdGhpczsgZm9yIGV4YW1wbGUsIGlmIHdyaXRlKCkgaXNcbiYjNDM7ICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGhcbiYjNDM7ICogb3BlbihcJiMzNDsvcHJvYy9zZWxmL21lbVwmIzM0OyksIEBvcGVuZWRfYnlfb3duZXIgaXMgc3RpbGwgdHJ1ZS4pXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGUgdGhhdCB0aGlzIGhvb2sgaXMgb25seSBkZXNpZ25lZCB0byBiZSB1c2VmdWwgaW4gdGhlIG9wZW5lZF9ieV9vd25lclxuJiM0MzsgKiBjYXNlLCB3aGVyZSB0aGUgc3ViamVjdCBjcmVkZW50aWFscyBlZmZlY3RpdmVseSBhbHNvIGRlc2NyaWJlIHRoZSBvYmplY3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiYjNDM7ICovXG4mIzQzO2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCxcbiYjNDM7XHRcdFx0XHRcdCAgICBib29sIG9wZW5lZF9ieV9vd25lcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKG1lbV9mb2xsX2ZvcmNlLCBzdWJqZWN0LCBvcGVuZWRfYnlfb3duZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHNlY3VyaXR5X2NhcGdldCgpIC0gR2V0IHRoZSBjYXBhYmlsaXR5IHNldHMgZm9yIGEgcHJvY2Vzc1xuICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxOGRkMjhiMmJiMTNkLi40NWVhZDE4YzhmMDFhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yMTU3LDYgJiM0MzsyMTU3LDM2IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdFx0XHQgICAgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0VcbiYjNDM7ICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIHVzaW5nIHdoaWNoIC9wcm9jLyRwaWQvbWVtIHdhcyBvcGVuZWRcbiYjNDM7ICogQG9wZW5lZF9ieV9vd25lcjogd2hldGhlciBjaGVja3Mgb24gb3BlbigpIHdlcmUgYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0XG4mIzQzOyAqXG4mIzQzOyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZVxuJiM0MzsgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXG4mIzQzOyAqIFRoZSBAb3BlbmVkX2J5X293bmVyIGNhc2Ugb25seSBhcHBsaWVzIHRvIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoXG4mIzQzOyAqIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHkgaGFwcGVucyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0b1xuJiM0MzsgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW5cbiYjNDM7ICogbWF5X2FjY2Vzc19tbSgpIGFuZCBfX3B0cmFjZV9tYXlfYWNjZXNzKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBDcmVhdGluZyBhbiBhdWRpdCByZWNvcmQgb24gZGVuaWFsIGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJiMzOTt0XG4mIzQzOyAqIHRlbGwgd2hldGhlciBGT0xMX0ZPUkNFIG1hdHRlcnMgZm9yIHRoZSBhY2Nlc3NlZCBWTUFzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7XG4mIzQzO1x0dTMyIHNpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvcGVuZWRfYnlfb3duZXIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRzaWQgPSBjcmVkX3NpZChzdWJqZWN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsIFx1MDAyNmF2ZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICYjNDM7NzU4OCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXG4gXHRMU01fSE9PS19JTklUKHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjayksXG4gXHRMU01fSE9PS19JTklUKHB0cmFjZV90cmFjZW1lLCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKSxcbiYjNDM7XHRMU01fSE9PS19JTklUKG1lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSxcbiBcdExTTV9IT09LX0lOSVQoY2FwZ2V0LCBzZWxpbnV4X2NhcGdldCksXG4gXHRMU01fSE9PS19JTklUKGNhcHNldCwgc2VsaW51eF9jYXBzZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBhYmxlLCBzZWxpbnV4X2NhcGFibGUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9vcGVuJiMzNDssCiAgICAmIzM0O3Byb2NfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7bWVtX3J3JiMzNDssCiAgICAmIzM0O21lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X21lbV9mb2xsX2ZvcmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9tZW0gb3BlcmF0aW9ucyAobWVtX29wZW4sIG1lbV9ydywgcHJvY19tZW1fZm9sbF9mb3JjZSwgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKSBieSBpbnRyb2R1Y2luZyBzdHJ1Y3QgbWVtX3ByaXZhdGUgdG8gdHJhY2sgb3BlbmVyIE1NIG93bmVyc2hpcCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayAoc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfbWVtX2ZvbGxfZm9yY2UpIHRvIGdvdmVybiBGT0xMX0ZPUkNFIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWQ1MWMzYjQ0NTA5N2U5MDlhMmQ3MzUwNTUwNzQ4ODg1NTU3ZjgwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDE6MjM6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC04NDgsMTUgJiM0Mzs4NDgsMzUgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqLwomIzQzO3N0cnVjdCBtZW1fcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwkvKgomIzQzOwkgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZAomIzQzOwkgKiB0aGUgc2FtZSBNTSAoaW50cm9zcGVjdGlvbik/CiYjNDM7CSAqLwomIzQzOwlib29sIG9wZW5lZF9ieV9vd25lcjsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS0mZ3Q7Zl9vcC0mZ3Q7Zm9wX2ZsYWdzICZhbXA7IEZPUF9VTlNJR05FRF9PRkZTRVQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7CiYjNDM7CXByaXYtJmd0O21tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHByaXYtJmd0O21tKSkKJiM0MzsJCXJldHVybiBwcml2LSZndDttbSA/IFBUUl9FUlIocHJpdi0mZ3Q7bW0pIDogLUVTUkNIOwomIzQzOwlwcml2LSZndDtvcGVuZWRfYnlfb3duZXIgPSBwcml2LSZndDttbSA9PSBjdXJyZW50LSZndDttbTsKJiM0MzsJZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlib29sIHB0cmFjZV9hY3RpdmUgPSBmYWxzZTsKIApAQCAtODcxLDE2ICYjNDM7ODkxLDIwIEBAIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkJCQlSRUFEX09OQ0UodGFzay0mZ3Q7cGFyZW50KSA9PSBjdXJyZW50OwogCQkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCQl9Ci0JCXJldHVybiBwdHJhY2VfYWN0aXZlOwomIzQzOwkJaWYgKCFwdHJhY2VfYWN0aXZlKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiB0cnVlOwomIzQzOwkJYnJlYWs7CiAJfQomIzQzOwlyZXR1cm4gc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoZmlsZS0mZ3Q7Zl9jcmVkLCBwcml2LSZndDtvcGVuZWRfYnlfb3duZXIpID09IDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDttbTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvczsKIAlzc2l6ZV90IGNvcGllZDsKIAljaGFyICpwYWdlOwpAQCAtOTcwLDEyICYjNDM7OTk0LDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJbW1kcm9wKHByaXYtJmd0O21tKTsKJiM0MzsJa2ZyZWUocHJpdik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBtZW1fbHNlZWssCiAJLnJlYWQJCT0gbWVtX3JlYWQsCiAJLndyaXRlCQk9IG1lbV93cml0ZSwKIAkub3BlbgkJPSBtZW1fb3BlbiwKLQkucmVsZWFzZQk9IG1lbV9yZWxlYXNlLAomIzQzOwkucmVsZWFzZQk9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSwKIAkuZm9wX2ZsYWdzCT0gRk9QX1VOU0lHTkVEX09GRlNFVCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uMTJmODRhMWU2ZmFiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTM2LDYgJiM0MzszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCSB1bnNpZ25lZCBpbnQgbW9kZSkKIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQomIzQzO0xTTV9IT09LKGludCwgMCwgbWVtX2ZvbGxfZm9yY2UsIGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcikKIExTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQogTFNNX0hPT0soaW50LCAwLCBjYXBzZXQsIHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMTUzZTkwNDMwNThmOC4uZThiYzJlNjQ0MjQxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtMzM4LDYgJiM0MzszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sCiAJCQkJICBjb25zdCBzdHJ1Y3QgY3JlZCAqdG8sIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTsKIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTsKIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7CiYjNDM7aW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcik7CiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLApAQCAtNjc2LDYgJiM0Mzs2NzcsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpCiAJcmV0dXJuIGNhcF9wdHJhY2VfdHJhY2VtZShwYXJlbnQpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsCiYjNDM7CQkJCQkgIGJvb2wgb3BlbmVkX2J5X293bmVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MWFlYThmZGYwMTQyLi4yY2RlMWVmZGI3YTYyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTU5NSw2ICYjNDM7NTk1LDMxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FsbF9pbnRfaG9vayhwdHJhY2VfdHJhY2VtZSwgcGFyZW50KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKCkgLSBDaGVjayBpZiBGT0xMX0ZPUkNFIGlzIGFsbG93ZWQKJiM0MzsgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZAomIzQzOyAqIEBvcGVuZWRfYnlfb3duZXI6IHdoZXRoZXIgY2hlY2tzIG9uIG9wZW4oKSB3ZXJlIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lcgomIzQzOyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0CiYjNDM7ICoKJiM0MzsgKiBDaGVjayBpZiBGT0xMX0ZPUkNFIGlzIGFsbG93ZWQgZm9yIGFjY2Vzc2luZyBwcm9jZXNzIG1lbW9yeSB0aHJvdWdoCiYjNDM7ICogL3Byb2MvJHBpZC9tZW0uIG9wZW5lZF9ieV9vd25lciBzaWduYWxzIHdoZXRoZXIgdGhlIG9wZW5lciYjMzk7cyBNTSB3YXMgdGhlIHNhbWUKJiM0MzsgKiBhcyB0aGUgdGFyZ2V0IE1NLCBtZWFuaW5nIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vayB3YXMKJiM0MzsgKiBieXBhc3NlZCBvbiBvcGVuKCkuCiYjNDM7ICogKEN1cnJlbnQgY3VycmVudC0mZ3Q7bW0gZG9lcyBub3QgbWF0dGVyIGZvciB0aGlzOyBmb3IgZXhhbXBsZSwgaWYgd3JpdGUoKSBpcwomIzQzOyAqIGNhbGxlZCBvbiBhbiBGRCB0aGF0IHdhcyByZWNlaXZlZCBmcm9tIGFub3RoZXIgcHJvY2VzcyB3aGljaCBvYnRhaW5lZCBpdCB3aXRoCiYjNDM7ICogb3BlbigmIzM0Oy9wcm9jL3NlbGYvbWVtJiMzNDspLCBAb3BlbmVkX2J5X293bmVyIGlzIHN0aWxsIHRydWUuKQomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IHRoaXMgaG9vayBpcyBvbmx5IGRlc2lnbmVkIHRvIGJlIHVzZWZ1bCBpbiB0aGUgb3BlbmVkX2J5X293bmVyCiYjNDM7ICogY2FzZSwgd2hlcmUgdGhlIHN1YmplY3QgY3JlZGVudGlhbHMgZWZmZWN0aXZlbHkgYWxzbyBkZXNjcmliZSB0aGUgb2JqZWN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgomIzQzOyAqLwomIzQzO2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwKJiM0MzsJCQkJCSAgICBib29sIG9wZW5lZF9ieV9vd25lcikKJiM0Mzt7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKG1lbV9mb2xsX2ZvcmNlLCBzdWJqZWN0LCBvcGVuZWRfYnlfb3duZXIpOwomIzQzO30KJiM0MzsKIC8qKgogICogc2VjdXJpdHlfY2FwZ2V0KCkgLSBHZXQgdGhlIGNhcGFiaWxpdHkgc2V0cyBmb3IgYSBwcm9jZXNzCiAgKiBAdGFyZ2V0OiB0YXJnZXQgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDE4ZGQyOGIyYmIxM2QuLjQ1ZWFkMThjOGYwMWEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTIxNTcsNiAmIzQzOzIxNTcsMzYgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogCQkJICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0UKJiM0MzsgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZAomIzQzOyAqIEBvcGVuZWRfYnlfb3duZXI6IHdoZXRoZXIgY2hlY2tzIG9uIG9wZW4oKSB3ZXJlIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lcgomIzQzOyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0CiYjNDM7ICoKJiM0MzsgKiBEZWNpZGUgd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBub24tcmVhZGFibGUgVk1BcyBhbmQgd3JpdGUKJiM0MzsgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uCiYjNDM7ICogVGhlIEBvcGVuZWRfYnlfb3duZXIgY2FzZSBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGgKJiM0MzsgKiBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5IGhhcHBlbnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8KJiM0MzsgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW4KJiM0MzsgKiBtYXlfYWNjZXNzX21tKCkgYW5kIF9fcHRyYWNlX21heV9hY2Nlc3MoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLgomIzQzOyAqCiYjNDM7ICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2VzbiYjMzk7dCBtYWtlIHNlbnNlIGhlcmUsIHNpbmNlIHdlIGNhbiYjMzk7dAomIzQzOyAqIHRlbGwgd2hldGhlciBGT0xMX0ZPUkNFIG1hdHRlcnMgZm9yIHRoZSBhY2Nlc3NlZCBWTUFzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkOwomIzQzOwl1MzIgc2lkOwomIzQzOwomIzQzOwlpZiAoIW9wZW5lZF9ieV9vd25lcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwlzaWQgPSBjcmVkX3NpZChzdWJqZWN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsICZhbXA7YXZkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHNlbGludXhfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJCSAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpCiB7CkBAIC03NTU4LDYgJiM0Mzs3NTg4LDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAogCUxTTV9IT09LX0lOSVQocHRyYWNlX2FjY2Vzc19jaGVjaywgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKSwKIAlMU01fSE9PS19JTklUKHB0cmFjZV90cmFjZW1lLCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKSwKJiM0MzsJTFNNX0hPT0tfSU5JVChtZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSksCiAJTFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSwKIAlMU01fSE9PS19JTklUKGNhcHNldCwgc2VsaW51eF9jYXBzZXQpLAogCUxTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogdGhpcyBwYXRjaCwgcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgcHJvYyBmaWxlc3lzdGVtLCBpcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYnV0IHdlIG5lZWQgdG8gYmUgc21hcnQgYWJvdXQgaXQuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGRpZmYgZm9jdXNlcyBvbiBgZnMvcHJvYy9iYXNlLmNgIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rLCBgbWVtX2ZvbGxfZm9yY2VgLCBhbG9uZyB3aXRoIHJlbGF0ZWQgc2VjdXJpdHkgY2hlY2tzLiBTcGVjaWZpY2FsbHksIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUgYXJlIGBtZW1fb3BlbmAsIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCwgYG1lbV9yd2AsIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBpbiBgZnMvcHJvYy9iYXNlLmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZWAgYW5kIHRoZSBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZWAgaG9vayBpbmRpY2F0ZXMgdGhhdCBzZWN1cml0eSBwZXJtaXNzaW9ucyBhcmUgcGxheWluZyBhIHJvbGUuCgpGcm9tIGBmcy9wcm9jL2Jhc2UuY2AsIGl0IGxvb2tzIGxpa2UgYG1lbV9vcGVuYCBhbGxvY2F0ZXMgYSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIChgbWVtX3ByaXZhdGVgKSBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIGEgZmlsZS4gQ3JpdGljYWxseSwgaXQgYXBwZWFycyB0aGF0IHRoaXMgc3RydWN0dXJlIHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIG1tIHN0cnVjdCBhbmQgaGFzIGEgZmxhZywgYG9wZW5lZF9ieV9vd25lcmAuIFRoZSBzZWN1cml0eSBjaGVjayAoYHByb2NfbWVtX2ZvbGxfZm9yY2VgKSBpcyB0aGVuIGV2YWx1YXRlZCBiYXNlZCBvbiB0aGlzIGZsYWcgYW5kIHRoZSBjYWxsaW5nIGNyZWRlbnRpYWxzLiBgbWVtX3J3YCB0aGVuIHJldHJpZXZlcyB0aGlzIHByaXZhdGUgZGF0YS4gQW5kIG9uIHJlbGVhc2UsIHRoZSBtbSBzdHJ1Y3R1cmUgaXMgZHJvcHBlZCBhbmQgdGhlIHByaXZhdGUgZGF0YSBmcmVlZC4KClRoZSBgbWVtX2ZvbGxfZm9yY2VgIGhvb2sgaXRzZWxmLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggU0VMaW51eCwgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGJlY2F1c2UgaXQgbG9va3MgbGlrZSB3ZSBtYXkgYmUgYWJsZSB0byBpbmZsdWVuY2UgdGhpcyBjaGVjayBieSBtYW5pcHVsYXRpbmcgY3JlZGVudGlhbHMgb3IgdGhlIGBvcGVuZWRfYnlfb3duZXJgIGZsYWcuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgaW1wYWN0IHRoaXMgaGFzIG9uIHRoZSBzeXN0ZW0sIHNvIEkgc2hvdWxkIG5vdyBkaXZlIGRlZXBlciBpbnRvIGBmcy9wcm9jL2Jhc2UuY2AgYW5kIGFueSByZWxhdGVkIGZpbGVzLiBVc2luZyBncmVwLCBvciBzaW1wbHkgcmVhZGluZyB0aGUgY29kZSwgSSBjYW4gbG9vayBmb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2Ugb3IgZXhwb3NlIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB1c2VyIHNwYWNlLiBUaGlzIHdpbGwgaGVscCBpbmZvcm0gdGFyZ2V0IHNlbGVjdGlvbiBmb3IgZm9jdXMgc3ltYm9sIGV4dHJhY3Rpb24gYW5kIGZ1enppbmcgc3RyYXRlZ2llcy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBvcGVuZWRfYnlfb3duZXJgIGlzIHNldCBhbmQgaG93IHRoZSBzZWN1cml0eSBjaGVjayBpcyB1c2VkIHRvIGdhdGUgYWNjZXNzLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gY3JlZGVudGlhbHMsIG93bmVyc2hpcCwgYW5kIG1lbW9yeSBhY2Nlc3MgbWlnaHQgeWllbGQgc29tZSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY19tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTg2MT1zdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTg3Ni1cbmZzL3Byb2MvYmFzZS5jOjg3NzpzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmZzL3Byb2MvYmFzZS5jLTg3OC17XG4tLVxuZnMvcHJvYy9iYXNlLmM9OTAzPXN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL2Jhc2UuYy05MjQtXHRmbGFncyA9IHdyaXRlID8gRk9MTF9XUklURSA6IDA7XG5mcy9wcm9jL2Jhc2UuYzo5MjU6XHRpZiAocHJvY19tZW1fZm9sbF9mb3JjZShmaWxlLCBtbSkpXG5mcy9wcm9jL2Jhc2UuYy05MjYtXHRcdGZsYWdzIHw9IEZPTExfRk9SQ0U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIGBmcy9wcm9jL2Jhc2UuY2AgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLCBgcHJvY19tZW1fb3BlcmF0aW9uc2AsIGFuZCBgX19tZW1fb3BlbmAgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmVhIG9mIGludGVyZXN0IGlzIGxpbmVzIDg0OCB0aHJvdWdoIDk5NCBpbiBgZnMvcHJvYy9iYXNlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHV0aWxpemUgYW55IG9mIHRoZXNlIHRoaW5ncy4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBhbnkgY3Jvc3MtcmVmZXJlbmNlcyB0byBnYWluIGNvbXBsZXRlIGNsYXJpdHkuIEl0IGNvdWxkIHJldmVhbCBzb21lIGludGVyZXN0aW5nIHVzYWdlIHBhdHRlcm5zIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0MDpcdHN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXG4gODQxOlx0e1xuIDg0MjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBtb2RlKTtcbiA4NDM6XHRcbiA4NDQ6XHRcdGlmIChJU19FUlJfT1JfTlVMTChtbSkpXG4gODQ1Olx0XHRcdHJldHVybiBtbSA/IFBUUl9FUlIobW0pIDogLUVTUkNIO1xuIDg0NjpcdFxuIDg0NzpcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBtbTtcbiA4NDg6XHRcdHJldHVybiAwO1xuIDg0OTpcdH1cbiA4NTA6XHRcbiA4NTE6XHQvKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cbiA4NTI6XHRzdHJ1Y3QgbWVtX3ByaXZhdGUge1xuIDg1MzpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gODU0Olx0XHQvKlxuIDg1NTpcdFx0ICogV2FzIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIG9uIG9wZW4gYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyIHVzZWRcbiA4NTY6XHRcdCAqIHRoZSBzYW1lIE1NIChpbnRyb3NwZWN0aW9uKT9cbiA4NTc6XHRcdCAqL1xuIDg1ODpcdFx0Ym9vbCBvcGVuZWRfYnlfb3duZXI7XG4gODU5Olx0fTtcbiA4NjA6XHRcbiA4NjE6XHRzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDg2MjpcdHtcbiA4NjM6XHRcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtcbiA4NjQ6XHRcbiA4NjU6XHRcdGlmICghcHJpdilcbiA4NjY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODY3Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX1VOU0lHTkVEX09GRlNFVCkpKVxuIDg2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4Njk6XHRcdHByaXYtXHUwMDNlbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuIDg3MDpcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXHUwMDNlbW0pKVxuIDg3MTpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2VtbSA/IFBUUl9FUlIocHJpdi1cdTAwM2VtbSkgOiAtRVNSQ0g7XG4gODcyOlx0XHRwcml2LVx1MDAzZW9wZW5lZF9ieV9vd25lciA9IHByaXYtXHUwMDNlbW0gPT0gY3VycmVudC1cdTAwM2VtbTtcbiA4NzM6XHRcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XG4gODc0Olx0XHRyZXR1cm4gMDtcbiA4NzU6XHR9XG4gODc2Olx0XG4gODc3Olx0c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gODc4Olx0e1xuIDg3OTpcdFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gODgwOlx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4gODgxOlx0XHRib29sIHB0cmFjZV9hY3RpdmUgPSBmYWxzZTtcbiA4ODI6XHRcbiA4ODM6XHRcdHN3aXRjaCAocHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUpIHtcbiA4ODQ6XHRcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfTkVWRVI6XG4gODg1Olx0XHRcdHJldHVybiBmYWxzZTtcbiA4ODY6XHRcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFOlxuIDg4NzpcdFx0XHR0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlX2lub2RlKGZpbGUpKTtcbiA4ODg6XHRcdFx0aWYgKHRhc2spIHtcbiA4ODk6XHRcdFx0XHRwdHJhY2VfYWN0aXZlID1cdFJFQURfT05DRSh0YXNrLVx1MDAzZXB0cmFjZSkgXHUwMDI2XHUwMDI2XG4gODkwOlx0XHRcdFx0XHRcdFJFQURfT05DRSh0YXNrLVx1MDAzZW1tKSA9PSBtbSBcdTAwMjZcdTAwMjZcbiA4OTE6XHRcdFx0XHRcdFx0UkVBRF9PTkNFKHRhc2stXHUwMDNlcGFyZW50KSA9PSBjdXJyZW50O1xuIDg5MjpcdFx0XHRcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcbiA4OTM6XHRcdFx0fVxuIDg5NDpcdFx0XHRpZiAoIXB0cmFjZV9hY3RpdmUpXG4gODk1Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDg5NjpcdFx0XHRicmVhaztcbiA4OTc6XHRcdGRlZmF1bHQ6XG4gODk4Olx0XHRcdGJyZWFrO1xuIDg5OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgX19tZW1fb3BlbmAgYW5kIGBtZW1fcmVsZWFzZWAgVXNhZ2UqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBfX21lbV9vcGVuYCBhbmQgYG1lbV9yZWxlYXNlYCBhcmUgdXRpbGl6ZWQuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHByb2MgZmlsZXN5c3RlbS4gSSBhbHJlYWR5IGtub3cgc29tZSBvZiB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGZ1bGx5IGdyb2sgdGhlaXIgaW1wYWN0IG9uIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgdGhleSByZWxhdGUgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBvcHRpbWl6YXRpb25zIGluIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGNvbXByZWhlbnNpdmVseSB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBvcGVucywgdXNlcywgYW5kIHJlbGVhc2VzIG1lbW9yeS4gR290dGEgbG9vayBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyB0aGF0IGEgY2FzdWFsIGdsYW5jZSBtaWdodCBtaXNzLiBTbywgSSYjMzk7bSBub3QganVzdCBsb29raW5nIGluIGBmcy9wcm9jL2Jhc2UuY2Ag4oCTIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBUaW1lIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGVpciB1c2VzIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBjb2RlYmFzZSwgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgZ29hbCBpcyBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBmdW5jdGlvbnMmIzM5OyByb2xlIGFuZCBpbXBhY3QgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoX19tZW1fb3BlbnxtZW1fcmVsZWFzZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz04MTg9c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbi0tXG5mcy9wcm9jL2Jhc2UuYy04MzktXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbmZzL3Byb2MvYmFzZS5jLTg0MS17XG4tLVxuZnMvcHJvYy9iYXNlLmM9OTczPWxvZmZfdCBtZW1fbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTk4OC1cbmZzL3Byb2MvYmFzZS5jOjk4OTpzdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9iYXNlLmMtOTkwLXtcbi0tXG5mcy9wcm9jL2Jhc2UuYy05OTYtXG5mcy9wcm9jL2Jhc2UuYzo5OTc6c3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy05OTgte1xuLS1cbmZzL3Byb2MvYmFzZS5jPTEwMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0xMDEwLVx0Lm9wZW5cdFx0PSBtZW1fb3BlbixcbmZzL3Byb2MvYmFzZS5jOjEwMTE6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG5mcy9wcm9jL2Jhc2UuYy0xMDEyLVx0LmZvcF9mbGFnc1x0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxuLS1cbmZzL3Byb2MvYmFzZS5jPTEwMTU9c3RhdGljIGludCBlbnZpcm9uX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy0xMDE2LXtcbmZzL3Byb2MvYmFzZS5jOjEwMTc6XHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRCk7XG5mcy9wcm9jL2Jhc2UuYy0xMDE4LX1cbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZW52aXJvbl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTEwODYtXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcbmZzL3Byb2MvYmFzZS5jOjEwODc6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbmZzL3Byb2MvYmFzZS5jLTEwODgtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDkwPXN0YXRpYyBpbnQgYXV4dl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9iYXNlLmMtMTA5MS17XG5mcy9wcm9jL2Jhc2UuYzoxMDkyOlx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX1JFQURfRlNDUkVEUyk7XG5mcy9wcm9jL2Jhc2UuYy0xMDkzLX1cbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfYXV4dl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTExMTMtXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcbmZzL3Byb2MvYmFzZS5jOjExMTQ6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbmZzL3Byb2MvYmFzZS5jLTExMTUtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0yNzcxPXN0YXRpYyBpbnQgcHJvY19waWRfYXR0cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTI3NzMtXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XG5mcy9wcm9jL2Jhc2UuYzoyNzc0Olx0X19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcbmZzL3Byb2MvYmFzZS5jLTI3NzUtXHRyZXR1cm4gMDtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0yODU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX2F0dHJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0yODYxLVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG5mcy9wcm9jL2Jhc2UuYzoyODYyOlx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2UsXG5mcy9wcm9jL2Jhc2UuYy0yODYzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgTWVtb3J5IEFjY2VzcyBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgc2hpZnQgaW4gaG93IG1lbW9yeSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgL3Byb2MvJmx0O3BpZCZndDsvbWVtYC4gSXQgc2VlbXMgdGhhdCB0aGUgbGVnYWN5IGZ1bmN0aW9ucyBgX19tZW1fb3BlbmAgYW5kIGBtZW1fcmVsZWFzZWAg4oCTIHdoaWNoIHVsdGltYXRlbHkgaW52b2x2ZSBgbW1kcm9wKGZpbGUtJmd0O3ByaXZhdGVfZGF0YSlgIOKAkyBhcmUgc3RpbGwgdXNlZCBieSBgZW52aXJvbl9vcGVuYCwgYGF1eHZfb3BlbmAsIGFuZCBgcHJvY19waWRfYXR0cl9vcGVuYC4gSG93ZXZlciwgYHByb2NfbWVtX29wZXJhdGlvbnNgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXdlciBgbWVtX29wZW5gIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCwgd2hpY2ggbWFuYWdlcyBhIGBzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXZgLiBUaGlzIGBwcml2YCBpcyB0aGVuIHVucGFja2VkIGluIGZ1bmN0aW9ucyBsaWtlIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCBhbmQgYG1lbV9yd2AgYXMgYGZpbGUtJmd0O3ByaXZhdGVfZGF0YWAuCgoqKkxTTSBIb29rIGFuZCBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKQWhhLCBhbmQgaGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IGEgbmV3IExTTSBob29rLCBgbWVtX2ZvbGxfZm9yY2VgLCBoYXMgcG9wcGVkIHVwIGluIGJvdGggYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGFuZCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGNvZGU/IEFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gT3BlbmluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBgL3Byb2MvJmx0O3BpZCZndDsvbWVtYCDigJMgcmVhZGluZyBmcm9tIGFuZCB3cml0aW5nIHRvIGl0IOKAkyBpcyBhIGZ1bmRhbWVudGFsIGFuZCB3ZWxsLWVzdGFibGlzaGVkIHBhcnQgb2YgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcHJvY2ZzLCBWRlMsIGFuZCB0aGUgc2VjdXJpdHkvc2VsaW51eCBmcmFtZXdvcmtzIGhlcmUuIEdpdmVuIHRoYXQgdGhpcyBpcyBpbiBzdWNoIGNydWNpYWwgc3Vic3lzdGVtcywgbXkgaW5zdGluY3Qgc2NyZWFtcyB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuCgoqKkNvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKTm93LCBiZWZvcmUganVtcGluZyBpbiwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHN1YnN5c3RlbXMgYXJlIGVuYWJsZWQgaW4gYSB0eXBpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrOgoKKiAgIGBmcy9wcm9jL2Jhc2UuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1BST0NfRlNgIGlzIGVuYWJsZWQuCiogICBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NFQ1VSSVRZYCBpcyBlbmFibGVkLgoqICAgYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgIGlzIGVuYWJsZWQuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYFBST0NfRlNgLCBgU0VDVVJJVFlgLCBhbmQgYFNFQ1VSSVRZX1NFTElOVVhgIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U0VMaW51eCBBVkMgU3RhdGlzdGljc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgU0VMaW51eCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFNFQ1VSSVRZX1NFTElOVVhgLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBzZWN1cml0eS9zZWxpbnV4YCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlaXIgZGVzY3JpcHRpb25zLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0aGVyZSBhbmQgZXhhbWluZSBgc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnYCBkaXJlY3RseS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgY29uZGl0aW9ucyBvciBvdGhlciBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGBTRUNVUklUWV9TRUxJTlVYYCB0byBiZSBhdmFpbGFibGUgYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gdW5kZXJzdGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMgb3Igb3RoZXIga2VybmVsIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7U0VMaW51eCBTdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX05FVFdPUksgXHUwMDI2XHUwMDI2IEFVRElUIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IElORVRcbiAgIDU6XHRcdHNlbGVjdCBORVRXT1JLX1NFQ01BUktcbiAgIDY6XHRcdGRlZmF1bHQgblxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIHNlbGVjdHMgU2VjdXJpdHktRW5oYW5jZWQgTGludXggKFNFTGludXgpLlxuICAgOTpcdFx0ICBZb3Ugd2lsbCBhbHNvIG5lZWQgYSBwb2xpY3kgY29uZmlndXJhdGlvbiBhbmQgYSBsYWJlbGVkIGZpbGVzeXN0ZW0uXG4gIDEwOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXG4gIDEzOlx0XHRib29sIFwmIzM0O1NFTGludXggYm9vdCBwYXJhbWV0ZXJcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuICAxNTpcdFx0ZGVmYXVsdCBuXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgYSBrZXJuZWwgcGFyYW1ldGVyICYjMzk7c2VsaW51eCYjMzk7LCB3aGljaCBhbGxvd3MgU0VMaW51eFxuICAxODpcdFx0ICB0byBiZSBkaXNhYmxlZCBhdCBib290LiAgSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIFNFTGludXhcbiAgMTk6XHRcdCAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgZGlzYWJsZWQgd2l0aCBzZWxpbnV4PTAgb24gdGhlIGtlcm5lbFxuICAyMDpcdFx0ICBjb21tYW5kIGxpbmUuICBUaGUgcHVycG9zZSBvZiB0aGlzIG9wdGlvbiBpcyB0byBhbGxvdyBhIHNpbmdsZVxuICAyMTpcdFx0ICBrZXJuZWwgaW1hZ2UgdG8gYmUgZGlzdHJpYnV0ZWQgd2l0aCBTRUxpbnV4IGJ1aWx0IGluLCBidXQgbm90XG4gIDIyOlx0XHQgIG5lY2Vzc2FyaWx5IGVuYWJsZWQuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDI1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDczCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBQcm9jZnMgYW5kIE1lbW9yeSBPdmVycmlkZSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgcHJvYyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGBwcm9jX21lbV9mb3JjZV9vdmVycmlkZWAgb3B0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGZzL3Byb2MvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBwcm9jZnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IGBwcm9jX21lbV9mb3JjZV9vdmVycmlkZWAgYmVoYXZlcywgb3IgaWYgaXQmIzM5O3MgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQUk9DX01FTV9GT1JDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcbmZzL3Byb2MvYmFzZS5jOjEyMjpcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUyxcbmZzL3Byb2MvYmFzZS5jOjEyMzpcdFBST0NfTUVNX0ZPUkNFX1BUUkFDRSxcbmZzL3Byb2MvYmFzZS5jOjEyNDpcdFBST0NfTUVNX0ZPUkNFX05FVkVSXG5mcy9wcm9jL2Jhc2UuYy0xMjUtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cbmZzL3Byb2MvYmFzZS5jOjEyODpcdElTX0VOQUJMRUQoQ09ORklHX1BST0NfTUVNX05PX0ZPUkNFKSA/IFBST0NfTUVNX0ZPUkNFX05FVkVSIDpcbmZzL3Byb2MvYmFzZS5jOjEyOTpcdElTX0VOQUJMRUQoQ09ORklHX1BST0NfTUVNX0ZPUkNFX1BUUkFDRSkgPyBQUk9DX01FTV9GT1JDRV9QVFJBQ0UgOlxuZnMvcHJvYy9iYXNlLmM6MTMwOlx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTO1xuZnMvcHJvYy9iYXNlLmMtMTMxLVxuZnMvcHJvYy9iYXNlLmM9MTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgcHJvY19tZW1fZm9yY2VfdGFibGVbXSBfX2luaXRjb25zdCA9IHtcbmZzL3Byb2MvYmFzZS5jOjEzMzpcdHsgXCYjMzQ7YWx3YXlzXCYjMzQ7LCBQUk9DX01FTV9GT1JDRV9BTFdBWVMgfSxcbmZzL3Byb2MvYmFzZS5jOjEzNDpcdHsgXCYjMzQ7cHRyYWNlXCYjMzQ7LCBQUk9DX01FTV9GT1JDRV9QVFJBQ0UgfSxcbmZzL3Byb2MvYmFzZS5jOjEzNTpcdHsgXCYjMzQ7bmV2ZXJcJiMzNDssIFBST0NfTUVNX0ZPUkNFX05FVkVSIH0sXG5mcy9wcm9jL2Jhc2UuYy0xMzYtXHR7IH1cbi0tXG5mcy9wcm9jL2Jhc2UuYz04Nzc9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuZnMvcHJvYy9iYXNlLmMtODgzLVx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xuZnMvcHJvYy9iYXNlLmM6ODg0Olx0Y2FzZSBQUk9DX01FTV9GT1JDRV9ORVZFUjpcbmZzL3Byb2MvYmFzZS5jLTg4NS1cdFx0cmV0dXJuIGZhbHNlO1xuZnMvcHJvYy9iYXNlLmM6ODg2Olx0Y2FzZSBQUk9DX01FTV9GT1JDRV9QVFJBQ0U6XG5mcy9wcm9jL2Jhc2UuYy04ODctXHRcdHRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGVfaW5vZGUoZmlsZSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgxMAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIFBST0NfRlMgaW4gS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgUFJPQ19GUyBpcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBwbGFjZSB0byBjaGVjayB0aGF0IGlzIGdvaW5nIHRvIGJlIHRoZSBgZnMvcHJvYy9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgb3IgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIHNldCB0byBlbmFibGUgb3IgZGlzYWJsZSBpdC4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZ5aW5nIGFueSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIEdvdHRhIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBvZiB0cnV0aCwgdGhlIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUk9DXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcbmZzL3Byb2MvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmZzL3Byb2MvS2NvbmZpZy0zMS1cbmZzL3Byb2MvS2NvbmZpZzozMjpjb25maWcgUFJPQ19LQ09SRVxuZnMvcHJvYy9LY29uZmlnLTMzLVx0Ym9vbCBcJiMzNDsvcHJvYy9rY29yZSBzdXBwb3J0XCYjMzQ7IGlmICFBUk1cbi0tXG5mcy9wcm9jL0tjb25maWctNDAtXG5mcy9wcm9jL0tjb25maWc6NDE6Y29uZmlnIFBST0NfVk1DT1JFXG5mcy9wcm9jL0tjb25maWctNDItXHRib29sIFwmIzM0Oy9wcm9jL3ZtY29yZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvcHJvYy9LY29uZmlnLTQ3LVxuZnMvcHJvYy9LY29uZmlnOjQ4OmNvbmZpZyBQUk9DX1ZNQ09SRV9ERVZJQ0VfRFVNUFxuZnMvcHJvYy9LY29uZmlnLTQ5LVx0Ym9vbCBcJiMzNDtEZXZpY2UgSGFyZHdhcmUvRmlybXdhcmUgTG9nIENvbGxlY3Rpb25cJiMzNDtcbi0tXG5mcy9wcm9jL0tjb25maWc9NjQ9Y29uZmlnIE5FRURfUFJPQ19WTUNPUkVfREVWSUNFX1JBTVxuLS1cbmZzL3Byb2MvS2NvbmZpZy02Ni1cbmZzL3Byb2MvS2NvbmZpZzo2Nzpjb25maWcgUFJPQ19WTUNPUkVfREVWSUNFX1JBTVxuZnMvcHJvYy9LY29uZmlnLTY4LVx0ZGVmX2Jvb2wgeVxuLS1cbmZzL3Byb2MvS2NvbmZpZy04Mi1cbmZzL3Byb2MvS2NvbmZpZzo4Mzpjb25maWcgUFJPQ19TWVNDVExcbmZzL3Byb2MvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U3lzY3RsIHN1cHBvcnQgKC9wcm9jL3N5cylcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZnMvcHJvYy9LY29uZmlnLTEwMS1cbmZzL3Byb2MvS2NvbmZpZzoxMDI6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXG5mcy9wcm9jL0tjb25maWctMTAzLSBcdGRlZmF1bHQgeVxuLS1cbmZzL3Byb2MvS2NvbmZpZy0xMTEtXG5mcy9wcm9jL0tjb25maWc6MTEyOmNvbmZpZyBQUk9DX0NISUxEUkVOXG5mcy9wcm9jL0tjb25maWctMTEzLVx0Ym9vbCBcJiMzNDtJbmNsdWRlIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS90YXNrL1x1MDAzY3RpZFx1MDAzZS9jaGlsZHJlbiBmaWxlXCYjMzQ7XG4tLVxuZnMvcHJvYy9LY29uZmlnLTEyMi1cbmZzL3Byb2MvS2NvbmZpZzoxMjM6Y29uZmlnIFBST0NfUElEX0FSQ0hfU1RBVFVTXG5mcy9wcm9jL0tjb25maWctMTI0LVx0ZGVmX2Jvb2wgblxuLS1cbmZzL3Byb2MvS2NvbmZpZy0xMjYtXG5mcy9wcm9jL0tjb25maWc6MTI3OmNvbmZpZyBQUk9DX0NQVV9SRVNDVFJMXG5mcy9wcm9jL0tjb25maWctMTI4LVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU1NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipTZWN1cml0eSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzZWN1cml0eSBhbmQgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGVzLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1NFQ1VSSVRZYCBzZXR0aW5nLCBhbmQgaXRzIHZhcmlvdXMgc3ViLW9wdGlvbnMuIENhbiYjMzk7dCBqdXN0IGFzc3VtZSBpdCYjMzk7cyBzZXQgcmlnaHQuIE15IGd1dCB0ZWxscyBtZSB0aGlzIHBhcnRpY3VsYXIgY2hhbmdlIG1pZ2h0IHRvdWNoIG9uIHNvbWUgc2VjdXJpdHkgbW9kdWxlcywgc28gSSBuZWVkIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgZWFzeSB0byBtaXNzIHNvbWV0aGluZyB3aGVuIGp1Z2dsaW5nIHRoZXNlIGRldGFpbHMsIGFuZCBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBpbiBLY29uZmlnIGNhbiBjYXRjaCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCB0aGUgc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB0aGUgc3RhZ2Ugd2hlcmUgdGhvcm91Z2huZXNzIHBheXMgb2ZmLiBJJiMzOTtkIGhhdGUgdG8gc3VibWl0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgc3VidGxlIHZ1bG5lcmFiaWxpdHkgZHVlIHRvIGEgc2ltcGxlIG92ZXJzaWdodCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xuLS1cbnNlY3VyaXR5L0tjb25maWctNzItXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2N1cyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyB0b3VjaGVkLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBtZW1fb3BlbmAsIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCwgYG1lbV9yd2AgYW5kIHRoZSBhZGRpdGlvbiBvZiBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCwgYHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlYCwgYW5kIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgdGhlaXIgc2NvcGUuIEFyZSB0aGVzZSBnZW5lcmFsLXB1cnBvc2UgY29tcG9uZW50cyBvciBzb21ldGhpbmcgbW9yZSB0YXJnZXRlZD8gR29vZCwgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYWxsIHRpZ2h0bHkgY291cGxlZCB3aXRoIGAvcHJvYy8mbHQ7cGlkJmd0Oy9tZW1gIGludGVyYWN0aW9uIGFuZCB0aGUgU0VMaW51eCBob29rcyBkZWFsaW5nIHdpdGggRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIGEgdmVyeSBuYXJyb3cgc2V0IG9mIGNoYW5nZXMsIG5vdCB0b3VjaGluZyB0aGUgY29yZSBhbGxvY2F0b3JzLCB0cmFwIGhhbmRsZXJzLCBvciBzeXNjYWxsIGVudHJ5cG9pbnRzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QuIFRoaXMgc3VnZ2VzdHMgdGhpcyBpcyBmb2N1c2VkIHdvcmsuCgpOb3csIGxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJiMzOTtsbCBmb2N1cyBvbiBgbWVtX3JlYWRgIGFuZCBgbWVtX3dyaXRlYC4gRnJvbSBgZnMvcHJvYy9iYXNlLmNgIEkgY2FuIHNlZSB0aGF0IGBtZW1fcndgIGlzIGNhbGxlZCBieSBib3RoLiBIbW0sIEkga25vdyB0aGF0IGBtZW1fcndgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBjb25maXJtcyBteSBhc3N1bXB0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXMgaGFwcGVuaW5nIGluIHRoZSBmcy9wcm9jL2Jhc2UuYyBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgOTAwIHRvIDk4MC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0XHRyZXR1cm4gc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoZmlsZS1cdTAwM2VmX2NyZWQsIHByaXYtXHUwMDNlb3BlbmVkX2J5X293bmVyKSA9PSAwO1xuIDkwMTpcdH1cbiA5MDI6XHRcbiA5MDM6XHRzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gOTA0Olx0XHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcbiA5MDU6XHR7XG4gOTA2Olx0XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA5MDc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cdTAwM2VtbTtcbiA5MDg6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zO1xuIDkwOTpcdFx0c3NpemVfdCBjb3BpZWQ7XG4gOTEwOlx0XHRjaGFyICpwYWdlO1xuIDkxMTpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuIDkxMjpcdFxuIDkxMzpcdFx0aWYgKCFtbSlcbiA5MTQ6XHRcdFx0cmV0dXJuIDA7XG4gOTE1Olx0XG4gOTE2Olx0XHRwYWdlID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIDkxNzpcdFx0aWYgKCFwYWdlKVxuIDkxODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5MTk6XHRcbiA5MjA6XHRcdGNvcGllZCA9IDA7XG4gOTIxOlx0XHRpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSlcbiA5MjI6XHRcdFx0Z290byBmcmVlO1xuIDkyMzpcdFxuIDkyNDpcdFx0ZmxhZ3MgPSB3cml0ZSA/IEZPTExfV1JJVEUgOiAwO1xuIDkyNTpcdFx0aWYgKHByb2NfbWVtX2ZvbGxfZm9yY2UoZmlsZSwgbW0pKVxuIDkyNjpcdFx0XHRmbGFncyB8PSBGT0xMX0ZPUkNFO1xuIDkyNzpcdFxuIDkyODpcdFx0d2hpbGUgKGNvdW50IFx1MDAzZSAwKSB7XG4gOTI5Olx0XHRcdHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0VfU0laRSk7XG4gOTMwOlx0XG4gOTMxOlx0XHRcdGlmICh3cml0ZSBcdTAwMjZcdTAwMjYgY29weV9mcm9tX3VzZXIocGFnZSwgYnVmLCB0aGlzX2xlbikpIHtcbiA5MzI6XHRcdFx0XHRjb3BpZWQgPSAtRUZBVUxUO1xuIDkzMzpcdFx0XHRcdGJyZWFrO1xuIDkzNDpcdFx0XHR9XG4gOTM1Olx0XG4gOTM2Olx0XHRcdHRoaXNfbGVuID0gYWNjZXNzX3JlbW90ZV92bShtbSwgYWRkciwgcGFnZSwgdGhpc19sZW4sIGZsYWdzKTtcbiA5Mzc6XHRcdFx0aWYgKCF0aGlzX2xlbikge1xuIDkzODpcdFx0XHRcdGlmICghY29waWVkKVxuIDkzOTpcdFx0XHRcdFx0Y29waWVkID0gLUVJTztcbiA5NDA6XHRcdFx0XHRicmVhaztcbiA5NDE6XHRcdFx0fVxuIDk0MjpcdFxuIDk0MzpcdFx0XHRpZiAoIXdyaXRlIFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIoYnVmLCBwYWdlLCB0aGlzX2xlbikpIHtcbiA5NDQ6XHRcdFx0XHRjb3BpZWQgPSAtRUZBVUxUO1xuIDk0NTpcdFx0XHRcdGJyZWFrO1xuIDk0NjpcdFx0XHR9XG4gOTQ3Olx0XG4gOTQ4Olx0XHRcdGJ1ZiAmIzQzOz0gdGhpc19sZW47XG4gOTQ5Olx0XHRcdGFkZHIgJiM0Mzs9IHRoaXNfbGVuO1xuIDk1MDpcdFx0XHRjb3BpZWQgJiM0Mzs9IHRoaXNfbGVuO1xuIDk1MTpcdFx0XHRjb3VudCAtPSB0aGlzX2xlbjtcbiA5NTI6XHRcdH1cbiA5NTM6XHRcdCpwcG9zID0gYWRkcjtcbiA5NTQ6XHRcbiA5NTU6XHRcdG1tcHV0KG1tKTtcbiA5NTY6XHRmcmVlOlxuIDk1NzpcdFx0a2ZyZWUocGFnZSk7XG4gOTU4Olx0XHRyZXR1cm4gY29waWVkO1xuIDk1OTpcdH1cbiA5NjA6XHRcbiA5NjE6XHRzdGF0aWMgc3NpemVfdCBtZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiA5NjI6XHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiA5NjM6XHR7XG4gOTY0Olx0XHRyZXR1cm4gbWVtX3J3KGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MsIDApO1xuIDk2NTpcdH1cbiA5NjY6XHRcbiA5Njc6XHRzdGF0aWMgc3NpemVfdCBtZW1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gOTY4Olx0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIDk2OTpcdHtcbiA5NzA6XHRcdHJldHVybiBtZW1fcncoZmlsZSwgKGNoYXIgX191c2VyKilidWYsIGNvdW50LCBwcG9zLCAxKTtcbiA5NzE6XHR9XG4gOTcyOlx0XG4gOTczOlx0bG9mZl90IG1lbV9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpXG4gOTc0Olx0e1xuIDk3NTpcdFx0c3dpdGNoIChvcmlnKSB7XG4gOTc2Olx0XHRjYXNlIDA6XG4gOTc3Olx0XHRcdGZpbGUtXHUwMDNlZl9wb3MgPSBvZmZzZXQ7XG4gOTc4Olx0XHRcdGJyZWFrO1xuIDk3OTpcdFx0Y2FzZSAxOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4NAoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiAzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgUmVhc29uaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gdGhlc2UgYEZvY3VzU3ltYm9sc2Ag4oCTIGBtZW1fb3BlbmAsIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCwgYG1lbV9yd2AsIHRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBob3VzZWtlZXBpbmcsIGFuZCB0aGUgU0VMaW51eCB2YXJpYW50LCBgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2VgIGFuZCBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZWAuIFRoYXQgbG9va3MgcmlnaHQuIEkgYWxzbyBkb3VibGUtY2hlY2tlZCB0aGUgcmVxdWlyZWQgYEVuYWJsZUNvbmZpZ3NgOiBgUFJPQ19GU2AsIGBTRUNVUklUWWAsIGFuZCBgU0VDVVJJVFlfU0VMSU5VWGAuIEdvb2QsIHRob3NlIGFyZSBhbGwgaW4gcGxhY2UuCgpOb3cgZm9yIHRoZSBjb3JlIHJlYXNvbmluZy4gVGhlIHJlYWNoYWJpbGl0eSBhbmFseXNpcyB0ZWxscyBtZSB0aGF0IGEgdXNlci1zcGFjZSBwcm9ncmFtIGNhbiBpbmRlZWQgb3BlbiwgcmVhZCwgYW5kIHdyaXRlIHRvIGAvcHJvYy8kcGlkL21lbWAgaW4gUUVNVS4gQ3J1Y2lhbGx5LCBJIHNlZSB0aGF0IHRoZSBTRUxpbnV4IGhvb2tzICphcmUqIGV4ZWN1dGVkIHdoZW4gYG1lbV9mb2xsX2ZvcmNlYCBpcyB0cmlnZ2VyZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSBuZWNlc3NhcnkgZXhlY3V0YWJsZSBjb2RlIGluIGBmcy9wcm9jYCBhbmQgdGhlIGBzZWN1cml0eWAgc3Vic3lzdGVtLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSB3YW50ZWQgdG8gY29uZmlybS4KClRoZSBjcml0aWNhbCBpbnNpZ2h0IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2ssIGBtZW1fZm9sbF9mb3JjZWAsIHNwZWNpZmljYWxseSBpbmNsdWRpbmcgYW4gU0VMaW51eCBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0IGZ1bmRhbWVudGFsbHkgdXBkYXRlcyB0aGUgaGFuZGxpbmcgb2YgYC9wcm9jLyZsdDtwaWQmZ3Q7L21lbWAuICBJdCYjMzk7cyB3cmFwcGluZyBtZXRhZGF0YSBpbiB0aGlzIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0aGF0IGZ1enppbmcgaXMganVzdGlmaWVkLiBXZSBuZWVkIHRvIHZhbGlkYXRlIG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMsIGVuc3VyZSB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBgbWVtX3ByaXZhdGVgIGlzIHJvYnVzdCwgYW5kIGNyaXRpY2FsbHksIGVuZm9yY2UgdGhlIHNlbWFudGljcyBvZiBgRk9MTF9GT1JDRWAuIFRoaXMgaXMgYSByaWNoIHRhcmdldCBhbmQgaGlnaGx5IHZhbHVhYmxlLiBUaW1lIHRvIHdyaXRlIHRoZSB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fb3BlbiYjMzQ7LAogICAgJiMzNDtwcm9jX21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O21lbV9ydyYjMzQ7LAogICAgJiMzNDttZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7c2VsaW51eF9tZW1fZm9sbF9mb3JjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7LAogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX29wZW4mIzM0OywKICAgICYjMzQ7cHJvY19tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDttZW1fcncmIzM0OywKICAgICYjMzQ7bWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O3NlbGludXhfbWVtX2ZvbGxfZm9yY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21lbSBvcGVyYXRpb25zIChtZW1fb3BlbiwgbWVtX3J3LCBwcm9jX21lbV9mb2xsX2ZvcmNlLCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUpIGJ5IGludHJvZHVjaW5nIHN0cnVjdCBtZW1fcHJpdmF0ZSB0byB0cmFjayBvcGVuZXIgTU0gb3duZXJzaGlwIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIChzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSkgdG8gZ292ZXJuIEZPTExfRk9SQ0UgbWVtb3J5IGFjY2Vzcy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBtZW1fZm9sbF9mb3JjZWAgYW5kIHJlcGxhY2VzIHRoZSBkaXJlY3QgYG1tX3N0cnVjdGAgcG9pbnRlciBpbiBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIG9mIGAvcHJvYy8kcGlkL21lbWAgd2l0aCBhIHNtYWxsIGNvbnRhaW5lciBgc3RydWN0IG1lbV9wcml2YXRlYCBjb250YWluaW5nIGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgLlxuXG4tIEluIGBtZW1fb3BlbigpYCwgdGhlIGhlYXAgYWxsb2NhdGlvbiBga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKWAgaGFzIGFsbCBpdHMgZmllbGRzIChgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCB0byBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLlxuLSBJbiBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSgpYCwgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgaXMgcGFzc2VkIGFzIGFuIG91dHB1dCBidWZmZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCBhbmQgaXRzIGZpZWxkcyBhcmUgbm90IHJlYWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLlxuLSBObyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKHN1Y2ggYXMgbGlmZXRpbWUvZnJlZWluZyBvZiBgcHJpdmAgb3IgYG1tYCkgYXJlIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBwcm9wZXJseSBjb3ZlcmVkIGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZDUxYzNiNDQ1MDk3ZTkwOWEyZDczNTA1NTA3NDg4ODU1NTdmODAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwMToyMzowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNzgwZjgxMjU5MDUyNy4uMjk1YjIxMjAzYzdmZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9iYXNlLmMKQEAgLTg0OCwxNSAmIzQzOzg0OCwzNSBAQCBzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKQogCXJldHVybiAwOwogfQogCiYjNDM7LyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovCiYjNDM7c3RydWN0IG1lbV9wcml2YXRlIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CS8qCiYjNDM7CSAqIFdhcyB0aGUgcHRyYWNlIGFjY2VzcyBjaGVjayBvbiBvcGVuIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lciB1c2VkCiYjNDM7CSAqIHRoZSBzYW1lIE1NIChpbnRyb3NwZWN0aW9uKT8KJiM0MzsJICovCiYjNDM7CWJvb2wgb3BlbmVkX2J5X293bmVyOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewomIzQzOwlzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSk7CiYjNDM7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCWlmIChXQVJOX09OX09OQ0UoIShmaWxlLSZndDtmX29wLSZndDtmb3BfZmxhZ3MgJmFtcDsgRk9QX1VOU0lHTkVEX09GRlNFVCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfQVRUQUNIKTsKJiM0MzsJcHJpdi0mZ3Q7bW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpOwomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwocHJpdi0mZ3Q7bW0pKQomIzQzOwkJcmV0dXJuIHByaXYtJmd0O21tID8gUFRSX0VSUihwcml2LSZndDttbSkgOiAtRVNSQ0g7CiYjNDM7CXByaXYtJmd0O29wZW5lZF9ieV9vd25lciA9IHByaXYtJmd0O21tID09IGN1cnJlbnQtJmd0O21tOwomIzQzOwlmaWxlLSZndDtwcml2YXRlX2RhdGEgPSBub19mcmVlX3B0cihwcml2KTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewomIzQzOwlzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCWJvb2wgcHRyYWNlX2FjdGl2ZSA9IGZhbHNlOwogCkBAIC04NzEsMTYgJiM0Mzs4OTEsMjAgQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJCQkJCVJFQURfT05DRSh0YXNrLSZndDtwYXJlbnQpID09IGN1cnJlbnQ7CiAJCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJCX0KLQkJcmV0dXJuIHB0cmFjZV9hY3RpdmU7CiYjNDM7CQlpZiAoIXB0cmFjZV9hY3RpdmUpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlicmVhazsKIAl9CiYjNDM7CXJldHVybiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShmaWxlLSZndDtmX2NyZWQsIHByaXYtJmd0O29wZW5lZF9ieV9vd25lcikgPT0gMDsKIH0KIAogc3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSkKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtJmd0O21tOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zOwogCXNzaXplX3QgY29waWVkOwogCWNoYXIgKnBhZ2U7CkBAIC05NzAsMTIgJiM0Mzs5OTQsMjEgQEAgc3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwltbWRyb3AocHJpdi0mZ3Q7bW0pOwomIzQzOwlrZnJlZShwcml2KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IG1lbV9sc2VlaywKIAkucmVhZAkJPSBtZW1fcmVhZCwKIAkud3JpdGUJCT0gbWVtX3dyaXRlLAogCS5vcGVuCQk9IG1lbV9vcGVuLAotCS5yZWxlYXNlCT0gbWVtX3JlbGVhc2UsCiYjNDM7CS5yZWxlYXNlCT0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLAogCS5mb3BfZmxhZ3MJPSBGT1BfVU5TSUdORURfT0ZGU0VULAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAppbmRleCA2NWM5NjA5ZWMyMDc3Li4xMmY4NGExZTZmYWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaApAQCAtMzYsNiAmIzQzOzM2LDcgQEAgTFNNX0hPT0soaW50LCAwLCBiaW5kZXJfdHJhbnNmZXJfZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sCiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCiAJIHVuc2lnbmVkIGludCBtb2RlKQogTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfdHJhY2VtZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBtZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKQogTFNNX0hPT0soaW50LCAwLCBjYXBnZXQsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpCiBMU01fSE9PSyhpbnQsIDAsIGNhcHNldCwgc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li5lOGJjMmU2NDQyNDFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0zMzgsNiAmIzQzOzMzOCw3IEBAIGludCBzZWN1cml0eV9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpOwogaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpOwogaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KTsKJiM0MztpbnQgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKTsKIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCkBAIC02NzYsNiAmIzQzOzY3NywxMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwKJiM0MzsJCQkJCSAgYm9vbCBvcGVuZWRfYnlfb3duZXIpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCQkJICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJCQkJICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDcxYWVhOGZkZjAxNDIuLjJjZGUxZWZkYjdhNjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtNTk1LDYgJiM0Mzs1OTUsMzEgQEAgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogCXJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZAomIzQzOyAqIEBzdWJqZWN0OiBjcmVkZW50aWFscyB1c2luZyB3aGljaCAvcHJvYy8kcGlkL21lbSB3YXMgb3BlbmVkCiYjNDM7ICogQG9wZW5lZF9ieV9vd25lcjogd2hldGhlciBjaGVja3Mgb24gb3BlbigpIHdlcmUgYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyCiYjNDM7ICogICAgICAgICAgICAgICAgICAgaGFzIHRoZSBzYW1lIE1NIGFzIHRoZSB0YXJnZXQKJiM0MzsgKgomIzQzOyAqIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZCBmb3IgYWNjZXNzaW5nIHByb2Nlc3MgbWVtb3J5IHRocm91Z2gKJiM0MzsgKiAvcHJvYy8kcGlkL21lbS4gb3BlbmVkX2J5X293bmVyIHNpZ25hbHMgd2hldGhlciB0aGUgb3BlbmVyJiMzOTtzIE1NIHdhcyB0aGUgc2FtZQomIzQzOyAqIGFzIHRoZSB0YXJnZXQgTU0sIG1lYW5pbmcgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rIHdhcwomIzQzOyAqIGJ5cGFzc2VkIG9uIG9wZW4oKS4KJiM0MzsgKiAoQ3VycmVudCBjdXJyZW50LSZndDttbSBkb2VzIG5vdCBtYXR0ZXIgZm9yIHRoaXM7IGZvciBleGFtcGxlLCBpZiB3cml0ZSgpIGlzCiYjNDM7ICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGgKJiM0MzsgKiBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9tZW0mIzM0OyksIEBvcGVuZWRfYnlfb3duZXIgaXMgc3RpbGwgdHJ1ZS4pCiYjNDM7ICoKJiM0MzsgKiBOb3RlIHRoYXQgdGhpcyBob29rIGlzIG9ubHkgZGVzaWduZWQgdG8gYmUgdXNlZnVsIGluIHRoZSBvcGVuZWRfYnlfb3duZXIKJiM0MzsgKiBjYXNlLCB3aGVyZSB0aGUgc3ViamVjdCBjcmVkZW50aWFscyBlZmZlY3RpdmVseSBhbHNvIGRlc2NyaWJlIHRoZSBvYmplY3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiYjNDM7ICovCiYjNDM7aW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LAomIzQzOwkJCQkJICAgIGJvb2wgb3BlbmVkX2J5X293bmVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2sobWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QsIG9wZW5lZF9ieV9vd25lcik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZWN1cml0eV9jYXBnZXQoKSAtIEdldCB0aGUgY2FwYWJpbGl0eSBzZXRzIGZvciBhIHByb2Nlc3MKICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMThkZDI4YjJiYjEzZC4uNDVlYWQxOGM4ZjAxYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMjE1Nyw2ICYjNDM7MjE1NywzNiBAQCBzdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpCiAJCQkgICAgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCBOVUxMKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoKSAtIERldGVybWluZSB3aGV0aGVyIC9wcm9jLyRwaWQvbWVtIGNhbiB1c2UgRk9MTF9GT1JDRQomIzQzOyAqIEBzdWJqZWN0OiBjcmVkZW50aWFscyB1c2luZyB3aGljaCAvcHJvYy8kcGlkL21lbSB3YXMgb3BlbmVkCiYjNDM7ICogQG9wZW5lZF9ieV9vd25lcjogd2hldGhlciBjaGVja3Mgb24gb3BlbigpIHdlcmUgYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyCiYjNDM7ICogICAgICAgICAgICAgICAgICAgaGFzIHRoZSBzYW1lIE1NIGFzIHRoZSB0YXJnZXQKJiM0MzsgKgomIzQzOyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZQomIzQzOyAqIG5vbi13cml0YWJsZSBWTUFzIHZpYSAvcHJvYy9zZWxmL21lbS4KJiM0MzsgKiBUaGUgQG9wZW5lZF9ieV9vd25lciBjYXNlIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aAomIzQzOyAqIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHkgaGFwcGVucyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0bwomIzQzOyAqIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpIGJlY2F1c2Ugb2YgdGhlIGludHJvc3BlY3Rpb24gZXhjZXB0aW9ucyBpbgomIzQzOyAqIG1heV9hY2Nlc3NfbW0oKSBhbmQgX19wdHJhY2VfbWF5X2FjY2VzcygpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBhbGxvd3MgYSBwcm9jZXNzIHRvIG92ZXJ3cml0ZSByZWFkLW9ubHkgY29kZSBpbiBpdHMgb3duIGFkZHJlc3Mgc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiBDcmVhdGluZyBhbiBhdWRpdCByZWNvcmQgb24gZGVuaWFsIGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJiMzOTt0CiYjNDM7ICogdGVsbCB3aGV0aGVyIEZPTExfRk9SQ0UgbWF0dGVycyBmb3IgdGhlIGFjY2Vzc2VkIFZNQXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiYjNDM7CXUzMiBzaWQ7CiYjNDM7CiYjNDM7CWlmICghb3BlbmVkX2J5X293bmVyKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXNpZCA9IGNyZWRfc2lkKHN1YmplY3QpOwomIzQzOwomIzQzOwlyZXR1cm4gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgJmFtcDthdmQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIHsKQEAgLTc1NTgsNiAmIzQzOzc1ODgsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0gewogCiAJTFNNX0hPT0tfSU5JVChwdHJhY2VfYWNjZXNzX2NoZWNrLCBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2spLAogCUxTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLAomIzQzOwlMU01fSE9PS19JTklUKG1lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSwKIAlMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLAogCUxTTV9IT09LX0lOSVQoY2Fwc2V0LCBzZWxpbnV4X2NhcHNldCksCiAJTFNNX0hPT0tfSU5JVChjYXBhYmxlLCBzZWxpbnV4X2NhcGFibGUpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBmaXJlIHVwIEtNU0FOIGZvciBhIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgKmxvb2tzKiBwcmV0dHkgY2xlYW4sIGJ1dCB3ZSBhbHdheXMgaGF2ZSB0byBiZSBtZXRpY3Vsb3VzLgoKSGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhlIGNyaXRpY2FsIHBhcnRzOgoKKiAgICoqYGZzL3Byb2MvYmFzZS5jYCoqOiBXZSYjMzk7cmUgYWRkaW5nIGEgbmV3IHN0cnVjdHVyZSwgYHN0cnVjdCBtZW1fcHJpdmF0ZWAsIHdoaWNoIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHBheSBhdHRlbnRpb24uIEl0IGNvbnRhaW5zIGEgYG1tX3N0cnVjdCAqbW1gIGFuZCBhIGBib29sIG9wZW5lZF9ieV9vd25lcmAuIEluIGBtZW1fb3BlbmAsIHRoZXkgYWxsb2NhdGUgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBib3RoIG9mIHRob3NlIGZpZWxkcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiDigJMgd2UmIzM5O3JlIG5vdCBzZWVpbmcgYW55IGltbWVkaWF0ZSwgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhdCB0aGUgYWxsb2NhdGlvbiBzdGFnZSwgYW5kIG5vIG9idmlvdXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gVGhlIGNvZGUgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGVycm9yIHBhdGhzLCBhbmQgc2V0cyB0aGUgYHByaXZhdGVfZGF0YWAgZmllbGQgb24gdGhlIGZpbGUgcG9pbnRlci4gVGhlIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGZ1bmN0aW9uIGFsc28gbG9va3Mgc29saWQgd2l0aCB0aGUgYG1tZHJvcGAgYW5kIGBrZnJlZWAuIFRoZSB3YXkgYHByaXZhdGVfZGF0YWAgaXMgYmVpbmcgdXNlZCBpbiBgcHJvY19tZW1fZm9sbF9mb3JjZWAgYW5kIGBtZW1fcndgIGlzIGFsc28gcHJldHR5IGNsZWFyLgoqICAgKipMU00gaG9va3MgYW5kIFNFTGludXgqKjogVGhlIGFkZGl0aW9uIG9mIHRoZSBgbWVtX2ZvbGxfZm9yY2VgIGhvb2sgaXMgc3RyYWlnaHRmb3J3YXJkLCB3aGljaCBpcyBhbHNvIGhlbHBmdWwuIFRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uLCBpbiBwYXJ0aWN1bGFyIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlYCwgdXNlcyBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZDtgIGxvY2FsbHksIHdoaWNoIHN1Z2dlc3RzIHRoYXQgdGhlIGxvY2FsIHN0cnVjdHVyZSBpcyBwcm9wZXJseSBoYW5kbGVkIGZvciBtZW1vcnkgc2FmZXR5LCBhbmQgdGhlbiBwYXNzZXMgYW4gb3V0cHV0IHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXRgIHdoaWNoIHNob3VsZCBhbHNvIGJlIG9rYXkuCgpCYXNlZCBvbiB0aGlzIGltbWVkaWF0ZSBwYXNzLCBJJiMzOTttICpub3QqIHNlZWluZyBhbnkgYmxhdGFudCByZWQgZmxhZ3MuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAxMDAlIHN1cmUuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgb25seSB1c2VkIGluIGEgY29ycmVjdCB3YXksIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gc2VhcmNoIHRoZSBlbnRpcmUga2VybmVsIHRyZWUgZm9yIG90aGVyIGNhbGxzIHRvIGBwcm9jX21lbV9vcGVyYXRpb25zYCBvciBvdGhlciBmaWxlcyB0aGF0IG1pZ2h0IGJlIG9wZW5pbmcgYC9wcm9jLyRwaWQvbWVtYCBvciBvdGhlcndpc2UgdXNlIHRoZSBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYC4gSSYjMzk7bGwgbG9vayBmb3IgYHByb2NfbWVtX29wZXJhdGlvbnNgLCBgX19tZW1fb3BlbmAsIGBtZW1fcndgLCBvciBhbnkgb3RoZXIgcmVsYXRlZCBwcm9jIG1lbSBvcGVyYXRpb25zLiBJZiB0aGVyZSBhcmUgb3RoZXIgdXNhZ2VzIG9mIGAvcHJvYy8kcGlkL21lbWAsIEkgd2FudCB0byBiZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBhY2Nlc3MgaXMgY29ycmVjdCBhbmQgdGhhdCB0aGUgc3RydWN0dXJlJiMzOTtzIGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBiZSBjb21wbGV0ZWx5IGNvbmZpZGVudC4gQWZ0ZXIgdGhhdCwgSSBtYXkgaGF2ZSBhIGRlY2lzaW9uIG9uIHdoZXRoZXIgdG8gbGF1bmNoIHRoZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfbWVtX29wZXJhdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9ODQwPXN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXG4tLVxuZnMvcHJvYy9iYXNlLmMtODUwLVxuZnMvcHJvYy9iYXNlLmM6ODUxOi8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuZnMvcHJvYy9iYXNlLmMtODUyLXN0cnVjdCBtZW1fcHJpdmF0ZSB7XG4tLVxuZnMvcHJvYy9iYXNlLmM9OTk3PXN0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTEwMDUtXG5mcy9wcm9jL2Jhc2UuYzoxMDA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG5mcy9wcm9jL2Jhc2UuYy0xMDA3LVx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2Vlayxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0zMzE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRnaWRfYmFzZV9zdHVmZltdID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTMzNDYtI2VuZGlmXG5mcy9wcm9jL2Jhc2UuYzozMzQ3Olx0UkVHKFwmIzM0O21lbVwmIzM0OywgICAgICAgIFNfSVJVU1J8U19JV1VTUiwgcHJvY19tZW1fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zMzQ4LVx0TE5LKFwmIzM0O2N3ZFwmIzM0OywgICAgICAgIHByb2NfY3dkX2xpbmspLFxuLS1cbmZzL3Byb2MvYmFzZS5jPTM2NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGlkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zNzAyLSNlbmRpZlxuZnMvcHJvYy9iYXNlLmM6MzcwMzpcdFJFRyhcJiMzNDttZW1cJiMzNDssICAgICAgIFNfSVJVU1J8U19JV1VTUiwgcHJvY19tZW1fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zNzA0LVx0TE5LKFwmIzM0O2N3ZFwmIzM0OywgICAgICAgcHJvY19jd2RfbGluayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyODcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgX19tZW1fb3BlbmAgaW4gYGZzL3Byb2MvYmFzZS5jYDoKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYF9fbWVtX29wZW5gKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgX19tZW1fb3BlbmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9wcm9jL2Jhc2UuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHN0aWxsIGFjdGl2ZWx5IGJlaW5nIHVzZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaXRzIGN1cnJlbnQgcHVycG9zZSBhbmQgaWYgYW55IGNoYW5nZXMgb3IgcmVtb3ZhbHMgaGF2ZSBvY2N1cnJlZCB0aGF0IEkgbWlnaHQgbmVlZCB0byBiZSBhd2FyZSBvZi4gSXMgaXQgc3RpbGwgYSBjb3JlIGZ1bmN0aW9uLCBvciBoYXMgaXQgYmVlbiBkZXByZWNhdGVkIG9yIHJlcGxhY2VkPyBUaGlzIHdpbGwgcmVxdWlyZSBhIGNhcmVmdWwgc2VhcmNoIHdpdGhpbiB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1fb3BlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz04MTg9c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbi0tXG5mcy9wcm9jL2Jhc2UuYy04MzktXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbmZzL3Byb2MvYmFzZS5jLTg0MS17XG4tLVxuZnMvcHJvYy9iYXNlLmM9MTAxNT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvYmFzZS5jLTEwMTYte1xuZnMvcHJvYy9iYXNlLmM6MTAxNzpcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcbmZzL3Byb2MvYmFzZS5jLTEwMTgtfVxuLS1cbmZzL3Byb2MvYmFzZS5jPTEwOTA9c3RhdGljIGludCBhdXh2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy0xMDkxLXtcbmZzL3Byb2MvYmFzZS5jOjEwOTI6XHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcbmZzL3Byb2MvYmFzZS5jLTEwOTMtfVxuLS1cbmZzL3Byb2MvYmFzZS5jPTI3NzE9c3RhdGljIGludCBwcm9jX3BpZF9hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvcHJvYy9iYXNlLmMtMjc3My1cdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gTlVMTDtcbmZzL3Byb2MvYmFzZS5jOjI3NzQ6XHRfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xuZnMvcHJvYy9iYXNlLmMtMjc3NS1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTE0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgUHJvY2ZzIE1lbW9yeSBPcGVyYXRpb25zKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIHByb2MgZmlsZXN5c3RlbSYjMzk7cyBtZW1vcnkgaGFuZGxpbmcuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciwgbXkgZ3V0IHRlbGxzIG1lIHRoZSBrZXkgZnVuY3Rpb25zIGFyZSBsaWtlbHkgY2x1c3RlcmVkIGFyb3VuZCB0aGUgODQwLTEwMDAgbGluZSByYW5nZSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiBgbWVtX2xzZWVrYCwgYG1lbV9yZWFkYCwgYG1lbV93cml0ZWAsIGBtZW1fcndgLCBhbmQgYG1lbV9yZWxlYXNlYC4gVGhlc2Ugc2hvdWxkIGNvdmVyIHRoZSBiYXNpYyByZWFkL3dyaXRlIGFjY2VzcyBwYXR0ZXJucywgaG93IHRoZSBmaWxlIHBvaW50ZXIgaXMgbWFuYWdlZCwgYW5kIG9mIGNvdXJzZSwgaG93IHRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgcmVsZWFzZWQgYmFjayB0byB0aGUgc3lzdGVtLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHByb2Nlc3MgbWVtb3J5IGlzIGV4cG9zZWQgdGhyb3VnaCBwcm9jZnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIGhhbmRsZSBvbiBzZWN1cml0eSBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiByZWxhdGVkIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbiA4NDE6XHR7XG4gODQyOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIG1vZGUpO1xuIDg0MzpcdFxuIDg0NDpcdFx0aWYgKElTX0VSUl9PUl9OVUxMKG1tKSlcbiA4NDU6XHRcdFx0cmV0dXJuIG1tID8gUFRSX0VSUihtbSkgOiAtRVNSQ0g7XG4gODQ2Olx0XG4gODQ3Olx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG1tO1xuIDg0ODpcdFx0cmV0dXJuIDA7XG4gODQ5Olx0fVxuIDg1MDpcdFxuIDg1MTpcdC8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuIDg1MjpcdHN0cnVjdCBtZW1fcHJpdmF0ZSB7XG4gODUzOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiA4NTQ6XHRcdC8qXG4gODU1Olx0XHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxuIDg1NjpcdFx0ICogdGhlIHNhbWUgTU0gKGludHJvc3BlY3Rpb24pP1xuIDg1NzpcdFx0ICovXG4gODU4Olx0XHRib29sIG9wZW5lZF9ieV9vd25lcjtcbiA4NTk6XHR9O1xuIDg2MDpcdFxuIDg2MTpcdHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gODYyOlx0e1xuIDg2MzpcdFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xuIDg2NDpcdFxuIDg2NTpcdFx0aWYgKCFwcml2KVxuIDg2NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4Njc6XHRcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXG4gODY4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg2OTpcdFx0cHJpdi1cdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4gODcwOlx0XHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cdTAwM2VtbSkpXG4gODcxOlx0XHRcdHJldHVybiBwcml2LVx1MDAzZW1tID8gUFRSX0VSUihwcml2LVx1MDAzZW1tKSA6IC1FU1JDSDtcbiA4NzI6XHRcdHByaXYtXHUwMDNlb3BlbmVkX2J5X293bmVyID0gcHJpdi1cdTAwM2VtbSA9PSBjdXJyZW50LVx1MDAzZW1tO1xuIDg3MzpcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBub19mcmVlX3B0cihwcml2KTtcbiA4NzQ6XHRcdHJldHVybiAwO1xuIDg3NTpcdH1cbiA4NzY6XHRcbiA4Nzc6XHRzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiA4Nzg6XHR7XG4gODc5Olx0XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA4ODA6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbiA4ODE6XHRcdGJvb2wgcHRyYWNlX2FjdGl2ZSA9IGZhbHNlO1xuIDg4MjpcdFxuIDg4MzpcdFx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xuIDg4NDpcdFx0Y2FzZSBQUk9DX01FTV9GT1JDRV9ORVZFUjpcbiA4ODU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDg4NjpcdFx0Y2FzZSBQUk9DX01FTV9GT1JDRV9QVFJBQ0U6XG4gODg3Olx0XHRcdHRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGVfaW5vZGUoZmlsZSkpO1xuIDg4ODpcdFx0XHRpZiAodGFzaykge1xuIDg4OTpcdFx0XHRcdHB0cmFjZV9hY3RpdmUgPVx0UkVBRF9PTkNFKHRhc2stXHUwMDNlcHRyYWNlKSBcdTAwMjZcdTAwMjZcbiA4OTA6XHRcdFx0XHRcdFx0UkVBRF9PTkNFKHRhc2stXHUwMDNlbW0pID09IG1tIFx1MDAyNlx1MDAyNlxuIDg5MTpcdFx0XHRcdFx0XHRSRUFEX09OQ0UodGFzay1cdTAwM2VwYXJlbnQpID09IGN1cnJlbnQ7XG4gODkyOlx0XHRcdFx0cHV0X3Rhc2tfc3RydWN0KHRhc2spO1xuIDg5MzpcdFx0XHR9XG4gODk0Olx0XHRcdGlmICghcHRyYWNlX2FjdGl2ZSlcbiA4OTU6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODk2Olx0XHRcdGJyZWFrO1xuIDg5NzpcdFx0ZGVmYXVsdDpcbiA4OTg6XHRcdFx0YnJlYWs7XG4gODk5Olx0XHR9XG4gOTAwOlx0XHRyZXR1cm4gc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoZmlsZS1cdTAwM2VmX2NyZWQsIHByaXYtXHUwMDNlb3BlbmVkX2J5X293bmVyKSA9PSAwO1xuIDkwMTpcdH1cbiA5MDI6XHRcbiA5MDM6XHRzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gOTA0Olx0XHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcbiA5MDU6XHR7XG4gOTA2Olx0XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA5MDc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cdTAwM2VtbTtcbiA5MDg6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zO1xuIDkwOTpcdFx0c3NpemVfdCBjb3BpZWQ7XG4gOTEwOlx0XHRjaGFyICpwYWdlO1xuIDkxMTpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuIDkxMjpcdFxuIDkxMzpcdFx0aWYgKCFtbSlcbiA5MTQ6XHRcdFx0cmV0dXJuIDA7XG4gOTE1Olx0XG4gOTE2Olx0XHRwYWdlID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIDkxNzpcdFx0aWYgKCFwYWdlKVxuIDkxODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5MTk6XHRcbiA5MjA6XHRcdGNvcGllZCA9IDA7XG4gOTIxOlx0XHRpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSlcbiA5MjI6XHRcdFx0Z290byBmcmVlO1xuIDkyMzpcdFxuIDkyNDpcdFx0ZmxhZ3MgPSB3cml0ZSA/IEZPTExfV1JJVEUgOiAwO1xuIDkyNTpcdFx0aWYgKHByb2NfbWVtX2ZvbGxfZm9yY2UoZmlsZSwgbW0pKVxuIDkyNjpcdFx0XHRmbGFncyB8PSBGT0xMX0ZPUkNFO1xuIDkyNzpcdFxuIDkyODpcdFx0d2hpbGUgKGNvdW50IFx1MDAzZSAwKSB7XG4gOTI5Olx0XHRcdHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0VfU0laRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgIGluIGBmcy9wcm9jL2Jhc2UuY2AqKgoKQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZ1bGx5IGdyYXNwaW5nIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvYyBmaWxlc3lzdGVtIGFuZCBpdHMgdW5kZXJseWluZyBzdHJ1Y3R1cmVzLCBJIHJlYWxseSBzaG91bGQgem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgdXNlIGNhc2VzIG9mIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgIHdpdGhpbiBgZnMvcHJvYy9iYXNlLmNgLiBXZSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IGEgcGFydGljdWxhciBmdW5jdGlvbiwgYnV0IHRvIGdldCBhIHRydWx5IGNvbXBsZXRlIHBpY3R1cmUsIEkgY2FuJiMzOTt0IGp1c3QgbGltaXQgbXlzZWxmIHRvIHRoYXQuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgaG93IGBtZW1fcmVsZWFzZWAgYW5kIGBtZW1fbHNlZWtgIGFyZSBpbXBsZW1lbnRlZCwgYW5kLCBjcnVjaWFsbHksIGhvdyB0aGV5IGFyZSBpbnRlcmFjdGluZyB3aXRoIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoaXMgZGF0YSBwb2ludGVyIGluIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIGFzIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGFsbCBraW5kcyBvZiB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGlmZmVyZW50IGRhdGEgdHlwZXMgdGhhdCBhcmUgYmVpbmcgY2FzdCB0byBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCB0byBlbnN1cmUgYW55IHBvdGVudGlhbCB0eXBlIG1pc21hdGNoZXMgYXJlIGFkZHJlc3NlZC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzb21lIHN1YnRsZXR5IGluIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGZpbGUgcG9zaXRpb25pbmcgd2l0aGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSB0cmlja3kgbWVtb3J5IGJ1Z3MgdGVuZCB0byBoaWRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjU6XHR9XG4gOTY2Olx0XG4gOTY3Olx0c3RhdGljIHNzaXplX3QgbWVtX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIDk2ODpcdFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiA5Njk6XHR7XG4gOTcwOlx0XHRyZXR1cm4gbWVtX3J3KGZpbGUsIChjaGFyIF9fdXNlciopYnVmLCBjb3VudCwgcHBvcywgMSk7XG4gOTcxOlx0fVxuIDk3MjpcdFxuIDk3MzpcdGxvZmZfdCBtZW1fbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxuIDk3NDpcdHtcbiA5NzU6XHRcdHN3aXRjaCAob3JpZykge1xuIDk3NjpcdFx0Y2FzZSAwOlxuIDk3NzpcdFx0XHRmaWxlLVx1MDAzZWZfcG9zID0gb2Zmc2V0O1xuIDk3ODpcdFx0XHRicmVhaztcbiA5Nzk6XHRcdGNhc2UgMTpcbiA5ODA6XHRcdFx0ZmlsZS1cdTAwM2VmX3BvcyAmIzQzOz0gb2Zmc2V0O1xuIDk4MTpcdFx0XHRicmVhaztcbiA5ODI6XHRcdGRlZmF1bHQ6XG4gOTgzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk4NDpcdFx0fVxuIDk4NTpcdFx0Zm9yY2Vfc3VjY2Vzc2Z1bF9zeXNjYWxsX3JldHVybigpO1xuIDk4NjpcdFx0cmV0dXJuIGZpbGUtXHUwMDNlZl9wb3M7XG4gOTg3Olx0fVxuIDk4ODpcdFxuIDk4OTpcdHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gOTkwOlx0e1xuIDk5MTpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA5OTI6XHRcdGlmIChtbSlcbiA5OTM6XHRcdFx0bW1kcm9wKG1tKTtcbiA5OTQ6XHRcdHJldHVybiAwO1xuIDk5NTpcdH1cbiA5OTY6XHRcbiA5OTc6XHRzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA5OTg6XHR7XG4gOTk5Olx0XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjEwMDA6XHRcbjEwMDE6XHRcdG1tZHJvcChwcml2LVx1MDAzZW1tKTtcbjEwMDI6XHRcdGtmcmVlKHByaXYpO1xuMTAwMzpcdFx0cmV0dXJuIDA7XG4xMDA0Olx0fVxuMTAwNTpcdFxuMTAwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4xMDA3Olx0XHQubGxzZWVrXHRcdD0gbWVtX2xzZWVrLFxuMTAwODpcdFx0LnJlYWRcdFx0PSBtZW1fcmVhZCxcbjEwMDk6XHRcdC53cml0ZVx0XHQ9IG1lbV93cml0ZSxcbjEwMTA6XHRcdC5vcGVuXHRcdD0gbWVtX29wZW4sXG4xMDExOlx0XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG4xMDEyOlx0XHQuZm9wX2ZsYWdzXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXG4xMDEzOlx0fTtcbjEwMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzOQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSYjMzk7cyBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZW5zdXJpbmcgdGhlIGNvbnNpc3RlbmN5IG9mIHJlc291cmNlIGhhbmRsaW5nLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHByb2NfbWVtX29wZXJhdGlvbnNgIGlzIHRoZSAqb25seSogY29tcG9uZW50IGRpcmVjdGx5IGxldmVyYWdpbmcgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgYW5kIGBtZW1fb3BlbmAuIFdlIGtub3cgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byB0aGUgYC9wcm9jLyRwaWQvbWVtYCBmaWxlIChhbmQgcG90ZW50aWFsbHkgdGFzay90aWQgbWVtIGZpbGVzKS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IG90aGVyIHByb2MgZmlsZXMsIHN1Y2ggYXMgYGVudmlyb25gIGFuZCBgYXV4dmAsIHV0aWxpemUgYWx0ZXJuYXRpdmUgb3BlbiBmdW5jdGlvbnMsIG5hbWVseSBgZW52aXJvbl9vcGVuYCBhbmQgYGF1eHZfb3BlbmAuIFRoZXNlLCBhcyBJIHJlY2FsbCwgdXRpbGl6ZSBgX19tZW1fb3BlbmAgaW50ZXJuYWxseSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyByZWxlYXNlIGZ1bmN0aW9uLCBgbWVtX3JlbGVhc2VgLiBBIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGBtZW1fcmVsZWFzZWAgZXhwZWN0cyB0aGUgYGZpbGUtJmd0O3ByaXZhdGVfZGF0YWAgdG8gYmUgYSBwb2ludGVyIHRvIHRoZSBwcm9jZXNzJiMzOTtzIGBtbWAgKG1lbW9yeSBtYXApLCB3aGljaCBpcyBzZXQgYnkgYF9fbWVtX29wZW5gLiBTbywgdGhlIG93bmVyc2hpcCBhbmQgbGlmZWN5Y2xlIG11c3QgYmUgY29ycmVjdCB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIHNjcnV0aW5pemUgdGhlIFNFTGludXggYXNwZWN0IGludHJvZHVjZWQgaW4gdGhlIHBhdGNoLiBUaGUgYHNlbGludXhfbWVtX2ZvbGxfZm9yY2VgIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gY2FsbHMgYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCB0byBjaGVjayBpZiBhIHByb2Nlc3MgaGFzIHBlcm1pc3Npb24gdG8gcHRyYWNlIGl0c2VsZi4gV2hhdCBpcyBub3Rld29ydGh5IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIHBhc3NlcyBhIHBvaW50ZXIgdG8gYCZhbXA7YXZkYC4gVGh1cywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgYXZjX2hhc19wZXJtX25vYXVkaXRgIHVzZXMgaXQuIERvZXMgdGhlIGZ1bmN0aW9uIG1vZGlmeSBgJmFtcDthdmRgPyBJZiBzbywgd2hhdCBpbmZvcm1hdGlvbiBkb2VzIGl0IHN0b3JlIG9yIHVwZGF0ZT8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gdG8gY29uZmlybSBhbmQgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdmNfaGFzX3Blcm1fbm9hdWRpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTk1ND1pbnQgYXZjX3NzX3Jlc2V0KHUzMiBzZXFubylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTk4Mi0gKlxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzo5ODM6ICogU2xvdy1wYXRoIGhlbHBlciBmdW5jdGlvbiBmb3IgYXZjX2hhc19wZXJtX25vYXVkaXQsIHdoZW4gdGhlIGF2Y19ub2RlIGxvb2t1cFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODQtICogZmFpbHMuICBEb24mIzM5O3QgaW5saW5lIHRoaXMsIHNpbmNlIGl0JiMzOTtzIHRoZSBzbG93LXBhdGggYW5kIGp1c3QgcmVzdWx0cyBpbiBhXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz0xMDE5PWludCBhdmNfaGFzX2V4dGVuZGVkX3Blcm1zKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExMDUtICpcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEwNjogKiBUaGlzIGlzIHRoZSBcJiMzNDt3ZSBoYXZlIG5vIG5vZGVcJiMzNDsgcGFydCBvZiBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpLCB3aGljaCBpc1xuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTA3LSAqIHVubGlrZWx5IGFuZCBuZWVkcyBleHRyYSBzdGFjayBzcGFjZSBmb3IgdGhlIG5ldyBub2RlIHRoYXQgd2UgZ2VuZXJhdGUsIHNvXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz0xMTEwPXN0YXRpYyBub2lubGluZSBpbnQgYXZjX3Blcm1fbm9ub2RlKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExMjUtLyoqXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExMjY6ICogYXZjX2hhc19wZXJtX25vYXVkaXQgLSBDaGVjayBwZXJtaXNzaW9ucyBidXQgcGVyZm9ybSBubyBhdWRpdGluZy5cbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEyNy0gKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXJcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExNDQtICovXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExNDU6aW5saW5lIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExNDYtXHRcdFx0XHR1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmM9MTE4OT1pbnQgYXZjX2hhc19wZXJtKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExOTQtXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExOTU6XHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAwLFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTk2LVx0XHRcdFx0ICBcdTAwMjZhdmQpO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNjQxPXN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2NS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNjY2Olx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgc2NsYXNzLCBhdiwgMCwgXHUwMDI2YXZkKTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNjY3LVx0aWYgKCEob3B0cyBcdTAwMjYgQ0FQX09QVF9OT0FVRElUKSkge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yMTc4PXN0YXRpYyBpbnQgc2VsaW51eF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxODYtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE4NzpcdHJldHVybiBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAwLCBcdTAwMjZhdmQpO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxODgtfVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMjczPXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzMDktXHRcdC8qIENhY2hlIG1pc3MuICovXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzMxMDpcdFx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIGlzZWMtXHUwMDNlc2lkLCBpc2VjLVx1MDAzZXNjbGFzcyxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzExLVx0XHRcdFx0XHQgIHBlcm1zLCAwLCBhdmRwKTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg9MTAxPWludCBzbG93X2F2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsIHUzMiBhdWRpdGVkLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTAtICogQGF2ZDogYWNjZXNzIHZlY3RvciBkZWNpc2lvbnNcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMTE6ICogQHJlc3VsdDogcmVzdWx0IGZyb20gYXZjX2hhc19wZXJtX25vYXVkaXRcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTItICogQGE6ICBhdXhpbGlhcnkgYXVkaXQgZGF0YVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTYtICogYXZjX2hhc19wZXJtKCkgYWZ0ZXIgYSBwZXJtaXNzaW9uIGNoZWNrLCBidXQgY2FuIGFsc28gYmVcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMTc6ICogY2FsbGVkIGRpcmVjdGx5IGJ5IGNhbGxlcnMgd2hvIHVzZSBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTE4LSAqIGluIG9yZGVyIHRvIHNlcGFyYXRlIHRoZSBwZXJtaXNzaW9uIGNoZWNrIGZyb20gdGhlIGF1ZGl0aW5nLlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaD0xMjM9c3RhdGljIGlubGluZSBpbnQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTM2LSNkZWZpbmUgQVZDX0VYVEVOREVEX1BFUk1TIDIgLyogdXBkYXRlIGV4dGVuZGVkIHBlcm1pc3Npb25zICovXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg6MTM3OmludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTM4LVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NjEKCQkJCQkJCW91dHB1dDogMjg4CgkJCQkJCQl0aG91Z2h0czogNzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIE1lbW9yeSBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgS01TQU4gYW5hbHlzaXMuCgpGaXJzdCwgSSBsb29rZWQgYXQgaG93IHRoZSBgbWVtX3ByaXZhdGVgIHN0cnVjdCBpcyBoYW5kbGVkLiBJdCYjMzk7cyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpgLCBhbmQgYm90aCBgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYCBhcmUgaW1tZWRpYXRlbHkgYXNzaWduZWQgKmJlZm9yZSogYGZpbGUtJmd0O3ByaXZhdGVfZGF0YWAgaXMgdG91Y2hlZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhLCBubyBwb3RlbnRpYWwgaW5mbyBsZWFrcyB0aHJvdWdoIHBhZGRpbmcsIHNpbmNlIHRoaXMgc3RydWN0IGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsIGFuZCBvbmx5IGFjY2Vzc2VkIHZpYSBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYC4KCk5leHQsIHRoZXJlJiMzOTtzIG5vIGRhdGEgYmVpbmcgY29waWVkIGRpcmVjdGx5IHRvIHVzZXJzcGFjZS4gYG1lbV9yd2AgYWxyZWFkeSBsZXZlcmFnZXMgdGhlIGVzdGFibGlzaGVkIGtlcm5lbCBtZWNoYW5pc21zIGxpa2UgYGNvcHlfdG9fdXNlcmAgYW5kIGBjb3B5X2Zyb21fdXNlcmAgd2hlbiBkZWFsaW5nIHdpdGggdXNlciBidWZmZXJzIHZpYSBgYWNjZXNzX3JlbW90ZV92bWAuIFdlJiMzOTtyZSBnb29kIHRoZXJlLgoKSSB0aGVuIGV4YW1pbmVkIHRoZSBTRUxpbnV4IGhvb2ssIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlYC4gSXQgdGFrZXMgYGNyZWRgIGFuZCBgb3BlbmVkX2J5X293bmVyYCwgY2FsbHMgYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCwgYW5kIHJldHVybnMgYW4gaW50ZWdlci4gYGF2ZGAgaXMgcGFzc2VkIGJ5IHBvaW50ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCwgYnV0IHRoZSByZXR1cm4gY29kZSBpcyB1c2VkIGRpcmVjdGx5LCB3aXRob3V0IGFueSByZWFkIG9mIHRoZSBgYXZkYCBzdHJ1Y3QuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFuIHBhdHRlcm4uCgpUaGUgTFNNIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZWAsIGNhbGxzIGBjYWxsX2ludF9ob29rYCwgd2hpY2ggcmV0dXJucyBhbiBpbnRlZ2VyLiBUaGUgZGVmYXVsdCBzdGF0aWMgaW5saW5lIHJldHVybnMgMC4gQWdhaW4sIG5vIGlzc3VlcyBoZXJlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClNvLCBJIGFza2VkIG15c2VsZiB0aGUgY3JpdGljYWwgcXVlc3Rpb25zOiBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8gVGhlIGFuc3dlciBpcyBhIGNsZWFyIG5vLiBBbGwgbmV3bHkgYWxsb2NhdGVkIHN0cnVjdHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZS4gQW55ICpwb3RlbnRpYWwqIG1lbW9yeSBzYWZldHkgYnVncyAobGlrZSBVQUYgaWYgc3RydWN0IGxpZmV0aW1lIGhhZCBpc3N1ZXMpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIHJlYXNvbmluZyBhZ2FpbnN0IHRoZSBlc3RhYmxpc2hlZCBydWxlcy4gSSYjMzk7bSBnb2luZyB0byByZS1zdGF0ZSB0aGUga2V5IGRpc3RpbmN0aW9ucyBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gaXMgYWxyZWFkeSBlbmFibGVkLCBpbmNsdWRpbmcgTE9DS0RFUCwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciByZWFkcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLgoKSSBkb3VibGUtY2hlY2tlZCB0aGUgY29uZGl0aW9ucyBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gYHRydWVgOiBub25lIG9mIHRoZW0gYXBwbHkgaGVyZS4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCB0aGVyZSYjMzk7cyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKT24gdGhlIGZsaXAgc2lkZSwgYWxsIHRoZSBjb25kaXRpb25zIGZvciBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhcmUgbWV0OiB0aGUgY29kZSBwcmltYXJpbHkgZGVhbHMgd2l0aCB0aGluZ3MgdGhhdCBLQVNBTiBhbHJlYWR5IGFkZHJlc3NlcyBsaWtlIG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgYW5kIFVBRi4gQWxsIHJlbGV2YW50IHN0cnVjdHMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZC4gVGhlcmUmIzM5O3MgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFNwZWNpZmljYWxseSwgdGhlIGZpZWxkcyBpbiBgc3RydWN0IG1lbV9wcml2YXRlYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGluIGBtZW1fb3BlbmAsIGFuZCBubyBrZXJuZWwgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRodXMsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KClNvLCAqSSBhbSBjb21wbGV0ZWx5IGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2sgYG1lbV9mb2xsX2ZvcmNlYCBhbmQgcmVwbGFjZXMgdGhlIGRpcmVjdCBgbW1fc3RydWN0YCBwb2ludGVyIGluIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgb2YgYC9wcm9jLyRwaWQvbWVtYCB3aXRoIGEgc21hbGwgY29udGFpbmVyIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGNvbnRhaW5pbmcgYG1tYCBhbmQgYG9wZW5lZF9ieV9vd25lcmAuXG5cbi0gSW4gYG1lbV9vcGVuKClgLCB0aGUgaGVhcCBhbGxvY2F0aW9uIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYCBoYXMgYWxsIGl0cyBmaWVsZHMgKGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIGFzc2lnbmVkIHRvIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuXG4tIEluIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKClgLCB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBpcyBwYXNzZWQgYXMgYW4gb3V0cHV0IGJ1ZmZlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIGFuZCBpdHMgZmllbGRzIGFyZSBub3QgcmVhZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uXG4tIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAoc3VjaCBhcyBsaWZldGltZS9mcmVlaW5nIG9mIGBwcml2YCBvciBgbW1gKSBhcmUgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zIHRoYXQgYXJlIHByb3Blcmx5IGNvdmVyZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2sgYG1lbV9mb2xsX2ZvcmNlYCBhbmQgcmVwbGFjZXMgdGhlIGRpcmVjdCBgbW1fc3RydWN0YCBwb2ludGVyIGluIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgb2YgYC9wcm9jLyRwaWQvbWVtYCB3aXRoIGEgc21hbGwgY29udGFpbmVyIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGNvbnRhaW5pbmcgYG1tYCBhbmQgYG9wZW5lZF9ieV9vd25lcmAuXG5cbi0gSW4gYG1lbV9vcGVuKClgLCB0aGUgaGVhcCBhbGxvY2F0aW9uIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYCBoYXMgYWxsIGl0cyBmaWVsZHMgKGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIGFzc2lnbmVkIHRvIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuXG4tIEluIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKClgLCB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBpcyBwYXNzZWQgYXMgYW4gb3V0cHV0IGJ1ZmZlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIGFuZCBpdHMgZmllbGRzIGFyZSBub3QgcmVhZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uXG4tIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAoc3VjaCBhcyBsaWZldGltZS9mcmVlaW5nIG9mIGBwcml2YCBvciBgbW1gKSBhcmUgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zIHRoYXQgYXJlIHByb3Blcmx5IGNvdmVyZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MDkuOTI5NDQ1Nzk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0OTY5NTY0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fb3BlblwiLFxuICAgIFwicHJvY19tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwibWVtX3J3XCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIixcbiAgICBcInNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJzZWxpbnV4X21lbV9mb2xsX2ZvcmNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBtZW1fZm9sbF9mb3JjZWAgYW5kIHJlcGxhY2VzIHRoZSBkaXJlY3QgYG1tX3N0cnVjdGAgcG9pbnRlciBpbiBgZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhYCBvZiBgL3Byb2MvJHBpZC9tZW1gIHdpdGggYSBzbWFsbCBjb250YWluZXIgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgY29udGFpbmluZyBgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYC5cXG5cXG4tIEluIGBtZW1fb3BlbigpYCwgdGhlIGhlYXAgYWxsb2NhdGlvbiBga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKWAgaGFzIGFsbCBpdHMgZmllbGRzIChgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCB0byBgZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhYC5cXG4tIEluIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKClgLCB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBpcyBwYXNzZWQgYXMgYW4gb3V0cHV0IGJ1ZmZlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIGFuZCBpdHMgZmllbGRzIGFyZSBub3QgcmVhZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uXFxuLSBObyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIChzdWNoIGFzIGxpZmV0aW1lL2ZyZWVpbmcgb2YgYHByaXZgIG9yIGBtbWApIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MgdGhhdCBhcmUgcHJvcGVybHkgY292ZXJlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MDkuOTI5NDUwODE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE0NzQzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZDUxYzNiNDQ1MDk3ZTkwOWEyZDczNTA1NTA3NDg4ODU1NTdmODAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDE6MjM6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuY1xcbmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy9iYXNlLmNcXG4rKysgYi9mcy9wcm9jL2Jhc2UuY1xcbkBAIC04NDgsMTUgKzg0OCwzNSBAQCBzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovXFxuK3N0cnVjdCBtZW1fcHJpdmF0ZSB7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHQvKlxcbitcXHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxcbitcXHQgKiB0aGUgc2FtZSBNTSAoaW50cm9zcGVjdGlvbik/XFxuK1xcdCAqL1xcbitcXHRib29sIG9wZW5lZF9ieV9vd25lcjtcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4rXFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xcbitcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZvcF9mbGFncyBcXHUwMDI2IEZPUF9VTlNJR05FRF9PRkZTRVQpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xcbitcXHRwcml2LVxcdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XFxuK1xcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVxcdTAwM2VtbSkpXFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VtbSA/IFBUUl9FUlIocHJpdi1cXHUwMDNlbW0pIDogLUVTUkNIO1xcbitcXHRwcml2LVxcdTAwM2VvcGVuZWRfYnlfb3duZXIgPSBwcml2LVxcdTAwM2VtbSA9PSBjdXJyZW50LVxcdTAwM2VtbTtcXG4rXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbitcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4gXFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XFxuIFxcbkBAIC04NzEsMTYgKzg5MSwyMCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHRhc2stXFx1MDAzZXBhcmVudCkgPT0gY3VycmVudDtcXG4gXFx0XFx0XFx0cHV0X3Rhc2tfc3RydWN0KHRhc2spO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJldHVybiBwdHJhY2VfYWN0aXZlO1xcbitcXHRcXHRpZiAoIXB0cmFjZV9hY3RpdmUpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRyZXR1cm4gc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoZmlsZS1cXHUwMDNlZl9jcmVkLCBwcml2LVxcdTAwM2VvcGVuZWRfYnlfb3duZXIpID09IDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtXFx1MDAzZW1tO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvcztcXG4gXFx0c3NpemVfdCBjb3BpZWQ7XFxuIFxcdGNoYXIgKnBhZ2U7XFxuQEAgLTk3MCwxMiArOTk0LDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcbitcXHRtbWRyb3AocHJpdi1cXHUwMDNlbW0pO1xcbitcXHRrZnJlZShwcml2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IG1lbV9sc2VlayxcXG4gXFx0LnJlYWRcXHRcXHQ9IG1lbV9yZWFkLFxcbiBcXHQud3JpdGVcXHRcXHQ9IG1lbV93cml0ZSxcXG4gXFx0Lm9wZW5cXHRcXHQ9IG1lbV9vcGVuLFxcbi1cXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2UsXFxuK1xcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXFxuIFxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uMTJmODRhMWU2ZmFiNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuQEAgLTM2LDYgKzM2LDcgQEAgTFNNX0hPT0soaW50LCAwLCBiaW5kZXJfdHJhbnNmZXJfZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXFxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX2FjY2Vzc19jaGVjaywgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcXG4gXFx0IHVuc2lnbmVkIGludCBtb2RlKVxcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4rTFNNX0hPT0soaW50LCAwLCBtZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKVxcbiBMU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxcbiBcXHQga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpXFxuIExTTV9IT09LKGludCwgMCwgY2Fwc2V0LCBzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5pbmRleCAxNTNlOTA0MzA1OGY4Li5lOGJjMmU2NDQyNDFiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbkBAIC0zMzgsNiArMzM4LDcgQEAgaW50IHNlY3VyaXR5X2JpbmRlcl90cmFuc2Zlcl9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xcbiBpbnQgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSk7XFxuIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XFxuK2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpO1xcbiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxcbiBcXHRcXHQgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuIFxcdFxcdCAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxcbkBAIC02NzYsNiArNjc3LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbiBcXHRyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGJvb2wgb3BlbmVkX2J5X293bmVyKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXFxuIFxcdFxcdFxcdFxcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxcbiBcXHRcXHRcXHRcXHQgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbmluZGV4IDcxYWVhOGZkZjAxNDIuLjJjZGUxZWZkYjdhNjIgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG5AQCAtNTk1LDYgKzU5NSwzMSBAQCBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXFxuIFxcdHJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpO1xcbiB9XFxuIFxcbisvKipcXG4rICogc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxcbisgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZFxcbisgKiBAb3BlbmVkX2J5X293bmVyOiB3aGV0aGVyIGNoZWNrcyBvbiBvcGVuKCkgd2VyZSBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXJcXG4rICogICAgICAgICAgICAgICAgICAgaGFzIHRoZSBzYW1lIE1NIGFzIHRoZSB0YXJnZXRcXG4rICpcXG4rICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhY2Nlc3NpbmcgcHJvY2VzcyBtZW1vcnkgdGhyb3VnaFxcbisgKiAvcHJvYy8kcGlkL21lbS4gb3BlbmVkX2J5X293bmVyIHNpZ25hbHMgd2hldGhlciB0aGUgb3BlbmVyJ3MgTU0gd2FzIHRoZSBzYW1lXFxuKyAqIGFzIHRoZSB0YXJnZXQgTU0sIG1lYW5pbmcgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rIHdhc1xcbisgKiBieXBhc3NlZCBvbiBvcGVuKCkuXFxuKyAqIChDdXJyZW50IGN1cnJlbnQtXFx1MDAzZW1tIGRvZXMgbm90IG1hdHRlciBmb3IgdGhpczsgZm9yIGV4YW1wbGUsIGlmIHdyaXRlKCkgaXNcXG4rICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGhcXG4rICogb3BlbihcXFwiL3Byb2Mvc2VsZi9tZW1cXFwiKSwgQG9wZW5lZF9ieV9vd25lciBpcyBzdGlsbCB0cnVlLilcXG4rICpcXG4rICogTm90ZSB0aGF0IHRoaXMgaG9vayBpcyBvbmx5IGRlc2lnbmVkIHRvIGJlIHVzZWZ1bCBpbiB0aGUgb3BlbmVkX2J5X293bmVyXFxuKyAqIGNhc2UsIHdoZXJlIHRoZSBzdWJqZWN0IGNyZWRlbnRpYWxzIGVmZmVjdGl2ZWx5IGFsc28gZGVzY3JpYmUgdGhlIG9iamVjdC5cXG4rICpcXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbisgKi9cXG4raW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXFxuK3tcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2sobWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QsIG9wZW5lZF9ieV9vd25lcik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9jYXBnZXQoKSAtIEdldCB0aGUgY2FwYWJpbGl0eSBzZXRzIGZvciBhIHByb2Nlc3NcXG4gICogQHRhcmdldDogdGFyZ2V0IHByb2Nlc3NcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuaW5kZXggMThkZDI4YjJiYjEzZC4uNDVlYWQxOGM4ZjAxYSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjE1Nyw2ICsyMTU3LDM2IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4gXFx0XFx0XFx0ICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0VcXG4rICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIHVzaW5nIHdoaWNoIC9wcm9jLyRwaWQvbWVtIHdhcyBvcGVuZWRcXG4rICogQG9wZW5lZF9ieV9vd25lcjogd2hldGhlciBjaGVja3Mgb24gb3BlbigpIHdlcmUgYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyXFxuKyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0XFxuKyAqXFxuKyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZVxcbisgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXFxuKyAqIFRoZSBAb3BlbmVkX2J5X293bmVyIGNhc2Ugb25seSBhcHBsaWVzIHRvIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoXFxuKyAqIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHkgaGFwcGVucyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0b1xcbisgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW5cXG4rICogbWF5X2FjY2Vzc19tbSgpIGFuZCBfX3B0cmFjZV9tYXlfYWNjZXNzKCkuXFxuKyAqXFxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxcbisgKlxcbisgKiBDcmVhdGluZyBhbiBhdWRpdCByZWNvcmQgb24gZGVuaWFsIGRvZXNuJ3QgbWFrZSBzZW5zZSBoZXJlLCBzaW5jZSB3ZSBjYW4ndFxcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpXFxuK3tcXG4rXFx0c3RydWN0IGF2X2RlY2lzaW9uIGF2ZDtcXG4rXFx0dTMyIHNpZDtcXG4rXFxuK1xcdGlmICghb3BlbmVkX2J5X293bmVyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0c2lkID0gY3JlZF9zaWQoc3ViamVjdCk7XFxuK1xcbitcXHRyZXR1cm4gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXFx1MDAyNmF2ZCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxcbiBcXHRcXHRcXHQgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKVxcbiB7XFxuQEAgLTc1NTgsNiArNzU4OCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcbiBcXHRMU01fSE9PS19JTklUKHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjayksXFxuIFxcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxcbitcXHRMU01fSE9PS19JTklUKG1lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSxcXG4gXFx0TFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSxcXG4gXFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcXG4gXFx0TFNNX0hPT0tfSU5JVChjYXBhYmxlLCBzZWxpbnV4X2NhcGFibGUpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoxMC41NDE1MDc2NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzIzNDc0MDk2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fb3BlblwiLFxuICAgIFwicHJvY19tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwibWVtX3J3XCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIixcbiAgICBcInNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJzZWxpbnV4X21lbV9mb2xsX2ZvcmNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZDUxYzNiNDQ1MDk3ZTkwOWEyZDczNTA1NTA3NDg4ODU1NTdmODAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMToyMzowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC04NDgsMTUgKzg0OCwzNSBAQCBzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuK3N0cnVjdCBtZW1fcHJpdmF0ZSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdC8qXG4rXHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxuK1x0ICogdGhlIHNhbWUgTU0gKGludHJvc3BlY3Rpb24pP1xuK1x0ICovXG4rXHRib29sIG9wZW5lZF9ieV9vd25lcjtcbit9O1xuK1xuIHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xuK1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4rXHRwcml2LVx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcbitcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVx1MDAzZW1tKSlcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbW0gPyBQVFJfRVJSKHByaXYtXHUwMDNlbW0pIDogLUVTUkNIO1xuK1x0cHJpdi1cdTAwM2VvcGVuZWRfYnlfb3duZXIgPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW07XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XG4gXG5AQCAtODcxLDE2ICs4OTEsMjAgQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdFx0XHRcdFJFQURfT05DRSh0YXNrLVx1MDAzZXBhcmVudCkgPT0gY3VycmVudDtcbiBcdFx0XHRwdXRfdGFza19zdHJ1Y3QodGFzayk7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIHB0cmFjZV9hY3RpdmU7XG4rXHRcdGlmICghcHRyYWNlX2FjdGl2ZSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdGJyZWFrO1xuIFx0fVxuK1x0cmV0dXJuIHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGZpbGUtXHUwMDNlZl9jcmVkLCBwcml2LVx1MDAzZW9wZW5lZF9ieV9vd25lcikgPT0gMDtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpXG4ge1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVx1MDAzZW1tO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKnBwb3M7XG4gXHRzc2l6ZV90IGNvcGllZDtcbiBcdGNoYXIgKnBhZ2U7XG5AQCAtOTcwLDEyICs5OTQsMjEgQEAgc3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdG1tZHJvcChwcml2LVx1MDAzZW1tKTtcbitcdGtmcmVlKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gbWVtX2xzZWVrLFxuIFx0LnJlYWRcdFx0PSBtZW1fcmVhZCxcbiBcdC53cml0ZVx0XHQ9IG1lbV93cml0ZSxcbiBcdC5vcGVuXHRcdD0gbWVtX29wZW4sXG4tXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbitcdC5yZWxlYXNlXHQ9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSxcbiBcdC5mb3BfZmxhZ3NcdD0gRk9QX1VOU0lHTkVEX09GRlNFVCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjEyZjg0YTFlNmZhYjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0zNiw2ICszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX2FjY2Vzc19jaGVjaywgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcbiBcdCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbitMU01fSE9PSyhpbnQsIDAsIG1lbV9mb2xsX2ZvcmNlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBnZXQsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiBMU01fSE9PSyhpbnQsIDAsIGNhcHNldCwgc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmU4YmMyZTY0NDI0MWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTMzOCw2ICszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpO1xuK2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpO1xuIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0ICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5AQCAtNjc2LDYgKzY3NywxMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsXG4rXHRcdFx0XHRcdCAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uMmNkZTFlZmRiN2E2MiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01OTUsNiArNTk1LDMxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpO1xuIH1cbiBcbisvKipcbisgKiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSgpIC0gQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkXG4rICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIHVzaW5nIHdoaWNoIC9wcm9jLyRwaWQvbWVtIHdhcyBvcGVuZWRcbisgKiBAb3BlbmVkX2J5X293bmVyOiB3aGV0aGVyIGNoZWNrcyBvbiBvcGVuKCkgd2VyZSBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXJcbisgKiAgICAgICAgICAgICAgICAgICBoYXMgdGhlIHNhbWUgTU0gYXMgdGhlIHRhcmdldFxuKyAqXG4rICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhY2Nlc3NpbmcgcHJvY2VzcyBtZW1vcnkgdGhyb3VnaFxuKyAqIC9wcm9jLyRwaWQvbWVtLiBvcGVuZWRfYnlfb3duZXIgc2lnbmFscyB3aGV0aGVyIHRoZSBvcGVuZXIncyBNTSB3YXMgdGhlIHNhbWVcbisgKiBhcyB0aGUgdGFyZ2V0IE1NLCBtZWFuaW5nIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vayB3YXNcbisgKiBieXBhc3NlZCBvbiBvcGVuKCkuXG4rICogKEN1cnJlbnQgY3VycmVudC1cdTAwM2VtbSBkb2VzIG5vdCBtYXR0ZXIgZm9yIHRoaXM7IGZvciBleGFtcGxlLCBpZiB3cml0ZSgpIGlzXG4rICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGhcbisgKiBvcGVuKFwiL3Byb2Mvc2VsZi9tZW1cIiksIEBvcGVuZWRfYnlfb3duZXIgaXMgc3RpbGwgdHJ1ZS4pXG4rICpcbisgKiBOb3RlIHRoYXQgdGhpcyBob29rIGlzIG9ubHkgZGVzaWduZWQgdG8gYmUgdXNlZnVsIGluIHRoZSBvcGVuZWRfYnlfb3duZXJcbisgKiBjYXNlLCB3aGVyZSB0aGUgc3ViamVjdCBjcmVkZW50aWFscyBlZmZlY3RpdmVseSBhbHNvIGRlc2NyaWJlIHRoZSBvYmplY3QuXG4rICpcbisgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4rICovXG4raW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LFxuK1x0XHRcdFx0XHQgICAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4re1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2sobWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QsIG9wZW5lZF9ieV9vd25lcik7XG4rfVxuK1xuIC8qKlxuICAqIHNlY3VyaXR5X2NhcGdldCgpIC0gR2V0IHRoZSBjYXBhYmlsaXR5IHNldHMgZm9yIGEgcHJvY2Vzc1xuICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxOGRkMjhiMmJiMTNkLi40NWVhZDE4YzhmMDFhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yMTU3LDYgKzIxNTcsMzYgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0XHRcdCAgICBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIE5VTEwpO1xuIH1cbiBcbisvKipcbisgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0VcbisgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZFxuKyAqIEBvcGVuZWRfYnlfb3duZXI6IHdoZXRoZXIgY2hlY2tzIG9uIG9wZW4oKSB3ZXJlIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lclxuKyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0XG4rICpcbisgKiBEZWNpZGUgd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBub24tcmVhZGFibGUgVk1BcyBhbmQgd3JpdGVcbisgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXG4rICogVGhlIEBvcGVuZWRfYnlfb3duZXIgY2FzZSBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGhcbisgKiBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5IGhhcHBlbnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG9cbisgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW5cbisgKiBtYXlfYWNjZXNzX21tKCkgYW5kIF9fcHRyYWNlX21heV9hY2Nlc3MoKS5cbisgKlxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxuKyAqXG4rICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2Vzbid0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJ3RcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cbisgKi9cbitzdGF0aWMgaW50IHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKVxuK3tcbitcdHN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7XG4rXHR1MzIgc2lkO1xuK1xuK1x0aWYgKCFvcGVuZWRfYnlfb3duZXIpXG4rXHRcdHJldHVybiAwO1xuK1x0c2lkID0gY3JlZF9zaWQoc3ViamVjdCk7XG4rXG4rXHRyZXR1cm4gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXHUwMDI2YXZkKTtcbit9XG4rXG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICs3NTg4LDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX2FjY2Vzc19jaGVjaywgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKSxcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxuK1x0TFNNX0hPT0tfSU5JVChtZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSksXG4gXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjEwLjU0MTUwOTA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk4MDE3MzcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiB0aGlzIHBhdGNoLCByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3Mgd2l0aGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0sIGlzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBidXQgd2UgbmVlZCB0byBiZSBzbWFydCBhYm91dCBpdC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIFRoZSBkaWZmIGZvY3VzZXMgb24gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vaywgYG1lbV9mb2xsX2ZvcmNlYCwgYWxvbmcgd2l0aCByZWxhdGVkIHNlY3VyaXR5IGNoZWNrcy4gU3BlY2lmaWNhbGx5LCB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlIGFyZSBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGBtZW1fcndgLCBhbmQgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaW4gYGZzL3Byb2MvYmFzZS5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2VgIGFuZCB0aGUgYHNlbGludXhfbWVtX2ZvbGxfZm9yY2VgIGhvb2sgaW5kaWNhdGVzIHRoYXQgc2VjdXJpdHkgcGVybWlzc2lvbnMgYXJlIHBsYXlpbmcgYSByb2xlLlxuXG5Gcm9tIGBmcy9wcm9jL2Jhc2UuY2AsIGl0IGxvb2tzIGxpa2UgYG1lbV9vcGVuYCBhbGxvY2F0ZXMgYSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIChgbWVtX3ByaXZhdGVgKSBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIGEgZmlsZS4gQ3JpdGljYWxseSwgaXQgYXBwZWFycyB0aGF0IHRoaXMgc3RydWN0dXJlIHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIG1tIHN0cnVjdCBhbmQgaGFzIGEgZmxhZywgYG9wZW5lZF9ieV9vd25lcmAuIFRoZSBzZWN1cml0eSBjaGVjayAoYHByb2NfbWVtX2ZvbGxfZm9yY2VgKSBpcyB0aGVuIGV2YWx1YXRlZCBiYXNlZCBvbiB0aGlzIGZsYWcgYW5kIHRoZSBjYWxsaW5nIGNyZWRlbnRpYWxzLiBgbWVtX3J3YCB0aGVuIHJldHJpZXZlcyB0aGlzIHByaXZhdGUgZGF0YS4gQW5kIG9uIHJlbGVhc2UsIHRoZSBtbSBzdHJ1Y3R1cmUgaXMgZHJvcHBlZCBhbmQgdGhlIHByaXZhdGUgZGF0YSBmcmVlZC5cblxuVGhlIGBtZW1fZm9sbF9mb3JjZWAgaG9vayBpdHNlbGYsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBTRUxpbnV4LCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYmVjYXVzZSBpdCBsb29rcyBsaWtlIHdlIG1heSBiZSBhYmxlIHRvIGluZmx1ZW5jZSB0aGlzIGNoZWNrIGJ5IG1hbmlwdWxhdGluZyBjcmVkZW50aWFscyBvciB0aGUgYG9wZW5lZF9ieV9vd25lcmAgZmxhZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgc3lzdGVtLCBzbyBJIHNob3VsZCBub3cgZGl2ZSBkZWVwZXIgaW50byBgZnMvcHJvYy9iYXNlLmNgIGFuZCBhbnkgcmVsYXRlZCBmaWxlcy4gVXNpbmcgZ3JlcCwgb3Igc2ltcGx5IHJlYWRpbmcgdGhlIGNvZGUsIEkgY2FuIGxvb2sgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlIG9yIGV4cG9zZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gdXNlciBzcGFjZS4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIHRhcmdldCBzZWxlY3Rpb24gZm9yIGZvY3VzIHN5bWJvbCBleHRyYWN0aW9uIGFuZCBmdXp6aW5nIHN0cmF0ZWdpZXMuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBvcGVuZWRfYnlfb3duZXJgIGlzIHNldCBhbmQgaG93IHRoZSBzZWN1cml0eSBjaGVjayBpcyB1c2VkIHRvIGdhdGUgYWNjZXNzLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gY3JlZGVudGlhbHMsIG93bmVyc2hpcCwgYW5kIG1lbW9yeSBhY2Nlc3MgbWlnaHQgeWllbGQgc29tZSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoxNy41MjE2ODQ5NTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NzM1NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY19tZW1fZm9sbF9mb3JjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz04NjE9c3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTg3Ni1cXG5mcy9wcm9jL2Jhc2UuYzo4Nzc6c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuZnMvcHJvYy9iYXNlLmMtODc4LXtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTkwMz1zdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy05MjQtXFx0ZmxhZ3MgPSB3cml0ZSA/IEZPTExfV1JJVEUgOiAwO1xcbmZzL3Byb2MvYmFzZS5jOjkyNTpcXHRpZiAocHJvY19tZW1fZm9sbF9mb3JjZShmaWxlLCBtbSkpXFxuZnMvcHJvYy9iYXNlLmMtOTI2LVxcdFxcdGZsYWdzIHw9IEZPTExfRk9SQ0U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjE3LjU2OTU2NDAzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjE3NjAwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBmcy9wcm9jL2Jhc2UuY2AgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLCBgcHJvY19tZW1fb3BlcmF0aW9uc2AsIGFuZCBgX19tZW1fb3BlbmAgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmVhIG9mIGludGVyZXN0IGlzIGxpbmVzIDg0OCB0aHJvdWdoIDk5NCBpbiBgZnMvcHJvYy9iYXNlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHV0aWxpemUgYW55IG9mIHRoZXNlIHRoaW5ncy4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBhbnkgY3Jvc3MtcmVmZXJlbmNlcyB0byBnYWluIGNvbXBsZXRlIGNsYXJpdHkuIEl0IGNvdWxkIHJldmVhbCBzb21lIGludGVyZXN0aW5nIHVzYWdlIHBhdHRlcm5zIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjE5LjgzMTMyNjUyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL2Jhc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4gODQxOlxcdHtcXG4gODQyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgbW9kZSk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChtbSkpXFxuIDg0NTpcXHRcXHRcXHRyZXR1cm4gbW0gPyBQVFJfRVJSKG1tKSA6IC1FU1JDSDtcXG4gODQ2OlxcdFxcbiA4NDc6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbW07XFxuIDg0ODpcXHRcXHRyZXR1cm4gMDtcXG4gODQ5OlxcdH1cXG4gODUwOlxcdFxcbiA4NTE6XFx0LyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovXFxuIDg1MjpcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUge1xcbiA4NTM6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIDg1NDpcXHRcXHQvKlxcbiA4NTU6XFx0XFx0ICogV2FzIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIG9uIG9wZW4gYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyIHVzZWRcXG4gODU2OlxcdFxcdCAqIHRoZSBzYW1lIE1NIChpbnRyb3NwZWN0aW9uKT9cXG4gODU3OlxcdFxcdCAqL1xcbiA4NTg6XFx0XFx0Ym9vbCBvcGVuZWRfYnlfb3duZXI7XFxuIDg1OTpcXHR9O1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiA4NjI6XFx0e1xcbiA4NjM6XFx0XFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xcbiA4NjQ6XFx0XFxuIDg2NTpcXHRcXHRpZiAoIXByaXYpXFxuIDg2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODY3OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXFxuIDg2ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODY5OlxcdFxcdHByaXYtXFx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcXG4gODcwOlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVxcdTAwM2VtbSkpXFxuIDg3MTpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbW0gPyBQVFJfRVJSKHByaXYtXFx1MDAzZW1tKSA6IC1FU1JDSDtcXG4gODcyOlxcdFxcdHByaXYtXFx1MDAzZW9wZW5lZF9ieV9vd25lciA9IHByaXYtXFx1MDAzZW1tID09IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiA4NzM6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XFxuIDg3NDpcXHRcXHRyZXR1cm4gMDtcXG4gODc1OlxcdH1cXG4gODc2OlxcdFxcbiA4Nzc6XFx0c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIDg3ODpcXHR7XFxuIDg3OTpcXHRcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDg4MDpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuIDg4MTpcXHRcXHRib29sIHB0cmFjZV9hY3RpdmUgPSBmYWxzZTtcXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xcbiA4ODQ6XFx0XFx0Y2FzZSBQUk9DX01FTV9GT1JDRV9ORVZFUjpcXG4gODg1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODg2OlxcdFxcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFOlxcbiA4ODc6XFx0XFx0XFx0dGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZV9pbm9kZShmaWxlKSk7XFxuIDg4ODpcXHRcXHRcXHRpZiAodGFzaykge1xcbiA4ODk6XFx0XFx0XFx0XFx0cHRyYWNlX2FjdGl2ZSA9XFx0UkVBRF9PTkNFKHRhc2stXFx1MDAzZXB0cmFjZSkgXFx1MDAyNlxcdTAwMjZcXG4gODkwOlxcdFxcdFxcdFxcdFxcdFxcdFJFQURfT05DRSh0YXNrLVxcdTAwM2VtbSkgPT0gbW0gXFx1MDAyNlxcdTAwMjZcXG4gODkxOlxcdFxcdFxcdFxcdFxcdFxcdFJFQURfT05DRSh0YXNrLVxcdTAwM2VwYXJlbnQpID09IGN1cnJlbnQ7XFxuIDg5MjpcXHRcXHRcXHRcXHRwdXRfdGFza19zdHJ1Y3QodGFzayk7XFxuIDg5MzpcXHRcXHRcXHR9XFxuIDg5NDpcXHRcXHRcXHRpZiAoIXB0cmFjZV9hY3RpdmUpXFxuIDg5NTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDg5NjpcXHRcXHRcXHRicmVhaztcXG4gODk3OlxcdFxcdGRlZmF1bHQ6XFxuIDg5ODpcXHRcXHRcXHRicmVhaztcXG4gODk5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MTkuODMxNDgyODQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1Mjc1NDk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgX19tZW1fb3BlbmAgYW5kIGBtZW1fcmVsZWFzZWAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIGBmcy9wcm9jL2Jhc2UuY2AgYWdhaW4sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBgX19tZW1fb3BlbmAgYW5kIGBtZW1fcmVsZWFzZWAgYXJlIHV0aWxpemVkLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIEkgYWxyZWFkeSBrbm93IHNvbWUgb2YgdGhlIGJhc2ljcywgYnV0IEkgbmVlZCB0byBmdWxseSBncm9rIHRoZWlyIGltcGFjdCBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9ucyBpbiB0aGlzIGFyZWEuIEkgbmVlZCB0byBjb21wcmVoZW5zaXZlbHkgdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgSSdtIGRlYWxpbmcgd2l0aCBvcGVucywgdXNlcywgYW5kIHJlbGVhc2VzIG1lbW9yeS4gR290dGEgbG9vayBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyB0aGF0IGEgY2FzdWFsIGdsYW5jZSBtaWdodCBtaXNzLiBTbywgSSdtIG5vdCBqdXN0IGxvb2tpbmcgaW4gYGZzL3Byb2MvYmFzZS5jYCDigJMgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIFRpbWUgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZWlyIHVzZXMgdGhyb3VnaG91dCB0aGUga2VybmVsIGNvZGViYXNlLCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoZSBnb2FsIGlzIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGZ1bmN0aW9ucycgcm9sZSBhbmQgaW1wYWN0IGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbS4gR290dGEgbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MjIuMDg0MjM5OTA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAwNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihfX21lbV9vcGVufG1lbV9yZWxlYXNlKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz04MTg9c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTgzOS1cXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9wcm9jL2Jhc2UuYy04NDEte1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9OTczPWxvZmZfdCBtZW1fbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtOTg4LVxcbmZzL3Byb2MvYmFzZS5jOjk4OTpzdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvYmFzZS5jLTk5MC17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy05OTYtXFxuZnMvcHJvYy9iYXNlLmM6OTk3OnN0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvYmFzZS5jLTk5OC17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0xMDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMDEwLVxcdC5vcGVuXFx0XFx0PSBtZW1fb3BlbixcXG5mcy9wcm9jL2Jhc2UuYzoxMDExOlxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXFxuZnMvcHJvYy9iYXNlLmMtMTAxMi1cXHQuZm9wX2ZsYWdzXFx0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTAxNT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDE2LXtcXG5mcy9wcm9jL2Jhc2UuYzoxMDE3OlxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDE4LX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwODM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMDg2LVxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuZnMvcHJvYy9iYXNlLmM6MTA4NzpcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2UsXFxuZnMvcHJvYy9iYXNlLmMtMTA4OC19O1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTA5MD1zdGF0aWMgaW50IGF1eHZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDkxLXtcXG5mcy9wcm9jL2Jhc2UuYzoxMDkyOlxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xcbmZzL3Byb2MvYmFzZS5jLTEwOTMtfVxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTExMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2F1eHZfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTExMTMtXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG5mcy9wcm9jL2Jhc2UuYzoxMTE0OlxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZSxcXG5mcy9wcm9jL2Jhc2UuYy0xMTE1LX07XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0yNzcxPXN0YXRpYyBpbnQgcHJvY19waWRfYXR0cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMjc3My1cXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBOVUxMO1xcbmZzL3Byb2MvYmFzZS5jOjI3NzQ6XFx0X19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcXG5mcy9wcm9jL2Jhc2UuYy0yNzc1LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9Mjg1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9hdHRyX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0yODYxLVxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuZnMvcHJvYy9iYXNlLmM6Mjg2MjpcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2UsXFxuZnMvcHJvYy9iYXNlLmMtMjg2My19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoyMi4xMjk3NDUyNzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTU1Mjk4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBNZW1vcnkgQWNjZXNzIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGEgc2hpZnQgaW4gaG93IG1lbW9yeSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21lbWAuIEl0IHNlZW1zIHRoYXQgdGhlIGxlZ2FjeSBmdW5jdGlvbnMgYF9fbWVtX29wZW5gIGFuZCBgbWVtX3JlbGVhc2VgIOKAkyB3aGljaCB1bHRpbWF0ZWx5IGludm9sdmUgYG1tZHJvcChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSlgIOKAkyBhcmUgc3RpbGwgdXNlZCBieSBgZW52aXJvbl9vcGVuYCwgYGF1eHZfb3BlbmAsIGFuZCBgcHJvY19waWRfYXR0cl9vcGVuYC4gSG93ZXZlciwgYHByb2NfbWVtX29wZXJhdGlvbnNgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXdlciBgbWVtX29wZW5gIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCwgd2hpY2ggbWFuYWdlcyBhIGBzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXZgLiBUaGlzIGBwcml2YCBpcyB0aGVuIHVucGFja2VkIGluIGZ1bmN0aW9ucyBsaWtlIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCBhbmQgYG1lbV9yd2AgYXMgYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYC5cblxuKipMU00gSG9vayBhbmQgUmVhY2hhYmlsaXR5IEFuYWx5c2lzKipcblxuQWhhLCBhbmQgaGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZzogYSBuZXcgTFNNIGhvb2ssIGBtZW1fZm9sbF9mb3JjZWAsIGhhcyBwb3BwZWQgdXAgaW4gYm90aCBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogY29kZT8gQW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBPcGVuaW5nIGFuZCBpbnRlcmFjdGluZyB3aXRoIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtYCDigJMgcmVhZGluZyBmcm9tIGFuZCB3cml0aW5nIHRvIGl0IOKAkyBpcyBhIGZ1bmRhbWVudGFsIGFuZCB3ZWxsLWVzdGFibGlzaGVkIHBhcnQgb2YgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gV2UncmUgdGFsa2luZyBhYm91dCBwcm9jZnMsIFZGUywgYW5kIHRoZSBzZWN1cml0eS9zZWxpbnV4IGZyYW1ld29ya3MgaGVyZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGluIHN1Y2ggY3J1Y2lhbCBzdWJzeXN0ZW1zLCBteSBpbnN0aW5jdCBzY3JlYW1zIHRoYXQgdGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZy5cblxuKipDb25maWd1cmF0aW9uIENoZWNrKipcblxuTm93LCBiZWZvcmUganVtcGluZyBpbiwgbGV0J3MganVzdCBjb25maXJtIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Ugc3Vic3lzdGVtcyBhcmUgZW5hYmxlZCBpbiBhIHR5cGljYWwga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBjaGVjazpcblxuKiAgIGBmcy9wcm9jL2Jhc2UuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1BST0NfRlNgIGlzIGVuYWJsZWQuXG4qICAgYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19TRUNVUklUWWAgaXMgZW5hYmxlZC5cbiogICBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAgaXMgZW5hYmxlZC5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYFBST0NfRlNgLCBgU0VDVVJJVFlgLCBhbmQgYFNFQ1VSSVRZX1NFTElOVVhgIHRvIGNvbmZpcm0gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoyNi4wODUwNDgyMjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQzOTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDVVJJVFlfU0VMSU5VWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMy1cXHRib29sIFxcXCJTRUxpbnV4IFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTEtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjEyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTRUxpbnV4IGJvb3QgcGFyYW1ldGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI1LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlNFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlNFTGludXggQVZDIFN0YXRpc3RpY3NcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDgtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQ5OmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXFx0aW50IFxcXCJTRUxpbnV4IHNpZHRhYiBoYXNodGFibGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02MC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYyLVxcdGludCBcXFwiU0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NzI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03My1cXHRpbnQgXFxcIlNFTGludXggYXZjIGhhc2h0YWJsZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTgyLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo4Mzpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTRUxpbnV4IGtlcm5lbCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MjYuMjQ0NDk0MzI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTM0NTM5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTRUxpbnV4IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBTRUNVUklUWV9TRUxJTlVYYC4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgc2VjdXJpdHkvc2VsaW51eGAgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlaXIgZGVzY3JpcHRpb25zLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRoZXJlIGFuZCBleGFtaW5lIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgIGRpcmVjdGx5LiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25kaXRpb25zIG9yIG90aGVyIGZlYXR1cmVzIG11c3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYFNFQ1VSSVRZX1NFTElOVVhgIHRvIGJlIGF2YWlsYWJsZSBhbmQgaG93IGl0IG1pZ2h0IGltcGFjdCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgc3lzdGVtLiBJIGFudGljaXBhdGUgbmVlZGluZyB0byB1bmRlcnN0YW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzZWN1cml0eSBmZWF0dXJlcyBvciBvdGhlciBrZXJuZWwgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoyOC44Mzc5NTA0MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic2VjdXJpdHkvc2VsaW51eC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiU0VMaW51eCBTdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9ORVRXT1JLIFxcdTAwMjZcXHUwMDI2IEFVRElUIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgTkVUV09SS19TRUNNQVJLXFxuICAgNjpcXHRcXHRkZWZhdWx0IG5cXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBzZWxlY3RzIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4IChTRUxpbnV4KS5cXG4gICA5OlxcdFxcdCAgWW91IHdpbGwgYWxzbyBuZWVkIGEgcG9saWN5IGNvbmZpZ3VyYXRpb24gYW5kIGEgbGFiZWxlZCBmaWxlc3lzdGVtLlxcbiAgMTA6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cXG4gIDEzOlxcdFxcdGJvb2wgXFxcIlNFTGludXggYm9vdCBwYXJhbWV0ZXJcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcXG4gIDE1OlxcdFxcdGRlZmF1bHQgblxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIGEga2VybmVsIHBhcmFtZXRlciAnc2VsaW51eCcsIHdoaWNoIGFsbG93cyBTRUxpbnV4XFxuICAxODpcXHRcXHQgIHRvIGJlIGRpc2FibGVkIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgU0VMaW51eFxcbiAgMTk6XFx0XFx0ICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHNlbGludXg9MCBvbiB0aGUga2VybmVsXFxuICAyMDpcXHRcXHQgIGNvbW1hbmQgbGluZS4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGFsbG93IGEgc2luZ2xlXFxuICAyMTpcXHRcXHQgIGtlcm5lbCBpbWFnZSB0byBiZSBkaXN0cmlidXRlZCB3aXRoIFNFTGludXggYnVpbHQgaW4sIGJ1dCBub3RcXG4gIDIyOlxcdFxcdCAgbmVjZXNzYXJpbHkgZW5hYmxlZC5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMjU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjI4LjgzODAxMzU1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA0MDEyMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIFByb2NmcyBhbmQgTWVtb3J5IE92ZXJyaWRlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgcHJvYyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGBwcm9jX21lbV9mb3JjZV9vdmVycmlkZWAgb3B0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGZzL3Byb2MvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBwcm9jZnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IGBwcm9jX21lbV9mb3JjZV9vdmVycmlkZWAgYmVoYXZlcywgb3IgaWYgaXQncyBldmVuIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDczLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzozMC44NDIwMjc3OTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTYxMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBST0NfTUVNX0ZPUkNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcXG5mcy9wcm9jL2Jhc2UuYzoxMjI6XFx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTLFxcbmZzL3Byb2MvYmFzZS5jOjEyMzpcXHRQUk9DX01FTV9GT1JDRV9QVFJBQ0UsXFxuZnMvcHJvYy9iYXNlLmM6MTI0OlxcdFBST0NfTUVNX0ZPUkNFX05FVkVSXFxuZnMvcHJvYy9iYXNlLmMtMTI1LX07XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cXG5mcy9wcm9jL2Jhc2UuYzoxMjg6XFx0SVNfRU5BQkxFRChDT05GSUdfUFJPQ19NRU1fTk9fRk9SQ0UpID8gUFJPQ19NRU1fRk9SQ0VfTkVWRVIgOlxcbmZzL3Byb2MvYmFzZS5jOjEyOTpcXHRJU19FTkFCTEVEKENPTkZJR19QUk9DX01FTV9GT1JDRV9QVFJBQ0UpID8gUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIDpcXG5mcy9wcm9jL2Jhc2UuYzoxMzA6XFx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTO1xcbmZzL3Byb2MvYmFzZS5jLTEzMS1cXG5mcy9wcm9jL2Jhc2UuYz0xMzI9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBwcm9jX21lbV9mb3JjZV90YWJsZVtdIF9faW5pdGNvbnN0ID0ge1xcbmZzL3Byb2MvYmFzZS5jOjEzMzpcXHR7IFxcXCJhbHdheXNcXFwiLCBQUk9DX01FTV9GT1JDRV9BTFdBWVMgfSxcXG5mcy9wcm9jL2Jhc2UuYzoxMzQ6XFx0eyBcXFwicHRyYWNlXFxcIiwgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIH0sXFxuZnMvcHJvYy9iYXNlLmM6MTM1OlxcdHsgXFxcIm5ldmVyXFxcIiwgUFJPQ19NRU1fRk9SQ0VfTkVWRVIgfSxcXG5mcy9wcm9jL2Jhc2UuYy0xMzYtXFx0eyB9XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz04Nzc9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04ODMtXFx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xcbmZzL3Byb2MvYmFzZS5jOjg4NDpcXHRjYXNlIFBST0NfTUVNX0ZPUkNFX05FVkVSOlxcbmZzL3Byb2MvYmFzZS5jLTg4NS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuZnMvcHJvYy9iYXNlLmM6ODg2OlxcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFOlxcbmZzL3Byb2MvYmFzZS5jLTg4Ny1cXHRcXHR0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlX2lub2RlKGZpbGUpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MzAuODg3NTkzNzExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzUyMDIyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgZm9yIFBST0NfRlMgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBQUk9DX0ZTIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gVGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIHBsYWNlIHRvIGNoZWNrIHRoYXQgaXMgZ29pbmcgdG8gYmUgdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgb3IgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIHNldCB0byBlbmFibGUgb3IgZGlzYWJsZSBpdC4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwIGluIHRyb3VibGVzaG9vdGluZyBvciBtb2RpZnlpbmcgYW55IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gR290dGEgc3RhcnQgd2l0aCB0aGUgc291cmNlIG9mIHRydXRoLCB0aGUgS2NvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzozMy4zNjI3OTkxNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzI4MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUk9DX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9wcm9jL0tjb25maWc6Mjpjb25maWcgUFJPQ19GU1xcbmZzL3Byb2MvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuZnMvcHJvYy9LY29uZmlnLTMxLVxcbmZzL3Byb2MvS2NvbmZpZzozMjpjb25maWcgUFJPQ19LQ09SRVxcbmZzL3Byb2MvS2NvbmZpZy0zMy1cXHRib29sIFxcXCIvcHJvYy9rY29yZSBzdXBwb3J0XFxcIiBpZiAhQVJNXFxuLS1cXG5mcy9wcm9jL0tjb25maWctNDAtXFxuZnMvcHJvYy9LY29uZmlnOjQxOmNvbmZpZyBQUk9DX1ZNQ09SRVxcbmZzL3Byb2MvS2NvbmZpZy00Mi1cXHRib29sIFxcXCIvcHJvYy92bWNvcmUgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy00Ny1cXG5mcy9wcm9jL0tjb25maWc6NDg6Y29uZmlnIFBST0NfVk1DT1JFX0RFVklDRV9EVU1QXFxuZnMvcHJvYy9LY29uZmlnLTQ5LVxcdGJvb2wgXFxcIkRldmljZSBIYXJkd2FyZS9GaXJtd2FyZSBMb2cgQ29sbGVjdGlvblxcXCJcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZz02ND1jb25maWcgTkVFRF9QUk9DX1ZNQ09SRV9ERVZJQ0VfUkFNXFxuLS1cXG5mcy9wcm9jL0tjb25maWctNjYtXFxuZnMvcHJvYy9LY29uZmlnOjY3OmNvbmZpZyBQUk9DX1ZNQ09SRV9ERVZJQ0VfUkFNXFxuZnMvcHJvYy9LY29uZmlnLTY4LVxcdGRlZl9ib29sIHlcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy04Mi1cXG5mcy9wcm9jL0tjb25maWc6ODM6Y29uZmlnIFBST0NfU1lTQ1RMXFxuZnMvcHJvYy9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIlN5c2N0bCBzdXBwb3J0ICgvcHJvYy9zeXMpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy0xMDEtXFxuZnMvcHJvYy9LY29uZmlnOjEwMjpjb25maWcgUFJPQ19QQUdFX01PTklUT1JcXG5mcy9wcm9jL0tjb25maWctMTAzLSBcXHRkZWZhdWx0IHlcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy0xMTEtXFxuZnMvcHJvYy9LY29uZmlnOjExMjpjb25maWcgUFJPQ19DSElMRFJFTlxcbmZzL3Byb2MvS2NvbmZpZy0xMTMtXFx0Ym9vbCBcXFwiSW5jbHVkZSAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS90YXNrL1xcdTAwM2N0aWRcXHUwMDNlL2NoaWxkcmVuIGZpbGVcXFwiXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTIyLVxcbmZzL3Byb2MvS2NvbmZpZzoxMjM6Y29uZmlnIFBST0NfUElEX0FSQ0hfU1RBVFVTXFxuZnMvcHJvYy9LY29uZmlnLTEyNC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTI2LVxcbmZzL3Byb2MvS2NvbmZpZzoxMjc6Y29uZmlnIFBST0NfQ1BVX1JFU0NUUkxcXG5mcy9wcm9jL0tjb25maWctMTI4LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MzMuNDA3MTMzNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2OTE2NzY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNlY3VyaXR5IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZmluYWxpemUgdGhpcywgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzZWN1cml0eSBhbmQgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGVzLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1NFQ1VSSVRZYCBzZXR0aW5nLCBhbmQgaXRzIHZhcmlvdXMgc3ViLW9wdGlvbnMuIENhbid0IGp1c3QgYXNzdW1lIGl0J3Mgc2V0IHJpZ2h0LiBNeSBndXQgdGVsbHMgbWUgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBtaWdodCB0b3VjaCBvbiBzb21lIHNlY3VyaXR5IG1vZHVsZXMsIHNvIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0J3MgZWFzeSB0byBtaXNzIHNvbWV0aGluZyB3aGVuIGp1Z2dsaW5nIHRoZXNlIGRldGFpbHMsIGFuZCBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBpbiBLY29uZmlnIGNhbiBjYXRjaCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCB0aGUgc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB0aGUgc3RhZ2Ugd2hlcmUgdGhvcm91Z2huZXNzIHBheXMgb2ZmLiBJJ2QgaGF0ZSB0byBzdWJtaXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBzdWJ0bGUgdnVsbmVyYWJpbGl0eSBkdWUgdG8gYSBzaW1wbGUgb3ZlcnNpZ2h0IGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU1NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjM1LjM3NjMwMzYyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMjIyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNFQ1VSSVRZXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy03Mi1cXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxcbnNlY3VyaXR5L0tjb25maWctNzQtXFx0Ym9vbCBcXFwiRW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjM1LjQyNDY0ODcyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTgwNTk2NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9jdXMgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgYEZvY3VzU3ltYm9sc2AuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgdG91Y2hlZC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGBtZW1fcndgIGFuZCB0aGUgYWRkaXRpb24gb2YgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAsIGBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZWAsIGFuZCBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIHRoZWlyIHNjb3BlLiBBcmUgdGhlc2UgZ2VuZXJhbC1wdXJwb3NlIGNvbXBvbmVudHMgb3Igc29tZXRoaW5nIG1vcmUgdGFyZ2V0ZWQ/IEdvb2QsIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGFsbCB0aWdodGx5IGNvdXBsZWQgd2l0aCBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21lbWAgaW50ZXJhY3Rpb24gYW5kIHRoZSBTRUxpbnV4IGhvb2tzIGRlYWxpbmcgd2l0aCBGT0xMX0ZPUkNFIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgYSB2ZXJ5IG5hcnJvdyBzZXQgb2YgY2hhbmdlcywgbm90IHRvdWNoaW5nIHRoZSBjb3JlIGFsbG9jYXRvcnMsIHRyYXAgaGFuZGxlcnMsIG9yIHN5c2NhbGwgZW50cnlwb2ludHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdvdWxkIGV4cGVjdC4gVGhpcyBzdWdnZXN0cyB0aGlzIGlzIGZvY3VzZWQgd29yay5cblxuTm93LCBsZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJ2xsIGZvY3VzIG9uIGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgLiBGcm9tIGBmcy9wcm9jL2Jhc2UuY2AgSSBjYW4gc2VlIHRoYXQgYG1lbV9yd2AgaXMgY2FsbGVkIGJ5IGJvdGguIEhtbSwgSSBrbm93IHRoYXQgYG1lbV9yd2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGF0IGNvbmZpcm1zIG15IGFzc3VtcHRpb24uIExldCdzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aGUgZnMvcHJvYy9iYXNlLmMgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDkwMCB0byA5ODAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODQxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjM4LjYwNTI0ODkyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy9iYXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAwOlxcdFxcdHJldHVybiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShmaWxlLVxcdTAwM2VmX2NyZWQsIHByaXYtXFx1MDAzZW9wZW5lZF9ieV9vd25lcikgPT0gMDtcXG4gOTAxOlxcdH1cXG4gOTAyOlxcdFxcbiA5MDM6XFx0c3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiA5MDQ6XFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcXG4gOTA1OlxcdHtcXG4gOTA2OlxcdFxcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gOTA3OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cXHUwMDNlbW07XFxuIDkwODpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvcztcXG4gOTA5OlxcdFxcdHNzaXplX3QgY29waWVkO1xcbiA5MTA6XFx0XFx0Y2hhciAqcGFnZTtcXG4gOTExOlxcdFxcdHVuc2lnbmVkIGludCBmbGFncztcXG4gOTEyOlxcdFxcbiA5MTM6XFx0XFx0aWYgKCFtbSlcXG4gOTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MTU6XFx0XFxuIDkxNjpcXHRcXHRwYWdlID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbiA5MTc6XFx0XFx0aWYgKCFwYWdlKVxcbiA5MTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDkxOTpcXHRcXG4gOTIwOlxcdFxcdGNvcGllZCA9IDA7XFxuIDkyMTpcXHRcXHRpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSlcXG4gOTIyOlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0ZmxhZ3MgPSB3cml0ZSA/IEZPTExfV1JJVEUgOiAwO1xcbiA5MjU6XFx0XFx0aWYgKHByb2NfbWVtX2ZvbGxfZm9yY2UoZmlsZSwgbW0pKVxcbiA5MjY6XFx0XFx0XFx0ZmxhZ3MgfD0gRk9MTF9GT1JDRTtcXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwM2UgMCkge1xcbiA5Mjk6XFx0XFx0XFx0c2l6ZV90IHRoaXNfbGVuID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTtcXG4gOTMwOlxcdFxcbiA5MzE6XFx0XFx0XFx0aWYgKHdyaXRlIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV91c2VyKHBhZ2UsIGJ1ZiwgdGhpc19sZW4pKSB7XFxuIDkzMjpcXHRcXHRcXHRcXHRjb3BpZWQgPSAtRUZBVUxUO1xcbiA5MzM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDkzNDpcXHRcXHRcXHR9XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdFxcdHRoaXNfbGVuID0gYWNjZXNzX3JlbW90ZV92bShtbSwgYWRkciwgcGFnZSwgdGhpc19sZW4sIGZsYWdzKTtcXG4gOTM3OlxcdFxcdFxcdGlmICghdGhpc19sZW4pIHtcXG4gOTM4OlxcdFxcdFxcdFxcdGlmICghY29waWVkKVxcbiA5Mzk6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVJTztcXG4gOTQwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5NDE6XFx0XFx0XFx0fVxcbiA5NDI6XFx0XFxuIDk0MzpcXHRcXHRcXHRpZiAoIXdyaXRlIFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9fdXNlcihidWYsIHBhZ2UsIHRoaXNfbGVuKSkge1xcbiA5NDQ6XFx0XFx0XFx0XFx0Y29waWVkID0gLUVGQVVMVDtcXG4gOTQ1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5NDY6XFx0XFx0XFx0fVxcbiA5NDc6XFx0XFxuIDk0ODpcXHRcXHRcXHRidWYgKz0gdGhpc19sZW47XFxuIDk0OTpcXHRcXHRcXHRhZGRyICs9IHRoaXNfbGVuO1xcbiA5NTA6XFx0XFx0XFx0Y29waWVkICs9IHRoaXNfbGVuO1xcbiA5NTE6XFx0XFx0XFx0Y291bnQgLT0gdGhpc19sZW47XFxuIDk1MjpcXHRcXHR9XFxuIDk1MzpcXHRcXHQqcHBvcyA9IGFkZHI7XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdG1tcHV0KG1tKTtcXG4gOTU2OlxcdGZyZWU6XFxuIDk1NzpcXHRcXHRrZnJlZShwYWdlKTtcXG4gOTU4OlxcdFxcdHJldHVybiBjb3BpZWQ7XFxuIDk1OTpcXHR9XFxuIDk2MDpcXHRcXG4gOTYxOlxcdHN0YXRpYyBzc2l6ZV90IG1lbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiA5NjI6XFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIDk2MzpcXHR7XFxuIDk2NDpcXHRcXHRyZXR1cm4gbWVtX3J3KGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MsIDApO1xcbiA5NjU6XFx0fVxcbiA5NjY6XFx0XFxuIDk2NzpcXHRzdGF0aWMgc3NpemVfdCBtZW1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuIDk2ODpcXHRcXHRcXHRcXHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIDk2OTpcXHR7XFxuIDk3MDpcXHRcXHRyZXR1cm4gbWVtX3J3KGZpbGUsIChjaGFyIF9fdXNlciopYnVmLCBjb3VudCwgcHBvcywgMSk7XFxuIDk3MTpcXHR9XFxuIDk3MjpcXHRcXG4gOTczOlxcdGxvZmZfdCBtZW1fbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxcbiA5NzQ6XFx0e1xcbiA5NzU6XFx0XFx0c3dpdGNoIChvcmlnKSB7XFxuIDk3NjpcXHRcXHRjYXNlIDA6XFxuIDk3NzpcXHRcXHRcXHRmaWxlLVxcdTAwM2VmX3BvcyA9IG9mZnNldDtcXG4gOTc4OlxcdFxcdFxcdGJyZWFrO1xcbiA5Nzk6XFx0XFx0Y2FzZSAxOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzozOC42MDU0MjE2MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwMjMwNjExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBSZWFzb25pbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gdmVyaWZ5aW5nIHRoZSByZWxldmFudCBzeW1ib2xzLiBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZXNlIGBGb2N1c1N5bWJvbHNgIOKAkyBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGBtZW1fcndgLCB0aGUgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaG91c2VrZWVwaW5nLCBhbmQgdGhlIFNFTGludXggdmFyaWFudCwgYHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfbWVtX2ZvbGxfZm9yY2VgLiBUaGF0IGxvb2tzIHJpZ2h0LiBJIGFsc28gZG91YmxlLWNoZWNrZWQgdGhlIHJlcXVpcmVkIGBFbmFibGVDb25maWdzYDogYFBST0NfRlNgLCBgU0VDVVJJVFlgLCBhbmQgYFNFQ1VSSVRZX1NFTElOVVhgLiBHb29kLCB0aG9zZSBhcmUgYWxsIGluIHBsYWNlLlxuXG5Ob3cgZm9yIHRoZSBjb3JlIHJlYXNvbmluZy4gVGhlIHJlYWNoYWJpbGl0eSBhbmFseXNpcyB0ZWxscyBtZSB0aGF0IGEgdXNlci1zcGFjZSBwcm9ncmFtIGNhbiBpbmRlZWQgb3BlbiwgcmVhZCwgYW5kIHdyaXRlIHRvIGAvcHJvYy8kcGlkL21lbWAgaW4gUUVNVS4gQ3J1Y2lhbGx5LCBJIHNlZSB0aGF0IHRoZSBTRUxpbnV4IGhvb2tzICphcmUqIGV4ZWN1dGVkIHdoZW4gYG1lbV9mb2xsX2ZvcmNlYCBpcyB0cmlnZ2VyZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSBuZWNlc3NhcnkgZXhlY3V0YWJsZSBjb2RlIGluIGBmcy9wcm9jYCBhbmQgdGhlIGBzZWN1cml0eWAgc3Vic3lzdGVtLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIHdhbnRlZCB0byBjb25maXJtLlxuXG5UaGUgY3JpdGljYWwgaW5zaWdodCBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rLCBgbWVtX2ZvbGxfZm9yY2VgLCBzcGVjaWZpY2FsbHkgaW5jbHVkaW5nIGFuIFNFTGludXggaW1wbGVtZW50YXRpb24sIGFuZCBpdCBmdW5kYW1lbnRhbGx5IHVwZGF0ZXMgdGhlIGhhbmRsaW5nIG9mIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtYC4gIEl0J3Mgd3JhcHBpbmcgbWV0YWRhdGEgaW4gdGhpcyBgc3RydWN0IG1lbV9wcml2YXRlYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCBmdXp6aW5nIGlzIGp1c3RpZmllZC4gV2UgbmVlZCB0byB2YWxpZGF0ZSBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zLCBlbnN1cmUgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYG1lbV9wcml2YXRlYCBpcyByb2J1c3QsIGFuZCBjcml0aWNhbGx5LCBlbmZvcmNlIHRoZSBzZW1hbnRpY3Mgb2YgYEZPTExfRk9SQ0VgLiBUaGlzIGlzIGEgcmljaCB0YXJnZXQgYW5kIGhpZ2hseSB2YWx1YWJsZS4gVGltZSB0byB3cml0ZSB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4NCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzo0Mi44MDc3MzA2MTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTE4MzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fb3BlblwiLFxuICAgIFwicHJvY19tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwibWVtX3J3XCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIixcbiAgICBcInNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJzZWxpbnV4X21lbV9mb2xsX2ZvcmNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCIsXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9vcGVuXCIsXG4gICAgXCJwcm9jX21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJtZW1fcndcIixcbiAgICBcIm1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZVwiLFxuICAgIFwic2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2VcIixcbiAgICBcInNlbGludXhfbWVtX2ZvbGxfZm9yY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9tZW0gb3BlcmF0aW9ucyAobWVtX29wZW4sIG1lbV9ydywgcHJvY19tZW1fZm9sbF9mb3JjZSwgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKSBieSBpbnRyb2R1Y2luZyBzdHJ1Y3QgbWVtX3ByaXZhdGUgdG8gdHJhY2sgb3BlbmVyIE1NIG93bmVyc2hpcCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayAoc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfbWVtX2ZvbGxfZm9yY2UpIHRvIGdvdmVybiBGT0xMX0ZPUkNFIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzo0Mi44ODg5MjE1NzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTM3NDcwOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6NDIuODg5NDU5MzIyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ1MzY5MjgxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2sgYG1lbV9mb2xsX2ZvcmNlYCBhbmQgcmVwbGFjZXMgdGhlIGRpcmVjdCBgbW1fc3RydWN0YCBwb2ludGVyIGluIGBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGFgIG9mIGAvcHJvYy8kcGlkL21lbWAgd2l0aCBhIHNtYWxsIGNvbnRhaW5lciBgc3RydWN0IG1lbV9wcml2YXRlYCBjb250YWluaW5nIGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgLlxcblxcbi0gSW4gYG1lbV9vcGVuKClgLCB0aGUgaGVhcCBhbGxvY2F0aW9uIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYCBoYXMgYWxsIGl0cyBmaWVsZHMgKGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIGFzc2lnbmVkIHRvIGBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGFgLlxcbi0gSW4gYHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoKWAsIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBhdl9kZWNpc2lvbiBhdmRgIGlzIHBhc3NlZCBhcyBhbiBvdXRwdXQgYnVmZmVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpYCwgYW5kIGl0cyBmaWVsZHMgYXJlIG5vdCByZWFkIGJlZm9yZSBpbml0aWFsaXphdGlvbi5cXG4tIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKHN1Y2ggYXMgbGlmZXRpbWUvZnJlZWluZyBvZiBgcHJpdmAgb3IgYG1tYCkgYXJlIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBwcm9wZXJseSBjb3ZlcmVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZDUxYzNiNDQ1MDk3ZTkwOWEyZDczNTA1NTA3NDg4ODU1NTdmODAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMToyMzowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC04NDgsMTUgKzg0OCwzNSBAQCBzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuK3N0cnVjdCBtZW1fcHJpdmF0ZSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdC8qXG4rXHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxuK1x0ICogdGhlIHNhbWUgTU0gKGludHJvc3BlY3Rpb24pP1xuK1x0ICovXG4rXHRib29sIG9wZW5lZF9ieV9vd25lcjtcbit9O1xuK1xuIHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xuK1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4rXHRwcml2LVx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcbitcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVx1MDAzZW1tKSlcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbW0gPyBQVFJfRVJSKHByaXYtXHUwMDNlbW0pIDogLUVTUkNIO1xuK1x0cHJpdi1cdTAwM2VvcGVuZWRfYnlfb3duZXIgPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW07XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XG4gXG5AQCAtODcxLDE2ICs4OTEsMjAgQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdFx0XHRcdFJFQURfT05DRSh0YXNrLVx1MDAzZXBhcmVudCkgPT0gY3VycmVudDtcbiBcdFx0XHRwdXRfdGFza19zdHJ1Y3QodGFzayk7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIHB0cmFjZV9hY3RpdmU7XG4rXHRcdGlmICghcHRyYWNlX2FjdGl2ZSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdGJyZWFrO1xuIFx0fVxuK1x0cmV0dXJuIHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGZpbGUtXHUwMDNlZl9jcmVkLCBwcml2LVx1MDAzZW9wZW5lZF9ieV9vd25lcikgPT0gMDtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpXG4ge1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVx1MDAzZW1tO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKnBwb3M7XG4gXHRzc2l6ZV90IGNvcGllZDtcbiBcdGNoYXIgKnBhZ2U7XG5AQCAtOTcwLDEyICs5OTQsMjEgQEAgc3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdG1tZHJvcChwcml2LVx1MDAzZW1tKTtcbitcdGtmcmVlKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gbWVtX2xzZWVrLFxuIFx0LnJlYWRcdFx0PSBtZW1fcmVhZCxcbiBcdC53cml0ZVx0XHQ9IG1lbV93cml0ZSxcbiBcdC5vcGVuXHRcdD0gbWVtX29wZW4sXG4tXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbitcdC5yZWxlYXNlXHQ9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSxcbiBcdC5mb3BfZmxhZ3NcdD0gRk9QX1VOU0lHTkVEX09GRlNFVCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjEyZjg0YTFlNmZhYjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0zNiw2ICszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX2FjY2Vzc19jaGVjaywgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcbiBcdCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbitMU01fSE9PSyhpbnQsIDAsIG1lbV9mb2xsX2ZvcmNlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBnZXQsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiBMU01fSE9PSyhpbnQsIDAsIGNhcHNldCwgc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmU4YmMyZTY0NDI0MWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTMzOCw2ICszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpO1xuK2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpO1xuIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0ICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5AQCAtNjc2LDYgKzY3NywxMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsXG4rXHRcdFx0XHRcdCAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uMmNkZTFlZmRiN2E2MiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01OTUsNiArNTk1LDMxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpO1xuIH1cbiBcbisvKipcbisgKiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSgpIC0gQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkXG4rICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIHVzaW5nIHdoaWNoIC9wcm9jLyRwaWQvbWVtIHdhcyBvcGVuZWRcbisgKiBAb3BlbmVkX2J5X293bmVyOiB3aGV0aGVyIGNoZWNrcyBvbiBvcGVuKCkgd2VyZSBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXJcbisgKiAgICAgICAgICAgICAgICAgICBoYXMgdGhlIHNhbWUgTU0gYXMgdGhlIHRhcmdldFxuKyAqXG4rICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhY2Nlc3NpbmcgcHJvY2VzcyBtZW1vcnkgdGhyb3VnaFxuKyAqIC9wcm9jLyRwaWQvbWVtLiBvcGVuZWRfYnlfb3duZXIgc2lnbmFscyB3aGV0aGVyIHRoZSBvcGVuZXIncyBNTSB3YXMgdGhlIHNhbWVcbisgKiBhcyB0aGUgdGFyZ2V0IE1NLCBtZWFuaW5nIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vayB3YXNcbisgKiBieXBhc3NlZCBvbiBvcGVuKCkuXG4rICogKEN1cnJlbnQgY3VycmVudC1cdTAwM2VtbSBkb2VzIG5vdCBtYXR0ZXIgZm9yIHRoaXM7IGZvciBleGFtcGxlLCBpZiB3cml0ZSgpIGlzXG4rICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGhcbisgKiBvcGVuKFwiL3Byb2Mvc2VsZi9tZW1cIiksIEBvcGVuZWRfYnlfb3duZXIgaXMgc3RpbGwgdHJ1ZS4pXG4rICpcbisgKiBOb3RlIHRoYXQgdGhpcyBob29rIGlzIG9ubHkgZGVzaWduZWQgdG8gYmUgdXNlZnVsIGluIHRoZSBvcGVuZWRfYnlfb3duZXJcbisgKiBjYXNlLCB3aGVyZSB0aGUgc3ViamVjdCBjcmVkZW50aWFscyBlZmZlY3RpdmVseSBhbHNvIGRlc2NyaWJlIHRoZSBvYmplY3QuXG4rICpcbisgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4rICovXG4raW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LFxuK1x0XHRcdFx0XHQgICAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4re1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2sobWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QsIG9wZW5lZF9ieV9vd25lcik7XG4rfVxuK1xuIC8qKlxuICAqIHNlY3VyaXR5X2NhcGdldCgpIC0gR2V0IHRoZSBjYXBhYmlsaXR5IHNldHMgZm9yIGEgcHJvY2Vzc1xuICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxOGRkMjhiMmJiMTNkLi40NWVhZDE4YzhmMDFhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yMTU3LDYgKzIxNTcsMzYgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0XHRcdCAgICBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIE5VTEwpO1xuIH1cbiBcbisvKipcbisgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0VcbisgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZFxuKyAqIEBvcGVuZWRfYnlfb3duZXI6IHdoZXRoZXIgY2hlY2tzIG9uIG9wZW4oKSB3ZXJlIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lclxuKyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0XG4rICpcbisgKiBEZWNpZGUgd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBub24tcmVhZGFibGUgVk1BcyBhbmQgd3JpdGVcbisgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXG4rICogVGhlIEBvcGVuZWRfYnlfb3duZXIgY2FzZSBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGhcbisgKiBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5IGhhcHBlbnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG9cbisgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW5cbisgKiBtYXlfYWNjZXNzX21tKCkgYW5kIF9fcHRyYWNlX21heV9hY2Nlc3MoKS5cbisgKlxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxuKyAqXG4rICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2Vzbid0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJ3RcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cbisgKi9cbitzdGF0aWMgaW50IHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKVxuK3tcbitcdHN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7XG4rXHR1MzIgc2lkO1xuK1xuK1x0aWYgKCFvcGVuZWRfYnlfb3duZXIpXG4rXHRcdHJldHVybiAwO1xuK1x0c2lkID0gY3JlZF9zaWQoc3ViamVjdCk7XG4rXG4rXHRyZXR1cm4gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXHUwMDI2YXZkKTtcbit9XG4rXG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICs3NTg4LDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX2FjY2Vzc19jaGVjaywgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKSxcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxuK1x0TFNNX0hPT0tfSU5JVChtZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSksXG4gXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjQyLjg4OTQ2MDM3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDk3ODI2MDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBLTVNBTiBmb3IgYSBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0ICpsb29rcyogcHJldHR5IGNsZWFuLCBidXQgd2UgYWx3YXlzIGhhdmUgdG8gYmUgbWV0aWN1bG91cy5cblxuSGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGUgY3JpdGljYWwgcGFydHM6XG5cbiogICAqKmBmcy9wcm9jL2Jhc2UuY2AqKjogV2UncmUgYWRkaW5nIGEgbmV3IHN0cnVjdHVyZSwgYHN0cnVjdCBtZW1fcHJpdmF0ZWAsIHdoaWNoIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHBheSBhdHRlbnRpb24uIEl0IGNvbnRhaW5zIGEgYG1tX3N0cnVjdCAqbW1gIGFuZCBhIGBib29sIG9wZW5lZF9ieV9vd25lcmAuIEluIGBtZW1fb3BlbmAsIHRoZXkgYWxsb2NhdGUgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBib3RoIG9mIHRob3NlIGZpZWxkcy4gVGhhdCdzIGEgZ29vZCBzaWduIOKAkyB3ZSdyZSBub3Qgc2VlaW5nIGFueSBpbW1lZGlhdGUsIG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXQgdGhlIGFsbG9jYXRpb24gc3RhZ2UsIGFuZCBubyBvYnZpb3VzIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBlcnJvciBwYXRocywgYW5kIHNldHMgdGhlIGBwcml2YXRlX2RhdGFgIGZpZWxkIG9uIHRoZSBmaWxlIHBvaW50ZXIuIFRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBmdW5jdGlvbiBhbHNvIGxvb2tzIHNvbGlkIHdpdGggdGhlIGBtbWRyb3BgIGFuZCBga2ZyZWVgLiBUaGUgd2F5IGBwcml2YXRlX2RhdGFgIGlzIGJlaW5nIHVzZWQgaW4gYHByb2NfbWVtX2ZvbGxfZm9yY2VgIGFuZCBgbWVtX3J3YCBpcyBhbHNvIHByZXR0eSBjbGVhci5cbiogICAqKkxTTSBob29rcyBhbmQgU0VMaW51eCoqOiBUaGUgYWRkaXRpb24gb2YgdGhlIGBtZW1fZm9sbF9mb3JjZWAgaG9vayBpcyBzdHJhaWdodGZvcndhcmQsIHdoaWNoIGlzIGFsc28gaGVscGZ1bC4gVGhlIFNFTGludXggaW1wbGVtZW50YXRpb24sIGluIHBhcnRpY3VsYXIgYHNlbGludXhfbWVtX2ZvbGxfZm9yY2VgLCB1c2VzIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkO2AgbG9jYWxseSwgd2hpY2ggc3VnZ2VzdHMgdGhhdCB0aGUgbG9jYWwgc3RydWN0dXJlIGlzIHByb3Blcmx5IGhhbmRsZWQgZm9yIG1lbW9yeSBzYWZldHksIGFuZCB0aGVuIHBhc3NlcyBhbiBvdXRwdXQgcGFyYW1ldGVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAgd2hpY2ggc2hvdWxkIGFsc28gYmUgb2theS5cblxuQmFzZWQgb24gdGhpcyBpbW1lZGlhdGUgcGFzcywgSSdtICpub3QqIHNlZWluZyBhbnkgYmxhdGFudCByZWQgZmxhZ3MuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAxMDAlIHN1cmUuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgb25seSB1c2VkIGluIGEgY29ycmVjdCB3YXksIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gc2VhcmNoIHRoZSBlbnRpcmUga2VybmVsIHRyZWUgZm9yIG90aGVyIGNhbGxzIHRvIGBwcm9jX21lbV9vcGVyYXRpb25zYCBvciBvdGhlciBmaWxlcyB0aGF0IG1pZ2h0IGJlIG9wZW5pbmcgYC9wcm9jLyRwaWQvbWVtYCBvciBvdGhlcndpc2UgdXNlIHRoZSBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLiBJJ2xsIGxvb2sgZm9yIGBwcm9jX21lbV9vcGVyYXRpb25zYCwgYF9fbWVtX29wZW5gLCBgbWVtX3J3YCwgb3IgYW55IG90aGVyIHJlbGF0ZWQgcHJvYyBtZW0gb3BlcmF0aW9ucy4gSWYgdGhlcmUgYXJlIG90aGVyIHVzYWdlcyBvZiBgL3Byb2MvJHBpZC9tZW1gLCBJIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHRoZSBtZW1vcnkgYWNjZXNzIGlzIGNvcnJlY3QgYW5kIHRoYXQgdGhlIHN0cnVjdHVyZSdzIGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50LiBBZnRlciB0aGF0LCBJIG1heSBoYXZlIGEgZGVjaXNpb24gb24gd2hldGhlciB0byBsYXVuY2ggdGhlIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjUzLjg2NzcyMzgyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1ODAwMjg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jX21lbV9vcGVyYXRpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTg0MD1zdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtODUwLVxcbmZzL3Byb2MvYmFzZS5jOjg1MTovKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cXG5mcy9wcm9jL2Jhc2UuYy04NTItc3RydWN0IG1lbV9wcml2YXRlIHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTk5Nz1zdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEwMDUtXFxuZnMvcHJvYy9iYXNlLmM6MTAwNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xcbmZzL3Byb2MvYmFzZS5jLTEwMDctXFx0Lmxsc2Vla1xcdFxcdD0gbWVtX2xzZWVrLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzMxNT1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTMzNDYtI2VuZGlmXFxuZnMvcHJvYy9iYXNlLmM6MzM0NzpcXHRSRUcoXFxcIm1lbVxcXCIsICAgICAgICBTX0lSVVNSfFNfSVdVU1IsIHByb2NfbWVtX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTMzNDgtXFx0TE5LKFxcXCJjd2RcXFwiLCAgICAgICAgcHJvY19jd2RfbGluayksXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0zNjc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zNzAyLSNlbmRpZlxcbmZzL3Byb2MvYmFzZS5jOjM3MDM6XFx0UkVHKFxcXCJtZW1cXFwiLCAgICAgICBTX0lSVVNSfFNfSVdVU1IsIHByb2NfbWVtX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTM3MDQtXFx0TE5LKFxcXCJjd2RcXFwiLCAgICAgICBwcm9jX2N3ZF9saW5rKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6NTYuNTI1NzMzMjE2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MTE3MTA2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGBfX21lbV9vcGVuYCBpbiBgZnMvcHJvYy9iYXNlLmNgOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBfX21lbV9vcGVuYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIGBfX21lbV9vcGVuYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL3Byb2MvYmFzZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBzdGlsbCBhY3RpdmVseSBiZWluZyB1c2VkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHB1cnBvc2UgYW5kIGlmIGFueSBjaGFuZ2VzIG9yIHJlbW92YWxzIGhhdmUgb2NjdXJyZWQgdGhhdCBJIG1pZ2h0IG5lZWQgdG8gYmUgYXdhcmUgb2YuIElzIGl0IHN0aWxsIGEgY29yZSBmdW5jdGlvbiwgb3IgaGFzIGl0IGJlZW4gZGVwcmVjYXRlZCBvciByZXBsYWNlZD8gVGhpcyB3aWxsIHJlcXVpcmUgYSBjYXJlZnVsIHNlYXJjaCB3aXRoaW4gdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyODcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzo1OS4zMzc0NDYzNzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTA0ODEyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1fb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz04MTg9c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTgzOS1cXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9wcm9jL2Jhc2UuYy04NDEte1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTAxNT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDE2LXtcXG5mcy9wcm9jL2Jhc2UuYzoxMDE3OlxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDE4LX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwOTA9c3RhdGljIGludCBhdXh2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvcHJvYy9iYXNlLmMtMTA5MS17XFxuZnMvcHJvYy9iYXNlLmM6MTA5MjpcXHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDkzLX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTI3NzE9c3RhdGljIGludCBwcm9jX3BpZF9hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0yNzczLVxcdGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XFxuZnMvcHJvYy9iYXNlLmM6Mjc3NDpcXHRfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xcbmZzL3Byb2MvYmFzZS5jLTI3NzUtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI0OjAxLjIyNzkzNDg0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE1Njc1MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBQcm9jZnMgTWVtb3J5IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBwcm9jIGZpbGVzeXN0ZW0ncyBtZW1vcnkgaGFuZGxpbmcuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgZm9yLCBteSBndXQgdGVsbHMgbWUgdGhlIGtleSBmdW5jdGlvbnMgYXJlIGxpa2VseSBjbHVzdGVyZWQgYXJvdW5kIHRoZSA4NDAtMTAwMCBsaW5lIHJhbmdlIHdpdGhpbiBgZnMvcHJvYy9iYXNlLmNgLiBJJ20gZ29pbmcgdG8gZm9jdXMgaW4gb24gYG1lbV9sc2Vla2AsIGBtZW1fcmVhZGAsIGBtZW1fd3JpdGVgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZWAuIFRoZXNlIHNob3VsZCBjb3ZlciB0aGUgYmFzaWMgcmVhZC93cml0ZSBhY2Nlc3MgcGF0dGVybnMsIGhvdyB0aGUgZmlsZSBwb2ludGVyIGlzIG1hbmFnZWQsIGFuZCBvZiBjb3Vyc2UsIGhvdyB0aGUgbWVtb3J5IHJlZ2lvbnMgYXJlIHJlbGVhc2VkIGJhY2sgdG8gdGhlIHN5c3RlbS4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBwcm9jZXNzIG1lbW9yeSBpcyBleHBvc2VkIHRocm91Z2ggcHJvY2ZzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGhhdmUgYSBoYW5kbGUgb24gc2VjdXJpdHkgYW5kIHJlc291cmNlIGFsbG9jYXRpb24gcmVsYXRlZCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDowMy4yNDM2MTI4MjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0MDpcXHRzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxcbiA4NDE6XFx0e1xcbiA4NDI6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBtb2RlKTtcXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKG1tKSlcXG4gODQ1OlxcdFxcdFxcdHJldHVybiBtbSA/IFBUUl9FUlIobW0pIDogLUVTUkNIO1xcbiA4NDY6XFx0XFxuIDg0NzpcXHRcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBtbTtcXG4gODQ4OlxcdFxcdHJldHVybiAwO1xcbiA4NDk6XFx0fVxcbiA4NTA6XFx0XFxuIDg1MTpcXHQvKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cXG4gODUyOlxcdHN0cnVjdCBtZW1fcHJpdmF0ZSB7XFxuIDg1MzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gODU0OlxcdFxcdC8qXFxuIDg1NTpcXHRcXHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxcbiA4NTY6XFx0XFx0ICogdGhlIHNhbWUgTU0gKGludHJvc3BlY3Rpb24pP1xcbiA4NTc6XFx0XFx0ICovXFxuIDg1ODpcXHRcXHRib29sIG9wZW5lZF9ieV9vd25lcjtcXG4gODU5OlxcdH07XFxuIDg2MDpcXHRcXG4gODYxOlxcdHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDg2MjpcXHR7XFxuIDg2MzpcXHRcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSk7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdGlmICghcHJpdilcXG4gODY2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4Njc6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZvcF9mbGFncyBcXHUwMDI2IEZPUF9VTlNJR05FRF9PRkZTRVQpKSlcXG4gODY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Njk6XFx0XFx0cHJpdi1cXHUwMDNlbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xcbiA4NzA6XFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXFx1MDAzZW1tKSlcXG4gODcxOlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2VtbSA/IFBUUl9FUlIocHJpdi1cXHUwMDNlbW0pIDogLUVTUkNIO1xcbiA4NzI6XFx0XFx0cHJpdi1cXHUwMDNlb3BlbmVkX2J5X293bmVyID0gcHJpdi1cXHUwMDNlbW0gPT0gY3VycmVudC1cXHUwMDNlbW07XFxuIDg3MzpcXHRcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBub19mcmVlX3B0cihwcml2KTtcXG4gODc0OlxcdFxcdHJldHVybiAwO1xcbiA4NzU6XFx0fVxcbiA4NzY6XFx0XFxuIDg3NzpcXHRzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gODc4OlxcdHtcXG4gODc5OlxcdFxcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gODgwOlxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4gODgxOlxcdFxcdGJvb2wgcHRyYWNlX2FjdGl2ZSA9IGZhbHNlO1xcbiA4ODI6XFx0XFxuIDg4MzpcXHRcXHRzd2l0Y2ggKHByb2NfbWVtX2ZvcmNlX292ZXJyaWRlKSB7XFxuIDg4NDpcXHRcXHRjYXNlIFBST0NfTUVNX0ZPUkNFX05FVkVSOlxcbiA4ODU6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4ODY6XFx0XFx0Y2FzZSBQUk9DX01FTV9GT1JDRV9QVFJBQ0U6XFxuIDg4NzpcXHRcXHRcXHR0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlX2lub2RlKGZpbGUpKTtcXG4gODg4OlxcdFxcdFxcdGlmICh0YXNrKSB7XFxuIDg4OTpcXHRcXHRcXHRcXHRwdHJhY2VfYWN0aXZlID1cXHRSRUFEX09OQ0UodGFzay1cXHUwMDNlcHRyYWNlKSBcXHUwMDI2XFx1MDAyNlxcbiA4OTA6XFx0XFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHRhc2stXFx1MDAzZW1tKSA9PSBtbSBcXHUwMDI2XFx1MDAyNlxcbiA4OTE6XFx0XFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHRhc2stXFx1MDAzZXBhcmVudCkgPT0gY3VycmVudDtcXG4gODkyOlxcdFxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdFxcdGlmICghcHRyYWNlX2FjdGl2ZSlcXG4gODk1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODk2OlxcdFxcdFxcdGJyZWFrO1xcbiA4OTc6XFx0XFx0ZGVmYXVsdDpcXG4gODk4OlxcdFxcdFxcdGJyZWFrO1xcbiA4OTk6XFx0XFx0fVxcbiA5MDA6XFx0XFx0cmV0dXJuIHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGZpbGUtXFx1MDAzZWZfY3JlZCwgcHJpdi1cXHUwMDNlb3BlbmVkX2J5X293bmVyKSA9PSAwO1xcbiA5MDE6XFx0fVxcbiA5MDI6XFx0XFxuIDkwMzpcXHRzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuIDkwNDpcXHRcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywgaW50IHdyaXRlKVxcbiA5MDU6XFx0e1xcbiA5MDY6XFx0XFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiA5MDc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVxcdTAwM2VtbTtcXG4gOTA4OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zO1xcbiA5MDk6XFx0XFx0c3NpemVfdCBjb3BpZWQ7XFxuIDkxMDpcXHRcXHRjaGFyICpwYWdlO1xcbiA5MTE6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzO1xcbiA5MTI6XFx0XFxuIDkxMzpcXHRcXHRpZiAoIW1tKVxcbiA5MTQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDkxNTpcXHRcXG4gOTE2OlxcdFxcdHBhZ2UgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIDkxNzpcXHRcXHRpZiAoIXBhZ2UpXFxuIDkxODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTE5OlxcdFxcbiA5MjA6XFx0XFx0Y29waWVkID0gMDtcXG4gOTIxOlxcdFxcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxcbiA5MjI6XFx0XFx0XFx0Z290byBmcmVlO1xcbiA5MjM6XFx0XFxuIDkyNDpcXHRcXHRmbGFncyA9IHdyaXRlID8gRk9MTF9XUklURSA6IDA7XFxuIDkyNTpcXHRcXHRpZiAocHJvY19tZW1fZm9sbF9mb3JjZShmaWxlLCBtbSkpXFxuIDkyNjpcXHRcXHRcXHRmbGFncyB8PSBGT0xMX0ZPUkNFO1xcbiA5Mjc6XFx0XFxuIDkyODpcXHRcXHR3aGlsZSAoY291bnQgXFx1MDAzZSAwKSB7XFxuIDkyOTpcXHRcXHRcXHRzaXplX3QgdGhpc19sZW4gPSBtaW5fdChzaXplX3QsIGNvdW50LCBQQUdFX1NJWkUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDowMy4yNDM5MjY4NjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NDAzODUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIGluIGBmcy9wcm9jL2Jhc2UuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmdWxseSBncmFzcGluZyB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb2MgZmlsZXN5c3RlbSBhbmQgaXRzIHVuZGVybHlpbmcgc3RydWN0dXJlcywgSSByZWFsbHkgc2hvdWxkIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIHVzZSBjYXNlcyBvZiBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIHdpdGhpbiBgZnMvcHJvYy9iYXNlLmNgLiBXZSd2ZSBiZWVuIGxvb2tpbmcgYXQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBidXQgdG8gZ2V0IGEgdHJ1bHkgY29tcGxldGUgcGljdHVyZSwgSSBjYW4ndCBqdXN0IGxpbWl0IG15c2VsZiB0byB0aGF0LlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgaG93IGBtZW1fcmVsZWFzZWAgYW5kIGBtZW1fbHNlZWtgIGFyZSBpbXBsZW1lbnRlZCwgYW5kLCBjcnVjaWFsbHksIGhvdyB0aGV5IGFyZSBpbnRlcmFjdGluZyB3aXRoIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoaXMgZGF0YSBwb2ludGVyIGluIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIGFzIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGFsbCBraW5kcyBvZiB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGlmZmVyZW50IGRhdGEgdHlwZXMgdGhhdCBhcmUgYmVpbmcgY2FzdCB0byBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIHRvIGVuc3VyZSBhbnkgcG90ZW50aWFsIHR5cGUgbWlzbWF0Y2hlcyBhcmUgYWRkcmVzc2VkLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHNvbWUgc3VidGxldHkgaW4gaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQgb3IgZmlsZSBwb3NpdGlvbmluZyB3aXRoaW4gdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQncyBvZnRlbiB3aGVyZSB0aGUgdHJpY2t5IG1lbW9yeSBidWdzIHRlbmQgdG8gaGlkZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODUyNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjQ6MDUuNjI3OTY4MjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2NTpcXHR9XFxuIDk2NjpcXHRcXG4gOTY3OlxcdHN0YXRpYyBzc2l6ZV90IG1lbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4gOTY4OlxcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gOTY5OlxcdHtcXG4gOTcwOlxcdFxcdHJldHVybiBtZW1fcncoZmlsZSwgKGNoYXIgX191c2VyKilidWYsIGNvdW50LCBwcG9zLCAxKTtcXG4gOTcxOlxcdH1cXG4gOTcyOlxcdFxcbiA5NzM6XFx0bG9mZl90IG1lbV9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpXFxuIDk3NDpcXHR7XFxuIDk3NTpcXHRcXHRzd2l0Y2ggKG9yaWcpIHtcXG4gOTc2OlxcdFxcdGNhc2UgMDpcXG4gOTc3OlxcdFxcdFxcdGZpbGUtXFx1MDAzZWZfcG9zID0gb2Zmc2V0O1xcbiA5Nzg6XFx0XFx0XFx0YnJlYWs7XFxuIDk3OTpcXHRcXHRjYXNlIDE6XFxuIDk4MDpcXHRcXHRcXHRmaWxlLVxcdTAwM2VmX3BvcyArPSBvZmZzZXQ7XFxuIDk4MTpcXHRcXHRcXHRicmVhaztcXG4gOTgyOlxcdFxcdGRlZmF1bHQ6XFxuIDk4MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTg0OlxcdFxcdH1cXG4gOTg1OlxcdFxcdGZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbF9yZXR1cm4oKTtcXG4gOTg2OlxcdFxcdHJldHVybiBmaWxlLVxcdTAwM2VmX3BvcztcXG4gOTg3OlxcdH1cXG4gOTg4OlxcdFxcbiA5ODk6XFx0c3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gOTkwOlxcdHtcXG4gOTkxOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiA5OTI6XFx0XFx0aWYgKG1tKVxcbiA5OTM6XFx0XFx0XFx0bW1kcm9wKG1tKTtcXG4gOTk0OlxcdFxcdHJldHVybiAwO1xcbiA5OTU6XFx0fVxcbiA5OTY6XFx0XFxuIDk5NzpcXHRzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gOTk4OlxcdHtcXG4gOTk5OlxcdFxcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xMDAwOlxcdFxcbjEwMDE6XFx0XFx0bW1kcm9wKHByaXYtXFx1MDAzZW1tKTtcXG4xMDAyOlxcdFxcdGtmcmVlKHByaXYpO1xcbjEwMDM6XFx0XFx0cmV0dXJuIDA7XFxuMTAwNDpcXHR9XFxuMTAwNTpcXHRcXG4xMDA2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XFxuMTAwNzpcXHRcXHQubGxzZWVrXFx0XFx0PSBtZW1fbHNlZWssXFxuMTAwODpcXHRcXHQucmVhZFxcdFxcdD0gbWVtX3JlYWQsXFxuMTAwOTpcXHRcXHQud3JpdGVcXHRcXHQ9IG1lbV93cml0ZSxcXG4xMDEwOlxcdFxcdC5vcGVuXFx0XFx0PSBtZW1fb3BlbixcXG4xMDExOlxcdFxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXFxuMTAxMjpcXHRcXHQuZm9wX2ZsYWdzXFx0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxcbjEwMTM6XFx0fTtcXG4xMDE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDowNS42MjgxNTA5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDE3OTkwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJ3MgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBlbnN1cmluZyB0aGUgY29uc2lzdGVuY3kgb2YgcmVzb3VyY2UgaGFuZGxpbmcuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHJvY19tZW1fb3BlcmF0aW9uc2AgaXMgdGhlICpvbmx5KiBjb21wb25lbnQgZGlyZWN0bHkgbGV2ZXJhZ2luZyBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBhbmQgYG1lbV9vcGVuYC4gV2Uga25vdyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBgL3Byb2MvJHBpZC9tZW1gIGZpbGUgKGFuZCBwb3RlbnRpYWxseSB0YXNrL3RpZCBtZW0gZmlsZXMpLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgb3RoZXIgcHJvYyBmaWxlcywgc3VjaCBhcyBgZW52aXJvbmAgYW5kIGBhdXh2YCwgdXRpbGl6ZSBhbHRlcm5hdGl2ZSBvcGVuIGZ1bmN0aW9ucywgbmFtZWx5IGBlbnZpcm9uX29wZW5gIGFuZCBgYXV4dl9vcGVuYC4gVGhlc2UsIGFzIEkgcmVjYWxsLCB1dGlsaXplIGBfX21lbV9vcGVuYCBpbnRlcm5hbGx5IGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHJlbGVhc2UgZnVuY3Rpb24sIGBtZW1fcmVsZWFzZWAuIEEgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgYG1lbV9yZWxlYXNlYCBleHBlY3RzIHRoZSBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgcHJvY2VzcydzIGBtbWAgKG1lbW9yeSBtYXApLCB3aGljaCBpcyBzZXQgYnkgYF9fbWVtX29wZW5gLiBTbywgdGhlIG93bmVyc2hpcCBhbmQgbGlmZWN5Y2xlIG11c3QgYmUgY29ycmVjdCB0aGVyZS5cblxuTm93LCBsZXQncyBzY3J1dGluaXplIHRoZSBTRUxpbnV4IGFzcGVjdCBpbnRyb2R1Y2VkIGluIHRoZSBwYXRjaC4gVGhlIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlYCBmdW5jdGlvbiBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGNhbGxzIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAgdG8gY2hlY2sgaWYgYSBwcm9jZXNzIGhhcyBwZXJtaXNzaW9uIHRvIHB0cmFjZSBpdHNlbGYuIFdoYXQgaXMgbm90ZXdvcnRoeSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBwYXNzZXMgYSBwb2ludGVyIHRvIGBcdTAwMjZhdmRgLiBUaHVzLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAgdXNlcyBpdC4gRG9lcyB0aGUgZnVuY3Rpb24gbW9kaWZ5IGBcdTAwMjZhdmRgPyBJZiBzbywgd2hhdCBpbmZvcm1hdGlvbiBkb2VzIGl0IHN0b3JlIG9yIHVwZGF0ZT8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI0OjA5LjA0NjE0NDk2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIzNzQ5MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF2Y19oYXNfcGVybV9ub2F1ZGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvYXZjLmM9OTU0PWludCBhdmNfc3NfcmVzZXQodTMyIHNlcW5vKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODItICpcXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjk4MzogKiBTbG93LXBhdGggaGVscGVyIGZ1bmN0aW9uIGZvciBhdmNfaGFzX3Blcm1fbm9hdWRpdCwgd2hlbiB0aGUgYXZjX25vZGUgbG9va3VwXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODQtICogZmFpbHMuICBEb24ndCBpbmxpbmUgdGhpcywgc2luY2UgaXQncyB0aGUgc2xvdy1wYXRoIGFuZCBqdXN0IHJlc3VsdHMgaW4gYVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz0xMDE5PWludCBhdmNfaGFzX2V4dGVuZGVkX3Blcm1zKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEwNS0gKlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEwNjogKiBUaGlzIGlzIHRoZSBcXFwid2UgaGF2ZSBubyBub2RlXFxcIiBwYXJ0IG9mIGF2Y19oYXNfcGVybV9ub2F1ZGl0KCksIHdoaWNoIGlzXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTA3LSAqIHVubGlrZWx5IGFuZCBuZWVkcyBleHRyYSBzdGFjayBzcGFjZSBmb3IgdGhlIG5ldyBub2RlIHRoYXQgd2UgZ2VuZXJhdGUsIHNvXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExMTA9c3RhdGljIG5vaW5saW5lIGludCBhdmNfcGVybV9ub25vZGUodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTI1LS8qKlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEyNjogKiBhdmNfaGFzX3Blcm1fbm9hdWRpdCAtIENoZWNrIHBlcm1pc3Npb25zIGJ1dCBwZXJmb3JtIG5vIGF1ZGl0aW5nLlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEyNy0gKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTE0NC0gKi9cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExNDU6aW5saW5lIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ2LVxcdFxcdFxcdFxcdHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExODk9aW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExOTQtXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTk1OlxcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIDAsXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTk2LVxcdFxcdFxcdFxcdCAgXFx1MDAyNmF2ZCk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTY0MT1zdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2NS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTY2NjpcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBzY2xhc3MsIGF2LCAwLCBcXHUwMDI2YXZkKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2Ny1cXHRpZiAoIShvcHRzIFxcdTAwMjYgQ0FQX09QVF9OT0FVRElUKSkge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTIxNzg9c3RhdGljIGludCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcilcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTg2LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyMTg3OlxcdHJldHVybiBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAwLCBcXHUwMDI2YXZkKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE4OC19XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzI3Mz1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzMDktXFx0XFx0LyogQ2FjaGUgbWlzcy4gKi9cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzMxMDpcXHRcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgaXNlYy1cXHUwMDNlc2lkLCBpc2VjLVxcdTAwM2VzY2xhc3MsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzMTEtXFx0XFx0XFx0XFx0XFx0ICBwZXJtcywgMCwgYXZkcCk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg9MTAxPWludCBzbG93X2F2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsIHUzMiBhdWRpdGVkLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExMC0gKiBAYXZkOiBhY2Nlc3MgdmVjdG9yIGRlY2lzaW9uc1xcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMTE6ICogQHJlc3VsdDogcmVzdWx0IGZyb20gYXZjX2hhc19wZXJtX25vYXVkaXRcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTEyLSAqIEBhOiAgYXV4aWxpYXJ5IGF1ZGl0IGRhdGFcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTYtICogYXZjX2hhc19wZXJtKCkgYWZ0ZXIgYSBwZXJtaXNzaW9uIGNoZWNrLCBidXQgY2FuIGFsc28gYmVcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg6MTE3OiAqIGNhbGxlZCBkaXJlY3RseSBieSBjYWxsZXJzIHdobyB1c2UgYXZjX2hhc19wZXJtX25vYXVkaXQoKVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTgtICogaW4gb3JkZXIgdG8gc2VwYXJhdGUgdGhlIHBlcm1pc3Npb24gY2hlY2sgZnJvbSB0aGUgYXVkaXRpbmcuXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg9MTIzPXN0YXRpYyBpbmxpbmUgaW50IGF2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTM2LSNkZWZpbmUgQVZDX0VYVEVOREVEX1BFUk1TIDIgLyogdXBkYXRlIGV4dGVuZGVkIHBlcm1pc3Npb25zICovXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjEzNzppbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLFxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMzgtXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDoxMC43Njk4OTg2OTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY1NjQ2NzM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEknbSBmb2N1c2luZyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgS01TQU4gYW5hbHlzaXMuXG5cbkZpcnN0LCBJIGxvb2tlZCBhdCBob3cgdGhlIGBtZW1fcHJpdmF0ZWAgc3RydWN0IGlzIGhhbmRsZWQuIEl0J3MgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCwgYW5kIGJvdGggYG1tYCBhbmQgYG9wZW5lZF9ieV9vd25lcmAgYXJlIGltbWVkaWF0ZWx5IGFzc2lnbmVkICpiZWZvcmUqIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgaXMgdG91Y2hlZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhLCBubyBwb3RlbnRpYWwgaW5mbyBsZWFrcyB0aHJvdWdoIHBhZGRpbmcsIHNpbmNlIHRoaXMgc3RydWN0IGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsIGFuZCBvbmx5IGFjY2Vzc2VkIHZpYSBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLlxuXG5OZXh0LCB0aGVyZSdzIG5vIGRhdGEgYmVpbmcgY29waWVkIGRpcmVjdGx5IHRvIHVzZXJzcGFjZS4gYG1lbV9yd2AgYWxyZWFkeSBsZXZlcmFnZXMgdGhlIGVzdGFibGlzaGVkIGtlcm5lbCBtZWNoYW5pc21zIGxpa2UgYGNvcHlfdG9fdXNlcmAgYW5kIGBjb3B5X2Zyb21fdXNlcmAgd2hlbiBkZWFsaW5nIHdpdGggdXNlciBidWZmZXJzIHZpYSBgYWNjZXNzX3JlbW90ZV92bWAuIFdlJ3JlIGdvb2QgdGhlcmUuXG5cbkkgdGhlbiBleGFtaW5lZCB0aGUgU0VMaW51eCBob29rLCBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZWAuIEl0IHRha2VzIGBjcmVkYCBhbmQgYG9wZW5lZF9ieV9vd25lcmAsIGNhbGxzIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAsIGFuZCByZXR1cm5zIGFuIGludGVnZXIuIGBhdmRgIGlzIHBhc3NlZCBieSBwb2ludGVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAsIGJ1dCB0aGUgcmV0dXJuIGNvZGUgaXMgdXNlZCBkaXJlY3RseSwgd2l0aG91dCBhbnkgcmVhZCBvZiB0aGUgYGF2ZGAgc3RydWN0LiBUaGlzIGlzIGEgdmVyeSBjbGVhbiBwYXR0ZXJuLlxuXG5UaGUgTFNNIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZWAsIGNhbGxzIGBjYWxsX2ludF9ob29rYCwgd2hpY2ggcmV0dXJucyBhbiBpbnRlZ2VyLiBUaGUgZGVmYXVsdCBzdGF0aWMgaW5saW5lIHJldHVybnMgMC4gQWdhaW4sIG5vIGlzc3VlcyBoZXJlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIEkgYXNrZWQgbXlzZWxmIHRoZSBjcml0aWNhbCBxdWVzdGlvbnM6IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhPyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgbm8uIEFsbCBuZXdseSBhbGxvY2F0ZWQgc3RydWN0cyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlLiBBbnkgKnBvdGVudGlhbCogbWVtb3J5IHNhZmV0eSBidWdzIChsaWtlIFVBRiBpZiBzdHJ1Y3QgbGlmZXRpbWUgaGFkIGlzc3VlcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cblxuVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgcmVhc29uaW5nIGFnYWluc3QgdGhlIGVzdGFibGlzaGVkIHJ1bGVzLiBJJ20gZ29pbmcgdG8gcmUtc3RhdGUgdGhlIGtleSBkaXN0aW5jdGlvbnMgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIGFscmVhZHkgZW5hYmxlZCwgaW5jbHVkaW5nIExPQ0tERVAsIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy5cblxuSSBkb3VibGUtY2hlY2tlZCB0aGUgY29uZGl0aW9ucyBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gYHRydWVgOiBub25lIG9mIHRoZW0gYXBwbHkgaGVyZS4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIHRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuT24gdGhlIGZsaXAgc2lkZSwgYWxsIHRoZSBjb25kaXRpb25zIGZvciBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhcmUgbWV0OiB0aGUgY29kZSBwcmltYXJpbHkgZGVhbHMgd2l0aCB0aGluZ3MgdGhhdCBLQVNBTiBhbHJlYWR5IGFkZHJlc3NlcyBsaWtlIG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgYW5kIFVBRi4gQWxsIHJlbGV2YW50IHN0cnVjdHMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZC4gVGhlcmUncyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3BlY2lmaWNhbGx5LCB0aGUgZmllbGRzIGluIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gaW4gYG1lbV9vcGVuYCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZC4gVGh1cywgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cblNvLCAqSSBhbSBjb21wbGV0ZWx5IGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjYxLCJPdXRwdXRUb2tlbnMiOjI4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDoxNy40MjYzNjk4MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2sgYG1lbV9mb2xsX2ZvcmNlYCBhbmQgcmVwbGFjZXMgdGhlIGRpcmVjdCBgbW1fc3RydWN0YCBwb2ludGVyIGluIGBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGFgIG9mIGAvcHJvYy8kcGlkL21lbWAgd2l0aCBhIHNtYWxsIGNvbnRhaW5lciBgc3RydWN0IG1lbV9wcml2YXRlYCBjb250YWluaW5nIGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgLlxcblxcbi0gSW4gYG1lbV9vcGVuKClgLCB0aGUgaGVhcCBhbGxvY2F0aW9uIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYCBoYXMgYWxsIGl0cyBmaWVsZHMgKGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIGFzc2lnbmVkIHRvIGBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGFgLlxcbi0gSW4gYHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoKWAsIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBhdl9kZWNpc2lvbiBhdmRgIGlzIHBhc3NlZCBhcyBhbiBvdXRwdXQgYnVmZmVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpYCwgYW5kIGl0cyBmaWVsZHMgYXJlIG5vdCByZWFkIGJlZm9yZSBpbml0aWFsaXphdGlvbi5cXG4tIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKHN1Y2ggYXMgbGlmZXRpbWUvZnJlZWluZyBvZiBgcHJpdmAgb3IgYG1tYCkgYXJlIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBwcm9wZXJseSBjb3ZlcmVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBtZW1fZm9sbF9mb3JjZWAgYW5kIHJlcGxhY2VzIHRoZSBkaXJlY3QgYG1tX3N0cnVjdGAgcG9pbnRlciBpbiBgZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhYCBvZiBgL3Byb2MvJHBpZC9tZW1gIHdpdGggYSBzbWFsbCBjb250YWluZXIgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgY29udGFpbmluZyBgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYC5cXG5cXG4tIEluIGBtZW1fb3BlbigpYCwgdGhlIGhlYXAgYWxsb2NhdGlvbiBga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKWAgaGFzIGFsbCBpdHMgZmllbGRzIChgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCB0byBgZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhYC5cXG4tIEluIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKClgLCB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBpcyBwYXNzZWQgYXMgYW4gb3V0cHV0IGJ1ZmZlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIGFuZCBpdHMgZmllbGRzIGFyZSBub3QgcmVhZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uXFxuLSBObyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIChzdWNoIGFzIGxpZmV0aW1lL2ZyZWVpbmcgb2YgYHByaXZgIG9yIGBtbWApIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MgdGhhdCBhcmUgcHJvcGVybHkgY292ZXJlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 01:20:44 +0000 UTC FinishedAt: 2026-09-08 01:24:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "SECURITY", "SECURITY_SELINUX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "SECURITY", "SECURITY_SELINUX" ], "series_id": "3567c67b-d32d-490a-981e-26674c835ec2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_open", "proc_mem_foll_force", "mem_rw", "mem_release_with_private", "security_mem_foll_force", "selinux_mem_foll_force" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9vcGVuJiMzNDssCiAgICAmIzM0O3Byb2NfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7bWVtX3J3JiMzNDssCiAgICAmIzM0O21lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X21lbV9mb2xsX2ZvcmNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vayBgbWVtX2ZvbGxfZm9yY2VgIGFuZCByZXBsYWNlcyB0aGUgZGlyZWN0IGBtbV9zdHJ1Y3RgIHBvaW50ZXIgaW4gYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYCBvZiBgL3Byb2MvJHBpZC9tZW1gIHdpdGggYSBzbWFsbCBjb250YWluZXIgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgY29udGFpbmluZyBgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYC5cblxuLSBJbiBgbWVtX29wZW4oKWAsIHRoZSBoZWFwIGFsbG9jYXRpb24gYGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSlgIGhhcyBhbGwgaXRzIGZpZWxkcyAoYG1tYCBhbmQgYG9wZW5lZF9ieV9vd25lcmApIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gYmVpbmcgYXNzaWduZWQgdG8gYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYC5cbi0gSW4gYHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoKWAsIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBhdl9kZWNpc2lvbiBhdmRgIGlzIHBhc3NlZCBhcyBhbiBvdXRwdXQgYnVmZmVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpYCwgYW5kIGl0cyBmaWVsZHMgYXJlIG5vdCByZWFkIGJlZm9yZSBpbml0aWFsaXphdGlvbi5cbi0gTm8ga2VybmVsIGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGJyYW5jaGluZyBkZWNpc2lvbnMuXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIChzdWNoIGFzIGxpZmV0aW1lL2ZyZWVpbmcgb2YgYHByaXZgIG9yIGBtbWApIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MgdGhhdCBhcmUgcHJvcGVybHkgY292ZXJlZCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFkNTFjM2I0NDUwOTdlOTA5YTJkNzM1MDU1MDc0ODg4NTU1N2Y4MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAxOjIzOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9iYXNlLmNcbkBAIC04NDgsMTUgJiM0Mzs4NDgsMzUgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovXG4mIzQzO3N0cnVjdCBtZW1fcHJpdmF0ZSB7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxuJiM0MztcdCAqIHRoZSBzYW1lIE1NIChpbnRyb3NwZWN0aW9uKT9cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIG9wZW5lZF9ieV9vd25lcjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4mIzQzO1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4mIzQzO1x0cHJpdi1cdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXHUwMDNlbW0pKVxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbW0gPyBQVFJfRVJSKHByaXYtXHUwMDNlbW0pIDogLUVTUkNIO1xuJiM0MztcdHByaXYtXHUwMDNlb3BlbmVkX2J5X293bmVyID0gcHJpdi1cdTAwM2VtbSA9PSBjdXJyZW50LVx1MDAzZW1tO1xuJiM0MztcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbiBcdGJvb2wgcHRyYWNlX2FjdGl2ZSA9IGZhbHNlO1xuIFxuQEAgLTg3MSwxNiAmIzQzOzg5MSwyMCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdFx0XHRcdFx0UkVBRF9PTkNFKHRhc2stXHUwMDNlcGFyZW50KSA9PSBjdXJyZW50O1xuIFx0XHRcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcbiBcdFx0fVxuLVx0XHRyZXR1cm4gcHRyYWNlX2FjdGl2ZTtcbiYjNDM7XHRcdGlmICghcHRyYWNlX2FjdGl2ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0fVxuJiM0MztcdHJldHVybiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShmaWxlLVx1MDAzZWZfY3JlZCwgcHJpdi1cdTAwM2VvcGVuZWRfYnlfb3duZXIpID09IDA7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywgaW50IHdyaXRlKVxuIHtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVx1MDAzZW1tO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKnBwb3M7XG4gXHRzc2l6ZV90IGNvcGllZDtcbiBcdGNoYXIgKnBhZ2U7XG5AQCAtOTcwLDEyICYjNDM7OTk0LDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1xuJiM0MztcdG1tZHJvcChwcml2LVx1MDAzZW1tKTtcbiYjNDM7XHRrZnJlZShwcml2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xuIFx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2VlayxcbiBcdC5yZWFkXHRcdD0gbWVtX3JlYWQsXG4gXHQud3JpdGVcdFx0PSBtZW1fd3JpdGUsXG4gXHQub3Blblx0XHQ9IG1lbV9vcGVuLFxuLVx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2UsXG4mIzQzO1x0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLFxuIFx0LmZvcF9mbGFnc1x0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uMTJmODRhMWU2ZmFiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuQEAgLTM2LDYgJiM0MzszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX2FjY2Vzc19jaGVjaywgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcbiBcdCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBtZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKVxuIExTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHQga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBzZXQsIHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li5lOGJjMmU2NDQyNDFiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC0zMzgsNiAmIzQzOzMzOCw3IEBAIGludCBzZWN1cml0eV9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGNyZWQgKnRvLCBjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4gaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XG4mIzQzO2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpO1xuIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0ICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5AQCAtNjc2LDYgJiM0Mzs2NzcsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXG4gXHRyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCxcbiYjNDM7XHRcdFx0XHRcdCAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdFx0XHQgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDcxYWVhOGZkZjAxNDIuLjJjZGUxZWZkYjdhNjIgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtNTk1LDYgJiM0Mzs1OTUsMzEgQEAgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0cmV0dXJuIGNhbGxfaW50X2hvb2socHRyYWNlX3RyYWNlbWUsIHBhcmVudCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxuJiM0MzsgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZFxuJiM0MzsgKiBAb3BlbmVkX2J5X293bmVyOiB3aGV0aGVyIGNoZWNrcyBvbiBvcGVuKCkgd2VyZSBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXJcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgaGFzIHRoZSBzYW1lIE1NIGFzIHRoZSB0YXJnZXRcbiYjNDM7ICpcbiYjNDM7ICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhY2Nlc3NpbmcgcHJvY2VzcyBtZW1vcnkgdGhyb3VnaFxuJiM0MzsgKiAvcHJvYy8kcGlkL21lbS4gb3BlbmVkX2J5X293bmVyIHNpZ25hbHMgd2hldGhlciB0aGUgb3BlbmVyJiMzOTtzIE1NIHdhcyB0aGUgc2FtZVxuJiM0MzsgKiBhcyB0aGUgdGFyZ2V0IE1NLCBtZWFuaW5nIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vayB3YXNcbiYjNDM7ICogYnlwYXNzZWQgb24gb3BlbigpLlxuJiM0MzsgKiAoQ3VycmVudCBjdXJyZW50LVx1MDAzZW1tIGRvZXMgbm90IG1hdHRlciBmb3IgdGhpczsgZm9yIGV4YW1wbGUsIGlmIHdyaXRlKCkgaXNcbiYjNDM7ICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGhcbiYjNDM7ICogb3BlbihcJiMzNDsvcHJvYy9zZWxmL21lbVwmIzM0OyksIEBvcGVuZWRfYnlfb3duZXIgaXMgc3RpbGwgdHJ1ZS4pXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGUgdGhhdCB0aGlzIGhvb2sgaXMgb25seSBkZXNpZ25lZCB0byBiZSB1c2VmdWwgaW4gdGhlIG9wZW5lZF9ieV9vd25lclxuJiM0MzsgKiBjYXNlLCB3aGVyZSB0aGUgc3ViamVjdCBjcmVkZW50aWFscyBlZmZlY3RpdmVseSBhbHNvIGRlc2NyaWJlIHRoZSBvYmplY3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiYjNDM7ICovXG4mIzQzO2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCxcbiYjNDM7XHRcdFx0XHRcdCAgICBib29sIG9wZW5lZF9ieV9vd25lcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKG1lbV9mb2xsX2ZvcmNlLCBzdWJqZWN0LCBvcGVuZWRfYnlfb3duZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHNlY3VyaXR5X2NhcGdldCgpIC0gR2V0IHRoZSBjYXBhYmlsaXR5IHNldHMgZm9yIGEgcHJvY2Vzc1xuICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxOGRkMjhiMmJiMTNkLi40NWVhZDE4YzhmMDFhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yMTU3LDYgJiM0MzsyMTU3LDM2IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdFx0XHQgICAgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0VcbiYjNDM7ICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIHVzaW5nIHdoaWNoIC9wcm9jLyRwaWQvbWVtIHdhcyBvcGVuZWRcbiYjNDM7ICogQG9wZW5lZF9ieV9vd25lcjogd2hldGhlciBjaGVja3Mgb24gb3BlbigpIHdlcmUgYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0XG4mIzQzOyAqXG4mIzQzOyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZVxuJiM0MzsgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXG4mIzQzOyAqIFRoZSBAb3BlbmVkX2J5X293bmVyIGNhc2Ugb25seSBhcHBsaWVzIHRvIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoXG4mIzQzOyAqIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHkgaGFwcGVucyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0b1xuJiM0MzsgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW5cbiYjNDM7ICogbWF5X2FjY2Vzc19tbSgpIGFuZCBfX3B0cmFjZV9tYXlfYWNjZXNzKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBDcmVhdGluZyBhbiBhdWRpdCByZWNvcmQgb24gZGVuaWFsIGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJiMzOTt0XG4mIzQzOyAqIHRlbGwgd2hldGhlciBGT0xMX0ZPUkNFIG1hdHRlcnMgZm9yIHRoZSBhY2Nlc3NlZCBWTUFzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7XG4mIzQzO1x0dTMyIHNpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvcGVuZWRfYnlfb3duZXIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRzaWQgPSBjcmVkX3NpZChzdWJqZWN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsIFx1MDAyNmF2ZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICYjNDM7NzU4OCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXG4gXHRMU01fSE9PS19JTklUKHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjayksXG4gXHRMU01fSE9PS19JTklUKHB0cmFjZV90cmFjZW1lLCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKSxcbiYjNDM7XHRMU01fSE9PS19JTklUKG1lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSxcbiBcdExTTV9IT09LX0lOSVQoY2FwZ2V0LCBzZWxpbnV4X2NhcGdldCksXG4gXHRMU01fSE9PS19JTklUKGNhcHNldCwgc2VsaW51eF9jYXBzZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBhYmxlLCBzZWxpbnV4X2NhcGFibGUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7U0VDVVJJVFkmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU0VMSU5VWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9vcGVuJiMzNDssCiAgICAmIzM0O3Byb2NfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7bWVtX3J3JiMzNDssCiAgICAmIzM0O21lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDtzZWxpbnV4X21lbV9mb2xsX2ZvcmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9tZW0gb3BlcmF0aW9ucyAobWVtX29wZW4sIG1lbV9ydywgcHJvY19tZW1fZm9sbF9mb3JjZSwgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKSBieSBpbnRyb2R1Y2luZyBzdHJ1Y3QgbWVtX3ByaXZhdGUgdG8gdHJhY2sgb3BlbmVyIE1NIG93bmVyc2hpcCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayAoc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfbWVtX2ZvbGxfZm9yY2UpIHRvIGdvdmVybiBGT0xMX0ZPUkNFIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWQ1MWMzYjQ0NTA5N2U5MDlhMmQ3MzUwNTUwNzQ4ODg1NTU3ZjgwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDE6MjM6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC04NDgsMTUgJiM0Mzs4NDgsMzUgQEAgc3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqLwomIzQzO3N0cnVjdCBtZW1fcHJpdmF0ZSB7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwomIzQzOwkvKgomIzQzOwkgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZAomIzQzOwkgKiB0aGUgc2FtZSBNTSAoaW50cm9zcGVjdGlvbik/CiYjNDM7CSAqLwomIzQzOwlib29sIG9wZW5lZF9ieV9vd25lcjsKJiM0Mzt9OwomIzQzOwogc3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS0mZ3Q7Zl9vcC0mZ3Q7Zm9wX2ZsYWdzICZhbXA7IEZPUF9VTlNJR05FRF9PRkZTRVQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7CiYjNDM7CXByaXYtJmd0O21tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHByaXYtJmd0O21tKSkKJiM0MzsJCXJldHVybiBwcml2LSZndDttbSA/IFBUUl9FUlIocHJpdi0mZ3Q7bW0pIDogLUVTUkNIOwomIzQzOwlwcml2LSZndDtvcGVuZWRfYnlfb3duZXIgPSBwcml2LSZndDttbSA9PSBjdXJyZW50LSZndDttbTsKJiM0MzsJZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlib29sIHB0cmFjZV9hY3RpdmUgPSBmYWxzZTsKIApAQCAtODcxLDE2ICYjNDM7ODkxLDIwIEBAIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkJCQlSRUFEX09OQ0UodGFzay0mZ3Q7cGFyZW50KSA9PSBjdXJyZW50OwogCQkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCQl9Ci0JCXJldHVybiBwdHJhY2VfYWN0aXZlOwomIzQzOwkJaWYgKCFwdHJhY2VfYWN0aXZlKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiB0cnVlOwomIzQzOwkJYnJlYWs7CiAJfQomIzQzOwlyZXR1cm4gc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoZmlsZS0mZ3Q7Zl9jcmVkLCBwcml2LSZndDtvcGVuZWRfYnlfb3duZXIpID09IDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDttbTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvczsKIAlzc2l6ZV90IGNvcGllZDsKIAljaGFyICpwYWdlOwpAQCAtOTcwLDEyICYjNDM7OTk0LDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsKJiM0MzsJbW1kcm9wKHByaXYtJmd0O21tKTsKJiM0MzsJa2ZyZWUocHJpdik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBtZW1fbHNlZWssCiAJLnJlYWQJCT0gbWVtX3JlYWQsCiAJLndyaXRlCQk9IG1lbV93cml0ZSwKIAkub3BlbgkJPSBtZW1fb3BlbiwKLQkucmVsZWFzZQk9IG1lbV9yZWxlYXNlLAomIzQzOwkucmVsZWFzZQk9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSwKIAkuZm9wX2ZsYWdzCT0gRk9QX1VOU0lHTkVEX09GRlNFVCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKaW5kZXggNjVjOTYwOWVjMjA3Ny4uMTJmODRhMWU2ZmFiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmgKQEAgLTM2LDYgJiM0MzszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLAogTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfYWNjZXNzX2NoZWNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLAogCSB1bnNpZ25lZCBpbnQgbW9kZSkKIExTTV9IT09LKGludCwgMCwgcHRyYWNlX3RyYWNlbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQomIzQzO0xTTV9IT09LKGludCwgMCwgbWVtX2ZvbGxfZm9yY2UsIGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcikKIExTTV9IT09LKGludCwgMCwgY2FwZ2V0LCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQogTFNNX0hPT0soaW50LCAwLCBjYXBzZXQsIHN0cnVjdCBjcmVkICpuZXcsIGNvbnN0IHN0cnVjdCBjcmVkICpvbGQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMTUzZTkwNDMwNThmOC4uZThiYzJlNjQ0MjQxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtMzM4LDYgJiM0MzszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sCiAJCQkJICBjb25zdCBzdHJ1Y3QgY3JlZCAqdG8sIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTsKIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTsKIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7CiYjNDM7aW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcik7CiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLApAQCAtNjc2LDYgJiM0Mzs2NzcsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpCiAJcmV0dXJuIGNhcF9wdHJhY2VfdHJhY2VtZShwYXJlbnQpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsCiYjNDM7CQkJCQkgIGJvb2wgb3BlbmVkX2J5X293bmVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJCSAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCA3MWFlYThmZGYwMTQyLi4yY2RlMWVmZGI3YTYyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTU5NSw2ICYjNDM7NTk1LDMxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FsbF9pbnRfaG9vayhwdHJhY2VfdHJhY2VtZSwgcGFyZW50KTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKCkgLSBDaGVjayBpZiBGT0xMX0ZPUkNFIGlzIGFsbG93ZWQKJiM0MzsgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZAomIzQzOyAqIEBvcGVuZWRfYnlfb3duZXI6IHdoZXRoZXIgY2hlY2tzIG9uIG9wZW4oKSB3ZXJlIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lcgomIzQzOyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0CiYjNDM7ICoKJiM0MzsgKiBDaGVjayBpZiBGT0xMX0ZPUkNFIGlzIGFsbG93ZWQgZm9yIGFjY2Vzc2luZyBwcm9jZXNzIG1lbW9yeSB0aHJvdWdoCiYjNDM7ICogL3Byb2MvJHBpZC9tZW0uIG9wZW5lZF9ieV9vd25lciBzaWduYWxzIHdoZXRoZXIgdGhlIG9wZW5lciYjMzk7cyBNTSB3YXMgdGhlIHNhbWUKJiM0MzsgKiBhcyB0aGUgdGFyZ2V0IE1NLCBtZWFuaW5nIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vayB3YXMKJiM0MzsgKiBieXBhc3NlZCBvbiBvcGVuKCkuCiYjNDM7ICogKEN1cnJlbnQgY3VycmVudC0mZ3Q7bW0gZG9lcyBub3QgbWF0dGVyIGZvciB0aGlzOyBmb3IgZXhhbXBsZSwgaWYgd3JpdGUoKSBpcwomIzQzOyAqIGNhbGxlZCBvbiBhbiBGRCB0aGF0IHdhcyByZWNlaXZlZCBmcm9tIGFub3RoZXIgcHJvY2VzcyB3aGljaCBvYnRhaW5lZCBpdCB3aXRoCiYjNDM7ICogb3BlbigmIzM0Oy9wcm9jL3NlbGYvbWVtJiMzNDspLCBAb3BlbmVkX2J5X293bmVyIGlzIHN0aWxsIHRydWUuKQomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IHRoaXMgaG9vayBpcyBvbmx5IGRlc2lnbmVkIHRvIGJlIHVzZWZ1bCBpbiB0aGUgb3BlbmVkX2J5X293bmVyCiYjNDM7ICogY2FzZSwgd2hlcmUgdGhlIHN1YmplY3QgY3JlZGVudGlhbHMgZWZmZWN0aXZlbHkgYWxzbyBkZXNjcmliZSB0aGUgb2JqZWN0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgomIzQzOyAqLwomIzQzO2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwKJiM0MzsJCQkJCSAgICBib29sIG9wZW5lZF9ieV9vd25lcikKJiM0Mzt7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKG1lbV9mb2xsX2ZvcmNlLCBzdWJqZWN0LCBvcGVuZWRfYnlfb3duZXIpOwomIzQzO30KJiM0MzsKIC8qKgogICogc2VjdXJpdHlfY2FwZ2V0KCkgLSBHZXQgdGhlIGNhcGFiaWxpdHkgc2V0cyBmb3IgYSBwcm9jZXNzCiAgKiBAdGFyZ2V0OiB0YXJnZXQgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDE4ZGQyOGIyYmIxM2QuLjQ1ZWFkMThjOGYwMWEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTIxNTcsNiAmIzQzOzIxNTcsMzYgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogCQkJICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0UKJiM0MzsgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZAomIzQzOyAqIEBvcGVuZWRfYnlfb3duZXI6IHdoZXRoZXIgY2hlY2tzIG9uIG9wZW4oKSB3ZXJlIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lcgomIzQzOyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0CiYjNDM7ICoKJiM0MzsgKiBEZWNpZGUgd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBub24tcmVhZGFibGUgVk1BcyBhbmQgd3JpdGUKJiM0MzsgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uCiYjNDM7ICogVGhlIEBvcGVuZWRfYnlfb3duZXIgY2FzZSBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGgKJiM0MzsgKiBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5IGhhcHBlbnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG8KJiM0MzsgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW4KJiM0MzsgKiBtYXlfYWNjZXNzX21tKCkgYW5kIF9fcHRyYWNlX21heV9hY2Nlc3MoKS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLgomIzQzOyAqCiYjNDM7ICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2VzbiYjMzk7dCBtYWtlIHNlbnNlIGhlcmUsIHNpbmNlIHdlIGNhbiYjMzk7dAomIzQzOyAqIHRlbGwgd2hldGhlciBGT0xMX0ZPUkNFIG1hdHRlcnMgZm9yIHRoZSBhY2Nlc3NlZCBWTUFzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgc2VsaW51eF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkOwomIzQzOwl1MzIgc2lkOwomIzQzOwomIzQzOwlpZiAoIW9wZW5lZF9ieV9vd25lcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwlzaWQgPSBjcmVkX3NpZChzdWJqZWN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIDAsICZhbXA7YXZkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHNlbGludXhfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJCSAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpCiB7CkBAIC03NTU4LDYgJiM0Mzs3NTg4LDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAogCUxTTV9IT09LX0lOSVQocHRyYWNlX2FjY2Vzc19jaGVjaywgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKSwKIAlMU01fSE9PS19JTklUKHB0cmFjZV90cmFjZW1lLCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKSwKJiM0MzsJTFNNX0hPT0tfSU5JVChtZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSksCiAJTFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSwKIAlMU01fSE9PS19JTklUKGNhcHNldCwgc2VsaW51eF9jYXBzZXQpLAogCUxTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyAmYW1wOyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpczogdGhpcyBwYXRjaCwgcmVsYXRlZCB0byBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgcHJvYyBmaWxlc3lzdGVtLCBpcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYnV0IHdlIG5lZWQgdG8gYmUgc21hcnQgYWJvdXQgaXQuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gVGhlIGRpZmYgZm9jdXNlcyBvbiBgZnMvcHJvYy9iYXNlLmNgIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rLCBgbWVtX2ZvbGxfZm9yY2VgLCBhbG9uZyB3aXRoIHJlbGF0ZWQgc2VjdXJpdHkgY2hlY2tzLiBTcGVjaWZpY2FsbHksIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUgYXJlIGBtZW1fb3BlbmAsIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCwgYG1lbV9yd2AsIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBpbiBgZnMvcHJvYy9iYXNlLmNgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZWAgYW5kIHRoZSBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZWAgaG9vayBpbmRpY2F0ZXMgdGhhdCBzZWN1cml0eSBwZXJtaXNzaW9ucyBhcmUgcGxheWluZyBhIHJvbGUuCgpGcm9tIGBmcy9wcm9jL2Jhc2UuY2AsIGl0IGxvb2tzIGxpa2UgYG1lbV9vcGVuYCBhbGxvY2F0ZXMgYSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIChgbWVtX3ByaXZhdGVgKSBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIGEgZmlsZS4gQ3JpdGljYWxseSwgaXQgYXBwZWFycyB0aGF0IHRoaXMgc3RydWN0dXJlIHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIG1tIHN0cnVjdCBhbmQgaGFzIGEgZmxhZywgYG9wZW5lZF9ieV9vd25lcmAuIFRoZSBzZWN1cml0eSBjaGVjayAoYHByb2NfbWVtX2ZvbGxfZm9yY2VgKSBpcyB0aGVuIGV2YWx1YXRlZCBiYXNlZCBvbiB0aGlzIGZsYWcgYW5kIHRoZSBjYWxsaW5nIGNyZWRlbnRpYWxzLiBgbWVtX3J3YCB0aGVuIHJldHJpZXZlcyB0aGlzIHByaXZhdGUgZGF0YS4gQW5kIG9uIHJlbGVhc2UsIHRoZSBtbSBzdHJ1Y3R1cmUgaXMgZHJvcHBlZCBhbmQgdGhlIHByaXZhdGUgZGF0YSBmcmVlZC4KClRoZSBgbWVtX2ZvbGxfZm9yY2VgIGhvb2sgaXRzZWxmLCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggU0VMaW51eCwgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGJlY2F1c2UgaXQgbG9va3MgbGlrZSB3ZSBtYXkgYmUgYWJsZSB0byBpbmZsdWVuY2UgdGhpcyBjaGVjayBieSBtYW5pcHVsYXRpbmcgY3JlZGVudGlhbHMgb3IgdGhlIGBvcGVuZWRfYnlfb3duZXJgIGZsYWcuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgaW1wYWN0IHRoaXMgaGFzIG9uIHRoZSBzeXN0ZW0sIHNvIEkgc2hvdWxkIG5vdyBkaXZlIGRlZXBlciBpbnRvIGBmcy9wcm9jL2Jhc2UuY2AgYW5kIGFueSByZWxhdGVkIGZpbGVzLiBVc2luZyBncmVwLCBvciBzaW1wbHkgcmVhZGluZyB0aGUgY29kZSwgSSBjYW4gbG9vayBmb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2Ugb3IgZXhwb3NlIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB1c2VyIHNwYWNlLiBUaGlzIHdpbGwgaGVscCBpbmZvcm0gdGFyZ2V0IHNlbGVjdGlvbiBmb3IgZm9jdXMgc3ltYm9sIGV4dHJhY3Rpb24gYW5kIGZ1enppbmcgc3RyYXRlZ2llcy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBvcGVuZWRfYnlfb3duZXJgIGlzIHNldCBhbmQgaG93IHRoZSBzZWN1cml0eSBjaGVjayBpcyB1c2VkIHRvIGdhdGUgYWNjZXNzLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gY3JlZGVudGlhbHMsIG93bmVyc2hpcCwgYW5kIG1lbW9yeSBhY2Nlc3MgbWlnaHQgeWllbGQgc29tZSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJvY19tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTg2MT1zdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTg3Ni1cbmZzL3Byb2MvYmFzZS5jOjg3NzpzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmZzL3Byb2MvYmFzZS5jLTg3OC17XG4tLVxuZnMvcHJvYy9iYXNlLmM9OTAzPXN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL2Jhc2UuYy05MjQtXHRmbGFncyA9IHdyaXRlID8gRk9MTF9XUklURSA6IDA7XG5mcy9wcm9jL2Jhc2UuYzo5MjU6XHRpZiAocHJvY19tZW1fZm9sbF9mb3JjZShmaWxlLCBtbSkpXG5mcy9wcm9jL2Jhc2UuYy05MjYtXHRcdGZsYWdzIHw9IEZPTExfRk9SQ0U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcyMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIGBmcy9wcm9jL2Jhc2UuY2AgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLCBgcHJvY19tZW1fb3BlcmF0aW9uc2AsIGFuZCBgX19tZW1fb3BlbmAgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmVhIG9mIGludGVyZXN0IGlzIGxpbmVzIDg0OCB0aHJvdWdoIDk5NCBpbiBgZnMvcHJvYy9iYXNlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHV0aWxpemUgYW55IG9mIHRoZXNlIHRoaW5ncy4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBhbnkgY3Jvc3MtcmVmZXJlbmNlcyB0byBnYWluIGNvbXBsZXRlIGNsYXJpdHkuIEl0IGNvdWxkIHJldmVhbCBzb21lIGludGVyZXN0aW5nIHVzYWdlIHBhdHRlcm5zIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg0MDpcdHN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXG4gODQxOlx0e1xuIDg0MjpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBtb2RlKTtcbiA4NDM6XHRcbiA4NDQ6XHRcdGlmIChJU19FUlJfT1JfTlVMTChtbSkpXG4gODQ1Olx0XHRcdHJldHVybiBtbSA/IFBUUl9FUlIobW0pIDogLUVTUkNIO1xuIDg0NjpcdFxuIDg0NzpcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBtbTtcbiA4NDg6XHRcdHJldHVybiAwO1xuIDg0OTpcdH1cbiA4NTA6XHRcbiA4NTE6XHQvKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cbiA4NTI6XHRzdHJ1Y3QgbWVtX3ByaXZhdGUge1xuIDg1MzpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XG4gODU0Olx0XHQvKlxuIDg1NTpcdFx0ICogV2FzIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIG9uIG9wZW4gYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyIHVzZWRcbiA4NTY6XHRcdCAqIHRoZSBzYW1lIE1NIChpbnRyb3NwZWN0aW9uKT9cbiA4NTc6XHRcdCAqL1xuIDg1ODpcdFx0Ym9vbCBvcGVuZWRfYnlfb3duZXI7XG4gODU5Olx0fTtcbiA4NjA6XHRcbiA4NjE6XHRzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDg2MjpcdHtcbiA4NjM6XHRcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiBfX2ZyZWUoa2ZyZWUpID0ga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKTtcbiA4NjQ6XHRcbiA4NjU6XHRcdGlmICghcHJpdilcbiA4NjY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODY3Olx0XHRpZiAoV0FSTl9PTl9PTkNFKCEoZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX1VOU0lHTkVEX09GRlNFVCkpKVxuIDg2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA4Njk6XHRcdHByaXYtXHUwMDNlbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xuIDg3MDpcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXHUwMDNlbW0pKVxuIDg3MTpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2VtbSA/IFBUUl9FUlIocHJpdi1cdTAwM2VtbSkgOiAtRVNSQ0g7XG4gODcyOlx0XHRwcml2LVx1MDAzZW9wZW5lZF9ieV9vd25lciA9IHByaXYtXHUwMDNlbW0gPT0gY3VycmVudC1cdTAwM2VtbTtcbiA4NzM6XHRcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XG4gODc0Olx0XHRyZXR1cm4gMDtcbiA4NzU6XHR9XG4gODc2Olx0XG4gODc3Olx0c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gODc4Olx0e1xuIDg3OTpcdFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gODgwOlx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4gODgxOlx0XHRib29sIHB0cmFjZV9hY3RpdmUgPSBmYWxzZTtcbiA4ODI6XHRcbiA4ODM6XHRcdHN3aXRjaCAocHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUpIHtcbiA4ODQ6XHRcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfTkVWRVI6XG4gODg1Olx0XHRcdHJldHVybiBmYWxzZTtcbiA4ODY6XHRcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFOlxuIDg4NzpcdFx0XHR0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlX2lub2RlKGZpbGUpKTtcbiA4ODg6XHRcdFx0aWYgKHRhc2spIHtcbiA4ODk6XHRcdFx0XHRwdHJhY2VfYWN0aXZlID1cdFJFQURfT05DRSh0YXNrLVx1MDAzZXB0cmFjZSkgXHUwMDI2XHUwMDI2XG4gODkwOlx0XHRcdFx0XHRcdFJFQURfT05DRSh0YXNrLVx1MDAzZW1tKSA9PSBtbSBcdTAwMjZcdTAwMjZcbiA4OTE6XHRcdFx0XHRcdFx0UkVBRF9PTkNFKHRhc2stXHUwMDNlcGFyZW50KSA9PSBjdXJyZW50O1xuIDg5MjpcdFx0XHRcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcbiA4OTM6XHRcdFx0fVxuIDg5NDpcdFx0XHRpZiAoIXB0cmFjZV9hY3RpdmUpXG4gODk1Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDg5NjpcdFx0XHRicmVhaztcbiA4OTc6XHRcdGRlZmF1bHQ6XG4gODk4Olx0XHRcdGJyZWFrO1xuIDg5OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgX19tZW1fb3BlbmAgYW5kIGBtZW1fcmVsZWFzZWAgVXNhZ2UqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gYGZzL3Byb2MvYmFzZS5jYCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBfX21lbV9vcGVuYCBhbmQgYG1lbV9yZWxlYXNlYCBhcmUgdXRpbGl6ZWQuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHByb2MgZmlsZXN5c3RlbS4gSSBhbHJlYWR5IGtub3cgc29tZSBvZiB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGZ1bGx5IGdyb2sgdGhlaXIgaW1wYWN0IG9uIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgdGhleSByZWxhdGUgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBvcHRpbWl6YXRpb25zIGluIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGNvbXByZWhlbnNpdmVseSB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBvcGVucywgdXNlcywgYW5kIHJlbGVhc2VzIG1lbW9yeS4gR290dGEgbG9vayBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyB0aGF0IGEgY2FzdWFsIGdsYW5jZSBtaWdodCBtaXNzLiBTbywgSSYjMzk7bSBub3QganVzdCBsb29raW5nIGluIGBmcy9wcm9jL2Jhc2UuY2Ag4oCTIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBUaW1lIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGVpciB1c2VzIHRocm91Z2hvdXQgdGhlIGtlcm5lbCBjb2RlYmFzZSwgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgZ29hbCBpcyBhIHJvY2stc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBmdW5jdGlvbnMmIzM5OyByb2xlIGFuZCBpbXBhY3QgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoX19tZW1fb3BlbnxtZW1fcmVsZWFzZSkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz04MTg9c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbi0tXG5mcy9wcm9jL2Jhc2UuYy04MzktXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbmZzL3Byb2MvYmFzZS5jLTg0MS17XG4tLVxuZnMvcHJvYy9iYXNlLmM9OTczPWxvZmZfdCBtZW1fbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTk4OC1cbmZzL3Byb2MvYmFzZS5jOjk4OTpzdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9iYXNlLmMtOTkwLXtcbi0tXG5mcy9wcm9jL2Jhc2UuYy05OTYtXG5mcy9wcm9jL2Jhc2UuYzo5OTc6c3RhdGljIGludCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy05OTgte1xuLS1cbmZzL3Byb2MvYmFzZS5jPTEwMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0xMDEwLVx0Lm9wZW5cdFx0PSBtZW1fb3BlbixcbmZzL3Byb2MvYmFzZS5jOjEwMTE6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG5mcy9wcm9jL2Jhc2UuYy0xMDEyLVx0LmZvcF9mbGFnc1x0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxuLS1cbmZzL3Byb2MvYmFzZS5jPTEwMTU9c3RhdGljIGludCBlbnZpcm9uX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy0xMDE2LXtcbmZzL3Byb2MvYmFzZS5jOjEwMTc6XHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRCk7XG5mcy9wcm9jL2Jhc2UuYy0xMDE4LX1cbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfZW52aXJvbl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTEwODYtXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcbmZzL3Byb2MvYmFzZS5jOjEwODc6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbmZzL3Byb2MvYmFzZS5jLTEwODgtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMDkwPXN0YXRpYyBpbnQgYXV4dl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9iYXNlLmMtMTA5MS17XG5mcy9wcm9jL2Jhc2UuYzoxMDkyOlx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX1JFQURfRlNDUkVEUyk7XG5mcy9wcm9jL2Jhc2UuYy0xMDkzLX1cbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMTEwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfYXV4dl9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTExMTMtXHQubGxzZWVrXHRcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcbmZzL3Byb2MvYmFzZS5jOjExMTQ6XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbmZzL3Byb2MvYmFzZS5jLTExMTUtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0yNzcxPXN0YXRpYyBpbnQgcHJvY19waWRfYXR0cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTI3NzMtXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XG5mcy9wcm9jL2Jhc2UuYzoyNzc0Olx0X19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcbmZzL3Byb2MvYmFzZS5jLTI3NzUtXHRyZXR1cm4gMDtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0yODU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX2F0dHJfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0yODYxLVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG5mcy9wcm9jL2Jhc2UuYzoyODYyOlx0LnJlbGVhc2VcdD0gbWVtX3JlbGVhc2UsXG5mcy9wcm9jL2Jhc2UuYy0yODYzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgTWVtb3J5IEFjY2VzcyBNZWNoYW5pc21zKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGEgc2hpZnQgaW4gaG93IG1lbW9yeSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgL3Byb2MvJmx0O3BpZCZndDsvbWVtYC4gSXQgc2VlbXMgdGhhdCB0aGUgbGVnYWN5IGZ1bmN0aW9ucyBgX19tZW1fb3BlbmAgYW5kIGBtZW1fcmVsZWFzZWAg4oCTIHdoaWNoIHVsdGltYXRlbHkgaW52b2x2ZSBgbW1kcm9wKGZpbGUtJmd0O3ByaXZhdGVfZGF0YSlgIOKAkyBhcmUgc3RpbGwgdXNlZCBieSBgZW52aXJvbl9vcGVuYCwgYGF1eHZfb3BlbmAsIGFuZCBgcHJvY19waWRfYXR0cl9vcGVuYC4gSG93ZXZlciwgYHByb2NfbWVtX29wZXJhdGlvbnNgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXdlciBgbWVtX29wZW5gIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCwgd2hpY2ggbWFuYWdlcyBhIGBzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXZgLiBUaGlzIGBwcml2YCBpcyB0aGVuIHVucGFja2VkIGluIGZ1bmN0aW9ucyBsaWtlIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCBhbmQgYG1lbV9yd2AgYXMgYGZpbGUtJmd0O3ByaXZhdGVfZGF0YWAuCgoqKkxTTSBIb29rIGFuZCBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKQWhhLCBhbmQgaGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3Rpbmc6IGEgbmV3IExTTSBob29rLCBgbWVtX2ZvbGxfZm9yY2VgLCBoYXMgcG9wcGVkIHVwIGluIGJvdGggYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGFuZCBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGNvZGU/IEFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gT3BlbmluZyBhbmQgaW50ZXJhY3Rpbmcgd2l0aCBgL3Byb2MvJmx0O3BpZCZndDsvbWVtYCDigJMgcmVhZGluZyBmcm9tIGFuZCB3cml0aW5nIHRvIGl0IOKAkyBpcyBhIGZ1bmRhbWVudGFsIGFuZCB3ZWxsLWVzdGFibGlzaGVkIHBhcnQgb2YgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcHJvY2ZzLCBWRlMsIGFuZCB0aGUgc2VjdXJpdHkvc2VsaW51eCBmcmFtZXdvcmtzIGhlcmUuIEdpdmVuIHRoYXQgdGhpcyBpcyBpbiBzdWNoIGNydWNpYWwgc3Vic3lzdGVtcywgbXkgaW5zdGluY3Qgc2NyZWFtcyB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmcuCgoqKkNvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKTm93LCBiZWZvcmUganVtcGluZyBpbiwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHN1YnN5c3RlbXMgYXJlIGVuYWJsZWQgaW4gYSB0eXBpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrOgoKKiAgIGBmcy9wcm9jL2Jhc2UuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1BST0NfRlNgIGlzIGVuYWJsZWQuCiogICBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NFQ1VSSVRZYCBpcyBlbmFibGVkLgoqICAgYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhgIGlzIGVuYWJsZWQuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYFBST0NfRlNgLCBgU0VDVVJJVFlgLCBhbmQgYFNFQ1VSSVRZX1NFTElOVVhgIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U0VMaW51eCBBVkMgU3RhdGlzdGljc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0ODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgU0VMaW51eCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFNFQ1VSSVRZX1NFTElOVVhgLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGBzZWN1cml0eS9zZWxpbnV4YCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlaXIgZGVzY3JpcHRpb25zLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSB0aGVyZSBhbmQgZXhhbWluZSBgc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnYCBkaXJlY3RseS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgY29uZGl0aW9ucyBvciBvdGhlciBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGBTRUNVUklUWV9TRUxJTlVYYCB0byBiZSBhdmFpbGFibGUgYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIG5lZWRpbmcgdG8gdW5kZXJzdGFuZCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMgb3Igb3RoZXIga2VybmVsIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7c2VjdXJpdHkvc2VsaW51eC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7U0VMaW51eCBTdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIFNFQ1VSSVRZX05FVFdPUksgXHUwMDI2XHUwMDI2IEFVRElUIFx1MDAyNlx1MDAyNiBORVQgXHUwMDI2XHUwMDI2IElORVRcbiAgIDU6XHRcdHNlbGVjdCBORVRXT1JLX1NFQ01BUktcbiAgIDY6XHRcdGRlZmF1bHQgblxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIHNlbGVjdHMgU2VjdXJpdHktRW5oYW5jZWQgTGludXggKFNFTGludXgpLlxuICAgOTpcdFx0ICBZb3Ugd2lsbCBhbHNvIG5lZWQgYSBwb2xpY3kgY29uZmlndXJhdGlvbiBhbmQgYSBsYWJlbGVkIGZpbGVzeXN0ZW0uXG4gIDEwOlx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNXG4gIDEzOlx0XHRib29sIFwmIzM0O1NFTGludXggYm9vdCBwYXJhbWV0ZXJcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gU0VDVVJJVFlfU0VMSU5VWFxuICAxNTpcdFx0ZGVmYXVsdCBuXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgYSBrZXJuZWwgcGFyYW1ldGVyICYjMzk7c2VsaW51eCYjMzk7LCB3aGljaCBhbGxvd3MgU0VMaW51eFxuICAxODpcdFx0ICB0byBiZSBkaXNhYmxlZCBhdCBib290LiAgSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIFNFTGludXhcbiAgMTk6XHRcdCAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgZGlzYWJsZWQgd2l0aCBzZWxpbnV4PTAgb24gdGhlIGtlcm5lbFxuICAyMDpcdFx0ICBjb21tYW5kIGxpbmUuICBUaGUgcHVycG9zZSBvZiB0aGlzIG9wdGlvbiBpcyB0byBhbGxvdyBhIHNpbmdsZVxuICAyMTpcdFx0ICBrZXJuZWwgaW1hZ2UgdG8gYmUgZGlzdHJpYnV0ZWQgd2l0aCBTRUxpbnV4IGJ1aWx0IGluLCBidXQgbm90XG4gIDIyOlx0XHQgIG5lY2Vzc2FyaWx5IGVuYWJsZWQuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gIDI1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDczCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBQcm9jZnMgYW5kIE1lbW9yeSBPdmVycmlkZSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgcHJvYyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGBwcm9jX21lbV9mb3JjZV9vdmVycmlkZWAgb3B0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGZzL3Byb2MvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBwcm9jZnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IGBwcm9jX21lbV9mb3JjZV9vdmVycmlkZWAgYmVoYXZlcywgb3IgaWYgaXQmIzM5O3MgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQUk9DX01FTV9GT1JDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcbmZzL3Byb2MvYmFzZS5jOjEyMjpcdFBST0NfTUVNX0ZPUkNFX0FMV0FZUyxcbmZzL3Byb2MvYmFzZS5jOjEyMzpcdFBST0NfTUVNX0ZPUkNFX1BUUkFDRSxcbmZzL3Byb2MvYmFzZS5jOjEyNDpcdFBST0NfTUVNX0ZPUkNFX05FVkVSXG5mcy9wcm9jL2Jhc2UuYy0xMjUtfTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cbmZzL3Byb2MvYmFzZS5jOjEyODpcdElTX0VOQUJMRUQoQ09ORklHX1BST0NfTUVNX05PX0ZPUkNFKSA/IFBST0NfTUVNX0ZPUkNFX05FVkVSIDpcbmZzL3Byb2MvYmFzZS5jOjEyOTpcdElTX0VOQUJMRUQoQ09ORklHX1BST0NfTUVNX0ZPUkNFX1BUUkFDRSkgPyBQUk9DX01FTV9GT1JDRV9QVFJBQ0UgOlxuZnMvcHJvYy9iYXNlLmM6MTMwOlx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTO1xuZnMvcHJvYy9iYXNlLmMtMTMxLVxuZnMvcHJvYy9iYXNlLmM9MTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc3RhbnRfdGFibGUgcHJvY19tZW1fZm9yY2VfdGFibGVbXSBfX2luaXRjb25zdCA9IHtcbmZzL3Byb2MvYmFzZS5jOjEzMzpcdHsgXCYjMzQ7YWx3YXlzXCYjMzQ7LCBQUk9DX01FTV9GT1JDRV9BTFdBWVMgfSxcbmZzL3Byb2MvYmFzZS5jOjEzNDpcdHsgXCYjMzQ7cHRyYWNlXCYjMzQ7LCBQUk9DX01FTV9GT1JDRV9QVFJBQ0UgfSxcbmZzL3Byb2MvYmFzZS5jOjEzNTpcdHsgXCYjMzQ7bmV2ZXJcJiMzNDssIFBST0NfTUVNX0ZPUkNFX05FVkVSIH0sXG5mcy9wcm9jL2Jhc2UuYy0xMzYtXHR7IH1cbi0tXG5mcy9wcm9jL2Jhc2UuYz04Nzc9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuZnMvcHJvYy9iYXNlLmMtODgzLVx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xuZnMvcHJvYy9iYXNlLmM6ODg0Olx0Y2FzZSBQUk9DX01FTV9GT1JDRV9ORVZFUjpcbmZzL3Byb2MvYmFzZS5jLTg4NS1cdFx0cmV0dXJuIGZhbHNlO1xuZnMvcHJvYy9iYXNlLmM6ODg2Olx0Y2FzZSBQUk9DX01FTV9GT1JDRV9QVFJBQ0U6XG5mcy9wcm9jL2Jhc2UuYy04ODctXHRcdHRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGVfaW5vZGUoZmlsZSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgxMAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIFBST0NfRlMgaW4gS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgUFJPQ19GUyBpcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBwbGFjZSB0byBjaGVjayB0aGF0IGlzIGdvaW5nIHRvIGJlIHRoZSBgZnMvcHJvYy9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgb3IgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIHNldCB0byBlbmFibGUgb3IgZGlzYWJsZSBpdC4gVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCBpbiB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZ5aW5nIGFueSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuIEdvdHRhIHN0YXJ0IHdpdGggdGhlIHNvdXJjZSBvZiB0cnV0aCwgdGhlIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUk9DXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcbmZzL3Byb2MvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmZzL3Byb2MvS2NvbmZpZy0zMS1cbmZzL3Byb2MvS2NvbmZpZzozMjpjb25maWcgUFJPQ19LQ09SRVxuZnMvcHJvYy9LY29uZmlnLTMzLVx0Ym9vbCBcJiMzNDsvcHJvYy9rY29yZSBzdXBwb3J0XCYjMzQ7IGlmICFBUk1cbi0tXG5mcy9wcm9jL0tjb25maWctNDAtXG5mcy9wcm9jL0tjb25maWc6NDE6Y29uZmlnIFBST0NfVk1DT1JFXG5mcy9wcm9jL0tjb25maWctNDItXHRib29sIFwmIzM0Oy9wcm9jL3ZtY29yZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvcHJvYy9LY29uZmlnLTQ3LVxuZnMvcHJvYy9LY29uZmlnOjQ4OmNvbmZpZyBQUk9DX1ZNQ09SRV9ERVZJQ0VfRFVNUFxuZnMvcHJvYy9LY29uZmlnLTQ5LVx0Ym9vbCBcJiMzNDtEZXZpY2UgSGFyZHdhcmUvRmlybXdhcmUgTG9nIENvbGxlY3Rpb25cJiMzNDtcbi0tXG5mcy9wcm9jL0tjb25maWc9NjQ9Y29uZmlnIE5FRURfUFJPQ19WTUNPUkVfREVWSUNFX1JBTVxuLS1cbmZzL3Byb2MvS2NvbmZpZy02Ni1cbmZzL3Byb2MvS2NvbmZpZzo2Nzpjb25maWcgUFJPQ19WTUNPUkVfREVWSUNFX1JBTVxuZnMvcHJvYy9LY29uZmlnLTY4LVx0ZGVmX2Jvb2wgeVxuLS1cbmZzL3Byb2MvS2NvbmZpZy04Mi1cbmZzL3Byb2MvS2NvbmZpZzo4Mzpjb25maWcgUFJPQ19TWVNDVExcbmZzL3Byb2MvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U3lzY3RsIHN1cHBvcnQgKC9wcm9jL3N5cylcJiMzNDsgaWYgRVhQRVJUXG4tLVxuZnMvcHJvYy9LY29uZmlnLTEwMS1cbmZzL3Byb2MvS2NvbmZpZzoxMDI6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXG5mcy9wcm9jL0tjb25maWctMTAzLSBcdGRlZmF1bHQgeVxuLS1cbmZzL3Byb2MvS2NvbmZpZy0xMTEtXG5mcy9wcm9jL0tjb25maWc6MTEyOmNvbmZpZyBQUk9DX0NISUxEUkVOXG5mcy9wcm9jL0tjb25maWctMTEzLVx0Ym9vbCBcJiMzNDtJbmNsdWRlIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS90YXNrL1x1MDAzY3RpZFx1MDAzZS9jaGlsZHJlbiBmaWxlXCYjMzQ7XG4tLVxuZnMvcHJvYy9LY29uZmlnLTEyMi1cbmZzL3Byb2MvS2NvbmZpZzoxMjM6Y29uZmlnIFBST0NfUElEX0FSQ0hfU1RBVFVTXG5mcy9wcm9jL0tjb25maWctMTI0LVx0ZGVmX2Jvb2wgblxuLS1cbmZzL3Byb2MvS2NvbmZpZy0xMjYtXG5mcy9wcm9jL0tjb25maWc6MTI3OmNvbmZpZyBQUk9DX0NQVV9SRVNDVFJMXG5mcy9wcm9jL0tjb25maWctMTI4LVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU1NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipTZWN1cml0eSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzZWN1cml0eSBhbmQgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGVzLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1NFQ1VSSVRZYCBzZXR0aW5nLCBhbmQgaXRzIHZhcmlvdXMgc3ViLW9wdGlvbnMuIENhbiYjMzk7dCBqdXN0IGFzc3VtZSBpdCYjMzk7cyBzZXQgcmlnaHQuIE15IGd1dCB0ZWxscyBtZSB0aGlzIHBhcnRpY3VsYXIgY2hhbmdlIG1pZ2h0IHRvdWNoIG9uIHNvbWUgc2VjdXJpdHkgbW9kdWxlcywgc28gSSBuZWVkIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQmIzM5O3MgZWFzeSB0byBtaXNzIHNvbWV0aGluZyB3aGVuIGp1Z2dsaW5nIHRoZXNlIGRldGFpbHMsIGFuZCBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBpbiBLY29uZmlnIGNhbiBjYXRjaCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCB0aGUgc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB0aGUgc3RhZ2Ugd2hlcmUgdGhvcm91Z2huZXNzIHBheXMgb2ZmLiBJJiMzOTtkIGhhdGUgdG8gc3VibWl0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgc3VidGxlIHZ1bG5lcmFiaWxpdHkgZHVlIHRvIGEgc2ltcGxlIG92ZXJzaWdodCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xuLS1cbnNlY3VyaXR5L0tjb25maWctNzItXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2N1cyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyB0b3VjaGVkLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBtZW1fb3BlbmAsIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCwgYG1lbV9yd2AgYW5kIHRoZSBhZGRpdGlvbiBvZiBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCwgYHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlYCwgYW5kIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgdGhlaXIgc2NvcGUuIEFyZSB0aGVzZSBnZW5lcmFsLXB1cnBvc2UgY29tcG9uZW50cyBvciBzb21ldGhpbmcgbW9yZSB0YXJnZXRlZD8gR29vZCwgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYWxsIHRpZ2h0bHkgY291cGxlZCB3aXRoIGAvcHJvYy8mbHQ7cGlkJmd0Oy9tZW1gIGludGVyYWN0aW9uIGFuZCB0aGUgU0VMaW51eCBob29rcyBkZWFsaW5nIHdpdGggRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIGEgdmVyeSBuYXJyb3cgc2V0IG9mIGNoYW5nZXMsIG5vdCB0b3VjaGluZyB0aGUgY29yZSBhbGxvY2F0b3JzLCB0cmFwIGhhbmRsZXJzLCBvciBzeXNjYWxsIGVudHJ5cG9pbnRzLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QuIFRoaXMgc3VnZ2VzdHMgdGhpcyBpcyBmb2N1c2VkIHdvcmsuCgpOb3csIGxldCYjMzk7cyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJiMzOTtsbCBmb2N1cyBvbiBgbWVtX3JlYWRgIGFuZCBgbWVtX3dyaXRlYC4gRnJvbSBgZnMvcHJvYy9iYXNlLmNgIEkgY2FuIHNlZSB0aGF0IGBtZW1fcndgIGlzIGNhbGxlZCBieSBib3RoLiBIbW0sIEkga25vdyB0aGF0IGBtZW1fcndgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCBjb25maXJtcyBteSBhc3N1bXB0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXMgaGFwcGVuaW5nIGluIHRoZSBmcy9wcm9jL2Jhc2UuYyBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgOTAwIHRvIDk4MC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTAwOlx0XHRyZXR1cm4gc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoZmlsZS1cdTAwM2VmX2NyZWQsIHByaXYtXHUwMDNlb3BlbmVkX2J5X293bmVyKSA9PSAwO1xuIDkwMTpcdH1cbiA5MDI6XHRcbiA5MDM6XHRzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gOTA0Olx0XHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcbiA5MDU6XHR7XG4gOTA2Olx0XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA5MDc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cdTAwM2VtbTtcbiA5MDg6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zO1xuIDkwOTpcdFx0c3NpemVfdCBjb3BpZWQ7XG4gOTEwOlx0XHRjaGFyICpwYWdlO1xuIDkxMTpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuIDkxMjpcdFxuIDkxMzpcdFx0aWYgKCFtbSlcbiA5MTQ6XHRcdFx0cmV0dXJuIDA7XG4gOTE1Olx0XG4gOTE2Olx0XHRwYWdlID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIDkxNzpcdFx0aWYgKCFwYWdlKVxuIDkxODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5MTk6XHRcbiA5MjA6XHRcdGNvcGllZCA9IDA7XG4gOTIxOlx0XHRpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSlcbiA5MjI6XHRcdFx0Z290byBmcmVlO1xuIDkyMzpcdFxuIDkyNDpcdFx0ZmxhZ3MgPSB3cml0ZSA/IEZPTExfV1JJVEUgOiAwO1xuIDkyNTpcdFx0aWYgKHByb2NfbWVtX2ZvbGxfZm9yY2UoZmlsZSwgbW0pKVxuIDkyNjpcdFx0XHRmbGFncyB8PSBGT0xMX0ZPUkNFO1xuIDkyNzpcdFxuIDkyODpcdFx0d2hpbGUgKGNvdW50IFx1MDAzZSAwKSB7XG4gOTI5Olx0XHRcdHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0VfU0laRSk7XG4gOTMwOlx0XG4gOTMxOlx0XHRcdGlmICh3cml0ZSBcdTAwMjZcdTAwMjYgY29weV9mcm9tX3VzZXIocGFnZSwgYnVmLCB0aGlzX2xlbikpIHtcbiA5MzI6XHRcdFx0XHRjb3BpZWQgPSAtRUZBVUxUO1xuIDkzMzpcdFx0XHRcdGJyZWFrO1xuIDkzNDpcdFx0XHR9XG4gOTM1Olx0XG4gOTM2Olx0XHRcdHRoaXNfbGVuID0gYWNjZXNzX3JlbW90ZV92bShtbSwgYWRkciwgcGFnZSwgdGhpc19sZW4sIGZsYWdzKTtcbiA5Mzc6XHRcdFx0aWYgKCF0aGlzX2xlbikge1xuIDkzODpcdFx0XHRcdGlmICghY29waWVkKVxuIDkzOTpcdFx0XHRcdFx0Y29waWVkID0gLUVJTztcbiA5NDA6XHRcdFx0XHRicmVhaztcbiA5NDE6XHRcdFx0fVxuIDk0MjpcdFxuIDk0MzpcdFx0XHRpZiAoIXdyaXRlIFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIoYnVmLCBwYWdlLCB0aGlzX2xlbikpIHtcbiA5NDQ6XHRcdFx0XHRjb3BpZWQgPSAtRUZBVUxUO1xuIDk0NTpcdFx0XHRcdGJyZWFrO1xuIDk0NjpcdFx0XHR9XG4gOTQ3Olx0XG4gOTQ4Olx0XHRcdGJ1ZiAmIzQzOz0gdGhpc19sZW47XG4gOTQ5Olx0XHRcdGFkZHIgJiM0Mzs9IHRoaXNfbGVuO1xuIDk1MDpcdFx0XHRjb3BpZWQgJiM0Mzs9IHRoaXNfbGVuO1xuIDk1MTpcdFx0XHRjb3VudCAtPSB0aGlzX2xlbjtcbiA5NTI6XHRcdH1cbiA5NTM6XHRcdCpwcG9zID0gYWRkcjtcbiA5NTQ6XHRcbiA5NTU6XHRcdG1tcHV0KG1tKTtcbiA5NTY6XHRmcmVlOlxuIDk1NzpcdFx0a2ZyZWUocGFnZSk7XG4gOTU4Olx0XHRyZXR1cm4gY29waWVkO1xuIDk1OTpcdH1cbiA5NjA6XHRcbiA5NjE6XHRzdGF0aWMgc3NpemVfdCBtZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiA5NjI6XHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiA5NjM6XHR7XG4gOTY0Olx0XHRyZXR1cm4gbWVtX3J3KGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MsIDApO1xuIDk2NTpcdH1cbiA5NjY6XHRcbiA5Njc6XHRzdGF0aWMgc3NpemVfdCBtZW1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gOTY4Olx0XHRcdFx0IHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIDk2OTpcdHtcbiA5NzA6XHRcdHJldHVybiBtZW1fcncoZmlsZSwgKGNoYXIgX191c2VyKilidWYsIGNvdW50LCBwcG9zLCAxKTtcbiA5NzE6XHR9XG4gOTcyOlx0XG4gOTczOlx0bG9mZl90IG1lbV9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpXG4gOTc0Olx0e1xuIDk3NTpcdFx0c3dpdGNoIChvcmlnKSB7XG4gOTc2Olx0XHRjYXNlIDA6XG4gOTc3Olx0XHRcdGZpbGUtXHUwMDNlZl9wb3MgPSBvZmZzZXQ7XG4gOTc4Olx0XHRcdGJyZWFrO1xuIDk3OTpcdFx0Y2FzZSAxOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4NAoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiAzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgUmVhc29uaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgcmVsZXZhbnQgc3ltYm9scy4gSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gdGhlc2UgYEZvY3VzU3ltYm9sc2Ag4oCTIGBtZW1fb3BlbmAsIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCwgYG1lbV9yd2AsIHRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBob3VzZWtlZXBpbmcsIGFuZCB0aGUgU0VMaW51eCB2YXJpYW50LCBgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2VgIGFuZCBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZWAuIFRoYXQgbG9va3MgcmlnaHQuIEkgYWxzbyBkb3VibGUtY2hlY2tlZCB0aGUgcmVxdWlyZWQgYEVuYWJsZUNvbmZpZ3NgOiBgUFJPQ19GU2AsIGBTRUNVUklUWWAsIGFuZCBgU0VDVVJJVFlfU0VMSU5VWGAuIEdvb2QsIHRob3NlIGFyZSBhbGwgaW4gcGxhY2UuCgpOb3cgZm9yIHRoZSBjb3JlIHJlYXNvbmluZy4gVGhlIHJlYWNoYWJpbGl0eSBhbmFseXNpcyB0ZWxscyBtZSB0aGF0IGEgdXNlci1zcGFjZSBwcm9ncmFtIGNhbiBpbmRlZWQgb3BlbiwgcmVhZCwgYW5kIHdyaXRlIHRvIGAvcHJvYy8kcGlkL21lbWAgaW4gUUVNVS4gQ3J1Y2lhbGx5LCBJIHNlZSB0aGF0IHRoZSBTRUxpbnV4IGhvb2tzICphcmUqIGV4ZWN1dGVkIHdoZW4gYG1lbV9mb2xsX2ZvcmNlYCBpcyB0cmlnZ2VyZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSBuZWNlc3NhcnkgZXhlY3V0YWJsZSBjb2RlIGluIGBmcy9wcm9jYCBhbmQgdGhlIGBzZWN1cml0eWAgc3Vic3lzdGVtLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSB3YW50ZWQgdG8gY29uZmlybS4KClRoZSBjcml0aWNhbCBpbnNpZ2h0IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2ssIGBtZW1fZm9sbF9mb3JjZWAsIHNwZWNpZmljYWxseSBpbmNsdWRpbmcgYW4gU0VMaW51eCBpbXBsZW1lbnRhdGlvbiwgYW5kIGl0IGZ1bmRhbWVudGFsbHkgdXBkYXRlcyB0aGUgaGFuZGxpbmcgb2YgYC9wcm9jLyZsdDtwaWQmZ3Q7L21lbWAuICBJdCYjMzk7cyB3cmFwcGluZyBtZXRhZGF0YSBpbiB0aGlzIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIHN0cnVjdHVyZS4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0aGF0IGZ1enppbmcgaXMganVzdGlmaWVkLiBXZSBuZWVkIHRvIHZhbGlkYXRlIG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMsIGVuc3VyZSB0aGUgbGlmZXRpbWUgbWFuYWdlbWVudCBvZiBgbWVtX3ByaXZhdGVgIGlzIHJvYnVzdCwgYW5kIGNyaXRpY2FsbHksIGVuZm9yY2UgdGhlIHNlbWFudGljcyBvZiBgRk9MTF9GT1JDRWAuIFRoaXMgaXMgYSByaWNoIHRhcmdldCBhbmQgaGlnaGx5IHZhbHVhYmxlLiBUaW1lIHRvIHdyaXRlIHRoZSB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fb3BlbiYjMzQ7LAogICAgJiMzNDtwcm9jX21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O21lbV9ydyYjMzQ7LAogICAgJiMzNDttZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UmIzM0OywKICAgICYjMzQ7c2VsaW51eF9tZW1fZm9sbF9mb3JjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7LAogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX29wZW4mIzM0OywKICAgICYjMzQ7cHJvY19tZW1fZm9sbF9mb3JjZSYjMzQ7LAogICAgJiMzNDttZW1fcncmIzM0OywKICAgICYjMzQ7bWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X21lbV9mb2xsX2ZvcmNlJiMzNDssCiAgICAmIzM0O3NlbGludXhfbWVtX2ZvbGxfZm9yY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21lbSBvcGVyYXRpb25zIChtZW1fb3BlbiwgbWVtX3J3LCBwcm9jX21lbV9mb2xsX2ZvcmNlLCBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUpIGJ5IGludHJvZHVjaW5nIHN0cnVjdCBtZW1fcHJpdmF0ZSB0byB0cmFjayBvcGVuZXIgTU0gb3duZXJzaGlwIGFuZCBhZGRzIGEgbmV3IExTTSBob29rIChzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSkgdG8gZ292ZXJuIEZPTExfRk9SQ0UgbWVtb3J5IGFjY2Vzcy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBtZW1fZm9sbF9mb3JjZWAgYW5kIHJlcGxhY2VzIHRoZSBkaXJlY3QgYG1tX3N0cnVjdGAgcG9pbnRlciBpbiBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIG9mIGAvcHJvYy8kcGlkL21lbWAgd2l0aCBhIHNtYWxsIGNvbnRhaW5lciBgc3RydWN0IG1lbV9wcml2YXRlYCBjb250YWluaW5nIGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgLlxuXG4tIEluIGBtZW1fb3BlbigpYCwgdGhlIGhlYXAgYWxsb2NhdGlvbiBga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKWAgaGFzIGFsbCBpdHMgZmllbGRzIChgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCB0byBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLlxuLSBJbiBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSgpYCwgdGhlIHN0YWNrLWFsbG9jYXRlZCBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZGAgaXMgcGFzc2VkIGFzIGFuIG91dHB1dCBidWZmZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0KClgLCBhbmQgaXRzIGZpZWxkcyBhcmUgbm90IHJlYWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLlxuLSBObyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKHN1Y2ggYXMgbGlmZXRpbWUvZnJlZWluZyBvZiBgcHJpdmAgb3IgYG1tYCkgYXJlIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBwcm9wZXJseSBjb3ZlcmVkIGJ5IEtBU0FOLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZDUxYzNiNDQ1MDk3ZTkwOWEyZDczNTA1NTA3NDg4ODU1NTdmODAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwMToyMzowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNzgwZjgxMjU5MDUyNy4uMjk1YjIxMjAzYzdmZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9iYXNlLmMKQEAgLTg0OCwxNSAmIzQzOzg0OCwzNSBAQCBzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKQogCXJldHVybiAwOwogfQogCiYjNDM7LyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovCiYjNDM7c3RydWN0IG1lbV9wcml2YXRlIHsKJiM0MzsJc3RydWN0IG1tX3N0cnVjdCAqbW07CiYjNDM7CS8qCiYjNDM7CSAqIFdhcyB0aGUgcHRyYWNlIGFjY2VzcyBjaGVjayBvbiBvcGVuIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lciB1c2VkCiYjNDM7CSAqIHRoZSBzYW1lIE1NIChpbnRyb3NwZWN0aW9uKT8KJiM0MzsJICovCiYjNDM7CWJvb2wgb3BlbmVkX2J5X293bmVyOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewomIzQzOwlzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSk7CiYjNDM7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCWlmIChXQVJOX09OX09OQ0UoIShmaWxlLSZndDtmX29wLSZndDtmb3BfZmxhZ3MgJmFtcDsgRk9QX1VOU0lHTkVEX09GRlNFVCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfQVRUQUNIKTsKJiM0MzsJcHJpdi0mZ3Q7bW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpOwomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwocHJpdi0mZ3Q7bW0pKQomIzQzOwkJcmV0dXJuIHByaXYtJmd0O21tID8gUFRSX0VSUihwcml2LSZndDttbSkgOiAtRVNSQ0g7CiYjNDM7CXByaXYtJmd0O29wZW5lZF9ieV9vd25lciA9IHByaXYtJmd0O21tID09IGN1cnJlbnQtJmd0O21tOwomIzQzOwlmaWxlLSZndDtwcml2YXRlX2RhdGEgPSBub19mcmVlX3B0cihwcml2KTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewomIzQzOwlzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCWJvb2wgcHRyYWNlX2FjdGl2ZSA9IGZhbHNlOwogCkBAIC04NzEsMTYgJiM0Mzs4OTEsMjAgQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJCQkJCVJFQURfT05DRSh0YXNrLSZndDtwYXJlbnQpID09IGN1cnJlbnQ7CiAJCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJCX0KLQkJcmV0dXJuIHB0cmFjZV9hY3RpdmU7CiYjNDM7CQlpZiAoIXB0cmFjZV9hY3RpdmUpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlicmVhazsKIAl9CiYjNDM7CXJldHVybiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShmaWxlLSZndDtmX2NyZWQsIHByaXYtJmd0O29wZW5lZF9ieV9vd25lcikgPT0gMDsKIH0KIAogc3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSkKIHsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtJmd0O21tOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zOwogCXNzaXplX3QgY29waWVkOwogCWNoYXIgKnBhZ2U7CkBAIC05NzAsMTIgJiM0Mzs5OTQsMjEgQEAgc3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwomIzQzOwltbWRyb3AocHJpdi0mZ3Q7bW0pOwomIzQzOwlrZnJlZShwcml2KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19tZW1fb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IG1lbV9sc2VlaywKIAkucmVhZAkJPSBtZW1fcmVhZCwKIAkud3JpdGUJCT0gbWVtX3dyaXRlLAogCS5vcGVuCQk9IG1lbV9vcGVuLAotCS5yZWxlYXNlCT0gbWVtX3JlbGVhc2UsCiYjNDM7CS5yZWxlYXNlCT0gbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlLAogCS5mb3BfZmxhZ3MJPSBGT1BfVU5TSUdORURfT0ZGU0VULAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAppbmRleCA2NWM5NjA5ZWMyMDc3Li4xMmY4NGExZTZmYWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaApAQCAtMzYsNiAmIzQzOzM2LDcgQEAgTFNNX0hPT0soaW50LCAwLCBiaW5kZXJfdHJhbnNmZXJfZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sCiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCiAJIHVuc2lnbmVkIGludCBtb2RlKQogTFNNX0hPT0soaW50LCAwLCBwdHJhY2VfdHJhY2VtZSwgc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBtZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKQogTFNNX0hPT0soaW50LCAwLCBjYXBnZXQsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpCiBMU01fSE9PSyhpbnQsIDAsIGNhcHNldCwgc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li5lOGJjMmU2NDQyNDFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0zMzgsNiAmIzQzOzMzOCw3IEBAIGludCBzZWN1cml0eV9iaW5kZXJfdHJhbnNmZXJfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqZnJvbSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpOwogaW50IHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IG1vZGUpOwogaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KTsKJiM0MztpbnQgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKTsKIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCSAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCkBAIC02NzYsNiAmIzQzOzY3NywxMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKIAlyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwKJiM0MzsJCQkJCSAgYm9vbCBvcGVuZWRfYnlfb3duZXIpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCiAJCQkJICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJCQkJICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDcxYWVhOGZkZjAxNDIuLjJjZGUxZWZkYjdhNjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtNTk1LDYgJiM0Mzs1OTUsMzEgQEAgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KQogCXJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZAomIzQzOyAqIEBzdWJqZWN0OiBjcmVkZW50aWFscyB1c2luZyB3aGljaCAvcHJvYy8kcGlkL21lbSB3YXMgb3BlbmVkCiYjNDM7ICogQG9wZW5lZF9ieV9vd25lcjogd2hldGhlciBjaGVja3Mgb24gb3BlbigpIHdlcmUgYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyCiYjNDM7ICogICAgICAgICAgICAgICAgICAgaGFzIHRoZSBzYW1lIE1NIGFzIHRoZSB0YXJnZXQKJiM0MzsgKgomIzQzOyAqIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZCBmb3IgYWNjZXNzaW5nIHByb2Nlc3MgbWVtb3J5IHRocm91Z2gKJiM0MzsgKiAvcHJvYy8kcGlkL21lbS4gb3BlbmVkX2J5X293bmVyIHNpZ25hbHMgd2hldGhlciB0aGUgb3BlbmVyJiMzOTtzIE1NIHdhcyB0aGUgc2FtZQomIzQzOyAqIGFzIHRoZSB0YXJnZXQgTU0sIG1lYW5pbmcgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rIHdhcwomIzQzOyAqIGJ5cGFzc2VkIG9uIG9wZW4oKS4KJiM0MzsgKiAoQ3VycmVudCBjdXJyZW50LSZndDttbSBkb2VzIG5vdCBtYXR0ZXIgZm9yIHRoaXM7IGZvciBleGFtcGxlLCBpZiB3cml0ZSgpIGlzCiYjNDM7ICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGgKJiM0MzsgKiBvcGVuKCYjMzQ7L3Byb2Mvc2VsZi9tZW0mIzM0OyksIEBvcGVuZWRfYnlfb3duZXIgaXMgc3RpbGwgdHJ1ZS4pCiYjNDM7ICoKJiM0MzsgKiBOb3RlIHRoYXQgdGhpcyBob29rIGlzIG9ubHkgZGVzaWduZWQgdG8gYmUgdXNlZnVsIGluIHRoZSBvcGVuZWRfYnlfb3duZXIKJiM0MzsgKiBjYXNlLCB3aGVyZSB0aGUgc3ViamVjdCBjcmVkZW50aWFscyBlZmZlY3RpdmVseSBhbHNvIGRlc2NyaWJlIHRoZSBvYmplY3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiYjNDM7ICovCiYjNDM7aW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LAomIzQzOwkJCQkJICAgIGJvb2wgb3BlbmVkX2J5X293bmVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2sobWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QsIG9wZW5lZF9ieV9vd25lcik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZWN1cml0eV9jYXBnZXQoKSAtIEdldCB0aGUgY2FwYWJpbGl0eSBzZXRzIGZvciBhIHByb2Nlc3MKICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMThkZDI4YjJiYjEzZC4uNDVlYWQxOGM4ZjAxYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMjE1Nyw2ICYjNDM7MjE1NywzNiBAQCBzdGF0aWMgaW50IHNlbGludXhfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpCiAJCQkgICAgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCBOVUxMKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoKSAtIERldGVybWluZSB3aGV0aGVyIC9wcm9jLyRwaWQvbWVtIGNhbiB1c2UgRk9MTF9GT1JDRQomIzQzOyAqIEBzdWJqZWN0OiBjcmVkZW50aWFscyB1c2luZyB3aGljaCAvcHJvYy8kcGlkL21lbSB3YXMgb3BlbmVkCiYjNDM7ICogQG9wZW5lZF9ieV9vd25lcjogd2hldGhlciBjaGVja3Mgb24gb3BlbigpIHdlcmUgYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyCiYjNDM7ICogICAgICAgICAgICAgICAgICAgaGFzIHRoZSBzYW1lIE1NIGFzIHRoZSB0YXJnZXQKJiM0MzsgKgomIzQzOyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZQomIzQzOyAqIG5vbi13cml0YWJsZSBWTUFzIHZpYSAvcHJvYy9zZWxmL21lbS4KJiM0MzsgKiBUaGUgQG9wZW5lZF9ieV9vd25lciBjYXNlIG9ubHkgYXBwbGllcyB0byBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aAomIzQzOyAqIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHkgaGFwcGVucyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0bwomIzQzOyAqIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjaygpIGJlY2F1c2Ugb2YgdGhlIGludHJvc3BlY3Rpb24gZXhjZXB0aW9ucyBpbgomIzQzOyAqIG1heV9hY2Nlc3NfbW0oKSBhbmQgX19wdHJhY2VfbWF5X2FjY2VzcygpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBhbGxvd3MgYSBwcm9jZXNzIHRvIG92ZXJ3cml0ZSByZWFkLW9ubHkgY29kZSBpbiBpdHMgb3duIGFkZHJlc3Mgc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiBDcmVhdGluZyBhbiBhdWRpdCByZWNvcmQgb24gZGVuaWFsIGRvZXNuJiMzOTt0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJiMzOTt0CiYjNDM7ICogdGVsbCB3aGV0aGVyIEZPTExfRk9SQ0UgbWF0dGVycyBmb3IgdGhlIGFjY2Vzc2VkIFZNQXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7CiYjNDM7CXUzMiBzaWQ7CiYjNDM7CiYjNDM7CWlmICghb3BlbmVkX2J5X293bmVyKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXNpZCA9IGNyZWRfc2lkKHN1YmplY3QpOwomIzQzOwomIzQzOwlyZXR1cm4gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgJmFtcDthdmQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAogCQkJICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCkKIHsKQEAgLTc1NTgsNiAmIzQzOzc1ODgsNyBAQCBzdGF0aWMgc3RydWN0IHNlY3VyaXR5X2hvb2tfbGlzdCBzZWxpbnV4X2hvb2tzW10gX19yb19hZnRlcl9pbml0ID0gewogCiAJTFNNX0hPT0tfSU5JVChwdHJhY2VfYWNjZXNzX2NoZWNrLCBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2spLAogCUxTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLAomIzQzOwlMU01fSE9PS19JTklUKG1lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSwKIAlMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLAogCUxTTV9IT09LX0lOSVQoY2Fwc2V0LCBzZWxpbnV4X2NhcHNldCksCiAJTFNNX0hPT0tfSU5JVChjYXBhYmxlLCBzZWxpbnV4X2NhcGFibGUpLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBmaXJlIHVwIEtNU0FOIGZvciBhIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgKmxvb2tzKiBwcmV0dHkgY2xlYW4sIGJ1dCB3ZSBhbHdheXMgaGF2ZSB0byBiZSBtZXRpY3Vsb3VzLgoKSGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhlIGNyaXRpY2FsIHBhcnRzOgoKKiAgICoqYGZzL3Byb2MvYmFzZS5jYCoqOiBXZSYjMzk7cmUgYWRkaW5nIGEgbmV3IHN0cnVjdHVyZSwgYHN0cnVjdCBtZW1fcHJpdmF0ZWAsIHdoaWNoIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHBheSBhdHRlbnRpb24uIEl0IGNvbnRhaW5zIGEgYG1tX3N0cnVjdCAqbW1gIGFuZCBhIGBib29sIG9wZW5lZF9ieV9vd25lcmAuIEluIGBtZW1fb3BlbmAsIHRoZXkgYWxsb2NhdGUgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBib3RoIG9mIHRob3NlIGZpZWxkcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiDigJMgd2UmIzM5O3JlIG5vdCBzZWVpbmcgYW55IGltbWVkaWF0ZSwgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhdCB0aGUgYWxsb2NhdGlvbiBzdGFnZSwgYW5kIG5vIG9idmlvdXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4gVGhlIGNvZGUgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGVycm9yIHBhdGhzLCBhbmQgc2V0cyB0aGUgYHByaXZhdGVfZGF0YWAgZmllbGQgb24gdGhlIGZpbGUgcG9pbnRlci4gVGhlIGBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVgIGZ1bmN0aW9uIGFsc28gbG9va3Mgc29saWQgd2l0aCB0aGUgYG1tZHJvcGAgYW5kIGBrZnJlZWAuIFRoZSB3YXkgYHByaXZhdGVfZGF0YWAgaXMgYmVpbmcgdXNlZCBpbiBgcHJvY19tZW1fZm9sbF9mb3JjZWAgYW5kIGBtZW1fcndgIGlzIGFsc28gcHJldHR5IGNsZWFyLgoqICAgKipMU00gaG9va3MgYW5kIFNFTGludXgqKjogVGhlIGFkZGl0aW9uIG9mIHRoZSBgbWVtX2ZvbGxfZm9yY2VgIGhvb2sgaXMgc3RyYWlnaHRmb3J3YXJkLCB3aGljaCBpcyBhbHNvIGhlbHBmdWwuIFRoZSBTRUxpbnV4IGltcGxlbWVudGF0aW9uLCBpbiBwYXJ0aWN1bGFyIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlYCwgdXNlcyBgc3RydWN0IGF2X2RlY2lzaW9uIGF2ZDtgIGxvY2FsbHksIHdoaWNoIHN1Z2dlc3RzIHRoYXQgdGhlIGxvY2FsIHN0cnVjdHVyZSBpcyBwcm9wZXJseSBoYW5kbGVkIGZvciBtZW1vcnkgc2FmZXR5LCBhbmQgdGhlbiBwYXNzZXMgYW4gb3V0cHV0IHBhcmFtZXRlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXRgIHdoaWNoIHNob3VsZCBhbHNvIGJlIG9rYXkuCgpCYXNlZCBvbiB0aGlzIGltbWVkaWF0ZSBwYXNzLCBJJiMzOTttICpub3QqIHNlZWluZyBhbnkgYmxhdGFudCByZWQgZmxhZ3MuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAxMDAlIHN1cmUuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgb25seSB1c2VkIGluIGEgY29ycmVjdCB3YXksIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gc2VhcmNoIHRoZSBlbnRpcmUga2VybmVsIHRyZWUgZm9yIG90aGVyIGNhbGxzIHRvIGBwcm9jX21lbV9vcGVyYXRpb25zYCBvciBvdGhlciBmaWxlcyB0aGF0IG1pZ2h0IGJlIG9wZW5pbmcgYC9wcm9jLyRwaWQvbWVtYCBvciBvdGhlcndpc2UgdXNlIHRoZSBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYC4gSSYjMzk7bGwgbG9vayBmb3IgYHByb2NfbWVtX29wZXJhdGlvbnNgLCBgX19tZW1fb3BlbmAsIGBtZW1fcndgLCBvciBhbnkgb3RoZXIgcmVsYXRlZCBwcm9jIG1lbSBvcGVyYXRpb25zLiBJZiB0aGVyZSBhcmUgb3RoZXIgdXNhZ2VzIG9mIGAvcHJvYy8kcGlkL21lbWAsIEkgd2FudCB0byBiZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBhY2Nlc3MgaXMgY29ycmVjdCBhbmQgdGhhdCB0aGUgc3RydWN0dXJlJiMzOTtzIGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIHRoZSBvbmx5IHdheSB0byBiZSBjb21wbGV0ZWx5IGNvbmZpZGVudC4gQWZ0ZXIgdGhhdCwgSSBtYXkgaGF2ZSBhIGRlY2lzaW9uIG9uIHdoZXRoZXIgdG8gbGF1bmNoIHRoZSBLTVNBTiBmdXp6aW5nIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfbWVtX29wZXJhdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9ODQwPXN0YXRpYyBpbnQgX19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IG1vZGUpXG4tLVxuZnMvcHJvYy9iYXNlLmMtODUwLVxuZnMvcHJvYy9iYXNlLmM6ODUxOi8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuZnMvcHJvYy9iYXNlLmMtODUyLXN0cnVjdCBtZW1fcHJpdmF0ZSB7XG4tLVxuZnMvcHJvYy9iYXNlLmM9OTk3PXN0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL3Byb2MvYmFzZS5jLTEwMDUtXG5mcy9wcm9jL2Jhc2UuYzoxMDA2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG5mcy9wcm9jL2Jhc2UuYy0xMDA3LVx0Lmxsc2Vla1x0XHQ9IG1lbV9sc2Vlayxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0zMzE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRnaWRfYmFzZV9zdHVmZltdID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTMzNDYtI2VuZGlmXG5mcy9wcm9jL2Jhc2UuYzozMzQ3Olx0UkVHKFwmIzM0O21lbVwmIzM0OywgICAgICAgIFNfSVJVU1J8U19JV1VTUiwgcHJvY19tZW1fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zMzQ4LVx0TE5LKFwmIzM0O2N3ZFwmIzM0OywgICAgICAgIHByb2NfY3dkX2xpbmspLFxuLS1cbmZzL3Byb2MvYmFzZS5jPTM2NzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGlkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zNzAyLSNlbmRpZlxuZnMvcHJvYy9iYXNlLmM6MzcwMzpcdFJFRyhcJiMzNDttZW1cJiMzNDssICAgICAgIFNfSVJVU1J8U19JV1VTUiwgcHJvY19tZW1fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zNzA0LVx0TE5LKFwmIzM0O2N3ZFwmIzM0OywgICAgICAgcHJvY19jd2RfbGluayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyODcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgX19tZW1fb3BlbmAgaW4gYGZzL3Byb2MvYmFzZS5jYDoKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYF9fbWVtX29wZW5gKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgX19tZW1fb3BlbmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9wcm9jL2Jhc2UuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHN0aWxsIGFjdGl2ZWx5IGJlaW5nIHVzZWQgYW55d2hlcmUgZWxzZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaXRzIGN1cnJlbnQgcHVycG9zZSBhbmQgaWYgYW55IGNoYW5nZXMgb3IgcmVtb3ZhbHMgaGF2ZSBvY2N1cnJlZCB0aGF0IEkgbWlnaHQgbmVlZCB0byBiZSBhd2FyZSBvZi4gSXMgaXQgc3RpbGwgYSBjb3JlIGZ1bmN0aW9uLCBvciBoYXMgaXQgYmVlbiBkZXByZWNhdGVkIG9yIHJlcGxhY2VkPyBUaGlzIHdpbGwgcmVxdWlyZSBhIGNhcmVmdWwgc2VhcmNoIHdpdGhpbiB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tZW1fb3BlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz04MTg9c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbi0tXG5mcy9wcm9jL2Jhc2UuYy04MzktXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbmZzL3Byb2MvYmFzZS5jLTg0MS17XG4tLVxuZnMvcHJvYy9iYXNlLmM9MTAxNT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL3Byb2MvYmFzZS5jLTEwMTYte1xuZnMvcHJvYy9iYXNlLmM6MTAxNzpcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcbmZzL3Byb2MvYmFzZS5jLTEwMTgtfVxuLS1cbmZzL3Byb2MvYmFzZS5jPTEwOTA9c3RhdGljIGludCBhdXh2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL2Jhc2UuYy0xMDkxLXtcbmZzL3Byb2MvYmFzZS5jOjEwOTI6XHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcbmZzL3Byb2MvYmFzZS5jLTEwOTMtfVxuLS1cbmZzL3Byb2MvYmFzZS5jPTI3NzE9c3RhdGljIGludCBwcm9jX3BpZF9hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvcHJvYy9iYXNlLmMtMjc3My1cdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gTlVMTDtcbmZzL3Byb2MvYmFzZS5jOjI3NzQ6XHRfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xuZnMvcHJvYy9iYXNlLmMtMjc3NS1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTE0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgUHJvY2ZzIE1lbW9yeSBPcGVyYXRpb25zKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIHByb2MgZmlsZXN5c3RlbSYjMzk7cyBtZW1vcnkgaGFuZGxpbmcuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciwgbXkgZ3V0IHRlbGxzIG1lIHRoZSBrZXkgZnVuY3Rpb25zIGFyZSBsaWtlbHkgY2x1c3RlcmVkIGFyb3VuZCB0aGUgODQwLTEwMDAgbGluZSByYW5nZSB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiBgbWVtX2xzZWVrYCwgYG1lbV9yZWFkYCwgYG1lbV93cml0ZWAsIGBtZW1fcndgLCBhbmQgYG1lbV9yZWxlYXNlYC4gVGhlc2Ugc2hvdWxkIGNvdmVyIHRoZSBiYXNpYyByZWFkL3dyaXRlIGFjY2VzcyBwYXR0ZXJucywgaG93IHRoZSBmaWxlIHBvaW50ZXIgaXMgbWFuYWdlZCwgYW5kIG9mIGNvdXJzZSwgaG93IHRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgcmVsZWFzZWQgYmFjayB0byB0aGUgc3lzdGVtLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHByb2Nlc3MgbWVtb3J5IGlzIGV4cG9zZWQgdGhyb3VnaCBwcm9jZnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gaGF2ZSBhIGhhbmRsZSBvbiBzZWN1cml0eSBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiByZWxhdGVkIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcbiA4NDE6XHR7XG4gODQyOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIG1vZGUpO1xuIDg0MzpcdFxuIDg0NDpcdFx0aWYgKElTX0VSUl9PUl9OVUxMKG1tKSlcbiA4NDU6XHRcdFx0cmV0dXJuIG1tID8gUFRSX0VSUihtbSkgOiAtRVNSQ0g7XG4gODQ2Olx0XG4gODQ3Olx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG1tO1xuIDg0ODpcdFx0cmV0dXJuIDA7XG4gODQ5Olx0fVxuIDg1MDpcdFxuIDg1MTpcdC8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuIDg1MjpcdHN0cnVjdCBtZW1fcHJpdmF0ZSB7XG4gODUzOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbiA4NTQ6XHRcdC8qXG4gODU1Olx0XHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxuIDg1NjpcdFx0ICogdGhlIHNhbWUgTU0gKGludHJvc3BlY3Rpb24pP1xuIDg1NzpcdFx0ICovXG4gODU4Olx0XHRib29sIG9wZW5lZF9ieV9vd25lcjtcbiA4NTk6XHR9O1xuIDg2MDpcdFxuIDg2MTpcdHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gODYyOlx0e1xuIDg2MzpcdFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xuIDg2NDpcdFxuIDg2NTpcdFx0aWYgKCFwcml2KVxuIDg2NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4Njc6XHRcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXG4gODY4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDg2OTpcdFx0cHJpdi1cdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4gODcwOlx0XHRpZiAoSVNfRVJSX09SX05VTEwocHJpdi1cdTAwM2VtbSkpXG4gODcxOlx0XHRcdHJldHVybiBwcml2LVx1MDAzZW1tID8gUFRSX0VSUihwcml2LVx1MDAzZW1tKSA6IC1FU1JDSDtcbiA4NzI6XHRcdHByaXYtXHUwMDNlb3BlbmVkX2J5X293bmVyID0gcHJpdi1cdTAwM2VtbSA9PSBjdXJyZW50LVx1MDAzZW1tO1xuIDg3MzpcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBub19mcmVlX3B0cihwcml2KTtcbiA4NzQ6XHRcdHJldHVybiAwO1xuIDg3NTpcdH1cbiA4NzY6XHRcbiA4Nzc6XHRzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiA4Nzg6XHR7XG4gODc5Olx0XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA4ODA6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbiA4ODE6XHRcdGJvb2wgcHRyYWNlX2FjdGl2ZSA9IGZhbHNlO1xuIDg4MjpcdFxuIDg4MzpcdFx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xuIDg4NDpcdFx0Y2FzZSBQUk9DX01FTV9GT1JDRV9ORVZFUjpcbiA4ODU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDg4NjpcdFx0Y2FzZSBQUk9DX01FTV9GT1JDRV9QVFJBQ0U6XG4gODg3Olx0XHRcdHRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGVfaW5vZGUoZmlsZSkpO1xuIDg4ODpcdFx0XHRpZiAodGFzaykge1xuIDg4OTpcdFx0XHRcdHB0cmFjZV9hY3RpdmUgPVx0UkVBRF9PTkNFKHRhc2stXHUwMDNlcHRyYWNlKSBcdTAwMjZcdTAwMjZcbiA4OTA6XHRcdFx0XHRcdFx0UkVBRF9PTkNFKHRhc2stXHUwMDNlbW0pID09IG1tIFx1MDAyNlx1MDAyNlxuIDg5MTpcdFx0XHRcdFx0XHRSRUFEX09OQ0UodGFzay1cdTAwM2VwYXJlbnQpID09IGN1cnJlbnQ7XG4gODkyOlx0XHRcdFx0cHV0X3Rhc2tfc3RydWN0KHRhc2spO1xuIDg5MzpcdFx0XHR9XG4gODk0Olx0XHRcdGlmICghcHRyYWNlX2FjdGl2ZSlcbiA4OTU6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODk2Olx0XHRcdGJyZWFrO1xuIDg5NzpcdFx0ZGVmYXVsdDpcbiA4OTg6XHRcdFx0YnJlYWs7XG4gODk5Olx0XHR9XG4gOTAwOlx0XHRyZXR1cm4gc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoZmlsZS1cdTAwM2VmX2NyZWQsIHByaXYtXHUwMDNlb3BlbmVkX2J5X293bmVyKSA9PSAwO1xuIDkwMTpcdH1cbiA5MDI6XHRcbiA5MDM6XHRzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gOTA0Olx0XHRcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcbiA5MDU6XHR7XG4gOTA2Olx0XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA5MDc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cdTAwM2VtbTtcbiA5MDg6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zO1xuIDkwOTpcdFx0c3NpemVfdCBjb3BpZWQ7XG4gOTEwOlx0XHRjaGFyICpwYWdlO1xuIDkxMTpcdFx0dW5zaWduZWQgaW50IGZsYWdzO1xuIDkxMjpcdFxuIDkxMzpcdFx0aWYgKCFtbSlcbiA5MTQ6XHRcdFx0cmV0dXJuIDA7XG4gOTE1Olx0XG4gOTE2Olx0XHRwYWdlID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuIDkxNzpcdFx0aWYgKCFwYWdlKVxuIDkxODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5MTk6XHRcbiA5MjA6XHRcdGNvcGllZCA9IDA7XG4gOTIxOlx0XHRpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSlcbiA5MjI6XHRcdFx0Z290byBmcmVlO1xuIDkyMzpcdFxuIDkyNDpcdFx0ZmxhZ3MgPSB3cml0ZSA/IEZPTExfV1JJVEUgOiAwO1xuIDkyNTpcdFx0aWYgKHByb2NfbWVtX2ZvbGxfZm9yY2UoZmlsZSwgbW0pKVxuIDkyNjpcdFx0XHRmbGFncyB8PSBGT0xMX0ZPUkNFO1xuIDkyNzpcdFxuIDkyODpcdFx0d2hpbGUgKGNvdW50IFx1MDAzZSAwKSB7XG4gOTI5Olx0XHRcdHNpemVfdCB0aGlzX2xlbiA9IG1pbl90KHNpemVfdCwgY291bnQsIFBBR0VfU0laRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIERlZXBlciBpbnRvIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgIGluIGBmcy9wcm9jL2Jhc2UuY2AqKgoKQWxyaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZ1bGx5IGdyYXNwaW5nIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvYyBmaWxlc3lzdGVtIGFuZCBpdHMgdW5kZXJseWluZyBzdHJ1Y3R1cmVzLCBJIHJlYWxseSBzaG91bGQgem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgdXNlIGNhc2VzIG9mIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgIHdpdGhpbiBgZnMvcHJvYy9iYXNlLmNgLiBXZSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IGEgcGFydGljdWxhciBmdW5jdGlvbiwgYnV0IHRvIGdldCBhIHRydWx5IGNvbXBsZXRlIHBpY3R1cmUsIEkgY2FuJiMzOTt0IGp1c3QgbGltaXQgbXlzZWxmIHRvIHRoYXQuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgaG93IGBtZW1fcmVsZWFzZWAgYW5kIGBtZW1fbHNlZWtgIGFyZSBpbXBsZW1lbnRlZCwgYW5kLCBjcnVjaWFsbHksIGhvdyB0aGV5IGFyZSBpbnRlcmFjdGluZyB3aXRoIGBmaWxlLSZndDtwcml2YXRlX2RhdGFgLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoaXMgZGF0YSBwb2ludGVyIGluIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIGFzIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGFsbCBraW5kcyBvZiB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGlmZmVyZW50IGRhdGEgdHlwZXMgdGhhdCBhcmUgYmVpbmcgY2FzdCB0byBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYCB0byBlbnN1cmUgYW55IHBvdGVudGlhbCB0eXBlIG1pc21hdGNoZXMgYXJlIGFkZHJlc3NlZC4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzb21lIHN1YnRsZXR5IGluIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGZpbGUgcG9zaXRpb25pbmcgd2l0aGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSB0cmlja3kgbWVtb3J5IGJ1Z3MgdGVuZCB0byBoaWRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NjU6XHR9XG4gOTY2Olx0XG4gOTY3Olx0c3RhdGljIHNzaXplX3QgbWVtX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIDk2ODpcdFx0XHRcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiA5Njk6XHR7XG4gOTcwOlx0XHRyZXR1cm4gbWVtX3J3KGZpbGUsIChjaGFyIF9fdXNlciopYnVmLCBjb3VudCwgcHBvcywgMSk7XG4gOTcxOlx0fVxuIDk3MjpcdFxuIDk3MzpcdGxvZmZfdCBtZW1fbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxuIDk3NDpcdHtcbiA5NzU6XHRcdHN3aXRjaCAob3JpZykge1xuIDk3NjpcdFx0Y2FzZSAwOlxuIDk3NzpcdFx0XHRmaWxlLVx1MDAzZWZfcG9zID0gb2Zmc2V0O1xuIDk3ODpcdFx0XHRicmVhaztcbiA5Nzk6XHRcdGNhc2UgMTpcbiA5ODA6XHRcdFx0ZmlsZS1cdTAwM2VmX3BvcyAmIzQzOz0gb2Zmc2V0O1xuIDk4MTpcdFx0XHRicmVhaztcbiA5ODI6XHRcdGRlZmF1bHQ6XG4gOTgzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDk4NDpcdFx0fVxuIDk4NTpcdFx0Zm9yY2Vfc3VjY2Vzc2Z1bF9zeXNjYWxsX3JldHVybigpO1xuIDk4NjpcdFx0cmV0dXJuIGZpbGUtXHUwMDNlZl9wb3M7XG4gOTg3Olx0fVxuIDk4ODpcdFxuIDk4OTpcdHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gOTkwOlx0e1xuIDk5MTpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiA5OTI6XHRcdGlmIChtbSlcbiA5OTM6XHRcdFx0bW1kcm9wKG1tKTtcbiA5OTQ6XHRcdHJldHVybiAwO1xuIDk5NTpcdH1cbiA5OTY6XHRcbiA5OTc6XHRzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA5OTg6XHR7XG4gOTk5Olx0XHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjEwMDA6XHRcbjEwMDE6XHRcdG1tZHJvcChwcml2LVx1MDAzZW1tKTtcbjEwMDI6XHRcdGtmcmVlKHByaXYpO1xuMTAwMzpcdFx0cmV0dXJuIDA7XG4xMDA0Olx0fVxuMTAwNTpcdFxuMTAwNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4xMDA3Olx0XHQubGxzZWVrXHRcdD0gbWVtX2xzZWVrLFxuMTAwODpcdFx0LnJlYWRcdFx0PSBtZW1fcmVhZCxcbjEwMDk6XHRcdC53cml0ZVx0XHQ9IG1lbV93cml0ZSxcbjEwMTA6XHRcdC5vcGVuXHRcdD0gbWVtX29wZW4sXG4xMDExOlx0XHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXG4xMDEyOlx0XHQuZm9wX2ZsYWdzXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXG4xMDEzOlx0fTtcbjEwMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzOQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSYjMzk7cyBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZW5zdXJpbmcgdGhlIGNvbnNpc3RlbmN5IG9mIHJlc291cmNlIGhhbmRsaW5nLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHByb2NfbWVtX29wZXJhdGlvbnNgIGlzIHRoZSAqb25seSogY29tcG9uZW50IGRpcmVjdGx5IGxldmVyYWdpbmcgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgYW5kIGBtZW1fb3BlbmAuIFdlIGtub3cgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byB0aGUgYC9wcm9jLyRwaWQvbWVtYCBmaWxlIChhbmQgcG90ZW50aWFsbHkgdGFzay90aWQgbWVtIGZpbGVzKS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IG90aGVyIHByb2MgZmlsZXMsIHN1Y2ggYXMgYGVudmlyb25gIGFuZCBgYXV4dmAsIHV0aWxpemUgYWx0ZXJuYXRpdmUgb3BlbiBmdW5jdGlvbnMsIG5hbWVseSBgZW52aXJvbl9vcGVuYCBhbmQgYGF1eHZfb3BlbmAuIFRoZXNlLCBhcyBJIHJlY2FsbCwgdXRpbGl6ZSBgX19tZW1fb3BlbmAgaW50ZXJuYWxseSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyByZWxlYXNlIGZ1bmN0aW9uLCBgbWVtX3JlbGVhc2VgLiBBIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGBtZW1fcmVsZWFzZWAgZXhwZWN0cyB0aGUgYGZpbGUtJmd0O3ByaXZhdGVfZGF0YWAgdG8gYmUgYSBwb2ludGVyIHRvIHRoZSBwcm9jZXNzJiMzOTtzIGBtbWAgKG1lbW9yeSBtYXApLCB3aGljaCBpcyBzZXQgYnkgYF9fbWVtX29wZW5gLiBTbywgdGhlIG93bmVyc2hpcCBhbmQgbGlmZWN5Y2xlIG11c3QgYmUgY29ycmVjdCB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIHNjcnV0aW5pemUgdGhlIFNFTGludXggYXNwZWN0IGludHJvZHVjZWQgaW4gdGhlIHBhdGNoLiBUaGUgYHNlbGludXhfbWVtX2ZvbGxfZm9yY2VgIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gY2FsbHMgYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCB0byBjaGVjayBpZiBhIHByb2Nlc3MgaGFzIHBlcm1pc3Npb24gdG8gcHRyYWNlIGl0c2VsZi4gV2hhdCBpcyBub3Rld29ydGh5IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIHBhc3NlcyBhIHBvaW50ZXIgdG8gYCZhbXA7YXZkYC4gVGh1cywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgYXZjX2hhc19wZXJtX25vYXVkaXRgIHVzZXMgaXQuIERvZXMgdGhlIGZ1bmN0aW9uIG1vZGlmeSBgJmFtcDthdmRgPyBJZiBzbywgd2hhdCBpbmZvcm1hdGlvbiBkb2VzIGl0IHN0b3JlIG9yIHVwZGF0ZT8gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3MgZGVjbGFyYXRpb24gdG8gY29uZmlybSBhbmQgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdmNfaGFzX3Blcm1fbm9hdWRpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTk1ND1pbnQgYXZjX3NzX3Jlc2V0KHUzMiBzZXFubylcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTk4Mi0gKlxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzo5ODM6ICogU2xvdy1wYXRoIGhlbHBlciBmdW5jdGlvbiBmb3IgYXZjX2hhc19wZXJtX25vYXVkaXQsIHdoZW4gdGhlIGF2Y19ub2RlIGxvb2t1cFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODQtICogZmFpbHMuICBEb24mIzM5O3QgaW5saW5lIHRoaXMsIHNpbmNlIGl0JiMzOTtzIHRoZSBzbG93LXBhdGggYW5kIGp1c3QgcmVzdWx0cyBpbiBhXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz0xMDE5PWludCBhdmNfaGFzX2V4dGVuZGVkX3Blcm1zKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExMDUtICpcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEwNjogKiBUaGlzIGlzIHRoZSBcJiMzNDt3ZSBoYXZlIG5vIG5vZGVcJiMzNDsgcGFydCBvZiBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpLCB3aGljaCBpc1xuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTA3LSAqIHVubGlrZWx5IGFuZCBuZWVkcyBleHRyYSBzdGFjayBzcGFjZSBmb3IgdGhlIG5ldyBub2RlIHRoYXQgd2UgZ2VuZXJhdGUsIHNvXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz0xMTEwPXN0YXRpYyBub2lubGluZSBpbnQgYXZjX3Blcm1fbm9ub2RlKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExMjUtLyoqXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExMjY6ICogYXZjX2hhc19wZXJtX25vYXVkaXQgLSBDaGVjayBwZXJtaXNzaW9ucyBidXQgcGVyZm9ybSBubyBhdWRpdGluZy5cbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEyNy0gKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXJcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExNDQtICovXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExNDU6aW5saW5lIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExNDYtXHRcdFx0XHR1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvYXZjLmM9MTE4OT1pbnQgYXZjX2hhc19wZXJtKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExOTQtXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExOTU6XHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAwLFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTk2LVx0XHRcdFx0ICBcdTAwMjZhdmQpO1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0xNjQxPXN0YXRpYyBpbnQgY3JlZF9oYXNfY2FwYWJpbGl0eShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2NS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoxNjY2Olx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgc2NsYXNzLCBhdiwgMCwgXHUwMDI2YXZkKTtcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0xNjY3LVx0aWYgKCEob3B0cyBcdTAwMjYgQ0FQX09QVF9OT0FVRElUKSkge1xuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0yMTc4PXN0YXRpYyBpbnQgc2VsaW51eF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxODYtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MjE4NzpcdHJldHVybiBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAwLCBcdTAwMjZhdmQpO1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTIxODgtfVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMjczPXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzMDktXHRcdC8qIENhY2hlIG1pc3MuICovXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzMxMDpcdFx0cmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIGlzZWMtXHUwMDNlc2lkLCBpc2VjLVx1MDAzZXNjbGFzcyxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMzExLVx0XHRcdFx0XHQgIHBlcm1zLCAwLCBhdmRwKTtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg9MTAxPWludCBzbG93X2F2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsIHUzMiBhdWRpdGVkLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTAtICogQGF2ZDogYWNjZXNzIHZlY3RvciBkZWNpc2lvbnNcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMTE6ICogQHJlc3VsdDogcmVzdWx0IGZyb20gYXZjX2hhc19wZXJtX25vYXVkaXRcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTItICogQGE6ICBhdXhpbGlhcnkgYXVkaXQgZGF0YVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTYtICogYXZjX2hhc19wZXJtKCkgYWZ0ZXIgYSBwZXJtaXNzaW9uIGNoZWNrLCBidXQgY2FuIGFsc28gYmVcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMTc6ICogY2FsbGVkIGRpcmVjdGx5IGJ5IGNhbGxlcnMgd2hvIHVzZSBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTE4LSAqIGluIG9yZGVyIHRvIHNlcGFyYXRlIHRoZSBwZXJtaXNzaW9uIGNoZWNrIGZyb20gdGhlIGF1ZGl0aW5nLlxuLS1cbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaD0xMjM9c3RhdGljIGlubGluZSBpbnQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTM2LSNkZWZpbmUgQVZDX0VYVEVOREVEX1BFUk1TIDIgLyogdXBkYXRlIGV4dGVuZGVkIHBlcm1pc3Npb25zICovXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg6MTM3OmludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTM4LVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NjEKCQkJCQkJCW91dHB1dDogMjg4CgkJCQkJCQl0aG91Z2h0czogNzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIE1lbW9yeSBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSYjMzk7bSBmb2N1c2luZyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgS01TQU4gYW5hbHlzaXMuCgpGaXJzdCwgSSBsb29rZWQgYXQgaG93IHRoZSBgbWVtX3ByaXZhdGVgIHN0cnVjdCBpcyBoYW5kbGVkLiBJdCYjMzk7cyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY19vYmpgLCBhbmQgYm90aCBgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYCBhcmUgaW1tZWRpYXRlbHkgYXNzaWduZWQgKmJlZm9yZSogYGZpbGUtJmd0O3ByaXZhdGVfZGF0YWAgaXMgdG91Y2hlZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhLCBubyBwb3RlbnRpYWwgaW5mbyBsZWFrcyB0aHJvdWdoIHBhZGRpbmcsIHNpbmNlIHRoaXMgc3RydWN0IGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsIGFuZCBvbmx5IGFjY2Vzc2VkIHZpYSBgZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhYC4KCk5leHQsIHRoZXJlJiMzOTtzIG5vIGRhdGEgYmVpbmcgY29waWVkIGRpcmVjdGx5IHRvIHVzZXJzcGFjZS4gYG1lbV9yd2AgYWxyZWFkeSBsZXZlcmFnZXMgdGhlIGVzdGFibGlzaGVkIGtlcm5lbCBtZWNoYW5pc21zIGxpa2UgYGNvcHlfdG9fdXNlcmAgYW5kIGBjb3B5X2Zyb21fdXNlcmAgd2hlbiBkZWFsaW5nIHdpdGggdXNlciBidWZmZXJzIHZpYSBgYWNjZXNzX3JlbW90ZV92bWAuIFdlJiMzOTtyZSBnb29kIHRoZXJlLgoKSSB0aGVuIGV4YW1pbmVkIHRoZSBTRUxpbnV4IGhvb2ssIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlYC4gSXQgdGFrZXMgYGNyZWRgIGFuZCBgb3BlbmVkX2J5X293bmVyYCwgY2FsbHMgYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCwgYW5kIHJldHVybnMgYW4gaW50ZWdlci4gYGF2ZGAgaXMgcGFzc2VkIGJ5IHBvaW50ZXIgdG8gYGF2Y19oYXNfcGVybV9ub2F1ZGl0YCwgYnV0IHRoZSByZXR1cm4gY29kZSBpcyB1c2VkIGRpcmVjdGx5LCB3aXRob3V0IGFueSByZWFkIG9mIHRoZSBgYXZkYCBzdHJ1Y3QuIFRoaXMgaXMgYSB2ZXJ5IGNsZWFuIHBhdHRlcm4uCgpUaGUgTFNNIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZWAsIGNhbGxzIGBjYWxsX2ludF9ob29rYCwgd2hpY2ggcmV0dXJucyBhbiBpbnRlZ2VyLiBUaGUgZGVmYXVsdCBzdGF0aWMgaW5saW5lIHJldHVybnMgMC4gQWdhaW4sIG5vIGlzc3VlcyBoZXJlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4KClNvLCBJIGFza2VkIG15c2VsZiB0aGUgY3JpdGljYWwgcXVlc3Rpb25zOiBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8gVGhlIGFuc3dlciBpcyBhIGNsZWFyIG5vLiBBbGwgbmV3bHkgYWxsb2NhdGVkIHN0cnVjdHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZS4gQW55ICpwb3RlbnRpYWwqIG1lbW9yeSBzYWZldHkgYnVncyAobGlrZSBVQUYgaWYgc3RydWN0IGxpZmV0aW1lIGhhZCBpc3N1ZXMpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhlIHJlYXNvbmluZyBhZ2FpbnN0IHRoZSBlc3RhYmxpc2hlZCBydWxlcy4gSSYjMzk7bSBnb2luZyB0byByZS1zdGF0ZSB0aGUga2V5IGRpc3RpbmN0aW9ucyBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTi4gU3RhbmRhcmQgS0FTQU4gaXMgYWxyZWFkeSBlbmFibGVkLCBpbmNsdWRpbmcgTE9DS0RFUCwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciByZWFkcyBvZiAqdW5pbml0aWFsaXplZCogbWVtb3J5IGFuZCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLgoKSSBkb3VibGUtY2hlY2tlZCB0aGUgY29uZGl0aW9ucyBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gYHRydWVgOiBub25lIG9mIHRoZW0gYXBwbHkgaGVyZS4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCB0aGVyZSYjMzk7cyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLgoKT24gdGhlIGZsaXAgc2lkZSwgYWxsIHRoZSBjb25kaXRpb25zIGZvciBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhcmUgbWV0OiB0aGUgY29kZSBwcmltYXJpbHkgZGVhbHMgd2l0aCB0aGluZ3MgdGhhdCBLQVNBTiBhbHJlYWR5IGFkZHJlc3NlcyBsaWtlIG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgYW5kIFVBRi4gQWxsIHJlbGV2YW50IHN0cnVjdHMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZC4gVGhlcmUmIzM5O3MgemVybyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFNwZWNpZmljYWxseSwgdGhlIGZpZWxkcyBpbiBgc3RydWN0IG1lbV9wcml2YXRlYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIGluIGBtZW1fb3BlbmAsIGFuZCBubyBrZXJuZWwgZGF0YSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRodXMsIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KClNvLCAqSSBhbSBjb21wbGV0ZWx5IGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2sgYG1lbV9mb2xsX2ZvcmNlYCBhbmQgcmVwbGFjZXMgdGhlIGRpcmVjdCBgbW1fc3RydWN0YCBwb2ludGVyIGluIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgb2YgYC9wcm9jLyRwaWQvbWVtYCB3aXRoIGEgc21hbGwgY29udGFpbmVyIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGNvbnRhaW5pbmcgYG1tYCBhbmQgYG9wZW5lZF9ieV9vd25lcmAuXG5cbi0gSW4gYG1lbV9vcGVuKClgLCB0aGUgaGVhcCBhbGxvY2F0aW9uIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYCBoYXMgYWxsIGl0cyBmaWVsZHMgKGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIGFzc2lnbmVkIHRvIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuXG4tIEluIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKClgLCB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBpcyBwYXNzZWQgYXMgYW4gb3V0cHV0IGJ1ZmZlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIGFuZCBpdHMgZmllbGRzIGFyZSBub3QgcmVhZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uXG4tIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAoc3VjaCBhcyBsaWZldGltZS9mcmVlaW5nIG9mIGBwcml2YCBvciBgbW1gKSBhcmUgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zIHRoYXQgYXJlIHByb3Blcmx5IGNvdmVyZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2sgYG1lbV9mb2xsX2ZvcmNlYCBhbmQgcmVwbGFjZXMgdGhlIGRpcmVjdCBgbW1fc3RydWN0YCBwb2ludGVyIGluIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgb2YgYC9wcm9jLyRwaWQvbWVtYCB3aXRoIGEgc21hbGwgY29udGFpbmVyIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGNvbnRhaW5pbmcgYG1tYCBhbmQgYG9wZW5lZF9ieV9vd25lcmAuXG5cbi0gSW4gYG1lbV9vcGVuKClgLCB0aGUgaGVhcCBhbGxvY2F0aW9uIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYCBoYXMgYWxsIGl0cyBmaWVsZHMgKGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIGFzc2lnbmVkIHRvIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuXG4tIEluIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKClgLCB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBpcyBwYXNzZWQgYXMgYW4gb3V0cHV0IGJ1ZmZlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIGFuZCBpdHMgZmllbGRzIGFyZSBub3QgcmVhZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uXG4tIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAoc3VjaCBhcyBsaWZldGltZS9mcmVlaW5nIG9mIGBwcml2YCBvciBgbW1gKSBhcmUgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zIHRoYXQgYXJlIHByb3Blcmx5IGNvdmVyZWQgYnkgS0FTQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MDkuOTI5NDQ1Nzk3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc0OTY5NTY0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fb3BlblwiLFxuICAgIFwicHJvY19tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwibWVtX3J3XCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIixcbiAgICBcInNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJzZWxpbnV4X21lbV9mb2xsX2ZvcmNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBtZW1fZm9sbF9mb3JjZWAgYW5kIHJlcGxhY2VzIHRoZSBkaXJlY3QgYG1tX3N0cnVjdGAgcG9pbnRlciBpbiBgZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhYCBvZiBgL3Byb2MvJHBpZC9tZW1gIHdpdGggYSBzbWFsbCBjb250YWluZXIgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgY29udGFpbmluZyBgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYC5cXG5cXG4tIEluIGBtZW1fb3BlbigpYCwgdGhlIGhlYXAgYWxsb2NhdGlvbiBga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKWAgaGFzIGFsbCBpdHMgZmllbGRzIChgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCB0byBgZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhYC5cXG4tIEluIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKClgLCB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBpcyBwYXNzZWQgYXMgYW4gb3V0cHV0IGJ1ZmZlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIGFuZCBpdHMgZmllbGRzIGFyZSBub3QgcmVhZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uXFxuLSBObyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIChzdWNoIGFzIGxpZmV0aW1lL2ZyZWVpbmcgb2YgYHByaXZgIG9yIGBtbWApIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MgdGhhdCBhcmUgcHJvcGVybHkgY292ZXJlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MDkuOTI5NDUwODE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE0NzQzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZDUxYzNiNDQ1MDk3ZTkwOWEyZDczNTA1NTA3NDg4ODU1NTdmODAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDE6MjM6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuY1xcbmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy9iYXNlLmNcXG4rKysgYi9mcy9wcm9jL2Jhc2UuY1xcbkBAIC04NDgsMTUgKzg0OCwzNSBAQCBzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovXFxuK3N0cnVjdCBtZW1fcHJpdmF0ZSB7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbitcXHQvKlxcbitcXHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxcbitcXHQgKiB0aGUgc2FtZSBNTSAoaW50cm9zcGVjdGlvbik/XFxuK1xcdCAqL1xcbitcXHRib29sIG9wZW5lZF9ieV9vd25lcjtcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4rXFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xcbitcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZvcF9mbGFncyBcXHUwMDI2IEZPUF9VTlNJR05FRF9PRkZTRVQpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xcbitcXHRwcml2LVxcdTAwM2VtbSA9IHByb2NfbWVtX29wZW4oaW5vZGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XFxuK1xcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVxcdTAwM2VtbSkpXFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VtbSA/IFBUUl9FUlIocHJpdi1cXHUwMDNlbW0pIDogLUVTUkNIO1xcbitcXHRwcml2LVxcdTAwM2VvcGVuZWRfYnlfb3duZXIgPSBwcml2LVxcdTAwM2VtbSA9PSBjdXJyZW50LVxcdTAwM2VtbTtcXG4rXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbitcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4gXFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XFxuIFxcbkBAIC04NzEsMTYgKzg5MSwyMCBAQCBzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHRhc2stXFx1MDAzZXBhcmVudCkgPT0gY3VycmVudDtcXG4gXFx0XFx0XFx0cHV0X3Rhc2tfc3RydWN0KHRhc2spO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHJldHVybiBwdHJhY2VfYWN0aXZlO1xcbitcXHRcXHRpZiAoIXB0cmFjZV9hY3RpdmUpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRyZXR1cm4gc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoZmlsZS1cXHUwMDNlZl9jcmVkLCBwcml2LVxcdTAwM2VvcGVuZWRfYnlfb3duZXIpID09IDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBzc2l6ZV90IG1lbV9ydyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbitcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtXFx1MDAzZW1tO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvcztcXG4gXFx0c3NpemVfdCBjb3BpZWQ7XFxuIFxcdGNoYXIgKnBhZ2U7XFxuQEAgLTk3MCwxMiArOTk0LDIxIEBAIHN0YXRpYyBpbnQgbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcbitcXHRtbWRyb3AocHJpdi1cXHUwMDNlbW0pO1xcbitcXHRrZnJlZShwcml2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5sbHNlZWtcXHRcXHQ9IG1lbV9sc2VlayxcXG4gXFx0LnJlYWRcXHRcXHQ9IG1lbV9yZWFkLFxcbiBcXHQud3JpdGVcXHRcXHQ9IG1lbV93cml0ZSxcXG4gXFx0Lm9wZW5cXHRcXHQ9IG1lbV9vcGVuLFxcbi1cXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2UsXFxuK1xcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXFxuIFxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9VTlNJR05FRF9PRkZTRVQsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuaW5kZXggNjVjOTYwOWVjMjA3Ny4uMTJmODRhMWU2ZmFiNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oXFxuQEAgLTM2LDYgKzM2LDcgQEAgTFNNX0hPT0soaW50LCAwLCBiaW5kZXJfdHJhbnNmZXJfZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXFxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX2FjY2Vzc19jaGVjaywgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcXG4gXFx0IHVuc2lnbmVkIGludCBtb2RlKVxcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4rTFNNX0hPT0soaW50LCAwLCBtZW1fZm9sbF9mb3JjZSwgY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKVxcbiBMU01fSE9PSyhpbnQsIDAsIGNhcGdldCwgY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxcbiBcXHQga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpXFxuIExTTV9IT09LKGludCwgMCwgY2Fwc2V0LCBzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcXG5pbmRleCAxNTNlOTA0MzA1OGY4Li5lOGJjMmU2NDQyNDFiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbkBAIC0zMzgsNiArMzM4LDcgQEAgaW50IHNlY3VyaXR5X2JpbmRlcl90cmFuc2Zlcl9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xcbiBpbnQgc2VjdXJpdHlfcHRyYWNlX2FjY2Vzc19jaGVjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgbW9kZSk7XFxuIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCk7XFxuK2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpO1xcbiBpbnQgc2VjdXJpdHlfY2FwZ2V0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LFxcbiBcXHRcXHQgICAga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXFxuIFxcdFxcdCAgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxcbkBAIC02NzYsNiArNjc3LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxcbiBcXHRyZXR1cm4gY2FwX3B0cmFjZV90cmFjZW1lKHBhcmVudCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGJvb2wgb3BlbmVkX2J5X293bmVyKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXFxuIFxcdFxcdFxcdFxcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxcbiBcXHRcXHRcXHRcXHQgICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLFxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbmluZGV4IDcxYWVhOGZkZjAxNDIuLjJjZGUxZWZkYjdhNjIgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcXG5AQCAtNTk1LDYgKzU5NSwzMSBAQCBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpXFxuIFxcdHJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpO1xcbiB9XFxuIFxcbisvKipcXG4rICogc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoKSAtIENoZWNrIGlmIEZPTExfRk9SQ0UgaXMgYWxsb3dlZFxcbisgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZFxcbisgKiBAb3BlbmVkX2J5X293bmVyOiB3aGV0aGVyIGNoZWNrcyBvbiBvcGVuKCkgd2VyZSBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXJcXG4rICogICAgICAgICAgICAgICAgICAgaGFzIHRoZSBzYW1lIE1NIGFzIHRoZSB0YXJnZXRcXG4rICpcXG4rICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhY2Nlc3NpbmcgcHJvY2VzcyBtZW1vcnkgdGhyb3VnaFxcbisgKiAvcHJvYy8kcGlkL21lbS4gb3BlbmVkX2J5X293bmVyIHNpZ25hbHMgd2hldGhlciB0aGUgb3BlbmVyJ3MgTU0gd2FzIHRoZSBzYW1lXFxuKyAqIGFzIHRoZSB0YXJnZXQgTU0sIG1lYW5pbmcgdGhlIHNlY3VyaXR5X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBob29rIHdhc1xcbisgKiBieXBhc3NlZCBvbiBvcGVuKCkuXFxuKyAqIChDdXJyZW50IGN1cnJlbnQtXFx1MDAzZW1tIGRvZXMgbm90IG1hdHRlciBmb3IgdGhpczsgZm9yIGV4YW1wbGUsIGlmIHdyaXRlKCkgaXNcXG4rICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGhcXG4rICogb3BlbihcXFwiL3Byb2Mvc2VsZi9tZW1cXFwiKSwgQG9wZW5lZF9ieV9vd25lciBpcyBzdGlsbCB0cnVlLilcXG4rICpcXG4rICogTm90ZSB0aGF0IHRoaXMgaG9vayBpcyBvbmx5IGRlc2lnbmVkIHRvIGJlIHVzZWZ1bCBpbiB0aGUgb3BlbmVkX2J5X293bmVyXFxuKyAqIGNhc2UsIHdoZXJlIHRoZSBzdWJqZWN0IGNyZWRlbnRpYWxzIGVmZmVjdGl2ZWx5IGFsc28gZGVzY3JpYmUgdGhlIG9iamVjdC5cXG4rICpcXG4rICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbisgKi9cXG4raW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXFxuK3tcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2sobWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QsIG9wZW5lZF9ieV9vd25lcik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9jYXBnZXQoKSAtIEdldCB0aGUgY2FwYWJpbGl0eSBzZXRzIGZvciBhIHByb2Nlc3NcXG4gICogQHRhcmdldDogdGFyZ2V0IHByb2Nlc3NcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuaW5kZXggMThkZDI4YjJiYjEzZC4uNDVlYWQxOGM4ZjAxYSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcXG5AQCAtMjE1Nyw2ICsyMTU3LDM2IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcXG4gXFx0XFx0XFx0ICAgIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgTlVMTCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0VcXG4rICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIHVzaW5nIHdoaWNoIC9wcm9jLyRwaWQvbWVtIHdhcyBvcGVuZWRcXG4rICogQG9wZW5lZF9ieV9vd25lcjogd2hldGhlciBjaGVja3Mgb24gb3BlbigpIHdlcmUgYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyXFxuKyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0XFxuKyAqXFxuKyAqIERlY2lkZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byByZWFkIG5vbi1yZWFkYWJsZSBWTUFzIGFuZCB3cml0ZVxcbisgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXFxuKyAqIFRoZSBAb3BlbmVkX2J5X293bmVyIGNhc2Ugb25seSBhcHBsaWVzIHRvIHN5c3RlbXMgY29uZmlndXJlZCB3aXRoXFxuKyAqIFBST0NfTUVNX0ZPUkNFX0FMV0FZUywgYW5kIG9ubHkgaGFwcGVucyBvbiBhY2Nlc3NlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0b1xcbisgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW5cXG4rICogbWF5X2FjY2Vzc19tbSgpIGFuZCBfX3B0cmFjZV9tYXlfYWNjZXNzKCkuXFxuKyAqXFxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxcbisgKlxcbisgKiBDcmVhdGluZyBhbiBhdWRpdCByZWNvcmQgb24gZGVuaWFsIGRvZXNuJ3QgbWFrZSBzZW5zZSBoZXJlLCBzaW5jZSB3ZSBjYW4ndFxcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cXG4rICovXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpXFxuK3tcXG4rXFx0c3RydWN0IGF2X2RlY2lzaW9uIGF2ZDtcXG4rXFx0dTMyIHNpZDtcXG4rXFxuK1xcdGlmICghb3BlbmVkX2J5X293bmVyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0c2lkID0gY3JlZF9zaWQoc3ViamVjdCk7XFxuK1xcbitcXHRyZXR1cm4gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXFx1MDAyNmF2ZCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgc2VsaW51eF9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxcbiBcXHRcXHRcXHQgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKVxcbiB7XFxuQEAgLTc1NTgsNiArNzU4OCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcbiBcXHRMU01fSE9PS19JTklUKHB0cmFjZV9hY2Nlc3NfY2hlY2ssIHNlbGludXhfcHRyYWNlX2FjY2Vzc19jaGVjayksXFxuIFxcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxcbitcXHRMU01fSE9PS19JTklUKG1lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSxcXG4gXFx0TFNNX0hPT0tfSU5JVChjYXBnZXQsIHNlbGludXhfY2FwZ2V0KSxcXG4gXFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcXG4gXFx0TFNNX0hPT0tfSU5JVChjYXBhYmxlLCBzZWxpbnV4X2NhcGFibGUpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoxMC41NDE1MDc2NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzIzNDc0MDk2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fb3BlblwiLFxuICAgIFwicHJvY19tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwibWVtX3J3XCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIixcbiAgICBcInNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJzZWxpbnV4X21lbV9mb2xsX2ZvcmNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZDUxYzNiNDQ1MDk3ZTkwOWEyZDczNTA1NTA3NDg4ODU1NTdmODAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMToyMzowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC04NDgsMTUgKzg0OCwzNSBAQCBzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuK3N0cnVjdCBtZW1fcHJpdmF0ZSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdC8qXG4rXHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxuK1x0ICogdGhlIHNhbWUgTU0gKGludHJvc3BlY3Rpb24pP1xuK1x0ICovXG4rXHRib29sIG9wZW5lZF9ieV9vd25lcjtcbit9O1xuK1xuIHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xuK1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4rXHRwcml2LVx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcbitcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVx1MDAzZW1tKSlcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbW0gPyBQVFJfRVJSKHByaXYtXHUwMDNlbW0pIDogLUVTUkNIO1xuK1x0cHJpdi1cdTAwM2VvcGVuZWRfYnlfb3duZXIgPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW07XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XG4gXG5AQCAtODcxLDE2ICs4OTEsMjAgQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdFx0XHRcdFJFQURfT05DRSh0YXNrLVx1MDAzZXBhcmVudCkgPT0gY3VycmVudDtcbiBcdFx0XHRwdXRfdGFza19zdHJ1Y3QodGFzayk7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIHB0cmFjZV9hY3RpdmU7XG4rXHRcdGlmICghcHRyYWNlX2FjdGl2ZSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdGJyZWFrO1xuIFx0fVxuK1x0cmV0dXJuIHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGZpbGUtXHUwMDNlZl9jcmVkLCBwcml2LVx1MDAzZW9wZW5lZF9ieV9vd25lcikgPT0gMDtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpXG4ge1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVx1MDAzZW1tO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKnBwb3M7XG4gXHRzc2l6ZV90IGNvcGllZDtcbiBcdGNoYXIgKnBhZ2U7XG5AQCAtOTcwLDEyICs5OTQsMjEgQEAgc3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdG1tZHJvcChwcml2LVx1MDAzZW1tKTtcbitcdGtmcmVlKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gbWVtX2xzZWVrLFxuIFx0LnJlYWRcdFx0PSBtZW1fcmVhZCxcbiBcdC53cml0ZVx0XHQ9IG1lbV93cml0ZSxcbiBcdC5vcGVuXHRcdD0gbWVtX29wZW4sXG4tXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbitcdC5yZWxlYXNlXHQ9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSxcbiBcdC5mb3BfZmxhZ3NcdD0gRk9QX1VOU0lHTkVEX09GRlNFVCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjEyZjg0YTFlNmZhYjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0zNiw2ICszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX2FjY2Vzc19jaGVjaywgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcbiBcdCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbitMU01fSE9PSyhpbnQsIDAsIG1lbV9mb2xsX2ZvcmNlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBnZXQsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiBMU01fSE9PSyhpbnQsIDAsIGNhcHNldCwgc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmU4YmMyZTY0NDI0MWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTMzOCw2ICszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpO1xuK2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpO1xuIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0ICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5AQCAtNjc2LDYgKzY3NywxMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsXG4rXHRcdFx0XHRcdCAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uMmNkZTFlZmRiN2E2MiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01OTUsNiArNTk1LDMxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpO1xuIH1cbiBcbisvKipcbisgKiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSgpIC0gQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkXG4rICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIHVzaW5nIHdoaWNoIC9wcm9jLyRwaWQvbWVtIHdhcyBvcGVuZWRcbisgKiBAb3BlbmVkX2J5X293bmVyOiB3aGV0aGVyIGNoZWNrcyBvbiBvcGVuKCkgd2VyZSBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXJcbisgKiAgICAgICAgICAgICAgICAgICBoYXMgdGhlIHNhbWUgTU0gYXMgdGhlIHRhcmdldFxuKyAqXG4rICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhY2Nlc3NpbmcgcHJvY2VzcyBtZW1vcnkgdGhyb3VnaFxuKyAqIC9wcm9jLyRwaWQvbWVtLiBvcGVuZWRfYnlfb3duZXIgc2lnbmFscyB3aGV0aGVyIHRoZSBvcGVuZXIncyBNTSB3YXMgdGhlIHNhbWVcbisgKiBhcyB0aGUgdGFyZ2V0IE1NLCBtZWFuaW5nIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vayB3YXNcbisgKiBieXBhc3NlZCBvbiBvcGVuKCkuXG4rICogKEN1cnJlbnQgY3VycmVudC1cdTAwM2VtbSBkb2VzIG5vdCBtYXR0ZXIgZm9yIHRoaXM7IGZvciBleGFtcGxlLCBpZiB3cml0ZSgpIGlzXG4rICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGhcbisgKiBvcGVuKFwiL3Byb2Mvc2VsZi9tZW1cIiksIEBvcGVuZWRfYnlfb3duZXIgaXMgc3RpbGwgdHJ1ZS4pXG4rICpcbisgKiBOb3RlIHRoYXQgdGhpcyBob29rIGlzIG9ubHkgZGVzaWduZWQgdG8gYmUgdXNlZnVsIGluIHRoZSBvcGVuZWRfYnlfb3duZXJcbisgKiBjYXNlLCB3aGVyZSB0aGUgc3ViamVjdCBjcmVkZW50aWFscyBlZmZlY3RpdmVseSBhbHNvIGRlc2NyaWJlIHRoZSBvYmplY3QuXG4rICpcbisgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4rICovXG4raW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LFxuK1x0XHRcdFx0XHQgICAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4re1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2sobWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QsIG9wZW5lZF9ieV9vd25lcik7XG4rfVxuK1xuIC8qKlxuICAqIHNlY3VyaXR5X2NhcGdldCgpIC0gR2V0IHRoZSBjYXBhYmlsaXR5IHNldHMgZm9yIGEgcHJvY2Vzc1xuICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxOGRkMjhiMmJiMTNkLi40NWVhZDE4YzhmMDFhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yMTU3LDYgKzIxNTcsMzYgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0XHRcdCAgICBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIE5VTEwpO1xuIH1cbiBcbisvKipcbisgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0VcbisgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZFxuKyAqIEBvcGVuZWRfYnlfb3duZXI6IHdoZXRoZXIgY2hlY2tzIG9uIG9wZW4oKSB3ZXJlIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lclxuKyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0XG4rICpcbisgKiBEZWNpZGUgd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBub24tcmVhZGFibGUgVk1BcyBhbmQgd3JpdGVcbisgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXG4rICogVGhlIEBvcGVuZWRfYnlfb3duZXIgY2FzZSBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGhcbisgKiBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5IGhhcHBlbnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG9cbisgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW5cbisgKiBtYXlfYWNjZXNzX21tKCkgYW5kIF9fcHRyYWNlX21heV9hY2Nlc3MoKS5cbisgKlxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxuKyAqXG4rICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2Vzbid0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJ3RcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cbisgKi9cbitzdGF0aWMgaW50IHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKVxuK3tcbitcdHN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7XG4rXHR1MzIgc2lkO1xuK1xuK1x0aWYgKCFvcGVuZWRfYnlfb3duZXIpXG4rXHRcdHJldHVybiAwO1xuK1x0c2lkID0gY3JlZF9zaWQoc3ViamVjdCk7XG4rXG4rXHRyZXR1cm4gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXHUwMDI2YXZkKTtcbit9XG4rXG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICs3NTg4LDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX2FjY2Vzc19jaGVjaywgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKSxcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxuK1x0TFNNX0hPT0tfSU5JVChtZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSksXG4gXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjEwLjU0MTUwOTA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk4MDE3MzcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpcyBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiB0aGlzIHBhdGNoLCByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3Mgd2l0aGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0sIGlzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBidXQgd2UgbmVlZCB0byBiZSBzbWFydCBhYm91dCBpdC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIFRoZSBkaWZmIGZvY3VzZXMgb24gYGZzL3Byb2MvYmFzZS5jYCBhbmQgaW50cm9kdWNlcyBhIG5ldyBMU00gaG9vaywgYG1lbV9mb2xsX2ZvcmNlYCwgYWxvbmcgd2l0aCByZWxhdGVkIHNlY3VyaXR5IGNoZWNrcy4gU3BlY2lmaWNhbGx5LCB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlIGFyZSBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGBtZW1fcndgLCBhbmQgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaW4gYGZzL3Byb2MvYmFzZS5jYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2VgIGFuZCB0aGUgYHNlbGludXhfbWVtX2ZvbGxfZm9yY2VgIGhvb2sgaW5kaWNhdGVzIHRoYXQgc2VjdXJpdHkgcGVybWlzc2lvbnMgYXJlIHBsYXlpbmcgYSByb2xlLlxuXG5Gcm9tIGBmcy9wcm9jL2Jhc2UuY2AsIGl0IGxvb2tzIGxpa2UgYG1lbV9vcGVuYCBhbGxvY2F0ZXMgYSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIChgbWVtX3ByaXZhdGVgKSBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIGEgZmlsZS4gQ3JpdGljYWxseSwgaXQgYXBwZWFycyB0aGF0IHRoaXMgc3RydWN0dXJlIHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIG1tIHN0cnVjdCBhbmQgaGFzIGEgZmxhZywgYG9wZW5lZF9ieV9vd25lcmAuIFRoZSBzZWN1cml0eSBjaGVjayAoYHByb2NfbWVtX2ZvbGxfZm9yY2VgKSBpcyB0aGVuIGV2YWx1YXRlZCBiYXNlZCBvbiB0aGlzIGZsYWcgYW5kIHRoZSBjYWxsaW5nIGNyZWRlbnRpYWxzLiBgbWVtX3J3YCB0aGVuIHJldHJpZXZlcyB0aGlzIHByaXZhdGUgZGF0YS4gQW5kIG9uIHJlbGVhc2UsIHRoZSBtbSBzdHJ1Y3R1cmUgaXMgZHJvcHBlZCBhbmQgdGhlIHByaXZhdGUgZGF0YSBmcmVlZC5cblxuVGhlIGBtZW1fZm9sbF9mb3JjZWAgaG9vayBpdHNlbGYsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBTRUxpbnV4LCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYmVjYXVzZSBpdCBsb29rcyBsaWtlIHdlIG1heSBiZSBhYmxlIHRvIGluZmx1ZW5jZSB0aGlzIGNoZWNrIGJ5IG1hbmlwdWxhdGluZyBjcmVkZW50aWFscyBvciB0aGUgYG9wZW5lZF9ieV9vd25lcmAgZmxhZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGFjdCB0aGlzIGhhcyBvbiB0aGUgc3lzdGVtLCBzbyBJIHNob3VsZCBub3cgZGl2ZSBkZWVwZXIgaW50byBgZnMvcHJvYy9iYXNlLmNgIGFuZCBhbnkgcmVsYXRlZCBmaWxlcy4gVXNpbmcgZ3JlcCwgb3Igc2ltcGx5IHJlYWRpbmcgdGhlIGNvZGUsIEkgY2FuIGxvb2sgZm9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlIG9yIGV4cG9zZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gdXNlciBzcGFjZS4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIHRhcmdldCBzZWxlY3Rpb24gZm9yIGZvY3VzIHN5bWJvbCBleHRyYWN0aW9uIGFuZCBmdXp6aW5nIHN0cmF0ZWdpZXMuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGBvcGVuZWRfYnlfb3duZXJgIGlzIHNldCBhbmQgaG93IHRoZSBzZWN1cml0eSBjaGVjayBpcyB1c2VkIHRvIGdhdGUgYWNjZXNzLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gY3JlZGVudGlhbHMsIG93bmVyc2hpcCwgYW5kIG1lbW9yeSBhY2Nlc3MgbWlnaHQgeWllbGQgc29tZSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoxNy41MjE2ODQ5NTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4NzM1NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY19tZW1fZm9sbF9mb3JjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz04NjE9c3RhdGljIGludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTg3Ni1cXG5mcy9wcm9jL2Jhc2UuYzo4Nzc6c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuZnMvcHJvYy9iYXNlLmMtODc4LXtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTkwMz1zdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy05MjQtXFx0ZmxhZ3MgPSB3cml0ZSA/IEZPTExfV1JJVEUgOiAwO1xcbmZzL3Byb2MvYmFzZS5jOjkyNTpcXHRpZiAocHJvY19tZW1fZm9sbF9mb3JjZShmaWxlLCBtbSkpXFxuZnMvcHJvYy9iYXNlLmMtOTI2LVxcdFxcdGZsYWdzIHw9IEZPTExfRk9SQ0U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjE3LjU2OTU2NDAzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjE3NjAwMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBmcy9wcm9jL2Jhc2UuY2AgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLCBgcHJvY19tZW1fb3BlcmF0aW9uc2AsIGFuZCBgX19tZW1fb3BlbmAgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmVhIG9mIGludGVyZXN0IGlzIGxpbmVzIDg0OCB0aHJvdWdoIDk5NCBpbiBgZnMvcHJvYy9iYXNlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHV0aWxpemUgYW55IG9mIHRoZXNlIHRoaW5ncy4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBhbnkgY3Jvc3MtcmVmZXJlbmNlcyB0byBnYWluIGNvbXBsZXRlIGNsYXJpdHkuIEl0IGNvdWxkIHJldmVhbCBzb21lIGludGVyZXN0aW5nIHVzYWdlIHBhdHRlcm5zIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjE5LjgzMTMyNjUyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzc0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL2Jhc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NDA6XFx0c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4gODQxOlxcdHtcXG4gODQyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgbW9kZSk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChtbSkpXFxuIDg0NTpcXHRcXHRcXHRyZXR1cm4gbW0gPyBQVFJfRVJSKG1tKSA6IC1FU1JDSDtcXG4gODQ2OlxcdFxcbiA4NDc6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbW07XFxuIDg0ODpcXHRcXHRyZXR1cm4gMDtcXG4gODQ5OlxcdH1cXG4gODUwOlxcdFxcbiA4NTE6XFx0LyogcHJpdmF0ZV9kYXRhIGZvciBwcm9jX21lbV9vcGVyYXRpb25zICovXFxuIDg1MjpcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUge1xcbiA4NTM6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW07XFxuIDg1NDpcXHRcXHQvKlxcbiA4NTU6XFx0XFx0ICogV2FzIHRoZSBwdHJhY2UgYWNjZXNzIGNoZWNrIG9uIG9wZW4gYnlwYXNzZWQgYmVjYXVzZSB0aGUgb3BlbmVyIHVzZWRcXG4gODU2OlxcdFxcdCAqIHRoZSBzYW1lIE1NIChpbnRyb3NwZWN0aW9uKT9cXG4gODU3OlxcdFxcdCAqL1xcbiA4NTg6XFx0XFx0Ym9vbCBvcGVuZWRfYnlfb3duZXI7XFxuIDg1OTpcXHR9O1xcbiA4NjA6XFx0XFxuIDg2MTpcXHRzdGF0aWMgaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiA4NjI6XFx0e1xcbiA4NjM6XFx0XFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xcbiA4NjQ6XFx0XFxuIDg2NTpcXHRcXHRpZiAoIXByaXYpXFxuIDg2NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODY3OlxcdFxcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXFxuIDg2ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gODY5OlxcdFxcdHByaXYtXFx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcXG4gODcwOlxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVxcdTAwM2VtbSkpXFxuIDg3MTpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbW0gPyBQVFJfRVJSKHByaXYtXFx1MDAzZW1tKSA6IC1FU1JDSDtcXG4gODcyOlxcdFxcdHByaXYtXFx1MDAzZW9wZW5lZF9ieV9vd25lciA9IHByaXYtXFx1MDAzZW1tID09IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiA4NzM6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gbm9fZnJlZV9wdHIocHJpdik7XFxuIDg3NDpcXHRcXHRyZXR1cm4gMDtcXG4gODc1OlxcdH1cXG4gODc2OlxcdFxcbiA4Nzc6XFx0c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIDg3ODpcXHR7XFxuIDg3OTpcXHRcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDg4MDpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuIDg4MTpcXHRcXHRib29sIHB0cmFjZV9hY3RpdmUgPSBmYWxzZTtcXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xcbiA4ODQ6XFx0XFx0Y2FzZSBQUk9DX01FTV9GT1JDRV9ORVZFUjpcXG4gODg1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODg2OlxcdFxcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFOlxcbiA4ODc6XFx0XFx0XFx0dGFzayA9IGdldF9wcm9jX3Rhc2soZmlsZV9pbm9kZShmaWxlKSk7XFxuIDg4ODpcXHRcXHRcXHRpZiAodGFzaykge1xcbiA4ODk6XFx0XFx0XFx0XFx0cHRyYWNlX2FjdGl2ZSA9XFx0UkVBRF9PTkNFKHRhc2stXFx1MDAzZXB0cmFjZSkgXFx1MDAyNlxcdTAwMjZcXG4gODkwOlxcdFxcdFxcdFxcdFxcdFxcdFJFQURfT05DRSh0YXNrLVxcdTAwM2VtbSkgPT0gbW0gXFx1MDAyNlxcdTAwMjZcXG4gODkxOlxcdFxcdFxcdFxcdFxcdFxcdFJFQURfT05DRSh0YXNrLVxcdTAwM2VwYXJlbnQpID09IGN1cnJlbnQ7XFxuIDg5MjpcXHRcXHRcXHRcXHRwdXRfdGFza19zdHJ1Y3QodGFzayk7XFxuIDg5MzpcXHRcXHRcXHR9XFxuIDg5NDpcXHRcXHRcXHRpZiAoIXB0cmFjZV9hY3RpdmUpXFxuIDg5NTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDg5NjpcXHRcXHRcXHRicmVhaztcXG4gODk3OlxcdFxcdGRlZmF1bHQ6XFxuIDg5ODpcXHRcXHRcXHRicmVhaztcXG4gODk5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MTkuODMxNDgyODQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1Mjc1NDk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgX19tZW1fb3BlbmAgYW5kIGBtZW1fcmVsZWFzZWAgVXNhZ2UqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIGBmcy9wcm9jL2Jhc2UuY2AgYWdhaW4sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBgX19tZW1fb3BlbmAgYW5kIGBtZW1fcmVsZWFzZWAgYXJlIHV0aWxpemVkLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIEkgYWxyZWFkeSBrbm93IHNvbWUgb2YgdGhlIGJhc2ljcywgYnV0IEkgbmVlZCB0byBmdWxseSBncm9rIHRoZWlyIGltcGFjdCBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9ucyBpbiB0aGlzIGFyZWEuIEkgbmVlZCB0byBjb21wcmVoZW5zaXZlbHkgdW5kZXJzdGFuZCBob3cgdGhlIGNvZGUgSSdtIGRlYWxpbmcgd2l0aCBvcGVucywgdXNlcywgYW5kIHJlbGVhc2VzIG1lbW9yeS4gR290dGEgbG9vayBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyB0aGF0IGEgY2FzdWFsIGdsYW5jZSBtaWdodCBtaXNzLiBTbywgSSdtIG5vdCBqdXN0IGxvb2tpbmcgaW4gYGZzL3Byb2MvYmFzZS5jYCDigJMgSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIFRpbWUgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZWlyIHVzZXMgdGhyb3VnaG91dCB0aGUga2VybmVsIGNvZGViYXNlLCB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoZSBnb2FsIGlzIGEgcm9jay1zb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGZ1bmN0aW9ucycgcm9sZSBhbmQgaW1wYWN0IGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbS4gR290dGEgbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MjIuMDg0MjM5OTA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTAwNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihfX21lbV9vcGVufG1lbV9yZWxlYXNlKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz04MTg9c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTgzOS1cXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9wcm9jL2Jhc2UuYy04NDEte1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9OTczPWxvZmZfdCBtZW1fbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtOTg4LVxcbmZzL3Byb2MvYmFzZS5jOjk4OTpzdGF0aWMgaW50IG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvYmFzZS5jLTk5MC17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy05OTYtXFxuZnMvcHJvYy9iYXNlLmM6OTk3OnN0YXRpYyBpbnQgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvYmFzZS5jLTk5OC17XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0xMDA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMDEwLVxcdC5vcGVuXFx0XFx0PSBtZW1fb3BlbixcXG5mcy9wcm9jL2Jhc2UuYzoxMDExOlxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXFxuZnMvcHJvYy9iYXNlLmMtMTAxMi1cXHQuZm9wX2ZsYWdzXFx0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTAxNT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDE2LXtcXG5mcy9wcm9jL2Jhc2UuYzoxMDE3OlxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDE4LX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwODM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19lbnZpcm9uX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xMDg2LVxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuZnMvcHJvYy9iYXNlLmM6MTA4NzpcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2UsXFxuZnMvcHJvYy9iYXNlLmMtMTA4OC19O1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTA5MD1zdGF0aWMgaW50IGF1eHZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDkxLXtcXG5mcy9wcm9jL2Jhc2UuYzoxMDkyOlxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xcbmZzL3Byb2MvYmFzZS5jLTEwOTMtfVxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTExMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2F1eHZfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTExMTMtXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG5mcy9wcm9jL2Jhc2UuYzoxMTE0OlxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZSxcXG5mcy9wcm9jL2Jhc2UuYy0xMTE1LX07XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0yNzcxPXN0YXRpYyBpbnQgcHJvY19waWRfYXR0cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMjc3My1cXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBOVUxMO1xcbmZzL3Byb2MvYmFzZS5jOjI3NzQ6XFx0X19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcXG5mcy9wcm9jL2Jhc2UuYy0yNzc1LVxcdHJldHVybiAwO1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9Mjg1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9hdHRyX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0yODYxLVxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuZnMvcHJvYy9iYXNlLmM6Mjg2MjpcXHQucmVsZWFzZVxcdD0gbWVtX3JlbGVhc2UsXFxuZnMvcHJvYy9iYXNlLmMtMjg2My19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoyMi4xMjk3NDUyNzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTU1Mjk4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBNZW1vcnkgQWNjZXNzIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGEgc2hpZnQgaW4gaG93IG1lbW9yeSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21lbWAuIEl0IHNlZW1zIHRoYXQgdGhlIGxlZ2FjeSBmdW5jdGlvbnMgYF9fbWVtX29wZW5gIGFuZCBgbWVtX3JlbGVhc2VgIOKAkyB3aGljaCB1bHRpbWF0ZWx5IGludm9sdmUgYG1tZHJvcChmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSlgIOKAkyBhcmUgc3RpbGwgdXNlZCBieSBgZW52aXJvbl9vcGVuYCwgYGF1eHZfb3BlbmAsIGFuZCBgcHJvY19waWRfYXR0cl9vcGVuYC4gSG93ZXZlciwgYHByb2NfbWVtX29wZXJhdGlvbnNgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXdlciBgbWVtX29wZW5gIGFuZCBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCwgd2hpY2ggbWFuYWdlcyBhIGBzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXZgLiBUaGlzIGBwcml2YCBpcyB0aGVuIHVucGFja2VkIGluIGZ1bmN0aW9ucyBsaWtlIGBwcm9jX21lbV9mb2xsX2ZvcmNlYCBhbmQgYG1lbV9yd2AgYXMgYGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhYC5cblxuKipMU00gSG9vayBhbmQgUmVhY2hhYmlsaXR5IEFuYWx5c2lzKipcblxuQWhhLCBhbmQgaGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZzogYSBuZXcgTFNNIGhvb2ssIGBtZW1fZm9sbF9mb3JjZWAsIGhhcyBwb3BwZWQgdXAgaW4gYm90aCBgc2VjdXJpdHkvc2VjdXJpdHkuY2AgYW5kIGBzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogY29kZT8gQW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBPcGVuaW5nIGFuZCBpbnRlcmFjdGluZyB3aXRoIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtYCDigJMgcmVhZGluZyBmcm9tIGFuZCB3cml0aW5nIHRvIGl0IOKAkyBpcyBhIGZ1bmRhbWVudGFsIGFuZCB3ZWxsLWVzdGFibGlzaGVkIHBhcnQgb2YgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gV2UncmUgdGFsa2luZyBhYm91dCBwcm9jZnMsIFZGUywgYW5kIHRoZSBzZWN1cml0eS9zZWxpbnV4IGZyYW1ld29ya3MgaGVyZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGluIHN1Y2ggY3J1Y2lhbCBzdWJzeXN0ZW1zLCBteSBpbnN0aW5jdCBzY3JlYW1zIHRoYXQgdGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZy5cblxuKipDb25maWd1cmF0aW9uIENoZWNrKipcblxuTm93LCBiZWZvcmUganVtcGluZyBpbiwgbGV0J3MganVzdCBjb25maXJtIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Ugc3Vic3lzdGVtcyBhcmUgZW5hYmxlZCBpbiBhIHR5cGljYWwga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBjaGVjazpcblxuKiAgIGBmcy9wcm9jL2Jhc2UuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1BST0NfRlNgIGlzIGVuYWJsZWQuXG4qICAgYHNlY3VyaXR5L3NlY3VyaXR5LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19TRUNVUklUWWAgaXMgZW5hYmxlZC5cbiogICBgc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWGAgaXMgZW5hYmxlZC5cblxuSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgYFBST0NfRlNgLCBgU0VDVVJJVFlgLCBhbmQgYFNFQ1VSSVRZX1NFTElOVVhgIHRvIGNvbmZpcm0gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE1NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoyNi4wODUwNDgyMjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQzOTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDVVJJVFlfU0VMSU5VWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMy1cXHRib29sIFxcXCJTRUxpbnV4IFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTEtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjEyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTRUxpbnV4IGJvb3QgcGFyYW1ldGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI1LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlNFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlNFTGludXggQVZDIFN0YXRpc3RpY3NcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDgtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQ5OmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXFx0aW50IFxcXCJTRUxpbnV4IHNpZHRhYiBoYXNodGFibGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02MC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYyLVxcdGludCBcXFwiU0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NzI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03My1cXHRpbnQgXFxcIlNFTGludXggYXZjIGhhc2h0YWJsZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTgyLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo4Mzpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTRUxpbnV4IGtlcm5lbCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MjYuMjQ0NDk0MzI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTM0NTM5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBTRUxpbnV4IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBTRUNVUklUWV9TRUxJTlVYYC4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgc2VjdXJpdHkvc2VsaW51eGAgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlaXIgZGVzY3JpcHRpb25zLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRoZXJlIGFuZCBleGFtaW5lIGBzZWN1cml0eS9zZWxpbnV4L0tjb25maWdgIGRpcmVjdGx5LiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25kaXRpb25zIG9yIG90aGVyIGZlYXR1cmVzIG11c3QgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYFNFQ1VSSVRZX1NFTElOVVhgIHRvIGJlIGF2YWlsYWJsZSBhbmQgaG93IGl0IG1pZ2h0IGltcGFjdCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgc3lzdGVtLiBJIGFudGljaXBhdGUgbmVlZGluZyB0byB1bmRlcnN0YW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzZWN1cml0eSBmZWF0dXJlcyBvciBvdGhlciBrZXJuZWwgY29tcG9uZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzoyOC44Mzc5NTA0MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwic2VjdXJpdHkvc2VsaW51eC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiU0VMaW51eCBTdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBTRUNVUklUWV9ORVRXT1JLIFxcdTAwMjZcXHUwMDI2IEFVRElUIFxcdTAwMjZcXHUwMDI2IE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgTkVUV09SS19TRUNNQVJLXFxuICAgNjpcXHRcXHRkZWZhdWx0IG5cXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBzZWxlY3RzIFNlY3VyaXR5LUVuaGFuY2VkIExpbnV4IChTRUxpbnV4KS5cXG4gICA5OlxcdFxcdCAgWW91IHdpbGwgYWxzbyBuZWVkIGEgcG9saWN5IGNvbmZpZ3VyYXRpb24gYW5kIGEgbGFiZWxlZCBmaWxlc3lzdGVtLlxcbiAgMTA6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cXG4gIDEzOlxcdFxcdGJvb2wgXFxcIlNFTGludXggYm9vdCBwYXJhbWV0ZXJcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFNFQ1VSSVRZX1NFTElOVVhcXG4gIDE1OlxcdFxcdGRlZmF1bHQgblxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIGEga2VybmVsIHBhcmFtZXRlciAnc2VsaW51eCcsIHdoaWNoIGFsbG93cyBTRUxpbnV4XFxuICAxODpcXHRcXHQgIHRvIGJlIGRpc2FibGVkIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgU0VMaW51eFxcbiAgMTk6XFx0XFx0ICBmdW5jdGlvbmFsaXR5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHNlbGludXg9MCBvbiB0aGUga2VybmVsXFxuICAyMDpcXHRcXHQgIGNvbW1hbmQgbGluZS4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGFsbG93IGEgc2luZ2xlXFxuICAyMTpcXHRcXHQgIGtlcm5lbCBpbWFnZSB0byBiZSBkaXN0cmlidXRlZCB3aXRoIFNFTGludXggYnVpbHQgaW4sIGJ1dCBub3RcXG4gIDIyOlxcdFxcdCAgbmVjZXNzYXJpbHkgZW5hYmxlZC5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxcbiAgMjU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjI4LjgzODAxMzU1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA0MDEyMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIFByb2NmcyBhbmQgTWVtb3J5IE92ZXJyaWRlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgcHJvYyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGBwcm9jX21lbV9mb3JjZV9vdmVycmlkZWAgb3B0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGZzL3Byb2MvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBwcm9jZnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNlIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IGBwcm9jX21lbV9mb3JjZV9vdmVycmlkZWAgYmVoYXZlcywgb3IgaWYgaXQncyBldmVuIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDczLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzozMC44NDIwMjc3OTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTYxMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBST0NfTUVNX0ZPUkNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTEyMT1lbnVtIHByb2NfbWVtX2ZvcmNlIHtcXG5mcy9wcm9jL2Jhc2UuYzoxMjI6XFx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTLFxcbmZzL3Byb2MvYmFzZS5jOjEyMzpcXHRQUk9DX01FTV9GT1JDRV9QVFJBQ0UsXFxuZnMvcHJvYy9iYXNlLmM6MTI0OlxcdFBST0NfTUVNX0ZPUkNFX05FVkVSXFxuZnMvcHJvYy9iYXNlLmMtMTI1LX07XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0xMjc9c3RhdGljIGVudW0gcHJvY19tZW1fZm9yY2UgcHJvY19tZW1fZm9yY2Vfb3ZlcnJpZGUgX19yb19hZnRlcl9pbml0ID1cXG5mcy9wcm9jL2Jhc2UuYzoxMjg6XFx0SVNfRU5BQkxFRChDT05GSUdfUFJPQ19NRU1fTk9fRk9SQ0UpID8gUFJPQ19NRU1fRk9SQ0VfTkVWRVIgOlxcbmZzL3Byb2MvYmFzZS5jOjEyOTpcXHRJU19FTkFCTEVEKENPTkZJR19QUk9DX01FTV9GT1JDRV9QVFJBQ0UpID8gUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIDpcXG5mcy9wcm9jL2Jhc2UuYzoxMzA6XFx0UFJPQ19NRU1fRk9SQ0VfQUxXQVlTO1xcbmZzL3Byb2MvYmFzZS5jLTEzMS1cXG5mcy9wcm9jL2Jhc2UuYz0xMzI9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25zdGFudF90YWJsZSBwcm9jX21lbV9mb3JjZV90YWJsZVtdIF9faW5pdGNvbnN0ID0ge1xcbmZzL3Byb2MvYmFzZS5jOjEzMzpcXHR7IFxcXCJhbHdheXNcXFwiLCBQUk9DX01FTV9GT1JDRV9BTFdBWVMgfSxcXG5mcy9wcm9jL2Jhc2UuYzoxMzQ6XFx0eyBcXFwicHRyYWNlXFxcIiwgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFIH0sXFxuZnMvcHJvYy9iYXNlLmM6MTM1OlxcdHsgXFxcIm5ldmVyXFxcIiwgUFJPQ19NRU1fRk9SQ0VfTkVWRVIgfSxcXG5mcy9wcm9jL2Jhc2UuYy0xMzYtXFx0eyB9XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz04Nzc9c3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy04ODMtXFx0c3dpdGNoIChwcm9jX21lbV9mb3JjZV9vdmVycmlkZSkge1xcbmZzL3Byb2MvYmFzZS5jOjg4NDpcXHRjYXNlIFBST0NfTUVNX0ZPUkNFX05FVkVSOlxcbmZzL3Byb2MvYmFzZS5jLTg4NS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuZnMvcHJvYy9iYXNlLmM6ODg2OlxcdGNhc2UgUFJPQ19NRU1fRk9SQ0VfUFRSQUNFOlxcbmZzL3Byb2MvYmFzZS5jLTg4Ny1cXHRcXHR0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlX2lub2RlKGZpbGUpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MzAuODg3NTkzNzExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzUyMDIyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgZm9yIFBST0NfRlMgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBQUk9DX0ZTIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gVGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIHBsYWNlIHRvIGNoZWNrIHRoYXQgaXMgZ29pbmcgdG8gYmUgdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgb3IgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIHNldCB0byBlbmFibGUgb3IgZGlzYWJsZSBpdC4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwIGluIHRyb3VibGVzaG9vdGluZyBvciBtb2RpZnlpbmcgYW55IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gR290dGEgc3RhcnQgd2l0aCB0aGUgc291cmNlIG9mIHRydXRoLCB0aGUgS2NvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzozMy4zNjI3OTkxNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzI4MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUk9DX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9wcm9jL0tjb25maWc6Mjpjb25maWcgUFJPQ19GU1xcbmZzL3Byb2MvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuZnMvcHJvYy9LY29uZmlnLTMxLVxcbmZzL3Byb2MvS2NvbmZpZzozMjpjb25maWcgUFJPQ19LQ09SRVxcbmZzL3Byb2MvS2NvbmZpZy0zMy1cXHRib29sIFxcXCIvcHJvYy9rY29yZSBzdXBwb3J0XFxcIiBpZiAhQVJNXFxuLS1cXG5mcy9wcm9jL0tjb25maWctNDAtXFxuZnMvcHJvYy9LY29uZmlnOjQxOmNvbmZpZyBQUk9DX1ZNQ09SRVxcbmZzL3Byb2MvS2NvbmZpZy00Mi1cXHRib29sIFxcXCIvcHJvYy92bWNvcmUgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy00Ny1cXG5mcy9wcm9jL0tjb25maWc6NDg6Y29uZmlnIFBST0NfVk1DT1JFX0RFVklDRV9EVU1QXFxuZnMvcHJvYy9LY29uZmlnLTQ5LVxcdGJvb2wgXFxcIkRldmljZSBIYXJkd2FyZS9GaXJtd2FyZSBMb2cgQ29sbGVjdGlvblxcXCJcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZz02ND1jb25maWcgTkVFRF9QUk9DX1ZNQ09SRV9ERVZJQ0VfUkFNXFxuLS1cXG5mcy9wcm9jL0tjb25maWctNjYtXFxuZnMvcHJvYy9LY29uZmlnOjY3OmNvbmZpZyBQUk9DX1ZNQ09SRV9ERVZJQ0VfUkFNXFxuZnMvcHJvYy9LY29uZmlnLTY4LVxcdGRlZl9ib29sIHlcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy04Mi1cXG5mcy9wcm9jL0tjb25maWc6ODM6Y29uZmlnIFBST0NfU1lTQ1RMXFxuZnMvcHJvYy9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIlN5c2N0bCBzdXBwb3J0ICgvcHJvYy9zeXMpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy0xMDEtXFxuZnMvcHJvYy9LY29uZmlnOjEwMjpjb25maWcgUFJPQ19QQUdFX01PTklUT1JcXG5mcy9wcm9jL0tjb25maWctMTAzLSBcXHRkZWZhdWx0IHlcXG4tLVxcbmZzL3Byb2MvS2NvbmZpZy0xMTEtXFxuZnMvcHJvYy9LY29uZmlnOjExMjpjb25maWcgUFJPQ19DSElMRFJFTlxcbmZzL3Byb2MvS2NvbmZpZy0xMTMtXFx0Ym9vbCBcXFwiSW5jbHVkZSAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS90YXNrL1xcdTAwM2N0aWRcXHUwMDNlL2NoaWxkcmVuIGZpbGVcXFwiXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTIyLVxcbmZzL3Byb2MvS2NvbmZpZzoxMjM6Y29uZmlnIFBST0NfUElEX0FSQ0hfU1RBVFVTXFxuZnMvcHJvYy9LY29uZmlnLTEyNC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTI2LVxcbmZzL3Byb2MvS2NvbmZpZzoxMjc6Y29uZmlnIFBST0NfQ1BVX1JFU0NUUkxcXG5mcy9wcm9jL0tjb25maWctMTI4LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6MzMuNDA3MTMzNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2OTE2NzY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlNlY3VyaXR5IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZmluYWxpemUgdGhpcywgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBzZWN1cml0eSBhbmQgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGVzLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBgQ09ORklHX1NFQ1VSSVRZYCBzZXR0aW5nLCBhbmQgaXRzIHZhcmlvdXMgc3ViLW9wdGlvbnMuIENhbid0IGp1c3QgYXNzdW1lIGl0J3Mgc2V0IHJpZ2h0LiBNeSBndXQgdGVsbHMgbWUgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBtaWdodCB0b3VjaCBvbiBzb21lIHNlY3VyaXR5IG1vZHVsZXMsIHNvIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0J3MgZWFzeSB0byBtaXNzIHNvbWV0aGluZyB3aGVuIGp1Z2dsaW5nIHRoZXNlIGRldGFpbHMsIGFuZCBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBpbiBLY29uZmlnIGNhbiBjYXRjaCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCB0aGUgc2VjdXJpdHkgY29udGV4dC4gVGhpcyBpcyB0aGUgc3RhZ2Ugd2hlcmUgdGhvcm91Z2huZXNzIHBheXMgb2ZmLiBJJ2QgaGF0ZSB0byBzdWJtaXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBzdWJ0bGUgdnVsbmVyYWJpbGl0eSBkdWUgdG8gYSBzaW1wbGUgb3ZlcnNpZ2h0IGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU1NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjM1LjM3NjMwMzYyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMjIyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNFQ1VSSVRZXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic2VjdXJpdHkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy03Mi1cXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxcbnNlY3VyaXR5L0tjb25maWctNzQtXFx0Ym9vbCBcXFwiRW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjM1LjQyNDY0ODcyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTgwNTk2NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9jdXMgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgYEZvY3VzU3ltYm9sc2AuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgdG91Y2hlZC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGBtZW1fcndgIGFuZCB0aGUgYWRkaXRpb24gb2YgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAsIGBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZWAsIGFuZCBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZWAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIHRoZWlyIHNjb3BlLiBBcmUgdGhlc2UgZ2VuZXJhbC1wdXJwb3NlIGNvbXBvbmVudHMgb3Igc29tZXRoaW5nIG1vcmUgdGFyZ2V0ZWQ/IEdvb2QsIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGFsbCB0aWdodGx5IGNvdXBsZWQgd2l0aCBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21lbWAgaW50ZXJhY3Rpb24gYW5kIHRoZSBTRUxpbnV4IGhvb2tzIGRlYWxpbmcgd2l0aCBGT0xMX0ZPUkNFIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgYSB2ZXJ5IG5hcnJvdyBzZXQgb2YgY2hhbmdlcywgbm90IHRvdWNoaW5nIHRoZSBjb3JlIGFsbG9jYXRvcnMsIHRyYXAgaGFuZGxlcnMsIG9yIHN5c2NhbGwgZW50cnlwb2ludHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdvdWxkIGV4cGVjdC4gVGhpcyBzdWdnZXN0cyB0aGlzIGlzIGZvY3VzZWQgd29yay5cblxuTm93LCBsZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBJJ2xsIGZvY3VzIG9uIGBtZW1fcmVhZGAgYW5kIGBtZW1fd3JpdGVgLiBGcm9tIGBmcy9wcm9jL2Jhc2UuY2AgSSBjYW4gc2VlIHRoYXQgYG1lbV9yd2AgaXMgY2FsbGVkIGJ5IGJvdGguIEhtbSwgSSBrbm93IHRoYXQgYG1lbV9yd2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBUaGF0IGNvbmZpcm1zIG15IGFzc3VtcHRpb24uIExldCdzIHNlZSB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aGUgZnMvcHJvYy9iYXNlLmMgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDkwMCB0byA5ODAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODQxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjM4LjYwNTI0ODkyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy9iYXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTAwOlxcdFxcdHJldHVybiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShmaWxlLVxcdTAwM2VmX2NyZWQsIHByaXYtXFx1MDAzZW9wZW5lZF9ieV9vd25lcikgPT0gMDtcXG4gOTAxOlxcdH1cXG4gOTAyOlxcdFxcbiA5MDM6XFx0c3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiA5MDQ6XFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsIGludCB3cml0ZSlcXG4gOTA1OlxcdHtcXG4gOTA2OlxcdFxcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gOTA3OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cXHUwMDNlbW07XFxuIDkwODpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAqcHBvcztcXG4gOTA5OlxcdFxcdHNzaXplX3QgY29waWVkO1xcbiA5MTA6XFx0XFx0Y2hhciAqcGFnZTtcXG4gOTExOlxcdFxcdHVuc2lnbmVkIGludCBmbGFncztcXG4gOTEyOlxcdFxcbiA5MTM6XFx0XFx0aWYgKCFtbSlcXG4gOTE0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5MTU6XFx0XFxuIDkxNjpcXHRcXHRwYWdlID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbiA5MTc6XFx0XFx0aWYgKCFwYWdlKVxcbiA5MTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDkxOTpcXHRcXG4gOTIwOlxcdFxcdGNvcGllZCA9IDA7XFxuIDkyMTpcXHRcXHRpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSlcXG4gOTIyOlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0ZmxhZ3MgPSB3cml0ZSA/IEZPTExfV1JJVEUgOiAwO1xcbiA5MjU6XFx0XFx0aWYgKHByb2NfbWVtX2ZvbGxfZm9yY2UoZmlsZSwgbW0pKVxcbiA5MjY6XFx0XFx0XFx0ZmxhZ3MgfD0gRk9MTF9GT1JDRTtcXG4gOTI3OlxcdFxcbiA5Mjg6XFx0XFx0d2hpbGUgKGNvdW50IFxcdTAwM2UgMCkge1xcbiA5Mjk6XFx0XFx0XFx0c2l6ZV90IHRoaXNfbGVuID0gbWluX3Qoc2l6ZV90LCBjb3VudCwgUEFHRV9TSVpFKTtcXG4gOTMwOlxcdFxcbiA5MzE6XFx0XFx0XFx0aWYgKHdyaXRlIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV91c2VyKHBhZ2UsIGJ1ZiwgdGhpc19sZW4pKSB7XFxuIDkzMjpcXHRcXHRcXHRcXHRjb3BpZWQgPSAtRUZBVUxUO1xcbiA5MzM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDkzNDpcXHRcXHRcXHR9XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdFxcdHRoaXNfbGVuID0gYWNjZXNzX3JlbW90ZV92bShtbSwgYWRkciwgcGFnZSwgdGhpc19sZW4sIGZsYWdzKTtcXG4gOTM3OlxcdFxcdFxcdGlmICghdGhpc19sZW4pIHtcXG4gOTM4OlxcdFxcdFxcdFxcdGlmICghY29waWVkKVxcbiA5Mzk6XFx0XFx0XFx0XFx0XFx0Y29waWVkID0gLUVJTztcXG4gOTQwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5NDE6XFx0XFx0XFx0fVxcbiA5NDI6XFx0XFxuIDk0MzpcXHRcXHRcXHRpZiAoIXdyaXRlIFxcdTAwMjZcXHUwMDI2IGNvcHlfdG9fdXNlcihidWYsIHBhZ2UsIHRoaXNfbGVuKSkge1xcbiA5NDQ6XFx0XFx0XFx0XFx0Y29waWVkID0gLUVGQVVMVDtcXG4gOTQ1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5NDY6XFx0XFx0XFx0fVxcbiA5NDc6XFx0XFxuIDk0ODpcXHRcXHRcXHRidWYgKz0gdGhpc19sZW47XFxuIDk0OTpcXHRcXHRcXHRhZGRyICs9IHRoaXNfbGVuO1xcbiA5NTA6XFx0XFx0XFx0Y29waWVkICs9IHRoaXNfbGVuO1xcbiA5NTE6XFx0XFx0XFx0Y291bnQgLT0gdGhpc19sZW47XFxuIDk1MjpcXHRcXHR9XFxuIDk1MzpcXHRcXHQqcHBvcyA9IGFkZHI7XFxuIDk1NDpcXHRcXG4gOTU1OlxcdFxcdG1tcHV0KG1tKTtcXG4gOTU2OlxcdGZyZWU6XFxuIDk1NzpcXHRcXHRrZnJlZShwYWdlKTtcXG4gOTU4OlxcdFxcdHJldHVybiBjb3BpZWQ7XFxuIDk1OTpcXHR9XFxuIDk2MDpcXHRcXG4gOTYxOlxcdHN0YXRpYyBzc2l6ZV90IG1lbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiA5NjI6XFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIDk2MzpcXHR7XFxuIDk2NDpcXHRcXHRyZXR1cm4gbWVtX3J3KGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MsIDApO1xcbiA5NjU6XFx0fVxcbiA5NjY6XFx0XFxuIDk2NzpcXHRzdGF0aWMgc3NpemVfdCBtZW1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuIDk2ODpcXHRcXHRcXHRcXHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIDk2OTpcXHR7XFxuIDk3MDpcXHRcXHRyZXR1cm4gbWVtX3J3KGZpbGUsIChjaGFyIF9fdXNlciopYnVmLCBjb3VudCwgcHBvcywgMSk7XFxuIDk3MTpcXHR9XFxuIDk3MjpcXHRcXG4gOTczOlxcdGxvZmZfdCBtZW1fbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKVxcbiA5NzQ6XFx0e1xcbiA5NzU6XFx0XFx0c3dpdGNoIChvcmlnKSB7XFxuIDk3NjpcXHRcXHRjYXNlIDA6XFxuIDk3NzpcXHRcXHRcXHRmaWxlLVxcdTAwM2VmX3BvcyA9IG9mZnNldDtcXG4gOTc4OlxcdFxcdFxcdGJyZWFrO1xcbiA5Nzk6XFx0XFx0Y2FzZSAxOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzozOC42MDU0MjE2MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwMjMwNjExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBSZWFzb25pbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gdmVyaWZ5aW5nIHRoZSByZWxldmFudCBzeW1ib2xzLiBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZXNlIGBGb2N1c1N5bWJvbHNgIOKAkyBgbWVtX29wZW5gLCBgcHJvY19tZW1fZm9sbF9mb3JjZWAsIGBtZW1fcndgLCB0aGUgYG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZWAgaG91c2VrZWVwaW5nLCBhbmQgdGhlIFNFTGludXggdmFyaWFudCwgYHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlYCBhbmQgYHNlbGludXhfbWVtX2ZvbGxfZm9yY2VgLiBUaGF0IGxvb2tzIHJpZ2h0LiBJIGFsc28gZG91YmxlLWNoZWNrZWQgdGhlIHJlcXVpcmVkIGBFbmFibGVDb25maWdzYDogYFBST0NfRlNgLCBgU0VDVVJJVFlgLCBhbmQgYFNFQ1VSSVRZX1NFTElOVVhgLiBHb29kLCB0aG9zZSBhcmUgYWxsIGluIHBsYWNlLlxuXG5Ob3cgZm9yIHRoZSBjb3JlIHJlYXNvbmluZy4gVGhlIHJlYWNoYWJpbGl0eSBhbmFseXNpcyB0ZWxscyBtZSB0aGF0IGEgdXNlci1zcGFjZSBwcm9ncmFtIGNhbiBpbmRlZWQgb3BlbiwgcmVhZCwgYW5kIHdyaXRlIHRvIGAvcHJvYy8kcGlkL21lbWAgaW4gUUVNVS4gQ3J1Y2lhbGx5LCBJIHNlZSB0aGF0IHRoZSBTRUxpbnV4IGhvb2tzICphcmUqIGV4ZWN1dGVkIHdoZW4gYG1lbV9mb2xsX2ZvcmNlYCBpcyB0cmlnZ2VyZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSBuZWNlc3NhcnkgZXhlY3V0YWJsZSBjb2RlIGluIGBmcy9wcm9jYCBhbmQgdGhlIGBzZWN1cml0eWAgc3Vic3lzdGVtLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIHdhbnRlZCB0byBjb25maXJtLlxuXG5UaGUgY3JpdGljYWwgaW5zaWdodCBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rLCBgbWVtX2ZvbGxfZm9yY2VgLCBzcGVjaWZpY2FsbHkgaW5jbHVkaW5nIGFuIFNFTGludXggaW1wbGVtZW50YXRpb24sIGFuZCBpdCBmdW5kYW1lbnRhbGx5IHVwZGF0ZXMgdGhlIGhhbmRsaW5nIG9mIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbWVtYC4gIEl0J3Mgd3JhcHBpbmcgbWV0YWRhdGEgaW4gdGhpcyBgc3RydWN0IG1lbV9wcml2YXRlYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCBmdXp6aW5nIGlzIGp1c3RpZmllZC4gV2UgbmVlZCB0byB2YWxpZGF0ZSBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zLCBlbnN1cmUgdGhlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgYG1lbV9wcml2YXRlYCBpcyByb2J1c3QsIGFuZCBjcml0aWNhbGx5LCBlbmZvcmNlIHRoZSBzZW1hbnRpY3Mgb2YgYEZPTExfRk9SQ0VgLiBUaGlzIGlzIGEgcmljaCB0YXJnZXQgYW5kIGhpZ2hseSB2YWx1YWJsZS4gVGltZSB0byB3cml0ZSB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4NCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzo0Mi44MDc3MzA2MTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTE4MzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiU0VDVVJJVFlcIixcbiAgICBcIlNFQ1VSSVRZX1NFTElOVVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fb3BlblwiLFxuICAgIFwicHJvY19tZW1fZm9sbF9mb3JjZVwiLFxuICAgIFwibWVtX3J3XCIsXG4gICAgXCJtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGVcIixcbiAgICBcInNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJzZWxpbnV4X21lbV9mb2xsX2ZvcmNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvbWVtIG9wZXJhdGlvbnMgKG1lbV9vcGVuLCBtZW1fcncsIHByb2NfbWVtX2ZvbGxfZm9yY2UsIG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSkgYnkgaW50cm9kdWNpbmcgc3RydWN0IG1lbV9wcml2YXRlIHRvIHRyYWNrIG9wZW5lciBNTSBvd25lcnNoaXAgYW5kIGFkZHMgYSBuZXcgTFNNIGhvb2sgKHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlLCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKSB0byBnb3Zlcm4gRk9MTF9GT1JDRSBtZW1vcnkgYWNjZXNzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCIsXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9vcGVuXCIsXG4gICAgXCJwcm9jX21lbV9mb2xsX2ZvcmNlXCIsXG4gICAgXCJtZW1fcndcIixcbiAgICBcIm1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZVwiLFxuICAgIFwic2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2VcIixcbiAgICBcInNlbGludXhfbWVtX2ZvbGxfZm9yY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9tZW0gb3BlcmF0aW9ucyAobWVtX29wZW4sIG1lbV9ydywgcHJvY19tZW1fZm9sbF9mb3JjZSwgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlKSBieSBpbnRyb2R1Y2luZyBzdHJ1Y3QgbWVtX3ByaXZhdGUgdG8gdHJhY2sgb3BlbmVyIE1NIG93bmVyc2hpcCBhbmQgYWRkcyBhIG5ldyBMU00gaG9vayAoc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UsIHNlbGludXhfbWVtX2ZvbGxfZm9yY2UpIHRvIGdvdmVybiBGT0xMX0ZPUkNFIG1lbW9yeSBhY2Nlc3MuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzo0Mi44ODg5MjE1NzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTM3NDcwOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6NDIuODg5NDU5MzIyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ1MzY5MjgxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2sgYG1lbV9mb2xsX2ZvcmNlYCBhbmQgcmVwbGFjZXMgdGhlIGRpcmVjdCBgbW1fc3RydWN0YCBwb2ludGVyIGluIGBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGFgIG9mIGAvcHJvYy8kcGlkL21lbWAgd2l0aCBhIHNtYWxsIGNvbnRhaW5lciBgc3RydWN0IG1lbV9wcml2YXRlYCBjb250YWluaW5nIGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgLlxcblxcbi0gSW4gYG1lbV9vcGVuKClgLCB0aGUgaGVhcCBhbGxvY2F0aW9uIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYCBoYXMgYWxsIGl0cyBmaWVsZHMgKGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIGFzc2lnbmVkIHRvIGBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGFgLlxcbi0gSW4gYHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoKWAsIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBhdl9kZWNpc2lvbiBhdmRgIGlzIHBhc3NlZCBhcyBhbiBvdXRwdXQgYnVmZmVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpYCwgYW5kIGl0cyBmaWVsZHMgYXJlIG5vdCByZWFkIGJlZm9yZSBpbml0aWFsaXphdGlvbi5cXG4tIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKHN1Y2ggYXMgbGlmZXRpbWUvZnJlZWluZyBvZiBgcHJpdmAgb3IgYG1tYCkgYXJlIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBwcm9wZXJseSBjb3ZlcmVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZDUxYzNiNDQ1MDk3ZTkwOWEyZDczNTA1NTA3NDg4ODU1NTdmODAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMToyMzowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmNcbmluZGV4IDc4MGY4MTI1OTA1MjcuLjI5NWIyMTIwM2M3ZmUgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2Jhc2UuY1xuKysrIGIvZnMvcHJvYy9iYXNlLmNcbkBAIC04NDgsMTUgKzg0OCwzNSBAQCBzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qIHByaXZhdGVfZGF0YSBmb3IgcHJvY19tZW1fb3BlcmF0aW9ucyAqL1xuK3N0cnVjdCBtZW1fcHJpdmF0ZSB7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcbitcdC8qXG4rXHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxuK1x0ICogdGhlIHNhbWUgTU0gKGludHJvc3BlY3Rpb24pP1xuK1x0ICovXG4rXHRib29sIG9wZW5lZF9ieV9vd25lcjtcbit9O1xuK1xuIHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuK1x0c3RydWN0IG1lbV9wcml2YXRlICpwcml2IF9fZnJlZShrZnJlZSkgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpO1xuK1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIShmaWxlLVx1MDAzZWZfb3AtXHUwMDNlZm9wX2ZsYWdzIFx1MDAyNiBGT1BfVU5TSUdORURfT0ZGU0VUKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0cmV0dXJuIF9fbWVtX29wZW4oaW5vZGUsIGZpbGUsIFBUUkFDRV9NT0RFX0FUVEFDSCk7XG4rXHRwcml2LVx1MDAzZW1tID0gcHJvY19tZW1fb3Blbihpbm9kZSwgUFRSQUNFX01PREVfQVRUQUNIKTtcbitcdGlmIChJU19FUlJfT1JfTlVMTChwcml2LVx1MDAzZW1tKSlcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbW0gPyBQVFJfRVJSKHByaXYtXHUwMDNlbW0pIDogLUVTUkNIO1xuK1x0cHJpdi1cdTAwM2VvcGVuZWRfYnlfb3duZXIgPSBwcml2LVx1MDAzZW1tID09IGN1cnJlbnQtXHUwMDNlbW07XG4rXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IG5vX2ZyZWVfcHRyKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBib29sIHByb2NfbWVtX2ZvbGxfZm9yY2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIFx0Ym9vbCBwdHJhY2VfYWN0aXZlID0gZmFsc2U7XG4gXG5AQCAtODcxLDE2ICs4OTEsMjAgQEAgc3RhdGljIGJvb2wgcHJvY19tZW1fZm9sbF9mb3JjZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdFx0XHRcdFJFQURfT05DRSh0YXNrLVx1MDAzZXBhcmVudCkgPT0gY3VycmVudDtcbiBcdFx0XHRwdXRfdGFza19zdHJ1Y3QodGFzayk7XG4gXHRcdH1cbi1cdFx0cmV0dXJuIHB0cmFjZV9hY3RpdmU7XG4rXHRcdGlmICghcHRyYWNlX2FjdGl2ZSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdGJyZWFrO1xuIFx0fVxuK1x0cmV0dXJuIHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGZpbGUtXHUwMDNlZl9jcmVkLCBwcml2LVx1MDAzZW9wZW5lZF9ieV9vd25lcikgPT0gMDtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbWVtX3J3KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLCBpbnQgd3JpdGUpXG4ge1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVx1MDAzZW1tO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKnBwb3M7XG4gXHRzc2l6ZV90IGNvcGllZDtcbiBcdGNoYXIgKnBhZ2U7XG5AQCAtOTcwLDEyICs5OTQsMjEgQEAgc3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcbitcdG1tZHJvcChwcml2LVx1MDAzZW1tKTtcbitcdGtmcmVlKHByaXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XG4gXHQubGxzZWVrXHRcdD0gbWVtX2xzZWVrLFxuIFx0LnJlYWRcdFx0PSBtZW1fcmVhZCxcbiBcdC53cml0ZVx0XHQ9IG1lbV93cml0ZSxcbiBcdC5vcGVuXHRcdD0gbWVtX29wZW4sXG4tXHQucmVsZWFzZVx0PSBtZW1fcmVsZWFzZSxcbitcdC5yZWxlYXNlXHQ9IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZSxcbiBcdC5mb3BfZmxhZ3NcdD0gRk9QX1VOU0lHTkVEX09GRlNFVCxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjEyZjg0YTFlNmZhYjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0zNiw2ICszNiw3IEBAIExTTV9IT09LKGludCwgMCwgYmluZGVyX3RyYW5zZmVyX2ZpbGUsIGNvbnN0IHN0cnVjdCBjcmVkICpmcm9tLFxuIExTTV9IT09LKGludCwgMCwgcHRyYWNlX2FjY2Vzc19jaGVjaywgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCxcbiBcdCB1bnNpZ25lZCBpbnQgbW9kZSlcbiBMU01fSE9PSyhpbnQsIDAsIHB0cmFjZV90cmFjZW1lLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbitMU01fSE9PSyhpbnQsIDAsIG1lbV9mb2xsX2ZvcmNlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4gTFNNX0hPT0soaW50LCAwLCBjYXBnZXQsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiBMU01fSE9PSyhpbnQsIDAsIGNhcHNldCwgc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLmU4YmMyZTY0NDI0MWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTMzOCw2ICszMzgsNyBAQCBpbnQgc2VjdXJpdHlfYmluZGVyX3RyYW5zZmVyX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmZyb20sXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBjcmVkICp0bywgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUpO1xuIGludCBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfcHRyYWNlX3RyYWNlbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpO1xuK2ludCBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZShjb25zdCBzdHJ1Y3QgY3JlZCAqc3ViamVjdCwgYm9vbCBvcGVuZWRfYnlfb3duZXIpO1xuIGludCBzZWN1cml0eV9jYXBnZXQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsXG4gXHRcdCAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSxcbiBcdFx0ICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsXG5AQCAtNjc2LDYgKzY3NywxMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYXBfcHRyYWNlX3RyYWNlbWUocGFyZW50KTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsXG4rXHRcdFx0XHRcdCAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCxcbiBcdFx0XHRcdCAgIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLFxuIFx0XHRcdFx0ICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggNzFhZWE4ZmRmMDE0Mi4uMmNkZTFlZmRiN2E2MiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC01OTUsNiArNTk1LDMxIEBAIGludCBzZWN1cml0eV9wdHJhY2VfdHJhY2VtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudClcbiBcdHJldHVybiBjYWxsX2ludF9ob29rKHB0cmFjZV90cmFjZW1lLCBwYXJlbnQpO1xuIH1cbiBcbisvKipcbisgKiBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZSgpIC0gQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkXG4rICogQHN1YmplY3Q6IGNyZWRlbnRpYWxzIHVzaW5nIHdoaWNoIC9wcm9jLyRwaWQvbWVtIHdhcyBvcGVuZWRcbisgKiBAb3BlbmVkX2J5X293bmVyOiB3aGV0aGVyIGNoZWNrcyBvbiBvcGVuKCkgd2VyZSBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXJcbisgKiAgICAgICAgICAgICAgICAgICBoYXMgdGhlIHNhbWUgTU0gYXMgdGhlIHRhcmdldFxuKyAqXG4rICogQ2hlY2sgaWYgRk9MTF9GT1JDRSBpcyBhbGxvd2VkIGZvciBhY2Nlc3NpbmcgcHJvY2VzcyBtZW1vcnkgdGhyb3VnaFxuKyAqIC9wcm9jLyRwaWQvbWVtLiBvcGVuZWRfYnlfb3duZXIgc2lnbmFscyB3aGV0aGVyIHRoZSBvcGVuZXIncyBNTSB3YXMgdGhlIHNhbWVcbisgKiBhcyB0aGUgdGFyZ2V0IE1NLCBtZWFuaW5nIHRoZSBzZWN1cml0eV9wdHJhY2VfYWNjZXNzX2NoZWNrKCkgaG9vayB3YXNcbisgKiBieXBhc3NlZCBvbiBvcGVuKCkuXG4rICogKEN1cnJlbnQgY3VycmVudC1cdTAwM2VtbSBkb2VzIG5vdCBtYXR0ZXIgZm9yIHRoaXM7IGZvciBleGFtcGxlLCBpZiB3cml0ZSgpIGlzXG4rICogY2FsbGVkIG9uIGFuIEZEIHRoYXQgd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwcm9jZXNzIHdoaWNoIG9idGFpbmVkIGl0IHdpdGhcbisgKiBvcGVuKFwiL3Byb2Mvc2VsZi9tZW1cIiksIEBvcGVuZWRfYnlfb3duZXIgaXMgc3RpbGwgdHJ1ZS4pXG4rICpcbisgKiBOb3RlIHRoYXQgdGhpcyBob29rIGlzIG9ubHkgZGVzaWduZWQgdG8gYmUgdXNlZnVsIGluIHRoZSBvcGVuZWRfYnlfb3duZXJcbisgKiBjYXNlLCB3aGVyZSB0aGUgc3ViamVjdCBjcmVkZW50aWFscyBlZmZlY3RpdmVseSBhbHNvIGRlc2NyaWJlIHRoZSBvYmplY3QuXG4rICpcbisgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4rICovXG4raW50IHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LFxuK1x0XHRcdFx0XHQgICAgYm9vbCBvcGVuZWRfYnlfb3duZXIpXG4re1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2sobWVtX2ZvbGxfZm9yY2UsIHN1YmplY3QsIG9wZW5lZF9ieV9vd25lcik7XG4rfVxuK1xuIC8qKlxuICAqIHNlY3VyaXR5X2NhcGdldCgpIC0gR2V0IHRoZSBjYXBhYmlsaXR5IHNldHMgZm9yIGEgcHJvY2Vzc1xuICAqIEB0YXJnZXQ6IHRhcmdldCBwcm9jZXNzXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5pbmRleCAxOGRkMjhiMmJiMTNkLi40NWVhZDE4YzhmMDFhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG4rKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbkBAIC0yMTU3LDYgKzIxNTcsMzYgQEAgc3RhdGljIGludCBzZWxpbnV4X3B0cmFjZV90cmFjZW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50KVxuIFx0XHRcdCAgICBTRUNDTEFTU19QUk9DRVNTLCBQUk9DRVNTX19QVFJBQ0UsIE5VTEwpO1xuIH1cbiBcbisvKipcbisgKiBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKCkgLSBEZXRlcm1pbmUgd2hldGhlciAvcHJvYy8kcGlkL21lbSBjYW4gdXNlIEZPTExfRk9SQ0VcbisgKiBAc3ViamVjdDogY3JlZGVudGlhbHMgdXNpbmcgd2hpY2ggL3Byb2MvJHBpZC9tZW0gd2FzIG9wZW5lZFxuKyAqIEBvcGVuZWRfYnlfb3duZXI6IHdoZXRoZXIgY2hlY2tzIG9uIG9wZW4oKSB3ZXJlIGJ5cGFzc2VkIGJlY2F1c2UgdGhlIG9wZW5lclxuKyAqICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgc2FtZSBNTSBhcyB0aGUgdGFyZ2V0XG4rICpcbisgKiBEZWNpZGUgd2hldGhlciBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVhZCBub24tcmVhZGFibGUgVk1BcyBhbmQgd3JpdGVcbisgKiBub24td3JpdGFibGUgVk1BcyB2aWEgL3Byb2Mvc2VsZi9tZW0uXG4rICogVGhlIEBvcGVuZWRfYnlfb3duZXIgY2FzZSBvbmx5IGFwcGxpZXMgdG8gc3lzdGVtcyBjb25maWd1cmVkIHdpdGhcbisgKiBQUk9DX01FTV9GT1JDRV9BTFdBWVMsIGFuZCBvbmx5IGhhcHBlbnMgb24gYWNjZXNzZXMgdGhhdCBhcmUgbm90IHZpc2libGUgdG9cbisgKiBzZWxpbnV4X3B0cmFjZV9hY2Nlc3NfY2hlY2soKSBiZWNhdXNlIG9mIHRoZSBpbnRyb3NwZWN0aW9uIGV4Y2VwdGlvbnMgaW5cbisgKiBtYXlfYWNjZXNzX21tKCkgYW5kIF9fcHRyYWNlX21heV9hY2Nlc3MoKS5cbisgKlxuKyAqIFRoaXMgYWxsb3dzIGEgcHJvY2VzcyB0byBvdmVyd3JpdGUgcmVhZC1vbmx5IGNvZGUgaW4gaXRzIG93biBhZGRyZXNzIHNwYWNlLlxuKyAqXG4rICogQ3JlYXRpbmcgYW4gYXVkaXQgcmVjb3JkIG9uIGRlbmlhbCBkb2Vzbid0IG1ha2Ugc2Vuc2UgaGVyZSwgc2luY2Ugd2UgY2FuJ3RcbisgKiB0ZWxsIHdoZXRoZXIgRk9MTF9GT1JDRSBtYXR0ZXJzIGZvciB0aGUgYWNjZXNzZWQgVk1Bcy5cbisgKi9cbitzdGF0aWMgaW50IHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoY29uc3Qgc3RydWN0IGNyZWQgKnN1YmplY3QsIGJvb2wgb3BlbmVkX2J5X293bmVyKVxuK3tcbitcdHN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7XG4rXHR1MzIgc2lkO1xuK1xuK1x0aWYgKCFvcGVuZWRfYnlfb3duZXIpXG4rXHRcdHJldHVybiAwO1xuK1x0c2lkID0gY3JlZF9zaWQoc3ViamVjdCk7XG4rXG4rXHRyZXR1cm4gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIFNFQ0NMQVNTX1BST0NFU1MsIFBST0NFU1NfX1BUUkFDRSwgMCwgXHUwMDI2YXZkKTtcbit9XG4rXG4gc3RhdGljIGludCBzZWxpbnV4X2NhcGdldChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsXG4gXHRcdFx0ICBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZClcbiB7XG5AQCAtNzU1OCw2ICs3NTg4LDcgQEAgc3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX2FjY2Vzc19jaGVjaywgc2VsaW51eF9wdHJhY2VfYWNjZXNzX2NoZWNrKSxcbiBcdExTTV9IT09LX0lOSVQocHRyYWNlX3RyYWNlbWUsIHNlbGludXhfcHRyYWNlX3RyYWNlbWUpLFxuK1x0TFNNX0hPT0tfSU5JVChtZW1fZm9sbF9mb3JjZSwgc2VsaW51eF9tZW1fZm9sbF9mb3JjZSksXG4gXHRMU01fSE9PS19JTklUKGNhcGdldCwgc2VsaW51eF9jYXBnZXQpLFxuIFx0TFNNX0hPT0tfSU5JVChjYXBzZXQsIHNlbGludXhfY2Fwc2V0KSxcbiBcdExTTV9IT09LX0lOSVQoY2FwYWJsZSwgc2VsaW51eF9jYXBhYmxlKSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjQyLjg4OTQ2MDM3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDk3ODI2MDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZmlyZSB1cCBLTVNBTiBmb3IgYSBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0ICpsb29rcyogcHJldHR5IGNsZWFuLCBidXQgd2UgYWx3YXlzIGhhdmUgdG8gYmUgbWV0aWN1bG91cy5cblxuSGVyZSdzIG15IGJyZWFrZG93biBvZiB0aGUgY3JpdGljYWwgcGFydHM6XG5cbiogICAqKmBmcy9wcm9jL2Jhc2UuY2AqKjogV2UncmUgYWRkaW5nIGEgbmV3IHN0cnVjdHVyZSwgYHN0cnVjdCBtZW1fcHJpdmF0ZWAsIHdoaWNoIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHBheSBhdHRlbnRpb24uIEl0IGNvbnRhaW5zIGEgYG1tX3N0cnVjdCAqbW1gIGFuZCBhIGBib29sIG9wZW5lZF9ieV9vd25lcmAuIEluIGBtZW1fb3BlbmAsIHRoZXkgYWxsb2NhdGUgYW5kIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBib3RoIG9mIHRob3NlIGZpZWxkcy4gVGhhdCdzIGEgZ29vZCBzaWduIOKAkyB3ZSdyZSBub3Qgc2VlaW5nIGFueSBpbW1lZGlhdGUsIG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXQgdGhlIGFsbG9jYXRpb24gc3RhZ2UsIGFuZCBubyBvYnZpb3VzIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMuIFRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBlcnJvciBwYXRocywgYW5kIHNldHMgdGhlIGBwcml2YXRlX2RhdGFgIGZpZWxkIG9uIHRoZSBmaWxlIHBvaW50ZXIuIFRoZSBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBmdW5jdGlvbiBhbHNvIGxvb2tzIHNvbGlkIHdpdGggdGhlIGBtbWRyb3BgIGFuZCBga2ZyZWVgLiBUaGUgd2F5IGBwcml2YXRlX2RhdGFgIGlzIGJlaW5nIHVzZWQgaW4gYHByb2NfbWVtX2ZvbGxfZm9yY2VgIGFuZCBgbWVtX3J3YCBpcyBhbHNvIHByZXR0eSBjbGVhci5cbiogICAqKkxTTSBob29rcyBhbmQgU0VMaW51eCoqOiBUaGUgYWRkaXRpb24gb2YgdGhlIGBtZW1fZm9sbF9mb3JjZWAgaG9vayBpcyBzdHJhaWdodGZvcndhcmQsIHdoaWNoIGlzIGFsc28gaGVscGZ1bC4gVGhlIFNFTGludXggaW1wbGVtZW50YXRpb24sIGluIHBhcnRpY3VsYXIgYHNlbGludXhfbWVtX2ZvbGxfZm9yY2VgLCB1c2VzIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkO2AgbG9jYWxseSwgd2hpY2ggc3VnZ2VzdHMgdGhhdCB0aGUgbG9jYWwgc3RydWN0dXJlIGlzIHByb3Blcmx5IGhhbmRsZWQgZm9yIG1lbW9yeSBzYWZldHksIGFuZCB0aGVuIHBhc3NlcyBhbiBvdXRwdXQgcGFyYW1ldGVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAgd2hpY2ggc2hvdWxkIGFsc28gYmUgb2theS5cblxuQmFzZWQgb24gdGhpcyBpbW1lZGlhdGUgcGFzcywgSSdtICpub3QqIHNlZWluZyBhbnkgYmxhdGFudCByZWQgZmxhZ3MuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAxMDAlIHN1cmUuIEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgb25seSB1c2VkIGluIGEgY29ycmVjdCB3YXksIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gc2VhcmNoIHRoZSBlbnRpcmUga2VybmVsIHRyZWUgZm9yIG90aGVyIGNhbGxzIHRvIGBwcm9jX21lbV9vcGVyYXRpb25zYCBvciBvdGhlciBmaWxlcyB0aGF0IG1pZ2h0IGJlIG9wZW5pbmcgYC9wcm9jLyRwaWQvbWVtYCBvciBvdGhlcndpc2UgdXNlIHRoZSBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLiBJJ2xsIGxvb2sgZm9yIGBwcm9jX21lbV9vcGVyYXRpb25zYCwgYF9fbWVtX29wZW5gLCBgbWVtX3J3YCwgb3IgYW55IG90aGVyIHJlbGF0ZWQgcHJvYyBtZW0gb3BlcmF0aW9ucy4gSWYgdGhlcmUgYXJlIG90aGVyIHVzYWdlcyBvZiBgL3Byb2MvJHBpZC9tZW1gLCBJIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHRoZSBtZW1vcnkgYWNjZXNzIGlzIGNvcnJlY3QgYW5kIHRoYXQgdGhlIHN0cnVjdHVyZSdzIGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbXBsZXRlbHkgY29uZmlkZW50LiBBZnRlciB0aGF0LCBJIG1heSBoYXZlIGEgZGVjaXNpb24gb24gd2hldGhlciB0byBsYXVuY2ggdGhlIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjIzOjUzLjg2NzcyMzgyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1ODAwMjg3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jX21lbV9vcGVyYXRpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTg0MD1zdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtODUwLVxcbmZzL3Byb2MvYmFzZS5jOjg1MTovKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cXG5mcy9wcm9jL2Jhc2UuYy04NTItc3RydWN0IG1lbV9wcml2YXRlIHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTk5Nz1zdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTEwMDUtXFxuZnMvcHJvYy9iYXNlLmM6MTAwNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX21lbV9vcGVyYXRpb25zID0ge1xcbmZzL3Byb2MvYmFzZS5jLTEwMDctXFx0Lmxsc2Vla1xcdFxcdD0gbWVtX2xzZWVrLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzMxNT1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTMzNDYtI2VuZGlmXFxuZnMvcHJvYy9iYXNlLmM6MzM0NzpcXHRSRUcoXFxcIm1lbVxcXCIsICAgICAgICBTX0lSVVNSfFNfSVdVU1IsIHByb2NfbWVtX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTMzNDgtXFx0TE5LKFxcXCJjd2RcXFwiLCAgICAgICAgcHJvY19jd2RfbGluayksXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYz0zNjc0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zNzAyLSNlbmRpZlxcbmZzL3Byb2MvYmFzZS5jOjM3MDM6XFx0UkVHKFxcXCJtZW1cXFwiLCAgICAgICBTX0lSVVNSfFNfSVdVU1IsIHByb2NfbWVtX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTM3MDQtXFx0TE5LKFxcXCJjd2RcXFwiLCAgICAgICBwcm9jX2N3ZF9saW5rKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjM6NTYuNTI1NzMzMjE2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MTE3MTA2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGNoZWNraW5nIGBfX21lbV9vcGVuYCBpbiBgZnMvcHJvYy9iYXNlLmNgOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBfX21lbV9vcGVuYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIGBfX21lbV9vcGVuYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL3Byb2MvYmFzZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBzdGlsbCBhY3RpdmVseSBiZWluZyB1c2VkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHB1cnBvc2UgYW5kIGlmIGFueSBjaGFuZ2VzIG9yIHJlbW92YWxzIGhhdmUgb2NjdXJyZWQgdGhhdCBJIG1pZ2h0IG5lZWQgdG8gYmUgYXdhcmUgb2YuIElzIGl0IHN0aWxsIGEgY29yZSBmdW5jdGlvbiwgb3IgaGFzIGl0IGJlZW4gZGVwcmVjYXRlZCBvciByZXBsYWNlZD8gVGhpcyB3aWxsIHJlcXVpcmUgYSBjYXJlZnVsIHNlYXJjaCB3aXRoaW4gdGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyODcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyMzo1OS4zMzc0NDYzNzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTA0ODEyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1fb3BlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz04MTg9c3RydWN0IG1tX3N0cnVjdCAqcHJvY19tZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTgzOS1cXG5mcy9wcm9jL2Jhc2UuYzo4NDA6c3RhdGljIGludCBfX21lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgbW9kZSlcXG5mcy9wcm9jL2Jhc2UuYy04NDEte1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MTAxNT1zdGF0aWMgaW50IGVudmlyb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9wcm9jL2Jhc2UuYy0xMDE2LXtcXG5mcy9wcm9jL2Jhc2UuYzoxMDE3OlxcdHJldHVybiBfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDE4LX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTEwOTA9c3RhdGljIGludCBhdXh2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvcHJvYy9iYXNlLmMtMTA5MS17XFxuZnMvcHJvYy9iYXNlLmM6MTA5MjpcXHRyZXR1cm4gX19tZW1fb3Blbihpbm9kZSwgZmlsZSwgUFRSQUNFX01PREVfUkVBRF9GU0NSRURTKTtcXG5mcy9wcm9jL2Jhc2UuYy0xMDkzLX1cXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTI3NzE9c3RhdGljIGludCBwcm9jX3BpZF9hdHRyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0yNzczLVxcdGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IE5VTEw7XFxuZnMvcHJvYy9iYXNlLmM6Mjc3NDpcXHRfX21lbV9vcGVuKGlub2RlLCBmaWxlLCBQVFJBQ0VfTU9ERV9SRUFEX0ZTQ1JFRFMpO1xcbmZzL3Byb2MvYmFzZS5jLTI3NzUtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI0OjAxLjIyNzkzNDg0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE1Njc1MzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBQcm9jZnMgTWVtb3J5IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBwcm9jIGZpbGVzeXN0ZW0ncyBtZW1vcnkgaGFuZGxpbmcuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgZm9yLCBteSBndXQgdGVsbHMgbWUgdGhlIGtleSBmdW5jdGlvbnMgYXJlIGxpa2VseSBjbHVzdGVyZWQgYXJvdW5kIHRoZSA4NDAtMTAwMCBsaW5lIHJhbmdlIHdpdGhpbiBgZnMvcHJvYy9iYXNlLmNgLiBJJ20gZ29pbmcgdG8gZm9jdXMgaW4gb24gYG1lbV9sc2Vla2AsIGBtZW1fcmVhZGAsIGBtZW1fd3JpdGVgLCBgbWVtX3J3YCwgYW5kIGBtZW1fcmVsZWFzZWAuIFRoZXNlIHNob3VsZCBjb3ZlciB0aGUgYmFzaWMgcmVhZC93cml0ZSBhY2Nlc3MgcGF0dGVybnMsIGhvdyB0aGUgZmlsZSBwb2ludGVyIGlzIG1hbmFnZWQsIGFuZCBvZiBjb3Vyc2UsIGhvdyB0aGUgbWVtb3J5IHJlZ2lvbnMgYXJlIHJlbGVhc2VkIGJhY2sgdG8gdGhlIHN5c3RlbS4gVGhpcyBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBwcm9jZXNzIG1lbW9yeSBpcyBleHBvc2VkIHRocm91Z2ggcHJvY2ZzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGhhdmUgYSBoYW5kbGUgb24gc2VjdXJpdHkgYW5kIHJlc291cmNlIGFsbG9jYXRpb24gcmVsYXRlZCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDowMy4yNDM2MTI4MjFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0MDpcXHRzdGF0aWMgaW50IF9fbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBtb2RlKVxcbiA4NDE6XFx0e1xcbiA4NDI6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBtb2RlKTtcXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKG1tKSlcXG4gODQ1OlxcdFxcdFxcdHJldHVybiBtbSA/IFBUUl9FUlIobW0pIDogLUVTUkNIO1xcbiA4NDY6XFx0XFxuIDg0NzpcXHRcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBtbTtcXG4gODQ4OlxcdFxcdHJldHVybiAwO1xcbiA4NDk6XFx0fVxcbiA4NTA6XFx0XFxuIDg1MTpcXHQvKiBwcml2YXRlX2RhdGEgZm9yIHByb2NfbWVtX29wZXJhdGlvbnMgKi9cXG4gODUyOlxcdHN0cnVjdCBtZW1fcHJpdmF0ZSB7XFxuIDg1MzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbTtcXG4gODU0OlxcdFxcdC8qXFxuIDg1NTpcXHRcXHQgKiBXYXMgdGhlIHB0cmFjZSBhY2Nlc3MgY2hlY2sgb24gb3BlbiBieXBhc3NlZCBiZWNhdXNlIHRoZSBvcGVuZXIgdXNlZFxcbiA4NTY6XFx0XFx0ICogdGhlIHNhbWUgTU0gKGludHJvc3BlY3Rpb24pP1xcbiA4NTc6XFx0XFx0ICovXFxuIDg1ODpcXHRcXHRib29sIG9wZW5lZF9ieV9vd25lcjtcXG4gODU5OlxcdH07XFxuIDg2MDpcXHRcXG4gODYxOlxcdHN0YXRpYyBpbnQgbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDg2MjpcXHR7XFxuIDg2MzpcXHRcXHRzdHJ1Y3QgbWVtX3ByaXZhdGUgKnByaXYgX19mcmVlKGtmcmVlKSA9IGttYWxsb2Nfb2JqKHN0cnVjdCBtZW1fcHJpdmF0ZSk7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdGlmICghcHJpdilcXG4gODY2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA4Njc6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZvcF9mbGFncyBcXHUwMDI2IEZPUF9VTlNJR05FRF9PRkZTRVQpKSlcXG4gODY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4Njk6XFx0XFx0cHJpdi1cXHUwMDNlbW0gPSBwcm9jX21lbV9vcGVuKGlub2RlLCBQVFJBQ0VfTU9ERV9BVFRBQ0gpO1xcbiA4NzA6XFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHByaXYtXFx1MDAzZW1tKSlcXG4gODcxOlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2VtbSA/IFBUUl9FUlIocHJpdi1cXHUwMDNlbW0pIDogLUVTUkNIO1xcbiA4NzI6XFx0XFx0cHJpdi1cXHUwMDNlb3BlbmVkX2J5X293bmVyID0gcHJpdi1cXHUwMDNlbW0gPT0gY3VycmVudC1cXHUwMDNlbW07XFxuIDg3MzpcXHRcXHRmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEgPSBub19mcmVlX3B0cihwcml2KTtcXG4gODc0OlxcdFxcdHJldHVybiAwO1xcbiA4NzU6XFx0fVxcbiA4NzY6XFx0XFxuIDg3NzpcXHRzdGF0aWMgYm9vbCBwcm9jX21lbV9mb2xsX2ZvcmNlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gODc4OlxcdHtcXG4gODc5OlxcdFxcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gODgwOlxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG4gODgxOlxcdFxcdGJvb2wgcHRyYWNlX2FjdGl2ZSA9IGZhbHNlO1xcbiA4ODI6XFx0XFxuIDg4MzpcXHRcXHRzd2l0Y2ggKHByb2NfbWVtX2ZvcmNlX292ZXJyaWRlKSB7XFxuIDg4NDpcXHRcXHRjYXNlIFBST0NfTUVNX0ZPUkNFX05FVkVSOlxcbiA4ODU6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4ODY6XFx0XFx0Y2FzZSBQUk9DX01FTV9GT1JDRV9QVFJBQ0U6XFxuIDg4NzpcXHRcXHRcXHR0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlX2lub2RlKGZpbGUpKTtcXG4gODg4OlxcdFxcdFxcdGlmICh0YXNrKSB7XFxuIDg4OTpcXHRcXHRcXHRcXHRwdHJhY2VfYWN0aXZlID1cXHRSRUFEX09OQ0UodGFzay1cXHUwMDNlcHRyYWNlKSBcXHUwMDI2XFx1MDAyNlxcbiA4OTA6XFx0XFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHRhc2stXFx1MDAzZW1tKSA9PSBtbSBcXHUwMDI2XFx1MDAyNlxcbiA4OTE6XFx0XFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHRhc2stXFx1MDAzZXBhcmVudCkgPT0gY3VycmVudDtcXG4gODkyOlxcdFxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdCh0YXNrKTtcXG4gODkzOlxcdFxcdFxcdH1cXG4gODk0OlxcdFxcdFxcdGlmICghcHRyYWNlX2FjdGl2ZSlcXG4gODk1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODk2OlxcdFxcdFxcdGJyZWFrO1xcbiA4OTc6XFx0XFx0ZGVmYXVsdDpcXG4gODk4OlxcdFxcdFxcdGJyZWFrO1xcbiA4OTk6XFx0XFx0fVxcbiA5MDA6XFx0XFx0cmV0dXJuIHNlY3VyaXR5X21lbV9mb2xsX2ZvcmNlKGZpbGUtXFx1MDAzZWZfY3JlZCwgcHJpdi1cXHUwMDNlb3BlbmVkX2J5X293bmVyKSA9PSAwO1xcbiA5MDE6XFx0fVxcbiA5MDI6XFx0XFxuIDkwMzpcXHRzdGF0aWMgc3NpemVfdCBtZW1fcncoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuIDkwNDpcXHRcXHRcXHRcXHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcywgaW50IHdyaXRlKVxcbiA5MDU6XFx0e1xcbiA5MDY6XFx0XFx0c3RydWN0IG1lbV9wcml2YXRlICpwcml2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiA5MDc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVxcdTAwM2VtbTtcXG4gOTA4OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICpwcG9zO1xcbiA5MDk6XFx0XFx0c3NpemVfdCBjb3BpZWQ7XFxuIDkxMDpcXHRcXHRjaGFyICpwYWdlO1xcbiA5MTE6XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzO1xcbiA5MTI6XFx0XFxuIDkxMzpcXHRcXHRpZiAoIW1tKVxcbiA5MTQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDkxNTpcXHRcXG4gOTE2OlxcdFxcdHBhZ2UgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XFxuIDkxNzpcXHRcXHRpZiAoIXBhZ2UpXFxuIDkxODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTE5OlxcdFxcbiA5MjA6XFx0XFx0Y29waWVkID0gMDtcXG4gOTIxOlxcdFxcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxcbiA5MjI6XFx0XFx0XFx0Z290byBmcmVlO1xcbiA5MjM6XFx0XFxuIDkyNDpcXHRcXHRmbGFncyA9IHdyaXRlID8gRk9MTF9XUklURSA6IDA7XFxuIDkyNTpcXHRcXHRpZiAocHJvY19tZW1fZm9sbF9mb3JjZShmaWxlLCBtbSkpXFxuIDkyNjpcXHRcXHRcXHRmbGFncyB8PSBGT0xMX0ZPUkNFO1xcbiA5Mjc6XFx0XFxuIDkyODpcXHRcXHR3aGlsZSAoY291bnQgXFx1MDAzZSAwKSB7XFxuIDkyOTpcXHRcXHRcXHRzaXplX3QgdGhpc19sZW4gPSBtaW5fdChzaXplX3QsIGNvdW50LCBQQUdFX1NJWkUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDowMy4yNDM5MjY4NjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NDAzODUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIGluIGBmcy9wcm9jL2Jhc2UuY2AqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmdWxseSBncmFzcGluZyB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByb2MgZmlsZXN5c3RlbSBhbmQgaXRzIHVuZGVybHlpbmcgc3RydWN0dXJlcywgSSByZWFsbHkgc2hvdWxkIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIHVzZSBjYXNlcyBvZiBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIHdpdGhpbiBgZnMvcHJvYy9iYXNlLmNgLiBXZSd2ZSBiZWVuIGxvb2tpbmcgYXQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBidXQgdG8gZ2V0IGEgdHJ1bHkgY29tcGxldGUgcGljdHVyZSwgSSBjYW4ndCBqdXN0IGxpbWl0IG15c2VsZiB0byB0aGF0LlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBvdXQgaG93IGBtZW1fcmVsZWFzZWAgYW5kIGBtZW1fbHNlZWtgIGFyZSBpbXBsZW1lbnRlZCwgYW5kLCBjcnVjaWFsbHksIGhvdyB0aGV5IGFyZSBpbnRlcmFjdGluZyB3aXRoIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIHRoaXMgZGF0YSBwb2ludGVyIGluIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIGFzIHRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGFsbCBraW5kcyBvZiB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSBhbHNvIG5lZWQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGlmZmVyZW50IGRhdGEgdHlwZXMgdGhhdCBhcmUgYmVpbmcgY2FzdCB0byBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIHRvIGVuc3VyZSBhbnkgcG90ZW50aWFsIHR5cGUgbWlzbWF0Y2hlcyBhcmUgYWRkcmVzc2VkLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHNvbWUgc3VidGxldHkgaW4gaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQgb3IgZmlsZSBwb3NpdGlvbmluZyB3aXRoaW4gdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQncyBvZnRlbiB3aGVyZSB0aGUgdHJpY2t5IG1lbW9yeSBidWdzIHRlbmQgdG8gaGlkZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODUyNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MjQ6MDUuNjI3OTY4MjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2NTpcXHR9XFxuIDk2NjpcXHRcXG4gOTY3OlxcdHN0YXRpYyBzc2l6ZV90IG1lbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4gOTY4OlxcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gOTY5OlxcdHtcXG4gOTcwOlxcdFxcdHJldHVybiBtZW1fcncoZmlsZSwgKGNoYXIgX191c2VyKilidWYsIGNvdW50LCBwcG9zLCAxKTtcXG4gOTcxOlxcdH1cXG4gOTcyOlxcdFxcbiA5NzM6XFx0bG9mZl90IG1lbV9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpXFxuIDk3NDpcXHR7XFxuIDk3NTpcXHRcXHRzd2l0Y2ggKG9yaWcpIHtcXG4gOTc2OlxcdFxcdGNhc2UgMDpcXG4gOTc3OlxcdFxcdFxcdGZpbGUtXFx1MDAzZWZfcG9zID0gb2Zmc2V0O1xcbiA5Nzg6XFx0XFx0XFx0YnJlYWs7XFxuIDk3OTpcXHRcXHRjYXNlIDE6XFxuIDk4MDpcXHRcXHRcXHRmaWxlLVxcdTAwM2VmX3BvcyArPSBvZmZzZXQ7XFxuIDk4MTpcXHRcXHRcXHRicmVhaztcXG4gOTgyOlxcdFxcdGRlZmF1bHQ6XFxuIDk4MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gOTg0OlxcdFxcdH1cXG4gOTg1OlxcdFxcdGZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbF9yZXR1cm4oKTtcXG4gOTg2OlxcdFxcdHJldHVybiBmaWxlLVxcdTAwM2VmX3BvcztcXG4gOTg3OlxcdH1cXG4gOTg4OlxcdFxcbiA5ODk6XFx0c3RhdGljIGludCBtZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gOTkwOlxcdHtcXG4gOTkxOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiA5OTI6XFx0XFx0aWYgKG1tKVxcbiA5OTM6XFx0XFx0XFx0bW1kcm9wKG1tKTtcXG4gOTk0OlxcdFxcdHJldHVybiAwO1xcbiA5OTU6XFx0fVxcbiA5OTY6XFx0XFxuIDk5NzpcXHRzdGF0aWMgaW50IG1lbV9yZWxlYXNlX3dpdGhfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gOTk4OlxcdHtcXG4gOTk5OlxcdFxcdHN0cnVjdCBtZW1fcHJpdmF0ZSAqcHJpdiA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xMDAwOlxcdFxcbjEwMDE6XFx0XFx0bW1kcm9wKHByaXYtXFx1MDAzZW1tKTtcXG4xMDAyOlxcdFxcdGtmcmVlKHByaXYpO1xcbjEwMDM6XFx0XFx0cmV0dXJuIDA7XFxuMTAwNDpcXHR9XFxuMTAwNTpcXHRcXG4xMDA2OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbWVtX29wZXJhdGlvbnMgPSB7XFxuMTAwNzpcXHRcXHQubGxzZWVrXFx0XFx0PSBtZW1fbHNlZWssXFxuMTAwODpcXHRcXHQucmVhZFxcdFxcdD0gbWVtX3JlYWQsXFxuMTAwOTpcXHRcXHQud3JpdGVcXHRcXHQ9IG1lbV93cml0ZSxcXG4xMDEwOlxcdFxcdC5vcGVuXFx0XFx0PSBtZW1fb3BlbixcXG4xMDExOlxcdFxcdC5yZWxlYXNlXFx0PSBtZW1fcmVsZWFzZV93aXRoX3ByaXZhdGUsXFxuMTAxMjpcXHRcXHQuZm9wX2ZsYWdzXFx0PSBGT1BfVU5TSUdORURfT0ZGU0VULFxcbjEwMTM6XFx0fTtcXG4xMDE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDowNS42MjgxNTA5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDE3OTkwNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJ3MgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBlbnN1cmluZyB0aGUgY29uc2lzdGVuY3kgb2YgcmVzb3VyY2UgaGFuZGxpbmcuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgcHJvY19tZW1fb3BlcmF0aW9uc2AgaXMgdGhlICpvbmx5KiBjb21wb25lbnQgZGlyZWN0bHkgbGV2ZXJhZ2luZyBgbWVtX3JlbGVhc2Vfd2l0aF9wcml2YXRlYCBhbmQgYG1lbV9vcGVuYC4gV2Uga25vdyB0aGF0IHRoaXMgb3BlcmF0aW9uIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBgL3Byb2MvJHBpZC9tZW1gIGZpbGUgKGFuZCBwb3RlbnRpYWxseSB0YXNrL3RpZCBtZW0gZmlsZXMpLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgb3RoZXIgcHJvYyBmaWxlcywgc3VjaCBhcyBgZW52aXJvbmAgYW5kIGBhdXh2YCwgdXRpbGl6ZSBhbHRlcm5hdGl2ZSBvcGVuIGZ1bmN0aW9ucywgbmFtZWx5IGBlbnZpcm9uX29wZW5gIGFuZCBgYXV4dl9vcGVuYC4gVGhlc2UsIGFzIEkgcmVjYWxsLCB1dGlsaXplIGBfX21lbV9vcGVuYCBpbnRlcm5hbGx5IGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHJlbGVhc2UgZnVuY3Rpb24sIGBtZW1fcmVsZWFzZWAuIEEgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgYG1lbV9yZWxlYXNlYCBleHBlY3RzIHRoZSBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgcHJvY2VzcydzIGBtbWAgKG1lbW9yeSBtYXApLCB3aGljaCBpcyBzZXQgYnkgYF9fbWVtX29wZW5gLiBTbywgdGhlIG93bmVyc2hpcCBhbmQgbGlmZWN5Y2xlIG11c3QgYmUgY29ycmVjdCB0aGVyZS5cblxuTm93LCBsZXQncyBzY3J1dGluaXplIHRoZSBTRUxpbnV4IGFzcGVjdCBpbnRyb2R1Y2VkIGluIHRoZSBwYXRjaC4gVGhlIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlYCBmdW5jdGlvbiBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGNhbGxzIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAgdG8gY2hlY2sgaWYgYSBwcm9jZXNzIGhhcyBwZXJtaXNzaW9uIHRvIHB0cmFjZSBpdHNlbGYuIFdoYXQgaXMgbm90ZXdvcnRoeSBpcyB0aGF0IHRoZSBmdW5jdGlvbiBwYXNzZXMgYSBwb2ludGVyIHRvIGBcdTAwMjZhdmRgLiBUaHVzLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAgdXNlcyBpdC4gRG9lcyB0aGUgZnVuY3Rpb24gbW9kaWZ5IGBcdTAwMjZhdmRgPyBJZiBzbywgd2hhdCBpbmZvcm1hdGlvbiBkb2VzIGl0IHN0b3JlIG9yIHVwZGF0ZT8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0gYW5kIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjI0OjA5LjA0NjE0NDk2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIzNzQ5MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF2Y19oYXNfcGVybV9ub2F1ZGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L3NlbGludXgvYXZjLmM9OTU0PWludCBhdmNfc3NfcmVzZXQodTMyIHNlcW5vKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODItICpcXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjk4MzogKiBTbG93LXBhdGggaGVscGVyIGZ1bmN0aW9uIGZvciBhdmNfaGFzX3Blcm1fbm9hdWRpdCwgd2hlbiB0aGUgYXZjX25vZGUgbG9va3VwXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy05ODQtICogZmFpbHMuICBEb24ndCBpbmxpbmUgdGhpcywgc2luY2UgaXQncyB0aGUgc2xvdy1wYXRoIGFuZCBqdXN0IHJlc3VsdHMgaW4gYVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYz0xMDE5PWludCBhdmNfaGFzX2V4dGVuZGVkX3Blcm1zKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCxcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEwNS0gKlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEwNjogKiBUaGlzIGlzIHRoZSBcXFwid2UgaGF2ZSBubyBub2RlXFxcIiBwYXJ0IG9mIGF2Y19oYXNfcGVybV9ub2F1ZGl0KCksIHdoaWNoIGlzXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTA3LSAqIHVubGlrZWx5IGFuZCBuZWVkcyBleHRyYSBzdGFjayBzcGFjZSBmb3IgdGhlIG5ldyBub2RlIHRoYXQgd2UgZ2VuZXJhdGUsIHNvXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExMTA9c3RhdGljIG5vaW5saW5lIGludCBhdmNfcGVybV9ub25vZGUodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTI1LS8qKlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmM6MTEyNjogKiBhdmNfaGFzX3Blcm1fbm9hdWRpdCAtIENoZWNrIHBlcm1pc3Npb25zIGJ1dCBwZXJmb3JtIG5vIGF1ZGl0aW5nLlxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTEyNy0gKiBAc3NpZDogc291cmNlIHNlY3VyaXR5IGlkZW50aWZpZXJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvYXZjLmMtMTE0NC0gKi9cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jOjExNDU6aW5saW5lIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTQ2LVxcdFxcdFxcdFxcdHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jPTExODk9aW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2F2Yy5jLTExOTQtXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYzoxMTk1OlxcdHJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsIDAsXFxuc2VjdXJpdHkvc2VsaW51eC9hdmMuYy0xMTk2LVxcdFxcdFxcdFxcdCAgXFx1MDAyNmF2ZCk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MTY0MT1zdGF0aWMgaW50IGNyZWRfaGFzX2NhcGFiaWxpdHkoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2NS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MTY2NjpcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgc2lkLCBzY2xhc3MsIGF2LCAwLCBcXHUwMDI2YXZkKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMTY2Ny1cXHRpZiAoIShvcHRzIFxcdTAwMjYgQ0FQX09QVF9OT0FVRElUKSkge1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTIxNzg9c3RhdGljIGludCBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKGNvbnN0IHN0cnVjdCBjcmVkICpzdWJqZWN0LCBib29sIG9wZW5lZF9ieV9vd25lcilcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0yMTg2LVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzoyMTg3OlxcdHJldHVybiBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgU0VDQ0xBU1NfUFJPQ0VTUywgUFJPQ0VTU19fUFRSQUNFLCAwLCBcXHUwMDI2YXZkKTtcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMjE4OC19XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzI3Mz1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzMDktXFx0XFx0LyogQ2FjaGUgbWlzcy4gKi9cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzMxMDpcXHRcXHRyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNpZCwgaXNlYy1cXHUwMDNlc2lkLCBpc2VjLVxcdTAwM2VzY2xhc3MsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMzMTEtXFx0XFx0XFx0XFx0XFx0ICBwZXJtcywgMCwgYXZkcCk7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg9MTAxPWludCBzbG93X2F2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsIHUzMiBhdWRpdGVkLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oLTExMC0gKiBAYXZkOiBhY2Nlc3MgdmVjdG9yIGRlY2lzaW9uc1xcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaDoxMTE6ICogQHJlc3VsdDogcmVzdWx0IGZyb20gYXZjX2hhc19wZXJtX25vYXVkaXRcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTEyLSAqIEBhOiAgYXV4aWxpYXJ5IGF1ZGl0IGRhdGFcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTYtICogYXZjX2hhc19wZXJtKCkgYWZ0ZXIgYSBwZXJtaXNzaW9uIGNoZWNrLCBidXQgY2FuIGFsc28gYmVcXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg6MTE3OiAqIGNhbGxlZCBkaXJlY3RseSBieSBjYWxsZXJzIHdobyB1c2UgYXZjX2hhc19wZXJtX25vYXVkaXQoKVxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMTgtICogaW4gb3JkZXIgdG8gc2VwYXJhdGUgdGhlIHBlcm1pc3Npb24gY2hlY2sgZnJvbSB0aGUgYXVkaXRpbmcuXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmg9MTIzPXN0YXRpYyBpbmxpbmUgaW50IGF2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgtMTM2LSNkZWZpbmUgQVZDX0VYVEVOREVEX1BFUk1TIDIgLyogdXBkYXRlIGV4dGVuZGVkIHBlcm1pc3Npb25zICovXFxuc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oOjEzNzppbnQgYXZjX2hhc19wZXJtX25vYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLFxcbnNlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaC0xMzgtXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGF2X2RlY2lzaW9uICphdmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDoxMC43Njk4OTg2OTlaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjY1NjQ2NzM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIEknbSBmb2N1c2luZyBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggd2FycmFudHMgS01TQU4gYW5hbHlzaXMuXG5cbkZpcnN0LCBJIGxvb2tlZCBhdCBob3cgdGhlIGBtZW1fcHJpdmF0ZWAgc3RydWN0IGlzIGhhbmRsZWQuIEl0J3MgYWxsb2NhdGVkIHdpdGggYGttYWxsb2Nfb2JqYCwgYW5kIGJvdGggYG1tYCBhbmQgYG9wZW5lZF9ieV9vd25lcmAgYXJlIGltbWVkaWF0ZWx5IGFzc2lnbmVkICpiZWZvcmUqIGBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YWAgaXMgdG91Y2hlZC4gTm8gdW5pbml0aWFsaXplZCBkYXRhLCBubyBwb3RlbnRpYWwgaW5mbyBsZWFrcyB0aHJvdWdoIHBhZGRpbmcsIHNpbmNlIHRoaXMgc3RydWN0IGlzIHB1cmVseSBpbnRlcm5hbCB0byB0aGUga2VybmVsIGFuZCBvbmx5IGFjY2Vzc2VkIHZpYSBgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGFgLlxuXG5OZXh0LCB0aGVyZSdzIG5vIGRhdGEgYmVpbmcgY29waWVkIGRpcmVjdGx5IHRvIHVzZXJzcGFjZS4gYG1lbV9yd2AgYWxyZWFkeSBsZXZlcmFnZXMgdGhlIGVzdGFibGlzaGVkIGtlcm5lbCBtZWNoYW5pc21zIGxpa2UgYGNvcHlfdG9fdXNlcmAgYW5kIGBjb3B5X2Zyb21fdXNlcmAgd2hlbiBkZWFsaW5nIHdpdGggdXNlciBidWZmZXJzIHZpYSBgYWNjZXNzX3JlbW90ZV92bWAuIFdlJ3JlIGdvb2QgdGhlcmUuXG5cbkkgdGhlbiBleGFtaW5lZCB0aGUgU0VMaW51eCBob29rLCBgc2VsaW51eF9tZW1fZm9sbF9mb3JjZWAuIEl0IHRha2VzIGBjcmVkYCBhbmQgYG9wZW5lZF9ieV9vd25lcmAsIGNhbGxzIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAsIGFuZCByZXR1cm5zIGFuIGludGVnZXIuIGBhdmRgIGlzIHBhc3NlZCBieSBwb2ludGVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdGAsIGJ1dCB0aGUgcmV0dXJuIGNvZGUgaXMgdXNlZCBkaXJlY3RseSwgd2l0aG91dCBhbnkgcmVhZCBvZiB0aGUgYGF2ZGAgc3RydWN0LiBUaGlzIGlzIGEgdmVyeSBjbGVhbiBwYXR0ZXJuLlxuXG5UaGUgTFNNIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGBzZWN1cml0eV9tZW1fZm9sbF9mb3JjZWAsIGNhbGxzIGBjYWxsX2ludF9ob29rYCwgd2hpY2ggcmV0dXJucyBhbiBpbnRlZ2VyLiBUaGUgZGVmYXVsdCBzdGF0aWMgaW5saW5lIHJldHVybnMgMC4gQWdhaW4sIG5vIGlzc3VlcyBoZXJlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuU28sIEkgYXNrZWQgbXlzZWxmIHRoZSBjcml0aWNhbCBxdWVzdGlvbnM6IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhPyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgbm8uIEFsbCBuZXdseSBhbGxvY2F0ZWQgc3RydWN0cyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlcnNwYWNlLiBBbnkgKnBvdGVudGlhbCogbWVtb3J5IHNhZmV0eSBidWdzIChsaWtlIFVBRiBpZiBzdHJ1Y3QgbGlmZXRpbWUgaGFkIGlzc3VlcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cblxuVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC5cblxuTm93LCBsZXQncyBzb2xpZGlmeSB0aGUgcmVhc29uaW5nIGFnYWluc3QgdGhlIGVzdGFibGlzaGVkIHJ1bGVzLiBJJ20gZ29pbmcgdG8gcmUtc3RhdGUgdGhlIGtleSBkaXN0aW5jdGlvbnMgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIFN0YW5kYXJkIEtBU0FOIGlzIGFscmVhZHkgZW5hYmxlZCwgaW5jbHVkaW5nIExPQ0tERVAsIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgcmVhZHMgb2YgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSBhbmQga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy5cblxuSSBkb3VibGUtY2hlY2tlZCB0aGUgY29uZGl0aW9ucyBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gYHRydWVgOiBub25lIG9mIHRoZW0gYXBwbHkgaGVyZS4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIHRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24gd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy5cblxuT24gdGhlIGZsaXAgc2lkZSwgYWxsIHRoZSBjb25kaXRpb25zIGZvciBgTmVlZHNLTVNBTiA9IGZhbHNlYCBhcmUgbWV0OiB0aGUgY29kZSBwcmltYXJpbHkgZGVhbHMgd2l0aCB0aGluZ3MgdGhhdCBLQVNBTiBhbHJlYWR5IGFkZHJlc3NlcyBsaWtlIG91dC1vZi1ib3VuZHMsIG92ZXJmbG93cywgYW5kIFVBRi4gQWxsIHJlbGV2YW50IHN0cnVjdHMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZC4gVGhlcmUncyB6ZXJvIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3BlY2lmaWNhbGx5LCB0aGUgZmllbGRzIGluIGBzdHJ1Y3QgbWVtX3ByaXZhdGVgIGFyZSBmdWxseSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gaW4gYG1lbV9vcGVuYCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIGxlZnQgdW5pbml0aWFsaXplZC4gVGh1cywgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cblNvLCAqSSBhbSBjb21wbGV0ZWx5IGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjYxLCJPdXRwdXRUb2tlbnMiOjI4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMToyNDoxNy40MjYzNjk4MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgTFNNIGhvb2sgYG1lbV9mb2xsX2ZvcmNlYCBhbmQgcmVwbGFjZXMgdGhlIGRpcmVjdCBgbW1fc3RydWN0YCBwb2ludGVyIGluIGBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGFgIG9mIGAvcHJvYy8kcGlkL21lbWAgd2l0aCBhIHNtYWxsIGNvbnRhaW5lciBgc3RydWN0IG1lbV9wcml2YXRlYCBjb250YWluaW5nIGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgLlxcblxcbi0gSW4gYG1lbV9vcGVuKClgLCB0aGUgaGVhcCBhbGxvY2F0aW9uIGBrbWFsbG9jX29iaihzdHJ1Y3QgbWVtX3ByaXZhdGUpYCBoYXMgYWxsIGl0cyBmaWVsZHMgKGBtbWAgYW5kIGBvcGVuZWRfYnlfb3duZXJgKSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGJlaW5nIGFzc2lnbmVkIHRvIGBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGFgLlxcbi0gSW4gYHNlbGludXhfbWVtX2ZvbGxfZm9yY2UoKWAsIHRoZSBzdGFjay1hbGxvY2F0ZWQgYHN0cnVjdCBhdl9kZWNpc2lvbiBhdmRgIGlzIHBhc3NlZCBhcyBhbiBvdXRwdXQgYnVmZmVyIHRvIGBhdmNfaGFzX3Blcm1fbm9hdWRpdCgpYCwgYW5kIGl0cyBmaWVsZHMgYXJlIG5vdCByZWFkIGJlZm9yZSBpbml0aWFsaXphdGlvbi5cXG4tIE5vIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgdXNlZCBpbiBicmFuY2hpbmcgZGVjaXNpb25zLlxcbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKHN1Y2ggYXMgbGlmZXRpbWUvZnJlZWluZyBvZiBgcHJpdmAgb3IgYG1tYCkgYXJlIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBwcm9wZXJseSBjb3ZlcmVkIGJ5IEtBU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IExTTSBob29rIGBtZW1fZm9sbF9mb3JjZWAgYW5kIHJlcGxhY2VzIHRoZSBkaXJlY3QgYG1tX3N0cnVjdGAgcG9pbnRlciBpbiBgZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhYCBvZiBgL3Byb2MvJHBpZC9tZW1gIHdpdGggYSBzbWFsbCBjb250YWluZXIgYHN0cnVjdCBtZW1fcHJpdmF0ZWAgY29udGFpbmluZyBgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYC5cXG5cXG4tIEluIGBtZW1fb3BlbigpYCwgdGhlIGhlYXAgYWxsb2NhdGlvbiBga21hbGxvY19vYmooc3RydWN0IG1lbV9wcml2YXRlKWAgaGFzIGFsbCBpdHMgZmllbGRzIChgbW1gIGFuZCBgb3BlbmVkX2J5X293bmVyYCkgZXhwbGljaXRseSBpbml0aWFsaXplZCBwcmlvciB0byBiZWluZyBhc3NpZ25lZCB0byBgZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhYC5cXG4tIEluIGBzZWxpbnV4X21lbV9mb2xsX2ZvcmNlKClgLCB0aGUgc3RhY2stYWxsb2NhdGVkIGBzdHJ1Y3QgYXZfZGVjaXNpb24gYXZkYCBpcyBwYXNzZWQgYXMgYW4gb3V0cHV0IGJ1ZmZlciB0byBgYXZjX2hhc19wZXJtX25vYXVkaXQoKWAsIGFuZCBpdHMgZmllbGRzIGFyZSBub3QgcmVhZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uXFxuLSBObyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gYnJhbmNoaW5nIGRlY2lzaW9ucy5cXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIChzdWNoIGFzIGxpZmV0aW1lL2ZyZWVpbmcgb2YgYHByaXZgIG9yIGBtbWApIGFyZSB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MgdGhhdCBhcmUgcHJvcGVybHkgY292ZXJlZCBieSBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[1] Phase: Succeeded StartedAt: 2026-09-08 01:24:29 +0000 UTC FinishedAt: 2026-09-08 01:24:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 01:24:29 +0000 UTC FinishedAt: 2026-09-08 01:24:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2] Phase: Succeeded StartedAt: 2026-09-08 01:24:29 +0000 UTC FinishedAt: 2026-09-08 05:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 01:24:29 +0000 UTC FinishedAt: 2026-09-08 05:11:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 01:24:29 +0000 UTC FinishedAt: 2026-09-08 01:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 01:24:29 +0000 UTC FinishedAt: 2026-09-08 01:24:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjcsnj/series-workflowjcsnj-convert-artifact-1142266137/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 01:24:56 +0000 UTC FinishedAt: 2026-09-08 01:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 01:24:56 +0000 UTC FinishedAt: 2026-09-08 01:44:17 +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:*64793fd4-914f-4791-8053-ccc376ee59ea,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-workflowjcsnj/series-workflowjcsnj-convert-artifact-1142266137/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": "35b3002a-fe8e-4990-9be8-16e38322b550", "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-workflowjcsnj/series-workflowjcsnj-build-action-1024375991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 01:24:56 +0000 UTC FinishedAt: 2026-09-08 01:44:07 +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:*64793fd4-914f-4791-8053-ccc376ee59ea,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-workflowjcsnj/series-workflowjcsnj-convert-artifact-1142266137/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": "35b3002a-fe8e-4990-9be8-16e38322b550", "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-workflowjcsnj/series-workflowjcsnj-build-action-1024375991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 01:44:17 +0000 UTC FinishedAt: 2026-09-08 01:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 01:44:17 +0000 UTC FinishedAt: 2026-09-08 01:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 01:44:17 +0000 UTC FinishedAt: 2026-09-08 01:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 01:44:17 +0000 UTC FinishedAt: 2026-09-08 01:44:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjcsnj/series-workflowjcsnj-convert-artifact-3659057388/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 01:44:27 +0000 UTC FinishedAt: 2026-09-08 01:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 01:44:27 +0000 UTC FinishedAt: 2026-09-08 01:46:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35b3002a-fe8e-4990-9be8-16e38322b550,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-workflowjcsnj/series-workflowjcsnj-build-action-1024375991/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-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 01:46:50 +0000 UTC FinishedAt: 2026-09-08 01:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 01:46:50 +0000 UTC FinishedAt: 2026-09-08 01:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 01:46:50 +0000 UTC FinishedAt: 2026-09-08 02:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 01:46:50 +0000 UTC FinishedAt: 2026-09-08 02:07:17 +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:*64793fd4-914f-4791-8053-ccc376ee59ea,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-workflowjcsnj/series-workflowjcsnj-convert-artifact-3659057388/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": "0775bde3-a414-4a3c-9bbd-3e17d47f9ad0", "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-workflowjcsnj/series-workflowjcsnj-build-action-3902775176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 01:46:50 +0000 UTC FinishedAt: 2026-09-08 02:07:07 +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:*64793fd4-914f-4791-8053-ccc376ee59ea,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-workflowjcsnj/series-workflowjcsnj-convert-artifact-3659057388/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": "0775bde3-a414-4a3c-9bbd-3e17d47f9ad0", "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-workflowjcsnj/series-workflowjcsnj-build-action-3902775176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 02:07:17 +0000 UTC FinishedAt: 2026-09-08 02:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 02:07:17 +0000 UTC FinishedAt: 2026-09-08 02:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 02:07:17 +0000 UTC FinishedAt: 2026-09-08 02:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 02:07:17 +0000 UTC FinishedAt: 2026-09-08 02:09:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0775bde3-a414-4a3c-9bbd-3e17d47f9ad0,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-workflowjcsnj/series-workflowjcsnj-build-action-3902775176/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-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 02:09:19 +0000 UTC FinishedAt: 2026-09-08 05:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 02:09:19 +0000 UTC FinishedAt: 2026-09-08 05:11:07 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"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:*35b3002a-fe8e-4990-9be8-16e38322b550,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0775bde3-a414-4a3c-9bbd-3e17d47f9ad0,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-workflowjcsnj/series-workflowjcsnj-build-action-1024375991/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-workflowjcsnj/series-workflowjcsnj-build-action-3902775176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 02:09:19 +0000 UTC FinishedAt: 2026-09-08 02:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 02:09:19 +0000 UTC FinishedAt: 2026-09-08 02:09:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"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-workflowjcsnj/series-workflowjcsnj-convert-artifact-2081601749/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 02:09:19 +0000 UTC FinishedAt: 2026-09-08 02:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 02:09:19 +0000 UTC FinishedAt: 2026-09-08 02:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 02:09:19 +0000 UTC FinishedAt: 2026-09-08 02:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 02:09:29 +0000 UTC FinishedAt: 2026-09-08 05:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcsnj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["mem_open","proc_mem_foll_force","mem_rw","mem_release_with_private","security_mem_foll_force","selinux_mem_foll_force"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","SECURITY","SECURITY_SELINUX"],"series_id":"3567c67b-d32d-490a-981e-26674c835ec2","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 02:09:29 +0000 UTC FinishedAt: 2026-09-08 05:10:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35b3002a-fe8e-4990-9be8-16e38322b550,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0775bde3-a414-4a3c-9bbd-3e17d47f9ad0,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-workflowjcsnj/series-workflowjcsnj-build-action-1024375991/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-workflowjcsnj/series-workflowjcsnj-build-action-3902775176/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-workflowjcsnj/series-workflowjcsnj-convert-artifact-2081601749/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,}