Name: series-workflow6rrt4 Phase: Running StartedAt: 2026-08-01 02:55:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[0] Phase: Succeeded StartedAt: 2026-08-01 02:55:01 +0000 UTC FinishedAt: 2026-08-01 02:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 02:55:01 +0000 UTC FinishedAt: 2026-08-01 02:56:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4bdcf682a476e8d9f52b2c5c01e998d70e45656c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC", "BINFMT_MISC_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4bdcf682a476e8d9f52b2c5c01e998d70e45656c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC", "BINFMT_MISC_BPF" ], "series_id": "3f622d72-0b9a-4dda-8388-7a343af1f11e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "binfmt_misc_find_interp", "bpf_binprm_select_interp", "bpf_binprm_set_interp", "load_misc_binary", "bm_entry_write", "bm_register_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDssCiAgICAmIzM0O0JJTkZNVF9NSVNDX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JpbmZtdF9taXNjX2ZpbmRfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JwZl9iaW5wcm1fc2VsZWN0X2ludGVycCYjMzQ7LAogICAgJiMzNDticGZfYmlucHJtX3NldF9pbnRlcnAmIzM0OywKICAgICYjMzQ7bG9hZF9taXNjX2JpbmFyeSYjMzQ7LAogICAgJiMzNDtibV9lbnRyeV93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYmluZm10X21pc2MgYWxsb3dpbmcgQlBGIGhhbmRsZXJzIHRvIGJpbmQgaW50ZXJwcmV0ZXJzIHRvIGFuIGVudHJ5IGFuZCBzZWxlY3QgdGhlbSBieSBuYW1lIGF0IGV4ZWMgdGltZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBmcy9iaW5mbXRfbWlzYy5jIGFuZCBmcy9iaW5mbXRfbWlzY19icGYuYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBiaW5mbXRfbWlzYyBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gb2YgbWF0Y2hpbmcgYmluYXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZjkyNTFhNjBkYTE2NjIyNGJlYTliYWEzYmQ5YzQyZjc0YjlkNWNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwMjo1NjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCBjODA3MDJiNGNjZDVmLi4zZTJiMmE5NDE1YmM4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5AQCAtMTA3LDYgJiM0MzsxMDcsMTUgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiAgICAgICAgICAgICBgYFBUX0lOVEVSUGBgLiBTZWUgdGhlIFwmIzM0O0xvYWRlciBzdWJzdGl0dXRpb25cJiMzNDsgc2VjdGlvblxuICAgICAgICAgICAgIGJlbG93LiBgYExgYCByZWplY3RzIGBgVGBgLCBgYFBgYCwgYGBPYGAgYW5kIGBgQ2BgO1xuICAgICAgICAgICAgIGBgRmBgIGNvbXBvc2VzLlxuJiM0MzsgICAgICBgYERgYCAtIHJlZ2lzdGVyZWQgZGlzYWJsZWRcbiYjNDM7ICAgICAgICAgICAgVGhlIGVudHJ5IGlzIGNyZWF0ZWQgZGlzYWJsZWQgaW5zdGVhZCBvZiBiZWluZyBtYXRjaGFibGUgYXRcbiYjNDM7ICAgICAgICAgICAgb25jZSwgYW5kIGhhcyB0byBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgYGAxYGAgdG8gaXRzIGZpbGVcbiYjNDM7ICAgICAgICAgICAgYmVmb3JlIGl0IGRpc3BhdGNoZXMgYW55dGhpbmcuIFRoaXMgc3BsaXRzIGEgcmVnaXN0cmF0aW9uXG4mIzQzOyAgICAgICAgICAgIGludG8gY3JlYXRpbmcgdGhlIGVudHJ5IGFuZCBhY3RpdmF0aW5nIGl0LCBsZWF2aW5nIHJvb20gdG9cbiYjNDM7ICAgICAgICAgICAgY29uZmlndXJlIGl0IGluIGJldHdlZW4gLSB3aGljaCBpcyB3aGF0IGEgYGBCYGAgZW50cnkgdGhhdFxuJiM0MzsgICAgICAgICAgICBiaW5kcyBpbnRlcnByZXRlcnMgbmVlZHM7IHNlZSB0aGUgYnBmIHNlY3Rpb24gYmVsb3cuIFRoZSBmbGFnXG4mIzQzOyAgICAgICAgICAgIGlzIHNwZW50IG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIGlzIG5vdCByZWFkIGJhY2s6IHdoYXQgYW5cbiYjNDM7ICAgICAgICAgICAgZW50cnkgZmlsZSByZXBvcnRzIGFmdGVyd2FyZHMgaXMgd2hldGhlciBpdCBpcyBlbmFibGVkLlxuIFxuIFxuIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcbkBAIC0xODYsOSAmIzQzOzE5NSw2MiBAQCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBiaW5hcnkmIzM5O3MgbG9jYXRpb24uIEl0IHNlbGVjdHMgdGhlXG4gaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnAoKWBgIGtmdW5jIHdpdGggYW5cbiBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5pbmcgYGAwYGAuIEEgbWF0Y2ggaXMgY29tbWl0dGVkOiBhIGZhaWxpbmdcbiBgYGxvYWRgYCBmYWlscyB0aGUgZXhlYyB3aXRoIGl0cyBlcnJvciBpbnN0ZWFkIG9mIGZhbGxpbmcgdGhyb3VnaCB0byBsYXRlclxuLWVudHJpZXM7IGBgLUVOT0VYRUNgYCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5IGZvcm1hdHMgaGF2ZSBhIGdvLiBUaGVcbi1pbnRlcnByZXRlciBpcyBvcGVuZWQgd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlIGV4ZWMsXG4tZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3b3VsZCBiZS5cbiYjNDM7ZW50cmllczsgYGAtRU5PRVhFQ2BgIGxldHMgdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cyBoYXZlIGEgZ28uIEEgcGF0aFxuJiM0MztzZWxlY3RlZCB0aGlzIHdheSBpcyBvcGVuZWQgd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlXG4mIzQzO2V4ZWMsIGV4YWN0bHkgYXMgYSBzdGF0aWNhbGx5IHJlZ2lzdGVyZWQgaW50ZXJwcmV0ZXIgd2l0aG91dCBgYEZgYCB3b3VsZFxuJiM0MztiZS5cbiYjNDM7XG4mIzQzO0FuIGVudHJ5IGNhbiBpbnN0ZWFkIGJpbmQgdGhlIGludGVycHJldGVycyBpdHMgaGFuZGxlciBtYXkgdXNlLCBzbyB0aGF0IG5vXG4mIzQzO3BhdGggaXMgcmVzb2x2ZWQgYXQgZXhlYyB0aW1lIGF0IGFsbC4gQW4gZW50cnkgcmVnaXN0ZXJlZCB3aXRoIGBgRGBgIGlzIG5vdFxuJiM0MzttYXRjaGFibGUgeWV0LCB3aGljaCBpcyB3aGF0IGxlYXZlcyBpdCBvcGVuIHRvIGJlaW5nIGdpdmVuIHRoZW0sIG9uZVxuJiM0MztgYCYjNDM7bmFtZSBwYXRoYGAgd3JpdGUgYXQgYSB0aW1lOjpcbiYjNDM7XG4mIzQzOyAgICBlY2hvICYjMzk7OnFlbXU6Qjo6OjpteV9oYW5kbGVyOkQmIzM5OyBcdTAwM2UgcmVnaXN0ZXJcbiYjNDM7ICAgIGVjaG8gJiMzOTsmIzQzO2FhcmNoNjQgL3Vzci9iaW4vcWVtdS1hYXJjaDY0JiMzOTsgXHUwMDNlIHFlbXVcbiYjNDM7ICAgIGVjaG8gJiMzOTsmIzQzO2FybSAvdXNyL2Jpbi9xZW11LWFybSYjMzk7IFx1MDAzZSBxZW11XG4mIzQzOyAgICBlY2hvIDEgXHUwMDNlIHFlbXVcbiYjNDM7XG4mIzQzO0VhY2ggcGF0aCBpcyBvcGVuZWQgZHVyaW5nIGl0cyB3cml0ZSwgaW4gdGhlIHdyaXRpbmcgcHJvY2VzcyYjMzk7cyBjb250ZXh0IGFuZFxuJiM0Mzt3aXRoIHRoZSBjcmVkZW50aWFscyB0aGUgZW50cnkgZmlsZSB3YXMgb3BlbmVkIHdpdGgsIGV4YWN0bHkgdGhlIHdheSBgYEZgYFxuJiM0MztwcmUtb3BlbnMgYSBzdGF0aWMgZW50cnkmIzM5O3MgaW50ZXJwcmV0ZXI7IHRoZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLiBUaGVcbiYjNDM7cGF0aCBpcyBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0IHNwYWNlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGl0IGNhbm5vdFxuJiM0MztleHByZXNzLCBhbmQgbm8gaW50ZXJwcmV0ZXIgaGFzIHRvIGZpdCBpbiBhIHJlZ2lzdGVyIHN0cmluZy4gQW4gZW50cnlcbiYjNDM7YmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzOyBhIHdyaXRlIHBhc3QgdGhhdCBpcyByZWZ1c2VkIHdpdGhcbiYjNDM7YGAtRU5PU1BDYGAuIFRvIGJpbmQgYSBmaWxlIHRoYXQgaGFzIG5vIHBhdGggb2YgaXRzIG93biAtIGFscmVhZHlcbiYjNDM7dW5saW5rZWQsIGEgYGBtZW1mZGBgLCBvciByZWFjaGFibGUgb25seSBpbiBhbm90aGVyIG1vdW50IG5hbWVzcGFjZSAtXG4mIzQzO29wZW4gaXQgYW5kIHdyaXRlIGBgL3Byb2Mvc2VsZi9mZC9OYGAuXG4mIzQzO1xuJiM0MztUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGVcbiYjNDM7YGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKWBgIGtmdW5jLCBhbmQgZXZlcnkgZXhlYyBydW5zIGEgY2xvbmUgb2YgdGhlXG4mIzQzO2ZpbGUgdGhhdCB3YXMgb3BlbmVkLiBUaGUgcGF0aCBkZWNpZGVzIHdoaWNoIGZpbGUgaXMgYm91bmQgYW5kIG5vdGhpbmdcbiYjNDM7ZWxzZTogaXQgaXMgbm90IHJlc29sdmVkIGFnYWluLCBpbiBhbnkgbmFtZXNwYWNlLCBzbyB3aGF0IGl0IGhvbGRzIGxhdGVyIC1cbiYjNDM7b3Igd2hhdCBpdCBob2xkcyBpbiB0aGUgbmFtZXNwYWNlIG9mIHdob2V2ZXIgcnVucyB0aGUgYmluYXJ5IC0gbm8gbG9uZ2VyXG4mIzQzO2RlY2lkZXMgYW55dGhpbmcuXG4mIzQzO1xuJiM0MztFbmFibGluZyB0aGUgZW50cnkgZW5kcyB0aGlzLiBJdHMgaW50ZXJwcmV0ZXJzIGFyZSByZWFkIGF0IGV4ZWMgdGltZSB3aXRoXG4mIzQzO25vdGhpbmcgYnV0IGEgcmVmZXJlbmNlIGhlbGQgb24gdGhlIGVudHJ5LCBzbyBhbiBlbnRyeSB0aGF0IGhhcyBldmVyIGJlZW5cbiYjNDM7bWF0Y2hhYmxlIGNhbiBuZXZlciBoYXZlIGl0cyBzZXQgY2hhbmdlZCBhZ2FpbjogdGhlIGZpcnN0IGBgMWBgIHNlYWxzIGl0LFxuJiM0Mztmcm9tIHRoZW4gb24gYGAmIzQzO2BgIGlzIHJlZnVzZWQgd2l0aCBgYC1FQlVTWWBgLCBhbmQgYW4gZW50cnkgcmVnaXN0ZXJlZFxuJiM0Mzt3aXRob3V0IGBgRGBgIGlzIHNlYWxlZCBmcm9tIHRoZSBzdGFydC4gQmluZGluZyBhIG5hbWUgdHdpY2UgaXMgcmVmdXNlZFxuJiM0Mzt3aXRoIGBgLUVFWElTVGBgLlxuJiM0MztcbiYjNDM7U2VsZWN0aW9uIGlzIGJ5IG5hbWUgc28gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGhlIHByb2dyYW0gbmVlZCBub3RcbiYjNDM7YWdyZWUgb24gYW4gb3JkZXIsIGFuZCBzbyB0aGF0IGEgaGFuZGxlciBpcyBub3QgdGllZCB0byB3aGVyZSBhIGRpc3RyaWJ1dGlvblxuJiM0MztwdXRzIGl0cyBpbnRlcnByZXRlcnMuIEEgbmFtZSBpcyBhIHNpbmdsZSB3b3JkIG9mIHByaW50YWJsZSBBU0NJSSwgYXQgbW9zdFxuJiM0MzszMiBjaGFyYWN0ZXJzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBnaXZlcyB0aGUgcHJvZ3JhbSBgYC1FTk9FTlRgYCxcbiYjNDM7d2hpY2ggaXQgY2FuIGFjdCBvbiBvciByZXR1cm4uIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIGl0IHdhc1xuJiM0MztyZWdpc3RlcmVkIHVuZGVyLCBhbmQgdGhlIGVudHJ5IHJlcG9ydHMgd2hhdCBpdCBib3VuZDo6XG4mIzQzO1xuJiM0MzsgICAgJCBjYXQgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3FlbXVcbiYjNDM7ICAgIGVuYWJsZWRcbiYjNDM7ICAgIGJwZiBteV9oYW5kbGVyXG4mIzQzOyAgICBicGYtaW50ZXJwcmV0ZXIgYWFyY2g2NCAvdXNyL2Jpbi9xZW11LWFhcmNoNjRcbiYjNDM7ICAgIGJwZi1pbnRlcnByZXRlciBhcm0gL3Vzci9iaW4vcWVtdS1hcm1cbiYjNDM7ICAgIGZsYWdzOlxuJiM0MztcbiYjNDM7VGhlIHBhdGggcmVwb3J0ZWQgaXMgdGhlIG9uZSB0aGUgaW50ZXJwcmV0ZXIgd2FzIGJvdW5kIHVuZGVyLCB3aGljaCBuYW1lZFxuJiM0Mzt0aGUgZmlsZSBhdCB0aGF0IG1vbWVudDsgaXQgaXMgbm90IHJlLXJlc29sdmVkLCBzbyBpdCBpcyBhIHJlY29yZCBvZiB3aGF0XG4mIzQzO3dhcyBib3VuZCByYXRoZXIgdGhhbiBhIHByb21pc2UgYWJvdXQgd2hhdCB0aGF0IHBhdGggaG9sZHMgbm93LlxuIFxuIFRoZSBgYGxvYWRgYCBwcm9ncmFtIGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyIHdpdGhcbiB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnBfYXJnKClgYCBrZnVuYy4gSXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGVcbkBAIC0yMjQsOCAmIzQzOzI4NiwxMSBAQCBoYW5kbGVyIGNhbiBkZWNpZGUgdGhlbSBkaWZmZXJlbnRseSBmb3IgZWFjaCBiaW5hcnkgaXQgaGFuZGxlczpcbiAgIGBgUFRfSU5URVJQYGAgYW5kIHJ1bnMgdGhlIGJpbmFyeSBhcyBhIGZ1bGx5IG5hdGl2ZSBleGVjICh0aGUgYGBMYGBcbiAgIGZsYWcpLiBJdCBleGNsdWRlcyB0aGUgb3RoZXIgZmxhZ3MgYW5kIGEgc3RhZ2VkIGludGVycHJldGVyIGFyZ3VtZW50LlxuIFxuLUJlY2F1c2UgdGhlc2UgYXJlIHByb2dyYW0gY2hvaWNlcywgYSBgYEJgYCBlbnRyeSBjYXJyaWVzIG5vIGZsYWdzIGluIHRoZVxuLXJlZ2lzdGVyIHN0cmluZzsgYGBGYGAgKHByZS1vcGVuIGEgZml4ZWQgaW50ZXJwcmV0ZXIpIGhhcyBubyBtZWFuaW5nIGZvciBpdC5cbiYjNDM7QmVjYXVzZSB0aGVzZSBhcmUgcHJvZ3JhbSBjaG9pY2VzLCBhIGBgQmBgIGVudHJ5IGNhcnJpZXMgbm8gaW52b2NhdGlvblxuJiM0MztmbGFncyBpbiB0aGUgcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCBoYXMgbm9uZSB0byBzcGVsbCBmb3IgaXQgZWl0aGVyLCBzaW5jZVxuJiM0Mzt0aGUgaW50ZXJwcmV0ZXJzIGl0IGJpbmRzIGFscmVhZHkgcHJlLW9wZW4gd2hhdCBgYEZgYCB3b3VsZC4gVGhlXG4mIzQzO3JlZ2lzdHJhdGlvbiBkaXJlY3RpdmUgYGBEYGAgaXMgdGhlIGV4Y2VwdGlvbjogaXQgZGVjaWRlcyBob3cgdGhlIGVudHJ5XG4mIzQzO3N0YXJ0cyBvdXQsIG5vdCBob3cgdGhlIGludGVycHJldGVyIGlzIGludm9rZWQuXG4gXG4gSGFuZGxlcnMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgdGhlIHN0cnVjdF9vcHMgbWFwIHdhc1xuIHJlZ2lzdGVyZWQgaW4sIGZhbGxpbmcgYmFjayB0byBhbmNlc3RvciBuYW1lc3BhY2VzLCBtaXJyb3JpbmcgaG93XG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcbmluZGV4IDcwN2Y4YTE0ZjhhNjMuLmFkOGM0ZjY0YmYxMDIgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzYy5jXG5AQCAtMjQsNiAmIzQzOzI0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mc19jb250ZXh0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc3RydG94LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbkBAIC0zNyw2ICYjNDM7MzksOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MztcbiAvKiBFbnRyeSBzdGF0dXMgYW5kIG1hdGNoIHR5cGUgYml0IG51bWJlcnMuICovXG4gZW51bSBiaW5mbXRfbWlzY19lbnRyeV9iaXRzIHtcbiBcdE1JU0NfRk1UX0VOQUJMRURfQklUXHQ9IDAsXG5AQCAtNTIsOCAmIzQzOzU2LDE3IEBAIGVudW0gYmluZm10X21pc2NfZW50cnlfZmxhZ3Mge1xuIFx0TUlTQ19GTVRfT1BFTl9GSUxFXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMjgpLFxuIFx0TUlTQ19GTVRfVFJBTlNQQVJFTlRcdD0gKDFVIFx1MDAzY1x1MDAzYyAyNyksXG4gXHRNSVNDX0ZNVF9MT0FERVJcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDI2KSxcbiYjNDM7XHRNSVNDX0ZNVF9ESVNBQkxFRFx0PSAoMVUgXHUwMDNjXHUwMDNjIDI1KSxcbiB9O1xuIFxuJiM0MzsvKiBUaGUgZmxhZ3MgdGhhdCBzaGFwZSB0aGUgaW52b2NhdGlvbjsgYSAmIzM5O0ImIzM5OyBoYW5kbGVyIHBpY2tzIHRob3NlIHBlciBleGVjLiAqL1xuJiM0MzsjZGVmaW5lIE1JU0NfRk1UX0lOVk9DQVRJT05fRkxBR1MgKE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwIHxcdFxcXG4mIzQzO1x0XHRcdFx0ICAgTUlTQ19GTVRfT1BFTl9CSU5BUlkgfFx0XFxcbiYjNDM7XHRcdFx0XHQgICBNSVNDX0ZNVF9DUkVERU5USUFMUyB8XHRcXFxuJiM0MztcdFx0XHRcdCAgIE1JU0NfRk1UX09QRU5fRklMRSB8XHRcdFxcXG4mIzQzO1x0XHRcdFx0ICAgTUlTQ19GTVRfVFJBTlNQQVJFTlQgfFx0XFxcbiYjNDM7XHRcdFx0XHQgICBNSVNDX0ZNVF9MT0FERVIpXG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIC0gYSBmbGFnIGNoYXJhY3RlciBvZiB0aGUgcmVnaXN0ZXIgc3RyaW5nXG4gICogQGM6IHRoZSBjaGFyYWN0ZXIgdXNlcnNwYWNlIHdyaXRlcyBhbmQgcmVhZHMgYmFja1xuQEAgLTc1LDYgJiM0Mzs4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyBtaXNjX2ZsYWdzW10gPSB7XG4gXHR7ICYjMzk7RiYjMzk7LCBNSVNDX0ZNVF9PUEVOX0ZJTEUsXHQwLFx0XHRcdFwmIzM0O29wZW4gaW50ZXJwcmV0ZXIgZmlsZSBub3dcJiMzNDtcdH0sXG4gXHR7ICYjMzk7VCYjMzk7LCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcdE1JU0NfRk1UX09QRU5fQklOQVJZLFx0XCYjMzQ7dHJhbnNwYXJlbnRcJiMzNDtcdFx0XHR9LFxuIFx0eyAmIzM5O0wmIzM5OywgTUlTQ19GTVRfTE9BREVSLFx0XHQwLFx0XHRcdFwmIzM0O2xvYWRlciBzdWJzdGl0dXRpb25cJiMzNDtcdFx0fSxcbiYjNDM7XHR7ICYjMzk7RCYjMzk7LCBNSVNDX0ZNVF9ESVNBQkxFRCxcdDAsXHRcdFx0XCYjMzQ7cmVnaXN0ZXIgZGlzYWJsZWRcJiMzNDtcdFx0fSxcbiB9O1xuIFxuIC8qIExvb2sgdXAgYSBmbGFnIGNoYXJhY3RlciwgTlVMTCBpZiBAYyBpcyBub3Qgb25lLiAqL1xuQEAgLTk2LDkgJiM0MzsxMTAsOSBAQCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkge1xuIFx0Y29uc3QgY2hhciAqaW50ZXJwcmV0ZXI7XHQvKiBmaWxlbmFtZSBvZiBpbnRlcnByZXRlciAqL1xuIFx0Y2hhciAqbmFtZTtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbi1cdHN0cnVjdCBmaWxlICppbnRlcnBfZmlsZTtcbiBcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7XHQvKiBicGYtYmFja2VkIGhhbmRsZXIgKCYjMzk7QiYjMzk7KSAqL1xuIFx0Y29uc3QgY2hhciAqYnBmX29wc19uYW1lO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJwcztcdC8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi9cbiBcdHJlZmNvdW50X3QgdXNlcnM7XHRcdC8qIHN5bmMgcmVtb3ZhbCB3aXRoIGxvYWRfbWlzY19iaW5hcnkoKSAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdGNoYXIgYnVmW107XHRcdFx0LyogcmVnaXN0ZXIgc3RyaW5nLCBmaWVsZHMgcG9pbnQgaW4gaGVyZSAqL1xuQEAgLTE3NSw3ICYjNDM7MTg5LDEyIEBAIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHQvKiBXYWxrIGFsbCB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVycy4gKi9cbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXMsIG5vZGUsXG4gXHRcdFx0XHQgc3JjdV9yZWFkX2xvY2tfaGVsZChcdTAwMjZibV9lbnRyaWVzX3NyY3UpKSB7XG4tXHRcdC8qIE1ha2Ugc3VyZSB0aGlzIG9uZSBpcyBjdXJyZW50bHkgZW5hYmxlZC4gKi9cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBNYWtlIHN1cmUgdGhpcyBvbmUgaXMgY3VycmVudGx5IGVuYWJsZWQuIEFuIGVudHJ5IGVudGVyc1xuJiM0MztcdFx0ICogdGhlIGxpc3QgYXQgbW9zdCBvbmNlIGFuZCBvbmx5IHdob2xlOiBpdHMgY29uZmlndXJhdGlvbiBpc1xuJiM0MztcdFx0ICogb3JkZXJlZCBiZWZvcmUgdGhlIHJjdSBpbnNlcnRpb24gdGhhdCBtYWtlcyBpdCB2aXNpYmxlXG4mIzQzO1x0XHQgKiBoZXJlLlxuJiM0MztcdFx0ICovXG4gXHRcdGlmICghdGVzdF9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTIxNiw2ICYjNDM7MjM1LDEwOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpnZXRfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuIFx0cmV0dXJuIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBiaW5mbXRfbWlzY19maW5kX2ludGVycCAtIGZpbmQgYSBib3VuZCBpbnRlcnByZXRlciBieSBuYW1lXG4mIzQzOyAqIEBpbnRlcnBzOiB0aGUgaW50ZXJwcmV0ZXJzIHRoZSBtYXRjaGVkIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbiYjNDM7ICogQG5hbWU6IHRoZSBuYW1lIHRvIGxvb2sgZm9yXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIGludGVycHJldGVyIG9uIHN1Y2Nlc3MsIE5VTEwgaWYgQGludGVycHMgaGFzIG5vbmUgYnkgdGhhdCBuYW1lXG4mIzQzOyAqL1xuJiM0Mztjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICpcbiYjNDM7YmluZm10X21pc2NfZmluZF9pbnRlcnAoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaW50ZXJwcywgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlcnAsIGludGVycHMsIGxpc3QpXG4mIzQzO1x0XHRpZiAoIXN0cmNtcChpbnRlcnAtXHUwMDNlbmFtZSwgbmFtZSkpXG4mIzQzO1x0XHRcdHJldHVybiBpbnRlcnA7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFVuZG8gdGhlIG9wZW5fZXhlYygpIGEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBmaWxlIGNhbWUgZnJvbS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgY2xvc2VfaW50ZXJwX2ZpbGUoc3RydWN0IGZpbGUgKmYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoZikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xuJiM0MztcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0RFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPcGVuIGFuIGludGVycHJldGVyIEBwYXRoIGZvciBleGVjdXRpb246IG5vdywgaW4gdGhlIHdyaXRlciYjMzk7cyBjb250ZXh0LFxuJiM0MzsgKiBhbmQgLSBzaW5jZSBiaW5mbXRfbWlzYyBtb3VudHMgY2FuIGJlIHVucHJpdmlsZWdlZCAtIHdpdGggQGNyZWQsIHRoZVxuJiM0MzsgKiBjcmVkZW50aWFscyB0aGUgY29udHJvbCBmaWxlIGJlaW5nIHdyaXR0ZW4gd2FzIG9wZW5lZCB3aXRoLCBub3QgdGhlXG4mIzQzOyAqIHdyaXRlciYjMzk7cyBvd24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGZpbGUgKm9wZW5faW50ZXJwX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZjtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX3dpdGhfY3JlZHMoY3JlZClcbiYjNDM7XHRcdGYgPSBvcGVuX2V4ZWMocGF0aCk7XG4mIzQzO1x0aWYgKElTX0VSUihmKSlcbiYjNDM7XHRcdHByX25vdGljZShcJiMzNDtyZWdpc3RlcjogZmFpbGVkIHRvIGluc3RhbGwgaW50ZXJwcmV0ZXIgJXNcXG5cJiMzNDssIHBhdGgpO1xuJiM0MztcdHJldHVybiBmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWxlYXNlIHRoZSBpbnRlcnByZXRlcnMgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aC4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnAsICp0bXA7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnRlcnAsIHRtcCwgXHUwMDI2ZS1cdTAwM2VpbnRlcnBzLCBsaXN0KSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZpbnRlcnAtXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRjbG9zZV9pbnRlcnBfZmlsZShpbnRlcnAtXHUwMDNlZmlsZSk7XG4mIzQzO1x0XHRrZnJlZShpbnRlcnApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlciAtIGJpbmQgYW4gb3BlbmVkIGludGVycHJldGVyIHRvIEBlXG4mIzQzOyAqIEBlOiBlbnRyeSBiZWluZyBjb25maWd1cmVkXG4mIzQzOyAqIEBuYW1lOiBuYW1lIHRoZSBsb2FkIHByb2dyYW0gd2lsbCBzZWxlY3QgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWRcbiYjNDM7ICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljIGVudHJ5XG4mIzQzOyAqIEBwYXRoOiB0aGUgcGF0aCBAZiB3YXMgb3BlbmVkIGZyb21cbiYjNDM7ICogQGY6IHRoZSBpbnRlcnByZXRlciwgb3BlbmVkIGZvciBleGVjdXRpb25cbiYjNDM7ICpcbiYjNDM7ICogRXZlcnkgZXhlYyBydW5zIGEgY2xvbmUgb2YgQGYsIHNvIHRoZSBwYXRoIGRlY2lkZWQgd2hpY2ggZmlsZSBpcyBib3VuZFxuJiM0MzsgKiBhbmQgbm90aGluZyBlbHNlOiBpdCBpcyBub3QgcmVzb2x2ZWQgYWdhaW4sIGluIGFueSBuYW1lc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgaGFzIHRvIGhhdmUgdmFsaWRhdGVkIEBuYW1lIGFuZCBAcGF0aCwgZXN0YWJsaXNoZWQgdGhhdCBAZVxuJiM0MzsgKiBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQsIGFuZCBvd25zIEBmIHVudGlsIHRoaXMgc3VjY2VlZHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGZpbGUgKmYpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbmxlbiA9IHN0cmxlbihuYW1lKSwgcGxlbiA9IHN0cmxlbihwYXRoKTtcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XG4mIzQzO1xuJiM0MztcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcdTAwMjZlLVx1MDAzZWludGVycHMsIG5hbWUpKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1x0aWYgKGxpc3RfY291bnRfbm9kZXMoXHUwMDI2ZS1cdTAwM2VpbnRlcnBzKSBcdTAwM2U9IEJJTkZNVF9NSVNDX0lOVEVSUF9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XG4mIzQzO1x0LyogT25lIGFsbG9jYXRpb24sIGJvdGggc3RyaW5ncyBpbiBpdCwgbGlrZSB0aGUgZW50cnkmIzM5O3Mgb3duIGJ1ZmZlci4gKi9cbiYjNDM7XHRpbnRlcnAgPSBrbWFsbG9jKHN0cnVjdF9zaXplKGludGVycCwgbmFtZSwgbmxlbiAmIzQzOyBwbGVuICYjNDM7IDIpLFxuJiM0MztcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRpZiAoIWludGVycClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpbnRlcnAtXHUwMDNlcGF0aCA9IGludGVycC1cdTAwM2VuYW1lICYjNDM7IG5sZW4gJiM0MzsgMTtcbiYjNDM7XHRzdHJzY3B5KGludGVycC1cdTAwM2VuYW1lLCBuYW1lLCBubGVuICYjNDM7IDEpO1xuJiM0MztcdHN0cnNjcHkoaW50ZXJwLVx1MDAzZW5hbWUgJiM0MzsgbmxlbiAmIzQzOyAxLCBwYXRoLCBwbGVuICYjNDM7IDEpO1xuJiM0MztcdGludGVycC1cdTAwM2VmaWxlID0gZjtcbiYjNDM7XHQvKiBQdWJsaXNoIHRoZSBub2RlOiBhIGxvY2tsZXNzIGNhdCBtYXkgYmUgd2Fsa2luZyB0aGUgbGlzdC4gKi9cbiYjNDM7XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZpbnRlcnAtXHUwMDNlbGlzdCwgXHUwMDI2ZS1cdTAwM2VpbnRlcnBzKTtcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtyZWdpc3RlcjogaW50ZXJwcmV0ZXI6ICVzIHslc31cXG5cJiMzNDssIG5hbWUsIHBhdGgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIHtcbiBcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSwgcmN1KTtcbkBAIC0yMzIsMjEgJiM0MzszNTMsMzYgQEAgc3RhdGljIHZvaWQgYm1fZW50cnlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gICpcbiAgKiBGcmVlIGVudHJ5IHN5bmNpbmcgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgYW5kIGRlZmVyIGZpbmFsIGZyZWUgdG9cbiAgKiBsb2FkX21pc2NfYmluYXJ5KCkgaW4gY2FzZSBpdCBpcyB1c2luZyB0aGUgYmluYXJ5IHR5cGUgaGFuZGxlciB3ZSB3ZXJlXG4tICogcmVxdWVzdGVkIHRvIHJlbW92ZS5cbiYjNDM7ICogcmVxdWVzdGVkIHRvIHJlbW92ZS4gQWxzbyB0aGUgdGVhcmRvd24gZm9yIGEgcmVnaXN0cmF0aW9uIHRoYXQgZmFpbHNcbiYjNDM7ICogYmVmb3JlIGFkZF9lbnRyeSgpIHB1Ymxpc2hlcyB0aGUgZW50cnkuXG4gICovXG4gc3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbiB7XG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZS1cdTAwM2V1c2VycykpIHtcbi1cdFx0aWYgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xuLVx0XHRcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhlLVx1MDAzZWludGVycF9maWxlKTtcbi1cdFx0XHRmaWxwX2Nsb3NlKGUtXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xuLVx0XHR9XG4mIzQzO1x0XHRlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpO1xuIFx0XHQvKiBXYWxrZXJzIG1heSBzdGlsbCBkZXJlZmVyZW5jZSB0aGlzIGVudHJ5LCBldmVuIHNsZWVwaW5nLiAqL1xuIFx0XHRjYWxsX3NyY3UoXHUwMDI2Ym1fZW50cmllc19zcmN1LCBcdTAwMjZlLVx1MDAzZXJjdSwgYm1fZW50cnlfZnJlZV9yY3UpO1xuIFx0fVxuIH1cbiBcbi1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBpZiAoX1QpIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXG4mIzQzO0RFRklORV9GUkVFKHB1dF9iaW5mbXRfaGFuZGxlciwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICosIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXG4mIzQzO1xuJiM0MzsvKiBEcm9wIGV2ZXJ5dGhpbmcgYSBsb2FkIHByb2dyYW0gc3RhZ2VkIGZvciB0aGlzIGV4ZWMuICovXG4mIzQzO3N0YXRpYyB2b2lkIGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbiYjNDM7XHRicHJtLVx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xuJiM0MztcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcpO1xuJiM0MztcdGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcgPSBOVUxMO1xuJiM0MztcdGlmIChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSkge1xuJiM0MztcdFx0ZnB1dChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSk7XG4mIzQzO1x0XHRicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGJwcm0tXHUwMDNlYnBmX2ZsYWdzID0gMDtcbiYjNDM7fVxuIFxuIC8qKlxuICAqIGN1cnJlbnRfYmluZm10X21pc2MgLSBnZXQgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIG9mIHRoZSBjYWxsZXImIzM5O3MgdXNlciBuYW1lc3BhY2VcbkBAIC0yODEsNyAmIzQzOzQxNyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2MgKmN1cnJlbnRfYmluZm10X21pc2Modm9pZClcbiAgKiBAYnBybTogYmluYXJ5IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWRcbiAgKlxuICAqIEEgc3RhdGljIGVudHJ5IGNhcnJpZXMgaXRzIGludGVycHJldGVyIHBhdGgsIGZvciBhICYjMzk7QiYjMzk7IGVudHJ5IHRoZVxuLSAqIGhhbmRsZXImIzM5O3MgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQuIFRoZSBtYXRjaCBpcyBjb21taXR0ZWQsIHNvIGEgZmFpbGluZ1xuJiM0MzsgKiBoYW5kbGVyJiMzOTtzIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0LCBlaXRoZXIgYnkgcGF0aCBvciBieSB0aGUgbmFtZSBvZiBvbmVcbiYjNDM7ICogb2YgdGhlIGludGVycHJldGVycyB0aGUgZW50cnkgYm91bmQuIFRoZSBtYXRjaCBpcyBjb21taXR0ZWQsIHNvIGEgZmFpbGluZ1xuICAqIHByb2dyYW0gZmFpbHMgdGhlIGV4ZWMuXG4gICpcbiAgKiBSZXR1cm46IHRoZSBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBhbiBFUlJfUFRSIG9uIGZhaWx1cmVcbkBAIC0yOTEsMTUgJiM0Mzs0MjgsMjAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4ge1xuIFx0aW50IHJldHZhbDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERyb3Agd2hhdCBhIHByZXZpb3VzIGNoYWluIGxldmVsIHN0YWdlZCBiZWZvcmUgYW55dGhpbmcgY2FuIHBpY2sgaXRcbiYjNDM7XHQgKiB1cC4gQSBzdGF0aWMgZW50cnkgc3RhZ2VzIG5vdGhpbmcgYnV0IGNvbnN1bWVzIGEgc3RhZ2VkIGZpbGUganVzdFxuJiM0MztcdCAqIGxpa2UgYSAmIzM5O0ImIzM5OyBlbnRyeSBkb2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihicHJtKTtcbiYjNDM7XG4gXHRpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZS1cdTAwM2VpbnRlcnByZXRlcjtcbiBcbi1cdC8qIERyb3AgYW55IGludGVycHJldGVyIG9yIGZsYWdzIGEgcHJldmlvdXMgY2hhaW4gbGV2ZWwgc3RhZ2VkLiAqL1xuLVx0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbi1cdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XG4tXHRicHJtLVx1MDAzZWJwZl9mbGFncyA9IDA7XG4tXG4mIzQzO1x0LyogVGhlIGludGVycHJldGVycyB0aGlzIGVudHJ5IGxldHMgdGhlIHByb2dyYW0gY2hvb3NlIGZyb20uICovXG4mIzQzO1x0YnBybS1cdTAwM2VicGZfaW50ZXJwcyA9IFx1MDAyNmUtXHUwMDNlaW50ZXJwcztcbiBcdHJldHZhbCA9IGUtXHUwMDNlYnBmX29wcy1cdTAwM2Vsb2FkKGJwcm0pO1xuJiM0MztcdGJwcm0tXHUwMDNlYnBmX2ludGVycHMgPSBOVUxMO1xuIFx0aWYgKHJldHZhbCkge1xuIFx0XHQvKiBLZWVwIGEgcHJvZ3JhbS1zdXBwbGllZCBlcnJvciB3aXRoaW4gZXJybm8gcmFuZ2UuICovXG4gXHRcdGlmIChyZXR2YWwgXHUwMDNlIDAgfHwgcmV0dmFsIFx1MDAzYyAtTUFYX0VSUk5PKVxuQEAgLTMxNyw5ICYjNDM7NDU5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4gXG4gZHJvcF9zdGFnZWQ6XG4gXHQvKiBBIGZhaWxpbmcgbG9hZCBsZWF2ZXMgbm90aGluZyBiZWhpbmQgZm9yIGxhdGVyIGVudHJpZXMuICovXG4tXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnBfYXJnKTtcbi1cdGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcgPSBOVUxMO1xuLVx0YnBybS1cdTAwM2VicGZfZmxhZ3MgPSAwO1xuJiM0MztcdGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihicHJtKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldHZhbCk7XG4gfVxuIFxuQEAgLTM2NCwyMyAmIzQzOzUwNCwzNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiAvKipcbiAgKiBlbnRyeV9vcGVuX2ludGVycHJldGVyIC0gb3BlbiB0aGUgZW50cnkmIzM5O3MgaW50ZXJwcmV0ZXIgZm9yIGV4ZWN1dGlvblxuICAqIEBlOiBtYXRjaGVkIGJpbmFyeSB0eXBlIGhhbmRsZXJcbiYjNDM7ICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4gICogQGludGVycHJldGVyOiB0aGUgaW50ZXJwcmV0ZXIgc2VsZWN0ZWQgZm9yIHRoaXMgZXhlY1xuICAqXG4gICogQW4gJiMzOTtGJiMzOTsgZW50cnkgaGFuZHMgb3V0IGEgY2xvbmUgb2YgdGhlIGZpbGUgaXQgcHJlLW9wZW5lZCBhdCByZWdpc3RyYXRpb24sXG4tICogYW55IG90aGVyIGVudHJ5IG9wZW5zIHRoZSBzZWxlY3RlZCBwYXRoLlxuJiM0MzsgKiBhbmQgc28gZG9lcyBhICYjMzk7QiYjMzk7IGVudHJ5IHdob3NlIGxvYWQgcHJvZ3JhbSBzZWxlY3RlZCBvbmUgb2YgdGhlXG4mIzQzOyAqIGludGVycHJldGVycyBpdCBib3VuZC4gQW55IG90aGVyIGVudHJ5IG9wZW5zIHRoZSBzZWxlY3RlZCBwYXRoLlxuICAqXG4gICogUmV0dXJuOiB0aGUgb3BlbmVkIGludGVycHJldGVyIG9uIHN1Y2Nlc3MsIGFuIEVSUl9QVFIgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0XHRcdFx0XHQgICBjb25zdCBjaGFyICppbnRlcnByZXRlcilcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGUgX19mcmVlKGZwdXQpID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmJvdW5kO1xuIFx0aW50IHJldHZhbDtcbiBcbi1cdGlmICghKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkpXG4mIzQzO1x0aWYgKGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKSB7XG4mIzQzO1x0XHRib3VuZCA9IGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlO1xuJiM0MztcdH0gZWxzZSBpZiAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfT1BFTl9GSUxFKSB7XG4mIzQzO1x0XHQvKiBBbiAmIzM5O0YmIzM5OyBlbnRyeSBwcmUtb3BlbmVkIGV4YWN0bHkgb25lIGludGVycHJldGVyLiAqL1xuJiM0MztcdFx0aW50ZXJwID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZlLVx1MDAzZWludGVycHMsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAsIGxpc3QpO1xuJiM0MztcdFx0Ym91bmQgPSBpbnRlcnAtXHUwMDNlZmlsZTtcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRyZXR1cm4gb3Blbl9leGVjKGludGVycHJldGVyKTtcbiYjNDM7XHR9XG4gXG4tXHRpbnRlcnBfZmlsZSA9IGZpbGVfY2xvbmVfb3BlbihlLVx1MDAzZWludGVycF9maWxlKTtcbiYjNDM7XHRpbnRlcnBfZmlsZSA9IGZpbGVfY2xvbmVfb3Blbihib3VuZCk7XG4gXHRpZiAoSVNfRVJSKGludGVycF9maWxlKSlcbiBcdFx0cmV0dXJuIGludGVycF9maWxlO1xuIFxuQEAgLTQ5MCw3ICYjNDM7NjQzLDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHQgKiB0byB0aGUgcmVhbCBmb3JtYXQgaW4gdGhlIHNhbWUgcm91bmQuXG4gXHQgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgTUlTQ19GTVRfTE9BREVSKSB7XG4tXHRcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGludGVycHJldGVyKTtcbiYjNDM7XHRcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGJwcm0sIGludGVycHJldGVyKTtcbiBcdFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpIHtcbiBcdFx0XHRyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTtcbiBcdFx0XHQvKiBEZWNsaW5pbmcgaGVyZSB3b3VsZCBydW4gdGhlIGJpbmFyeSYjMzk7cyBvd24gUFRfSU5URVJQLiAqL1xuQEAgLTUxMiw3ICYjNDM7NjY1LDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgaW50ZXJwcmV0ZXIpO1xuJiM0MztcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGJwcm0sIGludGVycHJldGVyKTtcbiBcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihpbnRlcnBfZmlsZSk7XG4gXG5AQCAtNjg0LDcgJiM0Mzs4MzcsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0XHRcdFx0ICAgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbi1cdGNoYXIgKmJ1ZiwgKnAsICpmbGFncztcbiYjNDM7XHRjaGFyICpidWYsICpwO1xuIFx0Y2hhciBkZWw7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtyZWdpc3RlcjogcmVjZWl2ZWQgJXp1IGJ5dGVzXFxuXCYjMzQ7LCBjb3VudCk7XG5AQCAtNzAxLDYgJiM0Mzs4NTQsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdHAgPSBidWYgPSBlLVx1MDAzZWJ1ZjtcbiBcbiBcdG1lbXNldChlLCAwLCBzaXplb2YoKmUpKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZlLVx1MDAzZWludGVycHMpO1xuIFx0aWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xuIFxuQEAgLTc4MCwxOCAmIzQzOzkzNCwzMCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdH1cbiBcbiBcdC8qIFBhcnNlIHRoZSAmIzM5O2ZsYWdzJiMzOTsgZmllbGQuICovXG4tXHRmbGFncyA9IHA7XG4gXHRwID0gY2hlY2tfc3BlY2lhbF9mbGFncyhwLCBlKTtcbiBcbiBcdC8qXG4gXHQgKiBBIGJwZiBoYW5kbGVyIGRlY2lkZXMgdGhlIGludm9jYXRpb24gZmxhZ3MgcGVyIGV4ZWMgd2l0aFxuIFx0ICogYnBmX2JpbnBybV9zZXRfZmxhZ3MoKSByYXRoZXIgdGhhbiBmaXhpbmcgdGhlbSBhdCByZWdpc3RyYXRpb24sIGFuZFxuLVx0ICogJiMzOTtGJiMzOTsgKHByZS1vcGVuIGEgZml4ZWQgaW50ZXJwcmV0ZXIpIGlzIG1lYW5pbmdsZXNzIGZvciBpdCwgc28gYSAmIzM5O0ImIzM5O1xuLVx0ICogZW50cnkmIzM5O3MgZmxhZ3MgZmllbGQgaGFzIHRvIGJlIGVtcHR5LlxuJiM0MztcdCAqIHRoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgcHJlLW9wZW4gd2hhdCAmIzM5O0YmIzM5OyB3b3VsZCBoYXZlLCBzbyBhICYjMzk7QiYjMzk7XG4mIzQzO1x0ICogZW50cnkgY2FycmllcyBubyBpbnZvY2F0aW9uIGZsYWdzLlxuIFx0ICovXG4tXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2IHAgIT0gZmxhZ3MpXG4mIzQzO1x0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfSU5WT0NBVElPTl9GTEFHUykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogJiMzOTtEJiMzOTsgaXMgYSBkaXJlY3RpdmUgZm9yIHRoaXMgcmVnaXN0cmF0aW9uIHJhdGhlciB0aGFuIGEgbGFzdGluZ1xuJiM0MztcdCAqIHByb3BlcnR5LCBzbyBjb25zdW1lIGl0OiB0aGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBhbmQgc3RheXNcbiYjNDM7XHQgKiBvdXQgb2YgdGhlIHNlYXJjaCBsaXN0IHVudGlsICYjMzk7MSYjMzk7IGlzIHdyaXR0ZW4gdG8gaXRzIGVudHJ5IGZpbGUuXG4mIzQzO1x0ICogU3RheWluZyBvdXQgaXMgd2hhdCBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiBpbnRlcnByZXRlcnM7XG4mIzQzO1x0ICogdGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgaXQsIGZvciBnb29kLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9ESVNBQkxFRCkge1xuJiM0MztcdFx0ZS1cdTAwM2VmbGFncyBcdTAwMjY9IH5NSVNDX0ZNVF9ESVNBQkxFRDtcbiYjNDM7XHRcdGNsZWFyX2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIFRyYW5zcGFyZW5jeSBwcmVzZXJ2ZXMgdGhlIHdob2xlIGFyZ3YsIGFyZ3ZbMF0gaW5jbHVkZWQuICovXG4gXHRpZiAoKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX1RSQU5TUEFSRU5UKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApKVxuQEAgLTgxNCw2ICYjNDM7OTgwLDggQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHQgICAgZS1cdTAwM2VpbnRlcnByZXRlclswXSAhPSAmIzM5Oy8mIzM5OylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4mIzQzO1x0LyogQm9ybiBob2xkaW5nIG9uZSByZWZlcmVuY2U7IHB1dF9iaW5mbXRfaGFuZGxlcigpIGlzIHRoZSB0ZWFyZG93bi4gKi9cbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2ZS1cdTAwM2V1c2VycywgMSk7XG4gXHRyZXR1cm4gbm9fZnJlZV9wdHIoZSk7XG4gfVxuIFxuQEAgLTgyNSwxOCAmIzQzOzk5MywxNyBAQCBlbnVtIGJtX2NvbW1hbmQge1xuIFx0Qk1fQ01EX1JFTU9WRSxcdC8qIFwmIzM0Oy0xXCYjMzQ7ICovXG4gfTtcbiBcbiYjNDM7LyogTG9uZ2VzdCBvZiB0aGUgY29tbWFuZHMgYWJvdmUsIFwmIzM0Oy0xXFxuXCYjMzQ7LiAqL1xuJiM0MzsjZGVmaW5lIE1BWF9DT01NQU5EX0xFTkdUSCAzXG4mIzQzO1xuIC8qXG4gICogUGFyc2Ugd2hhdCB1c2Vyc3BhY2Ugd3JvdGUgdG8gL3N0YXR1cyBvciBhbiBlbnRyeSBmaWxlOiAmIzM5OzEmIzM5OyBlbmFibGVzLFxuICAqICYjMzk7MCYjMzk7IGRpc2FibGVzIGFuZCAmIzM5Oy0xJiMzOTsgcmVtb3ZlcyB0aGUgZW50cnkgb3IgYWxsIGVudHJpZXMuXG4gICovXG4tc3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcbiYjNDM7c3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBjb3VudClcbiB7XG4tXHRjaGFyIHNbNF07XG4tXG4tXHRpZiAoY291bnQgXHUwMDNlIDMpXG4mIzQzO1x0aWYgKGNvdW50IFx1MDAzZSBNQVhfQ09NTUFORF9MRU5HVEgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0aWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmICghY291bnQpXG4gXHRcdHJldHVybiBCTV9DTURfSUdOT1JFO1xuIFx0aWYgKHNbY291bnQgLSAxXSA9PSAmIzM5O1xcbiYjMzk7KVxuQEAgLTg1MCw4ICYjNDM7MTAxNywyNiBAQCBzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MzsvKiBDb3B5IGluIGEgY29tbWFuZCBmcm9tIGEgZmlsZSB0aGF0IHRha2VzIG5vdGhpbmcgZWxzZSwgYW5kIHBhcnNlIGl0LiAqL1xuJiM0MztzdGF0aWMgaW50IHJlYWRfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHNbTUFYX0NPTU1BTkRfTEVOR1RIICYjNDM7IDFdO1xuJiM0MztcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNlIHNpemVvZihzKSAtIDEpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIocywgYnVmZmVyLCBjb3VudCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gcGFyc2VfY29tbWFuZChzLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gLyogZ2VuZXJpYyBzdHVmZiAqL1xuIFxuJiM0MzsvKiBUaGUgcm9vdCBkaXJlY3RvcnkmIzM5O3MgaW5vZGU7IGl0cyBsb2NrIHNlcmlhbGl6ZXMgY29uZmlndXJpbmcgYW4gaW5zdGFuY2UuICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBkX2lub2RlKHNiLVx1MDAzZXNfcm9vdCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgYm1fc2VxX2hleChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHU4ICpkYXRhLCBpbnQgc2l6ZSlcbiB7XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspXG5AQCAtODY3LDEwICYjNDM7MTA1MiwyMyBAQCBzdGF0aWMgaW50IGJtX2VudHJ5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpXG4gXHRlbHNlXG4gXHRcdHNlcV9wdXRzKG0sIFwmIzM0O2Rpc2FibGVkXFxuXCYjMzQ7KTtcbiBcbi1cdGlmICh0ZXN0X2JpdChNSVNDX0ZNVF9CUEZfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbiYjNDM7XG4gXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7YnBmICVzXFxuXCYjMzQ7LCBlLVx1MDAzZWJwZl9vcHMtXHUwMDNlbmFtZSk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSBzdGFnZWQgZW50cnkmIzM5O3Mgc2V0IGNhbiBzdGlsbCBncm93LCBzbyBldmVyeSBiaW5kaW5nIGlzXG4mIzQzO1x0XHQgKiByY3UtcHVibGlzaGVkLiBUaGUgb3BlbiBmaWxlIHBpbnMgdGhlIGVudHJ5IGFuZCB3aXRoIGl0XG4mIzQzO1x0XHQgKiBldmVyeSBub2RlLCBzbyByY3UgaXMgZm9yIHRoZSB0ZWFyaW5nLCBub3QgdGhlIGxpZmV0aW1lLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpbnRlcnAsIFx1MDAyNmUtXHUwMDNlaW50ZXJwcywgbGlzdClcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDticGYtaW50ZXJwcmV0ZXIgJXMgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgaW50ZXJwLVx1MDAzZW5hbWUsIGludGVycC1cdTAwM2VwYXRoKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7aW50ZXJwcmV0ZXIgJXNcXG5cJiMzNDssIGUtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuJiM0MztcdH1cbiBcbiBcdC8qIHByaW50IHRoZSBzcGVjaWFsIGZsYWdzICovXG4gXHRzZXFfcHV0cyhtLCBcJiMzNDtmbGFnczogXCYjMzQ7KTtcbkBAIC05OTIsMTAgJiM0MzsxMTkwLDExIEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG4gLyogUmVtb3ZlIEBlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSByZW1vdmVkLiAqL1xuIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuLVx0c3RydWN0IGlub2RlICpyb290ID0gZF9pbm9kZShzYi1cdTAwM2VzX3Jvb3QpO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoc2IpO1xuIFxuIFx0aW5vZGVfbG9ja19uZXN0ZWQocm9vdCwgSV9NVVRFWF9QQVJFTlQpO1xuLVx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZlLVx1MDAzZW5vZGUpKVxuJiM0MztcdC8qIEEgc3RhZ2VkIGVudHJ5IGlzIG5vdCBoYXNoZWQ7IHRoZSBkZW50cnkgc2F5cyBpZiBpdCB3YXMgcmVtb3ZlZC4gKi9cbiYjNDM7XHRpZiAoIWRfdW5oYXNoZWQoZS1cdTAwM2VkZW50cnkpKVxuIFx0XHRyZW1vdmVfYmluZm10X2hhbmRsZXIoaV9iaW5mbXRfbWlzYyhyb290KSwgZSk7XG4gXHRpbm9kZV91bmxvY2socm9vdCk7XG4gfVxuQEAgLTEwMDQsMTMgJiM0MzsxMjAzLDIxIEBAIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2FsbF9lbnRyaWVzKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiBcdFx0XHRcdCAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBkX2lub2RlKHNiLVx1MDAzZXNfcm9vdCk7XG4tXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmU7XG4tXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpjaGlsZCA9IE5VTEw7XG4gXG4gXHRpbm9kZV9sb2NrX25lc3RlZChyb290LCBJX01VVEVYX1BBUkVOVCk7XG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5leHQsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcywgbm9kZSlcbi1cdFx0cmVtb3ZlX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2FsayB0aGUgZGlyZWN0b3J5IHJhdGhlciB0aGFuIHRoZSBzZWFyY2ggbGlzdDogYSBzdGFnZWQgZW50cnlcbiYjNDM7XHQgKiBpcyBpbiB0aGUgZm9ybWVyIGJ1dCBub3QgeWV0IGluIHRoZSBsYXR0ZXIuIFRoZSBjb250cm9sIGZpbGVzXG4mIzQzO1x0ICogY2Fycnkgbm8gZW50cnkgYW5kIHN0YXkuXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKChjaGlsZCA9IGZpbmRfbmV4dF9jaGlsZChzYi1cdTAwM2VzX3Jvb3QsIGNoaWxkKSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGRfaW5vZGUoY2hpbGQpLVx1MDAzZWlfcHJpdmF0ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZSlcbiYjNDM7XHRcdFx0cmVtb3ZlX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGUpO1xuJiM0MztcdH1cbiBcdGlub2RlX3VubG9jayhyb290KTtcbiB9XG4gXG5AQCAtMTA1NiwyMCAmIzQzOzEyNjMsMTM4IEBAIHN0YXRpYyBpbnQgYm1fZW50cnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTG9uZ2VzdCAmIzM5OyYjNDM7XHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJiMzOTsgYSB3cml0ZSBjYW4gc3BlbGwsIGFuZCB3aXRoIGl0IHRoZSBsb25nZXN0XG4mIzQzOyAqIGNvbW1hbmQgYW4gZW50cnkgZmlsZSB0YWtlczogdGhlIHR3byBkZWxpbWl0ZXJzIGFuZCBhIG5ld2xpbmUgb24gdG9wIG9mXG4mIzQzOyAqIHRoZSB0d28gbmFtZXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1BWF9CSU5ESU5HX0xFTkdUSCAoQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYICYjNDM7IFBBVEhfTUFYICYjNDM7IDMpXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYm1fZW50cnlfYWRkX2ludGVycCAtIGJpbmQgYW5vdGhlciBpbnRlcnByZXRlciB0byBhIHN0YWdlZCBlbnRyeVxuJiM0MzsgKiBAZTogdGhlIGVudHJ5XG4mIzQzOyAqIEBmaWxlOiB0aGUgZW50cnkgZmlsZSBiZWluZyB3cml0dGVuIHRvLCBmb3IgaXRzIGNyZWRlbnRpYWxzXG4mIzQzOyAqIEBidWY6IHRoZSAmIzM5OyYjNDM7XHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJiMzOTsgY29tbWFuZCwgcGFyc2VkIGluIHBsYWNlIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyXG4mIzQzOyAqIEBjb3VudDogaXRzIGxlbmd0aFxuJiM0MzsgKlxuJiM0MzsgKiBBICYjMzk7RCYjMzk7IGVudHJ5IGlzIHJlZ2lzdGVyZWQgb3V0c2lkZSB0aGUgc2VhcmNoIGxpc3QsIHdoaWNoIGlzIHdoYXQgbGVhdmVzXG4mIzQzOyAqIGl0IG9wZW4gdG8gYmVpbmcgY29uZmlndXJlZDogaXQgY2Fubm90IGJlIG1hdGNoZWQsIHNvIG5vIGV4ZWMgY2FuIGJlXG4mIzQzOyAqIGhvbGRpbmcgaXRzIGludGVycHJldGVycyBhbmQgdGhlIHNldCBjYW4gc3RpbGwgZ3Jvdy4gSXRzIGZpcnN0IGVuYWJsZVxuJiM0MzsgKiBwdWJsaXNoZXMgaXQgYW5kIGVuZHMgdGhhdC4gT25lIGludGVycHJldGVyIHBlciB3cml0ZSwgdXAgdG9cbiYjNDM7ICogQklORk1UX01JU0NfSU5URVJQX01BWCBvZiB0aGVtLCBub25lIG9mIHdoaWNoIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlclxuJiM0MzsgKiBzdHJpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogQGNvdW50IG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmYgX19mcmVlKGNsb3NlX2ludGVycF9maWxlKSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGlub2RlICpyb290ID0gYm1fcm9vdF9pbm9kZShmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2IpO1xuJiM0MztcdHNpemVfdCBubGVuLCBwbGVuO1xuJiM0MztcdGNoYXIgKm5hbWUsICpwYXRoO1xuJiM0MztcdGludCByZXR2YWw7XG4mIzQzO1xuJiM0MztcdC8qIFNldHRsZWQgYmVmb3JlIHRoZSBvcGVuOiB0eXBlIGlzIGZpeGVkLCBwdWJsaWNhdGlvbiBpcyBwZXJtYW5lbnQuICovXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChNSVNDX0ZNVF9CUEZfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghaGxpc3RfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2ZS1cdTAwM2Vub2RlKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdC8qICYjMzk7JiM0MztcdTAwM2NuYW1lXHUwMDNlIFx1MDAzY3BhdGhcdTAwM2UmIzM5OzogdGhlIHBhdGggaXMgZXZlcnl0aGluZyBwYXN0IHRoZSBmaXJzdCBzcGFjZS4gKi9cbiYjNDM7XHRuYW1lID0gYnVmICYjNDM7IDE7XG4mIzQzO1x0cGF0aCA9IHN0cmNocihuYW1lLCAmIzM5OyAmIzM5Oyk7XG4mIzQzO1x0aWYgKCFwYXRoKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0KnBhdGgmIzQzOyYjNDM7ID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0cGxlbiA9IHN0cmxlbihwYXRoKTtcbiYjNDM7XHQvKiBUaGUgY29tbWFuZCBoYXMgdG8gZW5kIGF0IHRoZSB3cml0ZSwgbGlrZSBhIHJlZ2lzdGVyIHN0cmluZy4gKi9cbiYjNDM7XHRpZiAocGF0aCAmIzQzOyBwbGVuICE9IGJ1ZiAmIzQzOyBjb3VudClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChwbGVuIFx1MDAyNlx1MDAyNiBwYXRoW3BsZW4gLSAxXSA9PSAmIzM5O1xcbiYjMzk7KVxuJiM0MztcdFx0cGF0aFstLXBsZW5dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHQvKiBSZXNvbHZlZCBub3csIHNvIGEgcmVsYXRpdmUgcGF0aCB3b3VsZCBuYW1lIHRoZSB3cml0ZXImIzM5O3MgY3dkLiAqL1xuJiM0MztcdGlmIChwYXRoWzBdICE9ICYjMzk7LyYjMzk7KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG5sZW4gPSBwYXRoIC0gbmFtZSAtIDE7XG4mIzQzO1x0aWYgKCFubGVuIHx8IG5sZW4gXHUwMDNlIEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdC8qIFRoZSBuYW1lIHByaW50cyBiZXR3ZWVuIGRlbGltaXRlcnMsIHNvIGtlZXAgaXQgYSBwcmludGFibGUgd29yZC4gKi9cbiYjNDM7XHRmb3IgKGNvbnN0IGNoYXIgKnAgPSBuYW1lOyAqcDsgcCYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoIWlzYXNjaWkoKnApIHx8ICFpc2dyYXBoKCpwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIE9wZW5lZCBiZWZvcmUgdGhlIGxvY2s6IHJlc29sdmluZyBpdCBtYXkgd2FsayB0aGlzIHZlcnkgZmlsZXN5c3RlbS4gKi9cbiYjNDM7XHRmID0gb3Blbl9pbnRlcnBfZmlsZShmaWxlLVx1MDAzZWZfY3JlZCwgcGF0aCk7XG4mIzQzO1x0aWYgKElTX0VSUihmKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGYpO1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrKHJvb3QpO1xuJiM0MztcdGlmIChkX3VuaGFzaGVkKGUtXHUwMDNlZGVudHJ5KSlcbiYjNDM7XHRcdHJldHZhbCA9IC1FTk9FTlQ7XHQvKiByZW1vdmVkIHdoaWxlIHdlIHdlcmUgb3BlbmluZyBpdCAqL1xuJiM0MztcdGVsc2UgaWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZlLVx1MDAzZW5vZGUpKVxuJiM0MztcdFx0cmV0dmFsID0gLUVCVVNZO1x0LyogcHVibGlzaGVkIHdoaWxlIHdlIHdlcmUgb3BlbmluZyBpdCAqL1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHZhbCA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBuYW1lLCBwYXRoLCBmKTtcbiYjNDM7XHRpbm9kZV91bmxvY2socm9vdCk7XG4mIzQzO1x0aWYgKHJldHZhbClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZSBlbnRyeSBub3cuICovXG4mIzQzO1x0cmV0YWluX2FuZF9udWxsX3B0cihmKTtcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiBcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGlub2RlLVx1MDAzZWlfcHJpdmF0ZTtcbi1cdGludCByZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xuJiM0MztcdGNoYXIgKmJ1ZiBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHQvKiBBIGJpbmRpbmcgaXMgdGhlIGxvbmdlc3QgY29tbWFuZCB0aGlzIGZpbGUgdGFrZXMuICovXG4mIzQzO1x0aWYgKGNvdW50IFx1MDAzZSBNQVhfQklORElOR19MRU5HVEgpXG4mIzQzO1x0XHRyZXR1cm4gLUUyQklHO1xuJiM0MztcbiYjNDM7XHRidWYgPSBtZW1kdXBfdXNlcl9udWwoYnVmZmVyLCBjb3VudCk7XG4mIzQzO1x0aWYgKElTX0VSUihidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbiYjNDM7XG4mIzQzO1x0LyogJiMzOTsmIzQzO1x1MDAzY25hbWVcdTAwM2UgXHUwMDNjcGF0aFx1MDAzZSYjMzk7IGJpbmRzIGFuIGludGVycHJldGVyLCBldmVyeXRoaW5nIGVsc2UgdG9nZ2xlcy4gKi9cbiYjNDM7XHRpZiAoYnVmWzBdID09ICYjMzk7JiM0MzsmIzM5OylcbiYjNDM7XHRcdHJldHVybiBibV9lbnRyeV9hZGRfaW50ZXJwKGUsIGZpbGUsIGJ1ZiwgY291bnQpO1xuJiM0MztcbiYjNDM7XHRyZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZiwgY291bnQpO1xuIFxuIFx0c3dpdGNoIChyZXMpIHtcbiBcdGNhc2UgQk1fQ01EX0RJU0FCTEU6XG4gXHRcdGNsZWFyX2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncyk7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBCTV9DTURfRU5BQkxFOlxuJiM0MztcdGNhc2UgQk1fQ01EX0VOQUJMRToge1xuJiM0MztcdFx0c3RydWN0IGlub2RlICpyb290ID0gYm1fcm9vdF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgYSAmIzM5O0QmIzM5OyBlbnRyeSBpbnRvIHRoZSBzZWFyY2hcbiYjNDM7XHRcdCAqIGxpc3QsIHdob2xlLiBUaGUgbG9jayBrZWVwcyB0aGF0IG9yZGVyZWQgYWdhaW5zdCBhIHNlY29uZFxuJiM0MztcdFx0ICogZW5hYmxlLCBhZ2FpbnN0IHJlbW92YWwgLSBhIHJlbW92ZWQgZW50cnkgaGFzIG5vdGhpbmcgbGVmdFxuJiM0MztcdFx0ICogdG8gcHVibGlzaCAtIGFuZCBhZ2FpbnN0IGJpbmRpbmc6IHdoYXQgY2FuIGJlIG1hdGNoZWQgY2FuXG4mIzQzO1x0XHQgKiBubyBsb25nZXIgYmUgY29uZmlndXJlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW5vZGVfbG9jayhyb290KTtcbiBcdFx0c2V0X2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2ZS1cdTAwM2Vub2RlKSBcdTAwMjZcdTAwMjYgIWRfdW5oYXNoZWQoZS1cdTAwM2VkZW50cnkpKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbiYjNDM7XHRcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmUtXHUwMDNlbm9kZSwgXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzKTtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xuIFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRjYXNlIEJNX0NNRF9SRU1PVkU6XG4gXHRcdGJtX3JlbW92ZV9lbnRyeShlLCBpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdFx0YnJlYWs7XG5AQCAtMTEwNiwxNiAmIzQzOzE0MzEsMTggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbi1cdHJlZmNvdW50X3NldChcdTAwMjZlLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGUtXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xuIFx0aW5vZGUtXHUwMDNlaV9wcml2YXRlID0gZTtcbiBcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2Ym1fZW50cnlfb3BlcmF0aW9ucztcbiBcbiBcdGRfbWFrZV9wZXJzaXN0ZW50KGRlbnRyeSwgaW5vZGUpO1xuLVx0bWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbi1cdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZlLVx1MDAzZW5vZGUsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcyk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG4mIzQzO1x0LyogQSAmIzM5O0QmIzM5OyBlbnRyeSBzdGF5cyBvdXQgb2YgdGhlIHNlYXJjaCBsaXN0IHVudGlsIGl0cyBmaXJzdCBlbmFibGUuICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0bWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpO1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbiYjNDM7XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZlLVx1MDAzZW5vZGUsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcyk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG4mIzQzO1x0fVxuIFx0c2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTIzLDkgJiM0MzsxNDUwLDggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4tXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplIF9fZnJlZShwdXRfYmluZm10X2hhbmRsZXIpID0gTlVMTDtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgZmlsZSAqZiA9IE5VTEw7XG4gXHRpbnQgZXJyO1xuIFxuIFx0ZSA9IGNyZWF0ZV9lbnRyeShidWZmZXIsIGNvdW50KTtcbkBAIC0xMTQyLDMzICYjNDM7MTQ2OCwyMCBAQCBzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdH1cbiBcbiBcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbi1cdFx0Lypcbi1cdFx0ICogTm93IHRoYXQgd2Ugc3VwcG9ydCB1bnByaXZpbGVnZWQgYmluZm10X21pc2MgbW91bnRzIG1ha2Vcbi1cdFx0ICogc3VyZSB3ZSB1c2UgdGhlIGNyZWRlbnRpYWxzIHRoYXQgdGhlIHJlZ2lzdGVyIEBmaWxlIHdhc1xuLVx0XHQgKiBvcGVuZWQgd2l0aCB0byBhbHNvIG9wZW4gdGhlIGludGVycHJldGVyLiBCZWZvcmUgdGhhdCB0aGlzXG4tXHRcdCAqIGRpZG4mIzM5O3QgbWF0dGVyIG11Y2ggYXMgb25seSBhIHByaXZpbGVnZWQgcHJvY2VzcyBjb3VsZCBvcGVuXG4tXHRcdCAqIHRoZSByZWdpc3RlciBmaWxlLlxuLVx0XHQgKi9cbi1cdFx0c2NvcGVkX3dpdGhfY3JlZHMoZmlsZS1cdTAwM2VmX2NyZWQpXG4tXHRcdFx0ZiA9IG9wZW5fZXhlYyhlLVx1MDAzZWludGVycHJldGVyKTtcbi1cdFx0aWYgKElTX0VSUihmKSkge1xuLVx0XHRcdHByX25vdGljZShcJiMzNDtyZWdpc3RlcjogZmFpbGVkIHRvIGluc3RhbGwgaW50ZXJwcmV0ZXIgZmlsZSAlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdCBlLVx1MDAzZWludGVycHJldGVyKTtcbiYjNDM7XHRcdHN0cnVjdCBmaWxlICpmID0gb3Blbl9pbnRlcnBfZmlsZShmaWxlLVx1MDAzZWZfY3JlZCwgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKElTX0VSUihmKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihmKTtcbiYjNDM7XHRcdGVyciA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBcJiMzNDtcJiMzNDssIGUtXHUwMDNlaW50ZXJwcmV0ZXIsIGYpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRjbG9zZV9pbnRlcnBfZmlsZShmKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0XHRlLVx1MDAzZWludGVycF9maWxlID0gZjtcbiBcdH1cbiBcbiBcdGVyciA9IGFkZF9lbnRyeShlLCBzYik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGlmIChmKSB7XG4tXHRcdFx0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xuLVx0XHRcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4tXHRcdH1cbi1cdFx0aWYgKGUtXHUwMDNlYnBmX29wcylcbi1cdFx0XHRiaW5mbXRfbWlzY19wdXRfb3BzKGUtXHUwMDNlYnBmX29wcyk7XG4mIzQzO1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdC8qIFRoZSBlbnRyeSBpcyBvd25lZCBieSBpdHMgaW5vZGUgbm93LiAqL1xuIFx0cmV0YWluX2FuZF9udWxsX3B0cihlKTtcbkBAIC0xMTk3LDcgJiM0MzsxNTEwLDcgQEAgc3RhdGljIHNzaXplX3QgYm1fc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2M7XG4tXHRpbnQgcmVzID0gcGFyc2VfY29tbWFuZChidWZmZXIsIGNvdW50KTtcbiYjNDM7XHRpbnQgcmVzID0gcmVhZF9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xuIFxuIFx0bWlzYyA9IGlfYmluZm10X21pc2MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXHRzd2l0Y2ggKHJlcykge1xuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbmluZGV4IDkyMDAzZWE2NDBkM2YuLmIyNDZkODg2NDM3YjggMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzY19icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmluZm10X21pc2NfYnBmLmNcbkBAIC03LDYgJiM0Mzs3LDE1IEBAXG4gICogbmFtZXNwYWNlIGl0IHdhcyByZWdpc3RlcmVkIGluLiBBIGJpbmZtdF9taXNjICYjMzk7QiYjMzk7IGVudHJ5IGFjdGl2YXRlcyBpdDpcbiAgKlxuICAqICAgZWNobyAmIzM5OzplbnRyeTpCOjo6Olx1MDAzY2hhbmRsZXItbmFtZVx1MDAzZTomIzM5OyBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvcmVnaXN0ZXJcbiYjNDM7ICpcbiYjNDM7ICogVGhlIGVudHJ5IGNhbiBiaW5kIHRoZSBpbnRlcnByZXRlcnMgdGhlIGhhbmRsZXIgbWF5IHJ1biBpdHMgYmluYXJpZXNcbiYjNDM7ICogd2l0aCwgZWFjaCBvcGVuZWQgYnkgdGhlIHdyaXRlIHRoYXQgYmluZHMgaXQgYW5kIHNlbGVjdGVkIGJ5IG5hbWUgcGVyXG4mIzQzOyAqIGV4ZWMuIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aCAmIzM5O0QmIzM5OyBpcyBub3QgbWF0Y2hhYmxlIHlldCwgd2hpY2ggaXMgd2hhdFxuJiM0MzsgKiBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiB0aGVtOlxuJiM0MzsgKlxuJiM0MzsgKiAgIGVjaG8gJiMzOTs6ZW50cnk6Qjo6OjpcdTAwM2NoYW5kbGVyLW5hbWVcdTAwM2U6RCYjMzk7IFx1MDAzZSBcdTAwM2NiaW5mbXRfbWlzY1x1MDAzZS9yZWdpc3RlclxuJiM0MzsgKiAgIGVjaG8gJiMzOTsmIzQzO1x1MDAzY25hbWVcdTAwM2UgXHUwMDNjcGF0aFx1MDAzZSYjMzk7IFx1MDAzZSBcdTAwM2NiaW5mbXRfbWlzY1x1MDAzZS9lbnRyeVxuJiM0MzsgKiAgIGVjaG8gMSBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvZW50cnlcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXHUwMDNlXG5AQCAtMTYsNiAmIzQzOzI1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtOTEsNiAmIzQzOzEwMiwyMCBAQCBib29sIGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHQgICAgICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3Rfb3BzID09IFx1MDAyNmJwZl9iaW5mbXRfbWlzY19vcHM7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZXBsYWNlIHRoZSBzdGFnZWQgaW50ZXJwcmV0ZXIgc2VsZWN0aW9uOiBuYW1pbmcgYSBwYXRoIGRyb3BzIGEgYm91bmRcbiYjNDM7ICogZmlsZSwgc2VsZWN0aW5nIGEgYm91bmQgaW50ZXJwcmV0ZXIgY2FycmllcyBpdHMgZmlsZSBhbG9uZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY2hhciAqcGF0aCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZilcbiYjNDM7e1xuJiM0MztcdGlmIChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSlcbiYjNDM7XHRcdGZwdXQoYnBybS1cdTAwM2VicGZfaW50ZXJwX2ZpbGUpO1xuJiM0MztcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycCk7XG4mIzQzO1x0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gcGF0aDtcbiYjNDM7XHRicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSA9IGY7XG4mIzQzO31cbiYjNDM7XG4gX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuIFxuIC8qKlxuQEAgLTEwMyw3ICYjNDM7MTI4LDggQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuICAqIGJlZm9yZSByZXR1cm5pbmcgemVybzsgdGhlIHZlcmlmaWVyIHJlamVjdHMgdGhlIGNhbGwgZnJvbSBhbnkgb3RoZXJcbiAgKiBwcm9ncmFtLCBpbmNsdWRpbmcgdGhlIGhhbmRsZXImIzM5O3Mgb3duIG1hdGNoIHByb2dyYW0uIFRoZSBwYXRoIGlzIG9wZW5lZFxuICAqIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjIGFmdGVyIHRoZSBwcm9ncmFtXG4tICogcmV0dXJucy5cbiYjNDM7ICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhblxuJiM0MzsgKiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmQgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcbiAgKi9cbkBAIC0xMjcsOCAmIzQzOzE1Myw1MCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gXHRpZiAoIWludGVycClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuLVx0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gaW50ZXJwO1xuJiM0MztcdGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oYnBybSwgaW50ZXJwLCBOVUxMKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCAtIHJ1biB0aGlzIGV4ZWMgdW5kZXIgYW4gaW50ZXJwcmV0ZXIgdGhlIGVudHJ5IGJvdW5kXG4mIzQzOyAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxuJiM0MzsgKiBAbmFtZTogbmFtZSB0aGUgaW50ZXJwcmV0ZXIgd2FzIHJlZ2lzdGVyZWQgdW5kZXJcbiYjNDM7ICogQG5hbWVfX3N6OiBzaXplIG9mIHRoZSBAbmFtZSBidWZmZXIsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMXG4mIzQzOyAqXG4mIzQzOyAqIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb2FkIHByb2dyYW0gb2YgYSBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGhhbmRsZXJcbiYjNDM7ICogaW5zdGVhZCBvZiBicGZfYmlucHJtX3NldF9pbnRlcnAoKS4gSXQgc2VsZWN0cyBvbmUgb2YgdGhlIGludGVycHJldGVyc1xuJiM0MzsgKiB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLCBlYWNoIG9mIHdoaWNoIHdhcyBvcGVuZWQgb25jZSB3aGVuXG4mIzQzOyAqIHRoZSBlbnRyeSB3YXMgcmVnaXN0ZXJlZC4gTm90aGluZyBpcyByZXNvbHZlZCBhdCBleGVjIHRpbWUsIHNvIG5vXG4mIzQzOyAqIGZpbGVzeXN0ZW0gdmlldyBjYW4gcmVkaXJlY3QgdGhlIGludGVycHJldGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgaW50ZXJwcmV0ZXIgcnVucyB1bmRlciB0aGUgcGF0aCB0aGUgZW50cnkgcmVnaXN0ZXJlZCBpdCB1bmRlci5cbiYjNDM7ICogQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgbWF0Y2hlZCBlbnRyeSBib3VuZCBubyBpbnRlcnByZXRlclxuJiM0MzsgKiBvZiB0aGF0IG5hbWUsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbiYjNDM7XHRzaXplX3QgbGVuO1xuJiM0MztcdGNoYXIgKnBhdGg7XG4mIzQzO1xuJiM0MztcdGlmICghbmFtZV9fc3opXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRsZW4gPSBzdHJubGVuKG5hbWUsIG5hbWVfX3N6KTtcbiYjNDM7XHRpZiAobGVuID09IG5hbWVfX3N6IHx8ICFsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aW50ZXJwID0gYmluZm10X21pc2NfZmluZF9pbnRlcnAoYnBybS1cdTAwM2VicGZfaW50ZXJwcywgbmFtZSk7XG4mIzQzO1x0aWYgKCFpbnRlcnApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0cGF0aCA9IGtzdHJkdXAoaW50ZXJwLVx1MDAzZXBhdGgsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGF0aClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRibV9icGZfc3RhZ2Vfc2VsZWN0aW9uKGJwcm0sIHBhdGgsIGdldF9maWxlKGludGVycC1cdTAwM2VmaWxlKSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjExLDYgJiM0MzsyNzksNyBAQCBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIEJURl9LRlVOQ1NfU1RBUlQoYm1fYnBmX2tmdW5jX2lkcylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZywgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9mbGFncywgS0ZfU0xFRVBBQkxFKVxuIEJURl9LRlVOQ1NfRU5EKGJtX2JwZl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCA4NTY3MzFmNzhkMDU0Li5hMTRmMjhiMTU2MDdhIDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmNcbkBAIC0xNDc3LDYgJiM0MzsxNDc3LDggQEAgc3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRpZiAoYnBybS1cdTAwM2VpbnRlcnAgIT0gYnBybS1cdTAwM2VmaWxlbmFtZSlcbiBcdFx0a2ZyZWUoYnBybS1cdTAwM2VpbnRlcnApO1xuIFx0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbiYjNDM7XHRpZiAoYnBybS1cdTAwM2VicGZfaW50ZXJwX2ZpbGUpXG4mIzQzO1x0XHRmcHV0KGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKTtcbiBcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcpO1xuIFx0a2ZyZWUoYnBybS1cdTAwM2VmZHBhdGgpO1xuIFx0a2ZyZWUoYnBybSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5pbmRleCA0YWJkZmQzNmIzZmE4Li4wNzJlNGIzZGQ3OGQyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbkBAIC01LDExICYjNDM7NSw0MSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgYnBmX3Byb2c7XG4mIzQzO3N0cnVjdCBmaWxlO1xuIHN0cnVjdCBsaW51eF9iaW5wcm07XG4gc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xuIFxuICNkZWZpbmUgQklORk1UX01JU0NfT1BTX05BTUVfTUFYIDE2XG4gXG4mIzQzOy8qIExvbmdlc3QgbmFtZSBhICYjMzk7QiYjMzk7IGVudHJ5IGNhbiBiaW5kIGFuIGludGVycHJldGVyIHVuZGVyLiAqL1xuJiM0MzsjZGVmaW5lIEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWCAzMlxuJiM0MztcbiYjNDM7LyogTW9zdCBpbnRlcnByZXRlcnMgb25lIGVudHJ5IGNhbiBiaW5kLiAqL1xuJiM0MzsjZGVmaW5lIEJJTkZNVF9NSVNDX0lOVEVSUF9NQVggMTAwXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAtIGFuIGludGVycHJldGVyIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbiYjNDM7ICogQGxpc3Q6IGxpbmsgaW4gdGhlIGVudHJ5JiMzOTtzIGxpc3QsIGluIHJlZ2lzdHJhdGlvbiBvcmRlclxuJiM0MzsgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluXG4mIzQzOyAqIEBwYXRoOiB0aGUgcGF0aCBpdCB3YXMgcmVnaXN0ZXJlZCB1bmRlciwgdXNlZCBhcyB0aGUgbmFtZSB0aGUgaW50ZXJwcmV0ZXJcbiYjNDM7ICogICAgICAgIHJ1bnMgdW5kZXI7IHN0b3JlZCBhZnRlciBAbmFtZSBpbiB0aGUgc2FtZSBhbGxvY2F0aW9uXG4mIzQzOyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWRcbiYjNDM7ICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljICYjMzk7RiYjMzk7IGVudHJ5XG4mIzQzOyAqXG4mIzQzOyAqIE93bmVkIGJ5IHRoZSBlbnRyeSBhbmQgbGl2aW5nIGV4YWN0bHkgYXMgbG9uZyBhcyBpdCBkb2VzLiBUaGUgbGlzdCBoZWFkXG4mIzQzOyAqIGlzIGhhbmRlZCB0byB0aGUgaGFuZGxlciYjMzk7cyBsb2FkIHByb2dyYW0gZm9yIHRoZSBkdXJhdGlvbiBvZiBvbmUgZXhlYyxcbiYjNDM7ICogd2hpY2ggcGlja3Mgb25lIHdpdGggYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxlO1xuJiM0MztcdGNvbnN0IGNoYXJcdFx0KnBhdGg7XG4mIzQzO1x0Y2hhclx0XHRcdG5hbWVbXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxuJiM0MztiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKTtcbiYjNDM7XG4gLyoqXG4gICogZW51bSBicGZfYmlucHJtX2ZsYWdzIC0gcGVyLWV4ZWMgaW52b2NhdGlvbiBmbGFncyBhIGxvYWQgcHJvZ3JhbSBjYW4gcmVxdWVzdFxuICAqIEBCUEZfQklOUFJNX1BSRVNFUlZFX0FSR1YwOiBrZWVwIHRoZSBjYWxsZXImIzM5O3MgYXJndlswXSAobGlrZSB0aGUgJiMzOTtQJiMzOTsgZmxhZylcbkBAIC00MiwxMCAmIzQzOzcyLDExIEBAIGVudW0gYnBmX2JpbnBybV9mbGFncyB7XG4gICogICAgICAgICBzbyBpdCBjYW4gcmVhZCB0aGUgYmluYXJ5IHRvIGRlY2lkZSwgYnV0IHRoZSB2ZXJpZmllciByZWplY3RzXG4gICogICAgICAgICB0aGUgaW50ZXJwcmV0ZXIgc2VsZWN0aW9uIGtmdW5jcyBpbiBpdFxuICAqIEBsb2FkOiAgc2VsZWN0IGFuIGludGVycHJldGVyIGZvciB0aGUgbWF0Y2hlZCBAYnBybSB2aWFcbi0gKiAgICAgICAgIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpIGFuZCByZXR1cm4gemVybzsgYSBtYXRjaCBpcyBjb21taXR0ZWQsIHNvXG4tICogICAgICAgICBhIGZhaWx1cmUgZmFpbHMgdGhlIGV4ZWMgaW5zdGVhZCBvZiBmYWxsaW5nIHRocm91Z2ggdG8gbGF0ZXJcbi0gKiAgICAgICAgIGVudHJpZXM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0IG1vdmVzIG9uIHRvIHRoZVxuLSAqICAgICAgICAgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzXG4mIzQzOyAqICAgICAgICAgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCksIG9yIG9uZSB0aGUgZW50cnkgYm91bmQgdmlhXG4mIzQzOyAqICAgICAgICAgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKCksIGFuZCByZXR1cm4gemVybzsgYSBtYXRjaCBpc1xuJiM0MzsgKiAgICAgICAgIGNvbW1pdHRlZCwgc28gYSBmYWlsdXJlIGZhaWxzIHRoZSBleGVjIGluc3RlYWQgb2YgZmFsbGluZ1xuJiM0MzsgKiAgICAgICAgIHRocm91Z2ggdG8gbGF0ZXIgZW50cmllczsgLUVOT0VYRUMgZG9lcyBub3QgZmFpbCB0aGUgZXhlYyBidXRcbiYjNDM7ICogICAgICAgICBtb3ZlcyBvbiB0byB0aGUgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzXG4gICogQG5hbWU6IG5hbWUgdGhhdCAmIzM5O0ImIzM5OyBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgaGFuZGxlciBieVxuICAqL1xuIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbmluZGV4IGEyZGFlY2JiMDFkNmEuLmY2ODZhMzdmN2EwYTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbkBAIC0xNCw3ICYjNDM7MTQsMTAgQEAgc3RydWN0IGNvcmVkdW1wX3BhcmFtcztcbiBcbiAvKiBJbnRlcnByZXRlciBzZWxlY3Rpb24gc3RhZ2VkIGJ5IGEgYnBmIGJpbmZtdF9taXNjIGhhbmRsZXIuICovXG4gc3RydWN0IGJpbmZtdF9taXNjX2JwZiB7XG4mIzQzO1x0LyogaW50ZXJwcmV0ZXJzIHRoZSBtYXRjaGVkIGVudHJ5IGJvdW5kLCBzZWxlY3RhYmxlIGJ5IG5hbWUgKi9cbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpicGZfaW50ZXJwcztcbiBcdGNvbnN0IGNoYXIgKmJwZl9pbnRlcnA7XHRcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqYnBmX2ludGVycF9maWxlO1x0LyogdGhlIGJvdW5kIGludGVycHJldGVyIGl0IHNlbGVjdGVkICovXG4gXHRjb25zdCBjaGFyICpicGZfaW50ZXJwX2FyZztcdC8qIGludGVycHJldGVyIGFyZ3VtZW50IGZyb20gYSBicGYgaGFuZGxlciAqL1xuIFx0dTY0IGJwZl9mbGFncztcdFx0XHQvKiBlbnVtIGJwZl9iaW5wcm1fZmxhZ3MgZnJvbSBhIGJwZiBoYW5kbGVyICovXG4gfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuaW5kZXggMzkwZmUxMWE3YmVkZi4uNDEwYzkzNjA2YTBjMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbkBAIC0yNSw2ICYjNDM7MjUsMTAgQEAgVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGNoZWNrLWV4ZWNcbiAjIG9yIGFuICYjMzk7RiYjMzk7IGVudHJ5IGNhbiBwaW4gdGhlIGluc3RhbmNlIHRoYXQgb3ducyBpdC4gVW5wcml2aWxlZ2VkLCBubyBicGYuXG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX3NlbGZwaW5cbiBcbiYjNDM7IyAmIzM5O0QmIzM5OyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzXG4mIzQzOyMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuIFN0YXRpYyBtYWdpYyBlbnRyeSwgbm8gYnBmIHRvb2xjaGFpbi5cbiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX2Rpc2FibGVkXG4mIzQzO1xuICMgU3RhdGljICgmIzM5O1QmIzM5OyBmbGFnKSB0cmFuc3BhcmVudCBiaW5mbXRfbWlzYyB0ZXN0OyB0aGUgYXNzZXJ0aW5nIGludGVycHJldGVyXG4gIyBpcyBzaGFyZWQgd2l0aCB0aGUgYnBmIGhhcm5lc3MmIzM5O3MgdHJhbnNwYXJlbnQgY2FzZS4gTm8gYnBmIHRvb2xjaGFpbiBuZWVkZWQuXG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX3RyYW5zcGFyZW50XG5AQCAtNTIsOCAmIzQzOzU2LDggQEAgSEFWRV9CUEZfVE9PTENIQUlOID89ICQoc2hlbGwgY29tbWFuZCAtdiAkKENMQU5HKSBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XHUwMDI2IFxcXG4gaWZlcSAoJChIQVZFX0JQRl9UT09MQ0hBSU4pLHkpXG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX2JwZlxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBicGZfaW50ZXJwLmJwZi5vIG5peF9vcmlnaW4uYnBmLm8gdHJhbnNwYXJlbnQuYnBmLm9cbi1URVNUX0dFTl9GSUxFUyAmIzQzOz0gbG9hZGVyLmJwZi5vXG4tVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGJpbmZtdF9icGZfaW50ZXJwIGJpbmZtdF9icGZfYXBwXG4mIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBsb2FkZXIuYnBmLm8gaW50ZXJwX2JpbmQuYnBmLm9cbiYjNDM7VEVTVF9HRU5fRklMRVMgJiM0Mzs9IGJpbmZtdF9icGZfaW50ZXJwIGJpbmZtdF9icGZfYXBwIGJpbmZtdF9iaW5kX2ludGVycFxuIGVsc2VcbiAkKGluZm8gZXhlYyBzZWxmdGVzdHM6IHNraXBwaW5nIGJpbmZtdF9taXNjX2JwZiwgbmVlZHMgY2xhbmcsIGJwZnRvb2wsIHZtbGludXggQlRGIGFuZCBsaWJicGYpXG4gZW5kaWZcbkBAIC0xMjMsNiAmIzQzOzEyNyw5IEBAICQoT1VUUFVUKS9iaW5mbXRfbWlzY19icGY6IGJpbmZtdF9taXNjX2JwZi5jIGJpbmZtdF9taXNjX2NvbW1vbi5oXG4gJChPVVRQVVQpL2JpbmZtdF9icGZfaW50ZXJwOiBiaW5mbXRfYnBmX2ludGVycC5jXG4gXHQkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkXHUwMDNjIC1vICRAXG4gXG4mIzQzOyQoT1VUUFVUKS9iaW5mbXRfYmluZF9pbnRlcnA6IGJpbmZtdF9iaW5kX2ludGVycC5jXG4mIzQzO1x0JChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJFx1MDAzYyAtbyAkQFxuJiM0MztcbiAkKE9VVFBVVCkvYmluZm10X2xvYWRlcl9wYXlsb2FkOiBiaW5mbXRfbG9hZGVyX3BheWxvYWQuYyBiaW5mbXRfbWlzY19jb21tb24uaFxuIFx0JChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLWZQSUUgLXBpZSAkXHUwMDNjIC1vICRAXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfYmluZF9pbnRlcnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X2JpbmRfaW50ZXJwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wNmQ2NTA2Mjg1NmI3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9iaW5kX2ludGVycC5jXG5AQCAtMCwwICYjNDM7MSwxNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBUZXN0IGludGVycHJldGVyIGZvciB0aGUgYm91bmQtaW50ZXJwcmV0ZXIgY2FzZSBvZiB0aGUgYmluZm10X21pc2NfYnBmXG4mIzQzOyAqIHNlbGZ0ZXN0LiBUd28gY29waWVzIGFyZSBpbnN0YWxsZWQgYXQgZGlmZmVyZW50IHBhdGhzIGFuZCBib3VuZCB0byBvbmVcbiYjNDM7ICogZW50cnkgdW5kZXIgZGlmZmVyZW50IG5hbWVzOyBwcmludGluZyBhcmd2WzBdIC0gdGhlIHBhdGggdGhlIGtlcm5lbCByYW5cbiYjNDM7ICogdGhpcyBjb3B5IHVuZGVyIC0gdGVsbHMgdGhlIGhhcm5lc3Mgd2hpY2ggb2YgdGhlbSB0aGUgbG9hZCBwcm9ncmFtIHBpY2tlZC5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdHByaW50ZihcJiMzNDtCSU5EX1JBTiAlc1xcblwmIzM0OywgYXJnYyBcdTAwM2UgMCA/IGFyZ3ZbMF0gOiBcJiMzNDtcJiMzNDspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbmluZGV4IDA2OTc2OGE2NmJhMDcuLjJjN2I2MzA3NWYxZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jXG5AQCAtOSw3ICYjNDM7OSw3IEBAXG4gICpcbiAgKiAgICAgZWNobyAmIzM5OzpuYW1lOkI6Ojo6XHUwMDNjaGFuZGxlclx1MDAzZTomIzM5OyBcdTAwM2UgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyXG4gICpcbi0gKiBUaHJlZSBzZWxmLWNvbnRhaW5lZCBjYXNlcyBhcmUgZXhlcmNpc2VkOlxuJiM0MzsgKiBGaXZlIHNlbGYtY29udGFpbmVkIGNhc2VzIGFyZSBleGVyY2lzZWQ6XG4gICpcbiAgKiAgIDEuIGJwZl9pbnRlcnA6IHRoZSBtYXRjaCBwcm9ncmFtIG1hdGNoZXMgYSBzeW50aGV0aWMgYWFyY2g2NCBFTEYgaGVhZGVyXG4gICogICAgICBmcm9tIHRoZSBwcmVmZXRjaGVkIGJwcm0tXHUwMDNlYnVmIGFuZCB0aGUgbG9hZCBwcm9ncmFtIHJvdXRlcyBpdCB0byBhXG5AQCAtMjYsNiAmIzQzOzI2LDExIEBAXG4gICogICAgICAoYmluZm10X2xvYWRlcl9wYXlsb2FkKSBydW5zIGFzIHRoZSBtYWluIGltYWdlIHdpdGggdGhlIHNlbGVjdGVkXG4gICogICAgICBpbnRlcnByZXRlciBzdWJzdGl0dXRlZCBmb3IgaXRzIFBUX0lOVEVSUCBhbmQgYXNzZXJ0cyB0aGUgbmF0aXZlXG4gICogICAgICBpZGVudGl0eSBmcm9tIGluc2lkZS5cbiYjNDM7ICogICA1LiBpbnRlcnBfYmluZDogYW4gZW50cnkgcmVnaXN0ZXJlZCBkaXNhYmxlZCB3aXRoICYjMzk7RCYjMzk7IGlzIGdpdmVuIGl0c1xuJiM0MzsgKiAgICAgIGludGVycHJldGVycyBvbmUgd3JpdGUgYXQgYSB0aW1lLCBhbmQgdGhlIGxvYWQgcHJvZ3JhbSBwaWNrcyBvbmUgYnlcbiYjNDM7ICogICAgICBuYW1lIHBlciBleGVjLiBSZXBsYWNpbmcgd2hhdCB0aGUgcGF0aCBob2xkcyBhZnRlcndhcmRzIGNoYW5nZXNcbiYjNDM7ICogICAgICBub3RoaW5nLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgYmluZGluZyBhIGZpbGUgcmF0aGVyIHRoYW4gcmVzb2x2aW5nXG4mIzQzOyAqICAgICAgYSBuYW1lIGF0IGV4ZWMgdGltZS4gRW5hYmxpbmcgdGhlIGVudHJ5IHNlYWxzIGl0LlxuICAqXG4gICogVGhlIGZpcnN0IHR3byByb3V0ZSB0byBhIHRlc3QgaW50ZXJwcmV0ZXIgdGhhdCBwcmludHMgQlBGX0lOVEVSUF9SQU4sXG4gICogcHJvdmluZyB0aGUgcHJvZ3JhbSYjMzk7cyBjaG9zZW4gaW50ZXJwcmV0ZXIgYWN0dWFsbHkgcmFuLlxuQEAgLTU0LDYgJiM0Mzs1OSwxMiBAQFxuICNkZWZpbmUgVFJBTlNfRVhQRUNUXHRcJiMzNDtUUkFOU1BBUkVOVF9PS1wmIzM0O1xuICNkZWZpbmUgTE9BREVSX0lOVEVSUFx0XCYjMzQ7L3RtcC9iaW5mbXRfbG9hZGVyX2ludGVycFwmIzM0O1xuICNkZWZpbmUgTE9BREVSX1BBVEhcdFwmIzM0Oy90bXAvYmluZm10X2JwZl9sb2FkZXIubGRydGVzdFwmIzM0O1xuJiM0MzsjZGVmaW5lIEJJTkRfRklSU1RcdFwmIzM0Oy90bXAvYmluZm10X2JpbmRfZmlyc3RcJiMzNDtcbiYjNDM7I2RlZmluZSBCSU5EX1NFQ09ORFx0XCYjMzQ7L3RtcC9iaW5mbXRfYmluZF9zZWNvbmRcJiMzNDtcbiYjNDM7I2RlZmluZSBCSU5EX0FSTV9QQVRIXHRcJiMzNDsvdG1wL2JpbmZtdF9iaW5kX2FybVwmIzM0O1xuJiM0MzsjZGVmaW5lIEJJTkRfUklTQ1ZfUEFUSFx0XCYjMzQ7L3RtcC9iaW5mbXRfYmluZF9yaXNjdlwmIzM0O1xuJiM0MzsjZGVmaW5lIEJJTkRfRVhQRUNUXHRcJiMzNDtCSU5EX1JBTiBcJiMzNDtcbiYjNDM7I2RlZmluZSBCSU5EX01BWFx0MTAwXG4gXG4gLyogQSBtaW5pbWFsIDY0LWJpdCBsaXR0bGUtZW5kaWFuIEVMRiBoZWFkZXIsIHBhZGRlZCB0byB0aGUgcmVhZCBzaXplLiAqL1xuIHN0YXRpYyBpbnQgY3JlYXRlX2Zha2VfZWxmKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0IG1hY2hpbmUpXG5AQCAtODIsMTEgJiM0Mzs5MywxNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9mYWtlX2VsZihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBzaG9ydCBtYWNoaW5lKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmVnaXN0ZXJfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaGFuZGxlcilcbiYjNDM7LypcbiYjNDM7ICogUmVnaXN0ZXIgYSAmIzM5O0ImIzM5OyBlbnRyeSBmb3IgQGhhbmRsZXIuIFdpdGggQGZsYWdzIFwmIzM0O0RcJiMzNDsgdGhlIGVudHJ5IGlzIGNyZWF0ZWRcbiYjNDM7ICogZGlzYWJsZWQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpoYW5kbGVyLFxuJiM0MztcdFx0XHQgIGNvbnN0IGNoYXIgKmZsYWdzKVxuIHtcbiBcdGNoYXIgcnVsZVtQQVRIX01BWF07XG4gXG4tXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFwmIzM0OzolczpCOjo6OiVzOlwmIzM0OywgbmFtZSwgaGFuZGxlcik7XG4mIzQzO1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcJiMzNDs6JXM6Qjo6Ojolczolc1wmIzM0OywgbmFtZSwgaGFuZGxlcixcbiYjNDM7XHRcdCBmbGFncyA/IGZsYWdzIDogXCYjMzQ7XCYjMzQ7KTtcbiBcdHJldHVybiB3cml0ZV9yZWcocnVsZSk7XG4gfVxuIFxuQEAgLTEwNiw2ICYjNDM7MTIzLDMwIEBAIHN0YXRpYyBpbnQgY2hlY2tfb3V0cHV0KGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqZXhwZWN0ZWQpXG4gXHRyZXR1cm4gc3RybmNtcChidWYsIGV4cGVjdGVkLCBzdHJsZW4oZXhwZWN0ZWQpKSA/IC0xIDogMDtcbiB9XG4gXG4mIzQzOy8qIERvZXMgdGhlIGtlcm5lbCBCVEYga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKT8gKi9cbiYjNDM7c3RhdGljIGJvb2wgaGF2ZV9iaW5mbXRfbWlzY19vcHModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuJiM0MztcdGJvb2wgaGF2ZTtcbiYjNDM7XG4mIzQzO1x0aGF2ZSA9IGJ0ZiBcdTAwMjZcdTAwMjYgYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwmIzM0O2JpbmZtdF9taXNjX29wc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgQlRGX0tJTkRfU1RSVUNUKSBcdTAwM2U9IDA7XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO1x0cmV0dXJuIGhhdmU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSByZWFzb24gYnBmIGhhbmRsZXIgY2FzZXMgY2Fubm90IHJ1biBoZXJlLCBOVUxMIGlmIHRoZXkgY2FuLiAqL1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChnZXR1aWQoKSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0OztcbiYjNDM7XHRpZiAoIWhhdmVfYmluZm10X21pc2Nfb3BzKCkpXG4mIzQzO1x0XHRyZXR1cm4gXCYjMzQ7bm8gc3RydWN0IGJpbmZtdF9taXNjX29wcyBpbiB0aGUga2VybmVsIEJURiAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcJiMzNDs7XG4mIzQzO1x0aWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSlcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtubyBiaW5mbXRfbWlzY1wmIzM0OztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiAvKiBBbiBhdHRhY2hlZCBoYW5kbGVyIHdpdGggaXRzICYjMzk7QiYjMzk7IGVudHJ5IGFjdGl2YXRlZC4gKi9cbiBzdHJ1Y3QgYnBmX2Nhc2Uge1xuIFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbkBAIC0xMTUsMTAgJiM0MzsxNTYsMTIgQEAgc3RydWN0IGJwZl9jYXNlIHtcbiBcbiAvKlxuICAqIExvYWQgQG9iamZpbGUsIGF0dGFjaCBpdHMgc3RydWN0X29wcyBtYXAgQGhhbmRsZXIgKHdoaWNoIHB1Ymxpc2hlcyB0aGVcbi0gKiBoYW5kbGVyKSBhbmQgYWN0aXZhdGUgYSAmIzM5O0ImIzM5OyBlbnRyeSBuYW1lZCBAZW50cnkgdGhhdCByZWZlcmVuY2VzIGl0LlxuJiM0MzsgKiBoYW5kbGVyKSBhbmQgcmVnaXN0ZXIgYSAmIzM5O0ImIzM5OyBlbnRyeSBuYW1lZCBAZW50cnkgdGhhdCByZWZlcmVuY2VzIGl0LCB3aXRoXG4mIzQzOyAqIEBmbGFncyBhcyB0aGUgZW50cnkmIzM5O3MgcmVnaXN0ZXItc3RyaW5nIGZsYWdzLlxuICAqL1xuLXN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuLVx0XHRcdCAgY29uc3QgY2hhciAqaGFuZGxlciwgY29uc3QgY2hhciAqZW50cnkpXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnRfZmxhZ3Moc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuJiM0MztcdFx0XHRcdGNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5LFxuJiM0MztcdFx0XHRcdGNvbnN0IGNoYXIgKmZsYWdzKVxuIHtcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXG5AQCAtMTQ4LDcgJiM0MzsxOTEsNyBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcbiBcdFx0Yy1cdTAwM2VsaW5rID0gTlVMTDtcbiBcdFx0Z290byBmYWlsO1xuIFx0fVxuLVx0aWYgKHJlZ2lzdGVyX2VudHJ5KGVudHJ5LCBoYW5kbGVyKSkge1xuJiM0MztcdGlmIChyZWdpc3Rlcl9lbnRyeShlbnRyeSwgaGFuZGxlciwgZmxhZ3MpKSB7XG4gXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtyZWdpc3RlciAmIzM5O0ImIzM5OyBlbnRyeSAmIzM5OyVzJiMzOTsgZmFpbGVkXFxuXCYjMzQ7LCBlbnRyeSk7XG4gXHRcdGdvdG8gZmFpbDtcbiBcdH1cbkBAIC0xNjIsNiAmIzQzOzIwNSwxMiBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuJiM0MztcdFx0XHQgIGNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJwZl9jYXNlX3N0YXJ0X2ZsYWdzKGMsIG9iamZpbGUsIGhhbmRsZXIsIGVudHJ5LCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBicGZfY2FzZV9zdG9wKHN0cnVjdCBicGZfY2FzZSAqYylcbiB7XG4gXHR1bnJlZ2lzdGVyKGMtXHUwMDNlZW50cnkpO1xuQEAgLTE5MCwyMyAmIzQzOzIzOSwxMCBAQCBGSVhUVVJFKGJwZl9oYW5kbGVyKSB7XG4gRklYVFVSRV9TRVRVUChicGZfaGFuZGxlcilcbiB7XG4gXHRjaGFyIHNyY1tQQVRIX01BWF07XG4tXHRzdHJ1Y3QgYnRmICpidGY7XG4tXG4tXHRpZiAoZ2V0dWlkKCkgIT0gMClcbi1cdFx0U0tJUChyZXR1cm4sIFwmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0Oyk7XG4tXG4tXHQvKiBUaGUga2VybmVsIG11c3Qga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKS4gKi9cbi1cdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuLVx0aWYgKCFidGYgfHwgYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwmIzM0O2JpbmZtdF9taXNjX29wc1wmIzM0Oyxcbi1cdFx0XHRcdFx0ICAgQlRGX0tJTkRfU1RSVUNUKSBcdTAwM2MgMCkge1xuLVx0XHRidGZfX2ZyZWUoYnRmKTtcbi1cdFx0U0tJUChyZXR1cm4sXG4tXHRcdCAgICAgXCYjMzQ7bm8gc3RydWN0IGJpbmZtdF9taXNjX29wcyBpbiB0aGUga2VybmVsIEJURiAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcJiMzNDspO1xuLVx0fVxuLVx0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO1x0Y29uc3QgY2hhciAqd2h5ID0gYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQoKTtcbiBcbi1cdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXG4tXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBiaW5mbXRfbWlzY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKHdoeSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDslc1wmIzM0Oywgd2h5KTtcbiBcbiBcdC8qIFNoYXJlZCB0ZXN0IGludGVycHJldGVyLiAqL1xuIFx0QVNTRVJUX0VRKGFydGlmYWN0X3BhdGgoc3JjLCBzaXplb2Yoc3JjKSwgXCYjMzQ7YmluZm10X2JwZl9pbnRlcnBcJiMzNDspLCAwKTtcbkBAIC0yNTgsNyAmIzQzOzI5NCw3IEBAIFRFU1RfRihicGZfaGFuZGxlciwgdHJhbnNwYXJlbnRfZGlzcGF0Y2gpXG4gXHRjaGFyIHNyY1tQQVRIX01BWF0sIGNtZFtQQVRIX01BWCAmIzQzOyAxNl07XG4gXG4gXHQvKiBQcm9iZSBmb3IgdHJhbnNwYXJlbnQtbW9kZSBzdXBwb3J0IHZpYSBpdHMgc3RhdGljIGNvdW50ZXJwYXJ0LiAqL1xuLVx0aWYgKGJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpXG4mIzQzO1x0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJiMzOTtUJiMzOTspKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIHdpdGhvdXQgdHJhbnNwYXJlbnQgbW9kZVwmIzM0Oyk7XG4gXG4gXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCBcJiMzNDtiaW5mbXRfdHJhbnNwYXJlbnRfaW50ZXJwXCYjMzQ7KSwgMCk7XG5AQCAtMzA3LDQgJiM0MzszNDMsMjI2IEBAIFRFU1RfRihicGZfaGFuZGxlciwgbG9hZGVyX3N1YnN0aXR1dGlvbilcbiBcdHVubGluayhMT0FERVJfSU5URVJQKTtcbiB9XG4gXG4mIzQzOy8qIFRoZSBlcnJubyBhbiBleGVjIG9mIEBwYXRoIGZhaWxzIHdpdGgsIDAgaWYgaXQgc3VjY2VlZGVkLiAqL1xuJiM0MztzdGF0aWMgaW50IGV4ZWNfZXJybm8oY29uc3QgY2hhciAqcGF0aClcbiYjNDM7e1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRleGVjbChwYXRoLCBwYXRoLCAoY2hhciAqKU5VTEwpO1xuJiM0MztcdFx0X2V4aXQoZXJybm8pO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGlkIFx1MDAzYyAwIHx8IHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApICE9IHBpZCB8fCAhV0lGRVhJVEVEKHN0YXR1cykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEluc3RhbGwgYSBjb3B5IG9mIHRoZSBib3VuZC1pbnRlcnByZXRlciB0ZXN0IGJpbmFyeSBhdCBAcGF0aC4gKi9cbiYjNDM7c3RhdGljIGludCBpbnN0YWxsX2ludGVycChjb25zdCBjaGFyICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBzcmNbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRpZiAoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCBcJiMzNDtiaW5mbXRfYmluZF9pbnRlcnBcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiBjb3B5X2ZpbGUoc3JjLCBwYXRoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQmluZCBAcGF0aCB0byBAZW50cnkgdW5kZXIgQG5hbWUsIHRoZSAmIzM5OyYjNDM7JiMzOTsgY29tbWFuZCBvZiBhIGRpc2FibGVkIGVudHJ5LiAqL1xuJiM0MztzdGF0aWMgaW50IGVudHJ5X2JpbmQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNtZFtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFwmIzM0OyYjNDM7JXMgJXNcXG5cJiMzNDssIG5hbWUsIHBhdGgpO1xuJiM0MztcdHJldHVybiBlbnRyeV9jb21tYW5kKGVudHJ5LCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKGJvdW5kX2ludGVycCkge1xuJiM0MztcdGNoYXIgb2JqW1BBVEhfTUFYXTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nhc2UgYztcbiYjNDM7XHRib29sIHN0YXJ0ZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKGJvdW5kX2ludGVycClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKndoeSA9IGJwZl9oYW5kbGVyX3Vuc3VwcG9ydGVkKCk7XG4mIzQzO1xuJiM0MztcdGlmICh3aHkpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7JXNcJiMzNDssIHdoeSk7XG4mIzQzO1x0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJiMzOTtEJiMzOTspKSB7XG4mIzQzO1x0XHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlICYjMzk7RCYjMzk7IGZsYWdcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfRklSU1QpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoaW5zdGFsbF9pbnRlcnAoQklORF9TRUNPTkQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGFydGlmYWN0X3BhdGgoc2VsZi1cdTAwM2VvYmosIHNpemVvZihzZWxmLVx1MDAzZW9iaiksXG4mIzQzO1x0XHRcdFx0XCYjMzQ7aW50ZXJwX2JpbmQuYnBmLm9cJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWdpc3RlcmVkIGRpc2FibGVkLCBzbyBpdCBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQgYW5kIGNhbiBzdGlsbCBiZVxuJiM0MztcdCAqIGdpdmVuIGludGVycHJldGVycy4gRWFjaCBwYXRoIGlzIHJlc29sdmVkIG9uY2UsIGJ5IGl0cyB3cml0ZSgyKTtcbiYjNDM7XHQgKiBmcm9tIGhlcmUgb24gdGhlIGVudHJ5IGhvbGRzIHRoZSBmaWxlcyB0aGVtc2VsdmVzLlxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUShicGZfY2FzZV9zdGFydF9mbGFncyhcdTAwMjZzZWxmLVx1MDAzZWMsIHNlbGYtXHUwMDNlb2JqLCBcJiMzNDtpbnRlcnBfYmluZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7RFwmIzM0OyksIDApO1xuJiM0MztcdHNlbGYtXHUwMDNlc3RhcnRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIFwmIzM0O2ZpcnN0XCYjMzQ7LCBCSU5EX0ZJUlNUKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7c2Vjb25kXCYjMzQ7LCBCSU5EX1NFQ09ORCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKGJvdW5kX2ludGVycClcbiYjNDM7e1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZXN0YXJ0ZWQpXG4mIzQzO1x0XHRicGZfY2FzZV9zdG9wKFx1MDAyNnNlbGYtXHUwMDNlYyk7XG4mIzQzO1x0dW5saW5rKEJJTkRfRklSU1QpO1xuJiM0MztcdHVubGluayhCSU5EX1NFQ09ORCk7XG4mIzQzO1x0dW5saW5rKEFBUkNINjRfUEFUSCk7XG4mIzQzO1x0dW5saW5rKEJJTkRfUklTQ1ZfUEFUSCk7XG4mIzQzO1x0dW5saW5rKEJJTkRfQVJNX1BBVEgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBFbmFibGluZyBpcyB3aGF0IG1ha2VzIHRoZSBjb25maWd1cmVkIGVudHJ5IG1hdGNoYWJsZS4gKi9cbiYjNDM7c3RhdGljIGludCBhY3RpdmF0ZShjb25zdCBjaGFyICplbnRyeSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBlbnRyeV9jb21tYW5kKGVudHJ5LCBcJiMzNDsxXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogT25lIGVudHJ5LCBvbmUgaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSwgcGlja2VkIHBlciBleGVjLiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBzZWxlY3RzX2J5X25hbWUpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEoY3JlYXRlX2Zha2VfZWxmKEFBUkNINjRfUEFUSCwgRU1fQUFSQ0g2NCksIDApO1xuJiM0MztcdEFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQklORF9SSVNDVl9QQVRILCBFTV9SSVNDViksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBEaXNhYmxlZCwgc28gaXQgZG9lcyBub3QgbWF0Y2ggYW5kIG5vIGZvcm1hdCBjbGFpbXMgdGhlIGJpbmFyeS4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEoZXhlY19lcnJubyhBQVJDSDY0X1BBVEgpLCBFTk9FWEVDKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDspLCAwKTtcbiYjNDM7XHRFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEFBUkNINjRfUEFUSCwgQklORF9FWFBFQ1QgQklORF9GSVJTVCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQklORF9SSVNDVl9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX1NFQ09ORCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBXaGF0IHdhcyBib3VuZCBpcyB3aGF0IHJ1bnMsIHdoYXRldmVyIHRoZSBwYXRoIGhvbGRzIGFmdGVyd2FyZHMuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIHBhdGhfbm9fbG9uZ2VyX2RlY2lkZXMpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG90aGVyW1BBVEhfTUFYXTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihBQVJDSDY0X1BBVEgsIEVNX0FBUkNINjQpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoYWN0aXZhdGUoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBCb3VuZCBpbnRlcnByZXRlcnMgYXJlIHBpbm5lZCBhZ2FpbnN0IHdyaXRlcywgZXhhY3RseSBsaWtlICYjMzk7RiYjMzk7LiAqL1xuJiM0MztcdEVYUEVDVF9UUlVFKHdyaXRlX2RlbmllZChCSU5EX0ZJUlNUKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlcGxhY2UgdGhlIHBhdGggd2l0aCBhIGRpZmZlcmVudCBiaW5hcnk6IGEgbmV3IGZpbGUsIG5ldyBpbm9kZS4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChvdGhlciwgc2l6ZW9mKG90aGVyKSwgXCYjMzQ7YmluZm10X2JwZl9pbnRlcnBcJiMzNDspLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEodW5saW5rKEJJTkRfRklSU1QpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY29weV9maWxlKG90aGVyLCBCSU5EX0ZJUlNUKSwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSBlbnRyeSByZXBvcnRzIHdoYXQgaXQgYm91bmQsIHVuZGVyIHRoZSBuYW1lcyBpdCBib3VuZCB0aGVtIGFzLiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBlbnRyeV9yZXBvcnRzX2JpbmRpbmdzKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDticGYtaW50ZXJwcmV0ZXIgZmlyc3QgXCYjMzQ7IEJJTkRfRklSU1QpKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhcJiMzNDt0ZXN0X2ludGVycF9iaW5kXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0O2JwZi1pbnRlcnByZXRlciBzZWNvbmQgXCYjMzQ7IEJJTkRfU0VDT05EKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlbGVjdGluZyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBmYWlscyB0aGUgZXhlYy4gKi9cbiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgdW5ib3VuZF9uYW1lX2ZhaWxzKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihCSU5EX0FSTV9QQVRILCBFTV9BUk0pLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoYWN0aXZhdGUoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZXhlY19lcnJubyhCSU5EX0FSTV9QQVRIKSwgRU5PRU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQWN0aXZhdGluZyBzZWFscyBpdDogd2hhdCBjYW4gYmUgbWF0Y2hlZCBjYW5ub3QgYmUgY2hhbmdlZC4gKi9cbiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgc2VhbGVkX29uY2VfYWN0aXZlKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7dGhpcmRcJiMzNDssIEJJTkRfU0VDT05EKSwgLUVCVVNZKTtcbiYjNDM7XHRFWFBFQ1RfRkFMU0UoZW50cnlfc2hvd3MoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7YnBmLWludGVycHJldGVyIHRoaXJkIFwmIzM0OyBCSU5EX1NFQ09ORCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc2VhbCBpcyBmb3IgZ29vZDogZGlzYWJsaW5nIHRoZSBlbnRyeSBhZ2FpbiByZW9wZW5zIG5vdGhpbmcuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGRpc2FibGVfZG9lc19ub3RfdW5zZWFsKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDspLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChcJiMzNDt0ZXN0X2ludGVycF9iaW5kXCYjMzQ7LCBcJiMzNDswXFxuXCYjMzQ7KSwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIFwmIzM0O3RoaXJkXCYjMzQ7LCBCSU5EX1NFQ09ORCksIC1FQlVTWSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aG91dCAmIzM5O0QmIzM5OyBpcyBzZWFsZWQgZnJvbSB0aGUgc3RhcnQuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGJvcm5fc2VhbGVkKVxuJiM0Mzt7XG4mIzQzO1x0LyogQSBzZWNvbmQgZW50cnkgZm9yIHRoZSBoYW5kbGVyIHRoZSBmaXh0dXJlIGFscmVhZHkgcHVibGlzaGVkLiAqL1xuJiM0MztcdEFTU0VSVF9FUShyZWdpc3Rlcl9lbnRyeShcJiMzNDt0ZXN0X2Jvcm5fc2VhbGVkXCYjMzQ7LCBcJiMzNDtpbnRlcnBfYmluZFwmIzM0OywgTlVMTCksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZW50cnlfYmluZChcJiMzNDt0ZXN0X2Jvcm5fc2VhbGVkXCYjMzQ7LCBcJiMzNDtmaXJzdFwmIzM0OywgQklORF9GSVJTVCksIC1FQlVTWSk7XG4mIzQzO1x0dW5yZWdpc3RlcihcJiMzNDt0ZXN0X2Jvcm5fc2VhbGVkXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQSBuYW1lIGlzIGJvdW5kIG9uY2U7IGEgc2Vjb25kIHVzZSBvZiBpdCBpcyByZWZ1c2VkLiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBkdXBsaWNhdGVfbmFtZV9yZWZ1c2VkKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7Zmlyc3RcJiMzNDssIEJJTkRfU0VDT05EKSwgLUVFWElTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgbmFtZSBpcyBhIHByaW50YWJsZSB3b3JkOiB0aGUgZW50cnkgZmlsZSByZXBvcnRzICYjMzk7bmFtZSBwYXRoJiMzOTsgbGluZXMuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIG5hbWVfbXVzdF9iZV9wcmludGFibGUpXG4mIzQzO3tcbiYjNDM7XHQvKiBBIGNvbnRyb2wgY2hhcmFjdGVyIHdvdWxkIGZvcmdlIGEgbGluZSBpbnRvIHRoZSBlbnRyeSBmaWxlLiAqL1xuJiM0MztcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIFwmIzM0O2FcXHRiXCYjMzQ7LCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7XG4mIzQzO1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7YVxcbmJcJiMzNDssIEJJTkRfRklSU1QpLCAtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogQSBzcGFjZSBjYW5ub3QgZXZlbiBiZSBzcGVsbGVkOiB0aGUgcGF0aCBzdGFydHMgYWZ0ZXIgdGhlIGZpcnN0IG9uZS4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEoZW50cnlfYmluZChcJiMzNDt0ZXN0X2ludGVycF9iaW5kXCYjMzQ7LCBcJiMzNDthIGJcJiMzNDssIEJJTkRfRklSU1QpLCAtRUlOVkFMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGNvbW1hbmQgZW5kcyBhdCB0aGUgd3JpdGU6IGJ5dGVzIHBhc3QgYW4gZW1iZWRkZWQgbnVsIGFyZSByZWZ1c2VkLiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCB0cmFpbGluZ19ieXRlc19yZWZ1c2VkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBjbWRbUEFUSF9NQVhdO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHQvKiBlbnRyeV9jb21tYW5kKCkgY2Fubm90IHNwZWxsIGEgbnVsLCBzbyB3cml0ZSB0aGUgYnVmZmVyIHJhdy4gKi9cbiYjNDM7XHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcJiMzNDsmIzQzO251bCAlc1wmIzM0OywgQklORF9GSVJTVCk7XG4mIzQzO1x0bGVuID0gc3RybGVuKGNtZCkgJiM0MzsgMTtcbiYjNDM7XHRtZW1jcHkoY21kICYjNDM7IGxlbiwgXCYjMzQ7anVua1wmIzM0Oywgc2l6ZW9mKFwmIzM0O2p1bmtcJiMzNDspKTtcbiYjNDM7XHRsZW4gJiM0Mzs9IHNpemVvZihcJiMzNDtqdW5rXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKEJJTkZNVF9ESVIgXCYjMzQ7L3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEVYUEVDVF9FUSh3cml0ZShmZCwgY21kLCBsZW4pLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssXG4mIzQzO1x0XHRcdFx0IFwmIzM0O2JwZi1pbnRlcnByZXRlciBudWwgXCYjMzQ7IEJJTkRfRklSU1QpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gZW50cnkgYmluZHMgYXQgbW9zdCBCSU5EX01BWCBpbnRlcnByZXRlcnMuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGNhcHBlZF9iaW5kaW5ncylcbiYjNDM7e1xuJiM0MztcdGNoYXIgbmFtZVsxNl07XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaXh0dXJlIGJvdW5kIFwmIzM0O2ZpcnN0XCYjMzQ7IGFuZCBcJiMzNDtzZWNvbmRcJiMzNDsgYWxyZWFkeS4gKi9cbiYjNDM7XHRmb3IgKGkgPSAyOyBpIFx1MDAzYyBCSU5EX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7biVkXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIG5hbWUsIEJJTkRfRklSU1QpLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7b3ZlclwmIzM0OywgQklORF9GSVJTVCksIC1FTk9TUEMpO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfY29tbW9uLmhcbmluZGV4IGM2OTAwZGVkMDE5ZmMuLjc0NWFmZjg0ZGM3ODcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXG5AQCAtOTMsNiAmIzQzOzkzLDQ1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHR9XG4gfVxuIFxuJiM0MzsvKiBXcml0ZSBAbGluZSB0byBAZW50cnkmIzM5O3MgZmlsZSwgcmVwb3J0aW5nIHRoZSBlcnJubyBpdCB3YXMgcmVmdXNlZCB3aXRoLiAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBlbnRyeV9jb21tYW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpsaW5lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgZmQsIHJldHZhbCA9IDA7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IHN0cmxlbihsaW5lKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBCSU5GTVRfRElSIFwmIzM0Oy8lc1wmIzM0OywgZW50cnkpO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XHRpZiAod3JpdGUoZmQsIGxpbmUsIGxlbikgIT0gKHNzaXplX3QpbGVuKVxuJiM0MztcdFx0cmV0dmFsID0gLWVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gcmV0dmFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEb2VzIEBlbnRyeSYjMzk7cyBmaWxlIHJlcG9ydCBAbGluZT8gKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGVudHJ5X3Nob3dzKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpsaW5lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXSwgYnVmW1BBVEhfTUFYXTtcbiYjNDM7XHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1x0RklMRSAqZnA7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgQklORk1UX0RJUiBcJiMzNDsvJXNcJiMzNDssIGVudHJ5KTtcbiYjNDM7XHRmcCA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZnApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkge1xuJiM0MztcdFx0YnVmW3N0cmNzcG4oYnVmLCBcJiMzNDtcXG5cJiMzNDspXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcChidWYsIGxpbmUpKSB7XG4mIzQzO1x0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGZjbG9zZShmcCk7XG4mIzQzO1x0cmV0dXJuIGZvdW5kO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIE1vdW50IGJpbmZtdF9taXNjIHVubGVzcyBpdCBhbHJlYWR5IGlzLCBhbmQgcmVwb3J0IHdoZXRoZXIgaXQgaXMgdXNhYmxlLiAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW5mbXRfbWlzY19hdmFpbGFibGUodm9pZClcbiB7XG5AQCAtMTE3LDE2ICYjNDM7MTU2LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFydGlmYWN0X3BhdGgoY2hhciAqb3V0LCBzaXplX3Qgc3osIGNvbnN0IGNoYXIgKm5hbWUpXG4gfVxuIFxuIC8qIFByb2JlIGtlcm5lbCBzdXBwb3J0IGZvciBhIHJlZ2lzdHJhdGlvbiBmbGFnIHdpdGggYSB0aHJvd2F3YXkgZW50cnkuICovXG4tc3RhdGljIGlubGluZSBpbnQgYmluZm10X2ZsYWdfc3VwcG9ydGVkKGNoYXIgZmxhZylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpXG4ge1xuIFx0Y2hhciBydWxlWzY0XTtcbiBcbiBcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCYjMzQ7OmJtX2ZsYWdfcHJvYmU6RTo6Ym1wcm9iZTo6L2Jpbi90cnVlOiVjXCYjMzQ7LFxuIFx0XHQgZmxhZyk7XG4gXHRpZiAod3JpdGVfcmVnKHJ1bGUpKVxuLVx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR1bnJlZ2lzdGVyKFwmIzM0O2JtX2ZsYWdfcHJvYmVcJiMzNDspO1xuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDdjOWU4YTRlZTQyYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXG5AQCAtMCwwICYjNDM7MSwxNzIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogVGVzdCB0aGUgJiMzOTtEJiMzOTsgKHJlZ2lzdGVyIGRpc2FibGVkKSBmbGFnIG9mIGJpbmZtdF9taXNjLiBBbiBlbnRyeVxuJiM0MzsgKiByZWdpc3RlcmVkIHdpdGggaXQgZXhpc3RzIGJ1dCBjYW5ub3QgYmUgbWF0Y2hlZCB1bnRpbCB1c2Vyc3BhY2UgZW5hYmxlc1xuJiM0MzsgKiBpdCwgd2hpY2ggc3BsaXRzIGEgcmVnaXN0cmF0aW9uIGludG8gY3JlYXRlIGFuZCBhY3RpdmF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogTmVlZHMgcm9vdCBmb3IgdGhlIHJlZ2lzdHJhdGlvbjsgbm8gYnBmIHRvb2xjaGFpbiBpbnZvbHZlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YmluZm10X21pc2NfY29tbW9uLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNQUdJQ1x0XHRcJiMzNDsjRElTQUJMRUQtU0VMRlRFU1QjXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVEFSR0VUX1BBVEhcdFwmIzM0Oy90bXAvYmluZm10X2Rpc2FibGVkX3RhcmdldFwmIzM0O1xuJiM0MzsjZGVmaW5lIElOVEVSUF9QQVRIXHRcJiMzNDsvdG1wL2JpbmZtdF9kaXNhYmxlZF9pbnRlcnAuc2hcJiMzNDtcbiYjNDM7I2RlZmluZSBFTlRSWVx0XHRcJiMzNDt0ZXN0X2Rpc2FibGVkXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUlVMRShmbGFncylcdFwmIzM0OzpcJiMzNDsgRU5UUlkgXCYjMzQ7Ok06MDpcJiMzNDsgTUFHSUMgXCYjMzQ7OjpcJiMzNDsgSU5URVJQX1BBVEggXCYjMzQ7OlwmIzM0OyBmbGFnc1xuJiM0MztcbiYjNDM7LyogVGhlIGludGVycHJldGVyIGV4aXRzIHdpdGggYSBjb2RlIHRoZSBoYXJuZXNzIGNhbiByZWNvZ25pc2UuICovXG4mIzQzOyNkZWZpbmUgRVhJVF9JTlRFUlBcdDdcbiYjNDM7XG4mIzQzOy8qIFRoZSB0YXJnZXQgb25seSBoYXMgdG8gY2FycnkgdGhlIG1hZ2ljOyBpdCBpcyBuZXZlciBhY3R1YWxseSBsb2FkZWQuICovXG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3RhcmdldCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTI4XSA9IE1BR0lDIFwmIzM0O1xcblwmIzM0OztcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdHVubGluayhUQVJHRVRfUEFUSCk7XG4mIzQzO1x0ZmQgPSBvcGVuKFRBUkdFVF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAod3JpdGUoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IChzc2l6ZV90KXNpemVvZihidWYpKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjcmVhdGVfaW50ZXJwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1Zls2NF07XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHR1bmxpbmsoSU5URVJQX1BBVEgpO1xuJiM0MztcdGZkID0gb3BlbihJTlRFUlBfUEFUSCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNzU1KTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7IyEvYmluL3NoXFxuZXhpdCAlZFxcblwmIzM0OywgRVhJVF9JTlRFUlApO1xuJiM0MztcdGlmICh3cml0ZShmZCwgYnVmLCBzdHJsZW4oYnVmKSkgIT0gKHNzaXplX3Qpc3RybGVuKGJ1ZikpIHtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGNsb3NlKGZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRShkaXNhYmxlZCkge1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChkaXNhYmxlZClcbiYjNDM7e1xuJiM0MztcdGlmIChnZXR1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBiaW5mbXRfbWlzY1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAmIzM5O0QmIzM5Oy4gKi9cbiYjNDM7XHRpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O0QmIzM5OykpIHtcbiYjNDM7XHRcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgd2l0aG91dCB0aGUgJiMzOTtEJiMzOTsgZmxhZ1wmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoY3JlYXRlX2ludGVycCgpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY3JlYXRlX3RhcmdldCgpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihkaXNhYmxlZClcbiYjNDM7e1xuJiM0MztcdHVucmVnaXN0ZXIoRU5UUlkpO1xuJiM0MztcdHVubGluayhUQVJHRVRfUEFUSCk7XG4mIzQzO1x0dW5saW5rKElOVEVSUF9QQVRIKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGVudHJ5IGV4aXN0cyBidXQgZG9lcyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gKi9cbiYjNDM7VEVTVF9GKGRpc2FibGVkLCBpbmVydF91bnRpbF9lbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwmIzM0O0RcJiMzNDspKSwgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFwmIzM0O2Rpc2FibGVkXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdC8qIE5vdGhpbmcgbWF0Y2hlcyBpdCwgc28gbm8gYmluYXJ5IGZvcm1hdCBjbGFpbXMgdGhlIHRhcmdldC4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShlbnRyeV9jb21tYW5kKEVOVFJZLCBcJiMzNDsxXFxuXCYjMzQ7KSwgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFwmIzM0O2VuYWJsZWRcJiMzNDspKTtcbiYjNDM7XHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdpdGhvdXQgJiMzOTtEJiMzOTsgYW4gZW50cnkgaXMgbWF0Y2hhYmxlIHRoZSBtb21lbnQgaXQgaXMgcmVnaXN0ZXJlZC4gKi9cbiYjNDM7VEVTVF9GKGRpc2FibGVkLCBlbmFibGVkX3dpdGhvdXRfdGhlX2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXCYjMzQ7XCYjMzQ7KSksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcJiMzNDtlbmFibGVkXCYjMzQ7KSk7XG4mIzQzO1x0RVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgRVhJVF9JTlRFUlApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAmIzM5O0QmIzM5OyBpcyBzcGVudCBvbiB0aGUgcmVnaXN0cmF0aW9uOiB0aGUgZW50cnkgZG9lcyBub3QgcmVwb3J0IGl0IGJhY2suICovXG4mIzQzO1RFU1RfRihkaXNhYmxlZCwgZmxhZ19ub3RfcmVwb3J0ZWQpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXCYjMzQ7RFwmIzM0OykpLCAwKTtcbiYjNDM7XHRFWFBFQ1RfRkFMU0UoZW50cnlfc2hvd3MoRU5UUlksIFwmIzM0O2ZsYWdzOiBEXCYjMzQ7KSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFwmIzM0O2ZsYWdzOiBcJiMzNDspKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQSBkaXNhYmxlZCBlbnRyeSBjYW4gYmUgZGlzYWJsZWQgYW5kIGVuYWJsZWQgbGlrZSBhbnkgb3RoZXIuICovXG4mIzQzO1RFU1RfRihkaXNhYmxlZCwgdG9nZ2xlc19saWtlX2FueV9lbnRyeSlcbiYjNDM7e1xuJiM0MztcdEFTU0VSVF9FUSh3cml0ZV9yZWcoUlVMRShcJiMzNDtEXCYjMzQ7KSksIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXCYjMzQ7MVxcblwmIzM0OyksIDApO1xuJiM0MztcdEFTU0VSVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcbiYjNDM7XHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXCYjMzQ7MFxcblwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIFJVTl9FTk9FWEVDKTtcbiYjNDM7XHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXCYjMzQ7MVxcblwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogJiMzOTtEJiMzOTsgY29tcG9zZXMgd2l0aCB0aGUgaW52b2NhdGlvbiBmbGFncyBhIHN0YXRpYyBlbnRyeSBjYW4gY2FycnkuICovXG4mIzQzO1RFU1RfRihkaXNhYmxlZCwgY29tcG9zZXNfd2l0aF9pbnZvY2F0aW9uX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwmIzM0O1BEXCYjMzQ7KSksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcJiMzNDtkaXNhYmxlZFwmIzM0OykpO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcJiMzNDtmbGFnczogUFwmIzM0OykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAmIzM5Oy0xJiMzOTsgdG8gdGhlIHN0YXR1cyBmaWxlIHN3ZWVwcyBhIHN0YWdlZCBlbnRyeSB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gKi9cbiYjNDM7VEVTVF9GKGRpc2FibGVkLCByZW1vdmVkX2J5X3JlbW92ZV9hbGwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSh3cml0ZV9yZWcoUlVMRShcJiMzNDtEXCYjMzQ7KSksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcJiMzNDtkaXNhYmxlZFwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oQklORk1UX0RJUiBcJiMzNDsvc3RhdHVzXCYjMzQ7LCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEod3JpdGUoZmQsIFwmIzM0Oy0xXCYjMzQ7LCAyKSwgMik7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfTkUoYWNjZXNzKEJJTkZNVF9ESVIgXCYjMzQ7L1wmIzM0OyBFTlRSWSwgRl9PSyksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIGZpbGUgaGFuZGxlIGhlbGQgYWNyb3NzIGEgcmVtb3ZhbCBjYW5ub3QgcmVzdXJyZWN0IHRoZSBlbnRyeS4gKi9cbiYjNDM7VEVTVF9GKGRpc2FibGVkLCBub19yZXN1cnJlY3Rpb25fYWZ0ZXJfcmVtb3ZlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXCYjMzQ7RFwmIzM0OykpLCAwKTtcbiYjNDM7XHRmZCA9IG9wZW4oQklORk1UX0RJUiBcJiMzNDsvXCYjMzQ7IEVOVFJZLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHdyaXRlKGZkLCBcJiMzNDstMVwmIzM0OywgMiksIDIpO1xuJiM0MztcdEVYUEVDVF9ORShhY2Nlc3MoQklORk1UX0RJUiBcJiMzNDsvXCYjMzQ7IEVOVFJZLCBGX09LKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIEFjY2VwdGVkIGxpa2UgYW55IHRvZ2dsZSBvZiBhIHJlbW92ZWQgZW50cnksIGJ1dCBwdWJsaXNoZXMgbm90aGluZy4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEod3JpdGUoZmQsIFwmIzM0OzFcJiMzNDssIDEpLCAxKTtcbiYjNDM7XHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfdHJhbnNwYXJlbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfdHJhbnNwYXJlbnQuY1xuaW5kZXggZDBjYjg0NWRmMWQzMC4uMmViZjczZGU4MDE4YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfdHJhbnNwYXJlbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jXG5AQCAtNTYsNyAmIzQzOzU2LDcgQEAgRklYVFVSRV9TRVRVUCh0cmFuc3BhcmVudClcbiBcdEFTU0VSVF9FUShjcmVhdGVfdGFyZ2V0KCksIDApO1xuIFxuIFx0LyogU2tpcCB0aGUgd2hvbGUgc3VpdGUgb24gYSBrZXJuZWwgdGhhdCBkb2VzIG5vdCBrbm93ICYjMzk7VCYjMzk7LiAqL1xuLVx0aWYgKGJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpIHtcbiYjNDM7XHRpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpIHtcbiBcdFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlICYjMzk7VCYjMzk7IGZsYWdcJiMzNDspO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWNlNDVjY2EyMTVmMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuY1xuQEAgLTAsMCAmIzQzOzEsNzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogYmluZm10X21pc2Nfb3BzIGhhbmRsZXIgZm9yIHRoZSBzZWxmdGVzdCYjMzk7cyBib3VuZC1pbnRlcnByZXRlciBjYXNlOiBvbmVcbiYjNDM7ICogaGFuZGxlciwgb25lIGVudHJ5LCBhbiBpbnRlcnByZXRlciBwZXIgZ3Vlc3QgYXJjaGl0ZWN0dXJlIC0gZWFjaCBib3VuZCB0b1xuJiM0MzsgKiBhIGZpbGUgd2hlbiB0aGUgZW50cnkgd2FzIHJlZ2lzdGVyZWQgcmF0aGVyIHRoYW4gdG8gYSBwYXRoIHJlc29sdmVkIGF0XG4mIzQzOyAqIGV4ZWMgdGltZS4gVGhlIGxvYWQgcHJvZ3JhbSBuYW1lcyB0aGUgb25lIGl0IHdhbnRzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZFxuJiM0MzsgKiBub3QgYmluZCBmYWlscyB0aGUgZXhlYywgd2hpY2ggdGhlIGhhcm5lc3MgY2hlY2tzIHRvby5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRUlfQ0xBU1NcdDRcbiYjNDM7I2RlZmluZSBFTEZDTEFTUzY0XHQyXG4mIzQzOyNkZWZpbmUgRV9NQUNISU5FX09GRlx0MThcbiYjNDM7I2RlZmluZSBFTV9BUk1cdFx0NDBcbiYjNDM7I2RlZmluZSBFTV9BQVJDSDY0XHQxODNcbiYjNDM7I2RlZmluZSBFTV9SSVNDVlx0MjQzXG4mIzQzO1xuJiM0MztleHRlcm4gaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opIF9fa3N5bTtcbiYjNDM7XG4mIzQzOy8qIFRoZSBndWVzdCBhcmNoaXRlY3R1cmUgb2YgYSA2NC1iaXQgRUxGLCBvciB6ZXJvIGlmIGl0IGlzIG5vdCBvbmUuICovXG4mIzQzO3N0YXRpYyBfX3UxNiBlbGZfbWFjaGluZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGJwcm0tXHUwMDNlYnVmWzBdICE9IDB4N2YgfHwgYnBybS1cdTAwM2VidWZbMV0gIT0gJiMzOTtFJiMzOTsgfHxcbiYjNDM7XHQgICAgYnBybS1cdTAwM2VidWZbMl0gIT0gJiMzOTtMJiMzOTsgfHwgYnBybS1cdTAwM2VidWZbM10gIT0gJiMzOTtGJiMzOTsgfHxcbiYjNDM7XHQgICAgYnBybS1cdTAwM2VidWZbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogTGl0dGxlLWVuZGlhbiAxNi1iaXQgZmllbGQsIHJlYWQgYnl0ZS13aXNlIGZvciB0aGUgdmVyaWZpZXIuICovXG4mIzQzO1x0cmV0dXJuIChfX3U4KWJwcm0tXHUwMDNlYnVmW0VfTUFDSElORV9PRkZdIHxcbiYjNDM7XHQgICAgICAgKChfX3UxNikoX191OClicHJtLVx1MDAzZWJ1ZltFX01BQ0hJTkVfT0ZGICYjNDM7IDFdIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHMucy9tYXRjaFwmIzM0OylcbiYjNDM7Ym9vbCBCUEZfUFJPRyhpbnRlcnBfYmluZF9tYXRjaCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiYjNDM7e1xuJiM0MztcdF9fdTE2IG1hY2hpbmUgPSBlbGZfbWFjaGluZShicHJtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hY2hpbmUgPT0gRU1fQUFSQ0g2NCB8fCBtYWNoaW5lID09IEVNX1JJU0NWIHx8XG4mIzQzO1x0ICAgICAgIG1hY2hpbmUgPT0gRU1fQVJNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy5zL2xvYWRcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhpbnRlcnBfYmluZF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOYW1lcywgbm90IHBhdGhzOiBlYWNoIG9uZSBzZWxlY3RzIGEgZmlsZSB0aGUgZW50cnkgcHJlLW9wZW5lZCwgc29cbiYjNDM7XHQgKiBub3RoaW5nIGlzIHJlc29sdmVkIGhlcmUgb3IgbGF0ZXIsIGluIGFueSBuYW1lc3BhY2UuIFRoZSBidWZmZXJzXG4mIzQzO1x0ICogYXJlIG9uIHRoZSBzdGFjayBiZWNhdXNlIHRoZSB2ZXJpZmllciByZWplY3RzIC5yb2RhdGEgZm9yIGEgc2l6ZWRcbiYjNDM7XHQgKiBtZW1vcnkgYXJndW1lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2hhciBmaXJzdFtdID0gXCYjMzQ7Zmlyc3RcJiMzNDs7XG4mIzQzO1x0Y2hhciBzZWNvbmRbXSA9IFwmIzM0O3NlY29uZFwmIzM0OztcbiYjNDM7XHRjaGFyIHVuYm91bmRbXSA9IFwmIzM0O3VuYm91bmRcJiMzNDs7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZWxmX21hY2hpbmUoYnBybSkpIHtcbiYjNDM7XHRjYXNlIEVNX0FBUkNINjQ6XG4mIzQzO1x0XHRyZXR1cm4gYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKGJwcm0sIGZpcnN0LCBzaXplb2YoZmlyc3QpKTtcbiYjNDM7XHRjYXNlIEVNX1JJU0NWOlxuJiM0MztcdFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBzZWNvbmQsIHNpemVvZihzZWNvbmQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBlbnRyeSBib3VuZCBub3RoaW5nIHVuZGVyIHRoaXMgbmFtZTogLUVOT0VOVCBmYWlscyB0aGUgZXhlYy4gKi9cbiYjNDM7XHRyZXR1cm4gYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKGJwcm0sIHVuYm91bmQsIHNpemVvZih1bmJvdW5kKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDsuc3RydWN0X29wcy5saW5rXCYjMzQ7KVxuJiM0MztzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGludGVycF9iaW5kID0ge1xuJiM0MztcdC5tYXRjaFx0PSAodm9pZCAqKWludGVycF9iaW5kX21hdGNoLFxuJiM0MztcdC5sb2FkXHQ9ICh2b2lkICopaW50ZXJwX2JpbmRfbG9hZCxcbiYjNDM7XHQubmFtZVx0PSBcJiMzNDtpbnRlcnBfYmluZFwmIzM0OyxcbiYjNDM7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OywKICAgICYjMzQ7QklORk1UX01JU0NfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmluZm10X21pc2NfZmluZF9pbnRlcnAmIzM0OywKICAgICYjMzQ7YnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtsb2FkX21pc2NfYmluYXJ5JiMzNDssCiAgICAmIzM0O2JtX2VudHJ5X3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmOTI1MWE2MGRhMTY2MjI0YmVhOWJhYTNiZDljNDJmNzRiOWQ1Y2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDAyOjU2OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAppbmRleCBjODA3MDJiNGNjZDVmLi4zZTJiMmE5NDE1YmM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdApAQCAtMTA3LDYgJiM0MzsxMDcsMTUgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjoKICAgICAgICAgICAgIGBgUFRfSU5URVJQYGAuIFNlZSB0aGUgJiMzNDtMb2FkZXIgc3Vic3RpdHV0aW9uJiMzNDsgc2VjdGlvbgogICAgICAgICAgICAgYmVsb3cuIGBgTGBgIHJlamVjdHMgYGBUYGAsIGBgUGBgLCBgYE9gYCBhbmQgYGBDYGA7CiAgICAgICAgICAgICBgYEZgYCBjb21wb3Nlcy4KJiM0MzsgICAgICBgYERgYCAtIHJlZ2lzdGVyZWQgZGlzYWJsZWQKJiM0MzsgICAgICAgICAgICBUaGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBpbnN0ZWFkIG9mIGJlaW5nIG1hdGNoYWJsZSBhdAomIzQzOyAgICAgICAgICAgIG9uY2UsIGFuZCBoYXMgdG8gYmUgZW5hYmxlZCBieSB3cml0aW5nIGBgMWBgIHRvIGl0cyBmaWxlCiYjNDM7ICAgICAgICAgICAgYmVmb3JlIGl0IGRpc3BhdGNoZXMgYW55dGhpbmcuIFRoaXMgc3BsaXRzIGEgcmVnaXN0cmF0aW9uCiYjNDM7ICAgICAgICAgICAgaW50byBjcmVhdGluZyB0aGUgZW50cnkgYW5kIGFjdGl2YXRpbmcgaXQsIGxlYXZpbmcgcm9vbSB0bwomIzQzOyAgICAgICAgICAgIGNvbmZpZ3VyZSBpdCBpbiBiZXR3ZWVuIC0gd2hpY2ggaXMgd2hhdCBhIGBgQmBgIGVudHJ5IHRoYXQKJiM0MzsgICAgICAgICAgICBiaW5kcyBpbnRlcnByZXRlcnMgbmVlZHM7IHNlZSB0aGUgYnBmIHNlY3Rpb24gYmVsb3cuIFRoZSBmbGFnCiYjNDM7ICAgICAgICAgICAgaXMgc3BlbnQgb24gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgaXMgbm90IHJlYWQgYmFjazogd2hhdCBhbgomIzQzOyAgICAgICAgICAgIGVudHJ5IGZpbGUgcmVwb3J0cyBhZnRlcndhcmRzIGlzIHdoZXRoZXIgaXQgaXMgZW5hYmxlZC4KIAogCiBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnM6CkBAIC0xODYsOSAmIzQzOzE5NSw2MiBAQCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBiaW5hcnkmIzM5O3MgbG9jYXRpb24uIEl0IHNlbGVjdHMgdGhlCiBpbnRlcnByZXRlciBieSBjYWxsaW5nIHRoZSBgYGJwZl9iaW5wcm1fc2V0X2ludGVycCgpYGAga2Z1bmMgd2l0aCBhbgogYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGBgMGBgLiBBIG1hdGNoIGlzIGNvbW1pdHRlZDogYSBmYWlsaW5nCiBgYGxvYWRgYCBmYWlscyB0aGUgZXhlYyB3aXRoIGl0cyBlcnJvciBpbnN0ZWFkIG9mIGZhbGxpbmcgdGhyb3VnaCB0byBsYXRlcgotZW50cmllczsgYGAtRU5PRVhFQ2BgIGxldHMgdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cyBoYXZlIGEgZ28uIFRoZQotaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjLAotZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3b3VsZCBiZS4KJiM0MztlbnRyaWVzOyBgYC1FTk9FWEVDYGAgbGV0cyB0aGUgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzIGhhdmUgYSBnby4gQSBwYXRoCiYjNDM7c2VsZWN0ZWQgdGhpcyB3YXkgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZQomIzQzO2V4ZWMsIGV4YWN0bHkgYXMgYSBzdGF0aWNhbGx5IHJlZ2lzdGVyZWQgaW50ZXJwcmV0ZXIgd2l0aG91dCBgYEZgYCB3b3VsZAomIzQzO2JlLgomIzQzOwomIzQzO0FuIGVudHJ5IGNhbiBpbnN0ZWFkIGJpbmQgdGhlIGludGVycHJldGVycyBpdHMgaGFuZGxlciBtYXkgdXNlLCBzbyB0aGF0IG5vCiYjNDM7cGF0aCBpcyByZXNvbHZlZCBhdCBleGVjIHRpbWUgYXQgYWxsLiBBbiBlbnRyeSByZWdpc3RlcmVkIHdpdGggYGBEYGAgaXMgbm90CiYjNDM7bWF0Y2hhYmxlIHlldCwgd2hpY2ggaXMgd2hhdCBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiB0aGVtLCBvbmUKJiM0MztgYCYjNDM7bmFtZSBwYXRoYGAgd3JpdGUgYXQgYSB0aW1lOjoKJiM0MzsKJiM0MzsgICAgZWNobyAmIzM5OzpxZW11OkI6Ojo6bXlfaGFuZGxlcjpEJiMzOTsgJmd0OyByZWdpc3RlcgomIzQzOyAgICBlY2hvICYjMzk7JiM0MzthYXJjaDY0IC91c3IvYmluL3FlbXUtYWFyY2g2NCYjMzk7ICZndDsgcWVtdQomIzQzOyAgICBlY2hvICYjMzk7JiM0Mzthcm0gL3Vzci9iaW4vcWVtdS1hcm0mIzM5OyAmZ3Q7IHFlbXUKJiM0MzsgICAgZWNobyAxICZndDsgcWVtdQomIzQzOwomIzQzO0VhY2ggcGF0aCBpcyBvcGVuZWQgZHVyaW5nIGl0cyB3cml0ZSwgaW4gdGhlIHdyaXRpbmcgcHJvY2VzcyYjMzk7cyBjb250ZXh0IGFuZAomIzQzO3dpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgCiYjNDM7cHJlLW9wZW5zIGEgc3RhdGljIGVudHJ5JiMzOTtzIGludGVycHJldGVyOyB0aGUgcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZS4gVGhlCiYjNDM7cGF0aCBpcyBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0IHNwYWNlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGl0IGNhbm5vdAomIzQzO2V4cHJlc3MsIGFuZCBubyBpbnRlcnByZXRlciBoYXMgdG8gZml0IGluIGEgcmVnaXN0ZXIgc3RyaW5nLiBBbiBlbnRyeQomIzQzO2JpbmRzIGF0IG1vc3QgMTAwIGludGVycHJldGVyczsgYSB3cml0ZSBwYXN0IHRoYXQgaXMgcmVmdXNlZCB3aXRoCiYjNDM7YGAtRU5PU1BDYGAuIFRvIGJpbmQgYSBmaWxlIHRoYXQgaGFzIG5vIHBhdGggb2YgaXRzIG93biAtIGFscmVhZHkKJiM0Mzt1bmxpbmtlZCwgYSBgYG1lbWZkYGAsIG9yIHJlYWNoYWJsZSBvbmx5IGluIGFub3RoZXIgbW91bnQgbmFtZXNwYWNlIC0KJiM0MztvcGVuIGl0IGFuZCB3cml0ZSBgYC9wcm9jL3NlbGYvZmQvTmBgLgomIzQzOwomIzQzO1RoZSBgYGxvYWRgYCBwcm9ncmFtIHRoZW4gc2VsZWN0cyBvbmUgcGVyIGV4ZWMgYnkgbmFtZSB3aXRoIHRoZQomIzQzO2BgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgYCBrZnVuYywgYW5kIGV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIHRoZQomIzQzO2ZpbGUgdGhhdCB3YXMgb3BlbmVkLiBUaGUgcGF0aCBkZWNpZGVzIHdoaWNoIGZpbGUgaXMgYm91bmQgYW5kIG5vdGhpbmcKJiM0MztlbHNlOiBpdCBpcyBub3QgcmVzb2x2ZWQgYWdhaW4sIGluIGFueSBuYW1lc3BhY2UsIHNvIHdoYXQgaXQgaG9sZHMgbGF0ZXIgLQomIzQzO29yIHdoYXQgaXQgaG9sZHMgaW4gdGhlIG5hbWVzcGFjZSBvZiB3aG9ldmVyIHJ1bnMgdGhlIGJpbmFyeSAtIG5vIGxvbmdlcgomIzQzO2RlY2lkZXMgYW55dGhpbmcuCiYjNDM7CiYjNDM7RW5hYmxpbmcgdGhlIGVudHJ5IGVuZHMgdGhpcy4gSXRzIGludGVycHJldGVycyBhcmUgcmVhZCBhdCBleGVjIHRpbWUgd2l0aAomIzQzO25vdGhpbmcgYnV0IGEgcmVmZXJlbmNlIGhlbGQgb24gdGhlIGVudHJ5LCBzbyBhbiBlbnRyeSB0aGF0IGhhcyBldmVyIGJlZW4KJiM0MzttYXRjaGFibGUgY2FuIG5ldmVyIGhhdmUgaXRzIHNldCBjaGFuZ2VkIGFnYWluOiB0aGUgZmlyc3QgYGAxYGAgc2VhbHMgaXQsCiYjNDM7ZnJvbSB0aGVuIG9uIGBgJiM0MztgYCBpcyByZWZ1c2VkIHdpdGggYGAtRUJVU1lgYCwgYW5kIGFuIGVudHJ5IHJlZ2lzdGVyZWQKJiM0Mzt3aXRob3V0IGBgRGBgIGlzIHNlYWxlZCBmcm9tIHRoZSBzdGFydC4gQmluZGluZyBhIG5hbWUgdHdpY2UgaXMgcmVmdXNlZAomIzQzO3dpdGggYGAtRUVYSVNUYGAuCiYjNDM7CiYjNDM7U2VsZWN0aW9uIGlzIGJ5IG5hbWUgc28gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGhlIHByb2dyYW0gbmVlZCBub3QKJiM0MzthZ3JlZSBvbiBhbiBvcmRlciwgYW5kIHNvIHRoYXQgYSBoYW5kbGVyIGlzIG5vdCB0aWVkIHRvIHdoZXJlIGEgZGlzdHJpYnV0aW9uCiYjNDM7cHV0cyBpdHMgaW50ZXJwcmV0ZXJzLiBBIG5hbWUgaXMgYSBzaW5nbGUgd29yZCBvZiBwcmludGFibGUgQVNDSUksIGF0IG1vc3QKJiM0MzszMiBjaGFyYWN0ZXJzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBnaXZlcyB0aGUgcHJvZ3JhbSBgYC1FTk9FTlRgYCwKJiM0Mzt3aGljaCBpdCBjYW4gYWN0IG9uIG9yIHJldHVybi4gVGhlIGludGVycHJldGVyIHJ1bnMgdW5kZXIgdGhlIHBhdGggaXQgd2FzCiYjNDM7cmVnaXN0ZXJlZCB1bmRlciwgYW5kIHRoZSBlbnRyeSByZXBvcnRzIHdoYXQgaXQgYm91bmQ6OgomIzQzOwomIzQzOyAgICAkIGNhdCAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcWVtdQomIzQzOyAgICBlbmFibGVkCiYjNDM7ICAgIGJwZiBteV9oYW5kbGVyCiYjNDM7ICAgIGJwZi1pbnRlcnByZXRlciBhYXJjaDY0IC91c3IvYmluL3FlbXUtYWFyY2g2NAomIzQzOyAgICBicGYtaW50ZXJwcmV0ZXIgYXJtIC91c3IvYmluL3FlbXUtYXJtCiYjNDM7ICAgIGZsYWdzOgomIzQzOwomIzQzO1RoZSBwYXRoIHJlcG9ydGVkIGlzIHRoZSBvbmUgdGhlIGludGVycHJldGVyIHdhcyBib3VuZCB1bmRlciwgd2hpY2ggbmFtZWQKJiM0Mzt0aGUgZmlsZSBhdCB0aGF0IG1vbWVudDsgaXQgaXMgbm90IHJlLXJlc29sdmVkLCBzbyBpdCBpcyBhIHJlY29yZCBvZiB3aGF0CiYjNDM7d2FzIGJvdW5kIHJhdGhlciB0aGFuIGEgcHJvbWlzZSBhYm91dCB3aGF0IHRoYXQgcGF0aCBob2xkcyBub3cuCiAKIFRoZSBgYGxvYWRgYCBwcm9ncmFtIGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyIHdpdGgKIHRoZSBgYGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcoKWBgIGtmdW5jLiBJdCBpcyBpbnNlcnRlZCBiZXR3ZWVuIHRoZQpAQCAtMjI0LDggJiM0MzsyODYsMTEgQEAgaGFuZGxlciBjYW4gZGVjaWRlIHRoZW0gZGlmZmVyZW50bHkgZm9yIGVhY2ggYmluYXJ5IGl0IGhhbmRsZXM6CiAgIGBgUFRfSU5URVJQYGAgYW5kIHJ1bnMgdGhlIGJpbmFyeSBhcyBhIGZ1bGx5IG5hdGl2ZSBleGVjICh0aGUgYGBMYGAKICAgZmxhZykuIEl0IGV4Y2x1ZGVzIHRoZSBvdGhlciBmbGFncyBhbmQgYSBzdGFnZWQgaW50ZXJwcmV0ZXIgYXJndW1lbnQuCiAKLUJlY2F1c2UgdGhlc2UgYXJlIHByb2dyYW0gY2hvaWNlcywgYSBgYEJgYCBlbnRyeSBjYXJyaWVzIG5vIGZsYWdzIGluIHRoZQotcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCAocHJlLW9wZW4gYSBmaXhlZCBpbnRlcnByZXRlcikgaGFzIG5vIG1lYW5pbmcgZm9yIGl0LgomIzQzO0JlY2F1c2UgdGhlc2UgYXJlIHByb2dyYW0gY2hvaWNlcywgYSBgYEJgYCBlbnRyeSBjYXJyaWVzIG5vIGludm9jYXRpb24KJiM0MztmbGFncyBpbiB0aGUgcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCBoYXMgbm9uZSB0byBzcGVsbCBmb3IgaXQgZWl0aGVyLCBzaW5jZQomIzQzO3RoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgYWxyZWFkeSBwcmUtb3BlbiB3aGF0IGBgRmBgIHdvdWxkLiBUaGUKJiM0MztyZWdpc3RyYXRpb24gZGlyZWN0aXZlIGBgRGBgIGlzIHRoZSBleGNlcHRpb246IGl0IGRlY2lkZXMgaG93IHRoZSBlbnRyeQomIzQzO3N0YXJ0cyBvdXQsIG5vdCBob3cgdGhlIGludGVycHJldGVyIGlzIGludm9rZWQuCiAKIEhhbmRsZXJzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCB3YXMKIHJlZ2lzdGVyZWQgaW4sIGZhbGxpbmcgYmFjayB0byBhbmNlc3RvciBuYW1lc3BhY2VzLCBtaXJyb3JpbmcgaG93CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCA3MDdmOGExNGY4YTYzLi5hZDhjNGY2NGJmMTAyIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjLmMKQEAgLTI0LDYgJiM0MzsyNCw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZnNfY29udGV4dC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc3RydG94LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWFnaWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmludGsuaCZndDsKQEAgLTM3LDYgJiM0MzszOSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwogLyogRW50cnkgc3RhdHVzIGFuZCBtYXRjaCB0eXBlIGJpdCBudW1iZXJzLiAqLwogZW51bSBiaW5mbXRfbWlzY19lbnRyeV9iaXRzIHsKIAlNSVNDX0ZNVF9FTkFCTEVEX0JJVAk9IDAsCkBAIC01Miw4ICYjNDM7NTYsMTcgQEAgZW51bSBiaW5mbXRfbWlzY19lbnRyeV9mbGFncyB7CiAJTUlTQ19GTVRfT1BFTl9GSUxFCT0gKDFVICZsdDsmbHQ7IDI4KSwKIAlNSVNDX0ZNVF9UUkFOU1BBUkVOVAk9ICgxVSAmbHQ7Jmx0OyAyNyksCiAJTUlTQ19GTVRfTE9BREVSCQk9ICgxVSAmbHQ7Jmx0OyAyNiksCiYjNDM7CU1JU0NfRk1UX0RJU0FCTEVECT0gKDFVICZsdDsmbHQ7IDI1KSwKIH07CiAKJiM0MzsvKiBUaGUgZmxhZ3MgdGhhdCBzaGFwZSB0aGUgaW52b2NhdGlvbjsgYSAmIzM5O0ImIzM5OyBoYW5kbGVyIHBpY2tzIHRob3NlIHBlciBleGVjLiAqLwomIzQzOyNkZWZpbmUgTUlTQ19GTVRfSU5WT0NBVElPTl9GTEFHUyAoTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgfAlcCiYjNDM7CQkJCSAgIE1JU0NfRk1UX09QRU5fQklOQVJZIHwJXAomIzQzOwkJCQkgICBNSVNDX0ZNVF9DUkVERU5USUFMUyB8CVwKJiM0MzsJCQkJICAgTUlTQ19GTVRfT1BFTl9GSUxFIHwJCVwKJiM0MzsJCQkJICAgTUlTQ19GTVRfVFJBTlNQQVJFTlQgfAlcCiYjNDM7CQkJCSAgIE1JU0NfRk1UX0xPQURFUikKJiM0MzsKIC8qKgogICogc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgLSBhIGZsYWcgY2hhcmFjdGVyIG9mIHRoZSByZWdpc3RlciBzdHJpbmcKICAqIEBjOiB0aGUgY2hhcmFjdGVyIHVzZXJzcGFjZSB3cml0ZXMgYW5kIHJlYWRzIGJhY2sKQEAgLTc1LDYgJiM0Mzs4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyBtaXNjX2ZsYWdzW10gPSB7CiAJeyAmIzM5O0YmIzM5OywgTUlTQ19GTVRfT1BFTl9GSUxFLAkwLAkJCSYjMzQ7b3BlbiBpbnRlcnByZXRlciBmaWxlIG5vdyYjMzQ7CX0sCiAJeyAmIzM5O1QmIzM5OywgTUlTQ19GTVRfVFJBTlNQQVJFTlQsCU1JU0NfRk1UX09QRU5fQklOQVJZLAkmIzM0O3RyYW5zcGFyZW50JiMzNDsJCQl9LAogCXsgJiMzOTtMJiMzOTssIE1JU0NfRk1UX0xPQURFUiwJCTAsCQkJJiMzNDtsb2FkZXIgc3Vic3RpdHV0aW9uJiMzNDsJCX0sCiYjNDM7CXsgJiMzOTtEJiMzOTssIE1JU0NfRk1UX0RJU0FCTEVELAkwLAkJCSYjMzQ7cmVnaXN0ZXIgZGlzYWJsZWQmIzM0OwkJfSwKIH07CiAKIC8qIExvb2sgdXAgYSBmbGFnIGNoYXJhY3RlciwgTlVMTCBpZiBAYyBpcyBub3Qgb25lLiAqLwpAQCAtOTYsOSAmIzQzOzExMCw5IEBAIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7CiAJY29uc3QgY2hhciAqaW50ZXJwcmV0ZXI7CS8qIGZpbGVuYW1lIG9mIGludGVycHJldGVyICovCiAJY2hhciAqbmFtZTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0Jc3RydWN0IGZpbGUgKmludGVycF9maWxlOwogCWNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7CS8qIGJwZi1iYWNrZWQgaGFuZGxlciAoJiMzOTtCJiMzOTspICovCiAJY29uc3QgY2hhciAqYnBmX29wc19uYW1lOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGludGVycHM7CS8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi8KIAlyZWZjb3VudF90IHVzZXJzOwkJLyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovCiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAljaGFyIGJ1ZltdOwkJCS8qIHJlZ2lzdGVyIHN0cmluZywgZmllbGRzIHBvaW50IGluIGhlcmUgKi8KQEAgLTE3NSw3ICYjNDM7MTg5LDEyIEBAIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAJLyogV2FsayBhbGwgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlcnMuICovCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsICZhbXA7bWlzYy0mZ3Q7ZW50cmllcywgbm9kZSwKIAkJCQkgc3JjdV9yZWFkX2xvY2tfaGVsZCgmYW1wO2JtX2VudHJpZXNfc3JjdSkpIHsKLQkJLyogTWFrZSBzdXJlIHRoaXMgb25lIGlzIGN1cnJlbnRseSBlbmFibGVkLiAqLwomIzQzOwkJLyoKJiM0MzsJCSAqIE1ha2Ugc3VyZSB0aGlzIG9uZSBpcyBjdXJyZW50bHkgZW5hYmxlZC4gQW4gZW50cnkgZW50ZXJzCiYjNDM7CQkgKiB0aGUgbGlzdCBhdCBtb3N0IG9uY2UgYW5kIG9ubHkgd2hvbGU6IGl0cyBjb25maWd1cmF0aW9uIGlzCiYjNDM7CQkgKiBvcmRlcmVkIGJlZm9yZSB0aGUgcmN1IGluc2VydGlvbiB0aGF0IG1ha2VzIGl0IHZpc2libGUKJiM0MzsJCSAqIGhlcmUuCiYjNDM7CQkgKi8KIAkJaWYgKCF0ZXN0X2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgJmFtcDtlLSZndDtmbGFncykpCiAJCQljb250aW51ZTsKIApAQCAtMjE2LDYgJiM0MzsyMzUsMTA4IEBAIHN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsCiAJcmV0dXJuIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWUKJiM0MzsgKiBAaW50ZXJwczogdGhlIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoCiYjNDM7ICogQG5hbWU6IHRoZSBuYW1lIHRvIGxvb2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBOVUxMIGlmIEBpbnRlcnBzIGhhcyBub25lIGJ5IHRoYXQgbmFtZQomIzQzOyAqLwomIzQzO2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKgomIzQzO2JpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZXJwLCBpbnRlcnBzLCBsaXN0KQomIzQzOwkJaWYgKCFzdHJjbXAoaW50ZXJwLSZndDtuYW1lLCBuYW1lKSkKJiM0MzsJCQlyZXR1cm4gaW50ZXJwOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVW5kbyB0aGUgb3Blbl9leGVjKCkgYSBwcmUtb3BlbmVkIGludGVycHJldGVyIGZpbGUgY2FtZSBmcm9tLiAqLwomIzQzO3N0YXRpYyB2b2lkIGNsb3NlX2ludGVycF9maWxlKHN0cnVjdCBmaWxlICpmKQomIzQzO3sKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKGYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZik7CiYjNDM7CWZpbHBfY2xvc2UoZiwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO0RFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPcGVuIGFuIGludGVycHJldGVyIEBwYXRoIGZvciBleGVjdXRpb246IG5vdywgaW4gdGhlIHdyaXRlciYjMzk7cyBjb250ZXh0LAomIzQzOyAqIGFuZCAtIHNpbmNlIGJpbmZtdF9taXNjIG1vdW50cyBjYW4gYmUgdW5wcml2aWxlZ2VkIC0gd2l0aCBAY3JlZCwgdGhlCiYjNDM7ICogY3JlZGVudGlhbHMgdGhlIGNvbnRyb2wgZmlsZSBiZWluZyB3cml0dGVuIHdhcyBvcGVuZWQgd2l0aCwgbm90IHRoZQomIzQzOyAqIHdyaXRlciYjMzk7cyBvd24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBmaWxlICpvcGVuX2ludGVycF9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJc3RydWN0IGZpbGUgKmY7CiYjNDM7CiYjNDM7CXNjb3BlZF93aXRoX2NyZWRzKGNyZWQpCiYjNDM7CQlmID0gb3Blbl9leGVjKHBhdGgpOwomIzQzOwlpZiAoSVNfRVJSKGYpKQomIzQzOwkJcHJfbm90aWNlKCYjMzQ7cmVnaXN0ZXI6IGZhaWxlZCB0byBpbnN0YWxsIGludGVycHJldGVyICVzXG4mIzM0OywgcGF0aCk7CiYjNDM7CXJldHVybiBmOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWxlYXNlIHRoZSBpbnRlcnByZXRlcnMgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aC4gKi8KJiM0MztzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycCwgKnRtcDsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGludGVycCwgdG1wLCAmYW1wO2UtJmd0O2ludGVycHMsIGxpc3QpIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7aW50ZXJwLSZndDtsaXN0KTsKJiM0MzsJCWNsb3NlX2ludGVycF9maWxlKGludGVycC0mZ3Q7ZmlsZSk7CiYjNDM7CQlrZnJlZShpbnRlcnApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlciAtIGJpbmQgYW4gb3BlbmVkIGludGVycHJldGVyIHRvIEBlCiYjNDM7ICogQGU6IGVudHJ5IGJlaW5nIGNvbmZpZ3VyZWQKJiM0MzsgKiBAbmFtZTogbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHdpbGwgc2VsZWN0IGl0IGJ5OyBlbXB0eSBmb3IgdGhlIGZpeGVkCiYjNDM7ICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljIGVudHJ5CiYjNDM7ICogQHBhdGg6IHRoZSBwYXRoIEBmIHdhcyBvcGVuZWQgZnJvbQomIzQzOyAqIEBmOiB0aGUgaW50ZXJwcmV0ZXIsIG9wZW5lZCBmb3IgZXhlY3V0aW9uCiYjNDM7ICoKJiM0MzsgKiBFdmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiBAZiwgc28gdGhlIHBhdGggZGVjaWRlZCB3aGljaCBmaWxlIGlzIGJvdW5kCiYjNDM7ICogYW5kIG5vdGhpbmcgZWxzZTogaXQgaXMgbm90IHJlc29sdmVkIGFnYWluLCBpbiBhbnkgbmFtZXNwYWNlLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBoYXMgdG8gaGF2ZSB2YWxpZGF0ZWQgQG5hbWUgYW5kIEBwYXRoLCBlc3RhYmxpc2hlZCB0aGF0IEBlCiYjNDM7ICogY2Fubm90IGJlIG1hdGNoZWQgeWV0LCBhbmQgb3ducyBAZiB1bnRpbCB0aGlzIHN1Y2NlZWRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZmlsZSAqZikKJiM0Mzt7CiYjNDM7CXNpemVfdCBubGVuID0gc3RybGVuKG5hbWUpLCBwbGVuID0gc3RybGVuKHBhdGgpOwomIzQzOwlzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7CiYjNDM7CiYjNDM7CWlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycCgmYW1wO2UtJmd0O2ludGVycHMsIG5hbWUpKQomIzQzOwkJcmV0dXJuIC1FRVhJU1Q7CiYjNDM7CWlmIChsaXN0X2NvdW50X25vZGVzKCZhbXA7ZS0mZ3Q7aW50ZXJwcykgJmd0Oz0gQklORk1UX01JU0NfSU5URVJQX01BWCkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwomIzQzOwkvKiBPbmUgYWxsb2NhdGlvbiwgYm90aCBzdHJpbmdzIGluIGl0LCBsaWtlIHRoZSBlbnRyeSYjMzk7cyBvd24gYnVmZmVyLiAqLwomIzQzOwlpbnRlcnAgPSBrbWFsbG9jKHN0cnVjdF9zaXplKGludGVycCwgbmFtZSwgbmxlbiAmIzQzOyBwbGVuICYjNDM7IDIpLAomIzQzOwkJCSBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwlpZiAoIWludGVycCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpbnRlcnAtJmd0O3BhdGggPSBpbnRlcnAtJmd0O25hbWUgJiM0MzsgbmxlbiAmIzQzOyAxOwomIzQzOwlzdHJzY3B5KGludGVycC0mZ3Q7bmFtZSwgbmFtZSwgbmxlbiAmIzQzOyAxKTsKJiM0MzsJc3Ryc2NweShpbnRlcnAtJmd0O25hbWUgJiM0MzsgbmxlbiAmIzQzOyAxLCBwYXRoLCBwbGVuICYjNDM7IDEpOwomIzQzOwlpbnRlcnAtJmd0O2ZpbGUgPSBmOwomIzQzOwkvKiBQdWJsaXNoIHRoZSBub2RlOiBhIGxvY2tsZXNzIGNhdCBtYXkgYmUgd2Fsa2luZyB0aGUgbGlzdC4gKi8KJiM0MzsJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtpbnRlcnAtJmd0O2xpc3QsICZhbXA7ZS0mZ3Q7aW50ZXJwcyk7CiYjNDM7CXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IGludGVycHJldGVyOiAlcyB7JXN9XG4mIzM0OywgbmFtZSwgcGF0aCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQogewogCXN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSwgcmN1KTsKQEAgLTIzMiwyMSAmIzQzOzM1MywzNiBAQCBzdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKICAqCiAgKiBGcmVlIGVudHJ5IHN5bmNpbmcgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgYW5kIGRlZmVyIGZpbmFsIGZyZWUgdG8KICAqIGxvYWRfbWlzY19iaW5hcnkoKSBpbiBjYXNlIGl0IGlzIHVzaW5nIHRoZSBiaW5hcnkgdHlwZSBoYW5kbGVyIHdlIHdlcmUKLSAqIHJlcXVlc3RlZCB0byByZW1vdmUuCiYjNDM7ICogcmVxdWVzdGVkIHRvIHJlbW92ZS4gQWxzbyB0aGUgdGVhcmRvd24gZm9yIGEgcmVnaXN0cmF0aW9uIHRoYXQgZmFpbHMKJiM0MzsgKiBiZWZvcmUgYWRkX2VudHJ5KCkgcHVibGlzaGVzIHRoZSBlbnRyeS4KICAqLwogc3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSkKIHsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtlLSZndDt1c2VycykpIHsKLQkJaWYgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX09QRU5fRklMRSkgewotCQkJZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGUtJmd0O2ludGVycF9maWxlKTsKLQkJCWZpbHBfY2xvc2UoZS0mZ3Q7aW50ZXJwX2ZpbGUsIE5VTEwpOwotCQl9CiYjNDM7CQllbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpOwogCQkvKiBXYWxrZXJzIG1heSBzdGlsbCBkZXJlZmVyZW5jZSB0aGlzIGVudHJ5LCBldmVuIHNsZWVwaW5nLiAqLwogCQljYWxsX3NyY3UoJmFtcDtibV9lbnRyaWVzX3NyY3UsICZhbXA7ZS0mZ3Q7cmN1LCBibV9lbnRyeV9mcmVlX3JjdSk7CiAJfQogfQogCi1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBpZiAoX1QpIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpCiYjNDM7REVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgcHV0X2JpbmZtdF9oYW5kbGVyKF9UKSkKJiM0MzsKJiM0MzsvKiBEcm9wIGV2ZXJ5dGhpbmcgYSBsb2FkIHByb2dyYW0gc3RhZ2VkIGZvciB0aGlzIGV4ZWMuICovCiYjNDM7c3RhdGljIHZvaWQgZHJvcF9zdGFnZWRfc2VsZWN0aW9uKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiYjNDM7ewomIzQzOwlrZnJlZShicHJtLSZndDticGZfaW50ZXJwKTsKJiM0MzsJYnBybS0mZ3Q7YnBmX2ludGVycCA9IE5VTEw7CiYjNDM7CWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnBfYXJnKTsKJiM0MzsJYnBybS0mZ3Q7YnBmX2ludGVycF9hcmcgPSBOVUxMOwomIzQzOwlpZiAoYnBybS0mZ3Q7YnBmX2ludGVycF9maWxlKSB7CiYjNDM7CQlmcHV0KGJwcm0tJmd0O2JwZl9pbnRlcnBfZmlsZSk7CiYjNDM7CQlicHJtLSZndDticGZfaW50ZXJwX2ZpbGUgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWJwcm0tJmd0O2JwZl9mbGFncyA9IDA7CiYjNDM7fQogCiAvKioKICAqIGN1cnJlbnRfYmluZm10X21pc2MgLSBnZXQgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIG9mIHRoZSBjYWxsZXImIzM5O3MgdXNlciBuYW1lc3BhY2UKQEAgLTI4MSw3ICYjNDM7NDE3LDggQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzYyAqY3VycmVudF9iaW5mbXRfbWlzYyh2b2lkKQogICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkCiAgKgogICogQSBzdGF0aWMgZW50cnkgY2FycmllcyBpdHMgaW50ZXJwcmV0ZXIgcGF0aCwgZm9yIGEgJiMzOTtCJiMzOTsgZW50cnkgdGhlCi0gKiBoYW5kbGVyJiMzOTtzIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0LiBUaGUgbWF0Y2ggaXMgY29tbWl0dGVkLCBzbyBhIGZhaWxpbmcKJiM0MzsgKiBoYW5kbGVyJiMzOTtzIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0LCBlaXRoZXIgYnkgcGF0aCBvciBieSB0aGUgbmFtZSBvZiBvbmUKJiM0MzsgKiBvZiB0aGUgaW50ZXJwcmV0ZXJzIHRoZSBlbnRyeSBib3VuZC4gVGhlIG1hdGNoIGlzIGNvbW1pdHRlZCwgc28gYSBmYWlsaW5nCiAgKiBwcm9ncmFtIGZhaWxzIHRoZSBleGVjLgogICoKICAqIFJldHVybjogdGhlIGludGVycHJldGVyIG9uIHN1Y2Nlc3MsIGFuIEVSUl9QVFIgb24gZmFpbHVyZQpAQCAtMjkxLDE1ICYjNDM7NDI4LDIwIEBAIHN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLAogewogCWludCByZXR2YWw7CiAKJiM0MzsJLyoKJiM0MzsJICogRHJvcCB3aGF0IGEgcHJldmlvdXMgY2hhaW4gbGV2ZWwgc3RhZ2VkIGJlZm9yZSBhbnl0aGluZyBjYW4gcGljayBpdAomIzQzOwkgKiB1cC4gQSBzdGF0aWMgZW50cnkgc3RhZ2VzIG5vdGhpbmcgYnV0IGNvbnN1bWVzIGEgc3RhZ2VkIGZpbGUganVzdAomIzQzOwkgKiBsaWtlIGEgJiMzOTtCJiMzOTsgZW50cnkgZG9lcy4KJiM0MzsJICovCiYjNDM7CWRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihicHJtKTsKJiM0MzsKIAlpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm4gZS0mZ3Q7aW50ZXJwcmV0ZXI7CiAKLQkvKiBEcm9wIGFueSBpbnRlcnByZXRlciBvciBmbGFncyBhIHByZXZpb3VzIGNoYWluIGxldmVsIHN0YWdlZC4gKi8KLQlrZnJlZShicHJtLSZndDticGZfaW50ZXJwKTsKLQlicHJtLSZndDticGZfaW50ZXJwID0gTlVMTDsKLQlicHJtLSZndDticGZfZmxhZ3MgPSAwOwotCiYjNDM7CS8qIFRoZSBpbnRlcnByZXRlcnMgdGhpcyBlbnRyeSBsZXRzIHRoZSBwcm9ncmFtIGNob29zZSBmcm9tLiAqLwomIzQzOwlicHJtLSZndDticGZfaW50ZXJwcyA9ICZhbXA7ZS0mZ3Q7aW50ZXJwczsKIAlyZXR2YWwgPSBlLSZndDticGZfb3BzLSZndDtsb2FkKGJwcm0pOwomIzQzOwlicHJtLSZndDticGZfaW50ZXJwcyA9IE5VTEw7CiAJaWYgKHJldHZhbCkgewogCQkvKiBLZWVwIGEgcHJvZ3JhbS1zdXBwbGllZCBlcnJvciB3aXRoaW4gZXJybm8gcmFuZ2UuICovCiAJCWlmIChyZXR2YWwgJmd0OyAwIHx8IHJldHZhbCAmbHQ7IC1NQVhfRVJSTk8pCkBAIC0zMTcsOSAmIzQzOzQ1OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLAogCiBkcm9wX3N0YWdlZDoKIAkvKiBBIGZhaWxpbmcgbG9hZCBsZWF2ZXMgbm90aGluZyBiZWhpbmQgZm9yIGxhdGVyIGVudHJpZXMuICovCi0Ja2ZyZWUoYnBybS0mZ3Q7YnBmX2ludGVycF9hcmcpOwotCWJwcm0tJmd0O2JwZl9pbnRlcnBfYXJnID0gTlVMTDsKLQlicHJtLSZndDticGZfZmxhZ3MgPSAwOwomIzQzOwlkcm9wX3N0YWdlZF9zZWxlY3Rpb24oYnBybSk7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KIApAQCAtMzY0LDIzICYjNDM7NTA0LDM2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVudHJ5X2ludm9jYXRpb25fZmxhZ3MoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLAogLyoqCiAgKiBlbnRyeV9vcGVuX2ludGVycHJldGVyIC0gb3BlbiB0aGUgZW50cnkmIzM5O3MgaW50ZXJwcmV0ZXIgZm9yIGV4ZWN1dGlvbgogICogQGU6IG1hdGNoZWQgYmluYXJ5IHR5cGUgaGFuZGxlcgomIzQzOyAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZAogICogQGludGVycHJldGVyOiB0aGUgaW50ZXJwcmV0ZXIgc2VsZWN0ZWQgZm9yIHRoaXMgZXhlYwogICoKICAqIEFuICYjMzk7RiYjMzk7IGVudHJ5IGhhbmRzIG91dCBhIGNsb25lIG9mIHRoZSBmaWxlIGl0IHByZS1vcGVuZWQgYXQgcmVnaXN0cmF0aW9uLAotICogYW55IG90aGVyIGVudHJ5IG9wZW5zIHRoZSBzZWxlY3RlZCBwYXRoLgomIzQzOyAqIGFuZCBzbyBkb2VzIGEgJiMzOTtCJiMzOTsgZW50cnkgd2hvc2UgbG9hZCBwcm9ncmFtIHNlbGVjdGVkIG9uZSBvZiB0aGUKJiM0MzsgKiBpbnRlcnByZXRlcnMgaXQgYm91bmQuIEFueSBvdGhlciBlbnRyeSBvcGVucyB0aGUgc2VsZWN0ZWQgcGF0aC4KICAqCiAgKiBSZXR1cm46IHRoZSBvcGVuZWQgaW50ZXJwcmV0ZXIgb24gc3VjY2VzcywgYW4gRVJSX1BUUiBvbiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCQkJCQkgICBjb25zdCBjaGFyICppbnRlcnByZXRlcikKIHsKIAlzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGUgX19mcmVlKGZwdXQpID0gTlVMTDsKJiM0MzsJc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwOwomIzQzOwlzdHJ1Y3QgZmlsZSAqYm91bmQ7CiAJaW50IHJldHZhbDsKIAotCWlmICghKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX09QRU5fRklMRSkpCiYjNDM7CWlmIChicHJtLSZndDticGZfaW50ZXJwX2ZpbGUpIHsKJiM0MzsJCWJvdW5kID0gYnBybS0mZ3Q7YnBmX2ludGVycF9maWxlOwomIzQzOwl9IGVsc2UgaWYgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX09QRU5fRklMRSkgewomIzQzOwkJLyogQW4gJiMzOTtGJiMzOTsgZW50cnkgcHJlLW9wZW5lZCBleGFjdGx5IG9uZSBpbnRlcnByZXRlci4gKi8KJiM0MzsJCWludGVycCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtlLSZndDtpbnRlcnBzLAomIzQzOwkJCQkJICBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwLCBsaXN0KTsKJiM0MzsJCWJvdW5kID0gaW50ZXJwLSZndDtmaWxlOwomIzQzOwl9IGVsc2UgewogCQlyZXR1cm4gb3Blbl9leGVjKGludGVycHJldGVyKTsKJiM0MzsJfQogCi0JaW50ZXJwX2ZpbGUgPSBmaWxlX2Nsb25lX29wZW4oZS0mZ3Q7aW50ZXJwX2ZpbGUpOwomIzQzOwlpbnRlcnBfZmlsZSA9IGZpbGVfY2xvbmVfb3Blbihib3VuZCk7CiAJaWYgKElTX0VSUihpbnRlcnBfZmlsZSkpCiAJCXJldHVybiBpbnRlcnBfZmlsZTsKIApAQCAtNDkwLDcgJiM0Mzs2NDMsNyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkgKiB0byB0aGUgcmVhbCBmb3JtYXQgaW4gdGhlIHNhbWUgcm91bmQuCiAJICovCiAJaWYgKGZsYWdzICZhbXA7IE1JU0NfRk1UX0xPQURFUikgewotCQlpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBpbnRlcnByZXRlcik7CiYjNDM7CQlpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBicHJtLCBpbnRlcnByZXRlcik7CiAJCWlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKSB7CiAJCQlyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTsKIAkJCS8qIERlY2xpbmluZyBoZXJlIHdvdWxkIHJ1biB0aGUgYmluYXJ5JiMzOTtzIG93biBQVF9JTlRFUlAuICovCkBAIC01MTIsNyAmIzQzOzY2NSw3IEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCWlmIChyZXR2YWwgJmx0OyAwKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JaW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgaW50ZXJwcmV0ZXIpOwomIzQzOwlpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBicHJtLCBpbnRlcnByZXRlcik7CiAJaWYgKElTX0VSUihpbnRlcnBfZmlsZSkpCiAJCXJldHVybiBQVFJfRVJSKGludGVycF9maWxlKTsKIApAQCAtNjg0LDcgJiM0Mzs4MzcsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCQkJICAgICAgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKLQljaGFyICpidWYsICpwLCAqZmxhZ3M7CiYjNDM7CWNoYXIgKmJ1ZiwgKnA7CiAJY2hhciBkZWw7CiAKIAlwcl9kZWJ1ZygmIzM0O3JlZ2lzdGVyOiByZWNlaXZlZCAlenUgYnl0ZXNcbiYjMzQ7LCBjb3VudCk7CkBAIC03MDEsNiAmIzQzOzg1NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCXAgPSBidWYgPSBlLSZndDtidWY7CiAKIAltZW1zZXQoZSwgMCwgc2l6ZW9mKCplKSk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZS0mZ3Q7aW50ZXJwcyk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpCiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCkBAIC03ODAsMTggJiM0Mzs5MzQsMzAgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJfQogCiAJLyogUGFyc2UgdGhlICYjMzk7ZmxhZ3MmIzM5OyBmaWVsZC4gKi8KLQlmbGFncyA9IHA7CiAJcCA9IGNoZWNrX3NwZWNpYWxfZmxhZ3MocCwgZSk7CiAKIAkvKgogCSAqIEEgYnBmIGhhbmRsZXIgZGVjaWRlcyB0aGUgaW52b2NhdGlvbiBmbGFncyBwZXIgZXhlYyB3aXRoCiAJICogYnBmX2JpbnBybV9zZXRfZmxhZ3MoKSByYXRoZXIgdGhhbiBmaXhpbmcgdGhlbSBhdCByZWdpc3RyYXRpb24sIGFuZAotCSAqICYjMzk7RiYjMzk7IChwcmUtb3BlbiBhIGZpeGVkIGludGVycHJldGVyKSBpcyBtZWFuaW5nbGVzcyBmb3IgaXQsIHNvIGEgJiMzOTtCJiMzOTsKLQkgKiBlbnRyeSYjMzk7cyBmbGFncyBmaWVsZCBoYXMgdG8gYmUgZW1wdHkuCiYjNDM7CSAqIHRoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgcHJlLW9wZW4gd2hhdCAmIzM5O0YmIzM5OyB3b3VsZCBoYXZlLCBzbyBhICYjMzk7QiYjMzk7CiYjNDM7CSAqIGVudHJ5IGNhcnJpZXMgbm8gaW52b2NhdGlvbiBmbGFncy4KIAkgKi8KLQlpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgJmFtcDtlLSZndDtmbGFncykgJmFtcDsmYW1wOyBwICE9IGZsYWdzKQomIzQzOwlpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgJmFtcDtlLSZndDtmbGFncykgJmFtcDsmYW1wOwomIzQzOwkgICAgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX0lOVk9DQVRJT05fRkxBR1MpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAomIzQzOwkvKgomIzQzOwkgKiAmIzM5O0QmIzM5OyBpcyBhIGRpcmVjdGl2ZSBmb3IgdGhpcyByZWdpc3RyYXRpb24gcmF0aGVyIHRoYW4gYSBsYXN0aW5nCiYjNDM7CSAqIHByb3BlcnR5LCBzbyBjb25zdW1lIGl0OiB0aGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBhbmQgc3RheXMKJiM0MzsJICogb3V0IG9mIHRoZSBzZWFyY2ggbGlzdCB1bnRpbCAmIzM5OzEmIzM5OyBpcyB3cml0dGVuIHRvIGl0cyBlbnRyeSBmaWxlLgomIzQzOwkgKiBTdGF5aW5nIG91dCBpcyB3aGF0IGxlYXZlcyBpdCBvcGVuIHRvIGJlaW5nIGdpdmVuIGludGVycHJldGVyczsKJiM0MzsJICogdGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgaXQsIGZvciBnb29kLgomIzQzOwkgKi8KJiM0MzsJaWYgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX0RJU0FCTEVEKSB7CiYjNDM7CQllLSZndDtmbGFncyAmYW1wOz0gfk1JU0NfRk1UX0RJU0FCTEVEOwomIzQzOwkJY2xlYXJfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCAmYW1wO2UtJmd0O2ZsYWdzKTsKJiM0MzsJfQomIzQzOwogCS8qIFRyYW5zcGFyZW5jeSBwcmVzZXJ2ZXMgdGhlIHdob2xlIGFyZ3YsIGFyZ3ZbMF0gaW5jbHVkZWQuICovCiAJaWYgKChlLSZndDtmbGFncyAmYW1wOyBNSVNDX0ZNVF9UUkFOU1BBUkVOVCkgJmFtcDsmYW1wOwogCSAgICAoZS0mZ3Q7ZmxhZ3MgJmFtcDsgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApKQpAQCAtODE0LDYgJiM0Mzs5ODAsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkgICAgZS0mZ3Q7aW50ZXJwcmV0ZXJbMF0gIT0gJiMzOTsvJiMzOTspCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiYjNDM7CS8qIEJvcm4gaG9sZGluZyBvbmUgcmVmZXJlbmNlOyBwdXRfYmluZm10X2hhbmRsZXIoKSBpcyB0aGUgdGVhcmRvd24uICovCiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2UtJmd0O3VzZXJzLCAxKTsKIAlyZXR1cm4gbm9fZnJlZV9wdHIoZSk7CiB9CiAKQEAgLTgyNSwxOCAmIzQzOzk5MywxNyBAQCBlbnVtIGJtX2NvbW1hbmQgewogCUJNX0NNRF9SRU1PVkUsCS8qICYjMzQ7LTEmIzM0OyAqLwogfTsKIAomIzQzOy8qIExvbmdlc3Qgb2YgdGhlIGNvbW1hbmRzIGFib3ZlLCAmIzM0Oy0xXG4mIzM0Oy4gKi8KJiM0MzsjZGVmaW5lIE1BWF9DT01NQU5EX0xFTkdUSCAzCiYjNDM7CiAvKgogICogUGFyc2Ugd2hhdCB1c2Vyc3BhY2Ugd3JvdGUgdG8gL3N0YXR1cyBvciBhbiBlbnRyeSBmaWxlOiAmIzM5OzEmIzM5OyBlbmFibGVzLAogICogJiMzOTswJiMzOTsgZGlzYWJsZXMgYW5kICYjMzk7LTEmIzM5OyByZW1vdmVzIHRoZSBlbnRyeSBvciBhbGwgZW50cmllcy4KICAqLwotc3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCkKJiM0MztzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciAqcywgc2l6ZV90IGNvdW50KQogewotCWNoYXIgc1s0XTsKLQotCWlmIChjb3VudCAmZ3Q7IDMpCiYjNDM7CWlmIChjb3VudCAmZ3Q7IE1BWF9DT01NQU5EX0xFTkdUSCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gQk1fQ01EX0lHTk9SRTsKIAlpZiAoc1tjb3VudCAtIDFdID09ICYjMzk7XG4mIzM5OykKQEAgLTg1MCw4ICYjNDM7MTAxNywyNiBAQCBzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogCXJldHVybiAtRUlOVkFMOwogfQogCiYjNDM7LyogQ29weSBpbiBhIGNvbW1hbmQgZnJvbSBhIGZpbGUgdGhhdCB0YWtlcyBub3RoaW5nIGVsc2UsIGFuZCBwYXJzZSBpdC4gKi8KJiM0MztzdGF0aWMgaW50IHJlYWRfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwljaGFyIHNbTUFYX0NPTU1BTkRfTEVOR1RIICYjNDM7IDFdOwomIzQzOwomIzQzOwlpZiAoY291bnQgJmd0OyBzaXplb2YocykgLSAxKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcihzLCBidWZmZXIsIGNvdW50KSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gcGFyc2VfY29tbWFuZChzLCBjb3VudCk7CiYjNDM7fQomIzQzOwogLyogZ2VuZXJpYyBzdHVmZiAqLwogCiYjNDM7LyogVGhlIHJvb3QgZGlyZWN0b3J5JiMzOTtzIGlub2RlOyBpdHMgbG9jayBzZXJpYWxpemVzIGNvbmZpZ3VyaW5nIGFuIGluc3RhbmNlLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKJiM0Mzt7CiYjNDM7CXJldHVybiBkX2lub2RlKHNiLSZndDtzX3Jvb3QpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGJtX3NlcV9oZXgoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1OCAqZGF0YSwgaW50IHNpemUpCiB7CiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBzaXplOyBpJiM0MzsmIzQzOykKQEAgLTg2NywxMCAmIzQzOzEwNTIsMjMgQEAgc3RhdGljIGludCBibV9lbnRyeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCWVsc2UKIAkJc2VxX3B1dHMobSwgJiMzNDtkaXNhYmxlZFxuJiMzNDspOwogCi0JaWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKQomIzQzOwlpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCXN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDsKJiM0MzsKIAkJc2VxX3ByaW50ZihtLCAmIzM0O2JwZiAlc1xuJiMzNDssIGUtJmd0O2JwZl9vcHMtJmd0O25hbWUpOwotCWVsc2UKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIHN0YWdlZCBlbnRyeSYjMzk7cyBzZXQgY2FuIHN0aWxsIGdyb3csIHNvIGV2ZXJ5IGJpbmRpbmcgaXMKJiM0MzsJCSAqIHJjdS1wdWJsaXNoZWQuIFRoZSBvcGVuIGZpbGUgcGlucyB0aGUgZW50cnkgYW5kIHdpdGggaXQKJiM0MzsJCSAqIGV2ZXJ5IG5vZGUsIHNvIHJjdSBpcyBmb3IgdGhlIHRlYXJpbmcsIG5vdCB0aGUgbGlmZXRpbWUuCiYjNDM7CQkgKi8KJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGludGVycCwgJmFtcDtlLSZndDtpbnRlcnBzLCBsaXN0KQomIzQzOwkJCXNlcV9wcmludGYobSwgJiMzNDticGYtaW50ZXJwcmV0ZXIgJXMgJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBpbnRlcnAtJmd0O25hbWUsIGludGVycC0mZ3Q7cGF0aCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJfSBlbHNlIHsKIAkJc2VxX3ByaW50ZihtLCAmIzM0O2ludGVycHJldGVyICVzXG4mIzM0OywgZS0mZ3Q7aW50ZXJwcmV0ZXIpOwomIzQzOwl9CiAKIAkvKiBwcmludCB0aGUgc3BlY2lhbCBmbGFncyAqLwogCXNlcV9wdXRzKG0sICYjMzQ7ZmxhZ3M6ICYjMzQ7KTsKQEAgLTk5MiwxMCAmIzQzOzExOTAsMTEgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywKIC8qIFJlbW92ZSBAZSB1bmxlc3MgaXQgd2FzIGFscmVhZHkgcmVtb3ZlZC4gKi8KIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IGlub2RlICpyb290ID0gZF9pbm9kZShzYi0mZ3Q7c19yb290KTsKJiM0MzsJc3RydWN0IGlub2RlICpyb290ID0gYm1fcm9vdF9pbm9kZShzYik7CiAKIAlpbm9kZV9sb2NrX25lc3RlZChyb290LCBJX01VVEVYX1BBUkVOVCk7Ci0JaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO2UtJmd0O25vZGUpKQomIzQzOwkvKiBBIHN0YWdlZCBlbnRyeSBpcyBub3QgaGFzaGVkOyB0aGUgZGVudHJ5IHNheXMgaWYgaXQgd2FzIHJlbW92ZWQuICovCiYjNDM7CWlmICghZF91bmhhc2hlZChlLSZndDtkZW50cnkpKQogCQlyZW1vdmVfYmluZm10X2hhbmRsZXIoaV9iaW5mbXRfbWlzYyhyb290KSwgZSk7CiAJaW5vZGVfdW5sb2NrKHJvb3QpOwogfQpAQCAtMTAwNCwxMyAmIzQzOzEyMDMsMjEgQEAgc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9hbGxfZW50cmllcyhzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsCiAJCQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBpbm9kZSAqcm9vdCA9IGRfaW5vZGUoc2ItJmd0O3Nfcm9vdCk7Ci0Jc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplOwotCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OwomIzQzOwlzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKHNiKTsKJiM0MzsJc3RydWN0IGRlbnRyeSAqY2hpbGQgPSBOVUxMOwogCiAJaW5vZGVfbG9ja19uZXN0ZWQocm9vdCwgSV9NVVRFWF9QQVJFTlQpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbmV4dCwgJmFtcDttaXNjLSZndDtlbnRyaWVzLCBub2RlKQotCQlyZW1vdmVfYmluZm10X2hhbmRsZXIobWlzYywgZSk7CiYjNDM7CS8qCiYjNDM7CSAqIFdhbGsgdGhlIGRpcmVjdG9yeSByYXRoZXIgdGhhbiB0aGUgc2VhcmNoIGxpc3Q6IGEgc3RhZ2VkIGVudHJ5CiYjNDM7CSAqIGlzIGluIHRoZSBmb3JtZXIgYnV0IG5vdCB5ZXQgaW4gdGhlIGxhdHRlci4gVGhlIGNvbnRyb2wgZmlsZXMKJiM0MzsJICogY2Fycnkgbm8gZW50cnkgYW5kIHN0YXkuCiYjNDM7CSAqLwomIzQzOwl3aGlsZSAoKGNoaWxkID0gZmluZF9uZXh0X2NoaWxkKHNiLSZndDtzX3Jvb3QsIGNoaWxkKSkpIHsKJiM0MzsJCXN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGRfaW5vZGUoY2hpbGQpLSZndDtpX3ByaXZhdGU7CiYjNDM7CiYjNDM7CQlpZiAoZSkKJiM0MzsJCQlyZW1vdmVfYmluZm10X2hhbmRsZXIobWlzYywgZSk7CiYjNDM7CX0KIAlpbm9kZV91bmxvY2socm9vdCk7CiB9CiAKQEAgLTEwNTYsMjAgJiM0MzsxMjYzLDEzOCBAQCBzdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIExvbmdlc3QgJiMzOTsmIzQzOyZsdDtuYW1lJmd0OyAmbHQ7cGF0aCZndDsmIzM5OyBhIHdyaXRlIGNhbiBzcGVsbCwgYW5kIHdpdGggaXQgdGhlIGxvbmdlc3QKJiM0MzsgKiBjb21tYW5kIGFuIGVudHJ5IGZpbGUgdGFrZXM6IHRoZSB0d28gZGVsaW1pdGVycyBhbmQgYSBuZXdsaW5lIG9uIHRvcCBvZgomIzQzOyAqIHRoZSB0d28gbmFtZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNQVhfQklORElOR19MRU5HVEggKEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWCAmIzQzOyBQQVRIX01BWCAmIzQzOyAzKQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnkKJiM0MzsgKiBAZTogdGhlIGVudHJ5CiYjNDM7ICogQGZpbGU6IHRoZSBlbnRyeSBmaWxlIGJlaW5nIHdyaXR0ZW4gdG8sIGZvciBpdHMgY3JlZGVudGlhbHMKJiM0MzsgKiBAYnVmOiB0aGUgJiMzOTsmIzQzOyZsdDtuYW1lJmd0OyAmbHQ7cGF0aCZndDsmIzM5OyBjb21tYW5kLCBwYXJzZWQgaW4gcGxhY2UgYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIKJiM0MzsgKiBAY291bnQ6IGl0cyBsZW5ndGgKJiM0MzsgKgomIzQzOyAqIEEgJiMzOTtEJiMzOTsgZW50cnkgaXMgcmVnaXN0ZXJlZCBvdXRzaWRlIHRoZSBzZWFyY2ggbGlzdCwgd2hpY2ggaXMgd2hhdCBsZWF2ZXMKJiM0MzsgKiBpdCBvcGVuIHRvIGJlaW5nIGNvbmZpZ3VyZWQ6IGl0IGNhbm5vdCBiZSBtYXRjaGVkLCBzbyBubyBleGVjIGNhbiBiZQomIzQzOyAqIGhvbGRpbmcgaXRzIGludGVycHJldGVycyBhbmQgdGhlIHNldCBjYW4gc3RpbGwgZ3Jvdy4gSXRzIGZpcnN0IGVuYWJsZQomIzQzOyAqIHB1Ymxpc2hlcyBpdCBhbmQgZW5kcyB0aGF0LiBPbmUgaW50ZXJwcmV0ZXIgcGVyIHdyaXRlLCB1cCB0bwomIzQzOyAqIEJJTkZNVF9NSVNDX0lOVEVSUF9NQVggb2YgdGhlbSwgbm9uZSBvZiB3aGljaCBoYXMgdG8gZml0IGluIGEgcmVnaXN0ZXIKJiM0MzsgKiBzdHJpbmcuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IEBjb3VudCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwKJiM0MzsJCQkJICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGZpbGUgKmYgX19mcmVlKGNsb3NlX2ludGVycF9maWxlKSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoZmlsZV9pbm9kZShmaWxlKS0mZ3Q7aV9zYik7CiYjNDM7CXNpemVfdCBubGVuLCBwbGVuOwomIzQzOwljaGFyICpuYW1lLCAqcGF0aDsKJiM0MzsJaW50IHJldHZhbDsKJiM0MzsKJiM0MzsJLyogU2V0dGxlZCBiZWZvcmUgdGhlIG9wZW46IHR5cGUgaXMgZml4ZWQsIHB1YmxpY2F0aW9uIGlzIHBlcm1hbmVudC4gKi8KJiM0MzsJaWYgKCF0ZXN0X2JpdChNSVNDX0ZNVF9CUEZfQklULCAmYW1wO2UtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWhsaXN0X3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7ZS0mZ3Q7bm9kZSkpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkvKiAmIzM5OyYjNDM7Jmx0O25hbWUmZ3Q7ICZsdDtwYXRoJmd0OyYjMzk7OiB0aGUgcGF0aCBpcyBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0IHNwYWNlLiAqLwomIzQzOwluYW1lID0gYnVmICYjNDM7IDE7CiYjNDM7CXBhdGggPSBzdHJjaHIobmFtZSwgJiMzOTsgJiMzOTspOwomIzQzOwlpZiAoIXBhdGgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJKnBhdGgmIzQzOyYjNDM7ID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwlwbGVuID0gc3RybGVuKHBhdGgpOwomIzQzOwkvKiBUaGUgY29tbWFuZCBoYXMgdG8gZW5kIGF0IHRoZSB3cml0ZSwgbGlrZSBhIHJlZ2lzdGVyIHN0cmluZy4gKi8KJiM0MzsJaWYgKHBhdGggJiM0MzsgcGxlbiAhPSBidWYgJiM0MzsgY291bnQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHBsZW4gJmFtcDsmYW1wOyBwYXRoW3BsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCiYjNDM7CQlwYXRoWy0tcGxlbl0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CS8qIFJlc29sdmVkIG5vdywgc28gYSByZWxhdGl2ZSBwYXRoIHdvdWxkIG5hbWUgdGhlIHdyaXRlciYjMzk7cyBjd2QuICovCiYjNDM7CWlmIChwYXRoWzBdICE9ICYjMzk7LyYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW5sZW4gPSBwYXRoIC0gbmFtZSAtIDE7CiYjNDM7CWlmICghbmxlbiB8fCBubGVuICZndDsgQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CS8qIFRoZSBuYW1lIHByaW50cyBiZXR3ZWVuIGRlbGltaXRlcnMsIHNvIGtlZXAgaXQgYSBwcmludGFibGUgd29yZC4gKi8KJiM0MzsJZm9yIChjb25zdCBjaGFyICpwID0gbmFtZTsgKnA7IHAmIzQzOyYjNDM7KQomIzQzOwkJaWYgKCFpc2FzY2lpKCpwKSB8fCAhaXNncmFwaCgqcCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIE9wZW5lZCBiZWZvcmUgdGhlIGxvY2s6IHJlc29sdmluZyBpdCBtYXkgd2FsayB0aGlzIHZlcnkgZmlsZXN5c3RlbS4gKi8KJiM0MzsJZiA9IG9wZW5faW50ZXJwX2ZpbGUoZmlsZS0mZ3Q7Zl9jcmVkLCBwYXRoKTsKJiM0MzsJaWYgKElTX0VSUihmKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGYpOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKHJvb3QpOwomIzQzOwlpZiAoZF91bmhhc2hlZChlLSZndDtkZW50cnkpKQomIzQzOwkJcmV0dmFsID0gLUVOT0VOVDsJLyogcmVtb3ZlZCB3aGlsZSB3ZSB3ZXJlIG9wZW5pbmcgaXQgKi8KJiM0MzsJZWxzZSBpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7ZS0mZ3Q7bm9kZSkpCiYjNDM7CQlyZXR2YWwgPSAtRUJVU1k7CS8qIHB1Ymxpc2hlZCB3aGlsZSB3ZSB3ZXJlIG9wZW5pbmcgaXQgKi8KJiM0MzsJZWxzZQomIzQzOwkJcmV0dmFsID0gZW50cnlfYXR0YWNoX2ludGVycHJldGVyKGUsIG5hbWUsIHBhdGgsIGYpOwomIzQzOwlpbm9kZV91bmxvY2socm9vdCk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwomIzQzOwomIzQzOwkvKiBUaGUgZmlsZSBpcyBvd25lZCBieSB0aGUgZW50cnkgbm93LiAqLwomIzQzOwlyZXRhaW5fYW5kX251bGxfcHRyKGYpOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplID0gaW5vZGUtJmd0O2lfcHJpdmF0ZTsKLQlpbnQgcmVzID0gcGFyc2VfY29tbWFuZChidWZmZXIsIGNvdW50KTsKJiM0MzsJY2hhciAqYnVmIF9fZnJlZShrZnJlZSkgPSBOVUxMOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwkvKiBBIGJpbmRpbmcgaXMgdGhlIGxvbmdlc3QgY29tbWFuZCB0aGlzIGZpbGUgdGFrZXMuICovCiYjNDM7CWlmIChjb3VudCAmZ3Q7IE1BWF9CSU5ESU5HX0xFTkdUSCkKJiM0MzsJCXJldHVybiAtRTJCSUc7CiYjNDM7CiYjNDM7CWJ1ZiA9IG1lbWR1cF91c2VyX251bChidWZmZXIsIGNvdW50KTsKJiM0MzsJaWYgKElTX0VSUihidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKJiM0MzsKJiM0MzsJLyogJiMzOTsmIzQzOyZsdDtuYW1lJmd0OyAmbHQ7cGF0aCZndDsmIzM5OyBiaW5kcyBhbiBpbnRlcnByZXRlciwgZXZlcnl0aGluZyBlbHNlIHRvZ2dsZXMuICovCiYjNDM7CWlmIChidWZbMF0gPT0gJiMzOTsmIzQzOyYjMzk7KQomIzQzOwkJcmV0dXJuIGJtX2VudHJ5X2FkZF9pbnRlcnAoZSwgZmlsZSwgYnVmLCBjb3VudCk7CiYjNDM7CiYjNDM7CXJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmLCBjb3VudCk7CiAKIAlzd2l0Y2ggKHJlcykgewogCWNhc2UgQk1fQ01EX0RJU0FCTEU6CiAJCWNsZWFyX2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgJmFtcDtlLSZndDtmbGFncyk7CiAJCWJyZWFrOwotCWNhc2UgQk1fQ01EX0VOQUJMRToKJiM0MzsJY2FzZSBCTV9DTURfRU5BQkxFOiB7CiYjNDM7CQlzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKGlub2RlLSZndDtpX3NiKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZmlyc3QgZW5hYmxlIHB1Ymxpc2hlcyBhICYjMzk7RCYjMzk7IGVudHJ5IGludG8gdGhlIHNlYXJjaAomIzQzOwkJICogbGlzdCwgd2hvbGUuIFRoZSBsb2NrIGtlZXBzIHRoYXQgb3JkZXJlZCBhZ2FpbnN0IGEgc2Vjb25kCiYjNDM7CQkgKiBlbmFibGUsIGFnYWluc3QgcmVtb3ZhbCAtIGEgcmVtb3ZlZCBlbnRyeSBoYXMgbm90aGluZyBsZWZ0CiYjNDM7CQkgKiB0byBwdWJsaXNoIC0gYW5kIGFnYWluc3QgYmluZGluZzogd2hhdCBjYW4gYmUgbWF0Y2hlZCBjYW4KJiM0MzsJCSAqIG5vIGxvbmdlciBiZSBjb25maWd1cmVkLgomIzQzOwkJICovCiYjNDM7CQlpbm9kZV9sb2NrKHJvb3QpOwogCQlzZXRfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCAmYW1wO2UtJmd0O2ZsYWdzKTsKJiM0MzsJCWlmIChobGlzdF91bmhhc2hlZCgmYW1wO2UtJmd0O25vZGUpICZhbXA7JmFtcDsgIWRfdW5oYXNoZWQoZS0mZ3Q7ZGVudHJ5KSkgewomIzQzOwkJCXN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpOwomIzQzOwomIzQzOwkJCXNwaW5fbG9jaygmYW1wO21pc2MtJmd0O2VudHJpZXNfbG9jayk7CiYjNDM7CQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7ZS0mZ3Q7bm9kZSwgJmFtcDttaXNjLSZndDtlbnRyaWVzKTsKJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO21pc2MtJmd0O2VudHJpZXNfbG9jayk7CiYjNDM7CQl9CiYjNDM7CQlpbm9kZV91bmxvY2socm9vdCk7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBCTV9DTURfUkVNT1ZFOgogCQlibV9yZW1vdmVfZW50cnkoZSwgaW5vZGUtJmd0O2lfc2IpOwogCQlicmVhazsKQEAgLTExMDYsMTYgJiM0MzsxNDMxLDE4IEBAIHN0YXRpYyBpbnQgYWRkX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmVmY291bnRfc2V0KCZhbXA7ZS0mZ3Q7dXNlcnMsIDEpOwogCWUtJmd0O2RlbnRyeSA9IGRlbnRyeTsKIAlpbm9kZS0mZ3Q7aV9wcml2YXRlID0gZTsKIAlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2JtX2VudHJ5X29wZXJhdGlvbnM7CiAKIAlkX21ha2VfcGVyc2lzdGVudChkZW50cnksIGlub2RlKTsKLQltaXNjID0gaV9iaW5mbXRfbWlzYyhpbm9kZSk7Ci0Jc3Bpbl9sb2NrKCZhbXA7bWlzYy0mZ3Q7ZW50cmllc19sb2NrKTsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDtlLSZndDtub2RlLCAmYW1wO21pc2MtJmd0O2VudHJpZXMpOwotCXNwaW5fdW5sb2NrKCZhbXA7bWlzYy0mZ3Q7ZW50cmllc19sb2NrKTsKJiM0MzsJLyogQSAmIzM5O0QmIzM5OyBlbnRyeSBzdGF5cyBvdXQgb2YgdGhlIHNlYXJjaCBsaXN0IHVudGlsIGl0cyBmaXJzdCBlbmFibGUuICovCiYjNDM7CWlmICh0ZXN0X2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCW1pc2MgPSBpX2JpbmZtdF9taXNjKGlub2RlKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO21pc2MtJmd0O2VudHJpZXNfbG9jayk7CiYjNDM7CQlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDtlLSZndDtub2RlLCAmYW1wO21pc2MtJmd0O2VudHJpZXMpOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDttaXNjLSZndDtlbnRyaWVzX2xvY2spOwomIzQzOwl9CiAJc2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjMsOSAmIzQzOzE0NTAsOCBAQCBzdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiBzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUocHV0X2JpbmZtdF9oYW5kbGVyKSA9IE5VTEw7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktJmd0O2lfc2I7Ci0Jc3RydWN0IGZpbGUgKmYgPSBOVUxMOwogCWludCBlcnI7CiAKIAllID0gY3JlYXRlX2VudHJ5KGJ1ZmZlciwgY291bnQpOwpAQCAtMTE0MiwzMyAmIzQzOzE0NjgsMjAgQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJfQogCiAJaWYgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX09QRU5fRklMRSkgewotCQkvKgotCQkgKiBOb3cgdGhhdCB3ZSBzdXBwb3J0IHVucHJpdmlsZWdlZCBiaW5mbXRfbWlzYyBtb3VudHMgbWFrZQotCQkgKiBzdXJlIHdlIHVzZSB0aGUgY3JlZGVudGlhbHMgdGhhdCB0aGUgcmVnaXN0ZXIgQGZpbGUgd2FzCi0JCSAqIG9wZW5lZCB3aXRoIHRvIGFsc28gb3BlbiB0aGUgaW50ZXJwcmV0ZXIuIEJlZm9yZSB0aGF0IHRoaXMKLQkJICogZGlkbiYjMzk7dCBtYXR0ZXIgbXVjaCBhcyBvbmx5IGEgcHJpdmlsZWdlZCBwcm9jZXNzIGNvdWxkIG9wZW4KLQkJICogdGhlIHJlZ2lzdGVyIGZpbGUuCi0JCSAqLwotCQlzY29wZWRfd2l0aF9jcmVkcyhmaWxlLSZndDtmX2NyZWQpCi0JCQlmID0gb3Blbl9leGVjKGUtJmd0O2ludGVycHJldGVyKTsKLQkJaWYgKElTX0VSUihmKSkgewotCQkJcHJfbm90aWNlKCYjMzQ7cmVnaXN0ZXI6IGZhaWxlZCB0byBpbnN0YWxsIGludGVycHJldGVyIGZpbGUgJXNcbiYjMzQ7LAotCQkJCSBlLSZndDtpbnRlcnByZXRlcik7CiYjNDM7CQlzdHJ1Y3QgZmlsZSAqZiA9IG9wZW5faW50ZXJwX2ZpbGUoZmlsZS0mZ3Q7Zl9jcmVkLCBlLSZndDtpbnRlcnByZXRlcik7CiYjNDM7CiYjNDM7CQlpZiAoSVNfRVJSKGYpKQogCQkJcmV0dXJuIFBUUl9FUlIoZik7CiYjNDM7CQllcnIgPSBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoZSwgJiMzNDsmIzM0OywgZS0mZ3Q7aW50ZXJwcmV0ZXIsIGYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWNsb3NlX2ludGVycF9maWxlKGYpOwomIzQzOwkJCXJldHVybiBlcnI7CiAJCX0KLQkJZS0mZ3Q7aW50ZXJwX2ZpbGUgPSBmOwogCX0KIAogCWVyciA9IGFkZF9lbnRyeShlLCBzYik7Ci0JaWYgKGVycikgewotCQlpZiAoZikgewotCQkJZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpOwotCQkJZmlscF9jbG9zZShmLCBOVUxMKTsKLQkJfQotCQlpZiAoZS0mZ3Q7YnBmX29wcykKLQkJCWJpbmZtdF9taXNjX3B1dF9vcHMoZS0mZ3Q7YnBmX29wcyk7CiYjNDM7CWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJLyogVGhlIGVudHJ5IGlzIG93bmVkIGJ5IGl0cyBpbm9kZSBub3cuICovCiAJcmV0YWluX2FuZF9udWxsX3B0cihlKTsKQEAgLTExOTcsNyAmIzQzOzE1MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYzsKLQlpbnQgcmVzID0gcGFyc2VfY29tbWFuZChidWZmZXIsIGNvdW50KTsKJiM0MzsJaW50IHJlcyA9IHJlYWRfY29tbWFuZChidWZmZXIsIGNvdW50KTsKIAogCW1pc2MgPSBpX2JpbmZtdF9taXNjKGZpbGVfaW5vZGUoZmlsZSkpOwogCXN3aXRjaCAocmVzKSB7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzY19icGYuYyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jCmluZGV4IDkyMDAzZWE2NDBkM2YuLmIyNDZkODg2NDM3YjggMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jCkBAIC03LDYgJiM0Mzs3LDE1IEBACiAgKiBuYW1lc3BhY2UgaXQgd2FzIHJlZ2lzdGVyZWQgaW4uIEEgYmluZm10X21pc2MgJiMzOTtCJiMzOTsgZW50cnkgYWN0aXZhdGVzIGl0OgogICoKICAqICAgZWNobyAmIzM5OzplbnRyeTpCOjo6OiZsdDtoYW5kbGVyLW5hbWUmZ3Q7OiYjMzk7ICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9yZWdpc3RlcgomIzQzOyAqCiYjNDM7ICogVGhlIGVudHJ5IGNhbiBiaW5kIHRoZSBpbnRlcnByZXRlcnMgdGhlIGhhbmRsZXIgbWF5IHJ1biBpdHMgYmluYXJpZXMKJiM0MzsgKiB3aXRoLCBlYWNoIG9wZW5lZCBieSB0aGUgd3JpdGUgdGhhdCBiaW5kcyBpdCBhbmQgc2VsZWN0ZWQgYnkgbmFtZSBwZXIKJiM0MzsgKiBleGVjLiBBbiBlbnRyeSByZWdpc3RlcmVkIHdpdGggJiMzOTtEJiMzOTsgaXMgbm90IG1hdGNoYWJsZSB5ZXQsIHdoaWNoIGlzIHdoYXQKJiM0MzsgKiBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiB0aGVtOgomIzQzOyAqCiYjNDM7ICogICBlY2hvICYjMzk7OmVudHJ5OkI6Ojo6Jmx0O2hhbmRsZXItbmFtZSZndDs6RCYjMzk7ICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9yZWdpc3RlcgomIzQzOyAqICAgZWNobyAmIzM5OyYjNDM7Jmx0O25hbWUmZ3Q7ICZsdDtwYXRoJmd0OyYjMzk7ICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9lbnRyeQomIzQzOyAqICAgZWNobyAxICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9lbnRyeQogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRfbWlzYy5oJmd0OwpAQCAtMTYsNiAmIzQzOzI1LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGZfaWRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKQEAgLTkxLDYgJiM0MzsxMDIsMjAgQEAgYm9vbCBicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCSAgICAgICBwcm9nLSZndDthdXgtJmd0O3N0X29wcyA9PSAmYW1wO2JwZl9iaW5mbXRfbWlzY19vcHM7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlcGxhY2UgdGhlIHN0YWdlZCBpbnRlcnByZXRlciBzZWxlY3Rpb246IG5hbWluZyBhIHBhdGggZHJvcHMgYSBib3VuZAomIzQzOyAqIGZpbGUsIHNlbGVjdGluZyBhIGJvdW5kIGludGVycHJldGVyIGNhcnJpZXMgaXRzIGZpbGUgYWxvbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYm1fYnBmX3N0YWdlX3NlbGVjdGlvbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjaGFyICpwYXRoLAomIzQzOwkJCQkgICBzdHJ1Y3QgZmlsZSAqZikKJiM0Mzt7CiYjNDM7CWlmIChicHJtLSZndDticGZfaW50ZXJwX2ZpbGUpCiYjNDM7CQlmcHV0KGJwcm0tJmd0O2JwZl9pbnRlcnBfZmlsZSk7CiYjNDM7CWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnApOwomIzQzOwlicHJtLSZndDticGZfaW50ZXJwID0gcGF0aDsKJiM0MzsJYnBybS0mZ3Q7YnBmX2ludGVycF9maWxlID0gZjsKJiM0Mzt9CiYjNDM7CiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAKIC8qKgpAQCAtMTAzLDcgJiM0MzsxMjgsOCBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAgKiBiZWZvcmUgcmV0dXJuaW5nIHplcm87IHRoZSB2ZXJpZmllciByZWplY3RzIHRoZSBjYWxsIGZyb20gYW55IG90aGVyCiAgKiBwcm9ncmFtLCBpbmNsdWRpbmcgdGhlIGhhbmRsZXImIzM5O3Mgb3duIG1hdGNoIHByb2dyYW0uIFRoZSBwYXRoIGlzIG9wZW5lZAogICogd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlIGV4ZWMgYWZ0ZXIgdGhlIHByb2dyYW0KLSAqIHJldHVybnMuCiYjNDM7ICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhbgomIzQzOyAqIGludGVycHJldGVyIHRoZSBlbnRyeSBib3VuZCB3aXRoIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLgogICoKICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUKICAqLwpAQCAtMTI3LDggJiM0MzsxNTMsNTAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCWlmICghaW50ZXJwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnApOwotCWJwcm0tJmd0O2JwZl9pbnRlcnAgPSBpbnRlcnA7CiYjNDM7CWJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oYnBybSwgaW50ZXJwLCBOVUxMKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCAtIHJ1biB0aGlzIGV4ZWMgdW5kZXIgYW4gaW50ZXJwcmV0ZXIgdGhlIGVudHJ5IGJvdW5kCiYjNDM7ICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkCiYjNDM7ICogQG5hbWU6IG5hbWUgdGhlIGludGVycHJldGVyIHdhcyByZWdpc3RlcmVkIHVuZGVyCiYjNDM7ICogQG5hbWVfX3N6OiBzaXplIG9mIHRoZSBAbmFtZSBidWZmZXIsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMCiYjNDM7ICoKJiM0MzsgKiBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgbG9hZCBwcm9ncmFtIG9mIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBoYW5kbGVyCiYjNDM7ICogaW5zdGVhZCBvZiBicGZfYmlucHJtX3NldF9pbnRlcnAoKS4gSXQgc2VsZWN0cyBvbmUgb2YgdGhlIGludGVycHJldGVycwomIzQzOyAqIHRoZSBtYXRjaGVkIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGgsIGVhY2ggb2Ygd2hpY2ggd2FzIG9wZW5lZCBvbmNlIHdoZW4KJiM0MzsgKiB0aGUgZW50cnkgd2FzIHJlZ2lzdGVyZWQuIE5vdGhpbmcgaXMgcmVzb2x2ZWQgYXQgZXhlYyB0aW1lLCBzbyBubwomIzQzOyAqIGZpbGVzeXN0ZW0gdmlldyBjYW4gcmVkaXJlY3QgdGhlIGludGVycHJldGVyLgomIzQzOyAqCiYjNDM7ICogVGhlIGludGVycHJldGVyIHJ1bnMgdW5kZXIgdGhlIHBhdGggdGhlIGVudHJ5IHJlZ2lzdGVyZWQgaXQgdW5kZXIuCiYjNDM7ICogQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9FTlQgaWYgdGhlIG1hdGNoZWQgZW50cnkgYm91bmQgbm8gaW50ZXJwcmV0ZXIKJiM0MzsgKiBvZiB0aGF0IG5hbWUsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CWNoYXIgKnBhdGg7CiYjNDM7CiYjNDM7CWlmICghbmFtZV9fc3opCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJbGVuID0gc3RybmxlbihuYW1lLCBuYW1lX19zeik7CiYjNDM7CWlmIChsZW4gPT0gbmFtZV9fc3ogfHwgIWxlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpbnRlcnAgPSBiaW5mbXRfbWlzY19maW5kX2ludGVycChicHJtLSZndDticGZfaW50ZXJwcywgbmFtZSk7CiYjNDM7CWlmICghaW50ZXJwKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CXBhdGggPSBrc3RyZHVwKGludGVycC0mZ3Q7cGF0aCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGF0aCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlibV9icGZfc3RhZ2Vfc2VsZWN0aW9uKGJwcm0sIHBhdGgsIGdldF9maWxlKGludGVycC0mZ3Q7ZmlsZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTEsNiAmIzQzOzI3OSw3IEBAIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiAKIEJURl9LRlVOQ1NfU1RBUlQoYm1fYnBmX2tmdW5jX2lkcykKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9pbnRlcnAsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZywgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ZsYWdzLCBLRl9TTEVFUEFCTEUpCiBCVEZfS0ZVTkNTX0VORChibV9icGZfa2Z1bmNfaWRzKQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDg1NjczMWY3OGQwNTQuLmExNGYyOGIxNTYwN2EgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTE0NzcsNiAmIzQzOzE0NzcsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAlpZiAoYnBybS0mZ3Q7aW50ZXJwICE9IGJwcm0tJmd0O2ZpbGVuYW1lKQogCQlrZnJlZShicHJtLSZndDtpbnRlcnApOwogCWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnApOwomIzQzOwlpZiAoYnBybS0mZ3Q7YnBmX2ludGVycF9maWxlKQomIzQzOwkJZnB1dChicHJtLSZndDticGZfaW50ZXJwX2ZpbGUpOwogCWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnBfYXJnKTsKIAlrZnJlZShicHJtLSZndDtmZHBhdGgpOwogCWtmcmVlKGJwcm0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oCmluZGV4IDRhYmRmZDM2YjNmYTguLjA3MmU0YjNkZDc4ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgKQEAgLTUsMTEgJiM0Mzs1LDQxIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogc3RydWN0IGJwZl9wcm9nOwomIzQzO3N0cnVjdCBmaWxlOwogc3RydWN0IGxpbnV4X2JpbnBybTsKIHN0cnVjdCB1c2VyX25hbWVzcGFjZTsKIAogI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTYKIAomIzQzOy8qIExvbmdlc3QgbmFtZSBhICYjMzk7QiYjMzk7IGVudHJ5IGNhbiBiaW5kIGFuIGludGVycHJldGVyIHVuZGVyLiAqLwomIzQzOyNkZWZpbmUgQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYIDMyCiYjNDM7CiYjNDM7LyogTW9zdCBpbnRlcnByZXRlcnMgb25lIGVudHJ5IGNhbiBiaW5kLiAqLwomIzQzOyNkZWZpbmUgQklORk1UX01JU0NfSU5URVJQX01BWCAxMDAKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIC0gYW4gaW50ZXJwcmV0ZXIgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aAomIzQzOyAqIEBsaXN0OiBsaW5rIGluIHRoZSBlbnRyeSYjMzk7cyBsaXN0LCBpbiByZWdpc3RyYXRpb24gb3JkZXIKJiM0MzsgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluCiYjNDM7ICogQHBhdGg6IHRoZSBwYXRoIGl0IHdhcyByZWdpc3RlcmVkIHVuZGVyLCB1c2VkIGFzIHRoZSBuYW1lIHRoZSBpbnRlcnByZXRlcgomIzQzOyAqICAgICAgICBydW5zIHVuZGVyOyBzdG9yZWQgYWZ0ZXIgQG5hbWUgaW4gdGhlIHNhbWUgYWxsb2NhdGlvbgomIzQzOyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWQKJiM0MzsgKiAgICAgICAgaW50ZXJwcmV0ZXIgb2YgYSBzdGF0aWMgJiMzOTtGJiMzOTsgZW50cnkKJiM0MzsgKgomIzQzOyAqIE93bmVkIGJ5IHRoZSBlbnRyeSBhbmQgbGl2aW5nIGV4YWN0bHkgYXMgbG9uZyBhcyBpdCBkb2VzLiBUaGUgbGlzdCBoZWFkCiYjNDM7ICogaXMgaGFuZGVkIHRvIHRoZSBoYW5kbGVyJiMzOTtzIGxvYWQgcHJvZ3JhbSBmb3IgdGhlIGR1cmF0aW9uIG9mIG9uZSBleGVjLAomIzQzOyAqIHdoaWNoIHBpY2tzIG9uZSB3aXRoIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLgomIzQzOyAqLwomIzQzO3N0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiYjNDM7CXN0cnVjdCBmaWxlCQkqZmlsZTsKJiM0MzsJY29uc3QgY2hhcgkJKnBhdGg7CiYjNDM7CWNoYXIJCQluYW1lW107CiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICoKJiM0MztiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKTsKJiM0MzsKIC8qKgogICogZW51bSBicGZfYmlucHJtX2ZsYWdzIC0gcGVyLWV4ZWMgaW52b2NhdGlvbiBmbGFncyBhIGxvYWQgcHJvZ3JhbSBjYW4gcmVxdWVzdAogICogQEJQRl9CSU5QUk1fUFJFU0VSVkVfQVJHVjA6IGtlZXAgdGhlIGNhbGxlciYjMzk7cyBhcmd2WzBdIChsaWtlIHRoZSAmIzM5O1AmIzM5OyBmbGFnKQpAQCAtNDIsMTAgJiM0Mzs3MiwxMSBAQCBlbnVtIGJwZl9iaW5wcm1fZmxhZ3MgewogICogICAgICAgICBzbyBpdCBjYW4gcmVhZCB0aGUgYmluYXJ5IHRvIGRlY2lkZSwgYnV0IHRoZSB2ZXJpZmllciByZWplY3RzCiAgKiAgICAgICAgIHRoZSBpbnRlcnByZXRlciBzZWxlY3Rpb24ga2Z1bmNzIGluIGl0CiAgKiBAbG9hZDogIHNlbGVjdCBhbiBpbnRlcnByZXRlciBmb3IgdGhlIG1hdGNoZWQgQGJwcm0gdmlhCi0gKiAgICAgICAgIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpIGFuZCByZXR1cm4gemVybzsgYSBtYXRjaCBpcyBjb21taXR0ZWQsIHNvCi0gKiAgICAgICAgIGEgZmFpbHVyZSBmYWlscyB0aGUgZXhlYyBpbnN0ZWFkIG9mIGZhbGxpbmcgdGhyb3VnaCB0byBsYXRlcgotICogICAgICAgICBlbnRyaWVzOyAtRU5PRVhFQyBkb2VzIG5vdCBmYWlsIHRoZSBleGVjIGJ1dCBtb3ZlcyBvbiB0byB0aGUKLSAqICAgICAgICAgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzCiYjNDM7ICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSwgb3Igb25lIHRoZSBlbnRyeSBib3VuZCB2aWEKJiM0MzsgKiAgICAgICAgIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLCBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXMKJiM0MzsgKiAgICAgICAgIGNvbW1pdHRlZCwgc28gYSBmYWlsdXJlIGZhaWxzIHRoZSBleGVjIGluc3RlYWQgb2YgZmFsbGluZwomIzQzOyAqICAgICAgICAgdGhyb3VnaCB0byBsYXRlciBlbnRyaWVzOyAtRU5PRVhFQyBkb2VzIG5vdCBmYWlsIHRoZSBleGVjIGJ1dAomIzQzOyAqICAgICAgICAgbW92ZXMgb24gdG8gdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cwogICogQG5hbWU6IG5hbWUgdGhhdCAmIzM5O0ImIzM5OyBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgaGFuZGxlciBieQogICovCiBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKaW5kZXggYTJkYWVjYmIwMWQ2YS4uZjY4NmEzN2Y3YTBhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKQEAgLTE0LDcgJiM0MzsxNCwxMCBAQCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zOwogCiAvKiBJbnRlcnByZXRlciBzZWxlY3Rpb24gc3RhZ2VkIGJ5IGEgYnBmIGJpbmZtdF9taXNjIGhhbmRsZXIuICovCiBzdHJ1Y3QgYmluZm10X21pc2NfYnBmIHsKJiM0MzsJLyogaW50ZXJwcmV0ZXJzIHRoZSBtYXRjaGVkIGVudHJ5IGJvdW5kLCBzZWxlY3RhYmxlIGJ5IG5hbWUgKi8KJiM0MzsJY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYnBmX2ludGVycHM7CiAJY29uc3QgY2hhciAqYnBmX2ludGVycDsJCS8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi8KJiM0MzsJc3RydWN0IGZpbGUgKmJwZl9pbnRlcnBfZmlsZTsJLyogdGhlIGJvdW5kIGludGVycHJldGVyIGl0IHNlbGVjdGVkICovCiAJY29uc3QgY2hhciAqYnBmX2ludGVycF9hcmc7CS8qIGludGVycHJldGVyIGFyZ3VtZW50IGZyb20gYSBicGYgaGFuZGxlciAqLwogCXU2NCBicGZfZmxhZ3M7CQkJLyogZW51bSBicGZfYmlucHJtX2ZsYWdzIGZyb20gYSBicGYgaGFuZGxlciAqLwogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlCmluZGV4IDM5MGZlMTFhN2JlZGYuLjQxMGM5MzYwNmEwYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZQpAQCAtMjUsNiAmIzQzOzI1LDEwIEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSBjaGVjay1leGVjCiAjIG9yIGFuICYjMzk7RiYjMzk7IGVudHJ5IGNhbiBwaW4gdGhlIGluc3RhbmNlIHRoYXQgb3ducyBpdC4gVW5wcml2aWxlZ2VkLCBubyBicGYuCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2Nfc2VsZnBpbgogCiYjNDM7IyAmIzM5O0QmIzM5OyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzCiYjNDM7IyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gU3RhdGljIG1hZ2ljIGVudHJ5LCBubyBicGYgdG9vbGNoYWluLgomIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19kaXNhYmxlZAomIzQzOwogIyBTdGF0aWMgKCYjMzk7VCYjMzk7IGZsYWcpIHRyYW5zcGFyZW50IGJpbmZtdF9taXNjIHRlc3Q7IHRoZSBhc3NlcnRpbmcgaW50ZXJwcmV0ZXIKICMgaXMgc2hhcmVkIHdpdGggdGhlIGJwZiBoYXJuZXNzJiMzOTtzIHRyYW5zcGFyZW50IGNhc2UuIE5vIGJwZiB0b29sY2hhaW4gbmVlZGVkLgogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX3RyYW5zcGFyZW50CkBAIC01Miw4ICYjNDM7NTYsOCBAQCBIQVZFX0JQRl9UT09MQ0hBSU4gPz0gJChzaGVsbCBjb21tYW5kIC12ICQoQ0xBTkcpICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsmYW1wOyBcCiBpZmVxICgkKEhBVkVfQlBGX1RPT0xDSEFJTikseSkKIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19icGYKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBicGZfaW50ZXJwLmJwZi5vIG5peF9vcmlnaW4uYnBmLm8gdHJhbnNwYXJlbnQuYnBmLm8KLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBsb2FkZXIuYnBmLm8KLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBiaW5mbXRfYnBmX2ludGVycCBiaW5mbXRfYnBmX2FwcAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBsb2FkZXIuYnBmLm8gaW50ZXJwX2JpbmQuYnBmLm8KJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X2JwZl9pbnRlcnAgYmluZm10X2JwZl9hcHAgYmluZm10X2JpbmRfaW50ZXJwCiBlbHNlCiAkKGluZm8gZXhlYyBzZWxmdGVzdHM6IHNraXBwaW5nIGJpbmZtdF9taXNjX2JwZiwgbmVlZHMgY2xhbmcsIGJwZnRvb2wsIHZtbGludXggQlRGIGFuZCBsaWJicGYpCiBlbmRpZgpAQCAtMTIzLDYgJiM0MzsxMjcsOSBAQCAkKE9VVFBVVCkvYmluZm10X21pc2NfYnBmOiBiaW5mbXRfbWlzY19icGYuYyBiaW5mbXRfbWlzY19jb21tb24uaAogJChPVVRQVVQpL2JpbmZtdF9icGZfaW50ZXJwOiBiaW5mbXRfYnBmX2ludGVycC5jCiAJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJCZsdDsgLW8gJEAKIAomIzQzOyQoT1VUUFVUKS9iaW5mbXRfYmluZF9pbnRlcnA6IGJpbmZtdF9iaW5kX2ludGVycC5jCiYjNDM7CSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQmbHQ7IC1vICRACiYjNDM7CiAkKE9VVFBVVCkvYmluZm10X2xvYWRlcl9wYXlsb2FkOiBiaW5mbXRfbG9hZGVyX3BheWxvYWQuYyBiaW5mbXRfbWlzY19jb21tb24uaAogCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1mUElFIC1waWUgJCZsdDsgLW8gJEAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfYmluZF9pbnRlcnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X2JpbmRfaW50ZXJwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMDZkNjUwNjI4NTZiNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X2JpbmRfaW50ZXJwLmMKQEAgLTAsMCAmIzQzOzEsMTQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVGVzdCBpbnRlcnByZXRlciBmb3IgdGhlIGJvdW5kLWludGVycHJldGVyIGNhc2Ugb2YgdGhlIGJpbmZtdF9taXNjX2JwZgomIzQzOyAqIHNlbGZ0ZXN0LiBUd28gY29waWVzIGFyZSBpbnN0YWxsZWQgYXQgZGlmZmVyZW50IHBhdGhzIGFuZCBib3VuZCB0byBvbmUKJiM0MzsgKiBlbnRyeSB1bmRlciBkaWZmZXJlbnQgbmFtZXM7IHByaW50aW5nIGFyZ3ZbMF0gLSB0aGUgcGF0aCB0aGUga2VybmVsIHJhbgomIzQzOyAqIHRoaXMgY29weSB1bmRlciAtIHRlbGxzIHRoZSBoYXJuZXNzIHdoaWNoIG9mIHRoZW0gdGhlIGxvYWQgcHJvZ3JhbSBwaWNrZWQuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO3sKJiM0MzsJcHJpbnRmKCYjMzQ7QklORF9SQU4gJXNcbiYjMzQ7LCBhcmdjICZndDsgMCA/IGFyZ3ZbMF0gOiAmIzM0OyYjMzQ7KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmMKaW5kZXggMDY5NzY4YTY2YmEwNy4uMmM3YjYzMDc1ZjFkOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jCkBAIC05LDcgJiM0Mzs5LDcgQEAKICAqCiAgKiAgICAgZWNobyAmIzM5OzpuYW1lOkI6Ojo6Jmx0O2hhbmRsZXImZ3Q7OiYjMzk7ICZndDsgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyCiAgKgotICogVGhyZWUgc2VsZi1jb250YWluZWQgY2FzZXMgYXJlIGV4ZXJjaXNlZDoKJiM0MzsgKiBGaXZlIHNlbGYtY29udGFpbmVkIGNhc2VzIGFyZSBleGVyY2lzZWQ6CiAgKgogICogICAxLiBicGZfaW50ZXJwOiB0aGUgbWF0Y2ggcHJvZ3JhbSBtYXRjaGVzIGEgc3ludGhldGljIGFhcmNoNjQgRUxGIGhlYWRlcgogICogICAgICBmcm9tIHRoZSBwcmVmZXRjaGVkIGJwcm0tJmd0O2J1ZiBhbmQgdGhlIGxvYWQgcHJvZ3JhbSByb3V0ZXMgaXQgdG8gYQpAQCAtMjYsNiAmIzQzOzI2LDExIEBACiAgKiAgICAgIChiaW5mbXRfbG9hZGVyX3BheWxvYWQpIHJ1bnMgYXMgdGhlIG1haW4gaW1hZ2Ugd2l0aCB0aGUgc2VsZWN0ZWQKICAqICAgICAgaW50ZXJwcmV0ZXIgc3Vic3RpdHV0ZWQgZm9yIGl0cyBQVF9JTlRFUlAgYW5kIGFzc2VydHMgdGhlIG5hdGl2ZQogICogICAgICBpZGVudGl0eSBmcm9tIGluc2lkZS4KJiM0MzsgKiAgIDUuIGludGVycF9iaW5kOiBhbiBlbnRyeSByZWdpc3RlcmVkIGRpc2FibGVkIHdpdGggJiMzOTtEJiMzOTsgaXMgZ2l2ZW4gaXRzCiYjNDM7ICogICAgICBpbnRlcnByZXRlcnMgb25lIHdyaXRlIGF0IGEgdGltZSwgYW5kIHRoZSBsb2FkIHByb2dyYW0gcGlja3Mgb25lIGJ5CiYjNDM7ICogICAgICBuYW1lIHBlciBleGVjLiBSZXBsYWNpbmcgd2hhdCB0aGUgcGF0aCBob2xkcyBhZnRlcndhcmRzIGNoYW5nZXMKJiM0MzsgKiAgICAgIG5vdGhpbmcsIHdoaWNoIGlzIHRoZSBwb2ludCBvZiBiaW5kaW5nIGEgZmlsZSByYXRoZXIgdGhhbiByZXNvbHZpbmcKJiM0MzsgKiAgICAgIGEgbmFtZSBhdCBleGVjIHRpbWUuIEVuYWJsaW5nIHRoZSBlbnRyeSBzZWFscyBpdC4KICAqCiAgKiBUaGUgZmlyc3QgdHdvIHJvdXRlIHRvIGEgdGVzdCBpbnRlcnByZXRlciB0aGF0IHByaW50cyBCUEZfSU5URVJQX1JBTiwKICAqIHByb3ZpbmcgdGhlIHByb2dyYW0mIzM5O3MgY2hvc2VuIGludGVycHJldGVyIGFjdHVhbGx5IHJhbi4KQEAgLTU0LDYgJiM0Mzs1OSwxMiBAQAogI2RlZmluZSBUUkFOU19FWFBFQ1QJJiMzNDtUUkFOU1BBUkVOVF9PSyYjMzQ7CiAjZGVmaW5lIExPQURFUl9JTlRFUlAJJiMzNDsvdG1wL2JpbmZtdF9sb2FkZXJfaW50ZXJwJiMzNDsKICNkZWZpbmUgTE9BREVSX1BBVEgJJiMzNDsvdG1wL2JpbmZtdF9icGZfbG9hZGVyLmxkcnRlc3QmIzM0OwomIzQzOyNkZWZpbmUgQklORF9GSVJTVAkmIzM0Oy90bXAvYmluZm10X2JpbmRfZmlyc3QmIzM0OwomIzQzOyNkZWZpbmUgQklORF9TRUNPTkQJJiMzNDsvdG1wL2JpbmZtdF9iaW5kX3NlY29uZCYjMzQ7CiYjNDM7I2RlZmluZSBCSU5EX0FSTV9QQVRICSYjMzQ7L3RtcC9iaW5mbXRfYmluZF9hcm0mIzM0OwomIzQzOyNkZWZpbmUgQklORF9SSVNDVl9QQVRICSYjMzQ7L3RtcC9iaW5mbXRfYmluZF9yaXNjdiYjMzQ7CiYjNDM7I2RlZmluZSBCSU5EX0VYUEVDVAkmIzM0O0JJTkRfUkFOICYjMzQ7CiYjNDM7I2RlZmluZSBCSU5EX01BWAkxMDAKIAogLyogQSBtaW5pbWFsIDY0LWJpdCBsaXR0bGUtZW5kaWFuIEVMRiBoZWFkZXIsIHBhZGRlZCB0byB0aGUgcmVhZCBzaXplLiAqLwogc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSkKQEAgLTgyLDExICYjNDM7OTMsMTcgQEAgc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByZWdpc3Rlcl9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpoYW5kbGVyKQomIzQzOy8qCiYjNDM7ICogUmVnaXN0ZXIgYSAmIzM5O0ImIzM5OyBlbnRyeSBmb3IgQGhhbmRsZXIuIFdpdGggQGZsYWdzICYjMzQ7RCYjMzQ7IHRoZSBlbnRyeSBpcyBjcmVhdGVkCiYjNDM7ICogZGlzYWJsZWQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaGFuZGxlciwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKmZsYWdzKQogewogCWNoYXIgcnVsZVtQQVRIX01BWF07CiAKLQlzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksICYjMzQ7OiVzOkI6Ojo6JXM6JiMzNDssIG5hbWUsIGhhbmRsZXIpOwomIzQzOwlzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksICYjMzQ7OiVzOkI6Ojo6JXM6JXMmIzM0OywgbmFtZSwgaGFuZGxlciwKJiM0MzsJCSBmbGFncyA/IGZsYWdzIDogJiMzNDsmIzM0Oyk7CiAJcmV0dXJuIHdyaXRlX3JlZyhydWxlKTsKIH0KIApAQCAtMTA2LDYgJiM0MzsxMjMsMzAgQEAgc3RhdGljIGludCBjaGVja19vdXRwdXQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpleHBlY3RlZCkKIAlyZXR1cm4gc3RybmNtcChidWYsIGV4cGVjdGVkLCBzdHJsZW4oZXhwZWN0ZWQpKSA/IC0xIDogMDsKIH0KIAomIzQzOy8qIERvZXMgdGhlIGtlcm5lbCBCVEYga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKT8gKi8KJiM0MztzdGF0aWMgYm9vbCBoYXZlX2JpbmZtdF9taXNjX29wcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7CiYjNDM7CWJvb2wgaGF2ZTsKJiM0MzsKJiM0MzsJaGF2ZSA9IGJ0ZiAmYW1wOyZhbXA7IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCAmIzM0O2JpbmZtdF9taXNjX29wcyYjMzQ7LAomIzQzOwkJCQkJICAgICBCVEZfS0lORF9TVFJVQ1QpICZndDs9IDA7CiYjNDM7CWJ0Zl9fZnJlZShidGYpOwomIzQzOwlyZXR1cm4gaGF2ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIHJlYXNvbiBicGYgaGFuZGxlciBjYXNlcyBjYW5ub3QgcnVuIGhlcmUsIE5VTEwgaWYgdGhleSBjYW4uICovCiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9oYW5kbGVyX3Vuc3VwcG9ydGVkKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZ2V0dWlkKCkgIT0gMCkKJiM0MzsJCXJldHVybiAmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdCYjMzQ7OwomIzQzOwlpZiAoIWhhdmVfYmluZm10X21pc2Nfb3BzKCkpCiYjNDM7CQlyZXR1cm4gJiMzNDtubyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGluIHRoZSBrZXJuZWwgQlRGIChDT05GSUdfQklORk1UX01JU0NfQlBGKSYjMzQ7OwomIzQzOwlpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKQomIzQzOwkJcmV0dXJuICYjMzQ7bm8gYmluZm10X21pc2MmIzM0OzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogLyogQW4gYXR0YWNoZWQgaGFuZGxlciB3aXRoIGl0cyAmIzM5O0ImIzM5OyBlbnRyeSBhY3RpdmF0ZWQuICovCiBzdHJ1Y3QgYnBmX2Nhc2UgewogCXN0cnVjdCBicGZfb2JqZWN0ICpvYmo7CkBAIC0xMTUsMTAgJiM0MzsxNTYsMTIgQEAgc3RydWN0IGJwZl9jYXNlIHsKIAogLyoKICAqIExvYWQgQG9iamZpbGUsIGF0dGFjaCBpdHMgc3RydWN0X29wcyBtYXAgQGhhbmRsZXIgKHdoaWNoIHB1Ymxpc2hlcyB0aGUKLSAqIGhhbmRsZXIpIGFuZCBhY3RpdmF0ZSBhICYjMzk7QiYjMzk7IGVudHJ5IG5hbWVkIEBlbnRyeSB0aGF0IHJlZmVyZW5jZXMgaXQuCiYjNDM7ICogaGFuZGxlcikgYW5kIHJlZ2lzdGVyIGEgJiMzOTtCJiMzOTsgZW50cnkgbmFtZWQgQGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCwgd2l0aAomIzQzOyAqIEBmbGFncyBhcyB0aGUgZW50cnkmIzM5O3MgcmVnaXN0ZXItc3RyaW5nIGZsYWdzLgogICovCi1zdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSwKLQkJCSAgY29uc3QgY2hhciAqaGFuZGxlciwgY29uc3QgY2hhciAqZW50cnkpCiYjNDM7c3RhdGljIGludCBicGZfY2FzZV9zdGFydF9mbGFncyhzdHJ1Y3QgYnBmX2Nhc2UgKmMsIGNvbnN0IGNoYXIgKm9iamZpbGUsCiYjNDM7CQkJCWNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5LAomIzQzOwkJCQljb25zdCBjaGFyICpmbGFncykKIHsKIAlzdHJ1Y3QgYnBmX21hcCAqbWFwOwogCkBAIC0xNDgsNyAmIzQzOzE5MSw3IEBAIHN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLAogCQljLSZndDtsaW5rID0gTlVMTDsKIAkJZ290byBmYWlsOwogCX0KLQlpZiAocmVnaXN0ZXJfZW50cnkoZW50cnksIGhhbmRsZXIpKSB7CiYjNDM7CWlmIChyZWdpc3Rlcl9lbnRyeShlbnRyeSwgaGFuZGxlciwgZmxhZ3MpKSB7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O3JlZ2lzdGVyICYjMzk7QiYjMzk7IGVudHJ5ICYjMzk7JXMmIzM5OyBmYWlsZWRcbiYjMzQ7LCBlbnRyeSk7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0xNjIsNiAmIzQzOzIwNSwxMiBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSwKIAlyZXR1cm4gLTE7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5KQomIzQzO3sKJiM0MzsJcmV0dXJuIGJwZl9jYXNlX3N0YXJ0X2ZsYWdzKGMsIG9iamZpbGUsIGhhbmRsZXIsIGVudHJ5LCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBicGZfY2FzZV9zdG9wKHN0cnVjdCBicGZfY2FzZSAqYykKIHsKIAl1bnJlZ2lzdGVyKGMtJmd0O2VudHJ5KTsKQEAgLTE5MCwyMyAmIzQzOzIzOSwxMCBAQCBGSVhUVVJFKGJwZl9oYW5kbGVyKSB7CiBGSVhUVVJFX1NFVFVQKGJwZl9oYW5kbGVyKQogewogCWNoYXIgc3JjW1BBVEhfTUFYXTsKLQlzdHJ1Y3QgYnRmICpidGY7Ci0KLQlpZiAoZ2V0dWlkKCkgIT0gMCkKLQkJU0tJUChyZXR1cm4sICYjMzQ7dGVzdCBtdXN0IGJlIHJ1biBhcyByb290JiMzNDspOwotCi0JLyogVGhlIGtlcm5lbCBtdXN0IGtub3cgc3RydWN0IGJpbmZtdF9taXNjX29wcyAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikuICovCi0JYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7Ci0JaWYgKCFidGYgfHwgYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsICYjMzQ7YmluZm10X21pc2Nfb3BzJiMzNDssCi0JCQkJCSAgIEJURl9LSU5EX1NUUlVDVCkgJmx0OyAwKSB7Ci0JCWJ0Zl9fZnJlZShidGYpOwotCQlTS0lQKHJldHVybiwKLQkJICAgICAmIzM0O25vIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgaW4gdGhlIGtlcm5lbCBCVEYgKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpJiMzNDspOwotCX0KLQlidGZfX2ZyZWUoYnRmKTsKJiM0MzsJY29uc3QgY2hhciAqd2h5ID0gYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQoKTsKIAotCWlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpCi0JCVNLSVAocmV0dXJuLCAmIzM0O25vIGJpbmZtdF9taXNjJiMzNDspOwomIzQzOwlpZiAod2h5KQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7JXMmIzM0Oywgd2h5KTsKIAogCS8qIFNoYXJlZCB0ZXN0IGludGVycHJldGVyLiAqLwogCUFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksICYjMzQ7YmluZm10X2JwZl9pbnRlcnAmIzM0OyksIDApOwpAQCAtMjU4LDcgJiM0MzsyOTQsNyBAQCBURVNUX0YoYnBmX2hhbmRsZXIsIHRyYW5zcGFyZW50X2Rpc3BhdGNoKQogCWNoYXIgc3JjW1BBVEhfTUFYXSwgY21kW1BBVEhfTUFYICYjNDM7IDE2XTsKIAogCS8qIFByb2JlIGZvciB0cmFuc3BhcmVudC1tb2RlIHN1cHBvcnQgdmlhIGl0cyBzdGF0aWMgY291bnRlcnBhcnQuICovCi0JaWYgKGJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpCiYjNDM7CWlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCYjMzk7VCYjMzk7KSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIHdpdGhvdXQgdHJhbnNwYXJlbnQgbW9kZSYjMzQ7KTsKIAogCUFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksICYjMzQ7YmluZm10X3RyYW5zcGFyZW50X2ludGVycCYjMzQ7KSwgMCk7CkBAIC0zMDcsNCAmIzQzOzM0MywyMjYgQEAgVEVTVF9GKGJwZl9oYW5kbGVyLCBsb2FkZXJfc3Vic3RpdHV0aW9uKQogCXVubGluayhMT0FERVJfSU5URVJQKTsKIH0KIAomIzQzOy8qIFRoZSBlcnJubyBhbiBleGVjIG9mIEBwYXRoIGZhaWxzIHdpdGgsIDAgaWYgaXQgc3VjY2VlZGVkLiAqLwomIzQzO3N0YXRpYyBpbnQgZXhlY19lcnJubyhjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmIChwaWQgPT0gMCkgewomIzQzOwkJZXhlY2wocGF0aCwgcGF0aCwgKGNoYXIgKilOVUxMKTsKJiM0MzsJCV9leGl0KGVycm5vKTsKJiM0MzsJfQomIzQzOwlpZiAocGlkICZsdDsgMCB8fCB3YWl0cGlkKHBpZCwgJmFtcDtzdGF0dXMsIDApICE9IHBpZCB8fCAhV0lGRVhJVEVEKHN0YXR1cykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBXRVhJVFNUQVRVUyhzdGF0dXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBJbnN0YWxsIGEgY29weSBvZiB0aGUgYm91bmQtaW50ZXJwcmV0ZXIgdGVzdCBiaW5hcnkgYXQgQHBhdGguICovCiYjNDM7c3RhdGljIGludCBpbnN0YWxsX2ludGVycChjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJY2hhciBzcmNbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlpZiAoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCAmIzM0O2JpbmZtdF9iaW5kX2ludGVycCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIGNvcHlfZmlsZShzcmMsIHBhdGgpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBCaW5kIEBwYXRoIHRvIEBlbnRyeSB1bmRlciBAbmFtZSwgdGhlICYjMzk7JiM0MzsmIzM5OyBjb21tYW5kIG9mIGEgZGlzYWJsZWQgZW50cnkuICovCiYjNDM7c3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJY2hhciBjbWRbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCAmIzM0OyYjNDM7JXMgJXNcbiYjMzQ7LCBuYW1lLCBwYXRoKTsKJiM0MzsJcmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIGNtZCk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoYm91bmRfaW50ZXJwKSB7CiYjNDM7CWNoYXIgb2JqW1BBVEhfTUFYXTsKJiM0MzsJc3RydWN0IGJwZl9jYXNlIGM7CiYjNDM7CWJvb2wgc3RhcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoYm91bmRfaW50ZXJwKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqd2h5ID0gYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQoKTsKJiM0MzsKJiM0MzsJaWYgKHdoeSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0OyVzJiMzNDssIHdoeSk7CiYjNDM7CWlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCYjMzk7RCYjMzk7KSkgewomIzQzOwkJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlICYjMzk7RCYjMzk7IGZsYWcmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfRklSU1QpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfU0VDT05EKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNlbGYtJmd0O29iaiwgc2l6ZW9mKHNlbGYtJmd0O29iaiksCiYjNDM7CQkJCSYjMzQ7aW50ZXJwX2JpbmQuYnBmLm8mIzM0OyksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWdpc3RlcmVkIGRpc2FibGVkLCBzbyBpdCBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQgYW5kIGNhbiBzdGlsbCBiZQomIzQzOwkgKiBnaXZlbiBpbnRlcnByZXRlcnMuIEVhY2ggcGF0aCBpcyByZXNvbHZlZCBvbmNlLCBieSBpdHMgd3JpdGUoMik7CiYjNDM7CSAqIGZyb20gaGVyZSBvbiB0aGUgZW50cnkgaG9sZHMgdGhlIGZpbGVzIHRoZW1zZWx2ZXMuCiYjNDM7CSAqLwomIzQzOwlBU1NFUlRfRVEoYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoJmFtcDtzZWxmLSZndDtjLCBzZWxmLSZndDtvYmosICYjMzQ7aW50ZXJwX2JpbmQmIzM0OywKJiM0MzsJCQkJICAgICAgICYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LCAmIzM0O0QmIzM0OyksIDApOwomIzQzOwlzZWxmLSZndDtzdGFydGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGVudHJ5X2JpbmQoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssICYjMzQ7Zmlyc3QmIzM0OywgQklORF9GSVJTVCksIDApOwomIzQzOwlBU1NFUlRfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDtzZWNvbmQmIzM0OywgQklORF9TRUNPTkQpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihib3VuZF9pbnRlcnApCiYjNDM7ewomIzQzOwlpZiAoc2VsZi0mZ3Q7c3RhcnRlZCkKJiM0MzsJCWJwZl9jYXNlX3N0b3AoJmFtcDtzZWxmLSZndDtjKTsKJiM0MzsJdW5saW5rKEJJTkRfRklSU1QpOwomIzQzOwl1bmxpbmsoQklORF9TRUNPTkQpOwomIzQzOwl1bmxpbmsoQUFSQ0g2NF9QQVRIKTsKJiM0MzsJdW5saW5rKEJJTkRfUklTQ1ZfUEFUSCk7CiYjNDM7CXVubGluayhCSU5EX0FSTV9QQVRIKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRW5hYmxpbmcgaXMgd2hhdCBtYWtlcyB0aGUgY29uZmlndXJlZCBlbnRyeSBtYXRjaGFibGUuICovCiYjNDM7c3RhdGljIGludCBhY3RpdmF0ZShjb25zdCBjaGFyICplbnRyeSkKJiM0Mzt7CiYjNDM7CXJldHVybiBlbnRyeV9jb21tYW5kKGVudHJ5LCAmIzM0OzFcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogT25lIGVudHJ5LCBvbmUgaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSwgcGlja2VkIHBlciBleGVjLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIHNlbGVjdHNfYnlfbmFtZSkKJiM0Mzt7CiYjNDM7CUFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQUFSQ0g2NF9QQVRILCBFTV9BQVJDSDY0KSwgMCk7CiYjNDM7CUFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQklORF9SSVNDVl9QQVRILCBFTV9SSVNDViksIDApOwomIzQzOwomIzQzOwkvKiBEaXNhYmxlZCwgc28gaXQgZG9lcyBub3QgbWF0Y2ggYW5kIG5vIGZvcm1hdCBjbGFpbXMgdGhlIGJpbmFyeS4gKi8KJiM0MzsJRVhQRUNUX0VRKGV4ZWNfZXJybm8oQUFSQ0g2NF9QQVRIKSwgRU5PRVhFQyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShhY3RpdmF0ZSgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OyksIDApOwomIzQzOwlFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEFBUkNINjRfUEFUSCwgQklORF9FWFBFQ1QgQklORF9GSVJTVCksIDApOwomIzQzOwlFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEJJTkRfUklTQ1ZfUEFUSCwgQklORF9FWFBFQ1QgQklORF9TRUNPTkQpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogV2hhdCB3YXMgYm91bmQgaXMgd2hhdCBydW5zLCB3aGF0ZXZlciB0aGUgcGF0aCBob2xkcyBhZnRlcndhcmRzLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIHBhdGhfbm9fbG9uZ2VyX2RlY2lkZXMpCiYjNDM7ewomIzQzOwljaGFyIG90aGVyW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihBQVJDSDY0X1BBVEgsIEVNX0FBUkNINjQpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGFjdGl2YXRlKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7KSwgMCk7CiYjNDM7CiYjNDM7CS8qIEJvdW5kIGludGVycHJldGVycyBhcmUgcGlubmVkIGFnYWluc3Qgd3JpdGVzLCBleGFjdGx5IGxpa2UgJiMzOTtGJiMzOTsuICovCiYjNDM7CUVYUEVDVF9UUlVFKHdyaXRlX2RlbmllZChCSU5EX0ZJUlNUKSk7CiYjNDM7CiYjNDM7CS8qIFJlcGxhY2UgdGhlIHBhdGggd2l0aCBhIGRpZmZlcmVudCBiaW5hcnk6IGEgbmV3IGZpbGUsIG5ldyBpbm9kZS4gKi8KJiM0MzsJQVNTRVJUX0VRKGFydGlmYWN0X3BhdGgob3RoZXIsIHNpemVvZihvdGhlciksICYjMzQ7YmluZm10X2JwZl9pbnRlcnAmIzM0OyksIDApOwomIzQzOwlBU1NFUlRfRVEodW5saW5rKEJJTkRfRklSU1QpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNvcHlfZmlsZShvdGhlciwgQklORF9GSVJTVCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEFBUkNINjRfUEFUSCwgQklORF9FWFBFQ1QgQklORF9GSVJTVCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgZW50cnkgcmVwb3J0cyB3aGF0IGl0IGJvdW5kLCB1bmRlciB0aGUgbmFtZXMgaXQgYm91bmQgdGhlbSBhcy4gKi8KJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBlbnRyeV9yZXBvcnRzX2JpbmRpbmdzKQomIzQzO3sKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssCiYjNDM7CQkJCSYjMzQ7YnBmLWludGVycHJldGVyIGZpcnN0ICYjMzQ7IEJJTkRfRklSU1QpKTsKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssCiYjNDM7CQkJCSYjMzQ7YnBmLWludGVycHJldGVyIHNlY29uZCAmIzM0OyBCSU5EX1NFQ09ORCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZWxlY3RpbmcgYSBuYW1lIHRoZSBlbnRyeSBkaWQgbm90IGJpbmQgZmFpbHMgdGhlIGV4ZWMuICovCiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgdW5ib3VuZF9uYW1lX2ZhaWxzKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihCSU5EX0FSTV9QQVRILCBFTV9BUk0pLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGFjdGl2YXRlKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7KSwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShleGVjX2Vycm5vKEJJTkRfQVJNX1BBVEgpLCBFTk9FTlQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBY3RpdmF0aW5nIHNlYWxzIGl0OiB3aGF0IGNhbiBiZSBtYXRjaGVkIGNhbm5vdCBiZSBjaGFuZ2VkLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIHNlYWxlZF9vbmNlX2FjdGl2ZSkKJiM0Mzt7CiYjNDM7CUFTU0VSVF9FUShhY3RpdmF0ZSgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OyksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDt0aGlyZCYjMzQ7LCBCSU5EX1NFQ09ORCksIC1FQlVTWSk7CiYjNDM7CUVYUEVDVF9GQUxTRShlbnRyeV9zaG93cygmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywKJiM0MzsJCQkJICYjMzQ7YnBmLWludGVycHJldGVyIHRoaXJkICYjMzQ7IEJJTkRfU0VDT05EKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBzZWFsIGlzIGZvciBnb29kOiBkaXNhYmxpbmcgdGhlIGVudHJ5IGFnYWluIHJlb3BlbnMgbm90aGluZy4gKi8KJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBkaXNhYmxlX2RvZXNfbm90X3Vuc2VhbCkKJiM0Mzt7CiYjNDM7CUFTU0VSVF9FUShhY3RpdmF0ZSgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OyksIDApOwomIzQzOwlBU1NFUlRfRVEoZW50cnlfY29tbWFuZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDswXG4mIzM0OyksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDt0aGlyZCYjMzQ7LCBCSU5EX1NFQ09ORCksIC1FQlVTWSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aG91dCAmIzM5O0QmIzM5OyBpcyBzZWFsZWQgZnJvbSB0aGUgc3RhcnQuICovCiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgYm9ybl9zZWFsZWQpCiYjNDM7ewomIzQzOwkvKiBBIHNlY29uZCBlbnRyeSBmb3IgdGhlIGhhbmRsZXIgdGhlIGZpeHR1cmUgYWxyZWFkeSBwdWJsaXNoZWQuICovCiYjNDM7CUFTU0VSVF9FUShyZWdpc3Rlcl9lbnRyeSgmIzM0O3Rlc3RfYm9ybl9zZWFsZWQmIzM0OywgJiMzNDtpbnRlcnBfYmluZCYjMzQ7LCBOVUxMKSwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShlbnRyeV9iaW5kKCYjMzQ7dGVzdF9ib3JuX3NlYWxlZCYjMzQ7LCAmIzM0O2ZpcnN0JiMzNDssIEJJTkRfRklSU1QpLCAtRUJVU1kpOwomIzQzOwl1bnJlZ2lzdGVyKCYjMzQ7dGVzdF9ib3JuX3NlYWxlZCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBuYW1lIGlzIGJvdW5kIG9uY2U7IGEgc2Vjb25kIHVzZSBvZiBpdCBpcyByZWZ1c2VkLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGR1cGxpY2F0ZV9uYW1lX3JlZnVzZWQpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDtmaXJzdCYjMzQ7LCBCSU5EX1NFQ09ORCksIC1FRVhJU1QpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIG5hbWUgaXMgYSBwcmludGFibGUgd29yZDogdGhlIGVudHJ5IGZpbGUgcmVwb3J0cyAmIzM5O25hbWUgcGF0aCYjMzk7IGxpbmVzLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIG5hbWVfbXVzdF9iZV9wcmludGFibGUpCiYjNDM7ewomIzQzOwkvKiBBIGNvbnRyb2wgY2hhcmFjdGVyIHdvdWxkIGZvcmdlIGEgbGluZSBpbnRvIHRoZSBlbnRyeSBmaWxlLiAqLwomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDthXHRiJiMzNDssIEJJTkRfRklSU1QpLCAtRUlOVkFMKTsKJiM0MzsJRVhQRUNUX0VRKGVudHJ5X2JpbmQoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssICYjMzQ7YVxuYiYjMzQ7LCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7CiYjNDM7CiYjNDM7CS8qIEEgc3BhY2UgY2Fubm90IGV2ZW4gYmUgc3BlbGxlZDogdGhlIHBhdGggc3RhcnRzIGFmdGVyIHRoZSBmaXJzdCBvbmUuICovCiYjNDM7CUVYUEVDVF9FUShlbnRyeV9iaW5kKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LCAmIzM0O2EgYiYjMzQ7LCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBjb21tYW5kIGVuZHMgYXQgdGhlIHdyaXRlOiBieXRlcyBwYXN0IGFuIGVtYmVkZGVkIG51bCBhcmUgcmVmdXNlZC4gKi8KJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCB0cmFpbGluZ19ieXRlc19yZWZ1c2VkKQomIzQzO3sKJiM0MzsJY2hhciBjbWRbUEFUSF9NQVhdOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CS8qIGVudHJ5X2NvbW1hbmQoKSBjYW5ub3Qgc3BlbGwgYSBudWwsIHNvIHdyaXRlIHRoZSBidWZmZXIgcmF3LiAqLwomIzQzOwlzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCAmIzM0OyYjNDM7bnVsICVzJiMzNDssIEJJTkRfRklSU1QpOwomIzQzOwlsZW4gPSBzdHJsZW4oY21kKSAmIzQzOyAxOwomIzQzOwltZW1jcHkoY21kICYjNDM7IGxlbiwgJiMzNDtqdW5rJiMzNDssIHNpemVvZigmIzM0O2p1bmsmIzM0OykpOwomIzQzOwlsZW4gJiM0Mzs9IHNpemVvZigmIzM0O2p1bmsmIzM0Oyk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihCSU5GTVRfRElSICYjMzQ7L3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgT19XUk9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlFWFBFQ1RfRVEod3JpdGUoZmQsIGNtZCwgbGVuKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LAomIzQzOwkJCQkgJiMzNDticGYtaW50ZXJwcmV0ZXIgbnVsICYjMzQ7IEJJTkRfRklSU1QpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQW4gZW50cnkgYmluZHMgYXQgbW9zdCBCSU5EX01BWCBpbnRlcnByZXRlcnMuICovCiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKQomIzQzO3sKJiM0MzsJY2hhciBuYW1lWzE2XTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CS8qIFRoZSBmaXh0dXJlIGJvdW5kICYjMzQ7Zmlyc3QmIzM0OyBhbmQgJiMzNDtzZWNvbmQmIzM0OyBhbHJlYWR5LiAqLwomIzQzOwlmb3IgKGkgPSAyOyBpICZsdDsgQklORF9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICYjMzQ7biVkJiMzNDssIGkpOwomIzQzOwkJQVNTRVJUX0VRKGVudHJ5X2JpbmQoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssIG5hbWUsIEJJTkRfRklSU1QpLCAwKTsKJiM0MzsJfQomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDtvdmVyJiMzNDssIEJJTkRfRklSU1QpLCAtRU5PU1BDKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfY29tbW9uLmgKaW5kZXggYzY5MDBkZWQwMTlmYy4uNzQ1YWZmODRkYzc4NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oCkBAIC05Myw2ICYjNDM7OTMsNDUgQEAgc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSkKIAl9CiB9CiAKJiM0MzsvKiBXcml0ZSBAbGluZSB0byBAZW50cnkmIzM5O3MgZmlsZSwgcmVwb3J0aW5nIHRoZSBlcnJubyBpdCB3YXMgcmVmdXNlZCB3aXRoLiAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGVudHJ5X2NvbW1hbmQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKmxpbmUpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwlpbnQgZmQsIHJldHZhbCA9IDA7CiYjNDM7CXNpemVfdCBsZW4gPSBzdHJsZW4obGluZSk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgQklORk1UX0RJUiAmIzM0Oy8lcyYjMzQ7LCBlbnRyeSk7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwlpZiAod3JpdGUoZmQsIGxpbmUsIGxlbikgIT0gKHNzaXplX3QpbGVuKQomIzQzOwkJcmV0dmFsID0gLWVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiByZXR2YWw7CiYjNDM7fQomIzQzOwomIzQzOy8qIERvZXMgQGVudHJ5JiMzOTtzIGZpbGUgcmVwb3J0IEBsaW5lPyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlbnRyeV9zaG93cyhjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbGluZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZltQQVRIX01BWF07CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsJRklMRSAqZnA7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgQklORk1UX0RJUiAmIzM0Oy8lcyYjMzQ7LCBlbnRyeSk7CiYjNDM7CWZwID0gZm9wZW4ocGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWZwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7CiYjNDM7CQlidWZbc3RyY3NwbihidWYsICYjMzQ7XG4mIzM0OyldID0gJiMzOTtcMCYjMzk7OwomIzQzOwkJaWYgKCFzdHJjbXAoYnVmLCBsaW5lKSkgewomIzQzOwkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlmY2xvc2UoZnApOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwogLyogTW91bnQgYmluZm10X21pc2MgdW5sZXNzIGl0IGFscmVhZHkgaXMsIGFuZCByZXBvcnQgd2hldGhlciBpdCBpcyB1c2FibGUuICovCiBzdGF0aWMgaW5saW5lIGJvb2wgYmluZm10X21pc2NfYXZhaWxhYmxlKHZvaWQpCiB7CkBAIC0xMTcsMTYgJiM0MzsxNTYsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgYXJ0aWZhY3RfcGF0aChjaGFyICpvdXQsIHNpemVfdCBzeiwgY29uc3QgY2hhciAqbmFtZSkKIH0KIAogLyogUHJvYmUga2VybmVsIHN1cHBvcnQgZm9yIGEgcmVnaXN0cmF0aW9uIGZsYWcgd2l0aCBhIHRocm93YXdheSBlbnRyeS4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpCiB7CiAJY2hhciBydWxlWzY0XTsKIAogCXNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgJiMzNDs6Ym1fZmxhZ19wcm9iZTpFOjpibXByb2JlOjovYmluL3RydWU6JWMmIzM0OywKIAkJIGZsYWcpOwogCWlmICh3cml0ZV9yZWcocnVsZSkpCi0JCXJldHVybiAtMTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl1bnJlZ2lzdGVyKCYjMzQ7Ym1fZmxhZ19wcm9iZSYjMzQ7KTsKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2Rpc2FibGVkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2Rpc2FibGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNDdjOWU4YTRlZTQyYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGlzYWJsZWQuYwpAQCAtMCwwICYjNDM7MSwxNzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGUgJiMzOTtEJiMzOTsgKHJlZ2lzdGVyIGRpc2FibGVkKSBmbGFnIG9mIGJpbmZtdF9taXNjLiBBbiBlbnRyeQomIzQzOyAqIHJlZ2lzdGVyZWQgd2l0aCBpdCBleGlzdHMgYnV0IGNhbm5vdCBiZSBtYXRjaGVkIHVudGlsIHVzZXJzcGFjZSBlbmFibGVzCiYjNDM7ICogaXQsIHdoaWNoIHNwbGl0cyBhIHJlZ2lzdHJhdGlvbiBpbnRvIGNyZWF0ZSBhbmQgYWN0aXZhdGUuCiYjNDM7ICoKJiM0MzsgKiBOZWVkcyByb290IGZvciB0aGUgcmVnaXN0cmF0aW9uOyBubyBicGYgdG9vbGNoYWluIGludm9sdmVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtiaW5mbXRfbWlzY19jb21tb24uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1BR0lDCQkmIzM0OyNESVNBQkxFRC1TRUxGVEVTVCMmIzM0OwomIzQzOyNkZWZpbmUgVEFSR0VUX1BBVEgJJiMzNDsvdG1wL2JpbmZtdF9kaXNhYmxlZF90YXJnZXQmIzM0OwomIzQzOyNkZWZpbmUgSU5URVJQX1BBVEgJJiMzNDsvdG1wL2JpbmZtdF9kaXNhYmxlZF9pbnRlcnAuc2gmIzM0OwomIzQzOyNkZWZpbmUgRU5UUlkJCSYjMzQ7dGVzdF9kaXNhYmxlZCYjMzQ7CiYjNDM7I2RlZmluZSBSVUxFKGZsYWdzKQkmIzM0OzomIzM0OyBFTlRSWSAmIzM0OzpNOjA6JiMzNDsgTUFHSUMgJiMzNDs6OiYjMzQ7IElOVEVSUF9QQVRIICYjMzQ7OiYjMzQ7IGZsYWdzCiYjNDM7CiYjNDM7LyogVGhlIGludGVycHJldGVyIGV4aXRzIHdpdGggYSBjb2RlIHRoZSBoYXJuZXNzIGNhbiByZWNvZ25pc2UuICovCiYjNDM7I2RlZmluZSBFWElUX0lOVEVSUAk3CiYjNDM7CiYjNDM7LyogVGhlIHRhcmdldCBvbmx5IGhhcyB0byBjYXJyeSB0aGUgbWFnaWM7IGl0IGlzIG5ldmVyIGFjdHVhbGx5IGxvYWRlZC4gKi8KJiM0MztzdGF0aWMgaW50IGNyZWF0ZV90YXJnZXQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzEyOF0gPSBNQUdJQyAmIzM0O1xuJiMzNDs7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJdW5saW5rKFRBUkdFVF9QQVRIKTsKJiM0MzsJZmQgPSBvcGVuKFRBUkdFVF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAod3JpdGUoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IChzc2l6ZV90KXNpemVvZihidWYpKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfaW50ZXJwKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1Zls2NF07CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJdW5saW5rKElOVEVSUF9QQVRIKTsKJiM0MzsJZmQgPSBvcGVuKElOVEVSUF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyMhL2Jpbi9zaFxuZXhpdCAlZFxuJiMzNDssIEVYSVRfSU5URVJQKTsKJiM0MzsJaWYgKHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKSAhPSAoc3NpemVfdClzdHJsZW4oYnVmKSkgewomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiBjbG9zZShmZCk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoZGlzYWJsZWQpIHsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoZGlzYWJsZWQpCiYjNDM7ewomIzQzOwlpZiAoZ2V0dWlkKCkgIT0gMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdCYjMzQ7KTsKJiM0MzsJaWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIGJpbmZtdF9taXNjJiMzNDspOwomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSB3aG9sZSBzdWl0ZSBvbiBhIGtlcm5lbCB0aGF0IGRvZXMgbm90IGtub3cgJiMzOTtEJiMzOTsuICovCiYjNDM7CWlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCYjMzk7RCYjMzk7KSkgewomIzQzOwkJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlICYjMzk7RCYjMzk7IGZsYWcmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGNyZWF0ZV9pbnRlcnAoKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShjcmVhdGVfdGFyZ2V0KCksIDApOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGRpc2FibGVkKQomIzQzO3sKJiM0MzsJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7CXVubGluayhUQVJHRVRfUEFUSCk7CiYjNDM7CXVubGluayhJTlRFUlBfUEFUSCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBlbnRyeSBleGlzdHMgYnV0IGRvZXMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuICovCiYjNDM7VEVTVF9GKGRpc2FibGVkLCBpbmVydF91bnRpbF9lbmFibGVkKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKCYjMzQ7RCYjMzQ7KSksIDApOwomIzQzOwlFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgJiMzNDtkaXNhYmxlZCYjMzQ7KSk7CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgbWF0Y2hlcyBpdCwgc28gbm8gYmluYXJ5IGZvcm1hdCBjbGFpbXMgdGhlIHRhcmdldC4gKi8KJiM0MzsJRVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgUlVOX0VOT0VYRUMpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgJiMzNDsxXG4mIzM0OyksIDApOwomIzQzOwlFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgJiMzNDtlbmFibGVkJiMzNDspKTsKJiM0MzsJRVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgRVhJVF9JTlRFUlApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXaXRob3V0ICYjMzk7RCYjMzk7IGFuIGVudHJ5IGlzIG1hdGNoYWJsZSB0aGUgbW9tZW50IGl0IGlzIHJlZ2lzdGVyZWQuICovCiYjNDM7VEVTVF9GKGRpc2FibGVkLCBlbmFibGVkX3dpdGhvdXRfdGhlX2ZsYWcpCiYjNDM7ewomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDsmIzM0OykpLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksICYjMzQ7ZW5hYmxlZCYjMzQ7KSk7CiYjNDM7CUVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogJiMzOTtEJiMzOTsgaXMgc3BlbnQgb24gdGhlIHJlZ2lzdHJhdGlvbjogdGhlIGVudHJ5IGRvZXMgbm90IHJlcG9ydCBpdCBiYWNrLiAqLwomIzQzO1RFU1RfRihkaXNhYmxlZCwgZmxhZ19ub3RfcmVwb3J0ZWQpCiYjNDM7ewomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDtEJiMzNDspKSwgMCk7CiYjNDM7CUVYUEVDVF9GQUxTRShlbnRyeV9zaG93cyhFTlRSWSwgJiMzNDtmbGFnczogRCYjMzQ7KSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCAmIzM0O2ZsYWdzOiAmIzM0OykpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIGRpc2FibGVkIGVudHJ5IGNhbiBiZSBkaXNhYmxlZCBhbmQgZW5hYmxlZCBsaWtlIGFueSBvdGhlci4gKi8KJiM0MztURVNUX0YoZGlzYWJsZWQsIHRvZ2dsZXNfbGlrZV9hbnlfZW50cnkpCiYjNDM7ewomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDtEJiMzNDspKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShlbnRyeV9jb21tYW5kKEVOVFJZLCAmIzM0OzFcbiYjMzQ7KSwgMCk7CiYjNDM7CUFTU0VSVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTsKJiM0MzsJQVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksICYjMzQ7MFxuJiMzNDspLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgUlVOX0VOT0VYRUMpOwomIzQzOwlBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgJiMzNDsxXG4mIzM0OyksIDApOwomIzQzOwlFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7CiYjNDM7fQomIzQzOwomIzQzOy8qICYjMzk7RCYjMzk7IGNvbXBvc2VzIHdpdGggdGhlIGludm9jYXRpb24gZmxhZ3MgYSBzdGF0aWMgZW50cnkgY2FuIGNhcnJ5LiAqLwomIzQzO1RFU1RfRihkaXNhYmxlZCwgY29tcG9zZXNfd2l0aF9pbnZvY2F0aW9uX2ZsYWdzKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKCYjMzQ7UEQmIzM0OykpLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksICYjMzQ7ZGlzYWJsZWQmIzM0OykpOwomIzQzOwlFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgJiMzNDtmbGFnczogUCYjMzQ7KSk7CiYjNDM7fQomIzQzOwomIzQzOy8qICYjMzk7LTEmIzM5OyB0byB0aGUgc3RhdHVzIGZpbGUgc3dlZXBzIGEgc3RhZ2VkIGVudHJ5IHdpdGggZXZlcnl0aGluZyBlbHNlLiAqLwomIzQzO1RFU1RfRihkaXNhYmxlZCwgcmVtb3ZlZF9ieV9yZW1vdmVfYWxsKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDtEJiMzNDspKSwgMCk7CiYjNDM7CUVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCAmIzM0O2Rpc2FibGVkJiMzNDspKTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKEJJTkZNVF9ESVIgJiMzNDsvc3RhdHVzJiMzNDssIE9fV1JPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHdyaXRlKGZkLCAmIzM0Oy0xJiMzNDssIDIpLCAyKTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlFWFBFQ1RfTkUoYWNjZXNzKEJJTkZNVF9ESVIgJiMzNDsvJiMzNDsgRU5UUlksIEZfT0spLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBmaWxlIGhhbmRsZSBoZWxkIGFjcm9zcyBhIHJlbW92YWwgY2Fubm90IHJlc3VycmVjdCB0aGUgZW50cnkuICovCiYjNDM7VEVTVF9GKGRpc2FibGVkLCBub19yZXN1cnJlY3Rpb25fYWZ0ZXJfcmVtb3ZlKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDtEJiMzNDspKSwgMCk7CiYjNDM7CWZkID0gb3BlbihCSU5GTVRfRElSICYjMzQ7LyYjMzQ7IEVOVFJZLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSh3cml0ZShmZCwgJiMzNDstMSYjMzQ7LCAyKSwgMik7CiYjNDM7CUVYUEVDVF9ORShhY2Nlc3MoQklORk1UX0RJUiAmIzM0Oy8mIzM0OyBFTlRSWSwgRl9PSyksIDApOwomIzQzOwomIzQzOwkvKiBBY2NlcHRlZCBsaWtlIGFueSB0b2dnbGUgb2YgYSByZW1vdmVkIGVudHJ5LCBidXQgcHVibGlzaGVzIG5vdGhpbmcuICovCiYjNDM7CUVYUEVDVF9FUSh3cml0ZShmZCwgJiMzNDsxJiMzNDssIDEpLCAxKTsKJiM0MzsJRVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgUlVOX0VOT0VYRUMpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmMKaW5kZXggZDBjYjg0NWRmMWQzMC4uMmViZjczZGU4MDE4YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfdHJhbnNwYXJlbnQuYwpAQCAtNTYsNyAmIzQzOzU2LDcgQEAgRklYVFVSRV9TRVRVUCh0cmFuc3BhcmVudCkKIAlBU1NFUlRfRVEoY3JlYXRlX3RhcmdldCgpLCAwKTsKIAogCS8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAmIzM5O1QmIzM5Oy4gKi8KLQlpZiAoYmluZm10X2ZsYWdfc3VwcG9ydGVkKCYjMzk7VCYjMzk7KSkgewomIzQzOwlpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpIHsKIAkJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwogCQlTS0lQKHJldHVybiwgJiMzNDtrZXJuZWwgd2l0aG91dCB0aGUgJiMzOTtUJiMzOTsgZmxhZyYjMzQ7KTsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xY2U0NWNjYTIxNWYwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYwpAQCAtMCwwICYjNDM7MSw3NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBiaW5mbXRfbWlzY19vcHMgaGFuZGxlciBmb3IgdGhlIHNlbGZ0ZXN0JiMzOTtzIGJvdW5kLWludGVycHJldGVyIGNhc2U6IG9uZQomIzQzOyAqIGhhbmRsZXIsIG9uZSBlbnRyeSwgYW4gaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSAtIGVhY2ggYm91bmQgdG8KJiM0MzsgKiBhIGZpbGUgd2hlbiB0aGUgZW50cnkgd2FzIHJlZ2lzdGVyZWQgcmF0aGVyIHRoYW4gdG8gYSBwYXRoIHJlc29sdmVkIGF0CiYjNDM7ICogZXhlYyB0aW1lLiBUaGUgbG9hZCBwcm9ncmFtIG5hbWVzIHRoZSBvbmUgaXQgd2FudHM7IGEgbmFtZSB0aGUgZW50cnkgZGlkCiYjNDM7ICogbm90IGJpbmQgZmFpbHMgdGhlIGV4ZWMsIHdoaWNoIHRoZSBoYXJuZXNzIGNoZWNrcyB0b28uCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzOyNkZWZpbmUgRUlfQ0xBU1MJNAomIzQzOyNkZWZpbmUgRUxGQ0xBU1M2NAkyCiYjNDM7I2RlZmluZSBFX01BQ0hJTkVfT0ZGCTE4CiYjNDM7I2RlZmluZSBFTV9BUk0JCTQwCiYjNDM7I2RlZmluZSBFTV9BQVJDSDY0CTE4MwomIzQzOyNkZWZpbmUgRU1fUklTQ1YJMjQzCiYjNDM7CiYjNDM7ZXh0ZXJuIGludCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeikgX19rc3ltOwomIzQzOwomIzQzOy8qIFRoZSBndWVzdCBhcmNoaXRlY3R1cmUgb2YgYSA2NC1iaXQgRUxGLCBvciB6ZXJvIGlmIGl0IGlzIG5vdCBvbmUuICovCiYjNDM7c3RhdGljIF9fdTE2IGVsZl9tYWNoaW5lKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiYjNDM7ewomIzQzOwlpZiAoYnBybS0mZ3Q7YnVmWzBdICE9IDB4N2YgfHwgYnBybS0mZ3Q7YnVmWzFdICE9ICYjMzk7RSYjMzk7IHx8CiYjNDM7CSAgICBicHJtLSZndDtidWZbMl0gIT0gJiMzOTtMJiMzOTsgfHwgYnBybS0mZ3Q7YnVmWzNdICE9ICYjMzk7RiYjMzk7IHx8CiYjNDM7CSAgICBicHJtLSZndDtidWZbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogTGl0dGxlLWVuZGlhbiAxNi1iaXQgZmllbGQsIHJlYWQgYnl0ZS13aXNlIGZvciB0aGUgdmVyaWZpZXIuICovCiYjNDM7CXJldHVybiAoX191OClicHJtLSZndDtidWZbRV9NQUNISU5FX09GRl0gfAomIzQzOwkgICAgICAgKChfX3UxNikoX191OClicHJtLSZndDtidWZbRV9NQUNISU5FX09GRiAmIzQzOyAxXSAmbHQ7Jmx0OyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy5zL21hdGNoJiMzNDspCiYjNDM7Ym9vbCBCUEZfUFJPRyhpbnRlcnBfYmluZF9tYXRjaCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CV9fdTE2IG1hY2hpbmUgPSBlbGZfbWFjaGluZShicHJtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hY2hpbmUgPT0gRU1fQUFSQ0g2NCB8fCBtYWNoaW5lID09IEVNX1JJU0NWIHx8CiYjNDM7CSAgICAgICBtYWNoaW5lID09IEVNX0FSTTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy5zL2xvYWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaW50ZXJwX2JpbmRfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIE5hbWVzLCBub3QgcGF0aHM6IGVhY2ggb25lIHNlbGVjdHMgYSBmaWxlIHRoZSBlbnRyeSBwcmUtb3BlbmVkLCBzbwomIzQzOwkgKiBub3RoaW5nIGlzIHJlc29sdmVkIGhlcmUgb3IgbGF0ZXIsIGluIGFueSBuYW1lc3BhY2UuIFRoZSBidWZmZXJzCiYjNDM7CSAqIGFyZSBvbiB0aGUgc3RhY2sgYmVjYXVzZSB0aGUgdmVyaWZpZXIgcmVqZWN0cyAucm9kYXRhIGZvciBhIHNpemVkCiYjNDM7CSAqIG1lbW9yeSBhcmd1bWVudC4KJiM0MzsJICovCiYjNDM7CWNoYXIgZmlyc3RbXSA9ICYjMzQ7Zmlyc3QmIzM0OzsKJiM0MzsJY2hhciBzZWNvbmRbXSA9ICYjMzQ7c2Vjb25kJiMzNDs7CiYjNDM7CWNoYXIgdW5ib3VuZFtdID0gJiMzNDt1bmJvdW5kJiMzNDs7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZWxmX21hY2hpbmUoYnBybSkpIHsKJiM0MzsJY2FzZSBFTV9BQVJDSDY0OgomIzQzOwkJcmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBmaXJzdCwgc2l6ZW9mKGZpcnN0KSk7CiYjNDM7CWNhc2UgRU1fUklTQ1Y6CiYjNDM7CQlyZXR1cm4gYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKGJwcm0sIHNlY29uZCwgc2l6ZW9mKHNlY29uZCkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBlbnRyeSBib3VuZCBub3RoaW5nIHVuZGVyIHRoaXMgbmFtZTogLUVOT0VOVCBmYWlscyB0aGUgZXhlYy4gKi8KJiM0MzsJcmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCB1bmJvdW5kLCBzaXplb2YodW5ib3VuZCkpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDspCiYjNDM7c3RydWN0IGJpbmZtdF9taXNjX29wcyBpbnRlcnBfYmluZCA9IHsKJiM0MzsJLm1hdGNoCT0gKHZvaWQgKilpbnRlcnBfYmluZF9tYXRjaCwKJiM0MzsJLmxvYWQJPSAodm9pZCAqKWludGVycF9iaW5kX2xvYWQsCiYjNDM7CS5uYW1lCT0gJiMzNDtpbnRlcnBfYmluZCYjMzQ7LAomIzQzO307CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTI0CgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIEJpbmZtdF9taXNjIEludGVycHJldGVyIEJpbmRpbmcqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCB0aGF0IGludHJvZHVjZXMgaW50ZXJwcmV0ZXIgYmluZGluZyB0byBgYmluZm10X21pc2NgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgaW4gYGZzL2JpbmZtdF9taXNjLmNgLCBgZnMvYmluZm10X21pc2NfYnBmLmNgLCBhbmQgYGZzL2V4ZWMuY2AuIEl0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgd2UgbmVlZCB0byBmdXp6IGl0IHRob3JvdWdobHkuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhICYjMzQ7RCYjMzQ7IGZsYWcgZm9yIGRpc2FibGVkIGVudHJpZXMgd2hpY2ggY2FuIGhhdmUgYW4gaW50ZXJwcmV0ZXIgYm91bmQgbGF0ZXIgd2l0aCB0aGUgJiMzNDsmIzQzO25hbWUgcGF0aCYjMzQ7IGZlYXR1cmUsIHRoZW4gYmUgc2VsZWN0ZWQgYnkgYSBCUEYgaGFuZGxlciB1c2luZyBhIG5ldyBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgIGtmdW5jLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0LCBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gY2hvb3NlIGFuIGludGVycHJldGVyIHdpdGhvdXQgZG9pbmcgcGF0aCByZXNvbHV0aW9uIGF0IGV4ZWN1dGlvbiB0aW1lLgoKU2luY2UgaXTigJlzIGluIHRoZSBjb3JlIGtlcm5lbCwgZnV6emluZyBpcyBlc3NlbnRpYWwgaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGBmcy9iaW5mbXRfbWlzYy5jYCwgSSYjMzk7dmUgZ290OgoKKiAgIGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAKKiAgIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIChzdGF0aWMpCiogICBgYm1fZW50cnlfYWRkX2ludGVycGAgKHN0YXRpYykKKiAgIGBibV9lbnRyeV93cml0ZWAgKHN0YXRpYykKKiAgIGBjcmVhdGVfZW50cnlgCiogICBgYWRkX2VudHJ5YAoqICAgYGJtX3JlZ2lzdGVyX3dyaXRlYAoqICAgYGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcmAKKiAgIGBlbnRyeV9vcGVuX2ludGVycHJldGVyYAoKQW5kIGZyb20gYGZzL2JpbmZtdF9taXNjX2JwZi5jYDoKCiogICBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwYCAoa2Z1bmMsIG5vbi1zdGF0aWMpCiogICBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCAoa2Z1bmMsIG1vZGlmaWVkKQoKQWxyaWdodCwgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGFuZCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCBzZWVtIGltbWVkaWF0ZWx5IHJlbGV2YW50IGFzIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFyZSBmaWxlIG9wZXJhdGlvbnMsIHNvIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgdGhleSBjYW4gc3RpbGwgYmUgcmVhY2hlZCB2aWEgc3lzY2FsbHMsIHRoZXJlZm9yZSBhcmUgaW1wb3J0YW50LiBIb3dldmVyLCBgbG9hZF9taXNjX2JpbmFyeWAgaXMgbGlrZWx5IHRoZSBtYWluIGVudHJ5cG9pbnQgaW50byB0aGlzIHdob2xlIG1vZHVsZSBzbyB3ZSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBpdCB0b28uCgpUbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lcyBhbmQgc2lnbmF0dXJlcywgSSYjMzk7bSBnb2luZyB0byBydW4gYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoaXQgZXZlcnkgYW5nbGUgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHNzaXplX3R8dm9pZHxzdHJ1Y3QgZmlsZSBcXCp8Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCBcXCp8Y29uc3QgY2hhciBcXCopLiogKGJtX2VudHJ5X3dyaXRlfGJtX3JlZ2lzdGVyX3dyaXRlfGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwfGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycHxicGZfYmlucHJtX3NldF9pbnRlcnB8bG9hZF9taXNjX2JpbmFyeXxlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJ8ZW50cnlfb3Blbl9pbnRlcnByZXRlcnxibV9lbnRyeV9hZGRfaW50ZXJwKVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NjYKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgcmVhc3Nlc3MuIFRoZSBjdXJyZW50IGFwcHJvYWNoLCB3aGlsZSBwb3RlbnRpYWxseSBwb3dlcmZ1bCwgbWlnaHQgYmUgb3ZlcmNvbXBsaWNhdGluZyB0aGluZ3MuIExldCYjMzk7cyBzZWUgaWYgYSBtb3JlIGJhc2ljIGBncmVwYCBjYW4gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRjb21lLiBTb21ldGltZXMsIGJydXRlIGZvcmNlIGFuZCBzaW1wbGljaXR5IHlpZWxkIGJldHRlciByZXN1bHRzIHRoYW4gY29tcGxleCwgbGF5ZXJlZCBzb2x1dGlvbnMsIGVzcGVjaWFsbHkgZm9yIGluaXRpYWwgZGVidWdnaW5nIG9yIHZhbGlkYXRpb24uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgcGF0dGVybiBhbmQgaXRlcmF0aXZlbHkgcmVmaW5lIGl0IGFzIG5lZWRlZCwgZm9jdXNpbmcgb24gbWluaW1pemluZyB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IGF0IHRoaXMgc3RhZ2UuIEl0JiMzOTtzIGEgcHJhZ21hdGljIHNoaWZ0IOKAkyBhdm9pZCBvdmVya2lsbCwgZ2V0IHNvbWV0aGluZyBmdW5jdGlvbmFsIGZpcnN0LCB0aGVuIG9wdGltaXplIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGJtX2VudHJ5X3dyaXRlfGJtX3JlZ2lzdGVyX3dyaXRlfGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwfGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycHxicGZfYmlucHJtX3NldF9pbnRlcnB8bG9hZF9taXNjX2JpbmFyeXxlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJ8ZW50cnlfb3Blbl9pbnRlcnByZXRlcnxibV9lbnRyeV9hZGRfaW50ZXJwKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdD0xOTQ9YW5kIGRlcml2ZSB0aGUgaW50ZXJwcmV0ZXIgZnJvbSB0aGUgYmluYXJ5JiMzOTtzIGxvY2F0aW9uLiBJdCBzZWxlY3RzIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q6MTk1OmludGVycHJldGVyIGJ5IGNhbGxpbmcgdGhlIGBgYnBmX2JpbnBybV9zZXRfaW50ZXJwKClgYCBrZnVuYyB3aXRoIGFuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdC0xOTYtYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGBgMGBgLiBBIG1hdGNoIGlzIGNvbW1pdHRlZDogYSBmYWlsaW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q9MjIzPVRoZSBgYGxvYWRgYCBwcm9ncmFtIHRoZW4gc2VsZWN0cyBvbmUgcGVyIGV4ZWMgYnkgbmFtZSB3aXRoIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q6MjI0OmBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgYCBrZnVuYywgYW5kIGV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QtMjI1LWZpbGUgdGhhdCB3YXMgb3BlbmVkLiBUaGUgcGF0aCBkZWNpZGVzIHdoaWNoIGZpbGUgaXMgYm91bmQgYW5kIG5vdGhpbmdcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdD0yNTU9VGhlIGBgbG9hZGBgIHByb2dyYW0gY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBhcmd1bWVudCB0byB0aGUgaW50ZXJwcmV0ZXIgd2l0aFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q6MjU2OnRoZSBgYGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcoKWBgIGtmdW5jLiBJdCBpcyBpbnNlcnRlZCBiZXR3ZWVuIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QtMjU3LWludGVycHJldGVyIGFuZCB0aGUgYmluYXJ5LCBleGFjdGx5IGxpa2UgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGEgYGAjIWBgXG4tLVxuZnMvYmluZm10X21pc2MuYz0xMDM9c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5IHtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTExNS1cdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJwcztcdC8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi9cbmZzL2JpbmZtdF9taXNjLmM6MTE2Olx0cmVmY291bnRfdCB1c2VycztcdFx0Lyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovXG5mcy9iaW5mbXRfbWlzYy5jLTExNy1cdHN0cnVjdCByY3VfaGVhZCByY3U7XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMzgtXG5mcy9iaW5mbXRfbWlzYy5jOjEzOTovKiBQcm90ZWN0cyB0aGUgZW50cnkgd2FsayBpbiBsb2FkX21pc2NfYmluYXJ5KCksIHdoaWNoIG1heSBzbGVlcCBpbiBpdC4gKi9cbmZzL2JpbmZtdF9taXNjLmMtMTQwLURFRklORV9TVEFUSUNfU1JDVV9GQVNUKGJtX2VudHJpZXNfc3JjdSk7XG4tLVxuZnMvYmluZm10X21pc2MuYz0yMzE9c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTIzOC0vKipcbmZzL2JpbmZtdF9taXNjLmM6MjM5OiAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWVcbmZzL2JpbmZtdF9taXNjLmMtMjQwLSAqIEBpbnRlcnBzOiB0aGUgaW50ZXJwcmV0ZXJzIHRoZSBtYXRjaGVkIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTI0NT1jb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICpcbmZzL2JpbmZtdF9taXNjLmM6MjQ2OmJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpXG5mcy9iaW5mbXRfbWlzYy5jLTI0Ny17XG4tLVxuZnMvYmluZm10X21pc2MuYz0zMTI9c3RhdGljIGludCBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzE4LVxuZnMvYmluZm10X21pc2MuYzozMTk6XHRpZiAoYmluZm10X21pc2NfZmluZF9pbnRlcnAoXHUwMDI2ZS1cdTAwM2VpbnRlcnBzLCBuYW1lKSlcbmZzL2JpbmZtdF9taXNjLmMtMzIwLVx0XHRyZXR1cm4gLUVFWElTVDtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTM0MD1zdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM1My0gKlxuZnMvYmluZm10X21pc2MuYzozNTQ6ICogRnJlZSBlbnRyeSBzeW5jaW5nIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpIGFuZCBkZWZlciBmaW5hbCBmcmVlIHRvXG5mcy9iaW5mbXRfbWlzYy5jOjM1NTogKiBsb2FkX21pc2NfYmluYXJ5KCkgaW4gY2FzZSBpdCBpcyB1c2luZyB0aGUgYmluYXJ5IHR5cGUgaGFuZGxlciB3ZSB3ZXJlXG5mcy9iaW5mbXRfbWlzYy5jLTM1Ni0gKiByZXF1ZXN0ZWQgdG8gcmVtb3ZlLiBBbHNvIHRoZSB0ZWFyZG93biBmb3IgYSByZWdpc3RyYXRpb24gdGhhdCBmYWlsc1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9Mzk5PXN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2MgKmN1cnJlbnRfYmluZm10X21pc2Modm9pZClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTQxNC0vKipcbmZzL2JpbmZtdF9taXNjLmM6NDE1OiAqIGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlciAtIGdldCB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoZSBtYXRjaGVkIEBlXG5mcy9iaW5mbXRfbWlzYy5jLTQxNi0gKiBAZTogbWF0Y2hlZCBiaW5hcnkgdHlwZSBoYW5kbGVyXG4tLVxuZnMvYmluZm10X21pc2MuYy00MjUtICovXG5mcy9iaW5mbXRfbWlzYy5jOjQyNjpzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfc2VsZWN0X2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtNDI3LVx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTQ3Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTUwNC0vKipcbmZzL2JpbmZtdF9taXNjLmM6NTA1OiAqIGVudHJ5X29wZW5faW50ZXJwcmV0ZXIgLSBvcGVuIHRoZSBlbnRyeSYjMzk7cyBpbnRlcnByZXRlciBmb3IgZXhlY3V0aW9uXG5mcy9iaW5mbXRfbWlzYy5jLTUwNi0gKiBAZTogbWF0Y2hlZCBiaW5hcnkgdHlwZSBoYW5kbGVyXG4tLVxuZnMvYmluZm10X21pc2MuYy01MTUtICovXG5mcy9iaW5mbXRfbWlzYy5jOjUxNjpzdGF0aWMgc3RydWN0IGZpbGUgKmVudHJ5X29wZW5faW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy01MTctXHRcdFx0XHRcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X21pc2MuYz01NTk9c3RhdGljIGludCBidWlsZF9pbnRlcnBfYXJndihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICppbnRlcnByZXRlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTYwOC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NjA5OnN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuZnMvYmluZm10X21pc2MuYy02MTAte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNjI4LVxuZnMvYmluZm10X21pc2MuYzo2Mjk6XHRpbnRlcnByZXRlciA9IGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihmbXQsIGJwcm0pO1xuZnMvYmluZm10X21pc2MuYy02MzAtXHRpZiAoSVNfRVJSKGludGVycHJldGVyKSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTY0NS1cdGlmIChmbGFncyBcdTAwMjYgTUlTQ19GTVRfTE9BREVSKSB7XG5mcy9iaW5mbXRfbWlzYy5jOjY0NjpcdFx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgYnBybSwgaW50ZXJwcmV0ZXIpO1xuZnMvYmluZm10X21pc2MuYy02NDctXHRcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKSB7XG4tLVxuZnMvYmluZm10X21pc2MuYy02NjctXG5mcy9iaW5mbXRfbWlzYy5jOjY2ODpcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGJwcm0sIGludGVycHJldGVyKTtcbmZzL2JpbmZtdF9taXNjLmMtNjY5LVx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpXG4tLVxuZnMvYmluZm10X21pc2MuYz0xMTM3PXN0YXRpYyB2b2lkIGJtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMTYxLSAqIHVubGluaygyKSBoYXBwZW5zIHVuZGVyIHRoZSBleGNsdXNpdmVseSBoZWxkIGlub2RlIGxvY2sgb2YgdGhlIHJvb3RcbmZzL2JpbmZtdF9taXNjLmM6MTE2MjogKiBkZW50cnkga2VlcGluZyB0aGUgbGlzdCBzdGFibGUgZm9yIHdyaXRlcnMuIGxvYWRfbWlzY19iaW5hcnkoKSB3YWxrcyBpdFxuZnMvYmluZm10X21pc2MuYy0xMTYzLSAqIGNvbmN1cnJlbnRseSB1bmRlciBTUkNVLiBUaGUgZW50cmllc19sb2NrIGlzIG9ubHkgaGVsZCBhcm91bmQgdGhlIGFjdHVhbFxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTI1Mj1zdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjU5LVxuZnMvYmluZm10X21pc2MuYzoxMjYwOlx0Lyogc2VxX29wZW4oKSBjbGVhcnMgRk1PREVfUFdSSVRFLCBibV9lbnRyeV93cml0ZSgpIHRha2VzIGFueSBvZmZzZXQgKi9cbmZzL2JpbmZtdF9taXNjLmMtMTI2MS1cdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjczLS8qKlxuZnMvYmluZm10X21pc2MuYzoxMjc0OiAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnlcbmZzL2JpbmZtdF9taXNjLmMtMTI3NS0gKiBAZTogdGhlIGVudHJ5XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjg4LSAqL1xuZnMvYmluZm10X21pc2MuYzoxMjg5OnN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0xMjkwLVx0XHRcdFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTM0OS1cbmZzL2JpbmZtdF9taXNjLmM6MTM1MDpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTM1MS1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTM2Ny1cdGlmIChidWZbMF0gPT0gJiMzOTsmIzQzOyYjMzk7KVxuZnMvYmluZm10X21pc2MuYzoxMzY4Olx0XHRyZXR1cm4gYm1fZW50cnlfYWRkX2ludGVycChlLCBmaWxlLCBidWYsIGNvdW50KTtcbmZzL2JpbmZtdF9taXNjLmMtMTM2OS1cbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTE0MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fZW50cnlfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0MTAtXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuZnMvYmluZm10X21pc2MuYzoxNDExOlx0LndyaXRlXHRcdD0gYm1fZW50cnlfd3JpdGUsXG5mcy9iaW5mbXRfbWlzYy5jLTE0MTItXHQubGxzZWVrXHRcdD0gc2VxX2xzZWVrLFxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQxOT1zdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDQ5LVxuZnMvYmluZm10X21pc2MuYzoxNDUwOnN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy0xNDUxLVx0XHRcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTE0OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fcmVnaXN0ZXJfb3BlcmF0aW9ucyA9IHtcbmZzL2JpbmZtdF9taXNjLmM6MTQ5MjpcdC53cml0ZVx0XHQ9IGJtX3JlZ2lzdGVyX3dyaXRlLFxuZnMvYmluZm10X21pc2MuYy0xNDkzLVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTU0Nj1zdGF0aWMgaW50IGJtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTYwMy1cdCAqIHRoYXQgdGhlIGJpbmFyeSB0eXBlIGxpc3QgZm9yIHRoaXMgYmluZm10X21pc2MgbW91bnQgaXMgZW1wdHkgbWFraW5nXG5mcy9iaW5mbXRfbWlzYy5jOjE2MDQ6XHQgKiBsb2FkX21pc2NfYmluYXJ5KCkgcmV0dXJuIC1FTk9FWEVDIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgLVx1MDAzZWVuYWJsZWRcbmZzL2JpbmZtdF9taXNjLmMtMTYwNS1cdCAqIGlzIHRydWUuIEluc3RlYWQsIGlmIHNvbWVvbmUgbW91bnRzIGJpbmZtdF9taXNjIGZvciB0aGUgZmlyc3QgdGltZSBvclxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTY0OT1zdGF0aWMgc3RydWN0IGxpbnV4X2JpbmZtdCBtaXNjX2Zvcm1hdCA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTY1MC1cdC5tb2R1bGUgPSBUSElTX01PRFVMRSxcbmZzL2JpbmZtdF9taXNjLmM6MTY1MTpcdC5sb2FkX2JpbmFyeSA9IGxvYWRfbWlzY19iaW5hcnksXG5mcy9iaW5mbXRfbWlzYy5jLTE2NTItfTtcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYz0xMTk9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuLS1cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEyMS0vKipcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjEyMjogKiBicGZfYmlucHJtX3NldF9pbnRlcnAgLSBzZWxlY3QgdGhlIGludGVycHJldGVyIGZvciB0aGUgY3VycmVudCBleGVjXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMjMtICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMTMxLSAqIHJldHVybnMuIENhbGxpbmcgaXQgYWdhaW4gcmVwbGFjZXMgdGhlIHNlbGVjdGlvbiwgYXMgZG9lcyBzZWxlY3RpbmcgYW5cbmZzL2JpbmZtdF9taXNjX2JwZi5jOjEzMjogKiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmQgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEzMy0gKlxuLS1cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEzNS0gKi9cbmZzL2JpbmZtdF9taXNjX2JwZi5jOjEzNjpfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMzctXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9fc3opXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMTYwLS8qKlxuZnMvYmluZm10X21pc2NfYnBmLmM6MTYxOiAqIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCAtIHJ1biB0aGlzIGV4ZWMgdW5kZXIgYW4gaW50ZXJwcmV0ZXIgdGhlIGVudHJ5IGJvdW5kXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNjItICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMTY2LSAqIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb2FkIHByb2dyYW0gb2YgYSBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGhhbmRsZXJcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjE2NzogKiBpbnN0ZWFkIG9mIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpLiBJdCBzZWxlY3RzIG9uZSBvZiB0aGUgaW50ZXJwcmV0ZXJzXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNjgtICogdGhlIG1hdGNoZWQgZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aCwgZWFjaCBvZiB3aGljaCB3YXMgb3BlbmVkIG9uY2Ugd2hlblxuLS1cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTE3Ny0gKi9cbmZzL2JpbmZtdF9taXNjX2JwZi5jOjE3ODpfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNzktXHRcdFx0XHRcdCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMTkwLVxuZnMvYmluZm10X21pc2NfYnBmLmM6MTkxOlx0aW50ZXJwID0gYmluZm10X21pc2NfZmluZF9pbnRlcnAoYnBybS1cdTAwM2VicGZfaW50ZXJwcywgbmFtZSk7XG5mcy9iaW5mbXRfbWlzY19icGYuYy0xOTItXHRpZiAoIWludGVycClcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYy0yMDMtLyoqXG5mcy9iaW5mbXRfbWlzY19icGYuYzoyMDQ6ICogYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZyAtIHNldCBhIHNpbmdsZSBhcmd1bWVudCBmb3IgdGhlIGludGVycHJldGVyXG5mcy9iaW5mbXRfbWlzY19icGYuYy0yMDUtICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMjE1LSAqL1xuZnMvYmluZm10X21pc2NfYnBmLmM6MjE2Ol9fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NldF9pbnRlcnBfYXJnKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG5mcy9iaW5mbXRfbWlzY19icGYuYy0yMTctXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqYXJnLCBzaXplX3QgYXJnX19zeilcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYz0yODA9QlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxuZnMvYmluZm10X21pc2NfYnBmLmM6MjgxOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjI4MjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXG5mcy9iaW5mbXRfbWlzY19icGYuYzoyODM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcsIEtGX1NMRUVQQUJMRSlcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTI4NC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfZmxhZ3MsIEtGX1NMRUVQQUJMRSlcbi0tXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg9MTA9c3RydWN0IHVzZXJfbmFtZXNwYWNlO1xuLS1cbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaC0zMC0gKiBpcyBoYW5kZWQgdG8gdGhlIGhhbmRsZXImIzM5O3MgbG9hZCBwcm9ncmFtIGZvciB0aGUgZHVyYXRpb24gb2Ygb25lIGV4ZWMsXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg6MzE6ICogd2hpY2ggcGlja3Mgb25lIHdpdGggYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKCkuXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgtMzItICovXG4tLVxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oPTQwPWNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oOjQxOmJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpO1xuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oLTQyLVxuLS1cbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaD01OT1lbnVtIGJwZl9iaW5wcm1fZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaC03NC0gKiBAbG9hZDogIHNlbGVjdCBhbiBpbnRlcnByZXRlciBmb3IgdGhlIG1hdGNoZWQgQGJwcm0gdmlhXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg6NzU6ICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSwgb3Igb25lIHRoZSBlbnRyeSBib3VuZCB2aWFcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaDo3NjogKiAgICAgICAgIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLCBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXNcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaC03Ny0gKiAgICAgICAgIGNvbW1pdHRlZCwgc28gYSBmYWlsdXJlIGZhaWxzIHRoZSBleGVjIGluc3RlYWQgb2YgZmFsbGluZ1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYz0xND1jaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYy0xOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYzoyMDpleHRlcm4gaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICpwYXRoLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTIxLVx0XHRcdFx0IHNpemVfdCBwYXRoX19zeikgX19rc3ltO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYz00Mz1pbnQgQlBGX1BST0coYnBmX2ludGVycF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYy00NS1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmM6NDY6XHQgKiBLZWVwIHRoZSBwYXRoIG9uIHRoZSAod3JpdGFibGUpIHN0YWNrOiBicGZfYmlucHJtX3NldF9pbnRlcnAoKSB0YWtlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTQ3LVx0ICogYSBzaXplZCBtZW1vcnkgYXJnIGFuZCB0aGUgdmVyaWZpZXIgcmVqZWN0cyBhIHJlYWQtb25seSAucm9kYXRhXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTUyLVx0LyogQHBhdGhfX3N6IGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBOVUw7IDAgY29tbWl0cyB0aGUgc2VsZWN0aW9uLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jOjUzOlx0cmV0dXJuIGJwZl9iaW5wcm1fc2V0X2ludGVycChicHJtLCBpbnRlcnAsIHNpemVvZihpbnRlcnApKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYy01NC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYz0xMz1jaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jOjIyOmV4dGVybiBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jLTIzLVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeikgX19rc3ltO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM9NDg9aW50IEJQRl9QUk9HKGludGVycF9iaW5kX2xvYWQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYy02MS1cdGNhc2UgRU1fQUFSQ0g2NDpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM6NjI6XHRcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgZmlyc3QsIHNpemVvZihmaXJzdCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYy02My1cdGNhc2UgRU1fUklTQ1Y6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jOjY0Olx0XHRyZXR1cm4gYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKGJwcm0sIHNlY29uZCwgc2l6ZW9mKHNlY29uZCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYy02NS1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jLTY3LVx0LyogVGhlIGVudHJ5IGJvdW5kIG5vdGhpbmcgdW5kZXIgdGhpcyBuYW1lOiAtRU5PRU5UIGZhaWxzIHRoZSBleGVjLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYzo2ODpcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgdW5ib3VuZCwgc2l6ZW9mKHVuYm91bmQpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtNjktfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jPTEyPWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmMtMTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2xvYWRlci5icGYuYzoxODpleHRlcm4gaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICpwYXRoLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmMtMTktXHRcdFx0XHQgc2l6ZV90IHBhdGhfX3N6KSBfX2tzeW07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmM9Mzg9aW50IEJQRl9QUk9HKGxvYWRlcl9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jLTQ3LVx0LyogQHBhdGhfX3N6IGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBOVUw7IDAgY29tbWl0cyB0aGUgc2VsZWN0aW9uLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmM6NDg6XHRyZXR1cm4gYnBmX2JpbnBybV9zZXRfaW50ZXJwKGJwcm0sIGludGVycCwgc2l6ZW9mKGludGVycCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmMtNDktfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy03LSAqIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGJpbmFyeSBiZWluZyBleGVjdXRlZCBhbmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYzo4OiAqIHNlbGVjdGVkIHZpYSBicGZfYmlucHJtX3NldF9pbnRlcnAoKS4gVGhlIG1hdGNoIHByb2dyYW0gcmVhZHMgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmMtOS0gKiBwcm9ncmFtIGhlYWRlcnMgaXRzZWxmLCBzbyBhbnl0aGluZyBlbHNlIG5ldmVyIGNvbW1pdHMgdG8gdGhpc1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYz0zOD1leHRlcm4gaW50IGJwZl9wYXRoX2RfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9uaXhfb3JpZ2luLmJwZi5jLTM5LVx0XHRcdCAgIHNpemVfdCBidWZfX3N6KSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM6NDA6ZXh0ZXJuIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy00MS1cdFx0XHRcdCBzaXplX3QgcGF0aF9fc3opIF9fa3N5bTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM9MTI3PWludCBCUEZfUFJPRyhuaXhfb3JpZ2luX2xvYWQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9uaXhfb3JpZ2luLmJwZi5jLTIxMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYzoyMTE6XHRyZXQgPSBicGZfYmlucHJtX3NldF9pbnRlcnAoYnBybSwgc2MtXHUwMDNlcGF0aCwgcnN6KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy0yMTItb3V0X2RlbDpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jPTEyPWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYy0xNy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvdHJhbnNwYXJlbnQuYnBmLmM6MTg6ZXh0ZXJuIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvdHJhbnNwYXJlbnQuYnBmLmMtMTktXHRcdFx0XHQgc2l6ZV90IHBhdGhfX3N6KSBfX2tzeW07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYz0zOT1pbnQgQlBGX1BST0codHJhbnNwYXJlbnRfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jLTQ4LVx0LyogQHBhdGhfX3N6IGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBOVUw7IDAgY29tbWl0cyB0aGUgc2VsZWN0aW9uLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYzo0OTpcdHJldHVybiBicGZfYmlucHJtX3NldF9pbnRlcnAoYnBybSwgaW50ZXJwLCBzaXplb2YoaW50ZXJwKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jLTUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBJbnRlcnByZXRlciBTZWxlY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIGtlcm5lbCBzZWxlY3RzIGludGVycHJldGVycy4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGlzIHByb2Nlc3MuIExldCYjMzk7cyBzZWUsIHRoZSBvbmVzIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFyZTogYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGBicGZfYmlucHJtX3NldF9pbnRlcnBgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgLCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgLiAgSSYjMzk7bGwgYWxzbyBrZWVwIGBibV9lbnRyeV9hZGRfaW50ZXJwYCwgYGJtX2VudHJ5X3dyaXRlYCwgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAgaW4gbWluZCwgZXZlbiB0aG91Z2ggc29tZSBhcmUgc3RhdGljOyBsaXN0aW5nIHRoZW0gd29uJiMzOTt0IGh1cnQsIGFuZCBtaWdodCBiZSBoZWxwZnVsIGxhdGVyLgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgZnMvYmluZm10X21pc2MuY2AgYW5kIGh1bnQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGJtX2VudHJ5X3dyaXRlYCwgYGJtX3JlZ2lzdGVyX3dyaXRlYCwgYW5kIGBibV9lbnRyeV9hZGRfaW50ZXJwYC4gQWgsIHJpZ2h0LCB0aG9zZSBhcmUgZmlsZSBvcGVyYXRpb25zISAgT2theSwgSSBjYW4gZGVmaW5pdGVseSBsaXN0IHRob3NlLiAgRXZlbiB0aG91Z2ggYGJtX2VudHJ5X3dyaXRlYCBpcyBtYXJrZWQgYHN0YXRpY2AsIGl0JiMzOTtzIHN0aWxsIGEgZ29vZCBwbGFjZSB0byBwb2tlIGFyb3VuZC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGxvb2sgaW50byBhcmU6IGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAsIGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnBgLCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCwgYGxvYWRfbWlzY19iaW5hcnlgLCBgYm1fZW50cnlfd3JpdGVgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBgYm1fZW50cnlfYWRkX2ludGVycGAsIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgLCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgLgoKTmV4dCwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYEtjb25maWdgIHRvIHNlZSBob3cgYEJJTkZNVF9NSVNDYCBhbmQgYEJJTkZNVF9NSVNDX0JQRmAgYXJlIGNvbmZpZ3VyZWQgYW5kIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUgc2VsZWN0aW9uIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIGJlZ2luIHRoZSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJJTkZNVF9NSVNDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10PTEzOD1jb25maWcgQklORk1UX1pGTEFUXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ0LVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTQ1OmNvbmZpZyBCSU5GTVRfTUlTQ1xuZnMvS2NvbmZpZy5iaW5mbXQtMTQ2LVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIE1JU0MgYmluYXJpZXNcJiMzNDtcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC0xNzAtXG5mcy9LY29uZmlnLmJpbmZtdDoxNzE6Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVx0Ym9vbCBcJiMzNDtCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZnMvS2NvbmZpZy5iaW5mbXRgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzEuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgb3IgcG90ZW50aWFsbHkgcmVsZXZhbnQgdGhlcmUgaW4gcmVsYXRpb24gdG8gd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIHBlcmhhcHMgZGVhbGluZyB3aXRoIGJpbmFyeSBmb3JtYXQgY29uZmlndXJhdGlvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgY29uZGl0aW9uYWwsIGEgZGVwZW5kZW5jeSBkZWZpbml0aW9uLCBvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQmIzM5O3MgZ29pbmcgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBjdXJyZW50IHByb2JsZW0uIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZy5iaW5mbXQmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFx0ICBmZWF0dXJlLCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvamF2YS5yc3RcdTAwM2UgZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvd1xuIDE2MTpcdFx0ICB0byBpbmNsdWRlIEphdmEgc3VwcG9ydC4gYW5kIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tb25vLnJzdFx1MDAzZSBmb3JcbiAxNjI6XHQgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGluY2x1ZGUgTW9uby1iYXNlZCAuTkVUIHN1cHBvcnQuXG4gMTYzOlx0XG4gMTY0Olx0ICAgICAgICAgIFRvIHVzZSBiaW5mbXRfbWlzYywgeW91IHdpbGwgbmVlZCB0byBtb3VudCBpdDpcbiAxNjU6XHRcdFx0bW91bnQgYmluZm10X21pc2MgLXQgYmluZm10X21pc2MgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjXG4gMTY2Olx0XG4gMTY3Olx0XHQgIFlvdSBtYXkgc2F5IE0gaGVyZSBmb3IgbW9kdWxlIHN1cHBvcnQgYW5kIGxhdGVyIGxvYWQgdGhlIG1vZHVsZSB3aGVuXG4gMTY4Olx0XHQgIHlvdSBoYXZlIHVzZSBmb3IgaXQ7IHRoZSBtb2R1bGUgaXMgY2FsbGVkIGJpbmZtdF9taXNjLiBJZiB5b3VcbiAxNjk6XHRcdCAgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBhbnN3ZXIgYXQgdGhpcyBwb2ludCwgc2F5IFkuXG4gMTcwOlx0XG4gMTcxOlx0Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxuIDE3MjpcdFx0Ym9vbCBcJiMzNDtCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCYjMzQ7XG4gMTczOlx0XHRkZXBlbmRzIG9uIEJJTkZNVF9NSVNDPXlcbiAxNzQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IERFQlVHX0lORk9fQlRGXG4gMTc1Olx0XHRoZWxwXG4gMTc2Olx0XHQgIEFsbG93IGJpbmZtdF9taXNjIGJpbmFyeSB0eXBlIGhhbmRsZXJzIHRvIGJlIGltcGxlbWVudGVkIGFzIGJwZlxuIDE3NzpcdFx0ICBzdHJ1Y3Rfb3BzIHByb2dyYW1zLiBJbnN0ZWFkIG9mIG1hdGNoaW5nIGEgZml4ZWQgbWFnaWMgYW5kXG4gMTc4Olx0XHQgIHJlZGlyZWN0aW5nIHRvIGEgZml4ZWQgaW50ZXJwcmV0ZXIgcmVjb3JkZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWVcbiAxNzk6XHRcdCAgc3VjaCBoYW5kbGVycyBtYXRjaCBiaW5hcmllcyBwcm9ncmFtbWF0aWNhbGx5IGFuZCBjb21wdXRlIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg2MQoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiAxMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJJTkZNVF9NSVNDIGFuZCBCUEYgSW50ZWdyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgQklORk1UX01JU0NfQlBGYCBpcyBlbmFibGVkLCB3aGljaCBvYnZpb3VzbHkgcmVsaWVzIG9uIGBCSU5GTVRfTUlTQz15YCwgYW5kIHRoZW4gYWxzbyB0aGUgcmVsZXZhbnQgQlBGLXNwZWNpZmljIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBERUJVR19JTkZPX0JURmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGluY2x1ZGUgYm90aCBgQklORk1UX01JU0NgIGFuZCBgQklORk1UX01JU0NfQlBGYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQgY292ZXJzIHRoZSBiYXNpYyBkZXBlbmRlbmNpZXMuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyBwYXRjaCB0b3VjaD8gTG9va3MgbGlrZSBgZnMvYmluZm10X21pc2MuY2AgYW5kIGBmcy9iaW5mbXRfbWlzY19icGYuY2AuIFNvLCBgQklORk1UX01JU0NgIGFuZCBgQklORk1UX01JU0NfQlBGYCBhcmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgaW4gdGhpcyBhcmVhLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCByZWxldmFudC4gTXkgbWVudGFsIGNoZWNrbGlzdCBmb2N1c2VzIG9uIHRoZXNlIHBvdGVudGlhbCBob3RzcG90czogYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGBicGZfYmlucHJtX3NldF9pbnRlcnBgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBibV9lbnRyeV93cml0ZWAsIGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV9hZGRfaW50ZXJwYCwgYGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcmAsIGFuZCBgZW50cnlfb3Blbl9pbnRlcnByZXRlcmAuCgpOb3csIGxldCYjMzk7cyByZWZpbmUgdGhpcyBsaXN0LiBgbG9hZF9taXNjX2JpbmFyeWAgaXMgZGVmaW5pdGVseSBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgaXQgaXMgc3BlY2lmaWMgdG8gYGJpbmZtdF9taXNjYC4gSXQmIzM5O3Mgbm90IGEgZ2VuZXJpYyBrZXJuZWwgZnVuY3Rpb24gbGlrZSBgc2NoZWR1bGVgIG9yIGBrbWFsbG9jYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgb2theSB0byBpbmNsdWRlLiBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFyZSBzdGF0aWMsIGJ1dCB0aGV5IGFyZSBjcnVjaWFsIGZvciBzZXR0aW5nIHVwIHRoZSBmdW5jdGlvbmFsaXR5LiBUaGUgcHJvbXB0IHNheXMgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBidXQgdGhlc2UgYXJlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBmaWxlX29wZXJhdGlvbnNgLCBzbyB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGV5IGFyZSBnb29kIHRhcmdldHMuIGBibV9lbnRyeV9hZGRfaW50ZXJwYCBhcHBlYXJzIHN0YXRpYy4gTGV0JiMzOTtzIG9taXQgaXQgYXMgaXQmIzM5O3MgbGlrZWx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBMaWtld2lzZSwgYGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcmAgYW5kIGBlbnRyeV9vcGVuX2ludGVycHJldGVyYCBhcmUgc3RhdGljLCBhbmQgcHJvYmFibHkgaW5saW5lZCwgc28gbGV0JiMzOTtzIG9taXQgdGhlbSB0b28uIGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAgaXMgbm9uLXN0YXRpYy4gYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAgaXMgbm9uLXN0YXRpYyAoYSBrZnVuYykuIGBicGZfYmlucHJtX3NldF9pbnRlcnBgIGlzIGFsc28gbm9uLXN0YXRpYyAoYSBrZnVuYykuCgpQdXR0aW5nIGFsbCB0aGF0IHRvZ2V0aGVyLCBJIHRoaW5rIHRoZSBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYmU6CgotIGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAKLSBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwYAotIGBicGZfYmlucHJtX3NldF9pbnRlcnBgCi0gYGxvYWRfbWlzY19iaW5hcnlgCi0gYGJtX2VudHJ5X3dyaXRlYAotIGBibV9yZWdpc3Rlcl93cml0ZWAKCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiBgbG9hZF9taXNjX2JpbmFyeWAuLi4gWWVzLCBgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pYCBpbiBgZnMvYmluZm10X21pc2MuY2AsIGFuZCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgbWlzY19mb3JtYXQubG9hZF9iaW5hcnlgLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KCkRvdWJsZS1jaGVja2luZyBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLi4uIEJvdGggYXJlIGBzdGF0aWMgc3NpemVfdGAgZnVuY3Rpb25zLCBhbmQgYm90aCBhcmUgYXNzaWduZWQgdG8gYGZpbGVfb3BlcmF0aW9ucy53cml0ZWAuIENvbmZpcm1lZC4KCldoYXQgYWJvdXQgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYD8gWWVzLCBpdCYjMzk7cyBub24tc3RhdGljOiBgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpYC4KCmBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnBgIGlzIGFsc28gbm9uLXN0YXRpYzogYF9fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfX3N6KWAuCgpBbmQgYGJwZl9iaW5wcm1fc2V0X2ludGVycGA/IE5vbi1zdGF0aWMgYXMgd2VsbDogYF9fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KWAuCgpTbywgdGhlIGBDb25maWdzYCBJJiMzOTttIGluY2x1ZGluZyBhcmU6CgotIGBCSU5GTVRfTUlTQ2AKLSBgQklORk1UX01JU0NfQlBGYAoKTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpbnRlZ3JhdGVzIEJQRiBoYW5kbGVycyBpbnRvIGBiaW5mbXRfbWlzY2AsIGFsbG93aW5nIGludGVycHJldGVycyB0byBiZSBib3VuZCBhbmQgc2VsZWN0ZWQgYnkgbmFtZSBhdCBgZXhlY2AgdGltZS4KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OywKICAgICYjMzQ7QklORk1UX01JU0NfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmluZm10X21pc2NfZmluZF9pbnRlcnAmIzM0OywKICAgICYjMzQ7YnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtsb2FkX21pc2NfYmluYXJ5JiMzNDssCiAgICAmIzM0O2JtX2VudHJ5X3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OywKICAgICYjMzQ7QklORk1UX01JU0NfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmluZm10X21pc2NfZmluZF9pbnRlcnAmIzM0OywKICAgICYjMzQ7YnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtsb2FkX21pc2NfYmluYXJ5JiMzNDssCiAgICAmIzM0O2JtX2VudHJ5X3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjU2OjAyLjUyNjc0MTc4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDg0Nzg2NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCIsXG4gICAgXCJCSU5GTVRfTUlTQ19CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW5mbXRfbWlzY19maW5kX2ludGVycFwiLFxuICAgIFwiYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwXCIsXG4gICAgXCJicGZfYmlucHJtX3NldF9pbnRlcnBcIixcbiAgICBcImxvYWRfbWlzY19iaW5hcnlcIixcbiAgICBcImJtX2VudHJ5X3dyaXRlXCIsXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTY6MDIuNTI2NzQ4MTU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ4NDEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZjkyNTFhNjBkYTE2NjIyNGJlYTliYWEzYmQ5YzQyZjc0YjlkNWNhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDI6NTY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbmluZGV4IGM4MDcwMmI0Y2NkNWYuLjNlMmIyYTk0MTViYzggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbkBAIC0xMDcsNiArMTA3LDE1IEBAIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46XFxuICAgICAgICAgICAgIGBgUFRfSU5URVJQYGAuIFNlZSB0aGUgXFxcIkxvYWRlciBzdWJzdGl0dXRpb25cXFwiIHNlY3Rpb25cXG4gICAgICAgICAgICAgYmVsb3cuIGBgTGBgIHJlamVjdHMgYGBUYGAsIGBgUGBgLCBgYE9gYCBhbmQgYGBDYGA7XFxuICAgICAgICAgICAgIGBgRmBgIGNvbXBvc2VzLlxcbisgICAgICBgYERgYCAtIHJlZ2lzdGVyZWQgZGlzYWJsZWRcXG4rICAgICAgICAgICAgVGhlIGVudHJ5IGlzIGNyZWF0ZWQgZGlzYWJsZWQgaW5zdGVhZCBvZiBiZWluZyBtYXRjaGFibGUgYXRcXG4rICAgICAgICAgICAgb25jZSwgYW5kIGhhcyB0byBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgYGAxYGAgdG8gaXRzIGZpbGVcXG4rICAgICAgICAgICAgYmVmb3JlIGl0IGRpc3BhdGNoZXMgYW55dGhpbmcuIFRoaXMgc3BsaXRzIGEgcmVnaXN0cmF0aW9uXFxuKyAgICAgICAgICAgIGludG8gY3JlYXRpbmcgdGhlIGVudHJ5IGFuZCBhY3RpdmF0aW5nIGl0LCBsZWF2aW5nIHJvb20gdG9cXG4rICAgICAgICAgICAgY29uZmlndXJlIGl0IGluIGJldHdlZW4gLSB3aGljaCBpcyB3aGF0IGEgYGBCYGAgZW50cnkgdGhhdFxcbisgICAgICAgICAgICBiaW5kcyBpbnRlcnByZXRlcnMgbmVlZHM7IHNlZSB0aGUgYnBmIHNlY3Rpb24gYmVsb3cuIFRoZSBmbGFnXFxuKyAgICAgICAgICAgIGlzIHNwZW50IG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIGlzIG5vdCByZWFkIGJhY2s6IHdoYXQgYW5cXG4rICAgICAgICAgICAgZW50cnkgZmlsZSByZXBvcnRzIGFmdGVyd2FyZHMgaXMgd2hldGhlciBpdCBpcyBlbmFibGVkLlxcbiBcXG4gXFxuIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcXG5AQCAtMTg2LDkgKzE5NSw2MiBAQCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBiaW5hcnkncyBsb2NhdGlvbi4gSXQgc2VsZWN0cyB0aGVcXG4gaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnAoKWBgIGtmdW5jIHdpdGggYW5cXG4gYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGBgMGBgLiBBIG1hdGNoIGlzIGNvbW1pdHRlZDogYSBmYWlsaW5nXFxuIGBgbG9hZGBgIGZhaWxzIHRoZSBleGVjIHdpdGggaXRzIGVycm9yIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIHRvIGxhdGVyXFxuLWVudHJpZXM7IGBgLUVOT0VYRUNgYCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5IGZvcm1hdHMgaGF2ZSBhIGdvLiBUaGVcXG4taW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjLFxcbi1leGFjdGx5IGFzIGEgc3RhdGljYWxseSByZWdpc3RlcmVkIGludGVycHJldGVyIHdvdWxkIGJlLlxcbitlbnRyaWVzOyBgYC1FTk9FWEVDYGAgbGV0cyB0aGUgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzIGhhdmUgYSBnby4gQSBwYXRoXFxuK3NlbGVjdGVkIHRoaXMgd2F5IGlzIG9wZW5lZCB3aXRoIHRoZSBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGVcXG4rZXhlYywgZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3aXRob3V0IGBgRmBgIHdvdWxkXFxuK2JlLlxcbitcXG4rQW4gZW50cnkgY2FuIGluc3RlYWQgYmluZCB0aGUgaW50ZXJwcmV0ZXJzIGl0cyBoYW5kbGVyIG1heSB1c2UsIHNvIHRoYXQgbm9cXG4rcGF0aCBpcyByZXNvbHZlZCBhdCBleGVjIHRpbWUgYXQgYWxsLiBBbiBlbnRyeSByZWdpc3RlcmVkIHdpdGggYGBEYGAgaXMgbm90XFxuK21hdGNoYWJsZSB5ZXQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gdGhlbSwgb25lXFxuK2BgK25hbWUgcGF0aGBgIHdyaXRlIGF0IGEgdGltZTo6XFxuK1xcbisgICAgZWNobyAnOnFlbXU6Qjo6OjpteV9oYW5kbGVyOkQnIFxcdTAwM2UgcmVnaXN0ZXJcXG4rICAgIGVjaG8gJythYXJjaDY0IC91c3IvYmluL3FlbXUtYWFyY2g2NCcgXFx1MDAzZSBxZW11XFxuKyAgICBlY2hvICcrYXJtIC91c3IvYmluL3FlbXUtYXJtJyBcXHUwMDNlIHFlbXVcXG4rICAgIGVjaG8gMSBcXHUwMDNlIHFlbXVcXG4rXFxuK0VhY2ggcGF0aCBpcyBvcGVuZWQgZHVyaW5nIGl0cyB3cml0ZSwgaW4gdGhlIHdyaXRpbmcgcHJvY2VzcydzIGNvbnRleHQgYW5kXFxuK3dpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgXFxuK3ByZS1vcGVucyBhIHN0YXRpYyBlbnRyeSdzIGludGVycHJldGVyOyB0aGUgcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZS4gVGhlXFxuK3BhdGggaXMgZXZlcnl0aGluZyBwYXN0IHRoZSBmaXJzdCBzcGFjZSwgc28gdGhlcmUgaXMgbm90aGluZyBpdCBjYW5ub3RcXG4rZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XFxuK2JpbmRzIGF0IG1vc3QgMTAwIGludGVycHJldGVyczsgYSB3cml0ZSBwYXN0IHRoYXQgaXMgcmVmdXNlZCB3aXRoXFxuK2BgLUVOT1NQQ2BgLiBUbyBiaW5kIGEgZmlsZSB0aGF0IGhhcyBubyBwYXRoIG9mIGl0cyBvd24gLSBhbHJlYWR5XFxuK3VubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxcbitvcGVuIGl0IGFuZCB3cml0ZSBgYC9wcm9jL3NlbGYvZmQvTmBgLlxcbitcXG4rVGhlIGBgbG9hZGBgIHByb2dyYW0gdGhlbiBzZWxlY3RzIG9uZSBwZXIgZXhlYyBieSBuYW1lIHdpdGggdGhlXFxuK2BgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgYCBrZnVuYywgYW5kIGV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIHRoZVxcbitmaWxlIHRoYXQgd2FzIG9wZW5lZC4gVGhlIHBhdGggZGVjaWRlcyB3aGljaCBmaWxlIGlzIGJvdW5kIGFuZCBub3RoaW5nXFxuK2Vsc2U6IGl0IGlzIG5vdCByZXNvbHZlZCBhZ2FpbiwgaW4gYW55IG5hbWVzcGFjZSwgc28gd2hhdCBpdCBob2xkcyBsYXRlciAtXFxuK29yIHdoYXQgaXQgaG9sZHMgaW4gdGhlIG5hbWVzcGFjZSBvZiB3aG9ldmVyIHJ1bnMgdGhlIGJpbmFyeSAtIG5vIGxvbmdlclxcbitkZWNpZGVzIGFueXRoaW5nLlxcbitcXG4rRW5hYmxpbmcgdGhlIGVudHJ5IGVuZHMgdGhpcy4gSXRzIGludGVycHJldGVycyBhcmUgcmVhZCBhdCBleGVjIHRpbWUgd2l0aFxcbitub3RoaW5nIGJ1dCBhIHJlZmVyZW5jZSBoZWxkIG9uIHRoZSBlbnRyeSwgc28gYW4gZW50cnkgdGhhdCBoYXMgZXZlciBiZWVuXFxuK21hdGNoYWJsZSBjYW4gbmV2ZXIgaGF2ZSBpdHMgc2V0IGNoYW5nZWQgYWdhaW46IHRoZSBmaXJzdCBgYDFgYCBzZWFscyBpdCxcXG4rZnJvbSB0aGVuIG9uIGBgK2BgIGlzIHJlZnVzZWQgd2l0aCBgYC1FQlVTWWBgLCBhbmQgYW4gZW50cnkgcmVnaXN0ZXJlZFxcbit3aXRob3V0IGBgRGBgIGlzIHNlYWxlZCBmcm9tIHRoZSBzdGFydC4gQmluZGluZyBhIG5hbWUgdHdpY2UgaXMgcmVmdXNlZFxcbit3aXRoIGBgLUVFWElTVGBgLlxcbitcXG4rU2VsZWN0aW9uIGlzIGJ5IG5hbWUgc28gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGhlIHByb2dyYW0gbmVlZCBub3RcXG4rYWdyZWUgb24gYW4gb3JkZXIsIGFuZCBzbyB0aGF0IGEgaGFuZGxlciBpcyBub3QgdGllZCB0byB3aGVyZSBhIGRpc3RyaWJ1dGlvblxcbitwdXRzIGl0cyBpbnRlcnByZXRlcnMuIEEgbmFtZSBpcyBhIHNpbmdsZSB3b3JkIG9mIHByaW50YWJsZSBBU0NJSSwgYXQgbW9zdFxcbiszMiBjaGFyYWN0ZXJzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBnaXZlcyB0aGUgcHJvZ3JhbSBgYC1FTk9FTlRgYCxcXG4rd2hpY2ggaXQgY2FuIGFjdCBvbiBvciByZXR1cm4uIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIGl0IHdhc1xcbityZWdpc3RlcmVkIHVuZGVyLCBhbmQgdGhlIGVudHJ5IHJlcG9ydHMgd2hhdCBpdCBib3VuZDo6XFxuK1xcbisgICAgJCBjYXQgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3FlbXVcXG4rICAgIGVuYWJsZWRcXG4rICAgIGJwZiBteV9oYW5kbGVyXFxuKyAgICBicGYtaW50ZXJwcmV0ZXIgYWFyY2g2NCAvdXNyL2Jpbi9xZW11LWFhcmNoNjRcXG4rICAgIGJwZi1pbnRlcnByZXRlciBhcm0gL3Vzci9iaW4vcWVtdS1hcm1cXG4rICAgIGZsYWdzOlxcbitcXG4rVGhlIHBhdGggcmVwb3J0ZWQgaXMgdGhlIG9uZSB0aGUgaW50ZXJwcmV0ZXIgd2FzIGJvdW5kIHVuZGVyLCB3aGljaCBuYW1lZFxcbit0aGUgZmlsZSBhdCB0aGF0IG1vbWVudDsgaXQgaXMgbm90IHJlLXJlc29sdmVkLCBzbyBpdCBpcyBhIHJlY29yZCBvZiB3aGF0XFxuK3dhcyBib3VuZCByYXRoZXIgdGhhbiBhIHByb21pc2UgYWJvdXQgd2hhdCB0aGF0IHBhdGggaG9sZHMgbm93LlxcbiBcXG4gVGhlIGBgbG9hZGBgIHByb2dyYW0gY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBhcmd1bWVudCB0byB0aGUgaW50ZXJwcmV0ZXIgd2l0aFxcbiB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnBfYXJnKClgYCBrZnVuYy4gSXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGVcXG5AQCAtMjI0LDggKzI4NiwxMSBAQCBoYW5kbGVyIGNhbiBkZWNpZGUgdGhlbSBkaWZmZXJlbnRseSBmb3IgZWFjaCBiaW5hcnkgaXQgaGFuZGxlczpcXG4gICBgYFBUX0lOVEVSUGBgIGFuZCBydW5zIHRoZSBiaW5hcnkgYXMgYSBmdWxseSBuYXRpdmUgZXhlYyAodGhlIGBgTGBgXFxuICAgZmxhZykuIEl0IGV4Y2x1ZGVzIHRoZSBvdGhlciBmbGFncyBhbmQgYSBzdGFnZWQgaW50ZXJwcmV0ZXIgYXJndW1lbnQuXFxuIFxcbi1CZWNhdXNlIHRoZXNlIGFyZSBwcm9ncmFtIGNob2ljZXMsIGEgYGBCYGAgZW50cnkgY2FycmllcyBubyBmbGFncyBpbiB0aGVcXG4tcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCAocHJlLW9wZW4gYSBmaXhlZCBpbnRlcnByZXRlcikgaGFzIG5vIG1lYW5pbmcgZm9yIGl0LlxcbitCZWNhdXNlIHRoZXNlIGFyZSBwcm9ncmFtIGNob2ljZXMsIGEgYGBCYGAgZW50cnkgY2FycmllcyBubyBpbnZvY2F0aW9uXFxuK2ZsYWdzIGluIHRoZSByZWdpc3RlciBzdHJpbmc7IGBgRmBgIGhhcyBub25lIHRvIHNwZWxsIGZvciBpdCBlaXRoZXIsIHNpbmNlXFxuK3RoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgYWxyZWFkeSBwcmUtb3BlbiB3aGF0IGBgRmBgIHdvdWxkLiBUaGVcXG4rcmVnaXN0cmF0aW9uIGRpcmVjdGl2ZSBgYERgYCBpcyB0aGUgZXhjZXB0aW9uOiBpdCBkZWNpZGVzIGhvdyB0aGUgZW50cnlcXG4rc3RhcnRzIG91dCwgbm90IGhvdyB0aGUgaW50ZXJwcmV0ZXIgaXMgaW52b2tlZC5cXG4gXFxuIEhhbmRsZXJzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCB3YXNcXG4gcmVnaXN0ZXJlZCBpbiwgZmFsbGluZyBiYWNrIHRvIGFuY2VzdG9yIG5hbWVzcGFjZXMsIG1pcnJvcmluZyBob3dcXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcXG5pbmRleCA3MDdmOGExNGY4YTYzLi5hZDhjNGY2NGJmMTAyIDEwMDY0NFxcbi0tLSBhL2ZzL2JpbmZtdF9taXNjLmNcXG4rKysgYi9mcy9iaW5mbXRfbWlzYy5jXFxuQEAgLTI0LDYgKzI0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tzdHJ0b3guaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFnaWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJpbnRrLmhcXHUwMDNlXFxuQEAgLTM3LDYgKzM5LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rXFxuIC8qIEVudHJ5IHN0YXR1cyBhbmQgbWF0Y2ggdHlwZSBiaXQgbnVtYmVycy4gKi9cXG4gZW51bSBiaW5mbXRfbWlzY19lbnRyeV9iaXRzIHtcXG4gXFx0TUlTQ19GTVRfRU5BQkxFRF9CSVRcXHQ9IDAsXFxuQEAgLTUyLDggKzU2LDE3IEBAIGVudW0gYmluZm10X21pc2NfZW50cnlfZmxhZ3Mge1xcbiBcXHRNSVNDX0ZNVF9PUEVOX0ZJTEVcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAyOCksXFxuIFxcdE1JU0NfRk1UX1RSQU5TUEFSRU5UXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMjcpLFxcbiBcXHRNSVNDX0ZNVF9MT0FERVJcXHRcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAyNiksXFxuK1xcdE1JU0NfRk1UX0RJU0FCTEVEXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMjUpLFxcbiB9O1xcbiBcXG4rLyogVGhlIGZsYWdzIHRoYXQgc2hhcGUgdGhlIGludm9jYXRpb247IGEgJ0InIGhhbmRsZXIgcGlja3MgdGhvc2UgcGVyIGV4ZWMuICovXFxuKyNkZWZpbmUgTUlTQ19GTVRfSU5WT0NBVElPTl9GTEFHUyAoTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgTUlTQ19GTVRfT1BFTl9CSU5BUlkgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgTUlTQ19GTVRfQ1JFREVOVElBTFMgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgTUlTQ19GTVRfT1BFTl9GSUxFIHxcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCAgIE1JU0NfRk1UX1RSQU5TUEFSRU5UIHxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCAgIE1JU0NfRk1UX0xPQURFUilcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAtIGEgZmxhZyBjaGFyYWN0ZXIgb2YgdGhlIHJlZ2lzdGVyIHN0cmluZ1xcbiAgKiBAYzogdGhlIGNoYXJhY3RlciB1c2Vyc3BhY2Ugd3JpdGVzIGFuZCByZWFkcyBiYWNrXFxuQEAgLTc1LDYgKzg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIG1pc2NfZmxhZ3NbXSA9IHtcXG4gXFx0eyAnRicsIE1JU0NfRk1UX09QRU5fRklMRSxcXHQwLFxcdFxcdFxcdFxcXCJvcGVuIGludGVycHJldGVyIGZpbGUgbm93XFxcIlxcdH0sXFxuIFxcdHsgJ1QnLCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcXHRNSVNDX0ZNVF9PUEVOX0JJTkFSWSxcXHRcXFwidHJhbnNwYXJlbnRcXFwiXFx0XFx0XFx0fSxcXG4gXFx0eyAnTCcsIE1JU0NfRk1UX0xPQURFUixcXHRcXHQwLFxcdFxcdFxcdFxcXCJsb2FkZXIgc3Vic3RpdHV0aW9uXFxcIlxcdFxcdH0sXFxuK1xcdHsgJ0QnLCBNSVNDX0ZNVF9ESVNBQkxFRCxcXHQwLFxcdFxcdFxcdFxcXCJyZWdpc3RlciBkaXNhYmxlZFxcXCJcXHRcXHR9LFxcbiB9O1xcbiBcXG4gLyogTG9vayB1cCBhIGZsYWcgY2hhcmFjdGVyLCBOVUxMIGlmIEBjIGlzIG5vdCBvbmUuICovXFxuQEAgLTk2LDkgKzExMCw5IEBAIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7XFxuIFxcdGNvbnN0IGNoYXIgKmludGVycHJldGVyO1xcdC8qIGZpbGVuYW1lIG9mIGludGVycHJldGVyICovXFxuIFxcdGNoYXIgKm5hbWU7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4tXFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpicGZfb3BzO1xcdC8qIGJwZi1iYWNrZWQgaGFuZGxlciAoJ0InKSAqL1xcbiBcXHRjb25zdCBjaGFyICpicGZfb3BzX25hbWU7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJwcztcXHQvKiB0aGUgaW50ZXJwcmV0ZXJzIGl0IGJvdW5kICovXFxuIFxcdHJlZmNvdW50X3QgdXNlcnM7XFx0XFx0Lyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovXFxuIFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIFxcdGNoYXIgYnVmW107XFx0XFx0XFx0LyogcmVnaXN0ZXIgc3RyaW5nLCBmaWVsZHMgcG9pbnQgaW4gaGVyZSAqL1xcbkBAIC0xNzUsNyArMTg5LDEyIEBAIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcdC8qIFdhbGsgYWxsIHRoZSByZWdpc3RlcmVkIGhhbmRsZXJzLiAqL1xcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXMsIG5vZGUsXFxuIFxcdFxcdFxcdFxcdCBzcmN1X3JlYWRfbG9ja19oZWxkKFxcdTAwMjZibV9lbnRyaWVzX3NyY3UpKSB7XFxuLVxcdFxcdC8qIE1ha2Ugc3VyZSB0aGlzIG9uZSBpcyBjdXJyZW50bHkgZW5hYmxlZC4gKi9cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTWFrZSBzdXJlIHRoaXMgb25lIGlzIGN1cnJlbnRseSBlbmFibGVkLiBBbiBlbnRyeSBlbnRlcnNcXG4rXFx0XFx0ICogdGhlIGxpc3QgYXQgbW9zdCBvbmNlIGFuZCBvbmx5IHdob2xlOiBpdHMgY29uZmlndXJhdGlvbiBpc1xcbitcXHRcXHQgKiBvcmRlcmVkIGJlZm9yZSB0aGUgcmN1IGluc2VydGlvbiB0aGF0IG1ha2VzIGl0IHZpc2libGVcXG4rXFx0XFx0ICogaGVyZS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGlmICghdGVzdF9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtMjE2LDYgKzIzNSwxMDggQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG4gXFx0cmV0dXJuIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWVcXG4rICogQGludGVycHM6IHRoZSBpbnRlcnByZXRlcnMgdGhlIG1hdGNoZWQgZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aFxcbisgKiBAbmFtZTogdGhlIG5hbWUgdG8gbG9vayBmb3JcXG4rICpcXG4rICogUmV0dXJuOiB0aGUgaW50ZXJwcmV0ZXIgb24gc3VjY2VzcywgTlVMTCBpZiBAaW50ZXJwcyBoYXMgbm9uZSBieSB0aGF0IG5hbWVcXG4rICovXFxuK2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxcbitiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZXJwLCBpbnRlcnBzLCBsaXN0KVxcbitcXHRcXHRpZiAoIXN0cmNtcChpbnRlcnAtXFx1MDAzZW5hbWUsIG5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gaW50ZXJwO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLyogVW5kbyB0aGUgb3Blbl9leGVjKCkgYSBwcmUtb3BlbmVkIGludGVycHJldGVyIGZpbGUgY2FtZSBmcm9tLiAqL1xcbitzdGF0aWMgdm9pZCBjbG9zZV9pbnRlcnBfZmlsZShzdHJ1Y3QgZmlsZSAqZilcXG4re1xcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoZikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xcbitcXHRmaWxwX2Nsb3NlKGYsIE5VTEwpO1xcbit9XFxuK1xcbitERUZJTkVfRlJFRShjbG9zZV9pbnRlcnBfZmlsZSwgc3RydWN0IGZpbGUgKiwgY2xvc2VfaW50ZXJwX2ZpbGUoX1QpKVxcbitcXG4rLypcXG4rICogT3BlbiBhbiBpbnRlcnByZXRlciBAcGF0aCBmb3IgZXhlY3V0aW9uOiBub3csIGluIHRoZSB3cml0ZXIncyBjb250ZXh0LFxcbisgKiBhbmQgLSBzaW5jZSBiaW5mbXRfbWlzYyBtb3VudHMgY2FuIGJlIHVucHJpdmlsZWdlZCAtIHdpdGggQGNyZWQsIHRoZVxcbisgKiBjcmVkZW50aWFscyB0aGUgY29udHJvbCBmaWxlIGJlaW5nIHdyaXR0ZW4gd2FzIG9wZW5lZCB3aXRoLCBub3QgdGhlXFxuKyAqIHdyaXRlcidzIG93bi5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl9pbnRlcnBfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRzdHJ1Y3QgZmlsZSAqZjtcXG4rXFxuK1xcdHNjb3BlZF93aXRoX2NyZWRzKGNyZWQpXFxuK1xcdFxcdGYgPSBvcGVuX2V4ZWMocGF0aCk7XFxuK1xcdGlmIChJU19FUlIoZikpXFxuK1xcdFxcdHByX25vdGljZShcXFwicmVnaXN0ZXI6IGZhaWxlZCB0byBpbnN0YWxsIGludGVycHJldGVyICVzXFxcXG5cXFwiLCBwYXRoKTtcXG4rXFx0cmV0dXJuIGY7XFxuK31cXG4rXFxuKy8qIFJlbGVhc2UgdGhlIGludGVycHJldGVycyBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLiAqL1xcbitzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG4re1xcbitcXHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnAsICp0bXA7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW50ZXJwLCB0bXAsIFxcdTAwMjZlLVxcdTAwM2VpbnRlcnBzLCBsaXN0KSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZpbnRlcnAtXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRjbG9zZV9pbnRlcnBfZmlsZShpbnRlcnAtXFx1MDAzZWZpbGUpO1xcbitcXHRcXHRrZnJlZShpbnRlcnApO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qKlxcbisgKiBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIgLSBiaW5kIGFuIG9wZW5lZCBpbnRlcnByZXRlciB0byBAZVxcbisgKiBAZTogZW50cnkgYmVpbmcgY29uZmlndXJlZFxcbisgKiBAbmFtZTogbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHdpbGwgc2VsZWN0IGl0IGJ5OyBlbXB0eSBmb3IgdGhlIGZpeGVkXFxuKyAqICAgICAgICBpbnRlcnByZXRlciBvZiBhIHN0YXRpYyBlbnRyeVxcbisgKiBAcGF0aDogdGhlIHBhdGggQGYgd2FzIG9wZW5lZCBmcm9tXFxuKyAqIEBmOiB0aGUgaW50ZXJwcmV0ZXIsIG9wZW5lZCBmb3IgZXhlY3V0aW9uXFxuKyAqXFxuKyAqIEV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIEBmLCBzbyB0aGUgcGF0aCBkZWNpZGVkIHdoaWNoIGZpbGUgaXMgYm91bmRcXG4rICogYW5kIG5vdGhpbmcgZWxzZTogaXQgaXMgbm90IHJlc29sdmVkIGFnYWluLCBpbiBhbnkgbmFtZXNwYWNlLlxcbisgKlxcbisgKiBUaGUgY2FsbGVyIGhhcyB0byBoYXZlIHZhbGlkYXRlZCBAbmFtZSBhbmQgQHBhdGgsIGVzdGFibGlzaGVkIHRoYXQgQGVcXG4rICogY2Fubm90IGJlIG1hdGNoZWQgeWV0LCBhbmQgb3ducyBAZiB1bnRpbCB0aGlzIHN1Y2NlZWRzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXFxuKyAqL1xcbitzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZpbGUgKmYpXFxuK3tcXG4rXFx0c2l6ZV90IG5sZW4gPSBzdHJsZW4obmFtZSksIHBsZW4gPSBzdHJsZW4ocGF0aCk7XFxuK1xcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcXG4rXFxuK1xcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcywgbmFtZSkpXFxuK1xcdFxcdHJldHVybiAtRUVYSVNUO1xcbitcXHRpZiAobGlzdF9jb3VudF9ub2RlcyhcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcykgXFx1MDAzZT0gQklORk1UX01JU0NfSU5URVJQX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcbitcXHQvKiBPbmUgYWxsb2NhdGlvbiwgYm90aCBzdHJpbmdzIGluIGl0LCBsaWtlIHRoZSBlbnRyeSdzIG93biBidWZmZXIuICovXFxuK1xcdGludGVycCA9IGttYWxsb2Moc3RydWN0X3NpemUoaW50ZXJwLCBuYW1lLCBubGVuICsgcGxlbiArIDIpLFxcbitcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCFpbnRlcnApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aW50ZXJwLVxcdTAwM2VwYXRoID0gaW50ZXJwLVxcdTAwM2VuYW1lICsgbmxlbiArIDE7XFxuK1xcdHN0cnNjcHkoaW50ZXJwLVxcdTAwM2VuYW1lLCBuYW1lLCBubGVuICsgMSk7XFxuK1xcdHN0cnNjcHkoaW50ZXJwLVxcdTAwM2VuYW1lICsgbmxlbiArIDEsIHBhdGgsIHBsZW4gKyAxKTtcXG4rXFx0aW50ZXJwLVxcdTAwM2VmaWxlID0gZjtcXG4rXFx0LyogUHVibGlzaCB0aGUgbm9kZTogYSBsb2NrbGVzcyBjYXQgbWF5IGJlIHdhbGtpbmcgdGhlIGxpc3QuICovXFxuK1xcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZpbnRlcnAtXFx1MDAzZWxpc3QsIFxcdTAwMjZlLVxcdTAwM2VpbnRlcnBzKTtcXG4rXFx0cHJfZGVidWcoXFxcInJlZ2lzdGVyOiBpbnRlcnByZXRlcjogJXMgeyVzfVxcXFxuXFxcIiwgbmFtZSwgcGF0aCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnksIHJjdSk7XFxuQEAgLTIzMiwyMSArMzUzLDM2IEBAIHN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbiAgKlxcbiAgKiBGcmVlIGVudHJ5IHN5bmNpbmcgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgYW5kIGRlZmVyIGZpbmFsIGZyZWUgdG9cXG4gICogbG9hZF9taXNjX2JpbmFyeSgpIGluIGNhc2UgaXQgaXMgdXNpbmcgdGhlIGJpbmFyeSB0eXBlIGhhbmRsZXIgd2Ugd2VyZVxcbi0gKiByZXF1ZXN0ZWQgdG8gcmVtb3ZlLlxcbisgKiByZXF1ZXN0ZWQgdG8gcmVtb3ZlLiBBbHNvIHRoZSB0ZWFyZG93biBmb3IgYSByZWdpc3RyYXRpb24gdGhhdCBmYWlsc1xcbisgKiBiZWZvcmUgYWRkX2VudHJ5KCkgcHVibGlzaGVzIHRoZSBlbnRyeS5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuIHtcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZlLVxcdTAwM2V1c2VycykpIHtcXG4tXFx0XFx0aWYgKGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfT1BFTl9GSUxFKSB7XFxuLVxcdFxcdFxcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhlLVxcdTAwM2VpbnRlcnBfZmlsZSk7XFxuLVxcdFxcdFxcdGZpbHBfY2xvc2UoZS1cXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoZSk7XFxuIFxcdFxcdC8qIFdhbGtlcnMgbWF5IHN0aWxsIGRlcmVmZXJlbmNlIHRoaXMgZW50cnksIGV2ZW4gc2xlZXBpbmcuICovXFxuIFxcdFxcdGNhbGxfc3JjdShcXHUwMDI2Ym1fZW50cmllc19zcmN1LCBcXHUwMDI2ZS1cXHUwMDNlcmN1LCBibV9lbnRyeV9mcmVlX3JjdSk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tREVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgaWYgKF9UKSBwdXRfYmluZm10X2hhbmRsZXIoX1QpKVxcbitERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBwdXRfYmluZm10X2hhbmRsZXIoX1QpKVxcbitcXG4rLyogRHJvcCBldmVyeXRoaW5nIGEgbG9hZCBwcm9ncmFtIHN0YWdlZCBmb3IgdGhpcyBleGVjLiAqL1xcbitzdGF0aWMgdm9pZCBkcm9wX3N0YWdlZF9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4re1xcbitcXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwKTtcXG4rXFx0YnBybS1cXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XFxuK1xcdGtmcmVlKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfYXJnKTtcXG4rXFx0YnBybS1cXHUwMDNlYnBmX2ludGVycF9hcmcgPSBOVUxMO1xcbitcXHRpZiAoYnBybS1cXHUwMDNlYnBmX2ludGVycF9maWxlKSB7XFxuK1xcdFxcdGZwdXQoYnBybS1cXHUwMDNlYnBmX2ludGVycF9maWxlKTtcXG4rXFx0XFx0YnBybS1cXHUwMDNlYnBmX2ludGVycF9maWxlID0gTlVMTDtcXG4rXFx0fVxcbitcXHRicHJtLVxcdTAwM2VicGZfZmxhZ3MgPSAwO1xcbit9XFxuIFxcbiAvKipcXG4gICogY3VycmVudF9iaW5mbXRfbWlzYyAtIGdldCB0aGUgYmluZm10X21pc2MgaW5zdGFuY2Ugb2YgdGhlIGNhbGxlcidzIHVzZXIgbmFtZXNwYWNlXFxuQEAgLTI4MSw3ICs0MTcsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICpjdXJyZW50X2JpbmZtdF9taXNjKHZvaWQpXFxuICAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxcbiAgKlxcbiAgKiBBIHN0YXRpYyBlbnRyeSBjYXJyaWVzIGl0cyBpbnRlcnByZXRlciBwYXRoLCBmb3IgYSAnQicgZW50cnkgdGhlXFxuLSAqIGhhbmRsZXIncyBsb2FkIHByb2dyYW0gc2VsZWN0cyBpdC4gVGhlIG1hdGNoIGlzIGNvbW1pdHRlZCwgc28gYSBmYWlsaW5nXFxuKyAqIGhhbmRsZXIncyBsb2FkIHByb2dyYW0gc2VsZWN0cyBpdCwgZWl0aGVyIGJ5IHBhdGggb3IgYnkgdGhlIG5hbWUgb2Ygb25lXFxuKyAqIG9mIHRoZSBpbnRlcnByZXRlcnMgdGhlIGVudHJ5IGJvdW5kLiBUaGUgbWF0Y2ggaXMgY29tbWl0dGVkLCBzbyBhIGZhaWxpbmdcXG4gICogcHJvZ3JhbSBmYWlscyB0aGUgZXhlYy5cXG4gICpcXG4gICogUmV0dXJuOiB0aGUgaW50ZXJwcmV0ZXIgb24gc3VjY2VzcywgYW4gRVJSX1BUUiBvbiBmYWlsdXJlXFxuQEAgLTI5MSwxNSArNDI4LDIwIEBAIHN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbiB7XFxuIFxcdGludCByZXR2YWw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBEcm9wIHdoYXQgYSBwcmV2aW91cyBjaGFpbiBsZXZlbCBzdGFnZWQgYmVmb3JlIGFueXRoaW5nIGNhbiBwaWNrIGl0XFxuK1xcdCAqIHVwLiBBIHN0YXRpYyBlbnRyeSBzdGFnZXMgbm90aGluZyBidXQgY29uc3VtZXMgYSBzdGFnZWQgZmlsZSBqdXN0XFxuK1xcdCAqIGxpa2UgYSAnQicgZW50cnkgZG9lcy5cXG4rXFx0ICovXFxuK1xcdGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihicHJtKTtcXG4rXFxuIFxcdGlmICghdGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIGUtXFx1MDAzZWludGVycHJldGVyO1xcbiBcXG4tXFx0LyogRHJvcCBhbnkgaW50ZXJwcmV0ZXIgb3IgZmxhZ3MgYSBwcmV2aW91cyBjaGFpbiBsZXZlbCBzdGFnZWQuICovXFxuLVxcdGtmcmVlKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnApO1xcbi1cXHRicHJtLVxcdTAwM2VicGZfaW50ZXJwID0gTlVMTDtcXG4tXFx0YnBybS1cXHUwMDNlYnBmX2ZsYWdzID0gMDtcXG4tXFxuK1xcdC8qIFRoZSBpbnRlcnByZXRlcnMgdGhpcyBlbnRyeSBsZXRzIHRoZSBwcm9ncmFtIGNob29zZSBmcm9tLiAqL1xcbitcXHRicHJtLVxcdTAwM2VicGZfaW50ZXJwcyA9IFxcdTAwMjZlLVxcdTAwM2VpbnRlcnBzO1xcbiBcXHRyZXR2YWwgPSBlLVxcdTAwM2VicGZfb3BzLVxcdTAwM2Vsb2FkKGJwcm0pO1xcbitcXHRicHJtLVxcdTAwM2VicGZfaW50ZXJwcyA9IE5VTEw7XFxuIFxcdGlmIChyZXR2YWwpIHtcXG4gXFx0XFx0LyogS2VlcCBhIHByb2dyYW0tc3VwcGxpZWQgZXJyb3Igd2l0aGluIGVycm5vIHJhbmdlLiAqL1xcbiBcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2UgMCB8fCByZXR2YWwgXFx1MDAzYyAtTUFYX0VSUk5PKVxcbkBAIC0zMTcsOSArNDU5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuIFxcbiBkcm9wX3N0YWdlZDpcXG4gXFx0LyogQSBmYWlsaW5nIGxvYWQgbGVhdmVzIG5vdGhpbmcgYmVoaW5kIGZvciBsYXRlciBlbnRyaWVzLiAqL1xcbi1cXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwX2FyZyk7XFxuLVxcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfYXJnID0gTlVMTDtcXG4tXFx0YnBybS1cXHUwMDNlYnBmX2ZsYWdzID0gMDtcXG4rXFx0ZHJvcF9zdGFnZWRfc2VsZWN0aW9uKGJwcm0pO1xcbiBcXHRyZXR1cm4gRVJSX1BUUihyZXR2YWwpO1xcbiB9XFxuIFxcbkBAIC0zNjQsMjMgKzUwNCwzNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4gLyoqXFxuICAqIGVudHJ5X29wZW5faW50ZXJwcmV0ZXIgLSBvcGVuIHRoZSBlbnRyeSdzIGludGVycHJldGVyIGZvciBleGVjdXRpb25cXG4gICogQGU6IG1hdGNoZWQgYmluYXJ5IHR5cGUgaGFuZGxlclxcbisgKiBAYnBybTogYmluYXJ5IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWRcXG4gICogQGludGVycHJldGVyOiB0aGUgaW50ZXJwcmV0ZXIgc2VsZWN0ZWQgZm9yIHRoaXMgZXhlY1xcbiAgKlxcbiAgKiBBbiAnRicgZW50cnkgaGFuZHMgb3V0IGEgY2xvbmUgb2YgdGhlIGZpbGUgaXQgcHJlLW9wZW5lZCBhdCByZWdpc3RyYXRpb24sXFxuLSAqIGFueSBvdGhlciBlbnRyeSBvcGVucyB0aGUgc2VsZWN0ZWQgcGF0aC5cXG4rICogYW5kIHNvIGRvZXMgYSAnQicgZW50cnkgd2hvc2UgbG9hZCBwcm9ncmFtIHNlbGVjdGVkIG9uZSBvZiB0aGVcXG4rICogaW50ZXJwcmV0ZXJzIGl0IGJvdW5kLiBBbnkgb3RoZXIgZW50cnkgb3BlbnMgdGhlIHNlbGVjdGVkIHBhdGguXFxuICAqXFxuICAqIFJldHVybjogdGhlIG9wZW5lZCBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBhbiBFUlJfUFRSIG9uIGZhaWx1cmVcXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmludGVycHJldGVyKVxcbiB7XFxuIFxcdHN0cnVjdCBmaWxlICppbnRlcnBfZmlsZSBfX2ZyZWUoZnB1dCkgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XFxuK1xcdHN0cnVjdCBmaWxlICpib3VuZDtcXG4gXFx0aW50IHJldHZhbDtcXG4gXFxuLVxcdGlmICghKGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfT1BFTl9GSUxFKSlcXG4rXFx0aWYgKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZSkge1xcbitcXHRcXHRib3VuZCA9IGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZTtcXG4rXFx0fSBlbHNlIGlmIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xcbitcXHRcXHQvKiBBbiAnRicgZW50cnkgcHJlLW9wZW5lZCBleGFjdGx5IG9uZSBpbnRlcnByZXRlci4gKi9cXG4rXFx0XFx0aW50ZXJwID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwLCBsaXN0KTtcXG4rXFx0XFx0Ym91bmQgPSBpbnRlcnAtXFx1MDAzZWZpbGU7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdHJldHVybiBvcGVuX2V4ZWMoaW50ZXJwcmV0ZXIpO1xcbitcXHR9XFxuIFxcbi1cXHRpbnRlcnBfZmlsZSA9IGZpbGVfY2xvbmVfb3BlbihlLVxcdTAwM2VpbnRlcnBfZmlsZSk7XFxuK1xcdGludGVycF9maWxlID0gZmlsZV9jbG9uZV9vcGVuKGJvdW5kKTtcXG4gXFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpXFxuIFxcdFxcdHJldHVybiBpbnRlcnBfZmlsZTtcXG4gXFxuQEAgLTQ5MCw3ICs2NDMsNyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFx0ICogdG8gdGhlIHJlYWwgZm9ybWF0IGluIHRoZSBzYW1lIHJvdW5kLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfTE9BREVSKSB7XFxuLVxcdFxcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGludGVycHJldGVyKTtcXG4rXFx0XFx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgYnBybSwgaW50ZXJwcmV0ZXIpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKGludGVycF9maWxlKSkge1xcbiBcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTtcXG4gXFx0XFx0XFx0LyogRGVjbGluaW5nIGhlcmUgd291bGQgcnVuIHRoZSBiaW5hcnkncyBvd24gUFRfSU5URVJQLiAqL1xcbkBAIC01MTIsNyArNjY1LDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4tXFx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgaW50ZXJwcmV0ZXIpO1xcbitcXHRpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBicHJtLCBpbnRlcnByZXRlcik7XFxuIFxcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihpbnRlcnBfZmlsZSk7XFxuIFxcbkBAIC02ODQsNyArODM3LDcgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjb3VudClcXG4ge1xcbiBcXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuLVxcdGNoYXIgKmJ1ZiwgKnAsICpmbGFncztcXG4rXFx0Y2hhciAqYnVmLCAqcDtcXG4gXFx0Y2hhciBkZWw7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwicmVnaXN0ZXI6IHJlY2VpdmVkICV6dSBieXRlc1xcXFxuXFxcIiwgY291bnQpO1xcbkBAIC03MDEsNiArODU0LDcgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdHAgPSBidWYgPSBlLVxcdTAwM2VidWY7XFxuIFxcbiBcXHRtZW1zZXQoZSwgMCwgc2l6ZW9mKCplKSk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlLVxcdTAwM2VpbnRlcnBzKTtcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xcbiBcXG5AQCAtNzgwLDE4ICs5MzQsMzAgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFBhcnNlIHRoZSAnZmxhZ3MnIGZpZWxkLiAqL1xcbi1cXHRmbGFncyA9IHA7XFxuIFxcdHAgPSBjaGVja19zcGVjaWFsX2ZsYWdzKHAsIGUpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQSBicGYgaGFuZGxlciBkZWNpZGVzIHRoZSBpbnZvY2F0aW9uIGZsYWdzIHBlciBleGVjIHdpdGhcXG4gXFx0ICogYnBmX2JpbnBybV9zZXRfZmxhZ3MoKSByYXRoZXIgdGhhbiBmaXhpbmcgdGhlbSBhdCByZWdpc3RyYXRpb24sIGFuZFxcbi1cXHQgKiAnRicgKHByZS1vcGVuIGEgZml4ZWQgaW50ZXJwcmV0ZXIpIGlzIG1lYW5pbmdsZXNzIGZvciBpdCwgc28gYSAnQidcXG4tXFx0ICogZW50cnkncyBmbGFncyBmaWVsZCBoYXMgdG8gYmUgZW1wdHkuXFxuK1xcdCAqIHRoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgcHJlLW9wZW4gd2hhdCAnRicgd291bGQgaGF2ZSwgc28gYSAnQidcXG4rXFx0ICogZW50cnkgY2FycmllcyBubyBpbnZvY2F0aW9uIGZsYWdzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjYgcCAhPSBmbGFncylcXG4rXFx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX0lOVk9DQVRJT05fRkxBR1MpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqICdEJyBpcyBhIGRpcmVjdGl2ZSBmb3IgdGhpcyByZWdpc3RyYXRpb24gcmF0aGVyIHRoYW4gYSBsYXN0aW5nXFxuK1xcdCAqIHByb3BlcnR5LCBzbyBjb25zdW1lIGl0OiB0aGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBhbmQgc3RheXNcXG4rXFx0ICogb3V0IG9mIHRoZSBzZWFyY2ggbGlzdCB1bnRpbCAnMScgaXMgd3JpdHRlbiB0byBpdHMgZW50cnkgZmlsZS5cXG4rXFx0ICogU3RheWluZyBvdXQgaXMgd2hhdCBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiBpbnRlcnByZXRlcnM7XFxuK1xcdCAqIHRoZSBmaXJzdCBlbmFibGUgcHVibGlzaGVzIGl0LCBmb3IgZ29vZC5cXG4rXFx0ICovXFxuK1xcdGlmIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX0RJU0FCTEVEKSB7XFxuK1xcdFxcdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5NSVNDX0ZNVF9ESVNBQkxFRDtcXG4rXFx0XFx0Y2xlYXJfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBUcmFuc3BhcmVuY3kgcHJlc2VydmVzIHRoZSB3aG9sZSBhcmd2LCBhcmd2WzBdIGluY2x1ZGVkLiAqL1xcbiBcXHRpZiAoKGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfVFJBTlNQQVJFTlQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAoZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkpXFxuQEAgLTgxNCw2ICs5ODAsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gXFx0ICAgIGUtXFx1MDAzZWludGVycHJldGVyWzBdICE9ICcvJylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcbitcXHQvKiBCb3JuIGhvbGRpbmcgb25lIHJlZmVyZW5jZTsgcHV0X2JpbmZtdF9oYW5kbGVyKCkgaXMgdGhlIHRlYXJkb3duLiAqL1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmUtXFx1MDAzZXVzZXJzLCAxKTtcXG4gXFx0cmV0dXJuIG5vX2ZyZWVfcHRyKGUpO1xcbiB9XFxuIFxcbkBAIC04MjUsMTggKzk5MywxNyBAQCBlbnVtIGJtX2NvbW1hbmQge1xcbiBcXHRCTV9DTURfUkVNT1ZFLFxcdC8qIFxcXCItMVxcXCIgKi9cXG4gfTtcXG4gXFxuKy8qIExvbmdlc3Qgb2YgdGhlIGNvbW1hbmRzIGFib3ZlLCBcXFwiLTFcXFxcblxcXCIuICovXFxuKyNkZWZpbmUgTUFYX0NPTU1BTkRfTEVOR1RIIDNcXG4rXFxuIC8qXFxuICAqIFBhcnNlIHdoYXQgdXNlcnNwYWNlIHdyb3RlIHRvIC9zdGF0dXMgb3IgYW4gZW50cnkgZmlsZTogJzEnIGVuYWJsZXMsXFxuICAqICcwJyBkaXNhYmxlcyBhbmQgJy0xJyByZW1vdmVzIHRoZSBlbnRyeSBvciBhbGwgZW50cmllcy5cXG4gICovXFxuLXN0YXRpYyBpbnQgcGFyc2VfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXFxuK3N0YXRpYyBpbnQgcGFyc2VfY29tbWFuZChjb25zdCBjaGFyICpzLCBzaXplX3QgY291bnQpXFxuIHtcXG4tXFx0Y2hhciBzWzRdO1xcbi1cXG4tXFx0aWYgKGNvdW50IFxcdTAwM2UgMylcXG4rXFx0aWYgKGNvdW50IFxcdTAwM2UgTUFYX0NPTU1BTkRfTEVOR1RIKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0aWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKCFjb3VudClcXG4gXFx0XFx0cmV0dXJuIEJNX0NNRF9JR05PUkU7XFxuIFxcdGlmIChzW2NvdW50IC0gMV0gPT0gJ1xcXFxuJylcXG5AQCAtODUwLDggKzEwMTcsMjYgQEAgc3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4gXFxuKy8qIENvcHkgaW4gYSBjb21tYW5kIGZyb20gYSBmaWxlIHRoYXQgdGFrZXMgbm90aGluZyBlbHNlLCBhbmQgcGFyc2UgaXQuICovXFxuK3N0YXRpYyBpbnQgcmVhZF9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcXG4re1xcbitcXHRjaGFyIHNbTUFYX0NPTU1BTkRfTEVOR1RIICsgMV07XFxuK1xcbitcXHRpZiAoY291bnQgXFx1MDAzZSBzaXplb2YocykgLSAxKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIHBhcnNlX2NvbW1hbmQocywgY291bnQpO1xcbit9XFxuK1xcbiAvKiBnZW5lcmljIHN0dWZmICovXFxuIFxcbisvKiBUaGUgcm9vdCBkaXJlY3RvcnkncyBpbm9kZTsgaXRzIGxvY2sgc2VyaWFsaXplcyBjb25maWd1cmluZyBhbiBpbnN0YW5jZS4gKi9cXG4rc3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbit7XFxuK1xcdHJldHVybiBkX2lub2RlKHNiLVxcdTAwM2VzX3Jvb3QpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibV9zZXFfaGV4KHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3QgdTggKmRhdGEsIGludCBzaXplKVxcbiB7XFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTsgaSsrKVxcbkBAIC04NjcsMTAgKzEwNTIsMjMgQEAgc3RhdGljIGludCBibV9lbnRyeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKVxcbiBcXHRlbHNlXFxuIFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJkaXNhYmxlZFxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSlcXG4rXFx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xcbitcXG4gXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiYnBmICVzXFxcXG5cXFwiLCBlLVxcdTAwM2VicGZfb3BzLVxcdTAwM2VuYW1lKTtcXG4tXFx0ZWxzZVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIHN0YWdlZCBlbnRyeSdzIHNldCBjYW4gc3RpbGwgZ3Jvdywgc28gZXZlcnkgYmluZGluZyBpc1xcbitcXHRcXHQgKiByY3UtcHVibGlzaGVkLiBUaGUgb3BlbiBmaWxlIHBpbnMgdGhlIGVudHJ5IGFuZCB3aXRoIGl0XFxuK1xcdFxcdCAqIGV2ZXJ5IG5vZGUsIHNvIHJjdSBpcyBmb3IgdGhlIHRlYXJpbmcsIG5vdCB0aGUgbGlmZXRpbWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGludGVycCwgXFx1MDAyNmUtXFx1MDAzZWludGVycHMsIGxpc3QpXFxuK1xcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcImJwZi1pbnRlcnByZXRlciAlcyAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgaW50ZXJwLVxcdTAwM2VuYW1lLCBpbnRlcnAtXFx1MDAzZXBhdGgpO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiaW50ZXJwcmV0ZXIgJXNcXFxcblxcXCIsIGUtXFx1MDAzZWludGVycHJldGVyKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogcHJpbnQgdGhlIHNwZWNpYWwgZmxhZ3MgKi9cXG4gXFx0c2VxX3B1dHMobSwgXFxcImZsYWdzOiBcXFwiKTtcXG5AQCAtOTkyLDEwICsxMTkwLDExIEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuIC8qIFJlbW92ZSBAZSB1bmxlc3MgaXQgd2FzIGFscmVhZHkgcmVtb3ZlZC4gKi9cXG4gc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBkX2lub2RlKHNiLVxcdTAwM2VzX3Jvb3QpO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKHNiKTtcXG4gXFxuIFxcdGlub2RlX2xvY2tfbmVzdGVkKHJvb3QsIElfTVVURVhfUEFSRU5UKTtcXG4tXFx0aWYgKCFobGlzdF91bmhhc2hlZChcXHUwMDI2ZS1cXHUwMDNlbm9kZSkpXFxuK1xcdC8qIEEgc3RhZ2VkIGVudHJ5IGlzIG5vdCBoYXNoZWQ7IHRoZSBkZW50cnkgc2F5cyBpZiBpdCB3YXMgcmVtb3ZlZC4gKi9cXG4rXFx0aWYgKCFkX3VuaGFzaGVkKGUtXFx1MDAzZWRlbnRyeSkpXFxuIFxcdFxcdHJlbW92ZV9iaW5mbXRfaGFuZGxlcihpX2JpbmZtdF9taXNjKHJvb3QpLCBlKTtcXG4gXFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xcbiB9XFxuQEAgLTEwMDQsMTMgKzEyMDMsMjEgQEAgc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2FsbF9lbnRyaWVzKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuLVxcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGRfaW5vZGUoc2ItXFx1MDAzZXNfcm9vdCk7XFxuLVxcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZTtcXG4tXFx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XFxuK1xcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoc2IpO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpjaGlsZCA9IE5VTEw7XFxuIFxcbiBcXHRpbm9kZV9sb2NrX25lc3RlZChyb290LCBJX01VVEVYX1BBUkVOVCk7XFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbmV4dCwgXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXMsIG5vZGUpXFxuLVxcdFxcdHJlbW92ZV9iaW5mbXRfaGFuZGxlcihtaXNjLCBlKTtcXG4rXFx0LypcXG4rXFx0ICogV2FsayB0aGUgZGlyZWN0b3J5IHJhdGhlciB0aGFuIHRoZSBzZWFyY2ggbGlzdDogYSBzdGFnZWQgZW50cnlcXG4rXFx0ICogaXMgaW4gdGhlIGZvcm1lciBidXQgbm90IHlldCBpbiB0aGUgbGF0dGVyLiBUaGUgY29udHJvbCBmaWxlc1xcbitcXHQgKiBjYXJyeSBubyBlbnRyeSBhbmQgc3RheS5cXG4rXFx0ICovXFxuK1xcdHdoaWxlICgoY2hpbGQgPSBmaW5kX25leHRfY2hpbGQoc2ItXFx1MDAzZXNfcm9vdCwgY2hpbGQpKSkge1xcbitcXHRcXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgPSBkX2lub2RlKGNoaWxkKS1cXHUwMDNlaV9wcml2YXRlO1xcbitcXG4rXFx0XFx0aWYgKGUpXFxuK1xcdFxcdFxcdHJlbW92ZV9iaW5mbXRfaGFuZGxlcihtaXNjLCBlKTtcXG4rXFx0fVxcbiBcXHRpbm9kZV91bmxvY2socm9vdCk7XFxuIH1cXG4gXFxuQEAgLTEwNTYsMjAgKzEyNjMsMTM4IEBAIHN0YXRpYyBpbnQgYm1fZW50cnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIExvbmdlc3QgJytcXHUwMDNjbmFtZVxcdTAwM2UgXFx1MDAzY3BhdGhcXHUwMDNlJyBhIHdyaXRlIGNhbiBzcGVsbCwgYW5kIHdpdGggaXQgdGhlIGxvbmdlc3RcXG4rICogY29tbWFuZCBhbiBlbnRyeSBmaWxlIHRha2VzOiB0aGUgdHdvIGRlbGltaXRlcnMgYW5kIGEgbmV3bGluZSBvbiB0b3Agb2ZcXG4rICogdGhlIHR3byBuYW1lcy5cXG4rICovXFxuKyNkZWZpbmUgTUFYX0JJTkRJTkdfTEVOR1RIIChCSU5GTVRfTUlTQ19JTlRFUlBfTkFNRV9NQVggKyBQQVRIX01BWCArIDMpXFxuK1xcbisvKipcXG4rICogYm1fZW50cnlfYWRkX2ludGVycCAtIGJpbmQgYW5vdGhlciBpbnRlcnByZXRlciB0byBhIHN0YWdlZCBlbnRyeVxcbisgKiBAZTogdGhlIGVudHJ5XFxuKyAqIEBmaWxlOiB0aGUgZW50cnkgZmlsZSBiZWluZyB3cml0dGVuIHRvLCBmb3IgaXRzIGNyZWRlbnRpYWxzXFxuKyAqIEBidWY6IHRoZSAnK1xcdTAwM2NuYW1lXFx1MDAzZSBcXHUwMDNjcGF0aFxcdTAwM2UnIGNvbW1hbmQsIHBhcnNlZCBpbiBwbGFjZSBhbmQgb3duZWQgYnkgdGhlIGNhbGxlclxcbisgKiBAY291bnQ6IGl0cyBsZW5ndGhcXG4rICpcXG4rICogQSAnRCcgZW50cnkgaXMgcmVnaXN0ZXJlZCBvdXRzaWRlIHRoZSBzZWFyY2ggbGlzdCwgd2hpY2ggaXMgd2hhdCBsZWF2ZXNcXG4rICogaXQgb3BlbiB0byBiZWluZyBjb25maWd1cmVkOiBpdCBjYW5ub3QgYmUgbWF0Y2hlZCwgc28gbm8gZXhlYyBjYW4gYmVcXG4rICogaG9sZGluZyBpdHMgaW50ZXJwcmV0ZXJzIGFuZCB0aGUgc2V0IGNhbiBzdGlsbCBncm93LiBJdHMgZmlyc3QgZW5hYmxlXFxuKyAqIHB1Ymxpc2hlcyBpdCBhbmQgZW5kcyB0aGF0LiBPbmUgaW50ZXJwcmV0ZXIgcGVyIHdyaXRlLCB1cCB0b1xcbisgKiBCSU5GTVRfTUlTQ19JTlRFUlBfTUFYIG9mIHRoZW0sIG5vbmUgb2Ygd2hpY2ggaGFzIHRvIGZpdCBpbiBhIHJlZ2lzdGVyXFxuKyAqIHN0cmluZy5cXG4rICpcXG4rICogUmV0dXJuOiBAY291bnQgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBmaWxlICpmIF9fZnJlZShjbG9zZV9pbnRlcnBfZmlsZSkgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2IpO1xcbitcXHRzaXplX3QgbmxlbiwgcGxlbjtcXG4rXFx0Y2hhciAqbmFtZSwgKnBhdGg7XFxuK1xcdGludCByZXR2YWw7XFxuK1xcbitcXHQvKiBTZXR0bGVkIGJlZm9yZSB0aGUgb3BlbjogdHlwZSBpcyBmaXhlZCwgcHVibGljYXRpb24gaXMgcGVybWFuZW50LiAqL1xcbitcXHRpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWhsaXN0X3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZlLVxcdTAwM2Vub2RlKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdC8qICcrXFx1MDAzY25hbWVcXHUwMDNlIFxcdTAwM2NwYXRoXFx1MDAzZSc6IHRoZSBwYXRoIGlzIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3Qgc3BhY2UuICovXFxuK1xcdG5hbWUgPSBidWYgKyAxO1xcbitcXHRwYXRoID0gc3RyY2hyKG5hbWUsICcgJyk7XFxuK1xcdGlmICghcGF0aClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdCpwYXRoKysgPSAnXFxcXDAnO1xcbitcXG4rXFx0cGxlbiA9IHN0cmxlbihwYXRoKTtcXG4rXFx0LyogVGhlIGNvbW1hbmQgaGFzIHRvIGVuZCBhdCB0aGUgd3JpdGUsIGxpa2UgYSByZWdpc3RlciBzdHJpbmcuICovXFxuK1xcdGlmIChwYXRoICsgcGxlbiAhPSBidWYgKyBjb3VudClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChwbGVuIFxcdTAwMjZcXHUwMDI2IHBhdGhbcGxlbiAtIDFdID09ICdcXFxcbicpXFxuK1xcdFxcdHBhdGhbLS1wbGVuXSA9ICdcXFxcMCc7XFxuK1xcdC8qIFJlc29sdmVkIG5vdywgc28gYSByZWxhdGl2ZSBwYXRoIHdvdWxkIG5hbWUgdGhlIHdyaXRlcidzIGN3ZC4gKi9cXG4rXFx0aWYgKHBhdGhbMF0gIT0gJy8nKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdG5sZW4gPSBwYXRoIC0gbmFtZSAtIDE7XFxuK1xcdGlmICghbmxlbiB8fCBubGVuIFxcdTAwM2UgQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0LyogVGhlIG5hbWUgcHJpbnRzIGJldHdlZW4gZGVsaW1pdGVycywgc28ga2VlcCBpdCBhIHByaW50YWJsZSB3b3JkLiAqL1xcbitcXHRmb3IgKGNvbnN0IGNoYXIgKnAgPSBuYW1lOyAqcDsgcCsrKVxcbitcXHRcXHRpZiAoIWlzYXNjaWkoKnApIHx8ICFpc2dyYXBoKCpwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBPcGVuZWQgYmVmb3JlIHRoZSBsb2NrOiByZXNvbHZpbmcgaXQgbWF5IHdhbGsgdGhpcyB2ZXJ5IGZpbGVzeXN0ZW0uICovXFxuK1xcdGYgPSBvcGVuX2ludGVycF9maWxlKGZpbGUtXFx1MDAzZWZfY3JlZCwgcGF0aCk7XFxuK1xcdGlmIChJU19FUlIoZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGYpO1xcbitcXG4rXFx0aW5vZGVfbG9jayhyb290KTtcXG4rXFx0aWYgKGRfdW5oYXNoZWQoZS1cXHUwMDNlZGVudHJ5KSlcXG4rXFx0XFx0cmV0dmFsID0gLUVOT0VOVDtcXHQvKiByZW1vdmVkIHdoaWxlIHdlIHdlcmUgb3BlbmluZyBpdCAqL1xcbitcXHRlbHNlIGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNmUtXFx1MDAzZW5vZGUpKVxcbitcXHRcXHRyZXR2YWwgPSAtRUJVU1k7XFx0LyogcHVibGlzaGVkIHdoaWxlIHdlIHdlcmUgb3BlbmluZyBpdCAqL1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHZhbCA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBuYW1lLCBwYXRoLCBmKTtcXG4rXFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbitcXG4rXFx0LyogVGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlIGVudHJ5IG5vdy4gKi9cXG4rXFx0cmV0YWluX2FuZF9udWxsX3B0cihmKTtcXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbiBzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuIFxcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGlub2RlLVxcdTAwM2VpX3ByaXZhdGU7XFxuLVxcdGludCByZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xcbitcXHRjaGFyICpidWYgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHQvKiBBIGJpbmRpbmcgaXMgdGhlIGxvbmdlc3QgY29tbWFuZCB0aGlzIGZpbGUgdGFrZXMuICovXFxuK1xcdGlmIChjb3VudCBcXHUwMDNlIE1BWF9CSU5ESU5HX0xFTkdUSClcXG4rXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4rXFxuK1xcdGJ1ZiA9IG1lbWR1cF91c2VyX251bChidWZmZXIsIGNvdW50KTtcXG4rXFx0aWYgKElTX0VSUihidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihidWYpO1xcbitcXG4rXFx0LyogJytcXHUwMDNjbmFtZVxcdTAwM2UgXFx1MDAzY3BhdGhcXHUwMDNlJyBiaW5kcyBhbiBpbnRlcnByZXRlciwgZXZlcnl0aGluZyBlbHNlIHRvZ2dsZXMuICovXFxuK1xcdGlmIChidWZbMF0gPT0gJysnKVxcbitcXHRcXHRyZXR1cm4gYm1fZW50cnlfYWRkX2ludGVycChlLCBmaWxlLCBidWYsIGNvdW50KTtcXG4rXFxuK1xcdHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmLCBjb3VudCk7XFxuIFxcbiBcXHRzd2l0Y2ggKHJlcykge1xcbiBcXHRjYXNlIEJNX0NNRF9ESVNBQkxFOlxcbiBcXHRcXHRjbGVhcl9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEJNX0NNRF9FTkFCTEU6XFxuK1xcdGNhc2UgQk1fQ01EX0VOQUJMRToge1xcbitcXHRcXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBmaXJzdCBlbmFibGUgcHVibGlzaGVzIGEgJ0QnIGVudHJ5IGludG8gdGhlIHNlYXJjaFxcbitcXHRcXHQgKiBsaXN0LCB3aG9sZS4gVGhlIGxvY2sga2VlcHMgdGhhdCBvcmRlcmVkIGFnYWluc3QgYSBzZWNvbmRcXG4rXFx0XFx0ICogZW5hYmxlLCBhZ2FpbnN0IHJlbW92YWwgLSBhIHJlbW92ZWQgZW50cnkgaGFzIG5vdGhpbmcgbGVmdFxcbitcXHRcXHQgKiB0byBwdWJsaXNoIC0gYW5kIGFnYWluc3QgYmluZGluZzogd2hhdCBjYW4gYmUgbWF0Y2hlZCBjYW5cXG4rXFx0XFx0ICogbm8gbG9uZ2VyIGJlIGNvbmZpZ3VyZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpbm9kZV9sb2NrKHJvb3QpO1xcbiBcXHRcXHRzZXRfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRpZiAoaGxpc3RfdW5oYXNoZWQoXFx1MDAyNmUtXFx1MDAzZW5vZGUpIFxcdTAwMjZcXHUwMDI2ICFkX3VuaGFzaGVkKGUtXFx1MDAzZWRlbnRyeSkpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGJpbmZtdF9taXNjICptaXNjID0gaV9iaW5mbXRfbWlzYyhpbm9kZSk7XFxuK1xcbitcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuK1xcdFxcdFxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2ZS1cXHUwMDNlbm9kZSwgXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXMpO1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWlzYy1cXHUwMDNlZW50cmllc19sb2NrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpbm9kZV91bmxvY2socm9vdCk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgQk1fQ01EX1JFTU9WRTpcXG4gXFx0XFx0Ym1fcmVtb3ZlX2VudHJ5KGUsIGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTExMDYsMTYgKzE0MzEsMTggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4tXFx0cmVmY291bnRfc2V0KFxcdTAwMjZlLVxcdTAwM2V1c2VycywgMSk7XFxuIFxcdGUtXFx1MDAzZWRlbnRyeSA9IGRlbnRyeTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSA9IGU7XFxuIFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZibV9lbnRyeV9vcGVyYXRpb25zO1xcbiBcXG4gXFx0ZF9tYWtlX3BlcnNpc3RlbnQoZGVudHJ5LCBpbm9kZSk7XFxuLVxcdG1pc2MgPSBpX2JpbmZtdF9taXNjKGlub2RlKTtcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzX2xvY2spO1xcbi1cXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmUtXFx1MDAzZW5vZGUsIFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzKTtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuK1xcdC8qIEEgJ0QnIGVudHJ5IHN0YXlzIG91dCBvZiB0aGUgc2VhcmNoIGxpc3QgdW50aWwgaXRzIGZpcnN0IGVuYWJsZS4gKi9cXG4rXFx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdG1pc2MgPSBpX2JpbmZtdF9taXNjKGlub2RlKTtcXG4rXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzX2xvY2spO1xcbitcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmUtXFx1MDAzZW5vZGUsIFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuK1xcdH1cXG4gXFx0c2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTEyMyw5ICsxNDUwLDggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gXFx0XFx0XFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiB7XFxuLVxcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4rXFx0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplIF9fZnJlZShwdXRfYmluZm10X2hhbmRsZXIpID0gTlVMTDtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2I7XFxuLVxcdHN0cnVjdCBmaWxlICpmID0gTlVMTDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7XFxuQEAgLTExNDIsMzMgKzE0NjgsMjAgQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBOb3cgdGhhdCB3ZSBzdXBwb3J0IHVucHJpdmlsZWdlZCBiaW5mbXRfbWlzYyBtb3VudHMgbWFrZVxcbi1cXHRcXHQgKiBzdXJlIHdlIHVzZSB0aGUgY3JlZGVudGlhbHMgdGhhdCB0aGUgcmVnaXN0ZXIgQGZpbGUgd2FzXFxuLVxcdFxcdCAqIG9wZW5lZCB3aXRoIHRvIGFsc28gb3BlbiB0aGUgaW50ZXJwcmV0ZXIuIEJlZm9yZSB0aGF0IHRoaXNcXG4tXFx0XFx0ICogZGlkbid0IG1hdHRlciBtdWNoIGFzIG9ubHkgYSBwcml2aWxlZ2VkIHByb2Nlc3MgY291bGQgb3Blblxcbi1cXHRcXHQgKiB0aGUgcmVnaXN0ZXIgZmlsZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHNjb3BlZF93aXRoX2NyZWRzKGZpbGUtXFx1MDAzZWZfY3JlZClcXG4tXFx0XFx0XFx0ZiA9IG9wZW5fZXhlYyhlLVxcdTAwM2VpbnRlcnByZXRlcik7XFxuLVxcdFxcdGlmIChJU19FUlIoZikpIHtcXG4tXFx0XFx0XFx0cHJfbm90aWNlKFxcXCJyZWdpc3RlcjogZmFpbGVkIHRvIGluc3RhbGwgaW50ZXJwcmV0ZXIgZmlsZSAlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IGUtXFx1MDAzZWludGVycHJldGVyKTtcXG4rXFx0XFx0c3RydWN0IGZpbGUgKmYgPSBvcGVuX2ludGVycF9maWxlKGZpbGUtXFx1MDAzZWZfY3JlZCwgZS1cXHUwMDNlaW50ZXJwcmV0ZXIpO1xcbitcXG4rXFx0XFx0aWYgKElTX0VSUihmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZik7XFxuK1xcdFxcdGVyciA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBcXFwiXFxcIiwgZS1cXHUwMDNlaW50ZXJwcmV0ZXIsIGYpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGNsb3NlX2ludGVycF9maWxlKGYpO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGUtXFx1MDAzZWludGVycF9maWxlID0gZjtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gYWRkX2VudHJ5KGUsIHNiKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRpZiAoZikge1xcbi1cXHRcXHRcXHRleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZik7XFxuLVxcdFxcdFxcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKGUtXFx1MDAzZWJwZl9vcHMpXFxuLVxcdFxcdFxcdGJpbmZtdF9taXNjX3B1dF9vcHMoZS1cXHUwMDNlYnBmX29wcyk7XFxuK1xcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4gXFxuIFxcdC8qIFRoZSBlbnRyeSBpcyBvd25lZCBieSBpdHMgaW5vZGUgbm93LiAqL1xcbiBcXHRyZXRhaW5fYW5kX251bGxfcHRyKGUpO1xcbkBAIC0xMTk3LDcgKzE1MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiB7XFxuIFxcdHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYztcXG4tXFx0aW50IHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmZmVyLCBjb3VudCk7XFxuK1xcdGludCByZXMgPSByZWFkX2NvbW1hbmQoYnVmZmVyLCBjb3VudCk7XFxuIFxcbiBcXHRtaXNjID0gaV9iaW5mbXRfbWlzYyhmaWxlX2lub2RlKGZpbGUpKTtcXG4gXFx0c3dpdGNoIChyZXMpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2NfYnBmLmMgYi9mcy9iaW5mbXRfbWlzY19icGYuY1xcbmluZGV4IDkyMDAzZWE2NDBkM2YuLmIyNDZkODg2NDM3YjggMTAwNjQ0XFxuLS0tIGEvZnMvYmluZm10X21pc2NfYnBmLmNcXG4rKysgYi9mcy9iaW5mbXRfbWlzY19icGYuY1xcbkBAIC03LDYgKzcsMTUgQEBcXG4gICogbmFtZXNwYWNlIGl0IHdhcyByZWdpc3RlcmVkIGluLiBBIGJpbmZtdF9taXNjICdCJyBlbnRyeSBhY3RpdmF0ZXMgaXQ6XFxuICAqXFxuICAqICAgZWNobyAnOmVudHJ5OkI6Ojo6XFx1MDAzY2hhbmRsZXItbmFtZVxcdTAwM2U6JyBcXHUwMDNlIFxcdTAwM2NiaW5mbXRfbWlzY1xcdTAwM2UvcmVnaXN0ZXJcXG4rICpcXG4rICogVGhlIGVudHJ5IGNhbiBiaW5kIHRoZSBpbnRlcnByZXRlcnMgdGhlIGhhbmRsZXIgbWF5IHJ1biBpdHMgYmluYXJpZXNcXG4rICogd2l0aCwgZWFjaCBvcGVuZWQgYnkgdGhlIHdyaXRlIHRoYXQgYmluZHMgaXQgYW5kIHNlbGVjdGVkIGJ5IG5hbWUgcGVyXFxuKyAqIGV4ZWMuIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aCAnRCcgaXMgbm90IG1hdGNoYWJsZSB5ZXQsIHdoaWNoIGlzIHdoYXRcXG4rICogbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gdGhlbTpcXG4rICpcXG4rICogICBlY2hvICc6ZW50cnk6Qjo6OjpcXHUwMDNjaGFuZGxlci1uYW1lXFx1MDAzZTpEJyBcXHUwMDNlIFxcdTAwM2NiaW5mbXRfbWlzY1xcdTAwM2UvcmVnaXN0ZXJcXG4rICogICBlY2hvICcrXFx1MDAzY25hbWVcXHUwMDNlIFxcdTAwM2NwYXRoXFx1MDAzZScgXFx1MDAzZSBcXHUwMDNjYmluZm10X21pc2NcXHUwMDNlL2VudHJ5XFxuKyAqICAgZWNobyAxIFxcdTAwM2UgXFx1MDAzY2JpbmZtdF9taXNjXFx1MDAzZS9lbnRyeVxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXFx1MDAzZVxcbkBAIC0xNiw2ICsyNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtOTEsNiArMTAyLDIwIEBAIGJvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0ICAgICAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc3Rfb3BzID09IFxcdTAwMjZicGZfYmluZm10X21pc2Nfb3BzO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZXBsYWNlIHRoZSBzdGFnZWQgaW50ZXJwcmV0ZXIgc2VsZWN0aW9uOiBuYW1pbmcgYSBwYXRoIGRyb3BzIGEgYm91bmRcXG4rICogZmlsZSwgc2VsZWN0aW5nIGEgYm91bmQgaW50ZXJwcmV0ZXIgY2FycmllcyBpdHMgZmlsZSBhbG9uZy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY2hhciAqcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmYpXFxuK3tcXG4rXFx0aWYgKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZSlcXG4rXFx0XFx0ZnB1dChicHJtLVxcdTAwM2VicGZfaW50ZXJwX2ZpbGUpO1xcbitcXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwKTtcXG4rXFx0YnBybS1cXHUwMDNlYnBmX2ludGVycCA9IHBhdGg7XFxuK1xcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZSA9IGY7XFxuK31cXG4rXFxuIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gXFxuIC8qKlxcbkBAIC0xMDMsNyArMTI4LDggQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbiAgKiBiZWZvcmUgcmV0dXJuaW5nIHplcm87IHRoZSB2ZXJpZmllciByZWplY3RzIHRoZSBjYWxsIGZyb20gYW55IG90aGVyXFxuICAqIHByb2dyYW0sIGluY2x1ZGluZyB0aGUgaGFuZGxlcidzIG93biBtYXRjaCBwcm9ncmFtLiBUaGUgcGF0aCBpcyBvcGVuZWRcXG4gICogd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlIGV4ZWMgYWZ0ZXIgdGhlIHByb2dyYW1cXG4tICogcmV0dXJucy5cXG4rICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhblxcbisgKiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmQgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxcbiAgKi9cXG5AQCAtMTI3LDggKzE1Myw1MCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIFxcdGlmICghaW50ZXJwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGtmcmVlKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnApO1xcbi1cXHRicHJtLVxcdTAwM2VicGZfaW50ZXJwID0gaW50ZXJwO1xcbitcXHRibV9icGZfc3RhZ2Vfc2VsZWN0aW9uKGJwcm0sIGludGVycCwgTlVMTCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwIC0gcnVuIHRoaXMgZXhlYyB1bmRlciBhbiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmRcXG4rICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXFxuKyAqIEBuYW1lOiBuYW1lIHRoZSBpbnRlcnByZXRlciB3YXMgcmVnaXN0ZXJlZCB1bmRlclxcbisgKiBAbmFtZV9fc3o6IHNpemUgb2YgdGhlIEBuYW1lIGJ1ZmZlciwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxcXG4rICpcXG4rICogVG8gYmUgY2FsbGVkIGZyb20gdGhlIGxvYWQgcHJvZ3JhbSBvZiBhIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgaGFuZGxlclxcbisgKiBpbnN0ZWFkIG9mIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpLiBJdCBzZWxlY3RzIG9uZSBvZiB0aGUgaW50ZXJwcmV0ZXJzXFxuKyAqIHRoZSBtYXRjaGVkIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGgsIGVhY2ggb2Ygd2hpY2ggd2FzIG9wZW5lZCBvbmNlIHdoZW5cXG4rICogdGhlIGVudHJ5IHdhcyByZWdpc3RlcmVkLiBOb3RoaW5nIGlzIHJlc29sdmVkIGF0IGV4ZWMgdGltZSwgc28gbm9cXG4rICogZmlsZXN5c3RlbSB2aWV3IGNhbiByZWRpcmVjdCB0aGUgaW50ZXJwcmV0ZXIuXFxuKyAqXFxuKyAqIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIHRoZSBlbnRyeSByZWdpc3RlcmVkIGl0IHVuZGVyLlxcbisgKiBDYWxsaW5nIGl0IGFnYWluIHJlcGxhY2VzIHRoZSBzZWxlY3Rpb24uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PRU5UIGlmIHRoZSBtYXRjaGVkIGVudHJ5IGJvdW5kIG5vIGludGVycHJldGVyXFxuKyAqIG9mIHRoYXQgbmFtZSwgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXHRjaGFyICpwYXRoO1xcbitcXG4rXFx0aWYgKCFuYW1lX19zeilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGxlbiA9IHN0cm5sZW4obmFtZSwgbmFtZV9fc3opO1xcbitcXHRpZiAobGVuID09IG5hbWVfX3N6IHx8ICFsZW4pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aW50ZXJwID0gYmluZm10X21pc2NfZmluZF9pbnRlcnAoYnBybS1cXHUwMDNlYnBmX2ludGVycHMsIG5hbWUpO1xcbitcXHRpZiAoIWludGVycClcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRwYXRoID0ga3N0cmR1cChpbnRlcnAtXFx1MDAzZXBhdGgsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBhdGgpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Ym1fYnBmX3N0YWdlX3NlbGVjdGlvbihicHJtLCBwYXRoLCBnZXRfZmlsZShpbnRlcnAtXFx1MDAzZWZpbGUpKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTIxMSw2ICsyNzksNyBAQCBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbiBcXG4gQlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ZsYWdzLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9LRlVOQ1NfRU5EKGJtX2JwZl9rZnVuY19pZHMpXFxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xcbmluZGV4IDg1NjczMWY3OGQwNTQuLmExNGYyOGIxNTYwN2EgMTAwNjQ0XFxuLS0tIGEvZnMvZXhlYy5jXFxuKysrIGIvZnMvZXhlYy5jXFxuQEAgLTE0NzcsNiArMTQ3Nyw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHRpZiAoYnBybS1cXHUwMDNlaW50ZXJwICE9IGJwcm0tXFx1MDAzZWZpbGVuYW1lKVxcbiBcXHRcXHRrZnJlZShicHJtLVxcdTAwM2VpbnRlcnApO1xcbiBcXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwKTtcXG4rXFx0aWYgKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZSlcXG4rXFx0XFx0ZnB1dChicHJtLVxcdTAwM2VicGZfaW50ZXJwX2ZpbGUpO1xcbiBcXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwX2FyZyk7XFxuIFxcdGtmcmVlKGJwcm0tXFx1MDAzZWZkcGF0aCk7XFxuIFxcdGtmcmVlKGJwcm0pO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcXG5pbmRleCA0YWJkZmQzNmIzZmE4Li4wNzJlNGIzZGQ3OGQyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxcbkBAIC01LDExICs1LDQxIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IGJwZl9wcm9nO1xcbitzdHJ1Y3QgZmlsZTtcXG4gc3RydWN0IGxpbnV4X2JpbnBybTtcXG4gc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xcbiBcXG4gI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTZcXG4gXFxuKy8qIExvbmdlc3QgbmFtZSBhICdCJyBlbnRyeSBjYW4gYmluZCBhbiBpbnRlcnByZXRlciB1bmRlci4gKi9cXG4rI2RlZmluZSBCSU5GTVRfTUlTQ19JTlRFUlBfTkFNRV9NQVggMzJcXG4rXFxuKy8qIE1vc3QgaW50ZXJwcmV0ZXJzIG9uZSBlbnRyeSBjYW4gYmluZC4gKi9cXG4rI2RlZmluZSBCSU5GTVRfTUlTQ19JTlRFUlBfTUFYIDEwMFxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgLSBhbiBpbnRlcnByZXRlciBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoXFxuKyAqIEBsaXN0OiBsaW5rIGluIHRoZSBlbnRyeSdzIGxpc3QsIGluIHJlZ2lzdHJhdGlvbiBvcmRlclxcbisgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluXFxuKyAqIEBwYXRoOiB0aGUgcGF0aCBpdCB3YXMgcmVnaXN0ZXJlZCB1bmRlciwgdXNlZCBhcyB0aGUgbmFtZSB0aGUgaW50ZXJwcmV0ZXJcXG4rICogICAgICAgIHJ1bnMgdW5kZXI7IHN0b3JlZCBhZnRlciBAbmFtZSBpbiB0aGUgc2FtZSBhbGxvY2F0aW9uXFxuKyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWRcXG4rICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljICdGJyBlbnRyeVxcbisgKlxcbisgKiBPd25lZCBieSB0aGUgZW50cnkgYW5kIGxpdmluZyBleGFjdGx5IGFzIGxvbmcgYXMgaXQgZG9lcy4gVGhlIGxpc3QgaGVhZFxcbisgKiBpcyBoYW5kZWQgdG8gdGhlIGhhbmRsZXIncyBsb2FkIHByb2dyYW0gZm9yIHRoZSBkdXJhdGlvbiBvZiBvbmUgZXhlYyxcXG4rICogd2hpY2ggcGlja3Mgb25lIHdpdGggYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKCkuXFxuKyAqL1xcbitzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGU7XFxuK1xcdGNvbnN0IGNoYXJcXHRcXHQqcGF0aDtcXG4rXFx0Y2hhclxcdFxcdFxcdG5hbWVbXTtcXG4rfTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxcbitiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKTtcXG4rXFxuIC8qKlxcbiAgKiBlbnVtIGJwZl9iaW5wcm1fZmxhZ3MgLSBwZXItZXhlYyBpbnZvY2F0aW9uIGZsYWdzIGEgbG9hZCBwcm9ncmFtIGNhbiByZXF1ZXN0XFxuICAqIEBCUEZfQklOUFJNX1BSRVNFUlZFX0FSR1YwOiBrZWVwIHRoZSBjYWxsZXIncyBhcmd2WzBdIChsaWtlIHRoZSAnUCcgZmxhZylcXG5AQCAtNDIsMTAgKzcyLDExIEBAIGVudW0gYnBmX2JpbnBybV9mbGFncyB7XFxuICAqICAgICAgICAgc28gaXQgY2FuIHJlYWQgdGhlIGJpbmFyeSB0byBkZWNpZGUsIGJ1dCB0aGUgdmVyaWZpZXIgcmVqZWN0c1xcbiAgKiAgICAgICAgIHRoZSBpbnRlcnByZXRlciBzZWxlY3Rpb24ga2Z1bmNzIGluIGl0XFxuICAqIEBsb2FkOiAgc2VsZWN0IGFuIGludGVycHJldGVyIGZvciB0aGUgbWF0Y2hlZCBAYnBybSB2aWFcXG4tICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXMgY29tbWl0dGVkLCBzb1xcbi0gKiAgICAgICAgIGEgZmFpbHVyZSBmYWlscyB0aGUgZXhlYyBpbnN0ZWFkIG9mIGZhbGxpbmcgdGhyb3VnaCB0byBsYXRlclxcbi0gKiAgICAgICAgIGVudHJpZXM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0IG1vdmVzIG9uIHRvIHRoZVxcbi0gKiAgICAgICAgIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0c1xcbisgKiAgICAgICAgIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpLCBvciBvbmUgdGhlIGVudHJ5IGJvdW5kIHZpYVxcbisgKiAgICAgICAgIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLCBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXNcXG4rICogICAgICAgICBjb21taXR0ZWQsIHNvIGEgZmFpbHVyZSBmYWlscyB0aGUgZXhlYyBpbnN0ZWFkIG9mIGZhbGxpbmdcXG4rICogICAgICAgICB0aHJvdWdoIHRvIGxhdGVyIGVudHJpZXM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0XFxuKyAqICAgICAgICAgbW92ZXMgb24gdG8gdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0c1xcbiAgKiBAbmFtZTogbmFtZSB0aGF0ICdCJyBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgaGFuZGxlciBieVxcbiAgKi9cXG4gc3RydWN0IGJpbmZtdF9taXNjX29wcyB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcXG5pbmRleCBhMmRhZWNiYjAxZDZhLi5mNjg2YTM3ZjdhMGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcXG5AQCAtMTQsNyArMTQsMTAgQEAgc3RydWN0IGNvcmVkdW1wX3BhcmFtcztcXG4gXFxuIC8qIEludGVycHJldGVyIHNlbGVjdGlvbiBzdGFnZWQgYnkgYSBicGYgYmluZm10X21pc2MgaGFuZGxlci4gKi9cXG4gc3RydWN0IGJpbmZtdF9taXNjX2JwZiB7XFxuK1xcdC8qIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSBib3VuZCwgc2VsZWN0YWJsZSBieSBuYW1lICovXFxuK1xcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmJwZl9pbnRlcnBzO1xcbiBcXHRjb25zdCBjaGFyICpicGZfaW50ZXJwO1xcdFxcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cXG4rXFx0c3RydWN0IGZpbGUgKmJwZl9pbnRlcnBfZmlsZTtcXHQvKiB0aGUgYm91bmQgaW50ZXJwcmV0ZXIgaXQgc2VsZWN0ZWQgKi9cXG4gXFx0Y29uc3QgY2hhciAqYnBmX2ludGVycF9hcmc7XFx0LyogaW50ZXJwcmV0ZXIgYXJndW1lbnQgZnJvbSBhIGJwZiBoYW5kbGVyICovXFxuIFxcdHU2NCBicGZfZmxhZ3M7XFx0XFx0XFx0LyogZW51bSBicGZfYmlucHJtX2ZsYWdzIGZyb20gYSBicGYgaGFuZGxlciAqL1xcbiB9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbmluZGV4IDM5MGZlMTFhN2JlZGYuLjQxMGM5MzYwNmEwYzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcXG5AQCAtMjUsNiArMjUsMTAgQEAgVEVTVF9HRU5fUFJPR1MgKz0gY2hlY2stZXhlY1xcbiAjIG9yIGFuICdGJyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxcbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19zZWxmcGluXFxuIFxcbisjICdEJyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzXFxuKyMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuIFN0YXRpYyBtYWdpYyBlbnRyeSwgbm8gYnBmIHRvb2xjaGFpbi5cXG4rVEVTVF9HRU5fUFJPR1MgKz0gYmluZm10X21pc2NfZGlzYWJsZWRcXG4rXFxuICMgU3RhdGljICgnVCcgZmxhZykgdHJhbnNwYXJlbnQgYmluZm10X21pc2MgdGVzdDsgdGhlIGFzc2VydGluZyBpbnRlcnByZXRlclxcbiAjIGlzIHNoYXJlZCB3aXRoIHRoZSBicGYgaGFybmVzcydzIHRyYW5zcGFyZW50IGNhc2UuIE5vIGJwZiB0b29sY2hhaW4gbmVlZGVkLlxcbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY190cmFuc3BhcmVudFxcbkBAIC01Miw4ICs1Niw4IEBAIEhBVkVfQlBGX1RPT0xDSEFJTiA/PSAkKHNoZWxsIGNvbW1hbmQgLXYgJChDTEFORykgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gaWZlcSAoJChIQVZFX0JQRl9UT09MQ0hBSU4pLHkpXFxuIFRFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2JwZlxcbiBURVNUX0dFTl9GSUxFUyArPSBicGZfaW50ZXJwLmJwZi5vIG5peF9vcmlnaW4uYnBmLm8gdHJhbnNwYXJlbnQuYnBmLm9cXG4tVEVTVF9HRU5fRklMRVMgKz0gbG9hZGVyLmJwZi5vXFxuLVRFU1RfR0VOX0ZJTEVTICs9IGJpbmZtdF9icGZfaW50ZXJwIGJpbmZtdF9icGZfYXBwXFxuK1RFU1RfR0VOX0ZJTEVTICs9IGxvYWRlci5icGYubyBpbnRlcnBfYmluZC5icGYub1xcbitURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfYnBmX2ludGVycCBiaW5mbXRfYnBmX2FwcCBiaW5mbXRfYmluZF9pbnRlcnBcXG4gZWxzZVxcbiAkKGluZm8gZXhlYyBzZWxmdGVzdHM6IHNraXBwaW5nIGJpbmZtdF9taXNjX2JwZiwgbmVlZHMgY2xhbmcsIGJwZnRvb2wsIHZtbGludXggQlRGIGFuZCBsaWJicGYpXFxuIGVuZGlmXFxuQEAgLTEyMyw2ICsxMjcsOSBAQCAkKE9VVFBVVCkvYmluZm10X21pc2NfYnBmOiBiaW5mbXRfbWlzY19icGYuYyBiaW5mbXRfbWlzY19jb21tb24uaFxcbiAkKE9VVFBVVCkvYmluZm10X2JwZl9pbnRlcnA6IGJpbmZtdF9icGZfaW50ZXJwLmNcXG4gXFx0JChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJFxcdTAwM2MgLW8gJEBcXG4gXFxuKyQoT1VUUFVUKS9iaW5mbXRfYmluZF9pbnRlcnA6IGJpbmZtdF9iaW5kX2ludGVycC5jXFxuK1xcdCQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICRcXHUwMDNjIC1vICRAXFxuK1xcbiAkKE9VVFBVVCkvYmluZm10X2xvYWRlcl9wYXlsb2FkOiBiaW5mbXRfbG9hZGVyX3BheWxvYWQuYyBiaW5mbXRfbWlzY19jb21tb24uaFxcbiBcXHQkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtZlBJRSAtcGllICRcXHUwMDNjIC1vICRAXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9iaW5kX2ludGVycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfYmluZF9pbnRlcnAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDZkNjUwNjI4NTZiN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9iaW5kX2ludGVycC5jXFxuQEAgLTAsMCArMSwxNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBUZXN0IGludGVycHJldGVyIGZvciB0aGUgYm91bmQtaW50ZXJwcmV0ZXIgY2FzZSBvZiB0aGUgYmluZm10X21pc2NfYnBmXFxuKyAqIHNlbGZ0ZXN0LiBUd28gY29waWVzIGFyZSBpbnN0YWxsZWQgYXQgZGlmZmVyZW50IHBhdGhzIGFuZCBib3VuZCB0byBvbmVcXG4rICogZW50cnkgdW5kZXIgZGlmZmVyZW50IG5hbWVzOyBwcmludGluZyBhcmd2WzBdIC0gdGhlIHBhdGggdGhlIGtlcm5lbCByYW5cXG4rICogdGhpcyBjb3B5IHVuZGVyIC0gdGVsbHMgdGhlIGhhcm5lc3Mgd2hpY2ggb2YgdGhlbSB0aGUgbG9hZCBwcm9ncmFtIHBpY2tlZC5cXG4rICovXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdHByaW50ZihcXFwiQklORF9SQU4gJXNcXFxcblxcXCIsIGFyZ2MgXFx1MDAzZSAwID8gYXJndlswXSA6IFxcXCJcXFwiKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcXG5pbmRleCAwNjk3NjhhNjZiYTA3Li4yYzdiNjMwNzVmMWQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jXFxuQEAgLTksNyArOSw3IEBAXFxuICAqXFxuICAqICAgICBlY2hvICc6bmFtZTpCOjo6OlxcdTAwM2NoYW5kbGVyXFx1MDAzZTonIFxcdTAwM2UgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyXFxuICAqXFxuLSAqIFRocmVlIHNlbGYtY29udGFpbmVkIGNhc2VzIGFyZSBleGVyY2lzZWQ6XFxuKyAqIEZpdmUgc2VsZi1jb250YWluZWQgY2FzZXMgYXJlIGV4ZXJjaXNlZDpcXG4gICpcXG4gICogICAxLiBicGZfaW50ZXJwOiB0aGUgbWF0Y2ggcHJvZ3JhbSBtYXRjaGVzIGEgc3ludGhldGljIGFhcmNoNjQgRUxGIGhlYWRlclxcbiAgKiAgICAgIGZyb20gdGhlIHByZWZldGNoZWQgYnBybS1cXHUwMDNlYnVmIGFuZCB0aGUgbG9hZCBwcm9ncmFtIHJvdXRlcyBpdCB0byBhXFxuQEAgLTI2LDYgKzI2LDExIEBAXFxuICAqICAgICAgKGJpbmZtdF9sb2FkZXJfcGF5bG9hZCkgcnVucyBhcyB0aGUgbWFpbiBpbWFnZSB3aXRoIHRoZSBzZWxlY3RlZFxcbiAgKiAgICAgIGludGVycHJldGVyIHN1YnN0aXR1dGVkIGZvciBpdHMgUFRfSU5URVJQIGFuZCBhc3NlcnRzIHRoZSBuYXRpdmVcXG4gICogICAgICBpZGVudGl0eSBmcm9tIGluc2lkZS5cXG4rICogICA1LiBpbnRlcnBfYmluZDogYW4gZW50cnkgcmVnaXN0ZXJlZCBkaXNhYmxlZCB3aXRoICdEJyBpcyBnaXZlbiBpdHNcXG4rICogICAgICBpbnRlcnByZXRlcnMgb25lIHdyaXRlIGF0IGEgdGltZSwgYW5kIHRoZSBsb2FkIHByb2dyYW0gcGlja3Mgb25lIGJ5XFxuKyAqICAgICAgbmFtZSBwZXIgZXhlYy4gUmVwbGFjaW5nIHdoYXQgdGhlIHBhdGggaG9sZHMgYWZ0ZXJ3YXJkcyBjaGFuZ2VzXFxuKyAqICAgICAgbm90aGluZywgd2hpY2ggaXMgdGhlIHBvaW50IG9mIGJpbmRpbmcgYSBmaWxlIHJhdGhlciB0aGFuIHJlc29sdmluZ1xcbisgKiAgICAgIGEgbmFtZSBhdCBleGVjIHRpbWUuIEVuYWJsaW5nIHRoZSBlbnRyeSBzZWFscyBpdC5cXG4gICpcXG4gICogVGhlIGZpcnN0IHR3byByb3V0ZSB0byBhIHRlc3QgaW50ZXJwcmV0ZXIgdGhhdCBwcmludHMgQlBGX0lOVEVSUF9SQU4sXFxuICAqIHByb3ZpbmcgdGhlIHByb2dyYW0ncyBjaG9zZW4gaW50ZXJwcmV0ZXIgYWN0dWFsbHkgcmFuLlxcbkBAIC01NCw2ICs1OSwxMiBAQFxcbiAjZGVmaW5lIFRSQU5TX0VYUEVDVFxcdFxcXCJUUkFOU1BBUkVOVF9PS1xcXCJcXG4gI2RlZmluZSBMT0FERVJfSU5URVJQXFx0XFxcIi90bXAvYmluZm10X2xvYWRlcl9pbnRlcnBcXFwiXFxuICNkZWZpbmUgTE9BREVSX1BBVEhcXHRcXFwiL3RtcC9iaW5mbXRfYnBmX2xvYWRlci5sZHJ0ZXN0XFxcIlxcbisjZGVmaW5lIEJJTkRfRklSU1RcXHRcXFwiL3RtcC9iaW5mbXRfYmluZF9maXJzdFxcXCJcXG4rI2RlZmluZSBCSU5EX1NFQ09ORFxcdFxcXCIvdG1wL2JpbmZtdF9iaW5kX3NlY29uZFxcXCJcXG4rI2RlZmluZSBCSU5EX0FSTV9QQVRIXFx0XFxcIi90bXAvYmluZm10X2JpbmRfYXJtXFxcIlxcbisjZGVmaW5lIEJJTkRfUklTQ1ZfUEFUSFxcdFxcXCIvdG1wL2JpbmZtdF9iaW5kX3Jpc2N2XFxcIlxcbisjZGVmaW5lIEJJTkRfRVhQRUNUXFx0XFxcIkJJTkRfUkFOIFxcXCJcXG4rI2RlZmluZSBCSU5EX01BWFxcdDEwMFxcbiBcXG4gLyogQSBtaW5pbWFsIDY0LWJpdCBsaXR0bGUtZW5kaWFuIEVMRiBoZWFkZXIsIHBhZGRlZCB0byB0aGUgcmVhZCBzaXplLiAqL1xcbiBzdGF0aWMgaW50IGNyZWF0ZV9mYWtlX2VsZihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBzaG9ydCBtYWNoaW5lKVxcbkBAIC04MiwxMSArOTMsMTcgQEAgc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmVnaXN0ZXJfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaGFuZGxlcilcXG4rLypcXG4rICogUmVnaXN0ZXIgYSAnQicgZW50cnkgZm9yIEBoYW5kbGVyLiBXaXRoIEBmbGFncyBcXFwiRFxcXCIgdGhlIGVudHJ5IGlzIGNyZWF0ZWRcXG4rICogZGlzYWJsZWQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzLlxcbisgKi9cXG4rc3RhdGljIGludCByZWdpc3Rlcl9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpoYW5kbGVyLFxcbitcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmZsYWdzKVxcbiB7XFxuIFxcdGNoYXIgcnVsZVtQQVRIX01BWF07XFxuIFxcbi1cXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFxcXCI6JXM6Qjo6OjolczpcXFwiLCBuYW1lLCBoYW5kbGVyKTtcXG4rXFx0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcXFwiOiVzOkI6Ojo6JXM6JXNcXFwiLCBuYW1lLCBoYW5kbGVyLFxcbitcXHRcXHQgZmxhZ3MgPyBmbGFncyA6IFxcXCJcXFwiKTtcXG4gXFx0cmV0dXJuIHdyaXRlX3JlZyhydWxlKTtcXG4gfVxcbiBcXG5AQCAtMTA2LDYgKzEyMywzMCBAQCBzdGF0aWMgaW50IGNoZWNrX291dHB1dChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKVxcbiBcXHRyZXR1cm4gc3RybmNtcChidWYsIGV4cGVjdGVkLCBzdHJsZW4oZXhwZWN0ZWQpKSA/IC0xIDogMDtcXG4gfVxcbiBcXG4rLyogRG9lcyB0aGUga2VybmVsIEJURiBrbm93IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpPyAqL1xcbitzdGF0aWMgYm9vbCBoYXZlX2JpbmZtdF9taXNjX29wcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGYgKmJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbitcXHRib29sIGhhdmU7XFxuK1xcbitcXHRoYXZlID0gYnRmIFxcdTAwMjZcXHUwMDI2IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBcXFwiYmluZm10X21pc2Nfb3BzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBCVEZfS0lORF9TVFJVQ1QpIFxcdTAwM2U9IDA7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbitcXHRyZXR1cm4gaGF2ZTtcXG4rfVxcbitcXG4rLyogVGhlIHJlYXNvbiBicGYgaGFuZGxlciBjYXNlcyBjYW5ub3QgcnVuIGhlcmUsIE5VTEwgaWYgdGhleSBjYW4uICovXFxuK3N0YXRpYyBjb25zdCBjaGFyICpicGZfaGFuZGxlcl91bnN1cHBvcnRlZCh2b2lkKVxcbit7XFxuK1xcdGlmIChnZXR1aWQoKSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gXFxcInRlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFxcXCI7XFxuK1xcdGlmICghaGF2ZV9iaW5mbXRfbWlzY19vcHMoKSlcXG4rXFx0XFx0cmV0dXJuIFxcXCJubyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGluIHRoZSBrZXJuZWwgQlRGIChDT05GSUdfQklORk1UX01JU0NfQlBGKVxcXCI7XFxuK1xcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXFxuK1xcdFxcdHJldHVybiBcXFwibm8gYmluZm10X21pc2NcXFwiO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4gLyogQW4gYXR0YWNoZWQgaGFuZGxlciB3aXRoIGl0cyAnQicgZW50cnkgYWN0aXZhdGVkLiAqL1xcbiBzdHJ1Y3QgYnBmX2Nhc2Uge1xcbiBcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbkBAIC0xMTUsMTAgKzE1NiwxMiBAQCBzdHJ1Y3QgYnBmX2Nhc2Uge1xcbiBcXG4gLypcXG4gICogTG9hZCBAb2JqZmlsZSwgYXR0YWNoIGl0cyBzdHJ1Y3Rfb3BzIG1hcCBAaGFuZGxlciAod2hpY2ggcHVibGlzaGVzIHRoZVxcbi0gKiBoYW5kbGVyKSBhbmQgYWN0aXZhdGUgYSAnQicgZW50cnkgbmFtZWQgQGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdC5cXG4rICogaGFuZGxlcikgYW5kIHJlZ2lzdGVyIGEgJ0InIGVudHJ5IG5hbWVkIEBlbnRyeSB0aGF0IHJlZmVyZW5jZXMgaXQsIHdpdGhcXG4rICogQGZsYWdzIGFzIHRoZSBlbnRyeSdzIHJlZ2lzdGVyLXN0cmluZyBmbGFncy5cXG4gICovXFxuLXN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxcbi1cXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5KVxcbitzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0X2ZsYWdzKHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcXG4rXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqaGFuZGxlciwgY29uc3QgY2hhciAqZW50cnksXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuIFxcbkBAIC0xNDgsNyArMTkxLDcgQEAgc3RhdGljIGludCBicGZfY2FzZV9zdGFydChzdHJ1Y3QgYnBmX2Nhc2UgKmMsIGNvbnN0IGNoYXIgKm9iamZpbGUsXFxuIFxcdFxcdGMtXFx1MDAzZWxpbmsgPSBOVUxMO1xcbiBcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdH1cXG4tXFx0aWYgKHJlZ2lzdGVyX2VudHJ5KGVudHJ5LCBoYW5kbGVyKSkge1xcbitcXHRpZiAocmVnaXN0ZXJfZW50cnkoZW50cnksIGhhbmRsZXIsIGZsYWdzKSkge1xcbiBcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInJlZ2lzdGVyICdCJyBlbnRyeSAnJXMnIGZhaWxlZFxcXFxuXFxcIiwgZW50cnkpO1xcbiBcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdH1cXG5AQCAtMTYyLDYgKzIwNSwxMiBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcXG4gXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcXG4rXFx0XFx0XFx0ICBjb25zdCBjaGFyICpoYW5kbGVyLCBjb25zdCBjaGFyICplbnRyeSlcXG4re1xcbitcXHRyZXR1cm4gYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoYywgb2JqZmlsZSwgaGFuZGxlciwgZW50cnksIE5VTEwpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBicGZfY2FzZV9zdG9wKHN0cnVjdCBicGZfY2FzZSAqYylcXG4ge1xcbiBcXHR1bnJlZ2lzdGVyKGMtXFx1MDAzZWVudHJ5KTtcXG5AQCAtMTkwLDIzICsyMzksMTAgQEAgRklYVFVSRShicGZfaGFuZGxlcikge1xcbiBGSVhUVVJFX1NFVFVQKGJwZl9oYW5kbGVyKVxcbiB7XFxuIFxcdGNoYXIgc3JjW1BBVEhfTUFYXTtcXG4tXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbi1cXG4tXFx0aWYgKGdldHVpZCgpICE9IDApXFxuLVxcdFxcdFNLSVAocmV0dXJuLCBcXFwidGVzdCBtdXN0IGJlIHJ1biBhcyByb290XFxcIik7XFxuLVxcbi1cXHQvKiBUaGUga2VybmVsIG11c3Qga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKS4gKi9cXG4tXFx0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XFxuLVxcdGlmICghYnRmIHx8IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBcXFwiYmluZm10X21pc2Nfb3BzXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgQlRGX0tJTkRfU1RSVUNUKSBcXHUwMDNjIDApIHtcXG4tXFx0XFx0YnRmX19mcmVlKGJ0Zik7XFxuLVxcdFxcdFNLSVAocmV0dXJuLFxcbi1cXHRcXHQgICAgIFxcXCJubyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGluIHRoZSBrZXJuZWwgQlRGIChDT05GSUdfQklORk1UX01JU0NfQlBGKVxcXCIpO1xcbi1cXHR9XFxuLVxcdGJ0Zl9fZnJlZShidGYpO1xcbitcXHRjb25zdCBjaGFyICp3aHkgPSBicGZfaGFuZGxlcl91bnN1cHBvcnRlZCgpO1xcbiBcXG4tXFx0aWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSlcXG4tXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBiaW5mbXRfbWlzY1xcXCIpO1xcbitcXHRpZiAod2h5KVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIiVzXFxcIiwgd2h5KTtcXG4gXFxuIFxcdC8qIFNoYXJlZCB0ZXN0IGludGVycHJldGVyLiAqL1xcbiBcXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCBcXFwiYmluZm10X2JwZl9pbnRlcnBcXFwiKSwgMCk7XFxuQEAgLTI1OCw3ICsyOTQsNyBAQCBURVNUX0YoYnBmX2hhbmRsZXIsIHRyYW5zcGFyZW50X2Rpc3BhdGNoKVxcbiBcXHRjaGFyIHNyY1tQQVRIX01BWF0sIGNtZFtQQVRIX01BWCArIDE2XTtcXG4gXFxuIFxcdC8qIFByb2JlIGZvciB0cmFuc3BhcmVudC1tb2RlIHN1cHBvcnQgdmlhIGl0cyBzdGF0aWMgY291bnRlcnBhcnQuICovXFxuLVxcdGlmIChiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ1QnKSlcXG4rXFx0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ1QnKSlcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJrZXJuZWwgd2l0aG91dCB0cmFuc3BhcmVudCBtb2RlXFxcIik7XFxuIFxcbiBcXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCBcXFwiYmluZm10X3RyYW5zcGFyZW50X2ludGVycFxcXCIpLCAwKTtcXG5AQCAtMzA3LDQgKzM0MywyMjYgQEAgVEVTVF9GKGJwZl9oYW5kbGVyLCBsb2FkZXJfc3Vic3RpdHV0aW9uKVxcbiBcXHR1bmxpbmsoTE9BREVSX0lOVEVSUCk7XFxuIH1cXG4gXFxuKy8qIFRoZSBlcnJubyBhbiBleGVjIG9mIEBwYXRoIGZhaWxzIHdpdGgsIDAgaWYgaXQgc3VjY2VlZGVkLiAqL1xcbitzdGF0aWMgaW50IGV4ZWNfZXJybm8oY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRpbnQgc3RhdHVzO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmIChwaWQgPT0gMCkge1xcbitcXHRcXHRleGVjbChwYXRoLCBwYXRoLCAoY2hhciAqKU5VTEwpO1xcbitcXHRcXHRfZXhpdChlcnJubyk7XFxuK1xcdH1cXG4rXFx0aWYgKHBpZCBcXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApICE9IHBpZCB8fCAhV0lGRVhJVEVEKHN0YXR1cykpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XFxuK31cXG4rXFxuKy8qIEluc3RhbGwgYSBjb3B5IG9mIHRoZSBib3VuZC1pbnRlcnByZXRlciB0ZXN0IGJpbmFyeSBhdCBAcGF0aC4gKi9cXG4rc3RhdGljIGludCBpbnN0YWxsX2ludGVycChjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdGNoYXIgc3JjW1BBVEhfTUFYXTtcXG4rXFxuK1xcdGlmIChhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksIFxcXCJiaW5mbXRfYmluZF9pbnRlcnBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXR1cm4gY29weV9maWxlKHNyYywgcGF0aCk7XFxuK31cXG4rXFxuKy8qIEJpbmQgQHBhdGggdG8gQGVudHJ5IHVuZGVyIEBuYW1lLCB0aGUgJysnIGNvbW1hbmQgb2YgYSBkaXNhYmxlZCBlbnRyeS4gKi9cXG4rc3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdGNoYXIgY21kW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFxcXCIrJXMgJXNcXFxcblxcXCIsIG5hbWUsIHBhdGgpO1xcbitcXHRyZXR1cm4gZW50cnlfY29tbWFuZChlbnRyeSwgY21kKTtcXG4rfVxcbitcXG4rRklYVFVSRShib3VuZF9pbnRlcnApIHtcXG4rXFx0Y2hhciBvYmpbUEFUSF9NQVhdO1xcbitcXHRzdHJ1Y3QgYnBmX2Nhc2UgYztcXG4rXFx0Ym9vbCBzdGFydGVkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChib3VuZF9pbnRlcnApXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqd2h5ID0gYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQoKTtcXG4rXFxuK1xcdGlmICh3aHkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiJXNcXFwiLCB3aHkpO1xcbitcXHRpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgnRCcpKSB7XFxuK1xcdFxcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJrZXJuZWwgd2l0aG91dCB0aGUgJ0QnIGZsYWdcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0QVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfRklSU1QpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfU0VDT05EKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzZWxmLVxcdTAwM2VvYmosIHNpemVvZihzZWxmLVxcdTAwM2VvYmopLFxcbitcXHRcXHRcXHRcXHRcXFwiaW50ZXJwX2JpbmQuYnBmLm9cXFwiKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWdpc3RlcmVkIGRpc2FibGVkLCBzbyBpdCBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQgYW5kIGNhbiBzdGlsbCBiZVxcbitcXHQgKiBnaXZlbiBpbnRlcnByZXRlcnMuIEVhY2ggcGF0aCBpcyByZXNvbHZlZCBvbmNlLCBieSBpdHMgd3JpdGUoMik7XFxuK1xcdCAqIGZyb20gaGVyZSBvbiB0aGUgZW50cnkgaG9sZHMgdGhlIGZpbGVzIHRoZW1zZWx2ZXMuXFxuK1xcdCAqL1xcbitcXHRBU1NFUlRfRVEoYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoXFx1MDAyNnNlbGYtXFx1MDAzZWMsIHNlbGYtXFx1MDAzZW9iaiwgXFxcImludGVycF9iaW5kXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcIkRcXFwiKSwgMCk7XFxuK1xcdHNlbGYtXFx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xcbitcXG4rXFx0QVNTRVJUX0VRKGVudHJ5X2JpbmQoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiLCBcXFwiZmlyc3RcXFwiLCBCSU5EX0ZJUlNUKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcInNlY29uZFxcXCIsIEJJTkRfU0VDT05EKSwgMCk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oYm91bmRfaW50ZXJwKVxcbit7XFxuK1xcdGlmIChzZWxmLVxcdTAwM2VzdGFydGVkKVxcbitcXHRcXHRicGZfY2FzZV9zdG9wKFxcdTAwMjZzZWxmLVxcdTAwM2VjKTtcXG4rXFx0dW5saW5rKEJJTkRfRklSU1QpO1xcbitcXHR1bmxpbmsoQklORF9TRUNPTkQpO1xcbitcXHR1bmxpbmsoQUFSQ0g2NF9QQVRIKTtcXG4rXFx0dW5saW5rKEJJTkRfUklTQ1ZfUEFUSCk7XFxuK1xcdHVubGluayhCSU5EX0FSTV9QQVRIKTtcXG4rfVxcbitcXG4rLyogRW5hYmxpbmcgaXMgd2hhdCBtYWtlcyB0aGUgY29uZmlndXJlZCBlbnRyeSBtYXRjaGFibGUuICovXFxuK3N0YXRpYyBpbnQgYWN0aXZhdGUoY29uc3QgY2hhciAqZW50cnkpXFxuK3tcXG4rXFx0cmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIFxcXCIxXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rLyogT25lIGVudHJ5LCBvbmUgaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSwgcGlja2VkIHBlciBleGVjLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBzZWxlY3RzX2J5X25hbWUpXFxuK3tcXG4rXFx0QVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihBQVJDSDY0X1BBVEgsIEVNX0FBUkNINjQpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihCSU5EX1JJU0NWX1BBVEgsIEVNX1JJU0NWKSwgMCk7XFxuK1xcbitcXHQvKiBEaXNhYmxlZCwgc28gaXQgZG9lcyBub3QgbWF0Y2ggYW5kIG5vIGZvcm1hdCBjbGFpbXMgdGhlIGJpbmFyeS4gKi9cXG4rXFx0RVhQRUNUX0VRKGV4ZWNfZXJybm8oQUFSQ0g2NF9QQVRIKSwgRU5PRVhFQyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoYWN0aXZhdGUoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiKSwgMCk7XFxuK1xcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XFxuK1xcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQklORF9SSVNDVl9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX1NFQ09ORCksIDApO1xcbit9XFxuK1xcbisvKiBXaGF0IHdhcyBib3VuZCBpcyB3aGF0IHJ1bnMsIHdoYXRldmVyIHRoZSBwYXRoIGhvbGRzIGFmdGVyd2FyZHMuICovXFxuK1RFU1RfRihib3VuZF9pbnRlcnAsIHBhdGhfbm9fbG9uZ2VyX2RlY2lkZXMpXFxuK3tcXG4rXFx0Y2hhciBvdGhlcltQQVRIX01BWF07XFxuK1xcbitcXHRBU1NFUlRfRVEoY3JlYXRlX2Zha2VfZWxmKEFBUkNINjRfUEFUSCwgRU1fQUFSQ0g2NCksIDApO1xcbitcXHRBU1NFUlRfRVEoYWN0aXZhdGUoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiKSwgMCk7XFxuK1xcbitcXHQvKiBCb3VuZCBpbnRlcnByZXRlcnMgYXJlIHBpbm5lZCBhZ2FpbnN0IHdyaXRlcywgZXhhY3RseSBsaWtlICdGJy4gKi9cXG4rXFx0RVhQRUNUX1RSVUUod3JpdGVfZGVuaWVkKEJJTkRfRklSU1QpKTtcXG4rXFxuK1xcdC8qIFJlcGxhY2UgdGhlIHBhdGggd2l0aCBhIGRpZmZlcmVudCBiaW5hcnk6IGEgbmV3IGZpbGUsIG5ldyBpbm9kZS4gKi9cXG4rXFx0QVNTRVJUX0VRKGFydGlmYWN0X3BhdGgob3RoZXIsIHNpemVvZihvdGhlciksIFxcXCJiaW5mbXRfYnBmX2ludGVycFxcXCIpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHVubGluayhCSU5EX0ZJUlNUKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShjb3B5X2ZpbGUob3RoZXIsIEJJTkRfRklSU1QpLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XFxuK31cXG4rXFxuKy8qIFRoZSBlbnRyeSByZXBvcnRzIHdoYXQgaXQgYm91bmQsIHVuZGVyIHRoZSBuYW1lcyBpdCBib3VuZCB0aGVtIGFzLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBlbnRyeV9yZXBvcnRzX2JpbmRpbmdzKVxcbit7XFxuK1xcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcImJwZi1pbnRlcnByZXRlciBmaXJzdCBcXFwiIEJJTkRfRklSU1QpKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiYnBmLWludGVycHJldGVyIHNlY29uZCBcXFwiIEJJTkRfU0VDT05EKSk7XFxuK31cXG4rXFxuKy8qIFNlbGVjdGluZyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBmYWlscyB0aGUgZXhlYy4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgdW5ib3VuZF9uYW1lX2ZhaWxzKVxcbit7XFxuK1xcdEFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQklORF9BUk1fUEFUSCwgRU1fQVJNKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShhY3RpdmF0ZShcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIpLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShleGVjX2Vycm5vKEJJTkRfQVJNX1BBVEgpLCBFTk9FTlQpO1xcbit9XFxuK1xcbisvKiBBY3RpdmF0aW5nIHNlYWxzIGl0OiB3aGF0IGNhbiBiZSBtYXRjaGVkIGNhbm5vdCBiZSBjaGFuZ2VkLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBzZWFsZWRfb25jZV9hY3RpdmUpXFxuK3tcXG4rXFx0QVNTRVJUX0VRKGFjdGl2YXRlKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiksIDApO1xcbitcXG4rXFx0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiLCBcXFwidGhpcmRcXFwiLCBCSU5EX1NFQ09ORCksIC1FQlVTWSk7XFxuK1xcdEVYUEVDVF9GQUxTRShlbnRyeV9zaG93cyhcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIsXFxuK1xcdFxcdFxcdFxcdCBcXFwiYnBmLWludGVycHJldGVyIHRoaXJkIFxcXCIgQklORF9TRUNPTkQpKTtcXG4rfVxcbitcXG4rLyogVGhlIHNlYWwgaXMgZm9yIGdvb2Q6IGRpc2FibGluZyB0aGUgZW50cnkgYWdhaW4gcmVvcGVucyBub3RoaW5nLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBkaXNhYmxlX2RvZXNfbm90X3Vuc2VhbClcXG4re1xcbitcXHRBU1NFUlRfRVEoYWN0aXZhdGUoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShlbnRyeV9jb21tYW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcIjBcXFxcblxcXCIpLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcInRoaXJkXFxcIiwgQklORF9TRUNPTkQpLCAtRUJVU1kpO1xcbit9XFxuK1xcbisvKiBBbiBlbnRyeSByZWdpc3RlcmVkIHdpdGhvdXQgJ0QnIGlzIHNlYWxlZCBmcm9tIHRoZSBzdGFydC4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgYm9ybl9zZWFsZWQpXFxuK3tcXG4rXFx0LyogQSBzZWNvbmQgZW50cnkgZm9yIHRoZSBoYW5kbGVyIHRoZSBmaXh0dXJlIGFscmVhZHkgcHVibGlzaGVkLiAqL1xcbitcXHRBU1NFUlRfRVEocmVnaXN0ZXJfZW50cnkoXFxcInRlc3RfYm9ybl9zZWFsZWRcXFwiLCBcXFwiaW50ZXJwX2JpbmRcXFwiLCBOVUxMKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcXFwidGVzdF9ib3JuX3NlYWxlZFxcXCIsIFxcXCJmaXJzdFxcXCIsIEJJTkRfRklSU1QpLCAtRUJVU1kpO1xcbitcXHR1bnJlZ2lzdGVyKFxcXCJ0ZXN0X2Jvcm5fc2VhbGVkXFxcIik7XFxuK31cXG4rXFxuKy8qIEEgbmFtZSBpcyBib3VuZCBvbmNlOyBhIHNlY29uZCB1c2Ugb2YgaXQgaXMgcmVmdXNlZC4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgZHVwbGljYXRlX25hbWVfcmVmdXNlZClcXG4re1xcbitcXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIsIFxcXCJmaXJzdFxcXCIsIEJJTkRfU0VDT05EKSwgLUVFWElTVCk7XFxuK31cXG4rXFxuKy8qIEEgbmFtZSBpcyBhIHByaW50YWJsZSB3b3JkOiB0aGUgZW50cnkgZmlsZSByZXBvcnRzICduYW1lIHBhdGgnIGxpbmVzLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBuYW1lX211c3RfYmVfcHJpbnRhYmxlKVxcbit7XFxuK1xcdC8qIEEgY29udHJvbCBjaGFyYWN0ZXIgd291bGQgZm9yZ2UgYSBsaW5lIGludG8gdGhlIGVudHJ5IGZpbGUuICovXFxuK1xcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcImFcXFxcdGJcXFwiLCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7XFxuK1xcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcImFcXFxcbmJcXFwiLCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7XFxuK1xcbitcXHQvKiBBIHNwYWNlIGNhbm5vdCBldmVuIGJlIHNwZWxsZWQ6IHRoZSBwYXRoIHN0YXJ0cyBhZnRlciB0aGUgZmlyc3Qgb25lLiAqL1xcbitcXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIsIFxcXCJhIGJcXFwiLCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7XFxuK31cXG4rXFxuKy8qIFRoZSBjb21tYW5kIGVuZHMgYXQgdGhlIHdyaXRlOiBieXRlcyBwYXN0IGFuIGVtYmVkZGVkIG51bCBhcmUgcmVmdXNlZC4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgdHJhaWxpbmdfYnl0ZXNfcmVmdXNlZClcXG4re1xcbitcXHRjaGFyIGNtZFtQQVRIX01BWF07XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdC8qIGVudHJ5X2NvbW1hbmQoKSBjYW5ub3Qgc3BlbGwgYSBudWwsIHNvIHdyaXRlIHRoZSBidWZmZXIgcmF3LiAqL1xcbitcXHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcXFwiK251bCAlc1xcXCIsIEJJTkRfRklSU1QpO1xcbitcXHRsZW4gPSBzdHJsZW4oY21kKSArIDE7XFxuK1xcdG1lbWNweShjbWQgKyBsZW4sIFxcXCJqdW5rXFxcIiwgc2l6ZW9mKFxcXCJqdW5rXFxcIikpO1xcbitcXHRsZW4gKz0gc2l6ZW9mKFxcXCJqdW5rXFxcIik7XFxuK1xcbitcXHRmZCA9IG9wZW4oQklORk1UX0RJUiBcXFwiL3Rlc3RfaW50ZXJwX2JpbmRcXFwiLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEVYUEVDVF9FUSh3cml0ZShmZCwgY21kLCBsZW4pLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0RVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIixcXG4rXFx0XFx0XFx0XFx0IFxcXCJicGYtaW50ZXJwcmV0ZXIgbnVsIFxcXCIgQklORF9GSVJTVCkpO1xcbit9XFxuK1xcbisvKiBBbiBlbnRyeSBiaW5kcyBhdCBtb3N0IEJJTkRfTUFYIGludGVycHJldGVycy4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKVxcbit7XFxuK1xcdGNoYXIgbmFtZVsxNl07XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogVGhlIGZpeHR1cmUgYm91bmQgXFxcImZpcnN0XFxcIiBhbmQgXFxcInNlY29uZFxcXCIgYWxyZWFkeS4gKi9cXG4rXFx0Zm9yIChpID0gMjsgaSBcXHUwMDNjIEJJTkRfTUFYOyBpKyspIHtcXG4rXFx0XFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwibiVkXFxcIiwgaSk7XFxuK1xcdFxcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgbmFtZSwgQklORF9GSVJTVCksIDApO1xcbitcXHR9XFxuK1xcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcIm92ZXJcXFwiLCBCSU5EX0ZJUlNUKSwgLUVOT1NQQyk7XFxuK31cXG4rXFxuIFRFU1RfSEFSTkVTU19NQUlOXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXFxuaW5kZXggYzY5MDBkZWQwMTlmYy4uNzQ1YWZmODRkYzc4NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaFxcbkBAIC05Myw2ICs5Myw0NSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lKVxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qIFdyaXRlIEBsaW5lIHRvIEBlbnRyeSdzIGZpbGUsIHJlcG9ydGluZyB0aGUgZXJybm8gaXQgd2FzIHJlZnVzZWQgd2l0aC4gKi9cXG4rc3RhdGljIGlubGluZSBpbnQgZW50cnlfY29tbWFuZChjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbGluZSlcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgZmQsIHJldHZhbCA9IDA7XFxuK1xcdHNpemVfdCBsZW4gPSBzdHJsZW4obGluZSk7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEJJTkZNVF9ESVIgXFxcIi8lc1xcXCIsIGVudHJ5KTtcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFx0aWYgKHdyaXRlKGZkLCBsaW5lLCBsZW4pICE9IChzc2l6ZV90KWxlbilcXG4rXFx0XFx0cmV0dmFsID0gLWVycm5vO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiByZXR2YWw7XFxuK31cXG4rXFxuKy8qIERvZXMgQGVudHJ5J3MgZmlsZSByZXBvcnQgQGxpbmU/ICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBlbnRyeV9zaG93cyhjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbGluZSlcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbUEFUSF9NQVhdO1xcbitcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdEZJTEUgKmZwO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBCSU5GTVRfRElSIFxcXCIvJXNcXFwiLCBlbnRyeSk7XFxuK1xcdGZwID0gZm9wZW4ocGF0aCwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmcClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7XFxuK1xcdFxcdGJ1ZltzdHJjc3BuKGJ1ZiwgXFxcIlxcXFxuXFxcIildID0gJ1xcXFwwJztcXG4rXFx0XFx0aWYgKCFzdHJjbXAoYnVmLCBsaW5lKSkge1xcbitcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0ZmNsb3NlKGZwKTtcXG4rXFx0cmV0dXJuIGZvdW5kO1xcbit9XFxuK1xcbiAvKiBNb3VudCBiaW5mbXRfbWlzYyB1bmxlc3MgaXQgYWxyZWFkeSBpcywgYW5kIHJlcG9ydCB3aGV0aGVyIGl0IGlzIHVzYWJsZS4gKi9cXG4gc3RhdGljIGlubGluZSBib29sIGJpbmZtdF9taXNjX2F2YWlsYWJsZSh2b2lkKVxcbiB7XFxuQEAgLTExNywxNiArMTU2LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFydGlmYWN0X3BhdGgoY2hhciAqb3V0LCBzaXplX3Qgc3osIGNvbnN0IGNoYXIgKm5hbWUpXFxuIH1cXG4gXFxuIC8qIFByb2JlIGtlcm5lbCBzdXBwb3J0IGZvciBhIHJlZ2lzdHJhdGlvbiBmbGFnIHdpdGggYSB0aHJvd2F3YXkgZW50cnkuICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoY2hhciBmbGFnKVxcbiB7XFxuIFxcdGNoYXIgcnVsZVs2NF07XFxuIFxcbiBcXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFxcXCI6Ym1fZmxhZ19wcm9iZTpFOjpibXByb2JlOjovYmluL3RydWU6JWNcXFwiLFxcbiBcXHRcXHQgZmxhZyk7XFxuIFxcdGlmICh3cml0ZV9yZWcocnVsZSkpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR1bnJlZ2lzdGVyKFxcXCJibV9mbGFnX3Byb2JlXFxcIik7XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi40N2M5ZThhNGVlNDJhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGlzYWJsZWQuY1xcbkBAIC0wLDAgKzEsMTcyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFRlc3QgdGhlICdEJyAocmVnaXN0ZXIgZGlzYWJsZWQpIGZsYWcgb2YgYmluZm10X21pc2MuIEFuIGVudHJ5XFxuKyAqIHJlZ2lzdGVyZWQgd2l0aCBpdCBleGlzdHMgYnV0IGNhbm5vdCBiZSBtYXRjaGVkIHVudGlsIHVzZXJzcGFjZSBlbmFibGVzXFxuKyAqIGl0LCB3aGljaCBzcGxpdHMgYSByZWdpc3RyYXRpb24gaW50byBjcmVhdGUgYW5kIGFjdGl2YXRlLlxcbisgKlxcbisgKiBOZWVkcyByb290IGZvciB0aGUgcmVnaXN0cmF0aW9uOyBubyBicGYgdG9vbGNoYWluIGludm9sdmVkLlxcbisgKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJpbmZtdF9taXNjX2NvbW1vbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuKyNkZWZpbmUgTUFHSUNcXHRcXHRcXFwiI0RJU0FCTEVELVNFTEZURVNUI1xcXCJcXG4rI2RlZmluZSBUQVJHRVRfUEFUSFxcdFxcXCIvdG1wL2JpbmZtdF9kaXNhYmxlZF90YXJnZXRcXFwiXFxuKyNkZWZpbmUgSU5URVJQX1BBVEhcXHRcXFwiL3RtcC9iaW5mbXRfZGlzYWJsZWRfaW50ZXJwLnNoXFxcIlxcbisjZGVmaW5lIEVOVFJZXFx0XFx0XFxcInRlc3RfZGlzYWJsZWRcXFwiXFxuKyNkZWZpbmUgUlVMRShmbGFncylcXHRcXFwiOlxcXCIgRU5UUlkgXFxcIjpNOjA6XFxcIiBNQUdJQyBcXFwiOjpcXFwiIElOVEVSUF9QQVRIIFxcXCI6XFxcIiBmbGFnc1xcbitcXG4rLyogVGhlIGludGVycHJldGVyIGV4aXRzIHdpdGggYSBjb2RlIHRoZSBoYXJuZXNzIGNhbiByZWNvZ25pc2UuICovXFxuKyNkZWZpbmUgRVhJVF9JTlRFUlBcXHQ3XFxuK1xcbisvKiBUaGUgdGFyZ2V0IG9ubHkgaGFzIHRvIGNhcnJ5IHRoZSBtYWdpYzsgaXQgaXMgbmV2ZXIgYWN0dWFsbHkgbG9hZGVkLiAqL1xcbitzdGF0aWMgaW50IGNyZWF0ZV90YXJnZXQodm9pZClcXG4re1xcbitcXHRjaGFyIGJ1ZlsxMjhdID0gTUFHSUMgXFxcIlxcXFxuXFxcIjtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0dW5saW5rKFRBUkdFVF9QQVRIKTtcXG4rXFx0ZmQgPSBvcGVuKFRBUkdFVF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmICh3cml0ZShmZCwgYnVmLCBzaXplb2YoYnVmKSkgIT0gKHNzaXplX3Qpc2l6ZW9mKGJ1ZikpIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfaW50ZXJwKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbNjRdO1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHR1bmxpbmsoSU5URVJQX1BBVEgpO1xcbitcXHRmZCA9IG9wZW4oSU5URVJQX1BBVEgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDc1NSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiMhL2Jpbi9zaFxcXFxuZXhpdCAlZFxcXFxuXFxcIiwgRVhJVF9JTlRFUlApO1xcbitcXHRpZiAod3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpICE9IChzc2l6ZV90KXN0cmxlbihidWYpKSB7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiBjbG9zZShmZCk7XFxuK31cXG4rXFxuK0ZJWFRVUkUoZGlzYWJsZWQpIHtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoZGlzYWJsZWQpXFxuK3tcXG4rXFx0aWYgKGdldHVpZCgpICE9IDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwidGVzdCBtdXN0IGJlIHJ1biBhcyByb290XFxcIik7XFxuK1xcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibm8gYmluZm10X21pc2NcXFwiKTtcXG4rXFxuK1xcdC8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAnRCcuICovXFxuK1xcdGlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCdEJykpIHtcXG4rXFx0XFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCB3aXRob3V0IHRoZSAnRCcgZmxhZ1xcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEoY3JlYXRlX2ludGVycCgpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGNyZWF0ZV90YXJnZXQoKSwgMCk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oZGlzYWJsZWQpXFxuK3tcXG4rXFx0dW5yZWdpc3RlcihFTlRSWSk7XFxuK1xcdHVubGluayhUQVJHRVRfUEFUSCk7XFxuK1xcdHVubGluayhJTlRFUlBfUEFUSCk7XFxuK31cXG4rXFxuKy8qIFRoZSBlbnRyeSBleGlzdHMgYnV0IGRvZXMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuICovXFxuK1RFU1RfRihkaXNhYmxlZCwgaW5lcnRfdW50aWxfZW5hYmxlZClcXG4re1xcbitcXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXFxcIkRcXFwiKSksIDApO1xcbitcXHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgXFxcImRpc2FibGVkXFxcIikpO1xcbitcXG4rXFx0LyogTm90aGluZyBtYXRjaGVzIGl0LCBzbyBubyBiaW5hcnkgZm9ybWF0IGNsYWltcyB0aGUgdGFyZ2V0LiAqL1xcbitcXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXFxcIjFcXFxcblxcXCIpLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFxcXCJlbmFibGVkXFxcIikpO1xcbitcXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7XFxuK31cXG4rXFxuKy8qIFdpdGhvdXQgJ0QnIGFuIGVudHJ5IGlzIG1hdGNoYWJsZSB0aGUgbW9tZW50IGl0IGlzIHJlZ2lzdGVyZWQuICovXFxuK1RFU1RfRihkaXNhYmxlZCwgZW5hYmxlZF93aXRob3V0X3RoZV9mbGFnKVxcbit7XFxuK1xcdEFTU0VSVF9FUSh3cml0ZV9yZWcoUlVMRShcXFwiXFxcIikpLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFxcXCJlbmFibGVkXFxcIikpO1xcbitcXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7XFxuK31cXG4rXFxuKy8qICdEJyBpcyBzcGVudCBvbiB0aGUgcmVnaXN0cmF0aW9uOiB0aGUgZW50cnkgZG9lcyBub3QgcmVwb3J0IGl0IGJhY2suICovXFxuK1RFU1RfRihkaXNhYmxlZCwgZmxhZ19ub3RfcmVwb3J0ZWQpXFxuK3tcXG4rXFx0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFxcXCJEXFxcIikpLCAwKTtcXG4rXFx0RVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKEVOVFJZLCBcXFwiZmxhZ3M6IERcXFwiKSk7XFxuK1xcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcXFwiZmxhZ3M6IFxcXCIpKTtcXG4rfVxcbitcXG4rLyogQSBkaXNhYmxlZCBlbnRyeSBjYW4gYmUgZGlzYWJsZWQgYW5kIGVuYWJsZWQgbGlrZSBhbnkgb3RoZXIuICovXFxuK1RFU1RfRihkaXNhYmxlZCwgdG9nZ2xlc19saWtlX2FueV9lbnRyeSlcXG4re1xcbitcXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXFxcIkRcXFwiKSksIDApO1xcbitcXG4rXFx0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFxcXCIxXFxcXG5cXFwiKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcXG4rXFx0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFxcXCIwXFxcXG5cXFwiKSwgMCk7XFxuK1xcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIFJVTl9FTk9FWEVDKTtcXG4rXFx0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFxcXCIxXFxcXG5cXFwiKSwgMCk7XFxuK1xcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcXG4rfVxcbitcXG4rLyogJ0QnIGNvbXBvc2VzIHdpdGggdGhlIGludm9jYXRpb24gZmxhZ3MgYSBzdGF0aWMgZW50cnkgY2FuIGNhcnJ5LiAqL1xcbitURVNUX0YoZGlzYWJsZWQsIGNvbXBvc2VzX3dpdGhfaW52b2NhdGlvbl9mbGFncylcXG4re1xcbitcXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXFxcIlBEXFxcIikpLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFxcXCJkaXNhYmxlZFxcXCIpKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFxcXCJmbGFnczogUFxcXCIpKTtcXG4rfVxcbitcXG4rLyogJy0xJyB0byB0aGUgc3RhdHVzIGZpbGUgc3dlZXBzIGEgc3RhZ2VkIGVudHJ5IHdpdGggZXZlcnl0aGluZyBlbHNlLiAqL1xcbitURVNUX0YoZGlzYWJsZWQsIHJlbW92ZWRfYnlfcmVtb3ZlX2FsbClcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXFxcIkRcXFwiKSksIDApO1xcbitcXHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgXFxcImRpc2FibGVkXFxcIikpO1xcbitcXG4rXFx0ZmQgPSBvcGVuKEJJTkZNVF9ESVIgXFxcIi9zdGF0dXNcXFwiLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUSh3cml0ZShmZCwgXFxcIi0xXFxcIiwgMiksIDIpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRFWFBFQ1RfTkUoYWNjZXNzKEJJTkZNVF9ESVIgXFxcIi9cXFwiIEVOVFJZLCBGX09LKSwgMCk7XFxuK31cXG4rXFxuKy8qIEEgZmlsZSBoYW5kbGUgaGVsZCBhY3Jvc3MgYSByZW1vdmFsIGNhbm5vdCByZXN1cnJlY3QgdGhlIGVudHJ5LiAqL1xcbitURVNUX0YoZGlzYWJsZWQsIG5vX3Jlc3VycmVjdGlvbl9hZnRlcl9yZW1vdmUpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFxcXCJEXFxcIikpLCAwKTtcXG4rXFx0ZmQgPSBvcGVuKEJJTkZNVF9ESVIgXFxcIi9cXFwiIEVOVFJZLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEod3JpdGUoZmQsIFxcXCItMVxcXCIsIDIpLCAyKTtcXG4rXFx0RVhQRUNUX05FKGFjY2VzcyhCSU5GTVRfRElSIFxcXCIvXFxcIiBFTlRSWSwgRl9PSyksIDApO1xcbitcXG4rXFx0LyogQWNjZXB0ZWQgbGlrZSBhbnkgdG9nZ2xlIG9mIGEgcmVtb3ZlZCBlbnRyeSwgYnV0IHB1Ymxpc2hlcyBub3RoaW5nLiAqL1xcbitcXHRFWFBFQ1RfRVEod3JpdGUoZmQsIFxcXCIxXFxcIiwgMSksIDEpO1xcbitcXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jXFxuaW5kZXggZDBjYjg0NWRmMWQzMC4uMmViZjczZGU4MDE4YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmNcXG5AQCAtNTYsNyArNTYsNyBAQCBGSVhUVVJFX1NFVFVQKHRyYW5zcGFyZW50KVxcbiBcXHRBU1NFUlRfRVEoY3JlYXRlX3RhcmdldCgpLCAwKTtcXG4gXFxuIFxcdC8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAnVCcuICovXFxuLVxcdGlmIChiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ1QnKSkge1xcbitcXHRpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgnVCcpKSB7XFxuIFxcdFxcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJrZXJuZWwgd2l0aG91dCB0aGUgJ1QnIGZsYWdcXFwiKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWNlNDVjY2EyMTVmMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jXFxuQEAgLTAsMCArMSw3NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBiaW5mbXRfbWlzY19vcHMgaGFuZGxlciBmb3IgdGhlIHNlbGZ0ZXN0J3MgYm91bmQtaW50ZXJwcmV0ZXIgY2FzZTogb25lXFxuKyAqIGhhbmRsZXIsIG9uZSBlbnRyeSwgYW4gaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSAtIGVhY2ggYm91bmQgdG9cXG4rICogYSBmaWxlIHdoZW4gdGhlIGVudHJ5IHdhcyByZWdpc3RlcmVkIHJhdGhlciB0aGFuIHRvIGEgcGF0aCByZXNvbHZlZCBhdFxcbisgKiBleGVjIHRpbWUuIFRoZSBsb2FkIHByb2dyYW0gbmFtZXMgdGhlIG9uZSBpdCB3YW50czsgYSBuYW1lIHRoZSBlbnRyeSBkaWRcXG4rICogbm90IGJpbmQgZmFpbHMgdGhlIGV4ZWMsIHdoaWNoIHRoZSBoYXJuZXNzIGNoZWNrcyB0b28uXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rI2RlZmluZSBFSV9DTEFTU1xcdDRcXG4rI2RlZmluZSBFTEZDTEFTUzY0XFx0MlxcbisjZGVmaW5lIEVfTUFDSElORV9PRkZcXHQxOFxcbisjZGVmaW5lIEVNX0FSTVxcdFxcdDQwXFxuKyNkZWZpbmUgRU1fQUFSQ0g2NFxcdDE4M1xcbisjZGVmaW5lIEVNX1JJU0NWXFx0MjQzXFxuK1xcbitleHRlcm4gaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfX3N6KSBfX2tzeW07XFxuK1xcbisvKiBUaGUgZ3Vlc3QgYXJjaGl0ZWN0dXJlIG9mIGEgNjQtYml0IEVMRiwgb3IgemVybyBpZiBpdCBpcyBub3Qgb25lLiAqL1xcbitzdGF0aWMgX191MTYgZWxmX21hY2hpbmUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4re1xcbitcXHRpZiAoYnBybS1cXHUwMDNlYnVmWzBdICE9IDB4N2YgfHwgYnBybS1cXHUwMDNlYnVmWzFdICE9ICdFJyB8fFxcbitcXHQgICAgYnBybS1cXHUwMDNlYnVmWzJdICE9ICdMJyB8fCBicHJtLVxcdTAwM2VidWZbM10gIT0gJ0YnIHx8XFxuK1xcdCAgICBicHJtLVxcdTAwM2VidWZbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogTGl0dGxlLWVuZGlhbiAxNi1iaXQgZmllbGQsIHJlYWQgYnl0ZS13aXNlIGZvciB0aGUgdmVyaWZpZXIuICovXFxuK1xcdHJldHVybiAoX191OClicHJtLVxcdTAwM2VidWZbRV9NQUNISU5FX09GRl0gfFxcbitcXHQgICAgICAgKChfX3UxNikoX191OClicHJtLVxcdTAwM2VidWZbRV9NQUNISU5FX09GRiArIDFdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHMucy9tYXRjaFxcXCIpXFxuK2Jvb2wgQlBGX1BST0coaW50ZXJwX2JpbmRfbWF0Y2gsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuK3tcXG4rXFx0X191MTYgbWFjaGluZSA9IGVsZl9tYWNoaW5lKGJwcm0pO1xcbitcXG4rXFx0cmV0dXJuIG1hY2hpbmUgPT0gRU1fQUFSQ0g2NCB8fCBtYWNoaW5lID09IEVNX1JJU0NWIHx8XFxuK1xcdCAgICAgICBtYWNoaW5lID09IEVNX0FSTTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzLnMvbG9hZFxcXCIpXFxuK2ludCBCUEZfUFJPRyhpbnRlcnBfYmluZF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE5hbWVzLCBub3QgcGF0aHM6IGVhY2ggb25lIHNlbGVjdHMgYSBmaWxlIHRoZSBlbnRyeSBwcmUtb3BlbmVkLCBzb1xcbitcXHQgKiBub3RoaW5nIGlzIHJlc29sdmVkIGhlcmUgb3IgbGF0ZXIsIGluIGFueSBuYW1lc3BhY2UuIFRoZSBidWZmZXJzXFxuK1xcdCAqIGFyZSBvbiB0aGUgc3RhY2sgYmVjYXVzZSB0aGUgdmVyaWZpZXIgcmVqZWN0cyAucm9kYXRhIGZvciBhIHNpemVkXFxuK1xcdCAqIG1lbW9yeSBhcmd1bWVudC5cXG4rXFx0ICovXFxuK1xcdGNoYXIgZmlyc3RbXSA9IFxcXCJmaXJzdFxcXCI7XFxuK1xcdGNoYXIgc2Vjb25kW10gPSBcXFwic2Vjb25kXFxcIjtcXG4rXFx0Y2hhciB1bmJvdW5kW10gPSBcXFwidW5ib3VuZFxcXCI7XFxuK1xcbitcXHRzd2l0Y2ggKGVsZl9tYWNoaW5lKGJwcm0pKSB7XFxuK1xcdGNhc2UgRU1fQUFSQ0g2NDpcXG4rXFx0XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBmaXJzdCwgc2l6ZW9mKGZpcnN0KSk7XFxuK1xcdGNhc2UgRU1fUklTQ1Y6XFxuK1xcdFxcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgc2Vjb25kLCBzaXplb2Yoc2Vjb25kKSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBlbnRyeSBib3VuZCBub3RoaW5nIHVuZGVyIHRoaXMgbmFtZTogLUVOT0VOVCBmYWlscyB0aGUgZXhlYy4gKi9cXG4rXFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCB1bmJvdW5kLCBzaXplb2YodW5ib3VuZCkpO1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbitzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGludGVycF9iaW5kID0ge1xcbitcXHQubWF0Y2hcXHQ9ICh2b2lkICopaW50ZXJwX2JpbmRfbWF0Y2gsXFxuK1xcdC5sb2FkXFx0PSAodm9pZCAqKWludGVycF9iaW5kX2xvYWQsXFxuK1xcdC5uYW1lXFx0PSBcXFwiaW50ZXJwX2JpbmRcXFwiLFxcbit9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjowMi45MTIyNDgyMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTA5OTI3MTA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCSU5GTVRfTUlTQ1wiLFxuICAgIFwiQklORk1UX01JU0NfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmluZm10X21pc2NfZmluZF9pbnRlcnBcIixcbiAgICBcImJwZl9iaW5wcm1fc2VsZWN0X2ludGVycFwiLFxuICAgIFwiYnBmX2JpbnBybV9zZXRfaW50ZXJwXCIsXG4gICAgXCJsb2FkX21pc2NfYmluYXJ5XCIsXG4gICAgXCJibV9lbnRyeV93cml0ZVwiLFxuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYmluZm10X21pc2MgYWxsb3dpbmcgQlBGIGhhbmRsZXJzIHRvIGJpbmQgaW50ZXJwcmV0ZXJzIHRvIGFuIGVudHJ5IGFuZCBzZWxlY3QgdGhlbSBieSBuYW1lIGF0IGV4ZWMgdGltZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBmcy9iaW5mbXRfbWlzYy5jIGFuZCBmcy9iaW5mbXRfbWlzY19icGYuYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBiaW5mbXRfbWlzYyBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gb2YgbWF0Y2hpbmcgYmluYXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmOTI1MWE2MGRhMTY2MjI0YmVhOWJhYTNiZDljNDJmNzRiOWQ1Y2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDAyOjU2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuaW5kZXggYzgwNzAyYjRjY2Q1Zi4uM2UyYjJhOTQxNWJjOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuQEAgLTEwNyw2ICsxMDcsMTUgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiAgICAgICAgICAgICBgYFBUX0lOVEVSUGBgLiBTZWUgdGhlIFwiTG9hZGVyIHN1YnN0aXR1dGlvblwiIHNlY3Rpb25cbiAgICAgICAgICAgICBiZWxvdy4gYGBMYGAgcmVqZWN0cyBgYFRgYCwgYGBQYGAsIGBgT2BgIGFuZCBgYENgYDtcbiAgICAgICAgICAgICBgYEZgYCBjb21wb3Nlcy5cbisgICAgICBgYERgYCAtIHJlZ2lzdGVyZWQgZGlzYWJsZWRcbisgICAgICAgICAgICBUaGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBpbnN0ZWFkIG9mIGJlaW5nIG1hdGNoYWJsZSBhdFxuKyAgICAgICAgICAgIG9uY2UsIGFuZCBoYXMgdG8gYmUgZW5hYmxlZCBieSB3cml0aW5nIGBgMWBgIHRvIGl0cyBmaWxlXG4rICAgICAgICAgICAgYmVmb3JlIGl0IGRpc3BhdGNoZXMgYW55dGhpbmcuIFRoaXMgc3BsaXRzIGEgcmVnaXN0cmF0aW9uXG4rICAgICAgICAgICAgaW50byBjcmVhdGluZyB0aGUgZW50cnkgYW5kIGFjdGl2YXRpbmcgaXQsIGxlYXZpbmcgcm9vbSB0b1xuKyAgICAgICAgICAgIGNvbmZpZ3VyZSBpdCBpbiBiZXR3ZWVuIC0gd2hpY2ggaXMgd2hhdCBhIGBgQmBgIGVudHJ5IHRoYXRcbisgICAgICAgICAgICBiaW5kcyBpbnRlcnByZXRlcnMgbmVlZHM7IHNlZSB0aGUgYnBmIHNlY3Rpb24gYmVsb3cuIFRoZSBmbGFnXG4rICAgICAgICAgICAgaXMgc3BlbnQgb24gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgaXMgbm90IHJlYWQgYmFjazogd2hhdCBhblxuKyAgICAgICAgICAgIGVudHJ5IGZpbGUgcmVwb3J0cyBhZnRlcndhcmRzIGlzIHdoZXRoZXIgaXQgaXMgZW5hYmxlZC5cbiBcbiBcbiBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnM6XG5AQCAtMTg2LDkgKzE5NSw2MiBAQCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBiaW5hcnkncyBsb2NhdGlvbi4gSXQgc2VsZWN0cyB0aGVcbiBpbnRlcnByZXRlciBieSBjYWxsaW5nIHRoZSBgYGJwZl9iaW5wcm1fc2V0X2ludGVycCgpYGAga2Z1bmMgd2l0aCBhblxuIGFic29sdXRlIHBhdGggYW5kIHJldHVybmluZyBgYDBgYC4gQSBtYXRjaCBpcyBjb21taXR0ZWQ6IGEgZmFpbGluZ1xuIGBgbG9hZGBgIGZhaWxzIHRoZSBleGVjIHdpdGggaXRzIGVycm9yIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIHRvIGxhdGVyXG4tZW50cmllczsgYGAtRU5PRVhFQ2BgIGxldHMgdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cyBoYXZlIGEgZ28uIFRoZVxuLWludGVycHJldGVyIGlzIG9wZW5lZCB3aXRoIHRoZSBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGUgZXhlYyxcbi1leGFjdGx5IGFzIGEgc3RhdGljYWxseSByZWdpc3RlcmVkIGludGVycHJldGVyIHdvdWxkIGJlLlxuK2VudHJpZXM7IGBgLUVOT0VYRUNgYCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5IGZvcm1hdHMgaGF2ZSBhIGdvLiBBIHBhdGhcbitzZWxlY3RlZCB0aGlzIHdheSBpcyBvcGVuZWQgd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlXG4rZXhlYywgZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3aXRob3V0IGBgRmBgIHdvdWxkXG4rYmUuXG4rXG4rQW4gZW50cnkgY2FuIGluc3RlYWQgYmluZCB0aGUgaW50ZXJwcmV0ZXJzIGl0cyBoYW5kbGVyIG1heSB1c2UsIHNvIHRoYXQgbm9cbitwYXRoIGlzIHJlc29sdmVkIGF0IGV4ZWMgdGltZSBhdCBhbGwuIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aCBgYERgYCBpcyBub3RcbittYXRjaGFibGUgeWV0LCB3aGljaCBpcyB3aGF0IGxlYXZlcyBpdCBvcGVuIHRvIGJlaW5nIGdpdmVuIHRoZW0sIG9uZVxuK2BgK25hbWUgcGF0aGBgIHdyaXRlIGF0IGEgdGltZTo6XG4rXG4rICAgIGVjaG8gJzpxZW11OkI6Ojo6bXlfaGFuZGxlcjpEJyBcdTAwM2UgcmVnaXN0ZXJcbisgICAgZWNobyAnK2FhcmNoNjQgL3Vzci9iaW4vcWVtdS1hYXJjaDY0JyBcdTAwM2UgcWVtdVxuKyAgICBlY2hvICcrYXJtIC91c3IvYmluL3FlbXUtYXJtJyBcdTAwM2UgcWVtdVxuKyAgICBlY2hvIDEgXHUwMDNlIHFlbXVcbitcbitFYWNoIHBhdGggaXMgb3BlbmVkIGR1cmluZyBpdHMgd3JpdGUsIGluIHRoZSB3cml0aW5nIHByb2Nlc3MncyBjb250ZXh0IGFuZFxuK3dpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgXG4rcHJlLW9wZW5zIGEgc3RhdGljIGVudHJ5J3MgaW50ZXJwcmV0ZXI7IHRoZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLiBUaGVcbitwYXRoIGlzIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3Qgc3BhY2UsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaXQgY2Fubm90XG4rZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XG4rYmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzOyBhIHdyaXRlIHBhc3QgdGhhdCBpcyByZWZ1c2VkIHdpdGhcbitgYC1FTk9TUENgYC4gVG8gYmluZCBhIGZpbGUgdGhhdCBoYXMgbm8gcGF0aCBvZiBpdHMgb3duIC0gYWxyZWFkeVxuK3VubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxuK29wZW4gaXQgYW5kIHdyaXRlIGBgL3Byb2Mvc2VsZi9mZC9OYGAuXG4rXG4rVGhlIGBgbG9hZGBgIHByb2dyYW0gdGhlbiBzZWxlY3RzIG9uZSBwZXIgZXhlYyBieSBuYW1lIHdpdGggdGhlXG4rYGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKWBgIGtmdW5jLCBhbmQgZXZlcnkgZXhlYyBydW5zIGEgY2xvbmUgb2YgdGhlXG4rZmlsZSB0aGF0IHdhcyBvcGVuZWQuIFRoZSBwYXRoIGRlY2lkZXMgd2hpY2ggZmlsZSBpcyBib3VuZCBhbmQgbm90aGluZ1xuK2Vsc2U6IGl0IGlzIG5vdCByZXNvbHZlZCBhZ2FpbiwgaW4gYW55IG5hbWVzcGFjZSwgc28gd2hhdCBpdCBob2xkcyBsYXRlciAtXG4rb3Igd2hhdCBpdCBob2xkcyBpbiB0aGUgbmFtZXNwYWNlIG9mIHdob2V2ZXIgcnVucyB0aGUgYmluYXJ5IC0gbm8gbG9uZ2VyXG4rZGVjaWRlcyBhbnl0aGluZy5cbitcbitFbmFibGluZyB0aGUgZW50cnkgZW5kcyB0aGlzLiBJdHMgaW50ZXJwcmV0ZXJzIGFyZSByZWFkIGF0IGV4ZWMgdGltZSB3aXRoXG4rbm90aGluZyBidXQgYSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgZW50cnksIHNvIGFuIGVudHJ5IHRoYXQgaGFzIGV2ZXIgYmVlblxuK21hdGNoYWJsZSBjYW4gbmV2ZXIgaGF2ZSBpdHMgc2V0IGNoYW5nZWQgYWdhaW46IHRoZSBmaXJzdCBgYDFgYCBzZWFscyBpdCxcbitmcm9tIHRoZW4gb24gYGArYGAgaXMgcmVmdXNlZCB3aXRoIGBgLUVCVVNZYGAsIGFuZCBhbiBlbnRyeSByZWdpc3RlcmVkXG4rd2l0aG91dCBgYERgYCBpcyBzZWFsZWQgZnJvbSB0aGUgc3RhcnQuIEJpbmRpbmcgYSBuYW1lIHR3aWNlIGlzIHJlZnVzZWRcbit3aXRoIGBgLUVFWElTVGBgLlxuK1xuK1NlbGVjdGlvbiBpcyBieSBuYW1lIHNvIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBwcm9ncmFtIG5lZWQgbm90XG4rYWdyZWUgb24gYW4gb3JkZXIsIGFuZCBzbyB0aGF0IGEgaGFuZGxlciBpcyBub3QgdGllZCB0byB3aGVyZSBhIGRpc3RyaWJ1dGlvblxuK3B1dHMgaXRzIGludGVycHJldGVycy4gQSBuYW1lIGlzIGEgc2luZ2xlIHdvcmQgb2YgcHJpbnRhYmxlIEFTQ0lJLCBhdCBtb3N0XG4rMzIgY2hhcmFjdGVyczsgYSBuYW1lIHRoZSBlbnRyeSBkaWQgbm90IGJpbmQgZ2l2ZXMgdGhlIHByb2dyYW0gYGAtRU5PRU5UYGAsXG4rd2hpY2ggaXQgY2FuIGFjdCBvbiBvciByZXR1cm4uIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIGl0IHdhc1xuK3JlZ2lzdGVyZWQgdW5kZXIsIGFuZCB0aGUgZW50cnkgcmVwb3J0cyB3aGF0IGl0IGJvdW5kOjpcbitcbisgICAgJCBjYXQgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3FlbXVcbisgICAgZW5hYmxlZFxuKyAgICBicGYgbXlfaGFuZGxlclxuKyAgICBicGYtaW50ZXJwcmV0ZXIgYWFyY2g2NCAvdXNyL2Jpbi9xZW11LWFhcmNoNjRcbisgICAgYnBmLWludGVycHJldGVyIGFybSAvdXNyL2Jpbi9xZW11LWFybVxuKyAgICBmbGFnczpcbitcbitUaGUgcGF0aCByZXBvcnRlZCBpcyB0aGUgb25lIHRoZSBpbnRlcnByZXRlciB3YXMgYm91bmQgdW5kZXIsIHdoaWNoIG5hbWVkXG4rdGhlIGZpbGUgYXQgdGhhdCBtb21lbnQ7IGl0IGlzIG5vdCByZS1yZXNvbHZlZCwgc28gaXQgaXMgYSByZWNvcmQgb2Ygd2hhdFxuK3dhcyBib3VuZCByYXRoZXIgdGhhbiBhIHByb21pc2UgYWJvdXQgd2hhdCB0aGF0IHBhdGggaG9sZHMgbm93LlxuIFxuIFRoZSBgYGxvYWRgYCBwcm9ncmFtIGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyIHdpdGhcbiB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnBfYXJnKClgYCBrZnVuYy4gSXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGVcbkBAIC0yMjQsOCArMjg2LDExIEBAIGhhbmRsZXIgY2FuIGRlY2lkZSB0aGVtIGRpZmZlcmVudGx5IGZvciBlYWNoIGJpbmFyeSBpdCBoYW5kbGVzOlxuICAgYGBQVF9JTlRFUlBgYCBhbmQgcnVucyB0aGUgYmluYXJ5IGFzIGEgZnVsbHkgbmF0aXZlIGV4ZWMgKHRoZSBgYExgYFxuICAgZmxhZykuIEl0IGV4Y2x1ZGVzIHRoZSBvdGhlciBmbGFncyBhbmQgYSBzdGFnZWQgaW50ZXJwcmV0ZXIgYXJndW1lbnQuXG4gXG4tQmVjYXVzZSB0aGVzZSBhcmUgcHJvZ3JhbSBjaG9pY2VzLCBhIGBgQmBgIGVudHJ5IGNhcnJpZXMgbm8gZmxhZ3MgaW4gdGhlXG4tcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCAocHJlLW9wZW4gYSBmaXhlZCBpbnRlcnByZXRlcikgaGFzIG5vIG1lYW5pbmcgZm9yIGl0LlxuK0JlY2F1c2UgdGhlc2UgYXJlIHByb2dyYW0gY2hvaWNlcywgYSBgYEJgYCBlbnRyeSBjYXJyaWVzIG5vIGludm9jYXRpb25cbitmbGFncyBpbiB0aGUgcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCBoYXMgbm9uZSB0byBzcGVsbCBmb3IgaXQgZWl0aGVyLCBzaW5jZVxuK3RoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgYWxyZWFkeSBwcmUtb3BlbiB3aGF0IGBgRmBgIHdvdWxkLiBUaGVcbityZWdpc3RyYXRpb24gZGlyZWN0aXZlIGBgRGBgIGlzIHRoZSBleGNlcHRpb246IGl0IGRlY2lkZXMgaG93IHRoZSBlbnRyeVxuK3N0YXJ0cyBvdXQsIG5vdCBob3cgdGhlIGludGVycHJldGVyIGlzIGludm9rZWQuXG4gXG4gSGFuZGxlcnMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgdGhlIHN0cnVjdF9vcHMgbWFwIHdhc1xuIHJlZ2lzdGVyZWQgaW4sIGZhbGxpbmcgYmFjayB0byBhbmNlc3RvciBuYW1lc3BhY2VzLCBtaXJyb3JpbmcgaG93XG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcbmluZGV4IDcwN2Y4YTE0ZjhhNjMuLmFkOGM0ZjY0YmYxMDIgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXG4rKysgYi9mcy9iaW5mbXRfbWlzYy5jXG5AQCAtMjQsNiArMjQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzdHJ0b3guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbkBAIC0zNyw2ICszOSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rXG4gLyogRW50cnkgc3RhdHVzIGFuZCBtYXRjaCB0eXBlIGJpdCBudW1iZXJzLiAqL1xuIGVudW0gYmluZm10X21pc2NfZW50cnlfYml0cyB7XG4gXHRNSVNDX0ZNVF9FTkFCTEVEX0JJVFx0PSAwLFxuQEAgLTUyLDggKzU2LDE3IEBAIGVudW0gYmluZm10X21pc2NfZW50cnlfZmxhZ3Mge1xuIFx0TUlTQ19GTVRfT1BFTl9GSUxFXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMjgpLFxuIFx0TUlTQ19GTVRfVFJBTlNQQVJFTlRcdD0gKDFVIFx1MDAzY1x1MDAzYyAyNyksXG4gXHRNSVNDX0ZNVF9MT0FERVJcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDI2KSxcbitcdE1JU0NfRk1UX0RJU0FCTEVEXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMjUpLFxuIH07XG4gXG4rLyogVGhlIGZsYWdzIHRoYXQgc2hhcGUgdGhlIGludm9jYXRpb247IGEgJ0InIGhhbmRsZXIgcGlja3MgdGhvc2UgcGVyIGV4ZWMuICovXG4rI2RlZmluZSBNSVNDX0ZNVF9JTlZPQ0FUSU9OX0ZMQUdTIChNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCB8XHRcXFxuK1x0XHRcdFx0ICAgTUlTQ19GTVRfT1BFTl9CSU5BUlkgfFx0XFxcbitcdFx0XHRcdCAgIE1JU0NfRk1UX0NSRURFTlRJQUxTIHxcdFxcXG4rXHRcdFx0XHQgICBNSVNDX0ZNVF9PUEVOX0ZJTEUgfFx0XHRcXFxuK1x0XHRcdFx0ICAgTUlTQ19GTVRfVFJBTlNQQVJFTlQgfFx0XFxcbitcdFx0XHRcdCAgIE1JU0NfRk1UX0xPQURFUilcbitcbiAvKipcbiAgKiBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAtIGEgZmxhZyBjaGFyYWN0ZXIgb2YgdGhlIHJlZ2lzdGVyIHN0cmluZ1xuICAqIEBjOiB0aGUgY2hhcmFjdGVyIHVzZXJzcGFjZSB3cml0ZXMgYW5kIHJlYWRzIGJhY2tcbkBAIC03NSw2ICs4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyBtaXNjX2ZsYWdzW10gPSB7XG4gXHR7ICdGJywgTUlTQ19GTVRfT1BFTl9GSUxFLFx0MCxcdFx0XHRcIm9wZW4gaW50ZXJwcmV0ZXIgZmlsZSBub3dcIlx0fSxcbiBcdHsgJ1QnLCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcdE1JU0NfRk1UX09QRU5fQklOQVJZLFx0XCJ0cmFuc3BhcmVudFwiXHRcdFx0fSxcbiBcdHsgJ0wnLCBNSVNDX0ZNVF9MT0FERVIsXHRcdDAsXHRcdFx0XCJsb2FkZXIgc3Vic3RpdHV0aW9uXCJcdFx0fSxcbitcdHsgJ0QnLCBNSVNDX0ZNVF9ESVNBQkxFRCxcdDAsXHRcdFx0XCJyZWdpc3RlciBkaXNhYmxlZFwiXHRcdH0sXG4gfTtcbiBcbiAvKiBMb29rIHVwIGEgZmxhZyBjaGFyYWN0ZXIsIE5VTEwgaWYgQGMgaXMgbm90IG9uZS4gKi9cbkBAIC05Niw5ICsxMTAsOSBAQCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkge1xuIFx0Y29uc3QgY2hhciAqaW50ZXJwcmV0ZXI7XHQvKiBmaWxlbmFtZSBvZiBpbnRlcnByZXRlciAqL1xuIFx0Y2hhciAqbmFtZTtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbi1cdHN0cnVjdCBmaWxlICppbnRlcnBfZmlsZTtcbiBcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7XHQvKiBicGYtYmFja2VkIGhhbmRsZXIgKCdCJykgKi9cbiBcdGNvbnN0IGNoYXIgKmJwZl9vcHNfbmFtZTtcbitcdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJwcztcdC8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi9cbiBcdHJlZmNvdW50X3QgdXNlcnM7XHRcdC8qIHN5bmMgcmVtb3ZhbCB3aXRoIGxvYWRfbWlzY19iaW5hcnkoKSAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdGNoYXIgYnVmW107XHRcdFx0LyogcmVnaXN0ZXIgc3RyaW5nLCBmaWVsZHMgcG9pbnQgaW4gaGVyZSAqL1xuQEAgLTE3NSw3ICsxODksMTIgQEAgc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdC8qIFdhbGsgYWxsIHRoZSByZWdpc3RlcmVkIGhhbmRsZXJzLiAqL1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcywgbm9kZSxcbiBcdFx0XHRcdCBzcmN1X3JlYWRfbG9ja19oZWxkKFx1MDAyNmJtX2VudHJpZXNfc3JjdSkpIHtcbi1cdFx0LyogTWFrZSBzdXJlIHRoaXMgb25lIGlzIGN1cnJlbnRseSBlbmFibGVkLiAqL1xuK1x0XHQvKlxuK1x0XHQgKiBNYWtlIHN1cmUgdGhpcyBvbmUgaXMgY3VycmVudGx5IGVuYWJsZWQuIEFuIGVudHJ5IGVudGVyc1xuK1x0XHQgKiB0aGUgbGlzdCBhdCBtb3N0IG9uY2UgYW5kIG9ubHkgd2hvbGU6IGl0cyBjb25maWd1cmF0aW9uIGlzXG4rXHRcdCAqIG9yZGVyZWQgYmVmb3JlIHRoZSByY3UgaW5zZXJ0aW9uIHRoYXQgbWFrZXMgaXQgdmlzaWJsZVxuK1x0XHQgKiBoZXJlLlxuK1x0XHQgKi9cbiBcdFx0aWYgKCF0ZXN0X2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtMjE2LDYgKzIzNSwxMDggQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiBcdHJldHVybiBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSk7XG4gfVxuIFxuKy8qKlxuKyAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWVcbisgKiBAaW50ZXJwczogdGhlIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoXG4rICogQG5hbWU6IHRoZSBuYW1lIHRvIGxvb2sgZm9yXG4rICpcbisgKiBSZXR1cm46IHRoZSBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBOVUxMIGlmIEBpbnRlcnBzIGhhcyBub25lIGJ5IHRoYXQgbmFtZVxuKyAqL1xuK2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxuK2JpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlcnAsIGludGVycHMsIGxpc3QpXG4rXHRcdGlmICghc3RyY21wKGludGVycC1cdTAwM2VuYW1lLCBuYW1lKSlcbitcdFx0XHRyZXR1cm4gaW50ZXJwO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qIFVuZG8gdGhlIG9wZW5fZXhlYygpIGEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBmaWxlIGNhbWUgZnJvbS4gKi9cbitzdGF0aWMgdm9pZCBjbG9zZV9pbnRlcnBfZmlsZShzdHJ1Y3QgZmlsZSAqZilcbit7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwoZikpXG4rXHRcdHJldHVybjtcbitcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhmKTtcbitcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4rfVxuK1xuK0RFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpXG4rXG4rLypcbisgKiBPcGVuIGFuIGludGVycHJldGVyIEBwYXRoIGZvciBleGVjdXRpb246IG5vdywgaW4gdGhlIHdyaXRlcidzIGNvbnRleHQsXG4rICogYW5kIC0gc2luY2UgYmluZm10X21pc2MgbW91bnRzIGNhbiBiZSB1bnByaXZpbGVnZWQgLSB3aXRoIEBjcmVkLCB0aGVcbisgKiBjcmVkZW50aWFscyB0aGUgY29udHJvbCBmaWxlIGJlaW5nIHdyaXR0ZW4gd2FzIG9wZW5lZCB3aXRoLCBub3QgdGhlXG4rICogd3JpdGVyJ3Mgb3duLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl9pbnRlcnBfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRzdHJ1Y3QgZmlsZSAqZjtcbitcbitcdHNjb3BlZF93aXRoX2NyZWRzKGNyZWQpXG4rXHRcdGYgPSBvcGVuX2V4ZWMocGF0aCk7XG4rXHRpZiAoSVNfRVJSKGYpKVxuK1x0XHRwcl9ub3RpY2UoXCJyZWdpc3RlcjogZmFpbGVkIHRvIGluc3RhbGwgaW50ZXJwcmV0ZXIgJXNcXG5cIiwgcGF0aCk7XG4rXHRyZXR1cm4gZjtcbit9XG4rXG4rLyogUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXJzIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGguICovXG4rc3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4re1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwLCAqdG1wO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGludGVycCwgdG1wLCBcdTAwMjZlLVx1MDAzZWludGVycHMsIGxpc3QpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2aW50ZXJwLVx1MDAzZWxpc3QpO1xuK1x0XHRjbG9zZV9pbnRlcnBfZmlsZShpbnRlcnAtXHUwMDNlZmlsZSk7XG4rXHRcdGtmcmVlKGludGVycCk7XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlciAtIGJpbmQgYW4gb3BlbmVkIGludGVycHJldGVyIHRvIEBlXG4rICogQGU6IGVudHJ5IGJlaW5nIGNvbmZpZ3VyZWRcbisgKiBAbmFtZTogbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHdpbGwgc2VsZWN0IGl0IGJ5OyBlbXB0eSBmb3IgdGhlIGZpeGVkXG4rICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljIGVudHJ5XG4rICogQHBhdGg6IHRoZSBwYXRoIEBmIHdhcyBvcGVuZWQgZnJvbVxuKyAqIEBmOiB0aGUgaW50ZXJwcmV0ZXIsIG9wZW5lZCBmb3IgZXhlY3V0aW9uXG4rICpcbisgKiBFdmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiBAZiwgc28gdGhlIHBhdGggZGVjaWRlZCB3aGljaCBmaWxlIGlzIGJvdW5kXG4rICogYW5kIG5vdGhpbmcgZWxzZTogaXQgaXMgbm90IHJlc29sdmVkIGFnYWluLCBpbiBhbnkgbmFtZXNwYWNlLlxuKyAqXG4rICogVGhlIGNhbGxlciBoYXMgdG8gaGF2ZSB2YWxpZGF0ZWQgQG5hbWUgYW5kIEBwYXRoLCBlc3RhYmxpc2hlZCB0aGF0IEBlXG4rICogY2Fubm90IGJlIG1hdGNoZWQgeWV0LCBhbmQgb3ducyBAZiB1bnRpbCB0aGlzIHN1Y2NlZWRzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuKyAqL1xuK3N0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBmaWxlICpmKVxuK3tcbitcdHNpemVfdCBubGVuID0gc3RybGVuKG5hbWUpLCBwbGVuID0gc3RybGVuKHBhdGgpO1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xuK1xuK1x0aWYgKGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKFx1MDAyNmUtXHUwMDNlaW50ZXJwcywgbmFtZSkpXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0aWYgKGxpc3RfY291bnRfbm9kZXMoXHUwMDI2ZS1cdTAwM2VpbnRlcnBzKSBcdTAwM2U9IEJJTkZNVF9NSVNDX0lOVEVSUF9NQVgpXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1xuK1x0LyogT25lIGFsbG9jYXRpb24sIGJvdGggc3RyaW5ncyBpbiBpdCwgbGlrZSB0aGUgZW50cnkncyBvd24gYnVmZmVyLiAqL1xuK1x0aW50ZXJwID0ga21hbGxvYyhzdHJ1Y3Rfc2l6ZShpbnRlcnAsIG5hbWUsIG5sZW4gKyBwbGVuICsgMiksXG4rXHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRpZiAoIWludGVycClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpbnRlcnAtXHUwMDNlcGF0aCA9IGludGVycC1cdTAwM2VuYW1lICsgbmxlbiArIDE7XG4rXHRzdHJzY3B5KGludGVycC1cdTAwM2VuYW1lLCBuYW1lLCBubGVuICsgMSk7XG4rXHRzdHJzY3B5KGludGVycC1cdTAwM2VuYW1lICsgbmxlbiArIDEsIHBhdGgsIHBsZW4gKyAxKTtcbitcdGludGVycC1cdTAwM2VmaWxlID0gZjtcbitcdC8qIFB1Ymxpc2ggdGhlIG5vZGU6IGEgbG9ja2xlc3MgY2F0IG1heSBiZSB3YWxraW5nIHRoZSBsaXN0LiAqL1xuK1x0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2aW50ZXJwLVx1MDAzZWxpc3QsIFx1MDAyNmUtXHUwMDNlaW50ZXJwcyk7XG4rXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiBpbnRlcnByZXRlcjogJXMgeyVzfVxcblwiLCBuYW1lLCBwYXRoKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiB7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnksIHJjdSk7XG5AQCAtMjMyLDIxICszNTMsMzYgQEAgc3RhdGljIHZvaWQgYm1fZW50cnlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gICpcbiAgKiBGcmVlIGVudHJ5IHN5bmNpbmcgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgYW5kIGRlZmVyIGZpbmFsIGZyZWUgdG9cbiAgKiBsb2FkX21pc2NfYmluYXJ5KCkgaW4gY2FzZSBpdCBpcyB1c2luZyB0aGUgYmluYXJ5IHR5cGUgaGFuZGxlciB3ZSB3ZXJlXG4tICogcmVxdWVzdGVkIHRvIHJlbW92ZS5cbisgKiByZXF1ZXN0ZWQgdG8gcmVtb3ZlLiBBbHNvIHRoZSB0ZWFyZG93biBmb3IgYSByZWdpc3RyYXRpb24gdGhhdCBmYWlsc1xuKyAqIGJlZm9yZSBhZGRfZW50cnkoKSBwdWJsaXNoZXMgdGhlIGVudHJ5LlxuICAqL1xuIHN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4ge1xuK1x0aWYgKElTX0VSUl9PUl9OVUxMKGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmUtXHUwMDNldXNlcnMpKSB7XG4tXHRcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbi1cdFx0XHRleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZS1cdTAwM2VpbnRlcnBfZmlsZSk7XG4tXHRcdFx0ZmlscF9jbG9zZShlLVx1MDAzZWludGVycF9maWxlLCBOVUxMKTtcbi1cdFx0fVxuK1x0XHRlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpO1xuIFx0XHQvKiBXYWxrZXJzIG1heSBzdGlsbCBkZXJlZmVyZW5jZSB0aGlzIGVudHJ5LCBldmVuIHNsZWVwaW5nLiAqL1xuIFx0XHRjYWxsX3NyY3UoXHUwMDI2Ym1fZW50cmllc19zcmN1LCBcdTAwMjZlLVx1MDAzZXJjdSwgYm1fZW50cnlfZnJlZV9yY3UpO1xuIFx0fVxuIH1cbiBcbi1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBpZiAoX1QpIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXG4rREVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgcHV0X2JpbmZtdF9oYW5kbGVyKF9UKSlcbitcbisvKiBEcm9wIGV2ZXJ5dGhpbmcgYSBsb2FkIHByb2dyYW0gc3RhZ2VkIGZvciB0aGlzIGV4ZWMuICovXG4rc3RhdGljIHZvaWQgZHJvcF9zdGFnZWRfc2VsZWN0aW9uKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XG4rXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnBfYXJnKTtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcgPSBOVUxMO1xuK1x0aWYgKGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKSB7XG4rXHRcdGZwdXQoYnBybS1cdTAwM2VicGZfaW50ZXJwX2ZpbGUpO1xuK1x0XHRicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSA9IE5VTEw7XG4rXHR9XG4rXHRicHJtLVx1MDAzZWJwZl9mbGFncyA9IDA7XG4rfVxuIFxuIC8qKlxuICAqIGN1cnJlbnRfYmluZm10X21pc2MgLSBnZXQgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIG9mIHRoZSBjYWxsZXIncyB1c2VyIG5hbWVzcGFjZVxuQEAgLTI4MSw3ICs0MTcsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICpjdXJyZW50X2JpbmZtdF9taXNjKHZvaWQpXG4gICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4gICpcbiAgKiBBIHN0YXRpYyBlbnRyeSBjYXJyaWVzIGl0cyBpbnRlcnByZXRlciBwYXRoLCBmb3IgYSAnQicgZW50cnkgdGhlXG4tICogaGFuZGxlcidzIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0LiBUaGUgbWF0Y2ggaXMgY29tbWl0dGVkLCBzbyBhIGZhaWxpbmdcbisgKiBoYW5kbGVyJ3MgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQsIGVpdGhlciBieSBwYXRoIG9yIGJ5IHRoZSBuYW1lIG9mIG9uZVxuKyAqIG9mIHRoZSBpbnRlcnByZXRlcnMgdGhlIGVudHJ5IGJvdW5kLiBUaGUgbWF0Y2ggaXMgY29tbWl0dGVkLCBzbyBhIGZhaWxpbmdcbiAgKiBwcm9ncmFtIGZhaWxzIHRoZSBleGVjLlxuICAqXG4gICogUmV0dXJuOiB0aGUgaW50ZXJwcmV0ZXIgb24gc3VjY2VzcywgYW4gRVJSX1BUUiBvbiBmYWlsdXJlXG5AQCAtMjkxLDE1ICs0MjgsMjAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4ge1xuIFx0aW50IHJldHZhbDtcbiBcbitcdC8qXG4rXHQgKiBEcm9wIHdoYXQgYSBwcmV2aW91cyBjaGFpbiBsZXZlbCBzdGFnZWQgYmVmb3JlIGFueXRoaW5nIGNhbiBwaWNrIGl0XG4rXHQgKiB1cC4gQSBzdGF0aWMgZW50cnkgc3RhZ2VzIG5vdGhpbmcgYnV0IGNvbnN1bWVzIGEgc3RhZ2VkIGZpbGUganVzdFxuK1x0ICogbGlrZSBhICdCJyBlbnRyeSBkb2VzLlxuK1x0ICovXG4rXHRkcm9wX3N0YWdlZF9zZWxlY3Rpb24oYnBybSk7XG4rXG4gXHRpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZS1cdTAwM2VpbnRlcnByZXRlcjtcbiBcbi1cdC8qIERyb3AgYW55IGludGVycHJldGVyIG9yIGZsYWdzIGEgcHJldmlvdXMgY2hhaW4gbGV2ZWwgc3RhZ2VkLiAqL1xuLVx0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbi1cdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XG4tXHRicHJtLVx1MDAzZWJwZl9mbGFncyA9IDA7XG4tXG4rXHQvKiBUaGUgaW50ZXJwcmV0ZXJzIHRoaXMgZW50cnkgbGV0cyB0aGUgcHJvZ3JhbSBjaG9vc2UgZnJvbS4gKi9cbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycHMgPSBcdTAwMjZlLVx1MDAzZWludGVycHM7XG4gXHRyZXR2YWwgPSBlLVx1MDAzZWJwZl9vcHMtXHUwMDNlbG9hZChicHJtKTtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycHMgPSBOVUxMO1xuIFx0aWYgKHJldHZhbCkge1xuIFx0XHQvKiBLZWVwIGEgcHJvZ3JhbS1zdXBwbGllZCBlcnJvciB3aXRoaW4gZXJybm8gcmFuZ2UuICovXG4gXHRcdGlmIChyZXR2YWwgXHUwMDNlIDAgfHwgcmV0dmFsIFx1MDAzYyAtTUFYX0VSUk5PKVxuQEAgLTMxNyw5ICs0NTksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfc2VsZWN0X2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiBcbiBkcm9wX3N0YWdlZDpcbiBcdC8qIEEgZmFpbGluZyBsb2FkIGxlYXZlcyBub3RoaW5nIGJlaGluZCBmb3IgbGF0ZXIgZW50cmllcy4gKi9cbi1cdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcpO1xuLVx0YnBybS1cdTAwM2VicGZfaW50ZXJwX2FyZyA9IE5VTEw7XG4tXHRicHJtLVx1MDAzZWJwZl9mbGFncyA9IDA7XG4rXHRkcm9wX3N0YWdlZF9zZWxlY3Rpb24oYnBybSk7XG4gXHRyZXR1cm4gRVJSX1BUUihyZXR2YWwpO1xuIH1cbiBcbkBAIC0zNjQsMjMgKzUwNCwzNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiAvKipcbiAgKiBlbnRyeV9vcGVuX2ludGVycHJldGVyIC0gb3BlbiB0aGUgZW50cnkncyBpbnRlcnByZXRlciBmb3IgZXhlY3V0aW9uXG4gICogQGU6IG1hdGNoZWQgYmluYXJ5IHR5cGUgaGFuZGxlclxuKyAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxuICAqIEBpbnRlcnByZXRlcjogdGhlIGludGVycHJldGVyIHNlbGVjdGVkIGZvciB0aGlzIGV4ZWNcbiAgKlxuICAqIEFuICdGJyBlbnRyeSBoYW5kcyBvdXQgYSBjbG9uZSBvZiB0aGUgZmlsZSBpdCBwcmUtb3BlbmVkIGF0IHJlZ2lzdHJhdGlvbixcbi0gKiBhbnkgb3RoZXIgZW50cnkgb3BlbnMgdGhlIHNlbGVjdGVkIHBhdGguXG4rICogYW5kIHNvIGRvZXMgYSAnQicgZW50cnkgd2hvc2UgbG9hZCBwcm9ncmFtIHNlbGVjdGVkIG9uZSBvZiB0aGVcbisgKiBpbnRlcnByZXRlcnMgaXQgYm91bmQuIEFueSBvdGhlciBlbnRyeSBvcGVucyB0aGUgc2VsZWN0ZWQgcGF0aC5cbiAgKlxuICAqIFJldHVybjogdGhlIG9wZW5lZCBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBhbiBFUlJfUFRSIG9uIGZhaWx1cmVcbiAgKi9cbiBzdGF0aWMgc3RydWN0IGZpbGUgKmVudHJ5X29wZW5faW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0XHRcdFx0XHQgICBjb25zdCBjaGFyICppbnRlcnByZXRlcilcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGUgX19mcmVlKGZwdXQpID0gTlVMTDtcbitcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbitcdHN0cnVjdCBmaWxlICpib3VuZDtcbiBcdGludCByZXR2YWw7XG4gXG4tXHRpZiAoIShlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpKVxuK1x0aWYgKGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKSB7XG4rXHRcdGJvdW5kID0gYnBybS1cdTAwM2VicGZfaW50ZXJwX2ZpbGU7XG4rXHR9IGVsc2UgaWYgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xuK1x0XHQvKiBBbiAnRicgZW50cnkgcHJlLW9wZW5lZCBleGFjdGx5IG9uZSBpbnRlcnByZXRlci4gKi9cbitcdFx0aW50ZXJwID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZlLVx1MDAzZWludGVycHMsXG4rXHRcdFx0XHRcdCAgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCwgbGlzdCk7XG4rXHRcdGJvdW5kID0gaW50ZXJwLVx1MDAzZWZpbGU7XG4rXHR9IGVsc2Uge1xuIFx0XHRyZXR1cm4gb3Blbl9leGVjKGludGVycHJldGVyKTtcbitcdH1cbiBcbi1cdGludGVycF9maWxlID0gZmlsZV9jbG9uZV9vcGVuKGUtXHUwMDNlaW50ZXJwX2ZpbGUpO1xuK1x0aW50ZXJwX2ZpbGUgPSBmaWxlX2Nsb25lX29wZW4oYm91bmQpO1xuIFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpXG4gXHRcdHJldHVybiBpbnRlcnBfZmlsZTtcbiBcbkBAIC00OTAsNyArNjQzLDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHQgKiB0byB0aGUgcmVhbCBmb3JtYXQgaW4gdGhlIHNhbWUgcm91bmQuXG4gXHQgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgTUlTQ19GTVRfTE9BREVSKSB7XG4tXHRcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGludGVycHJldGVyKTtcbitcdFx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgYnBybSwgaW50ZXJwcmV0ZXIpO1xuIFx0XHRpZiAoSVNfRVJSKGludGVycF9maWxlKSkge1xuIFx0XHRcdHJldHZhbCA9IFBUUl9FUlIoaW50ZXJwX2ZpbGUpO1xuIFx0XHRcdC8qIERlY2xpbmluZyBoZXJlIHdvdWxkIHJ1biB0aGUgYmluYXJ5J3Mgb3duIFBUX0lOVEVSUC4gKi9cbkBAIC01MTIsNyArNjY1LDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgaW50ZXJwcmV0ZXIpO1xuK1x0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgYnBybSwgaW50ZXJwcmV0ZXIpO1xuIFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGludGVycF9maWxlKTtcbiBcbkBAIC02ODQsNyArODM3LDcgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjb3VudClcbiB7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4tXHRjaGFyICpidWYsICpwLCAqZmxhZ3M7XG4rXHRjaGFyICpidWYsICpwO1xuIFx0Y2hhciBkZWw7XG4gXG4gXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiByZWNlaXZlZCAlenUgYnl0ZXNcXG5cIiwgY291bnQpO1xuQEAgLTcwMSw2ICs4NTQsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdHAgPSBidWYgPSBlLVx1MDAzZWJ1ZjtcbiBcbiBcdG1lbXNldChlLCAwLCBzaXplb2YoKmUpKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmUtXHUwMDNlaW50ZXJwcyk7XG4gXHRpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XG4gXG5AQCAtNzgwLDE4ICs5MzQsMzAgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSB0aGUgJ2ZsYWdzJyBmaWVsZC4gKi9cbi1cdGZsYWdzID0gcDtcbiBcdHAgPSBjaGVja19zcGVjaWFsX2ZsYWdzKHAsIGUpO1xuIFxuIFx0LypcbiBcdCAqIEEgYnBmIGhhbmRsZXIgZGVjaWRlcyB0aGUgaW52b2NhdGlvbiBmbGFncyBwZXIgZXhlYyB3aXRoXG4gXHQgKiBicGZfYmlucHJtX3NldF9mbGFncygpIHJhdGhlciB0aGFuIGZpeGluZyB0aGVtIGF0IHJlZ2lzdHJhdGlvbiwgYW5kXG4tXHQgKiAnRicgKHByZS1vcGVuIGEgZml4ZWQgaW50ZXJwcmV0ZXIpIGlzIG1lYW5pbmdsZXNzIGZvciBpdCwgc28gYSAnQidcbi1cdCAqIGVudHJ5J3MgZmxhZ3MgZmllbGQgaGFzIHRvIGJlIGVtcHR5LlxuK1x0ICogdGhlIGludGVycHJldGVycyBpdCBiaW5kcyBwcmUtb3BlbiB3aGF0ICdGJyB3b3VsZCBoYXZlLCBzbyBhICdCJ1xuK1x0ICogZW50cnkgY2FycmllcyBubyBpbnZvY2F0aW9uIGZsYWdzLlxuIFx0ICovXG4tXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2IHAgIT0gZmxhZ3MpXG4rXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX0lOVk9DQVRJT05fRkxBR1MpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcbitcdC8qXG4rXHQgKiAnRCcgaXMgYSBkaXJlY3RpdmUgZm9yIHRoaXMgcmVnaXN0cmF0aW9uIHJhdGhlciB0aGFuIGEgbGFzdGluZ1xuK1x0ICogcHJvcGVydHksIHNvIGNvbnN1bWUgaXQ6IHRoZSBlbnRyeSBpcyBjcmVhdGVkIGRpc2FibGVkIGFuZCBzdGF5c1xuK1x0ICogb3V0IG9mIHRoZSBzZWFyY2ggbGlzdCB1bnRpbCAnMScgaXMgd3JpdHRlbiB0byBpdHMgZW50cnkgZmlsZS5cbitcdCAqIFN0YXlpbmcgb3V0IGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzO1xuK1x0ICogdGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgaXQsIGZvciBnb29kLlxuK1x0ICovXG4rXHRpZiAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfRElTQUJMRUQpIHtcbitcdFx0ZS1cdTAwM2VmbGFncyBcdTAwMjY9IH5NSVNDX0ZNVF9ESVNBQkxFRDtcbitcdFx0Y2xlYXJfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKTtcbitcdH1cbitcbiBcdC8qIFRyYW5zcGFyZW5jeSBwcmVzZXJ2ZXMgdGhlIHdob2xlIGFyZ3YsIGFyZ3ZbMF0gaW5jbHVkZWQuICovXG4gXHRpZiAoKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX1RSQU5TUEFSRU5UKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApKVxuQEAgLTgxNCw2ICs5ODAsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdCAgICBlLVx1MDAzZWludGVycHJldGVyWzBdICE9ICcvJylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4rXHQvKiBCb3JuIGhvbGRpbmcgb25lIHJlZmVyZW5jZTsgcHV0X2JpbmZtdF9oYW5kbGVyKCkgaXMgdGhlIHRlYXJkb3duLiAqL1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmUtXHUwMDNldXNlcnMsIDEpO1xuIFx0cmV0dXJuIG5vX2ZyZWVfcHRyKGUpO1xuIH1cbiBcbkBAIC04MjUsMTggKzk5MywxNyBAQCBlbnVtIGJtX2NvbW1hbmQge1xuIFx0Qk1fQ01EX1JFTU9WRSxcdC8qIFwiLTFcIiAqL1xuIH07XG4gXG4rLyogTG9uZ2VzdCBvZiB0aGUgY29tbWFuZHMgYWJvdmUsIFwiLTFcXG5cIi4gKi9cbisjZGVmaW5lIE1BWF9DT01NQU5EX0xFTkdUSCAzXG4rXG4gLypcbiAgKiBQYXJzZSB3aGF0IHVzZXJzcGFjZSB3cm90ZSB0byAvc3RhdHVzIG9yIGFuIGVudHJ5IGZpbGU6ICcxJyBlbmFibGVzLFxuICAqICcwJyBkaXNhYmxlcyBhbmQgJy0xJyByZW1vdmVzIHRoZSBlbnRyeSBvciBhbGwgZW50cmllcy5cbiAgKi9cbi1zdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuK3N0YXRpYyBpbnQgcGFyc2VfY29tbWFuZChjb25zdCBjaGFyICpzLCBzaXplX3QgY291bnQpXG4ge1xuLVx0Y2hhciBzWzRdO1xuLVxuLVx0aWYgKGNvdW50IFx1MDAzZSAzKVxuK1x0aWYgKGNvdW50IFx1MDAzZSBNQVhfQ09NTUFORF9MRU5HVEgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0aWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmICghY291bnQpXG4gXHRcdHJldHVybiBCTV9DTURfSUdOT1JFO1xuIFx0aWYgKHNbY291bnQgLSAxXSA9PSAnXFxuJylcbkBAIC04NTAsOCArMTAxNywyNiBAQCBzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuKy8qIENvcHkgaW4gYSBjb21tYW5kIGZyb20gYSBmaWxlIHRoYXQgdGFrZXMgbm90aGluZyBlbHNlLCBhbmQgcGFyc2UgaXQuICovXG4rc3RhdGljIGludCByZWFkX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuK3tcbitcdGNoYXIgc1tNQVhfQ09NTUFORF9MRU5HVEggKyAxXTtcbitcbitcdGlmIChjb3VudCBcdTAwM2Ugc2l6ZW9mKHMpIC0gMSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoY29weV9mcm9tX3VzZXIocywgYnVmZmVyLCBjb3VudCkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0cmV0dXJuIHBhcnNlX2NvbW1hbmQocywgY291bnQpO1xuK31cbitcbiAvKiBnZW5lcmljIHN0dWZmICovXG4gXG4rLyogVGhlIHJvb3QgZGlyZWN0b3J5J3MgaW5vZGU7IGl0cyBsb2NrIHNlcmlhbGl6ZXMgY29uZmlndXJpbmcgYW4gaW5zdGFuY2UuICovXG4rc3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3tcbitcdHJldHVybiBkX2lub2RlKHNiLVx1MDAzZXNfcm9vdCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJtX3NlcV9oZXgoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1OCAqZGF0YSwgaW50IHNpemUpXG4ge1xuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkrKylcbkBAIC04NjcsMTAgKzEwNTIsMjMgQEAgc3RhdGljIGludCBibV9lbnRyeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKVxuIFx0ZWxzZVxuIFx0XHRzZXFfcHV0cyhtLCBcImRpc2FibGVkXFxuXCIpO1xuIFxuLVx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuK1x0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbitcbiBcdFx0c2VxX3ByaW50ZihtLCBcImJwZiAlc1xcblwiLCBlLVx1MDAzZWJwZl9vcHMtXHUwMDNlbmFtZSk7XG4tXHRlbHNlXG4rXHRcdC8qXG4rXHRcdCAqIEEgc3RhZ2VkIGVudHJ5J3Mgc2V0IGNhbiBzdGlsbCBncm93LCBzbyBldmVyeSBiaW5kaW5nIGlzXG4rXHRcdCAqIHJjdS1wdWJsaXNoZWQuIFRoZSBvcGVuIGZpbGUgcGlucyB0aGUgZW50cnkgYW5kIHdpdGggaXRcbitcdFx0ICogZXZlcnkgbm9kZSwgc28gcmN1IGlzIGZvciB0aGUgdGVhcmluZywgbm90IHRoZSBsaWZldGltZS5cbitcdFx0ICovXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaW50ZXJwLCBcdTAwMjZlLVx1MDAzZWludGVycHMsIGxpc3QpXG4rXHRcdFx0c2VxX3ByaW50ZihtLCBcImJwZi1pbnRlcnByZXRlciAlcyAlc1xcblwiLFxuK1x0XHRcdFx0ICAgaW50ZXJwLVx1MDAzZW5hbWUsIGludGVycC1cdTAwM2VwYXRoKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR9IGVsc2Uge1xuIFx0XHRzZXFfcHJpbnRmKG0sIFwiaW50ZXJwcmV0ZXIgJXNcXG5cIiwgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4rXHR9XG4gXG4gXHQvKiBwcmludCB0aGUgc3BlY2lhbCBmbGFncyAqL1xuIFx0c2VxX3B1dHMobSwgXCJmbGFnczogXCIpO1xuQEAgLTk5MiwxMCArMTE5MCwxMSBAQCBzdGF0aWMgdm9pZCByZW1vdmVfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuIC8qIFJlbW92ZSBAZSB1bmxlc3MgaXQgd2FzIGFscmVhZHkgcmVtb3ZlZC4gKi9cbiBzdGF0aWMgdm9pZCBibV9yZW1vdmVfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGRfaW5vZGUoc2ItXHUwMDNlc19yb290KTtcbitcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoc2IpO1xuIFxuIFx0aW5vZGVfbG9ja19uZXN0ZWQocm9vdCwgSV9NVVRFWF9QQVJFTlQpO1xuLVx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZlLVx1MDAzZW5vZGUpKVxuK1x0LyogQSBzdGFnZWQgZW50cnkgaXMgbm90IGhhc2hlZDsgdGhlIGRlbnRyeSBzYXlzIGlmIGl0IHdhcyByZW1vdmVkLiAqL1xuK1x0aWYgKCFkX3VuaGFzaGVkKGUtXHUwMDNlZGVudHJ5KSlcbiBcdFx0cmVtb3ZlX2JpbmZtdF9oYW5kbGVyKGlfYmluZm10X21pc2Mocm9vdCksIGUpO1xuIFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xuIH1cbkBAIC0xMDA0LDEzICsxMjAzLDIxIEBAIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2FsbF9lbnRyaWVzKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiBcdFx0XHRcdCAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBkX2lub2RlKHNiLVx1MDAzZXNfcm9vdCk7XG4tXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmU7XG4tXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcbitcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoc2IpO1xuK1x0c3RydWN0IGRlbnRyeSAqY2hpbGQgPSBOVUxMO1xuIFxuIFx0aW5vZGVfbG9ja19uZXN0ZWQocm9vdCwgSV9NVVRFWF9QQVJFTlQpO1xuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCBcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXMsIG5vZGUpXG4tXHRcdHJlbW92ZV9iaW5mbXRfaGFuZGxlcihtaXNjLCBlKTtcbitcdC8qXG4rXHQgKiBXYWxrIHRoZSBkaXJlY3RvcnkgcmF0aGVyIHRoYW4gdGhlIHNlYXJjaCBsaXN0OiBhIHN0YWdlZCBlbnRyeVxuK1x0ICogaXMgaW4gdGhlIGZvcm1lciBidXQgbm90IHlldCBpbiB0aGUgbGF0dGVyLiBUaGUgY29udHJvbCBmaWxlc1xuK1x0ICogY2Fycnkgbm8gZW50cnkgYW5kIHN0YXkuXG4rXHQgKi9cbitcdHdoaWxlICgoY2hpbGQgPSBmaW5kX25leHRfY2hpbGQoc2ItXHUwMDNlc19yb290LCBjaGlsZCkpKSB7XG4rXHRcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGRfaW5vZGUoY2hpbGQpLVx1MDAzZWlfcHJpdmF0ZTtcbitcbitcdFx0aWYgKGUpXG4rXHRcdFx0cmVtb3ZlX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGUpO1xuK1x0fVxuIFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xuIH1cbiBcbkBAIC0xMDU2LDIwICsxMjYzLDEzOCBAQCBzdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBMb25nZXN0ICcrXHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJyBhIHdyaXRlIGNhbiBzcGVsbCwgYW5kIHdpdGggaXQgdGhlIGxvbmdlc3RcbisgKiBjb21tYW5kIGFuIGVudHJ5IGZpbGUgdGFrZXM6IHRoZSB0d28gZGVsaW1pdGVycyBhbmQgYSBuZXdsaW5lIG9uIHRvcCBvZlxuKyAqIHRoZSB0d28gbmFtZXMuXG4rICovXG4rI2RlZmluZSBNQVhfQklORElOR19MRU5HVEggKEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWCArIFBBVEhfTUFYICsgMylcbitcbisvKipcbisgKiBibV9lbnRyeV9hZGRfaW50ZXJwIC0gYmluZCBhbm90aGVyIGludGVycHJldGVyIHRvIGEgc3RhZ2VkIGVudHJ5XG4rICogQGU6IHRoZSBlbnRyeVxuKyAqIEBmaWxlOiB0aGUgZW50cnkgZmlsZSBiZWluZyB3cml0dGVuIHRvLCBmb3IgaXRzIGNyZWRlbnRpYWxzXG4rICogQGJ1ZjogdGhlICcrXHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJyBjb21tYW5kLCBwYXJzZWQgaW4gcGxhY2UgYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXJcbisgKiBAY291bnQ6IGl0cyBsZW5ndGhcbisgKlxuKyAqIEEgJ0QnIGVudHJ5IGlzIHJlZ2lzdGVyZWQgb3V0c2lkZSB0aGUgc2VhcmNoIGxpc3QsIHdoaWNoIGlzIHdoYXQgbGVhdmVzXG4rICogaXQgb3BlbiB0byBiZWluZyBjb25maWd1cmVkOiBpdCBjYW5ub3QgYmUgbWF0Y2hlZCwgc28gbm8gZXhlYyBjYW4gYmVcbisgKiBob2xkaW5nIGl0cyBpbnRlcnByZXRlcnMgYW5kIHRoZSBzZXQgY2FuIHN0aWxsIGdyb3cuIEl0cyBmaXJzdCBlbmFibGVcbisgKiBwdWJsaXNoZXMgaXQgYW5kIGVuZHMgdGhhdC4gT25lIGludGVycHJldGVyIHBlciB3cml0ZSwgdXAgdG9cbisgKiBCSU5GTVRfTUlTQ19JTlRFUlBfTUFYIG9mIHRoZW0sIG5vbmUgb2Ygd2hpY2ggaGFzIHRvIGZpdCBpbiBhIHJlZ2lzdGVyXG4rICogc3RyaW5nLlxuKyAqXG4rICogUmV0dXJuOiBAY291bnQgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4rICovXG4rc3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3RydWN0IGZpbGUgKmYgX19mcmVlKGNsb3NlX2ludGVycF9maWxlKSA9IE5VTEw7XG4rXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYik7XG4rXHRzaXplX3QgbmxlbiwgcGxlbjtcbitcdGNoYXIgKm5hbWUsICpwYXRoO1xuK1x0aW50IHJldHZhbDtcbitcbitcdC8qIFNldHRsZWQgYmVmb3JlIHRoZSBvcGVuOiB0eXBlIGlzIGZpeGVkLCBwdWJsaWNhdGlvbiBpcyBwZXJtYW5lbnQuICovXG4rXHRpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghaGxpc3RfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2ZS1cdTAwM2Vub2RlKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdC8qICcrXHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJzogdGhlIHBhdGggaXMgZXZlcnl0aGluZyBwYXN0IHRoZSBmaXJzdCBzcGFjZS4gKi9cbitcdG5hbWUgPSBidWYgKyAxO1xuK1x0cGF0aCA9IHN0cmNocihuYW1lLCAnICcpO1xuK1x0aWYgKCFwYXRoKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdCpwYXRoKysgPSAnXFwwJztcbitcbitcdHBsZW4gPSBzdHJsZW4ocGF0aCk7XG4rXHQvKiBUaGUgY29tbWFuZCBoYXMgdG8gZW5kIGF0IHRoZSB3cml0ZSwgbGlrZSBhIHJlZ2lzdGVyIHN0cmluZy4gKi9cbitcdGlmIChwYXRoICsgcGxlbiAhPSBidWYgKyBjb3VudClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAocGxlbiBcdTAwMjZcdTAwMjYgcGF0aFtwbGVuIC0gMV0gPT0gJ1xcbicpXG4rXHRcdHBhdGhbLS1wbGVuXSA9ICdcXDAnO1xuK1x0LyogUmVzb2x2ZWQgbm93LCBzbyBhIHJlbGF0aXZlIHBhdGggd291bGQgbmFtZSB0aGUgd3JpdGVyJ3MgY3dkLiAqL1xuK1x0aWYgKHBhdGhbMF0gIT0gJy8nKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5sZW4gPSBwYXRoIC0gbmFtZSAtIDE7XG4rXHRpZiAoIW5sZW4gfHwgbmxlbiBcdTAwM2UgQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdC8qIFRoZSBuYW1lIHByaW50cyBiZXR3ZWVuIGRlbGltaXRlcnMsIHNvIGtlZXAgaXQgYSBwcmludGFibGUgd29yZC4gKi9cbitcdGZvciAoY29uc3QgY2hhciAqcCA9IG5hbWU7ICpwOyBwKyspXG4rXHRcdGlmICghaXNhc2NpaSgqcCkgfHwgIWlzZ3JhcGgoKnApKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogT3BlbmVkIGJlZm9yZSB0aGUgbG9jazogcmVzb2x2aW5nIGl0IG1heSB3YWxrIHRoaXMgdmVyeSBmaWxlc3lzdGVtLiAqL1xuK1x0ZiA9IG9wZW5faW50ZXJwX2ZpbGUoZmlsZS1cdTAwM2VmX2NyZWQsIHBhdGgpO1xuK1x0aWYgKElTX0VSUihmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZik7XG4rXG4rXHRpbm9kZV9sb2NrKHJvb3QpO1xuK1x0aWYgKGRfdW5oYXNoZWQoZS1cdTAwM2VkZW50cnkpKVxuK1x0XHRyZXR2YWwgPSAtRU5PRU5UO1x0LyogcmVtb3ZlZCB3aGlsZSB3ZSB3ZXJlIG9wZW5pbmcgaXQgKi9cbitcdGVsc2UgaWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZlLVx1MDAzZW5vZGUpKVxuK1x0XHRyZXR2YWwgPSAtRUJVU1k7XHQvKiBwdWJsaXNoZWQgd2hpbGUgd2Ugd2VyZSBvcGVuaW5nIGl0ICovXG4rXHRlbHNlXG4rXHRcdHJldHZhbCA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBuYW1lLCBwYXRoLCBmKTtcbitcdGlub2RlX3VubG9jayhyb290KTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4rXG4rXHQvKiBUaGUgZmlsZSBpcyBvd25lZCBieSB0aGUgZW50cnkgbm93LiAqL1xuK1x0cmV0YWluX2FuZF9udWxsX3B0cihmKTtcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gc3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiBcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGlub2RlLVx1MDAzZWlfcHJpdmF0ZTtcbi1cdGludCByZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xuK1x0Y2hhciAqYnVmIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IHJlcztcbitcbitcdC8qIEEgYmluZGluZyBpcyB0aGUgbG9uZ2VzdCBjb21tYW5kIHRoaXMgZmlsZSB0YWtlcy4gKi9cbitcdGlmIChjb3VudCBcdTAwM2UgTUFYX0JJTkRJTkdfTEVOR1RIKVxuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1xuK1x0YnVmID0gbWVtZHVwX3VzZXJfbnVsKGJ1ZmZlciwgY291bnQpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuK1xuK1x0LyogJytcdTAwM2NuYW1lXHUwMDNlIFx1MDAzY3BhdGhcdTAwM2UnIGJpbmRzIGFuIGludGVycHJldGVyLCBldmVyeXRoaW5nIGVsc2UgdG9nZ2xlcy4gKi9cbitcdGlmIChidWZbMF0gPT0gJysnKVxuK1x0XHRyZXR1cm4gYm1fZW50cnlfYWRkX2ludGVycChlLCBmaWxlLCBidWYsIGNvdW50KTtcbitcbitcdHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmLCBjb3VudCk7XG4gXG4gXHRzd2l0Y2ggKHJlcykge1xuIFx0Y2FzZSBCTV9DTURfRElTQUJMRTpcbiBcdFx0Y2xlYXJfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKTtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEJNX0NNRF9FTkFCTEU6XG4rXHRjYXNlIEJNX0NNRF9FTkFCTEU6IHtcbitcdFx0c3RydWN0IGlub2RlICpyb290ID0gYm1fcm9vdF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiKTtcbitcbitcdFx0LypcbitcdFx0ICogVGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgYSAnRCcgZW50cnkgaW50byB0aGUgc2VhcmNoXG4rXHRcdCAqIGxpc3QsIHdob2xlLiBUaGUgbG9jayBrZWVwcyB0aGF0IG9yZGVyZWQgYWdhaW5zdCBhIHNlY29uZFxuK1x0XHQgKiBlbmFibGUsIGFnYWluc3QgcmVtb3ZhbCAtIGEgcmVtb3ZlZCBlbnRyeSBoYXMgbm90aGluZyBsZWZ0XG4rXHRcdCAqIHRvIHB1Ymxpc2ggLSBhbmQgYWdhaW5zdCBiaW5kaW5nOiB3aGF0IGNhbiBiZSBtYXRjaGVkIGNhblxuK1x0XHQgKiBubyBsb25nZXIgYmUgY29uZmlndXJlZC5cbitcdFx0ICovXG4rXHRcdGlub2RlX2xvY2socm9vdCk7XG4gXHRcdHNldF9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpO1xuK1x0XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2ZS1cdTAwM2Vub2RlKSBcdTAwMjZcdTAwMjYgIWRfdW5oYXNoZWQoZS1cdTAwM2VkZW50cnkpKSB7XG4rXHRcdFx0c3RydWN0IGJpbmZtdF9taXNjICptaXNjID0gaV9iaW5mbXRfbWlzYyhpbm9kZSk7XG4rXG4rXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbitcdFx0XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZS1cdTAwM2Vub2RlLCBcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXMpO1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbitcdFx0fVxuK1x0XHRpbm9kZV91bmxvY2socm9vdCk7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBCTV9DTURfUkVNT1ZFOlxuIFx0XHRibV9yZW1vdmVfZW50cnkoZSwgaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRcdGJyZWFrO1xuQEAgLTExMDYsMTYgKzE0MzEsMTggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbi1cdHJlZmNvdW50X3NldChcdTAwMjZlLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGUtXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xuIFx0aW5vZGUtXHUwMDNlaV9wcml2YXRlID0gZTtcbiBcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2Ym1fZW50cnlfb3BlcmF0aW9ucztcbiBcbiBcdGRfbWFrZV9wZXJzaXN0ZW50KGRlbnRyeSwgaW5vZGUpO1xuLVx0bWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbi1cdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZlLVx1MDAzZW5vZGUsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcyk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG4rXHQvKiBBICdEJyBlbnRyeSBzdGF5cyBvdXQgb2YgdGhlIHNlYXJjaCBsaXN0IHVudGlsIGl0cyBmaXJzdCBlbmFibGUuICovXG4rXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdG1pc2MgPSBpX2JpbmZtdF9taXNjKGlub2RlKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbitcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmUtXHUwMDNlbm9kZSwgXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuK1x0fVxuIFx0c2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTIzLDkgKzE0NTAsOCBAQCBzdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIHtcbi1cdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbitcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUocHV0X2JpbmZtdF9oYW5kbGVyKSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiO1xuLVx0c3RydWN0IGZpbGUgKmYgPSBOVUxMO1xuIFx0aW50IGVycjtcbiBcbiBcdGUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7XG5AQCAtMTE0MiwzMyArMTQ2OCwyMCBAQCBzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdH1cbiBcbiBcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbi1cdFx0Lypcbi1cdFx0ICogTm93IHRoYXQgd2Ugc3VwcG9ydCB1bnByaXZpbGVnZWQgYmluZm10X21pc2MgbW91bnRzIG1ha2Vcbi1cdFx0ICogc3VyZSB3ZSB1c2UgdGhlIGNyZWRlbnRpYWxzIHRoYXQgdGhlIHJlZ2lzdGVyIEBmaWxlIHdhc1xuLVx0XHQgKiBvcGVuZWQgd2l0aCB0byBhbHNvIG9wZW4gdGhlIGludGVycHJldGVyLiBCZWZvcmUgdGhhdCB0aGlzXG4tXHRcdCAqIGRpZG4ndCBtYXR0ZXIgbXVjaCBhcyBvbmx5IGEgcHJpdmlsZWdlZCBwcm9jZXNzIGNvdWxkIG9wZW5cbi1cdFx0ICogdGhlIHJlZ2lzdGVyIGZpbGUuXG4tXHRcdCAqL1xuLVx0XHRzY29wZWRfd2l0aF9jcmVkcyhmaWxlLVx1MDAzZWZfY3JlZClcbi1cdFx0XHRmID0gb3Blbl9leGVjKGUtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuLVx0XHRpZiAoSVNfRVJSKGYpKSB7XG4tXHRcdFx0cHJfbm90aWNlKFwicmVnaXN0ZXI6IGZhaWxlZCB0byBpbnN0YWxsIGludGVycHJldGVyIGZpbGUgJXNcXG5cIixcbi1cdFx0XHRcdCBlLVx1MDAzZWludGVycHJldGVyKTtcbitcdFx0c3RydWN0IGZpbGUgKmYgPSBvcGVuX2ludGVycF9maWxlKGZpbGUtXHUwMDNlZl9jcmVkLCBlLVx1MDAzZWludGVycHJldGVyKTtcbitcbitcdFx0aWYgKElTX0VSUihmKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihmKTtcbitcdFx0ZXJyID0gZW50cnlfYXR0YWNoX2ludGVycHJldGVyKGUsIFwiXCIsIGUtXHUwMDNlaW50ZXJwcmV0ZXIsIGYpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0Y2xvc2VfaW50ZXJwX2ZpbGUoZik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0XHRlLVx1MDAzZWludGVycF9maWxlID0gZjtcbiBcdH1cbiBcbiBcdGVyciA9IGFkZF9lbnRyeShlLCBzYik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGlmIChmKSB7XG4tXHRcdFx0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xuLVx0XHRcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4tXHRcdH1cbi1cdFx0aWYgKGUtXHUwMDNlYnBmX29wcylcbi1cdFx0XHRiaW5mbXRfbWlzY19wdXRfb3BzKGUtXHUwMDNlYnBmX29wcyk7XG4rXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFxuIFx0LyogVGhlIGVudHJ5IGlzIG93bmVkIGJ5IGl0cyBpbm9kZSBub3cuICovXG4gXHRyZXRhaW5fYW5kX251bGxfcHRyKGUpO1xuQEAgLTExOTcsNyArMTUxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3N0YXR1c193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0c3RydWN0IGJpbmZtdF9taXNjICptaXNjO1xuLVx0aW50IHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmZmVyLCBjb3VudCk7XG4rXHRpbnQgcmVzID0gcmVhZF9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xuIFxuIFx0bWlzYyA9IGlfYmluZm10X21pc2MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXHRzd2l0Y2ggKHJlcykge1xuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbmluZGV4IDkyMDAzZWE2NDBkM2YuLmIyNDZkODg2NDM3YjggMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzY19icGYuY1xuKysrIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbkBAIC03LDYgKzcsMTUgQEBcbiAgKiBuYW1lc3BhY2UgaXQgd2FzIHJlZ2lzdGVyZWQgaW4uIEEgYmluZm10X21pc2MgJ0InIGVudHJ5IGFjdGl2YXRlcyBpdDpcbiAgKlxuICAqICAgZWNobyAnOmVudHJ5OkI6Ojo6XHUwMDNjaGFuZGxlci1uYW1lXHUwMDNlOicgXHUwMDNlIFx1MDAzY2JpbmZtdF9taXNjXHUwMDNlL3JlZ2lzdGVyXG4rICpcbisgKiBUaGUgZW50cnkgY2FuIGJpbmQgdGhlIGludGVycHJldGVycyB0aGUgaGFuZGxlciBtYXkgcnVuIGl0cyBiaW5hcmllc1xuKyAqIHdpdGgsIGVhY2ggb3BlbmVkIGJ5IHRoZSB3cml0ZSB0aGF0IGJpbmRzIGl0IGFuZCBzZWxlY3RlZCBieSBuYW1lIHBlclxuKyAqIGV4ZWMuIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aCAnRCcgaXMgbm90IG1hdGNoYWJsZSB5ZXQsIHdoaWNoIGlzIHdoYXRcbisgKiBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiB0aGVtOlxuKyAqXG4rICogICBlY2hvICc6ZW50cnk6Qjo6OjpcdTAwM2NoYW5kbGVyLW5hbWVcdTAwM2U6RCcgXHUwMDNlIFx1MDAzY2JpbmZtdF9taXNjXHUwMDNlL3JlZ2lzdGVyXG4rICogICBlY2hvICcrXHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJyBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvZW50cnlcbisgKiAgIGVjaG8gMSBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvZW50cnlcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXHUwMDNlXG5AQCAtMTYsNiArMjUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtOTEsNiArMTAyLDIwIEBAIGJvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdCAgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VzdF9vcHMgPT0gXHUwMDI2YnBmX2JpbmZtdF9taXNjX29wcztcbiB9XG4gXG4rLypcbisgKiBSZXBsYWNlIHRoZSBzdGFnZWQgaW50ZXJwcmV0ZXIgc2VsZWN0aW9uOiBuYW1pbmcgYSBwYXRoIGRyb3BzIGEgYm91bmRcbisgKiBmaWxlLCBzZWxlY3RpbmcgYSBib3VuZCBpbnRlcnByZXRlciBjYXJyaWVzIGl0cyBmaWxlIGFsb25nLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY2hhciAqcGF0aCxcbitcdFx0XHRcdCAgIHN0cnVjdCBmaWxlICpmKVxuK3tcbitcdGlmIChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSlcbitcdFx0ZnB1dChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSk7XG4rXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuK1x0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gcGF0aDtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlID0gZjtcbit9XG4rXG4gX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuIFxuIC8qKlxuQEAgLTEwMyw3ICsxMjgsOCBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gICogYmVmb3JlIHJldHVybmluZyB6ZXJvOyB0aGUgdmVyaWZpZXIgcmVqZWN0cyB0aGUgY2FsbCBmcm9tIGFueSBvdGhlclxuICAqIHByb2dyYW0sIGluY2x1ZGluZyB0aGUgaGFuZGxlcidzIG93biBtYXRjaCBwcm9ncmFtLiBUaGUgcGF0aCBpcyBvcGVuZWRcbiAgKiB3aXRoIHRoZSBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGUgZXhlYyBhZnRlciB0aGUgcHJvZ3JhbVxuLSAqIHJldHVybnMuXG4rICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhblxuKyAqIGludGVycHJldGVyIHRoZSBlbnRyeSBib3VuZCB3aXRoIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuICAqL1xuQEAgLTEyNyw4ICsxNTMsNTAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0aWYgKCFpbnRlcnApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbi1cdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IGludGVycDtcbitcdGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oYnBybSwgaW50ZXJwLCBOVUxMKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAgLSBydW4gdGhpcyBleGVjIHVuZGVyIGFuIGludGVycHJldGVyIHRoZSBlbnRyeSBib3VuZFxuKyAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxuKyAqIEBuYW1lOiBuYW1lIHRoZSBpbnRlcnByZXRlciB3YXMgcmVnaXN0ZXJlZCB1bmRlclxuKyAqIEBuYW1lX19zejogc2l6ZSBvZiB0aGUgQG5hbWUgYnVmZmVyLCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTFxuKyAqXG4rICogVG8gYmUgY2FsbGVkIGZyb20gdGhlIGxvYWQgcHJvZ3JhbSBvZiBhIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgaGFuZGxlclxuKyAqIGluc3RlYWQgb2YgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCkuIEl0IHNlbGVjdHMgb25lIG9mIHRoZSBpbnRlcnByZXRlcnNcbisgKiB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLCBlYWNoIG9mIHdoaWNoIHdhcyBvcGVuZWQgb25jZSB3aGVuXG4rICogdGhlIGVudHJ5IHdhcyByZWdpc3RlcmVkLiBOb3RoaW5nIGlzIHJlc29sdmVkIGF0IGV4ZWMgdGltZSwgc28gbm9cbisgKiBmaWxlc3lzdGVtIHZpZXcgY2FuIHJlZGlyZWN0IHRoZSBpbnRlcnByZXRlci5cbisgKlxuKyAqIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIHRoZSBlbnRyeSByZWdpc3RlcmVkIGl0IHVuZGVyLlxuKyAqIENhbGxpbmcgaXQgYWdhaW4gcmVwbGFjZXMgdGhlIHNlbGVjdGlvbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PRU5UIGlmIHRoZSBtYXRjaGVkIGVudHJ5IGJvdW5kIG5vIGludGVycHJldGVyXG4rICogb2YgdGhhdCBuYW1lLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHRcdFx0XHRcdCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xuK1x0c2l6ZV90IGxlbjtcbitcdGNoYXIgKnBhdGg7XG4rXG4rXHRpZiAoIW5hbWVfX3N6KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGxlbiA9IHN0cm5sZW4obmFtZSwgbmFtZV9fc3opO1xuK1x0aWYgKGxlbiA9PSBuYW1lX19zeiB8fCAhbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGludGVycCA9IGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGJwcm0tXHUwMDNlYnBmX2ludGVycHMsIG5hbWUpO1xuK1x0aWYgKCFpbnRlcnApXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0cGF0aCA9IGtzdHJkdXAoaW50ZXJwLVx1MDAzZXBhdGgsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwYXRoKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oYnBybSwgcGF0aCwgZ2V0X2ZpbGUoaW50ZXJwLVx1MDAzZWZpbGUpKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMTEsNiArMjc5LDcgQEAgX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbiBcbiBCVEZfS0ZVTkNTX1NUQVJUKGJtX2JwZl9rZnVuY19pZHMpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycCwgS0ZfU0xFRVBBQkxFKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZywgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9mbGFncywgS0ZfU0xFRVBBQkxFKVxuIEJURl9LRlVOQ1NfRU5EKGJtX2JwZl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCA4NTY3MzFmNzhkMDU0Li5hMTRmMjhiMTU2MDdhIDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4rKysgYi9mcy9leGVjLmNcbkBAIC0xNDc3LDYgKzE0NzcsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdGlmIChicHJtLVx1MDAzZWludGVycCAhPSBicHJtLVx1MDAzZWZpbGVuYW1lKVxuIFx0XHRrZnJlZShicHJtLVx1MDAzZWludGVycCk7XG4gXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuK1x0aWYgKGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKVxuK1x0XHRmcHV0KGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKTtcbiBcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcpO1xuIFx0a2ZyZWUoYnBybS1cdTAwM2VmZHBhdGgpO1xuIFx0a2ZyZWUoYnBybSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5pbmRleCA0YWJkZmQzNmIzZmE4Li4wNzJlNGIzZGQ3OGQyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbkBAIC01LDExICs1LDQxIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBicGZfcHJvZztcbitzdHJ1Y3QgZmlsZTtcbiBzdHJ1Y3QgbGludXhfYmlucHJtO1xuIHN0cnVjdCB1c2VyX25hbWVzcGFjZTtcbiBcbiAjZGVmaW5lIEJJTkZNVF9NSVNDX09QU19OQU1FX01BWCAxNlxuIFxuKy8qIExvbmdlc3QgbmFtZSBhICdCJyBlbnRyeSBjYW4gYmluZCBhbiBpbnRlcnByZXRlciB1bmRlci4gKi9cbisjZGVmaW5lIEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWCAzMlxuK1xuKy8qIE1vc3QgaW50ZXJwcmV0ZXJzIG9uZSBlbnRyeSBjYW4gYmluZC4gKi9cbisjZGVmaW5lIEJJTkZNVF9NSVNDX0lOVEVSUF9NQVggMTAwXG4rXG4rLyoqXG4rICogc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAtIGFuIGludGVycHJldGVyIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbisgKiBAbGlzdDogbGluayBpbiB0aGUgZW50cnkncyBsaXN0LCBpbiByZWdpc3RyYXRpb24gb3JkZXJcbisgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluXG4rICogQHBhdGg6IHRoZSBwYXRoIGl0IHdhcyByZWdpc3RlcmVkIHVuZGVyLCB1c2VkIGFzIHRoZSBuYW1lIHRoZSBpbnRlcnByZXRlclxuKyAqICAgICAgICBydW5zIHVuZGVyOyBzdG9yZWQgYWZ0ZXIgQG5hbWUgaW4gdGhlIHNhbWUgYWxsb2NhdGlvblxuKyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWRcbisgKiAgICAgICAgaW50ZXJwcmV0ZXIgb2YgYSBzdGF0aWMgJ0YnIGVudHJ5XG4rICpcbisgKiBPd25lZCBieSB0aGUgZW50cnkgYW5kIGxpdmluZyBleGFjdGx5IGFzIGxvbmcgYXMgaXQgZG9lcy4gVGhlIGxpc3QgaGVhZFxuKyAqIGlzIGhhbmRlZCB0byB0aGUgaGFuZGxlcidzIGxvYWQgcHJvZ3JhbSBmb3IgdGhlIGR1cmF0aW9uIG9mIG9uZSBleGVjLFxuKyAqIHdoaWNoIHBpY2tzIG9uZSB3aXRoIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLlxuKyAqL1xuK3N0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAge1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbitcdHN0cnVjdCBmaWxlXHRcdCpmaWxlO1xuK1x0Y29uc3QgY2hhclx0XHQqcGF0aDtcbitcdGNoYXJcdFx0XHRuYW1lW107XG4rfTtcbitcbitjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICpcbitiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKTtcbitcbiAvKipcbiAgKiBlbnVtIGJwZl9iaW5wcm1fZmxhZ3MgLSBwZXItZXhlYyBpbnZvY2F0aW9uIGZsYWdzIGEgbG9hZCBwcm9ncmFtIGNhbiByZXF1ZXN0XG4gICogQEJQRl9CSU5QUk1fUFJFU0VSVkVfQVJHVjA6IGtlZXAgdGhlIGNhbGxlcidzIGFyZ3ZbMF0gKGxpa2UgdGhlICdQJyBmbGFnKVxuQEAgLTQyLDEwICs3MiwxMSBAQCBlbnVtIGJwZl9iaW5wcm1fZmxhZ3Mge1xuICAqICAgICAgICAgc28gaXQgY2FuIHJlYWQgdGhlIGJpbmFyeSB0byBkZWNpZGUsIGJ1dCB0aGUgdmVyaWZpZXIgcmVqZWN0c1xuICAqICAgICAgICAgdGhlIGludGVycHJldGVyIHNlbGVjdGlvbiBrZnVuY3MgaW4gaXRcbiAgKiBAbG9hZDogIHNlbGVjdCBhbiBpbnRlcnByZXRlciBmb3IgdGhlIG1hdGNoZWQgQGJwcm0gdmlhXG4tICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXMgY29tbWl0dGVkLCBzb1xuLSAqICAgICAgICAgYSBmYWlsdXJlIGZhaWxzIHRoZSBleGVjIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIHRvIGxhdGVyXG4tICogICAgICAgICBlbnRyaWVzOyAtRU5PRVhFQyBkb2VzIG5vdCBmYWlsIHRoZSBleGVjIGJ1dCBtb3ZlcyBvbiB0byB0aGVcbi0gKiAgICAgICAgIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0c1xuKyAqICAgICAgICAgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCksIG9yIG9uZSB0aGUgZW50cnkgYm91bmQgdmlhXG4rICogICAgICAgICBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKSwgYW5kIHJldHVybiB6ZXJvOyBhIG1hdGNoIGlzXG4rICogICAgICAgICBjb21taXR0ZWQsIHNvIGEgZmFpbHVyZSBmYWlscyB0aGUgZXhlYyBpbnN0ZWFkIG9mIGZhbGxpbmdcbisgKiAgICAgICAgIHRocm91Z2ggdG8gbGF0ZXIgZW50cmllczsgLUVOT0VYRUMgZG9lcyBub3QgZmFpbCB0aGUgZXhlYyBidXRcbisgKiAgICAgICAgIG1vdmVzIG9uIHRvIHRoZSByZW1haW5pbmcgYmluYXJ5IGZvcm1hdHNcbiAgKiBAbmFtZTogbmFtZSB0aGF0ICdCJyBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgaGFuZGxlciBieVxuICAqL1xuIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbmluZGV4IGEyZGFlY2JiMDFkNmEuLmY2ODZhMzdmN2EwYTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbkBAIC0xNCw3ICsxNCwxMCBAQCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xuIFxuIC8qIEludGVycHJldGVyIHNlbGVjdGlvbiBzdGFnZWQgYnkgYSBicGYgYmluZm10X21pc2MgaGFuZGxlci4gKi9cbiBzdHJ1Y3QgYmluZm10X21pc2NfYnBmIHtcbitcdC8qIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSBib3VuZCwgc2VsZWN0YWJsZSBieSBuYW1lICovXG4rXHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpicGZfaW50ZXJwcztcbiBcdGNvbnN0IGNoYXIgKmJwZl9pbnRlcnA7XHRcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cbitcdHN0cnVjdCBmaWxlICpicGZfaW50ZXJwX2ZpbGU7XHQvKiB0aGUgYm91bmQgaW50ZXJwcmV0ZXIgaXQgc2VsZWN0ZWQgKi9cbiBcdGNvbnN0IGNoYXIgKmJwZl9pbnRlcnBfYXJnO1x0LyogaW50ZXJwcmV0ZXIgYXJndW1lbnQgZnJvbSBhIGJwZiBoYW5kbGVyICovXG4gXHR1NjQgYnBmX2ZsYWdzO1x0XHRcdC8qIGVudW0gYnBmX2JpbnBybV9mbGFncyBmcm9tIGEgYnBmIGhhbmRsZXIgKi9cbiB9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG5pbmRleCAzOTBmZTExYTdiZWRmLi40MTBjOTM2MDZhMGMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuQEAgLTI1LDYgKzI1LDEwIEBAIFRFU1RfR0VOX1BST0dTICs9IGNoZWNrLWV4ZWNcbiAjIG9yIGFuICdGJyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxuIFRFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX3NlbGZwaW5cbiBcbisjICdEJyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzXG4rIyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gU3RhdGljIG1hZ2ljIGVudHJ5LCBubyBicGYgdG9vbGNoYWluLlxuK1RFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2Rpc2FibGVkXG4rXG4gIyBTdGF0aWMgKCdUJyBmbGFnKSB0cmFuc3BhcmVudCBiaW5mbXRfbWlzYyB0ZXN0OyB0aGUgYXNzZXJ0aW5nIGludGVycHJldGVyXG4gIyBpcyBzaGFyZWQgd2l0aCB0aGUgYnBmIGhhcm5lc3MncyB0cmFuc3BhcmVudCBjYXNlLiBObyBicGYgdG9vbGNoYWluIG5lZWRlZC5cbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY190cmFuc3BhcmVudFxuQEAgLTUyLDggKzU2LDggQEAgSEFWRV9CUEZfVE9PTENIQUlOID89ICQoc2hlbGwgY29tbWFuZCAtdiAkKENMQU5HKSBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XHUwMDI2IFxcXG4gaWZlcSAoJChIQVZFX0JQRl9UT09MQ0hBSU4pLHkpXG4gVEVTVF9HRU5fUFJPR1MgKz0gYmluZm10X21pc2NfYnBmXG4gVEVTVF9HRU5fRklMRVMgKz0gYnBmX2ludGVycC5icGYubyBuaXhfb3JpZ2luLmJwZi5vIHRyYW5zcGFyZW50LmJwZi5vXG4tVEVTVF9HRU5fRklMRVMgKz0gbG9hZGVyLmJwZi5vXG4tVEVTVF9HRU5fRklMRVMgKz0gYmluZm10X2JwZl9pbnRlcnAgYmluZm10X2JwZl9hcHBcbitURVNUX0dFTl9GSUxFUyArPSBsb2FkZXIuYnBmLm8gaW50ZXJwX2JpbmQuYnBmLm9cbitURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfYnBmX2ludGVycCBiaW5mbXRfYnBmX2FwcCBiaW5mbXRfYmluZF9pbnRlcnBcbiBlbHNlXG4gJChpbmZvIGV4ZWMgc2VsZnRlc3RzOiBza2lwcGluZyBiaW5mbXRfbWlzY19icGYsIG5lZWRzIGNsYW5nLCBicGZ0b29sLCB2bWxpbnV4IEJURiBhbmQgbGliYnBmKVxuIGVuZGlmXG5AQCAtMTIzLDYgKzEyNyw5IEBAICQoT1VUUFVUKS9iaW5mbXRfbWlzY19icGY6IGJpbmZtdF9taXNjX2JwZi5jIGJpbmZtdF9taXNjX2NvbW1vbi5oXG4gJChPVVRQVVQpL2JpbmZtdF9icGZfaW50ZXJwOiBiaW5mbXRfYnBmX2ludGVycC5jXG4gXHQkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkXHUwMDNjIC1vICRAXG4gXG4rJChPVVRQVVQpL2JpbmZtdF9iaW5kX2ludGVycDogYmluZm10X2JpbmRfaW50ZXJwLmNcbitcdCQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICRcdTAwM2MgLW8gJEBcbitcbiAkKE9VVFBVVCkvYmluZm10X2xvYWRlcl9wYXlsb2FkOiBiaW5mbXRfbG9hZGVyX3BheWxvYWQuYyBiaW5mbXRfbWlzY19jb21tb24uaFxuIFx0JChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLWZQSUUgLXBpZSAkXHUwMDNjIC1vICRAXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfYmluZF9pbnRlcnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X2JpbmRfaW50ZXJwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wNmQ2NTA2Mjg1NmI3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9iaW5kX2ludGVycC5jXG5AQCAtMCwwICsxLDE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFRlc3QgaW50ZXJwcmV0ZXIgZm9yIHRoZSBib3VuZC1pbnRlcnByZXRlciBjYXNlIG9mIHRoZSBiaW5mbXRfbWlzY19icGZcbisgKiBzZWxmdGVzdC4gVHdvIGNvcGllcyBhcmUgaW5zdGFsbGVkIGF0IGRpZmZlcmVudCBwYXRocyBhbmQgYm91bmQgdG8gb25lXG4rICogZW50cnkgdW5kZXIgZGlmZmVyZW50IG5hbWVzOyBwcmludGluZyBhcmd2WzBdIC0gdGhlIHBhdGggdGhlIGtlcm5lbCByYW5cbisgKiB0aGlzIGNvcHkgdW5kZXIgLSB0ZWxscyB0aGUgaGFybmVzcyB3aGljaCBvZiB0aGVtIHRoZSBsb2FkIHByb2dyYW0gcGlja2VkLlxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0cHJpbnRmKFwiQklORF9SQU4gJXNcXG5cIiwgYXJnYyBcdTAwM2UgMCA/IGFyZ3ZbMF0gOiBcIlwiKTtcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xuaW5kZXggMDY5NzY4YTY2YmEwNy4uMmM3YjYzMDc1ZjFkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbkBAIC05LDcgKzksNyBAQFxuICAqXG4gICogICAgIGVjaG8gJzpuYW1lOkI6Ojo6XHUwMDNjaGFuZGxlclx1MDAzZTonIFx1MDAzZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJcbiAgKlxuLSAqIFRocmVlIHNlbGYtY29udGFpbmVkIGNhc2VzIGFyZSBleGVyY2lzZWQ6XG4rICogRml2ZSBzZWxmLWNvbnRhaW5lZCBjYXNlcyBhcmUgZXhlcmNpc2VkOlxuICAqXG4gICogICAxLiBicGZfaW50ZXJwOiB0aGUgbWF0Y2ggcHJvZ3JhbSBtYXRjaGVzIGEgc3ludGhldGljIGFhcmNoNjQgRUxGIGhlYWRlclxuICAqICAgICAgZnJvbSB0aGUgcHJlZmV0Y2hlZCBicHJtLVx1MDAzZWJ1ZiBhbmQgdGhlIGxvYWQgcHJvZ3JhbSByb3V0ZXMgaXQgdG8gYVxuQEAgLTI2LDYgKzI2LDExIEBAXG4gICogICAgICAoYmluZm10X2xvYWRlcl9wYXlsb2FkKSBydW5zIGFzIHRoZSBtYWluIGltYWdlIHdpdGggdGhlIHNlbGVjdGVkXG4gICogICAgICBpbnRlcnByZXRlciBzdWJzdGl0dXRlZCBmb3IgaXRzIFBUX0lOVEVSUCBhbmQgYXNzZXJ0cyB0aGUgbmF0aXZlXG4gICogICAgICBpZGVudGl0eSBmcm9tIGluc2lkZS5cbisgKiAgIDUuIGludGVycF9iaW5kOiBhbiBlbnRyeSByZWdpc3RlcmVkIGRpc2FibGVkIHdpdGggJ0QnIGlzIGdpdmVuIGl0c1xuKyAqICAgICAgaW50ZXJwcmV0ZXJzIG9uZSB3cml0ZSBhdCBhIHRpbWUsIGFuZCB0aGUgbG9hZCBwcm9ncmFtIHBpY2tzIG9uZSBieVxuKyAqICAgICAgbmFtZSBwZXIgZXhlYy4gUmVwbGFjaW5nIHdoYXQgdGhlIHBhdGggaG9sZHMgYWZ0ZXJ3YXJkcyBjaGFuZ2VzXG4rICogICAgICBub3RoaW5nLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgYmluZGluZyBhIGZpbGUgcmF0aGVyIHRoYW4gcmVzb2x2aW5nXG4rICogICAgICBhIG5hbWUgYXQgZXhlYyB0aW1lLiBFbmFibGluZyB0aGUgZW50cnkgc2VhbHMgaXQuXG4gICpcbiAgKiBUaGUgZmlyc3QgdHdvIHJvdXRlIHRvIGEgdGVzdCBpbnRlcnByZXRlciB0aGF0IHByaW50cyBCUEZfSU5URVJQX1JBTixcbiAgKiBwcm92aW5nIHRoZSBwcm9ncmFtJ3MgY2hvc2VuIGludGVycHJldGVyIGFjdHVhbGx5IHJhbi5cbkBAIC01NCw2ICs1OSwxMiBAQFxuICNkZWZpbmUgVFJBTlNfRVhQRUNUXHRcIlRSQU5TUEFSRU5UX09LXCJcbiAjZGVmaW5lIExPQURFUl9JTlRFUlBcdFwiL3RtcC9iaW5mbXRfbG9hZGVyX2ludGVycFwiXG4gI2RlZmluZSBMT0FERVJfUEFUSFx0XCIvdG1wL2JpbmZtdF9icGZfbG9hZGVyLmxkcnRlc3RcIlxuKyNkZWZpbmUgQklORF9GSVJTVFx0XCIvdG1wL2JpbmZtdF9iaW5kX2ZpcnN0XCJcbisjZGVmaW5lIEJJTkRfU0VDT05EXHRcIi90bXAvYmluZm10X2JpbmRfc2Vjb25kXCJcbisjZGVmaW5lIEJJTkRfQVJNX1BBVEhcdFwiL3RtcC9iaW5mbXRfYmluZF9hcm1cIlxuKyNkZWZpbmUgQklORF9SSVNDVl9QQVRIXHRcIi90bXAvYmluZm10X2JpbmRfcmlzY3ZcIlxuKyNkZWZpbmUgQklORF9FWFBFQ1RcdFwiQklORF9SQU4gXCJcbisjZGVmaW5lIEJJTkRfTUFYXHQxMDBcbiBcbiAvKiBBIG1pbmltYWwgNjQtYml0IGxpdHRsZS1lbmRpYW4gRUxGIGhlYWRlciwgcGFkZGVkIHRvIHRoZSByZWFkIHNpemUuICovXG4gc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSlcbkBAIC04MiwxMSArOTMsMTcgQEAgc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJlZ2lzdGVyX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmhhbmRsZXIpXG4rLypcbisgKiBSZWdpc3RlciBhICdCJyBlbnRyeSBmb3IgQGhhbmRsZXIuIFdpdGggQGZsYWdzIFwiRFwiIHRoZSBlbnRyeSBpcyBjcmVhdGVkXG4rICogZGlzYWJsZWQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzLlxuKyAqL1xuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaGFuZGxlcixcbitcdFx0XHQgIGNvbnN0IGNoYXIgKmZsYWdzKVxuIHtcbiBcdGNoYXIgcnVsZVtQQVRIX01BWF07XG4gXG4tXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFwiOiVzOkI6Ojo6JXM6XCIsIG5hbWUsIGhhbmRsZXIpO1xuK1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcIjolczpCOjo6OiVzOiVzXCIsIG5hbWUsIGhhbmRsZXIsXG4rXHRcdCBmbGFncyA/IGZsYWdzIDogXCJcIik7XG4gXHRyZXR1cm4gd3JpdGVfcmVnKHJ1bGUpO1xuIH1cbiBcbkBAIC0xMDYsNiArMTIzLDMwIEBAIHN0YXRpYyBpbnQgY2hlY2tfb3V0cHV0KGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqZXhwZWN0ZWQpXG4gXHRyZXR1cm4gc3RybmNtcChidWYsIGV4cGVjdGVkLCBzdHJsZW4oZXhwZWN0ZWQpKSA/IC0xIDogMDtcbiB9XG4gXG4rLyogRG9lcyB0aGUga2VybmVsIEJURiBrbm93IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpPyAqL1xuK3N0YXRpYyBib29sIGhhdmVfYmluZm10X21pc2Nfb3BzKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0ZiAqYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4rXHRib29sIGhhdmU7XG4rXG4rXHRoYXZlID0gYnRmIFx1MDAyNlx1MDAyNiBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXCJiaW5mbXRfbWlzY19vcHNcIixcbitcdFx0XHRcdFx0ICAgICBCVEZfS0lORF9TVFJVQ1QpIFx1MDAzZT0gMDtcbitcdGJ0Zl9fZnJlZShidGYpO1xuK1x0cmV0dXJuIGhhdmU7XG4rfVxuK1xuKy8qIFRoZSByZWFzb24gYnBmIGhhbmRsZXIgY2FzZXMgY2Fubm90IHJ1biBoZXJlLCBOVUxMIGlmIHRoZXkgY2FuLiAqL1xuK3N0YXRpYyBjb25zdCBjaGFyICpicGZfaGFuZGxlcl91bnN1cHBvcnRlZCh2b2lkKVxuK3tcbitcdGlmIChnZXR1aWQoKSAhPSAwKVxuK1x0XHRyZXR1cm4gXCJ0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3RcIjtcbitcdGlmICghaGF2ZV9iaW5mbXRfbWlzY19vcHMoKSlcbitcdFx0cmV0dXJuIFwibm8gc3RydWN0IGJpbmZtdF9taXNjX29wcyBpbiB0aGUga2VybmVsIEJURiAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcIjtcbitcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXG4rXHRcdHJldHVybiBcIm5vIGJpbmZtdF9taXNjXCI7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gLyogQW4gYXR0YWNoZWQgaGFuZGxlciB3aXRoIGl0cyAnQicgZW50cnkgYWN0aXZhdGVkLiAqL1xuIHN0cnVjdCBicGZfY2FzZSB7XG4gXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuQEAgLTExNSwxMCArMTU2LDEyIEBAIHN0cnVjdCBicGZfY2FzZSB7XG4gXG4gLypcbiAgKiBMb2FkIEBvYmpmaWxlLCBhdHRhY2ggaXRzIHN0cnVjdF9vcHMgbWFwIEBoYW5kbGVyICh3aGljaCBwdWJsaXNoZXMgdGhlXG4tICogaGFuZGxlcikgYW5kIGFjdGl2YXRlIGEgJ0InIGVudHJ5IG5hbWVkIEBlbnRyeSB0aGF0IHJlZmVyZW5jZXMgaXQuXG4rICogaGFuZGxlcikgYW5kIHJlZ2lzdGVyIGEgJ0InIGVudHJ5IG5hbWVkIEBlbnRyeSB0aGF0IHJlZmVyZW5jZXMgaXQsIHdpdGhcbisgKiBAZmxhZ3MgYXMgdGhlIGVudHJ5J3MgcmVnaXN0ZXItc3RyaW5nIGZsYWdzLlxuICAqL1xuLXN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuLVx0XHRcdCAgY29uc3QgY2hhciAqaGFuZGxlciwgY29uc3QgY2hhciAqZW50cnkpXG4rc3RhdGljIGludCBicGZfY2FzZV9zdGFydF9mbGFncyhzdHJ1Y3QgYnBmX2Nhc2UgKmMsIGNvbnN0IGNoYXIgKm9iamZpbGUsXG4rXHRcdFx0XHRjb25zdCBjaGFyICpoYW5kbGVyLCBjb25zdCBjaGFyICplbnRyeSxcbitcdFx0XHRcdGNvbnN0IGNoYXIgKmZsYWdzKVxuIHtcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXG5AQCAtMTQ4LDcgKzE5MSw3IEBAIHN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuIFx0XHRjLVx1MDAzZWxpbmsgPSBOVUxMO1xuIFx0XHRnb3RvIGZhaWw7XG4gXHR9XG4tXHRpZiAocmVnaXN0ZXJfZW50cnkoZW50cnksIGhhbmRsZXIpKSB7XG4rXHRpZiAocmVnaXN0ZXJfZW50cnkoZW50cnksIGhhbmRsZXIsIGZsYWdzKSkge1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJyZWdpc3RlciAnQicgZW50cnkgJyVzJyBmYWlsZWRcXG5cIiwgZW50cnkpO1xuIFx0XHRnb3RvIGZhaWw7XG4gXHR9XG5AQCAtMTYyLDYgKzIwNSwxMiBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4rc3RhdGljIGludCBicGZfY2FzZV9zdGFydChzdHJ1Y3QgYnBmX2Nhc2UgKmMsIGNvbnN0IGNoYXIgKm9iamZpbGUsXG4rXHRcdFx0ICBjb25zdCBjaGFyICpoYW5kbGVyLCBjb25zdCBjaGFyICplbnRyeSlcbit7XG4rXHRyZXR1cm4gYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoYywgb2JqZmlsZSwgaGFuZGxlciwgZW50cnksIE5VTEwpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBicGZfY2FzZV9zdG9wKHN0cnVjdCBicGZfY2FzZSAqYylcbiB7XG4gXHR1bnJlZ2lzdGVyKGMtXHUwMDNlZW50cnkpO1xuQEAgLTE5MCwyMyArMjM5LDEwIEBAIEZJWFRVUkUoYnBmX2hhbmRsZXIpIHtcbiBGSVhUVVJFX1NFVFVQKGJwZl9oYW5kbGVyKVxuIHtcbiBcdGNoYXIgc3JjW1BBVEhfTUFYXTtcbi1cdHN0cnVjdCBidGYgKmJ0Zjtcbi1cbi1cdGlmIChnZXR1aWQoKSAhPSAwKVxuLVx0XHRTS0lQKHJldHVybiwgXCJ0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3RcIik7XG4tXG4tXHQvKiBUaGUga2VybmVsIG11c3Qga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKS4gKi9cbi1cdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuLVx0aWYgKCFidGYgfHwgYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwiYmluZm10X21pc2Nfb3BzXCIsXG4tXHRcdFx0XHRcdCAgIEJURl9LSU5EX1NUUlVDVCkgXHUwMDNjIDApIHtcbi1cdFx0YnRmX19mcmVlKGJ0Zik7XG4tXHRcdFNLSVAocmV0dXJuLFxuLVx0XHQgICAgIFwibm8gc3RydWN0IGJpbmZtdF9taXNjX29wcyBpbiB0aGUga2VybmVsIEJURiAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcIik7XG4tXHR9XG4tXHRidGZfX2ZyZWUoYnRmKTtcbitcdGNvbnN0IGNoYXIgKndoeSA9IGJwZl9oYW5kbGVyX3Vuc3VwcG9ydGVkKCk7XG4gXG4tXHRpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKVxuLVx0XHRTS0lQKHJldHVybiwgXCJubyBiaW5mbXRfbWlzY1wiKTtcbitcdGlmICh3aHkpXG4rXHRcdFNLSVAocmV0dXJuLCBcIiVzXCIsIHdoeSk7XG4gXG4gXHQvKiBTaGFyZWQgdGVzdCBpbnRlcnByZXRlci4gKi9cbiBcdEFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksIFwiYmluZm10X2JwZl9pbnRlcnBcIiksIDApO1xuQEAgLTI1OCw3ICsyOTQsNyBAQCBURVNUX0YoYnBmX2hhbmRsZXIsIHRyYW5zcGFyZW50X2Rpc3BhdGNoKVxuIFx0Y2hhciBzcmNbUEFUSF9NQVhdLCBjbWRbUEFUSF9NQVggKyAxNl07XG4gXG4gXHQvKiBQcm9iZSBmb3IgdHJhbnNwYXJlbnQtbW9kZSBzdXBwb3J0IHZpYSBpdHMgc3RhdGljIGNvdW50ZXJwYXJ0LiAqL1xuLVx0aWYgKGJpbmZtdF9mbGFnX3N1cHBvcnRlZCgnVCcpKVxuK1x0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ1QnKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwia2VybmVsIHdpdGhvdXQgdHJhbnNwYXJlbnQgbW9kZVwiKTtcbiBcbiBcdEFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksIFwiYmluZm10X3RyYW5zcGFyZW50X2ludGVycFwiKSwgMCk7XG5AQCAtMzA3LDQgKzM0MywyMjYgQEAgVEVTVF9GKGJwZl9oYW5kbGVyLCBsb2FkZXJfc3Vic3RpdHV0aW9uKVxuIFx0dW5saW5rKExPQURFUl9JTlRFUlApO1xuIH1cbiBcbisvKiBUaGUgZXJybm8gYW4gZXhlYyBvZiBAcGF0aCBmYWlscyB3aXRoLCAwIGlmIGl0IHN1Y2NlZWRlZC4gKi9cbitzdGF0aWMgaW50IGV4ZWNfZXJybm8oY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRpbnQgc3RhdHVzO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGV4ZWNsKHBhdGgsIHBhdGgsIChjaGFyICopTlVMTCk7XG4rXHRcdF9leGl0KGVycm5vKTtcbitcdH1cbitcdGlmIChwaWQgXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCkgIT0gcGlkIHx8ICFXSUZFWElURUQoc3RhdHVzKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XG4rfVxuK1xuKy8qIEluc3RhbGwgYSBjb3B5IG9mIHRoZSBib3VuZC1pbnRlcnByZXRlciB0ZXN0IGJpbmFyeSBhdCBAcGF0aC4gKi9cbitzdGF0aWMgaW50IGluc3RhbGxfaW50ZXJwKGNvbnN0IGNoYXIgKnBhdGgpXG4re1xuK1x0Y2hhciBzcmNbUEFUSF9NQVhdO1xuK1xuK1x0aWYgKGFydGlmYWN0X3BhdGgoc3JjLCBzaXplb2Yoc3JjKSwgXCJiaW5mbXRfYmluZF9pbnRlcnBcIikpXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiBjb3B5X2ZpbGUoc3JjLCBwYXRoKTtcbit9XG4rXG4rLyogQmluZCBAcGF0aCB0byBAZW50cnkgdW5kZXIgQG5hbWUsIHRoZSAnKycgY29tbWFuZCBvZiBhIGRpc2FibGVkIGVudHJ5LiAqL1xuK3N0YXRpYyBpbnQgZW50cnlfYmluZChjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRjaGFyIGNtZFtQQVRIX01BWF07XG4rXG4rXHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcIislcyAlc1xcblwiLCBuYW1lLCBwYXRoKTtcbitcdHJldHVybiBlbnRyeV9jb21tYW5kKGVudHJ5LCBjbWQpO1xuK31cbitcbitGSVhUVVJFKGJvdW5kX2ludGVycCkge1xuK1x0Y2hhciBvYmpbUEFUSF9NQVhdO1xuK1x0c3RydWN0IGJwZl9jYXNlIGM7XG4rXHRib29sIHN0YXJ0ZWQ7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGJvdW5kX2ludGVycClcbit7XG4rXHRjb25zdCBjaGFyICp3aHkgPSBicGZfaGFuZGxlcl91bnN1cHBvcnRlZCgpO1xuK1xuK1x0aWYgKHdoeSlcbitcdFx0U0tJUChyZXR1cm4sIFwiJXNcIiwgd2h5KTtcbitcdGlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCdEJykpIHtcbitcdFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJrZXJuZWwgd2l0aG91dCB0aGUgJ0QnIGZsYWdcIik7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEoaW5zdGFsbF9pbnRlcnAoQklORF9GSVJTVCksIDApO1xuK1x0QVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfU0VDT05EKSwgMCk7XG4rXG4rXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzZWxmLVx1MDAzZW9iaiwgc2l6ZW9mKHNlbGYtXHUwMDNlb2JqKSxcbitcdFx0XHRcdFwiaW50ZXJwX2JpbmQuYnBmLm9cIiksIDApO1xuK1xuK1x0LypcbitcdCAqIFJlZ2lzdGVyZWQgZGlzYWJsZWQsIHNvIGl0IGNhbm5vdCBiZSBtYXRjaGVkIHlldCBhbmQgY2FuIHN0aWxsIGJlXG4rXHQgKiBnaXZlbiBpbnRlcnByZXRlcnMuIEVhY2ggcGF0aCBpcyByZXNvbHZlZCBvbmNlLCBieSBpdHMgd3JpdGUoMik7XG4rXHQgKiBmcm9tIGhlcmUgb24gdGhlIGVudHJ5IGhvbGRzIHRoZSBmaWxlcyB0aGVtc2VsdmVzLlxuK1x0ICovXG4rXHRBU1NFUlRfRVEoYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoXHUwMDI2c2VsZi1cdTAwM2VjLCBzZWxmLVx1MDAzZW9iaiwgXCJpbnRlcnBfYmluZFwiLFxuK1x0XHRcdFx0ICAgICAgIFwidGVzdF9pbnRlcnBfYmluZFwiLCBcIkRcIiksIDApO1xuK1x0c2VsZi1cdTAwM2VzdGFydGVkID0gdHJ1ZTtcbitcbitcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcImZpcnN0XCIsIEJJTkRfRklSU1QpLCAwKTtcbitcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcInNlY29uZFwiLCBCSU5EX1NFQ09ORCksIDApO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKGJvdW5kX2ludGVycClcbit7XG4rXHRpZiAoc2VsZi1cdTAwM2VzdGFydGVkKVxuK1x0XHRicGZfY2FzZV9zdG9wKFx1MDAyNnNlbGYtXHUwMDNlYyk7XG4rXHR1bmxpbmsoQklORF9GSVJTVCk7XG4rXHR1bmxpbmsoQklORF9TRUNPTkQpO1xuK1x0dW5saW5rKEFBUkNINjRfUEFUSCk7XG4rXHR1bmxpbmsoQklORF9SSVNDVl9QQVRIKTtcbitcdHVubGluayhCSU5EX0FSTV9QQVRIKTtcbit9XG4rXG4rLyogRW5hYmxpbmcgaXMgd2hhdCBtYWtlcyB0aGUgY29uZmlndXJlZCBlbnRyeSBtYXRjaGFibGUuICovXG4rc3RhdGljIGludCBhY3RpdmF0ZShjb25zdCBjaGFyICplbnRyeSlcbit7XG4rXHRyZXR1cm4gZW50cnlfY29tbWFuZChlbnRyeSwgXCIxXFxuXCIpO1xuK31cbitcbisvKiBPbmUgZW50cnksIG9uZSBpbnRlcnByZXRlciBwZXIgZ3Vlc3QgYXJjaGl0ZWN0dXJlLCBwaWNrZWQgcGVyIGV4ZWMuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgc2VsZWN0c19ieV9uYW1lKVxuK3tcbitcdEFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQUFSQ0g2NF9QQVRILCBFTV9BQVJDSDY0KSwgMCk7XG4rXHRBU1NFUlRfRVEoY3JlYXRlX2Zha2VfZWxmKEJJTkRfUklTQ1ZfUEFUSCwgRU1fUklTQ1YpLCAwKTtcbitcbitcdC8qIERpc2FibGVkLCBzbyBpdCBkb2VzIG5vdCBtYXRjaCBhbmQgbm8gZm9ybWF0IGNsYWltcyB0aGUgYmluYXJ5LiAqL1xuK1x0RVhQRUNUX0VRKGV4ZWNfZXJybm8oQUFSQ0g2NF9QQVRIKSwgRU5PRVhFQyk7XG4rXG4rXHRBU1NFUlRfRVEoYWN0aXZhdGUoXCJ0ZXN0X2ludGVycF9iaW5kXCIpLCAwKTtcbitcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XG4rXHRFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEJJTkRfUklTQ1ZfUEFUSCwgQklORF9FWFBFQ1QgQklORF9TRUNPTkQpLCAwKTtcbit9XG4rXG4rLyogV2hhdCB3YXMgYm91bmQgaXMgd2hhdCBydW5zLCB3aGF0ZXZlciB0aGUgcGF0aCBob2xkcyBhZnRlcndhcmRzLiAqL1xuK1RFU1RfRihib3VuZF9pbnRlcnAsIHBhdGhfbm9fbG9uZ2VyX2RlY2lkZXMpXG4re1xuK1x0Y2hhciBvdGhlcltQQVRIX01BWF07XG4rXG4rXHRBU1NFUlRfRVEoY3JlYXRlX2Zha2VfZWxmKEFBUkNINjRfUEFUSCwgRU1fQUFSQ0g2NCksIDApO1xuK1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwidGVzdF9pbnRlcnBfYmluZFwiKSwgMCk7XG4rXG4rXHQvKiBCb3VuZCBpbnRlcnByZXRlcnMgYXJlIHBpbm5lZCBhZ2FpbnN0IHdyaXRlcywgZXhhY3RseSBsaWtlICdGJy4gKi9cbitcdEVYUEVDVF9UUlVFKHdyaXRlX2RlbmllZChCSU5EX0ZJUlNUKSk7XG4rXG4rXHQvKiBSZXBsYWNlIHRoZSBwYXRoIHdpdGggYSBkaWZmZXJlbnQgYmluYXJ5OiBhIG5ldyBmaWxlLCBuZXcgaW5vZGUuICovXG4rXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChvdGhlciwgc2l6ZW9mKG90aGVyKSwgXCJiaW5mbXRfYnBmX2ludGVycFwiKSwgMCk7XG4rXHRBU1NFUlRfRVEodW5saW5rKEJJTkRfRklSU1QpLCAwKTtcbitcdEFTU0VSVF9FUShjb3B5X2ZpbGUob3RoZXIsIEJJTkRfRklSU1QpLCAwKTtcbitcbitcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XG4rfVxuK1xuKy8qIFRoZSBlbnRyeSByZXBvcnRzIHdoYXQgaXQgYm91bmQsIHVuZGVyIHRoZSBuYW1lcyBpdCBib3VuZCB0aGVtIGFzLiAqL1xuK1RFU1RfRihib3VuZF9pbnRlcnAsIGVudHJ5X3JlcG9ydHNfYmluZGluZ3MpXG4re1xuK1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoXCJ0ZXN0X2ludGVycF9iaW5kXCIsXG4rXHRcdFx0XHRcImJwZi1pbnRlcnByZXRlciBmaXJzdCBcIiBCSU5EX0ZJUlNUKSk7XG4rXHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhcInRlc3RfaW50ZXJwX2JpbmRcIixcbitcdFx0XHRcdFwiYnBmLWludGVycHJldGVyIHNlY29uZCBcIiBCSU5EX1NFQ09ORCkpO1xuK31cbitcbisvKiBTZWxlY3RpbmcgYSBuYW1lIHRoZSBlbnRyeSBkaWQgbm90IGJpbmQgZmFpbHMgdGhlIGV4ZWMuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgdW5ib3VuZF9uYW1lX2ZhaWxzKVxuK3tcbitcdEFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQklORF9BUk1fUEFUSCwgRU1fQVJNKSwgMCk7XG4rXHRBU1NFUlRfRVEoYWN0aXZhdGUoXCJ0ZXN0X2ludGVycF9iaW5kXCIpLCAwKTtcbitcbitcdEVYUEVDVF9FUShleGVjX2Vycm5vKEJJTkRfQVJNX1BBVEgpLCBFTk9FTlQpO1xuK31cbitcbisvKiBBY3RpdmF0aW5nIHNlYWxzIGl0OiB3aGF0IGNhbiBiZSBtYXRjaGVkIGNhbm5vdCBiZSBjaGFuZ2VkLiAqL1xuK1RFU1RfRihib3VuZF9pbnRlcnAsIHNlYWxlZF9vbmNlX2FjdGl2ZSlcbit7XG4rXHRBU1NFUlRfRVEoYWN0aXZhdGUoXCJ0ZXN0X2ludGVycF9iaW5kXCIpLCAwKTtcbitcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcInRoaXJkXCIsIEJJTkRfU0VDT05EKSwgLUVCVVNZKTtcbitcdEVYUEVDVF9GQUxTRShlbnRyeV9zaG93cyhcInRlc3RfaW50ZXJwX2JpbmRcIixcbitcdFx0XHRcdCBcImJwZi1pbnRlcnByZXRlciB0aGlyZCBcIiBCSU5EX1NFQ09ORCkpO1xuK31cbitcbisvKiBUaGUgc2VhbCBpcyBmb3IgZ29vZDogZGlzYWJsaW5nIHRoZSBlbnRyeSBhZ2FpbiByZW9wZW5zIG5vdGhpbmcuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgZGlzYWJsZV9kb2VzX25vdF91bnNlYWwpXG4re1xuK1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwidGVzdF9pbnRlcnBfYmluZFwiKSwgMCk7XG4rXHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChcInRlc3RfaW50ZXJwX2JpbmRcIiwgXCIwXFxuXCIpLCAwKTtcbitcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcInRoaXJkXCIsIEJJTkRfU0VDT05EKSwgLUVCVVNZKTtcbit9XG4rXG4rLyogQW4gZW50cnkgcmVnaXN0ZXJlZCB3aXRob3V0ICdEJyBpcyBzZWFsZWQgZnJvbSB0aGUgc3RhcnQuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgYm9ybl9zZWFsZWQpXG4re1xuK1x0LyogQSBzZWNvbmQgZW50cnkgZm9yIHRoZSBoYW5kbGVyIHRoZSBmaXh0dXJlIGFscmVhZHkgcHVibGlzaGVkLiAqL1xuK1x0QVNTRVJUX0VRKHJlZ2lzdGVyX2VudHJ5KFwidGVzdF9ib3JuX3NlYWxlZFwiLCBcImludGVycF9iaW5kXCIsIE5VTEwpLCAwKTtcbitcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9ib3JuX3NlYWxlZFwiLCBcImZpcnN0XCIsIEJJTkRfRklSU1QpLCAtRUJVU1kpO1xuK1x0dW5yZWdpc3RlcihcInRlc3RfYm9ybl9zZWFsZWRcIik7XG4rfVxuK1xuKy8qIEEgbmFtZSBpcyBib3VuZCBvbmNlOyBhIHNlY29uZCB1c2Ugb2YgaXQgaXMgcmVmdXNlZC4gKi9cbitURVNUX0YoYm91bmRfaW50ZXJwLCBkdXBsaWNhdGVfbmFtZV9yZWZ1c2VkKVxuK3tcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcImZpcnN0XCIsIEJJTkRfU0VDT05EKSwgLUVFWElTVCk7XG4rfVxuK1xuKy8qIEEgbmFtZSBpcyBhIHByaW50YWJsZSB3b3JkOiB0aGUgZW50cnkgZmlsZSByZXBvcnRzICduYW1lIHBhdGgnIGxpbmVzLiAqL1xuK1RFU1RfRihib3VuZF9pbnRlcnAsIG5hbWVfbXVzdF9iZV9wcmludGFibGUpXG4re1xuK1x0LyogQSBjb250cm9sIGNoYXJhY3RlciB3b3VsZCBmb3JnZSBhIGxpbmUgaW50byB0aGUgZW50cnkgZmlsZS4gKi9cbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcImFcXHRiXCIsIEJJTkRfRklSU1QpLCAtRUlOVkFMKTtcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcImFcXG5iXCIsIEJJTkRfRklSU1QpLCAtRUlOVkFMKTtcbitcbitcdC8qIEEgc3BhY2UgY2Fubm90IGV2ZW4gYmUgc3BlbGxlZDogdGhlIHBhdGggc3RhcnRzIGFmdGVyIHRoZSBmaXJzdCBvbmUuICovXG4rXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcInRlc3RfaW50ZXJwX2JpbmRcIiwgXCJhIGJcIiwgQklORF9GSVJTVCksIC1FSU5WQUwpO1xuK31cbitcbisvKiBUaGUgY29tbWFuZCBlbmRzIGF0IHRoZSB3cml0ZTogYnl0ZXMgcGFzdCBhbiBlbWJlZGRlZCBudWwgYXJlIHJlZnVzZWQuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgdHJhaWxpbmdfYnl0ZXNfcmVmdXNlZClcbit7XG4rXHRjaGFyIGNtZFtQQVRIX01BWF07XG4rXHRzaXplX3QgbGVuO1xuK1x0aW50IGZkO1xuK1xuK1x0LyogZW50cnlfY29tbWFuZCgpIGNhbm5vdCBzcGVsbCBhIG51bCwgc28gd3JpdGUgdGhlIGJ1ZmZlciByYXcuICovXG4rXHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcIitudWwgJXNcIiwgQklORF9GSVJTVCk7XG4rXHRsZW4gPSBzdHJsZW4oY21kKSArIDE7XG4rXHRtZW1jcHkoY21kICsgbGVuLCBcImp1bmtcIiwgc2l6ZW9mKFwianVua1wiKSk7XG4rXHRsZW4gKz0gc2l6ZW9mKFwianVua1wiKTtcbitcbitcdGZkID0gb3BlbihCSU5GTVRfRElSIFwiL3Rlc3RfaW50ZXJwX2JpbmRcIiwgT19XUk9OTFkgfCBPX0NMT0VYRUMpO1xuK1x0QVNTRVJUX0dFKGZkLCAwKTtcbitcdEVYUEVDVF9FUSh3cml0ZShmZCwgY21kLCBsZW4pLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7XG4rXHRjbG9zZShmZCk7XG4rXG4rXHRFWFBFQ1RfRkFMU0UoZW50cnlfc2hvd3MoXCJ0ZXN0X2ludGVycF9iaW5kXCIsXG4rXHRcdFx0XHQgXCJicGYtaW50ZXJwcmV0ZXIgbnVsIFwiIEJJTkRfRklSU1QpKTtcbit9XG4rXG4rLyogQW4gZW50cnkgYmluZHMgYXQgbW9zdCBCSU5EX01BWCBpbnRlcnByZXRlcnMuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKVxuK3tcbitcdGNoYXIgbmFtZVsxNl07XG4rXHRpbnQgaTtcbitcbitcdC8qIFRoZSBmaXh0dXJlIGJvdW5kIFwiZmlyc3RcIiBhbmQgXCJzZWNvbmRcIiBhbHJlYWR5LiAqL1xuK1x0Zm9yIChpID0gMjsgaSBcdTAwM2MgQklORF9NQVg7IGkrKykge1xuK1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwibiVkXCIsIGkpO1xuK1x0XHRBU1NFUlRfRVEoZW50cnlfYmluZChcInRlc3RfaW50ZXJwX2JpbmRcIiwgbmFtZSwgQklORF9GSVJTVCksIDApO1xuK1x0fVxuK1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCJ0ZXN0X2ludGVycF9iaW5kXCIsIFwib3ZlclwiLCBCSU5EX0ZJUlNUKSwgLUVOT1NQQyk7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfY29tbW9uLmhcbmluZGV4IGM2OTAwZGVkMDE5ZmMuLjc0NWFmZjg0ZGM3ODcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXG5AQCAtOTMsNiArOTMsNDUgQEAgc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSlcbiBcdH1cbiB9XG4gXG4rLyogV3JpdGUgQGxpbmUgdG8gQGVudHJ5J3MgZmlsZSwgcmVwb3J0aW5nIHRoZSBlcnJubyBpdCB3YXMgcmVmdXNlZCB3aXRoLiAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGVudHJ5X2NvbW1hbmQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKmxpbmUpXG4re1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcdGludCBmZCwgcmV0dmFsID0gMDtcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4obGluZSk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEJJTkZNVF9ESVIgXCIvJXNcIiwgZW50cnkpO1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1lcnJubztcbitcdGlmICh3cml0ZShmZCwgbGluZSwgbGVuKSAhPSAoc3NpemVfdClsZW4pXG4rXHRcdHJldHZhbCA9IC1lcnJubztcbitcdGNsb3NlKGZkKTtcbitcdHJldHVybiByZXR2YWw7XG4rfVxuK1xuKy8qIERvZXMgQGVudHJ5J3MgZmlsZSByZXBvcnQgQGxpbmU/ICovXG4rc3RhdGljIGlubGluZSBib29sIGVudHJ5X3Nob3dzKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpsaW5lKVxuK3tcbitcdGNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZltQQVRIX01BWF07XG4rXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXHRGSUxFICpmcDtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgQklORk1UX0RJUiBcIi8lc1wiLCBlbnRyeSk7XG4rXHRmcCA9IGZvcGVuKHBhdGgsIFwiclwiKTtcbitcdGlmICghZnApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkpIHtcbitcdFx0YnVmW3N0cmNzcG4oYnVmLCBcIlxcblwiKV0gPSAnXFwwJztcbitcdFx0aWYgKCFzdHJjbXAoYnVmLCBsaW5lKSkge1xuK1x0XHRcdGZvdW5kID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0ZmNsb3NlKGZwKTtcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4gLyogTW91bnQgYmluZm10X21pc2MgdW5sZXNzIGl0IGFscmVhZHkgaXMsIGFuZCByZXBvcnQgd2hldGhlciBpdCBpcyB1c2FibGUuICovXG4gc3RhdGljIGlubGluZSBib29sIGJpbmZtdF9taXNjX2F2YWlsYWJsZSh2b2lkKVxuIHtcbkBAIC0xMTcsMTYgKzE1NiwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBhcnRpZmFjdF9wYXRoKGNoYXIgKm91dCwgc2l6ZV90IHN6LCBjb25zdCBjaGFyICpuYW1lKVxuIH1cbiBcbiAvKiBQcm9iZSBrZXJuZWwgc3VwcG9ydCBmb3IgYSByZWdpc3RyYXRpb24gZmxhZyB3aXRoIGEgdGhyb3dhd2F5IGVudHJ5LiAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpXG4rc3RhdGljIGlubGluZSBib29sIGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpXG4ge1xuIFx0Y2hhciBydWxlWzY0XTtcbiBcbiBcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCI6Ym1fZmxhZ19wcm9iZTpFOjpibXByb2JlOjovYmluL3RydWU6JWNcIixcbiBcdFx0IGZsYWcpO1xuIFx0aWYgKHdyaXRlX3JlZyhydWxlKSlcbi1cdFx0cmV0dXJuIC0xO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR1bnJlZ2lzdGVyKFwiYm1fZmxhZ19wcm9iZVwiKTtcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDdjOWU4YTRlZTQyYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXG5AQCAtMCwwICsxLDE3MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBUZXN0IHRoZSAnRCcgKHJlZ2lzdGVyIGRpc2FibGVkKSBmbGFnIG9mIGJpbmZtdF9taXNjLiBBbiBlbnRyeVxuKyAqIHJlZ2lzdGVyZWQgd2l0aCBpdCBleGlzdHMgYnV0IGNhbm5vdCBiZSBtYXRjaGVkIHVudGlsIHVzZXJzcGFjZSBlbmFibGVzXG4rICogaXQsIHdoaWNoIHNwbGl0cyBhIHJlZ2lzdHJhdGlvbiBpbnRvIGNyZWF0ZSBhbmQgYWN0aXZhdGUuXG4rICpcbisgKiBOZWVkcyByb290IGZvciB0aGUgcmVnaXN0cmF0aW9uOyBubyBicGYgdG9vbGNoYWluIGludm9sdmVkLlxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJpbmZtdF9taXNjX2NvbW1vbi5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgTUFHSUNcdFx0XCIjRElTQUJMRUQtU0VMRlRFU1QjXCJcbisjZGVmaW5lIFRBUkdFVF9QQVRIXHRcIi90bXAvYmluZm10X2Rpc2FibGVkX3RhcmdldFwiXG4rI2RlZmluZSBJTlRFUlBfUEFUSFx0XCIvdG1wL2JpbmZtdF9kaXNhYmxlZF9pbnRlcnAuc2hcIlxuKyNkZWZpbmUgRU5UUllcdFx0XCJ0ZXN0X2Rpc2FibGVkXCJcbisjZGVmaW5lIFJVTEUoZmxhZ3MpXHRcIjpcIiBFTlRSWSBcIjpNOjA6XCIgTUFHSUMgXCI6OlwiIElOVEVSUF9QQVRIIFwiOlwiIGZsYWdzXG4rXG4rLyogVGhlIGludGVycHJldGVyIGV4aXRzIHdpdGggYSBjb2RlIHRoZSBoYXJuZXNzIGNhbiByZWNvZ25pc2UuICovXG4rI2RlZmluZSBFWElUX0lOVEVSUFx0N1xuK1xuKy8qIFRoZSB0YXJnZXQgb25seSBoYXMgdG8gY2FycnkgdGhlIG1hZ2ljOyBpdCBpcyBuZXZlciBhY3R1YWxseSBsb2FkZWQuICovXG4rc3RhdGljIGludCBjcmVhdGVfdGFyZ2V0KHZvaWQpXG4re1xuK1x0Y2hhciBidWZbMTI4XSA9IE1BR0lDIFwiXFxuXCI7XG4rXHRpbnQgZmQ7XG4rXG4rXHR1bmxpbmsoVEFSR0VUX1BBVEgpO1xuK1x0ZmQgPSBvcGVuKFRBUkdFVF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAod3JpdGUoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IChzc2l6ZV90KXNpemVvZihidWYpKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX2ludGVycCh2b2lkKVxuK3tcbitcdGNoYXIgYnVmWzY0XTtcbitcdGludCBmZDtcbitcbitcdHVubGluayhJTlRFUlBfUEFUSCk7XG4rXHRmZCA9IG9wZW4oSU5URVJQX1BBVEgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDc1NSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiIyEvYmluL3NoXFxuZXhpdCAlZFxcblwiLCBFWElUX0lOVEVSUCk7XG4rXHRpZiAod3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpICE9IChzc2l6ZV90KXN0cmxlbihidWYpKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIGNsb3NlKGZkKTtcbit9XG4rXG4rRklYVFVSRShkaXNhYmxlZCkge1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChkaXNhYmxlZClcbit7XG4rXHRpZiAoZ2V0dWlkKCkgIT0gMClcbitcdFx0U0tJUChyZXR1cm4sIFwidGVzdCBtdXN0IGJlIHJ1biBhcyByb290XCIpO1xuK1x0aWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSlcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gYmluZm10X21pc2NcIik7XG4rXG4rXHQvKiBTa2lwIHRoZSB3aG9sZSBzdWl0ZSBvbiBhIGtlcm5lbCB0aGF0IGRvZXMgbm90IGtub3cgJ0QnLiAqL1xuK1x0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ0QnKSkge1xuK1x0XHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCB3aXRob3V0IHRoZSAnRCcgZmxhZ1wiKTtcbitcdH1cbitcbitcdEFTU0VSVF9FUShjcmVhdGVfaW50ZXJwKCksIDApO1xuK1x0QVNTRVJUX0VRKGNyZWF0ZV90YXJnZXQoKSwgMCk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZGlzYWJsZWQpXG4re1xuK1x0dW5yZWdpc3RlcihFTlRSWSk7XG4rXHR1bmxpbmsoVEFSR0VUX1BBVEgpO1xuK1x0dW5saW5rKElOVEVSUF9QQVRIKTtcbit9XG4rXG4rLyogVGhlIGVudHJ5IGV4aXN0cyBidXQgZG9lcyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gKi9cbitURVNUX0YoZGlzYWJsZWQsIGluZXJ0X3VudGlsX2VuYWJsZWQpXG4re1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiRFwiKSksIDApO1xuK1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFwiZGlzYWJsZWRcIikpO1xuK1xuK1x0LyogTm90aGluZyBtYXRjaGVzIGl0LCBzbyBubyBiaW5hcnkgZm9ybWF0IGNsYWltcyB0aGUgdGFyZ2V0LiAqL1xuK1x0RVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgUlVOX0VOT0VYRUMpO1xuK1xuK1x0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFwiMVxcblwiKSwgMCk7XG4rXHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgXCJlbmFibGVkXCIpKTtcbitcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcbit9XG4rXG4rLyogV2l0aG91dCAnRCcgYW4gZW50cnkgaXMgbWF0Y2hhYmxlIHRoZSBtb21lbnQgaXQgaXMgcmVnaXN0ZXJlZC4gKi9cbitURVNUX0YoZGlzYWJsZWQsIGVuYWJsZWRfd2l0aG91dF90aGVfZmxhZylcbit7XG4rXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXCJcIikpLCAwKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImVuYWJsZWRcIikpO1xuK1x0RVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgRVhJVF9JTlRFUlApO1xuK31cbitcbisvKiAnRCcgaXMgc3BlbnQgb24gdGhlIHJlZ2lzdHJhdGlvbjogdGhlIGVudHJ5IGRvZXMgbm90IHJlcG9ydCBpdCBiYWNrLiAqL1xuK1RFU1RfRihkaXNhYmxlZCwgZmxhZ19ub3RfcmVwb3J0ZWQpXG4re1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiRFwiKSksIDApO1xuK1x0RVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImZsYWdzOiBEXCIpKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImZsYWdzOiBcIikpO1xuK31cbitcbisvKiBBIGRpc2FibGVkIGVudHJ5IGNhbiBiZSBkaXNhYmxlZCBhbmQgZW5hYmxlZCBsaWtlIGFueSBvdGhlci4gKi9cbitURVNUX0YoZGlzYWJsZWQsIHRvZ2dsZXNfbGlrZV9hbnlfZW50cnkpXG4re1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiRFwiKSksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFwiMVxcblwiKSwgMCk7XG4rXHRBU1NFUlRfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7XG4rXHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXCIwXFxuXCIpLCAwKTtcbitcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIFJVTl9FTk9FWEVDKTtcbitcdEFTU0VSVF9FUShlbnRyeV9jb21tYW5kKEVOVFJZLCBcIjFcXG5cIiksIDApO1xuK1x0RVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgRVhJVF9JTlRFUlApO1xuK31cbitcbisvKiAnRCcgY29tcG9zZXMgd2l0aCB0aGUgaW52b2NhdGlvbiBmbGFncyBhIHN0YXRpYyBlbnRyeSBjYW4gY2FycnkuICovXG4rVEVTVF9GKGRpc2FibGVkLCBjb21wb3Nlc193aXRoX2ludm9jYXRpb25fZmxhZ3MpXG4re1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiUERcIikpLCAwKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImRpc2FibGVkXCIpKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImZsYWdzOiBQXCIpKTtcbit9XG4rXG4rLyogJy0xJyB0byB0aGUgc3RhdHVzIGZpbGUgc3dlZXBzIGEgc3RhZ2VkIGVudHJ5IHdpdGggZXZlcnl0aGluZyBlbHNlLiAqL1xuK1RFU1RfRihkaXNhYmxlZCwgcmVtb3ZlZF9ieV9yZW1vdmVfYWxsKVxuK3tcbitcdGludCBmZDtcbitcbitcdEFTU0VSVF9FUSh3cml0ZV9yZWcoUlVMRShcIkRcIikpLCAwKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImRpc2FibGVkXCIpKTtcbitcbitcdGZkID0gb3BlbihCSU5GTVRfRElSIFwiL3N0YXR1c1wiLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRBU1NFUlRfR0UoZmQsIDApO1xuK1x0QVNTRVJUX0VRKHdyaXRlKGZkLCBcIi0xXCIsIDIpLCAyKTtcbitcdGNsb3NlKGZkKTtcbitcbitcdEVYUEVDVF9ORShhY2Nlc3MoQklORk1UX0RJUiBcIi9cIiBFTlRSWSwgRl9PSyksIDApO1xuK31cbitcbisvKiBBIGZpbGUgaGFuZGxlIGhlbGQgYWNyb3NzIGEgcmVtb3ZhbCBjYW5ub3QgcmVzdXJyZWN0IHRoZSBlbnRyeS4gKi9cbitURVNUX0YoZGlzYWJsZWQsIG5vX3Jlc3VycmVjdGlvbl9hZnRlcl9yZW1vdmUpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiRFwiKSksIDApO1xuK1x0ZmQgPSBvcGVuKEJJTkZNVF9ESVIgXCIvXCIgRU5UUlksIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXG4rXHRBU1NFUlRfRVEod3JpdGUoZmQsIFwiLTFcIiwgMiksIDIpO1xuK1x0RVhQRUNUX05FKGFjY2VzcyhCSU5GTVRfRElSIFwiL1wiIEVOVFJZLCBGX09LKSwgMCk7XG4rXG4rXHQvKiBBY2NlcHRlZCBsaWtlIGFueSB0b2dnbGUgb2YgYSByZW1vdmVkIGVudHJ5LCBidXQgcHVibGlzaGVzIG5vdGhpbmcuICovXG4rXHRFWFBFQ1RfRVEod3JpdGUoZmQsIFwiMVwiLCAxKSwgMSk7XG4rXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XG4rXHRjbG9zZShmZCk7XG4rfVxuK1xuK1RFU1RfSEFSTkVTU19NQUlOXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jXG5pbmRleCBkMGNiODQ1ZGYxZDMwLi4yZWJmNzNkZTgwMThjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmNcbkBAIC01Niw3ICs1Niw3IEBAIEZJWFRVUkVfU0VUVVAodHJhbnNwYXJlbnQpXG4gXHRBU1NFUlRfRVEoY3JlYXRlX3RhcmdldCgpLCAwKTtcbiBcbiBcdC8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAnVCcuICovXG4tXHRpZiAoYmluZm10X2ZsYWdfc3VwcG9ydGVkKCdUJykpIHtcbitcdGlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCdUJykpIHtcbiBcdFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xuIFx0XHRTS0lQKHJldHVybiwgXCJrZXJuZWwgd2l0aG91dCB0aGUgJ1QnIGZsYWdcIik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xY2U0NWNjYTIxNWYwXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jXG5AQCAtMCwwICsxLDc2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGJpbmZtdF9taXNjX29wcyBoYW5kbGVyIGZvciB0aGUgc2VsZnRlc3QncyBib3VuZC1pbnRlcnByZXRlciBjYXNlOiBvbmVcbisgKiBoYW5kbGVyLCBvbmUgZW50cnksIGFuIGludGVycHJldGVyIHBlciBndWVzdCBhcmNoaXRlY3R1cmUgLSBlYWNoIGJvdW5kIHRvXG4rICogYSBmaWxlIHdoZW4gdGhlIGVudHJ5IHdhcyByZWdpc3RlcmVkIHJhdGhlciB0aGFuIHRvIGEgcGF0aCByZXNvbHZlZCBhdFxuKyAqIGV4ZWMgdGltZS4gVGhlIGxvYWQgcHJvZ3JhbSBuYW1lcyB0aGUgb25lIGl0IHdhbnRzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZFxuKyAqIG5vdCBiaW5kIGZhaWxzIHRoZSBleGVjLCB3aGljaCB0aGUgaGFybmVzcyBjaGVja3MgdG9vLlxuKyAqL1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuKyNkZWZpbmUgRUlfQ0xBU1NcdDRcbisjZGVmaW5lIEVMRkNMQVNTNjRcdDJcbisjZGVmaW5lIEVfTUFDSElORV9PRkZcdDE4XG4rI2RlZmluZSBFTV9BUk1cdFx0NDBcbisjZGVmaW5lIEVNX0FBUkNINjRcdDE4M1xuKyNkZWZpbmUgRU1fUklTQ1ZcdDI0M1xuK1xuK2V4dGVybiBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfX3N6KSBfX2tzeW07XG4rXG4rLyogVGhlIGd1ZXN0IGFyY2hpdGVjdHVyZSBvZiBhIDY0LWJpdCBFTEYsIG9yIHplcm8gaWYgaXQgaXMgbm90IG9uZS4gKi9cbitzdGF0aWMgX191MTYgZWxmX21hY2hpbmUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbit7XG4rXHRpZiAoYnBybS1cdTAwM2VidWZbMF0gIT0gMHg3ZiB8fCBicHJtLVx1MDAzZWJ1ZlsxXSAhPSAnRScgfHxcbitcdCAgICBicHJtLVx1MDAzZWJ1ZlsyXSAhPSAnTCcgfHwgYnBybS1cdTAwM2VidWZbM10gIT0gJ0YnIHx8XG4rXHQgICAgYnBybS1cdTAwM2VidWZbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogTGl0dGxlLWVuZGlhbiAxNi1iaXQgZmllbGQsIHJlYWQgYnl0ZS13aXNlIGZvciB0aGUgdmVyaWZpZXIuICovXG4rXHRyZXR1cm4gKF9fdTgpYnBybS1cdTAwM2VidWZbRV9NQUNISU5FX09GRl0gfFxuK1x0ICAgICAgICgoX191MTYpKF9fdTgpYnBybS1cdTAwM2VidWZbRV9NQUNISU5FX09GRiArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wcy5zL21hdGNoXCIpXG4rYm9vbCBCUEZfUFJPRyhpbnRlcnBfYmluZF9tYXRjaCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbit7XG4rXHRfX3UxNiBtYWNoaW5lID0gZWxmX21hY2hpbmUoYnBybSk7XG4rXG4rXHRyZXR1cm4gbWFjaGluZSA9PSBFTV9BQVJDSDY0IHx8IG1hY2hpbmUgPT0gRU1fUklTQ1YgfHxcbitcdCAgICAgICBtYWNoaW5lID09IEVNX0FSTTtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wcy5zL2xvYWRcIilcbitpbnQgQlBGX1BST0coaW50ZXJwX2JpbmRfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbit7XG4rXHQvKlxuK1x0ICogTmFtZXMsIG5vdCBwYXRoczogZWFjaCBvbmUgc2VsZWN0cyBhIGZpbGUgdGhlIGVudHJ5IHByZS1vcGVuZWQsIHNvXG4rXHQgKiBub3RoaW5nIGlzIHJlc29sdmVkIGhlcmUgb3IgbGF0ZXIsIGluIGFueSBuYW1lc3BhY2UuIFRoZSBidWZmZXJzXG4rXHQgKiBhcmUgb24gdGhlIHN0YWNrIGJlY2F1c2UgdGhlIHZlcmlmaWVyIHJlamVjdHMgLnJvZGF0YSBmb3IgYSBzaXplZFxuK1x0ICogbWVtb3J5IGFyZ3VtZW50LlxuK1x0ICovXG4rXHRjaGFyIGZpcnN0W10gPSBcImZpcnN0XCI7XG4rXHRjaGFyIHNlY29uZFtdID0gXCJzZWNvbmRcIjtcbitcdGNoYXIgdW5ib3VuZFtdID0gXCJ1bmJvdW5kXCI7XG4rXG4rXHRzd2l0Y2ggKGVsZl9tYWNoaW5lKGJwcm0pKSB7XG4rXHRjYXNlIEVNX0FBUkNINjQ6XG4rXHRcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgZmlyc3QsIHNpemVvZihmaXJzdCkpO1xuK1x0Y2FzZSBFTV9SSVNDVjpcbitcdFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBzZWNvbmQsIHNpemVvZihzZWNvbmQpKTtcbitcdH1cbitcbitcdC8qIFRoZSBlbnRyeSBib3VuZCBub3RoaW5nIHVuZGVyIHRoaXMgbmFtZTogLUVOT0VOVCBmYWlscyB0aGUgZXhlYy4gKi9cbitcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgdW5ib3VuZCwgc2l6ZW9mKHVuYm91bmQpKTtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHMubGlua1wiKVxuK3N0cnVjdCBiaW5mbXRfbWlzY19vcHMgaW50ZXJwX2JpbmQgPSB7XG4rXHQubWF0Y2hcdD0gKHZvaWQgKilpbnRlcnBfYmluZF9tYXRjaCxcbitcdC5sb2FkXHQ9ICh2b2lkICopaW50ZXJwX2JpbmRfbG9hZCxcbitcdC5uYW1lXHQ9IFwiaW50ZXJwX2JpbmRcIixcbit9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTY6MDIuOTEyMjQ5NjY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU3ODc2Mjg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIEJpbmZtdF9taXNjIEludGVycHJldGVyIEJpbmRpbmcqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGludGVycHJldGVyIGJpbmRpbmcgdG8gYGJpbmZtdF9taXNjYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIGluIGBmcy9iaW5mbXRfbWlzYy5jYCwgYGZzL2JpbmZtdF9taXNjX2JwZi5jYCwgYW5kIGBmcy9leGVjLmNgLiBJdCdzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgd2UgbmVlZCB0byBmdXp6IGl0IHRob3JvdWdobHkuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIFwiRFwiIGZsYWcgZm9yIGRpc2FibGVkIGVudHJpZXMgd2hpY2ggY2FuIGhhdmUgYW4gaW50ZXJwcmV0ZXIgYm91bmQgbGF0ZXIgd2l0aCB0aGUgXCIrbmFtZSBwYXRoXCIgZmVhdHVyZSwgdGhlbiBiZSBzZWxlY3RlZCBieSBhIEJQRiBoYW5kbGVyIHVzaW5nIGEgbmV3IGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKWAga2Z1bmMuIFRoYXQncyB0aGUgY29yZSBvZiBpdCwgYWxsb3dpbmcgQlBGIGhhbmRsZXJzIHRvIGNob29zZSBhbiBpbnRlcnByZXRlciB3aXRob3V0IGRvaW5nIHBhdGggcmVzb2x1dGlvbiBhdCBleGVjdXRpb24gdGltZS5cblxuU2luY2UgaXTigJlzIGluIHRoZSBjb3JlIGtlcm5lbCwgZnV6emluZyBpcyBlc3NlbnRpYWwgaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGZzL2JpbmZtdF9taXNjLmNgLCBJJ3ZlIGdvdDpcblxuKiAgIGBiaW5mbXRfbWlzY19maW5kX2ludGVycGBcbiogICBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCAoc3RhdGljKVxuKiAgIGBibV9lbnRyeV9hZGRfaW50ZXJwYCAoc3RhdGljKVxuKiAgIGBibV9lbnRyeV93cml0ZWAgKHN0YXRpYylcbiogICBgY3JlYXRlX2VudHJ5YFxuKiAgIGBhZGRfZW50cnlgXG4qICAgYGJtX3JlZ2lzdGVyX3dyaXRlYFxuKiAgIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgXG4qICAgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgXG5cbkFuZCBmcm9tIGBmcy9iaW5mbXRfbWlzY19icGYuY2A6XG5cbiogICBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwYCAoa2Z1bmMsIG5vbi1zdGF0aWMpXG4qICAgYGJwZl9iaW5wcm1fc2V0X2ludGVycGAgKGtmdW5jLCBtb2RpZmllZClcblxuQWxyaWdodCwgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGFuZCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCBzZWVtIGltbWVkaWF0ZWx5IHJlbGV2YW50IGFzIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFyZSBmaWxlIG9wZXJhdGlvbnMsIHNvIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgdGhleSBjYW4gc3RpbGwgYmUgcmVhY2hlZCB2aWEgc3lzY2FsbHMsIHRoZXJlZm9yZSBhcmUgaW1wb3J0YW50LiBIb3dldmVyLCBgbG9hZF9taXNjX2JpbmFyeWAgaXMgbGlrZWx5IHRoZSBtYWluIGVudHJ5cG9pbnQgaW50byB0aGlzIHdob2xlIG1vZHVsZSBzbyB3ZSdsbCBuZWVkIHRvIGNvbnNpZGVyIGl0IHRvby5cblxuVG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXhhY3QgbmFtZXMgYW5kIHNpZ25hdHVyZXMsIEknbSBnb2luZyB0byBydW4gYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi4gTGV0J3MgbWFrZSBzdXJlIHdlIGhpdCBldmVyeSBhbmdsZSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUyNCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjoxMS40OTEwMTU1MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI4NTM2MzQxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8c3NpemVfdHx2b2lkfHN0cnVjdCBmaWxlIFxcXFwqfGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgXFxcXCp8Y29uc3QgY2hhciBcXFxcKikuKiAoYm1fZW50cnlfd3JpdGV8Ym1fcmVnaXN0ZXJfd3JpdGV8YmluZm10X21pc2NfZmluZF9pbnRlcnB8YnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwfGJwZl9iaW5wcm1fc2V0X2ludGVycHxsb2FkX21pc2NfYmluYXJ5fGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcnxlbnRyeV9vcGVuX2ludGVycHJldGVyfGJtX2VudHJ5X2FkZF9pbnRlcnApXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjU2OjE0Ljc3NjM4OTM5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzIxMzIwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHJlYXNzZXNzLiBUaGUgY3VycmVudCBhcHByb2FjaCwgd2hpbGUgcG90ZW50aWFsbHkgcG93ZXJmdWwsIG1pZ2h0IGJlIG92ZXJjb21wbGljYXRpbmcgdGhpbmdzLiBMZXQncyBzZWUgaWYgYSBtb3JlIGJhc2ljIGBncmVwYCBjYW4gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRjb21lLiBTb21ldGltZXMsIGJydXRlIGZvcmNlIGFuZCBzaW1wbGljaXR5IHlpZWxkIGJldHRlciByZXN1bHRzIHRoYW4gY29tcGxleCwgbGF5ZXJlZCBzb2x1dGlvbnMsIGVzcGVjaWFsbHkgZm9yIGluaXRpYWwgZGVidWdnaW5nIG9yIHZhbGlkYXRpb24uIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXR0ZXJuIGFuZCBpdGVyYXRpdmVseSByZWZpbmUgaXQgYXMgbmVlZGVkLCBmb2N1c2luZyBvbiBtaW5pbWl6aW5nIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgYXQgdGhpcyBzdGFnZS4gSXQncyBhIHByYWdtYXRpYyBzaGlmdCDigJMgYXZvaWQgb3ZlcmtpbGwsIGdldCBzb21ldGhpbmcgZnVuY3Rpb25hbCBmaXJzdCwgdGhlbiBvcHRpbWl6ZSBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg2NiwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTY6MTguMTQ4NTI0MzEzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjY2NjAzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGJtX2VudHJ5X3dyaXRlfGJtX3JlZ2lzdGVyX3dyaXRlfGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwfGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycHxicGZfYmlucHJtX3NldF9pbnRlcnB8bG9hZF9taXNjX2JpbmFyeXxlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJ8ZW50cnlfb3Blbl9pbnRlcnByZXRlcnxibV9lbnRyeV9hZGRfaW50ZXJwKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdD0xOTQ9YW5kIGRlcml2ZSB0aGUgaW50ZXJwcmV0ZXIgZnJvbSB0aGUgYmluYXJ5J3MgbG9jYXRpb24uIEl0IHNlbGVjdHMgdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q6MTk1OmludGVycHJldGVyIGJ5IGNhbGxpbmcgdGhlIGBgYnBmX2JpbnBybV9zZXRfaW50ZXJwKClgYCBrZnVuYyB3aXRoIGFuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QtMTk2LWFic29sdXRlIHBhdGggYW5kIHJldHVybmluZyBgYDBgYC4gQSBtYXRjaCBpcyBjb21taXR0ZWQ6IGEgZmFpbGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q9MjIzPVRoZSBgYGxvYWRgYCBwcm9ncmFtIHRoZW4gc2VsZWN0cyBvbmUgcGVyIGV4ZWMgYnkgbmFtZSB3aXRoIHRoZVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0OjIyNDpgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpYGAga2Z1bmMsIGFuZCBldmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdC0yMjUtZmlsZSB0aGF0IHdhcyBvcGVuZWQuIFRoZSBwYXRoIGRlY2lkZXMgd2hpY2ggZmlsZSBpcyBib3VuZCBhbmQgbm90aGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q9MjU1PVRoZSBgYGxvYWRgYCBwcm9ncmFtIGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyIHdpdGhcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdDoyNTY6dGhlIGBgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZygpYGAga2Z1bmMuIEl0IGlzIGluc2VydGVkIGJldHdlZW4gdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QtMjU3LWludGVycHJldGVyIGFuZCB0aGUgYmluYXJ5LCBleGFjdGx5IGxpa2UgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGEgYGAjIWBgXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTEwMz1zdHJ1Y3QgYmluZm10X21pc2NfZW50cnkge1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMTUtXFx0c3RydWN0IGxpc3RfaGVhZCBpbnRlcnBzO1xcdC8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjExNjpcXHRyZWZjb3VudF90IHVzZXJzO1xcdFxcdC8qIHN5bmMgcmVtb3ZhbCB3aXRoIGxvYWRfbWlzY19iaW5hcnkoKSAqL1xcbmZzL2JpbmZtdF9taXNjLmMtMTE3LVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEzOC1cXG5mcy9iaW5mbXRfbWlzYy5jOjEzOTovKiBQcm90ZWN0cyB0aGUgZW50cnkgd2FsayBpbiBsb2FkX21pc2NfYmluYXJ5KCksIHdoaWNoIG1heSBzbGVlcCBpbiBpdC4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jLTE0MC1ERUZJTkVfU1RBVElDX1NSQ1VfRkFTVChibV9lbnRyaWVzX3NyY3UpO1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz0yMzE9c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjM4LS8qKlxcbmZzL2JpbmZtdF9taXNjLmM6MjM5OiAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWVcXG5mcy9iaW5mbXRfbWlzYy5jLTI0MC0gKiBAaW50ZXJwczogdGhlIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTI0NT1jb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICpcXG5mcy9iaW5mbXRfbWlzYy5jOjI0NjpiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKVxcbmZzL2JpbmZtdF9taXNjLmMtMjQ3LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MzEyPXN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzE4LVxcbmZzL2JpbmZtdF9taXNjLmM6MzE5OlxcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcywgbmFtZSkpXFxuZnMvYmluZm10X21pc2MuYy0zMjAtXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTM0MD1zdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzUzLSAqXFxuZnMvYmluZm10X21pc2MuYzozNTQ6ICogRnJlZSBlbnRyeSBzeW5jaW5nIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpIGFuZCBkZWZlciBmaW5hbCBmcmVlIHRvXFxuZnMvYmluZm10X21pc2MuYzozNTU6ICogbG9hZF9taXNjX2JpbmFyeSgpIGluIGNhc2UgaXQgaXMgdXNpbmcgdGhlIGJpbmFyeSB0eXBlIGhhbmRsZXIgd2Ugd2VyZVxcbmZzL2JpbmZtdF9taXNjLmMtMzU2LSAqIHJlcXVlc3RlZCB0byByZW1vdmUuIEFsc28gdGhlIHRlYXJkb3duIGZvciBhIHJlZ2lzdHJhdGlvbiB0aGF0IGZhaWxzXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTM5OT1zdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICpjdXJyZW50X2JpbmZtdF9taXNjKHZvaWQpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTQxNC0vKipcXG5mcy9iaW5mbXRfbWlzYy5jOjQxNTogKiBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIgLSBnZXQgdGhlIGludGVycHJldGVyIGZvciB0aGUgbWF0Y2hlZCBAZVxcbmZzL2JpbmZtdF9taXNjLmMtNDE2LSAqIEBlOiBtYXRjaGVkIGJpbmFyeSB0eXBlIGhhbmRsZXJcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNDI1LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NDI2OnN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbmZzL2JpbmZtdF9taXNjLmMtNDI3LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz00Nzc9c3RhdGljIHVuc2lnbmVkIGxvbmcgZW50cnlfaW52b2NhdGlvbl9mbGFncyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTUwNC0vKipcXG5mcy9iaW5mbXRfbWlzYy5jOjUwNTogKiBlbnRyeV9vcGVuX2ludGVycHJldGVyIC0gb3BlbiB0aGUgZW50cnkncyBpbnRlcnByZXRlciBmb3IgZXhlY3V0aW9uXFxuZnMvYmluZm10X21pc2MuYy01MDYtICogQGU6IG1hdGNoZWQgYmluYXJ5IHR5cGUgaGFuZGxlclxcbi0tXFxuZnMvYmluZm10X21pc2MuYy01MTUtICovXFxuZnMvYmluZm10X21pc2MuYzo1MTY6c3RhdGljIHN0cnVjdCBmaWxlICplbnRyeV9vcGVuX2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTUxNy1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYz01NTk9c3RhdGljIGludCBidWlsZF9pbnRlcnBfYXJndihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICppbnRlcnByZXRlcixcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNjA4LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NjA5OnN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbmZzL2JpbmZtdF9taXNjLmMtNjEwLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNjI4LVxcbmZzL2JpbmZtdF9taXNjLmM6NjI5OlxcdGludGVycHJldGVyID0gZW50cnlfc2VsZWN0X2ludGVycHJldGVyKGZtdCwgYnBybSk7XFxuZnMvYmluZm10X21pc2MuYy02MzAtXFx0aWYgKElTX0VSUihpbnRlcnByZXRlcikpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTY0NS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBNSVNDX0ZNVF9MT0FERVIpIHtcXG5mcy9iaW5mbXRfbWlzYy5jOjY0NjpcXHRcXHRpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBicHJtLCBpbnRlcnByZXRlcik7XFxuZnMvYmluZm10X21pc2MuYy02NDctXFx0XFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpIHtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNjY3LVxcbmZzL2JpbmZtdF9taXNjLmM6NjY4OlxcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGJwcm0sIGludGVycHJldGVyKTtcXG5mcy9iaW5mbXRfbWlzYy5jLTY2OS1cXHRpZiAoSVNfRVJSKGludGVycF9maWxlKSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTEzNz1zdGF0aWMgdm9pZCBibV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMTYxLSAqIHVubGluaygyKSBoYXBwZW5zIHVuZGVyIHRoZSBleGNsdXNpdmVseSBoZWxkIGlub2RlIGxvY2sgb2YgdGhlIHJvb3RcXG5mcy9iaW5mbXRfbWlzYy5jOjExNjI6ICogZGVudHJ5IGtlZXBpbmcgdGhlIGxpc3Qgc3RhYmxlIGZvciB3cml0ZXJzLiBsb2FkX21pc2NfYmluYXJ5KCkgd2Fsa3MgaXRcXG5mcy9iaW5mbXRfbWlzYy5jLTExNjMtICogY29uY3VycmVudGx5IHVuZGVyIFNSQ1UuIFRoZSBlbnRyaWVzX2xvY2sgaXMgb25seSBoZWxkIGFyb3VuZCB0aGUgYWN0dWFsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTEyNTI9c3RhdGljIGludCBibV9lbnRyeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjU5LVxcbmZzL2JpbmZtdF9taXNjLmM6MTI2MDpcXHQvKiBzZXFfb3BlbigpIGNsZWFycyBGTU9ERV9QV1JJVEUsIGJtX2VudHJ5X3dyaXRlKCkgdGFrZXMgYW55IG9mZnNldCAqL1xcbmZzL2JpbmZtdF9taXNjLmMtMTI2MS1cXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyNzMtLyoqXFxuZnMvYmluZm10X21pc2MuYzoxMjc0OiAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnlcXG5mcy9iaW5mbXRfbWlzYy5jLTEyNzUtICogQGU6IHRoZSBlbnRyeVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjg4LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTI4OTpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTEyOTAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzQ5LVxcbmZzL2JpbmZtdF9taXNjLmM6MTM1MDpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTEzNTEtXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjctXFx0aWYgKGJ1ZlswXSA9PSAnKycpXFxuZnMvYmluZm10X21pc2MuYzoxMzY4OlxcdFxcdHJldHVybiBibV9lbnRyeV9hZGRfaW50ZXJwKGUsIGZpbGUsIGJ1ZiwgY291bnQpO1xcbmZzL2JpbmZtdF9taXNjLmMtMTM2OS1cXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTQwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9lbnRyeV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDEwLVxcdC5yZWFkXFx0XFx0PSBzZXFfcmVhZCxcXG5mcy9iaW5mbXRfbWlzYy5jOjE0MTE6XFx0LndyaXRlXFx0XFx0PSBibV9lbnRyeV93cml0ZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE0MTItXFx0Lmxsc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xNDE5PXN0YXRpYyBpbnQgYWRkX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQ0OS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE0NTA6c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy0xNDUxLVxcdFxcdFxcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTQ5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9yZWdpc3Rlcl9vcGVyYXRpb25zID0ge1xcbmZzL2JpbmZtdF9taXNjLmM6MTQ5MjpcXHQud3JpdGVcXHRcXHQ9IGJtX3JlZ2lzdGVyX3dyaXRlLFxcbmZzL2JpbmZtdF9taXNjLmMtMTQ5My1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTU0Nj1zdGF0aWMgaW50IGJtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjAzLVxcdCAqIHRoYXQgdGhlIGJpbmFyeSB0eXBlIGxpc3QgZm9yIHRoaXMgYmluZm10X21pc2MgbW91bnQgaXMgZW1wdHkgbWFraW5nXFxuZnMvYmluZm10X21pc2MuYzoxNjA0OlxcdCAqIGxvYWRfbWlzY19iaW5hcnkoKSByZXR1cm4gLUVOT0VYRUMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciAtXFx1MDAzZWVuYWJsZWRcXG5mcy9iaW5mbXRfbWlzYy5jLTE2MDUtXFx0ICogaXMgdHJ1ZS4gSW5zdGVhZCwgaWYgc29tZW9uZSBtb3VudHMgYmluZm10X21pc2MgZm9yIHRoZSBmaXJzdCB0aW1lIG9yXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE2NDk9c3RhdGljIHN0cnVjdCBsaW51eF9iaW5mbXQgbWlzY19mb3JtYXQgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNjUwLVxcdC5tb2R1bGUgPSBUSElTX01PRFVMRSxcXG5mcy9iaW5mbXRfbWlzYy5jOjE2NTE6XFx0LmxvYWRfYmluYXJ5ID0gbG9hZF9taXNjX2JpbmFyeSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NTItfTtcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jPTExOT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMjEtLyoqXFxuZnMvYmluZm10X21pc2NfYnBmLmM6MTIyOiAqIGJwZl9iaW5wcm1fc2V0X2ludGVycCAtIHNlbGVjdCB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoZSBjdXJyZW50IGV4ZWNcXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMjMtICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMzEtICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhblxcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjEzMjogKiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmQgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMzMtICpcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEzNS0gKi9cXG5mcy9iaW5mbXRfbWlzY19icGYuYzoxMzY6X19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEzNy1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9fc3opXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNjAtLyoqXFxuZnMvYmluZm10X21pc2NfYnBmLmM6MTYxOiAqIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCAtIHJ1biB0aGlzIGV4ZWMgdW5kZXIgYW4gaW50ZXJwcmV0ZXIgdGhlIGVudHJ5IGJvdW5kXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMTYyLSAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxcbi0tXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMTY2LSAqIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb2FkIHByb2dyYW0gb2YgYSBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGhhbmRsZXJcXG5mcy9iaW5mbXRfbWlzY19icGYuYzoxNjc6ICogaW5zdGVhZCBvZiBicGZfYmlucHJtX3NldF9pbnRlcnAoKS4gSXQgc2VsZWN0cyBvbmUgb2YgdGhlIGludGVycHJldGVyc1xcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTE2OC0gKiB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLCBlYWNoIG9mIHdoaWNoIHdhcyBvcGVuZWQgb25jZSB3aGVuXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNzctICovXFxuZnMvYmluZm10X21pc2NfYnBmLmM6MTc4Ol9fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNzktXFx0XFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeilcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTE5MC1cXG5mcy9iaW5mbXRfbWlzY19icGYuYzoxOTE6XFx0aW50ZXJwID0gYmluZm10X21pc2NfZmluZF9pbnRlcnAoYnBybS1cXHUwMDNlYnBmX2ludGVycHMsIG5hbWUpO1xcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTE5Mi1cXHRpZiAoIWludGVycClcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTIwMy0vKipcXG5mcy9iaW5mbXRfbWlzY19icGYuYzoyMDQ6ICogYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZyAtIHNldCBhIHNpbmdsZSBhcmd1bWVudCBmb3IgdGhlIGludGVycHJldGVyXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMjA1LSAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxcbi0tXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMjE1LSAqL1xcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjIxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTIxNy1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmFyZywgc2l6ZV90IGFyZ19fc3opXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYz0yODA9QlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjI4MTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXFxuZnMvYmluZm10X21pc2NfYnBmLmM6MjgyOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcXG5mcy9iaW5mbXRfbWlzY19icGYuYzoyODM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcsIEtGX1NMRUVQQUJMRSlcXG5mcy9iaW5mbXRfbWlzY19icGYuYy0yODQtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ZsYWdzLCBLRl9TTEVFUEFCTEUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg9MTA9c3RydWN0IHVzZXJfbmFtZXNwYWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oLTMwLSAqIGlzIGhhbmRlZCB0byB0aGUgaGFuZGxlcidzIGxvYWQgcHJvZ3JhbSBmb3IgdGhlIGR1cmF0aW9uIG9mIG9uZSBleGVjLFxcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaDozMTogKiB3aGljaCBwaWNrcyBvbmUgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgtMzItICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg9NDA9Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqXFxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oOjQxOmJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaC00Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaD01OT1lbnVtIGJwZl9iaW5wcm1fZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oLTc0LSAqIEBsb2FkOiAgc2VsZWN0IGFuIGludGVycHJldGVyIGZvciB0aGUgbWF0Y2hlZCBAYnBybSB2aWFcXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg6NzU6ICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSwgb3Igb25lIHRoZSBlbnRyeSBib3VuZCB2aWFcXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg6NzY6ICogICAgICAgICBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKSwgYW5kIHJldHVybiB6ZXJvOyBhIG1hdGNoIGlzXFxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oLTc3LSAqICAgICAgICAgY29tbWl0dGVkLCBzbyBhIGZhaWx1cmUgZmFpbHMgdGhlIGV4ZWMgaW5zdGVhZCBvZiBmYWxsaW5nXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmM9MTQ9Y2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmMtMTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jOjIwOmV4dGVybiBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKnBhdGgsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTIxLVxcdFxcdFxcdFxcdCBzaXplX3QgcGF0aF9fc3opIF9fa3N5bTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYz00Mz1pbnQgQlBGX1BST0coYnBmX2ludGVycF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTQ1LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jOjQ2OlxcdCAqIEtlZXAgdGhlIHBhdGggb24gdGhlICh3cml0YWJsZSkgc3RhY2s6IGJwZl9iaW5wcm1fc2V0X2ludGVycCgpIHRha2VzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTQ3LVxcdCAqIGEgc2l6ZWQgbWVtb3J5IGFyZyBhbmQgdGhlIHZlcmlmaWVyIHJlamVjdHMgYSByZWFkLW9ubHkgLnJvZGF0YVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTUyLVxcdC8qIEBwYXRoX19zeiBpbmNsdWRlcyB0aGUgdGVybWluYXRpbmcgTlVMOyAwIGNvbW1pdHMgdGhlIHNlbGVjdGlvbi4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmM6NTM6XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2V0X2ludGVycChicHJtLCBpbnRlcnAsIHNpemVvZihpbnRlcnApKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmMtNTQtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYz0xMz1jaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtMjEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYzoyMjpleHRlcm4gaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtMjMtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeikgX19rc3ltO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYz00OD1pbnQgQlBGX1BST0coaW50ZXJwX2JpbmRfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtNjEtXFx0Y2FzZSBFTV9BQVJDSDY0OlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM6NjI6XFx0XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBmaXJzdCwgc2l6ZW9mKGZpcnN0KSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYy02My1cXHRjYXNlIEVNX1JJU0NWOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM6NjQ6XFx0XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBzZWNvbmQsIHNpemVvZihzZWNvbmQpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jLTY1LVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtNjctXFx0LyogVGhlIGVudHJ5IGJvdW5kIG5vdGhpbmcgdW5kZXIgdGhpcyBuYW1lOiAtRU5PRU5UIGZhaWxzIHRoZSBleGVjLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM6Njg6XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCB1bmJvdW5kLCBzaXplb2YodW5ib3VuZCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtNjktfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmM9MTI9Y2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2xvYWRlci5icGYuYy0xNy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2xvYWRlci5icGYuYzoxODpleHRlcm4gaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICpwYXRoLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jLTE5LVxcdFxcdFxcdFxcdCBzaXplX3QgcGF0aF9fc3opIF9fa3N5bTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jPTM4PWludCBCUEZfUFJPRyhsb2FkZXJfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jLTQ3LVxcdC8qIEBwYXRoX19zeiBpbmNsdWRlcyB0aGUgdGVybWluYXRpbmcgTlVMOyAwIGNvbW1pdHMgdGhlIHNlbGVjdGlvbi4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2xvYWRlci5icGYuYzo0ODpcXHRyZXR1cm4gYnBmX2JpbnBybV9zZXRfaW50ZXJwKGJwcm0sIGludGVycCwgc2l6ZW9mKGludGVycCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jLTQ5LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy03LSAqIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGJpbmFyeSBiZWluZyBleGVjdXRlZCBhbmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM6ODogKiBzZWxlY3RlZCB2aWEgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCkuIFRoZSBtYXRjaCBwcm9ncmFtIHJlYWRzIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy05LSAqIHByb2dyYW0gaGVhZGVycyBpdHNlbGYsIHNvIGFueXRoaW5nIGVsc2UgbmV2ZXIgY29tbWl0cyB0byB0aGlzXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM9Mzg9ZXh0ZXJuIGludCBicGZfcGF0aF9kX3BhdGgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKmJ1ZixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmMtMzktXFx0XFx0XFx0ICAgc2l6ZV90IGJ1Zl9fc3opIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM6NDA6ZXh0ZXJuIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmMtNDEtXFx0XFx0XFx0XFx0IHNpemVfdCBwYXRoX19zeikgX19rc3ltO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9uaXhfb3JpZ2luLmJwZi5jPTEyNz1pbnQgQlBGX1BST0cobml4X29yaWdpbl9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9uaXhfb3JpZ2luLmJwZi5jLTIxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM6MjExOlxcdHJldCA9IGJwZl9iaW5wcm1fc2V0X2ludGVycChicHJtLCBzYy1cXHUwMDNlcGF0aCwgcnN6KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmMtMjEyLW91dF9kZWw6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jPTEyPWNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYy0xNy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jOjE4OmV4dGVybiBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKnBhdGgsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYy0xOS1cXHRcXHRcXHRcXHQgc2l6ZV90IHBhdGhfX3N6KSBfX2tzeW07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jPTM5PWludCBCUEZfUFJPRyh0cmFuc3BhcmVudF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYy00OC1cXHQvKiBAcGF0aF9fc3ogaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIE5VTDsgMCBjb21taXRzIHRoZSBzZWxlY3Rpb24uICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYzo0OTpcXHRyZXR1cm4gYnBmX2JpbnBybV9zZXRfaW50ZXJwKGJwcm0sIGludGVycCwgc2l6ZW9mKGludGVycCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvdHJhbnNwYXJlbnQuYnBmLmMtNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjoyMS4wNzUxOTIzMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzczNzQyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIEludGVycHJldGVyIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBrZXJuZWwgc2VsZWN0cyBpbnRlcnByZXRlcnMuIE15IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBMZXQncyBzZWUsIHRoZSBvbmVzIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFyZTogYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGBicGZfYmlucHJtX3NldF9pbnRlcnBgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgLCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgLiAgSSdsbCBhbHNvIGtlZXAgYGJtX2VudHJ5X2FkZF9pbnRlcnBgLCBgYm1fZW50cnlfd3JpdGVgLCBhbmQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpbiBtaW5kLCBldmVuIHRob3VnaCBzb21lIGFyZSBzdGF0aWM7IGxpc3RpbmcgdGhlbSB3b24ndCBodXJ0LCBhbmQgbWlnaHQgYmUgaGVscGZ1bCBsYXRlci5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdsbCBzdGFydCB3aXRoIGBmcy9iaW5mbXRfbWlzYy5jYCBhbmQgaHVudCBmb3IgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgYm1fZW50cnlfd3JpdGVgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBhbmQgYGJtX2VudHJ5X2FkZF9pbnRlcnBgLiBBaCwgcmlnaHQsIHRob3NlIGFyZSBmaWxlIG9wZXJhdGlvbnMhICBPa2F5LCBJIGNhbiBkZWZpbml0ZWx5IGxpc3QgdGhvc2UuICBFdmVuIHRob3VnaCBgYm1fZW50cnlfd3JpdGVgIGlzIG1hcmtlZCBgc3RhdGljYCwgaXQncyBzdGlsbCBhIGdvb2QgcGxhY2UgdG8gcG9rZSBhcm91bmQuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGxvb2sgaW50byBhcmU6IGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAsIGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnBgLCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCwgYGxvYWRfbWlzY19iaW5hcnlgLCBgYm1fZW50cnlfd3JpdGVgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBgYm1fZW50cnlfYWRkX2ludGVycGAsIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgLCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgLlxuXG5OZXh0LCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluIGBLY29uZmlnYCB0byBzZWUgaG93IGBCSU5GTVRfTUlTQ2AgYW5kIGBCSU5GTVRfTUlTQ19CUEZgIGFyZSBjb25maWd1cmVkIGFuZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIEkgbmVlZCB0byBiZWdpbiB0aGUgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzMxMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjoyNi44NDg5Mzc5MDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNzIyNTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQklORk1UX01JU0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTM4PWNvbmZpZyBCSU5GTVRfWkZMQVRcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE0NC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxNDU6Y29uZmlnIEJJTkZNVF9NSVNDXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ2LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgTUlTQyBiaW5hcmllc1xcXCJcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE3MC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxNzE6Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxcbmZzL0tjb25maWcuYmluZm10LTE3Mi1cXHRib29sIFxcXCJCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjoyOC4zNjYxNjc2OThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIzNDcxODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZnMvS2NvbmZpZy5iaW5mbXRgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzEuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBvciBwb3RlbnRpYWxseSByZWxldmFudCB0aGVyZSBpbiByZWxhdGlvbiB0byB3aGF0IEknbSB3b3JraW5nIG9uLCBwZXJoYXBzIGRlYWxpbmcgd2l0aCBiaW5hcnkgZm9ybWF0IGNvbmZpZ3VyYXRpb24uIEhvcGVmdWxseSwgaXQncyBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgY29uZGl0aW9uYWwsIGEgZGVwZW5kZW5jeSBkZWZpbml0aW9uLCBvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQncyBnb2luZyB0byBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGN1cnJlbnQgcHJvYmxlbS4gVGltZSB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjU2OjMxLjU4OTY0MjQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWcuYmluZm10XCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2MDpcXHRcXHQgIGZlYXR1cmUsIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvamF2YS5yc3RcXHUwMDNlIGZvciBpbmZvcm1hdGlvbiBhYm91dCBob3dcXG4gMTYxOlxcdFxcdCAgdG8gaW5jbHVkZSBKYXZhIHN1cHBvcnQuIGFuZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21vbm8ucnN0XFx1MDAzZSBmb3JcXG4gMTYyOlxcdCAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gaW5jbHVkZSBNb25vLWJhc2VkIC5ORVQgc3VwcG9ydC5cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0ICAgICAgICAgIFRvIHVzZSBiaW5mbXRfbWlzYywgeW91IHdpbGwgbmVlZCB0byBtb3VudCBpdDpcXG4gMTY1OlxcdFxcdFxcdG1vdW50IGJpbmZtdF9taXNjIC10IGJpbmZtdF9taXNjIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzY1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHQgIFlvdSBtYXkgc2F5IE0gaGVyZSBmb3IgbW9kdWxlIHN1cHBvcnQgYW5kIGxhdGVyIGxvYWQgdGhlIG1vZHVsZSB3aGVuXFxuIDE2ODpcXHRcXHQgIHlvdSBoYXZlIHVzZSBmb3IgaXQ7IHRoZSBtb2R1bGUgaXMgY2FsbGVkIGJpbmZtdF9taXNjLiBJZiB5b3VcXG4gMTY5OlxcdFxcdCAgZG9uJ3Qga25vdyB3aGF0IHRvIGFuc3dlciBhdCB0aGlzIHBvaW50LCBzYXkgWS5cXG4gMTcwOlxcdFxcbiAxNzE6XFx0Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxcbiAxNzI6XFx0XFx0Ym9vbCBcXFwiQlBGLXNlbGVjdGVkIGludGVycHJldGVycyBmb3IgbWlzYyBiaW5hcmllc1xcXCJcXG4gMTczOlxcdFxcdGRlcGVuZHMgb24gQklORk1UX01JU0M9eVxcbiAxNzQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuIDE3NTpcXHRcXHRoZWxwXFxuIDE3NjpcXHRcXHQgIEFsbG93IGJpbmZtdF9taXNjIGJpbmFyeSB0eXBlIGhhbmRsZXJzIHRvIGJlIGltcGxlbWVudGVkIGFzIGJwZlxcbiAxNzc6XFx0XFx0ICBzdHJ1Y3Rfb3BzIHByb2dyYW1zLiBJbnN0ZWFkIG9mIG1hdGNoaW5nIGEgZml4ZWQgbWFnaWMgYW5kXFxuIDE3ODpcXHRcXHQgIHJlZGlyZWN0aW5nIHRvIGEgZml4ZWQgaW50ZXJwcmV0ZXIgcmVjb3JkZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWVcXG4gMTc5OlxcdFxcdCAgc3VjaCBoYW5kbGVycyBtYXRjaCBiaW5hcmllcyBwcm9ncmFtbWF0aWNhbGx5IGFuZCBjb21wdXRlIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjozMS41ODk3Mjk5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjM0NTc0MjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCSU5GTVRfTUlTQyBhbmQgQlBGIEludGVncmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBCSU5GTVRfTUlTQ19CUEZgIGlzIGVuYWJsZWQsIHdoaWNoIG9idmlvdXNseSByZWxpZXMgb24gYEJJTkZNVF9NSVNDPXlgLCBhbmQgdGhlbiBhbHNvIHRoZSByZWxldmFudCBCUEYtc3BlY2lmaWMgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gaW5jbHVkZSBib3RoIGBCSU5GTVRfTUlTQ2AgYW5kIGBCSU5GTVRfTUlTQ19CUEZgIGluIGBFbmFibGVDb25maWdzYC4gVGhhdCBjb3ZlcnMgdGhlIGJhc2ljIGRlcGVuZGVuY2llcy5cblxuTm93LCB3aGVyZSBkb2VzIHRoaXMgcGF0Y2ggdG91Y2g/IExvb2tzIGxpa2UgYGZzL2JpbmZtdF9taXNjLmNgIGFuZCBgZnMvYmluZm10X21pc2NfYnBmLmNgLiBTbywgYEJJTkZNVF9NSVNDYCBhbmQgYEJJTkZNVF9NSVNDX0JQRmAgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHRoaXMgYXJlYS5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCByZWxldmFudC4gTXkgbWVudGFsIGNoZWNrbGlzdCBmb2N1c2VzIG9uIHRoZXNlIHBvdGVudGlhbCBob3RzcG90czogYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGBicGZfYmlucHJtX3NldF9pbnRlcnBgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBibV9lbnRyeV93cml0ZWAsIGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV9hZGRfaW50ZXJwYCwgYGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcmAsIGFuZCBgZW50cnlfb3Blbl9pbnRlcnByZXRlcmAuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdC4gYGxvYWRfbWlzY19iaW5hcnlgIGlzIGRlZmluaXRlbHkgYSBob3QtcGF0aCBmdW5jdGlvbiwgYnV0IGl0IGlzIHNwZWNpZmljIHRvIGBiaW5mbXRfbWlzY2AuIEl0J3Mgbm90IGEgZ2VuZXJpYyBrZXJuZWwgZnVuY3Rpb24gbGlrZSBgc2NoZWR1bGVgIG9yIGBrbWFsbG9jYCwgc28gaXQncyBwcm9iYWJseSBva2F5IHRvIGluY2x1ZGUuIGBibV9lbnRyeV93cml0ZWAgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGNydWNpYWwgZm9yIHNldHRpbmcgdXAgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZSBwcm9tcHQgc2F5cyB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIGJ1dCB0aGVzZSBhcmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYGZpbGVfb3BlcmF0aW9uc2AsIHNvIHRoZXkgd29uJ3QgYmUgaW5saW5lZC4gVGhleSBhcmUgZ29vZCB0YXJnZXRzLiBgYm1fZW50cnlfYWRkX2ludGVycGAgYXBwZWFycyBzdGF0aWMuIExldCdzIG9taXQgaXQgYXMgaXQncyBsaWtlbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIExpa2V3aXNlLCBgZW50cnlfc2VsZWN0X2ludGVycHJldGVyYCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgIGFyZSBzdGF0aWMsIGFuZCBwcm9iYWJseSBpbmxpbmVkLCBzbyBsZXQncyBvbWl0IHRoZW0gdG9vLiBgYmluZm10X21pc2NfZmluZF9pbnRlcnBgIGlzIG5vbi1zdGF0aWMuIGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnBgIGlzIG5vbi1zdGF0aWMgKGEga2Z1bmMpLiBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCBpcyBhbHNvIG5vbi1zdGF0aWMgKGEga2Z1bmMpLlxuXG5QdXR0aW5nIGFsbCB0aGF0IHRvZ2V0aGVyLCBJIHRoaW5rIHRoZSBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYmU6XG5cbi0gYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYFxuLSBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwYFxuLSBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYFxuLSBgbG9hZF9taXNjX2JpbmFyeWBcbi0gYGJtX2VudHJ5X3dyaXRlYFxuLSBgYm1fcmVnaXN0ZXJfd3JpdGVgXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBsb2FkX21pc2NfYmluYXJ5YC4uLiBZZXMsIGBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlgIGluIGBmcy9iaW5mbXRfbWlzYy5jYCwgYW5kIGl0J3MgYXNzaWduZWQgdG8gYG1pc2NfZm9ybWF0LmxvYWRfYmluYXJ5YCwgc28gd2UncmUgZ29vZCB0aGVyZS5cblxuRG91YmxlLWNoZWNraW5nIGBibV9lbnRyeV93cml0ZWAgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAuLi4gQm90aCBhcmUgYHN0YXRpYyBzc2l6ZV90YCBmdW5jdGlvbnMsIGFuZCBib3RoIGFyZSBhc3NpZ25lZCB0byBgZmlsZV9vcGVyYXRpb25zLndyaXRlYC4gQ29uZmlybWVkLlxuXG5XaGF0IGFib3V0IGBiaW5mbXRfbWlzY19maW5kX2ludGVycGA/IFllcywgaXQncyBub24tc3RhdGljOiBgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpYC5cblxuYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAgaXMgYWxzbyBub24tc3RhdGljOiBgX19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opYC5cblxuQW5kIGBicGZfYmlucHJtX3NldF9pbnRlcnBgPyBOb24tc3RhdGljIGFzIHdlbGw6IGBfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBwYXRoX19zeilgLlxuXG5TbywgdGhlIGBDb25maWdzYCBJJ20gaW5jbHVkaW5nIGFyZTpcblxuLSBgQklORk1UX01JU0NgXG4tIGBCSU5GTVRfTUlTQ19CUEZgXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaW50ZWdyYXRlcyBCUEYgaGFuZGxlcnMgaW50byBgYmluZm10X21pc2NgLCBhbGxvd2luZyBpbnRlcnByZXRlcnMgdG8gYmUgYm91bmQgYW5kIHNlbGVjdGVkIGJ5IG5hbWUgYXQgYGV4ZWNgIHRpbWUuXG5cbiIsIklucHV0VG9rZW5zIjozNDg2MSwiT3V0cHV0VG9rZW5zIjoxOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTY6NDMuOTM1NDc2MDU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwNDA0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCIsXG4gICAgXCJCSU5GTVRfTUlTQ19CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW5mbXRfbWlzY19maW5kX2ludGVycFwiLFxuICAgIFwiYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwXCIsXG4gICAgXCJicGZfYmlucHJtX3NldF9pbnRlcnBcIixcbiAgICBcImxvYWRfbWlzY19iaW5hcnlcIixcbiAgICBcImJtX2VudHJ5X3dyaXRlXCIsXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCSU5GTVRfTUlTQ1wiLFxuICAgIFwiQklORk1UX01JU0NfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmluZm10X21pc2NfZmluZF9pbnRlcnBcIixcbiAgICBcImJwZl9iaW5wcm1fc2VsZWN0X2ludGVycFwiLFxuICAgIFwiYnBmX2JpbnBybV9zZXRfaW50ZXJwXCIsXG4gICAgXCJsb2FkX21pc2NfYmluYXJ5XCIsXG4gICAgXCJibV9lbnRyeV93cml0ZVwiLFxuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYmluZm10X21pc2MgYWxsb3dpbmcgQlBGIGhhbmRsZXJzIHRvIGJpbmQgaW50ZXJwcmV0ZXJzIHRvIGFuIGVudHJ5IGFuZCBzZWxlY3QgdGhlbSBieSBuYW1lIGF0IGV4ZWMgdGltZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBmcy9iaW5mbXRfbWlzYy5jIGFuZCBmcy9iaW5mbXRfbWlzY19icGYuYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBiaW5mbXRfbWlzYyBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gb2YgbWF0Y2hpbmcgYmluYXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rrt4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 02:55:01 +0000 UTC FinishedAt: 2026-08-01 02:56:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4bdcf682a476e8d9f52b2c5c01e998d70e45656c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC", "BINFMT_MISC_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4bdcf682a476e8d9f52b2c5c01e998d70e45656c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC", "BINFMT_MISC_BPF" ], "series_id": "3f622d72-0b9a-4dda-8388-7a343af1f11e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "binfmt_misc_find_interp", "bpf_binprm_select_interp", "bpf_binprm_set_interp", "load_misc_binary", "bm_entry_write", "bm_register_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDJiMzNDssCiAgICAmIzM0O0JJTkZNVF9NSVNDX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JpbmZtdF9taXNjX2ZpbmRfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JwZl9iaW5wcm1fc2VsZWN0X2ludGVycCYjMzQ7LAogICAgJiMzNDticGZfYmlucHJtX3NldF9pbnRlcnAmIzM0OywKICAgICYjMzQ7bG9hZF9taXNjX2JpbmFyeSYjMzQ7LAogICAgJiMzNDtibV9lbnRyeV93cml0ZSYjMzQ7LAogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYmluZm10X21pc2MgYWxsb3dpbmcgQlBGIGhhbmRsZXJzIHRvIGJpbmQgaW50ZXJwcmV0ZXJzIHRvIGFuIGVudHJ5IGFuZCBzZWxlY3QgdGhlbSBieSBuYW1lIGF0IGV4ZWMgdGltZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBmcy9iaW5mbXRfbWlzYy5jIGFuZCBmcy9iaW5mbXRfbWlzY19icGYuYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBiaW5mbXRfbWlzYyBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gb2YgbWF0Y2hpbmcgYmluYXJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZjkyNTFhNjBkYTE2NjIyNGJlYTliYWEzYmQ5YzQyZjc0YjlkNWNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwMjo1NjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCBjODA3MDJiNGNjZDVmLi4zZTJiMmE5NDE1YmM4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5AQCAtMTA3LDYgJiM0MzsxMDcsMTUgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiAgICAgICAgICAgICBgYFBUX0lOVEVSUGBgLiBTZWUgdGhlIFwmIzM0O0xvYWRlciBzdWJzdGl0dXRpb25cJiMzNDsgc2VjdGlvblxuICAgICAgICAgICAgIGJlbG93LiBgYExgYCByZWplY3RzIGBgVGBgLCBgYFBgYCwgYGBPYGAgYW5kIGBgQ2BgO1xuICAgICAgICAgICAgIGBgRmBgIGNvbXBvc2VzLlxuJiM0MzsgICAgICBgYERgYCAtIHJlZ2lzdGVyZWQgZGlzYWJsZWRcbiYjNDM7ICAgICAgICAgICAgVGhlIGVudHJ5IGlzIGNyZWF0ZWQgZGlzYWJsZWQgaW5zdGVhZCBvZiBiZWluZyBtYXRjaGFibGUgYXRcbiYjNDM7ICAgICAgICAgICAgb25jZSwgYW5kIGhhcyB0byBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgYGAxYGAgdG8gaXRzIGZpbGVcbiYjNDM7ICAgICAgICAgICAgYmVmb3JlIGl0IGRpc3BhdGNoZXMgYW55dGhpbmcuIFRoaXMgc3BsaXRzIGEgcmVnaXN0cmF0aW9uXG4mIzQzOyAgICAgICAgICAgIGludG8gY3JlYXRpbmcgdGhlIGVudHJ5IGFuZCBhY3RpdmF0aW5nIGl0LCBsZWF2aW5nIHJvb20gdG9cbiYjNDM7ICAgICAgICAgICAgY29uZmlndXJlIGl0IGluIGJldHdlZW4gLSB3aGljaCBpcyB3aGF0IGEgYGBCYGAgZW50cnkgdGhhdFxuJiM0MzsgICAgICAgICAgICBiaW5kcyBpbnRlcnByZXRlcnMgbmVlZHM7IHNlZSB0aGUgYnBmIHNlY3Rpb24gYmVsb3cuIFRoZSBmbGFnXG4mIzQzOyAgICAgICAgICAgIGlzIHNwZW50IG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIGlzIG5vdCByZWFkIGJhY2s6IHdoYXQgYW5cbiYjNDM7ICAgICAgICAgICAgZW50cnkgZmlsZSByZXBvcnRzIGFmdGVyd2FyZHMgaXMgd2hldGhlciBpdCBpcyBlbmFibGVkLlxuIFxuIFxuIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcbkBAIC0xODYsOSAmIzQzOzE5NSw2MiBAQCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBiaW5hcnkmIzM5O3MgbG9jYXRpb24uIEl0IHNlbGVjdHMgdGhlXG4gaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnAoKWBgIGtmdW5jIHdpdGggYW5cbiBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5pbmcgYGAwYGAuIEEgbWF0Y2ggaXMgY29tbWl0dGVkOiBhIGZhaWxpbmdcbiBgYGxvYWRgYCBmYWlscyB0aGUgZXhlYyB3aXRoIGl0cyBlcnJvciBpbnN0ZWFkIG9mIGZhbGxpbmcgdGhyb3VnaCB0byBsYXRlclxuLWVudHJpZXM7IGBgLUVOT0VYRUNgYCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5IGZvcm1hdHMgaGF2ZSBhIGdvLiBUaGVcbi1pbnRlcnByZXRlciBpcyBvcGVuZWQgd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlIGV4ZWMsXG4tZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3b3VsZCBiZS5cbiYjNDM7ZW50cmllczsgYGAtRU5PRVhFQ2BgIGxldHMgdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cyBoYXZlIGEgZ28uIEEgcGF0aFxuJiM0MztzZWxlY3RlZCB0aGlzIHdheSBpcyBvcGVuZWQgd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlXG4mIzQzO2V4ZWMsIGV4YWN0bHkgYXMgYSBzdGF0aWNhbGx5IHJlZ2lzdGVyZWQgaW50ZXJwcmV0ZXIgd2l0aG91dCBgYEZgYCB3b3VsZFxuJiM0MztiZS5cbiYjNDM7XG4mIzQzO0FuIGVudHJ5IGNhbiBpbnN0ZWFkIGJpbmQgdGhlIGludGVycHJldGVycyBpdHMgaGFuZGxlciBtYXkgdXNlLCBzbyB0aGF0IG5vXG4mIzQzO3BhdGggaXMgcmVzb2x2ZWQgYXQgZXhlYyB0aW1lIGF0IGFsbC4gQW4gZW50cnkgcmVnaXN0ZXJlZCB3aXRoIGBgRGBgIGlzIG5vdFxuJiM0MzttYXRjaGFibGUgeWV0LCB3aGljaCBpcyB3aGF0IGxlYXZlcyBpdCBvcGVuIHRvIGJlaW5nIGdpdmVuIHRoZW0sIG9uZVxuJiM0MztgYCYjNDM7bmFtZSBwYXRoYGAgd3JpdGUgYXQgYSB0aW1lOjpcbiYjNDM7XG4mIzQzOyAgICBlY2hvICYjMzk7OnFlbXU6Qjo6OjpteV9oYW5kbGVyOkQmIzM5OyBcdTAwM2UgcmVnaXN0ZXJcbiYjNDM7ICAgIGVjaG8gJiMzOTsmIzQzO2FhcmNoNjQgL3Vzci9iaW4vcWVtdS1hYXJjaDY0JiMzOTsgXHUwMDNlIHFlbXVcbiYjNDM7ICAgIGVjaG8gJiMzOTsmIzQzO2FybSAvdXNyL2Jpbi9xZW11LWFybSYjMzk7IFx1MDAzZSBxZW11XG4mIzQzOyAgICBlY2hvIDEgXHUwMDNlIHFlbXVcbiYjNDM7XG4mIzQzO0VhY2ggcGF0aCBpcyBvcGVuZWQgZHVyaW5nIGl0cyB3cml0ZSwgaW4gdGhlIHdyaXRpbmcgcHJvY2VzcyYjMzk7cyBjb250ZXh0IGFuZFxuJiM0Mzt3aXRoIHRoZSBjcmVkZW50aWFscyB0aGUgZW50cnkgZmlsZSB3YXMgb3BlbmVkIHdpdGgsIGV4YWN0bHkgdGhlIHdheSBgYEZgYFxuJiM0MztwcmUtb3BlbnMgYSBzdGF0aWMgZW50cnkmIzM5O3MgaW50ZXJwcmV0ZXI7IHRoZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLiBUaGVcbiYjNDM7cGF0aCBpcyBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0IHNwYWNlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGl0IGNhbm5vdFxuJiM0MztleHByZXNzLCBhbmQgbm8gaW50ZXJwcmV0ZXIgaGFzIHRvIGZpdCBpbiBhIHJlZ2lzdGVyIHN0cmluZy4gQW4gZW50cnlcbiYjNDM7YmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzOyBhIHdyaXRlIHBhc3QgdGhhdCBpcyByZWZ1c2VkIHdpdGhcbiYjNDM7YGAtRU5PU1BDYGAuIFRvIGJpbmQgYSBmaWxlIHRoYXQgaGFzIG5vIHBhdGggb2YgaXRzIG93biAtIGFscmVhZHlcbiYjNDM7dW5saW5rZWQsIGEgYGBtZW1mZGBgLCBvciByZWFjaGFibGUgb25seSBpbiBhbm90aGVyIG1vdW50IG5hbWVzcGFjZSAtXG4mIzQzO29wZW4gaXQgYW5kIHdyaXRlIGBgL3Byb2Mvc2VsZi9mZC9OYGAuXG4mIzQzO1xuJiM0MztUaGUgYGBsb2FkYGAgcHJvZ3JhbSB0aGVuIHNlbGVjdHMgb25lIHBlciBleGVjIGJ5IG5hbWUgd2l0aCB0aGVcbiYjNDM7YGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKWBgIGtmdW5jLCBhbmQgZXZlcnkgZXhlYyBydW5zIGEgY2xvbmUgb2YgdGhlXG4mIzQzO2ZpbGUgdGhhdCB3YXMgb3BlbmVkLiBUaGUgcGF0aCBkZWNpZGVzIHdoaWNoIGZpbGUgaXMgYm91bmQgYW5kIG5vdGhpbmdcbiYjNDM7ZWxzZTogaXQgaXMgbm90IHJlc29sdmVkIGFnYWluLCBpbiBhbnkgbmFtZXNwYWNlLCBzbyB3aGF0IGl0IGhvbGRzIGxhdGVyIC1cbiYjNDM7b3Igd2hhdCBpdCBob2xkcyBpbiB0aGUgbmFtZXNwYWNlIG9mIHdob2V2ZXIgcnVucyB0aGUgYmluYXJ5IC0gbm8gbG9uZ2VyXG4mIzQzO2RlY2lkZXMgYW55dGhpbmcuXG4mIzQzO1xuJiM0MztFbmFibGluZyB0aGUgZW50cnkgZW5kcyB0aGlzLiBJdHMgaW50ZXJwcmV0ZXJzIGFyZSByZWFkIGF0IGV4ZWMgdGltZSB3aXRoXG4mIzQzO25vdGhpbmcgYnV0IGEgcmVmZXJlbmNlIGhlbGQgb24gdGhlIGVudHJ5LCBzbyBhbiBlbnRyeSB0aGF0IGhhcyBldmVyIGJlZW5cbiYjNDM7bWF0Y2hhYmxlIGNhbiBuZXZlciBoYXZlIGl0cyBzZXQgY2hhbmdlZCBhZ2FpbjogdGhlIGZpcnN0IGBgMWBgIHNlYWxzIGl0LFxuJiM0Mztmcm9tIHRoZW4gb24gYGAmIzQzO2BgIGlzIHJlZnVzZWQgd2l0aCBgYC1FQlVTWWBgLCBhbmQgYW4gZW50cnkgcmVnaXN0ZXJlZFxuJiM0Mzt3aXRob3V0IGBgRGBgIGlzIHNlYWxlZCBmcm9tIHRoZSBzdGFydC4gQmluZGluZyBhIG5hbWUgdHdpY2UgaXMgcmVmdXNlZFxuJiM0Mzt3aXRoIGBgLUVFWElTVGBgLlxuJiM0MztcbiYjNDM7U2VsZWN0aW9uIGlzIGJ5IG5hbWUgc28gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGhlIHByb2dyYW0gbmVlZCBub3RcbiYjNDM7YWdyZWUgb24gYW4gb3JkZXIsIGFuZCBzbyB0aGF0IGEgaGFuZGxlciBpcyBub3QgdGllZCB0byB3aGVyZSBhIGRpc3RyaWJ1dGlvblxuJiM0MztwdXRzIGl0cyBpbnRlcnByZXRlcnMuIEEgbmFtZSBpcyBhIHNpbmdsZSB3b3JkIG9mIHByaW50YWJsZSBBU0NJSSwgYXQgbW9zdFxuJiM0MzszMiBjaGFyYWN0ZXJzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBnaXZlcyB0aGUgcHJvZ3JhbSBgYC1FTk9FTlRgYCxcbiYjNDM7d2hpY2ggaXQgY2FuIGFjdCBvbiBvciByZXR1cm4uIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIGl0IHdhc1xuJiM0MztyZWdpc3RlcmVkIHVuZGVyLCBhbmQgdGhlIGVudHJ5IHJlcG9ydHMgd2hhdCBpdCBib3VuZDo6XG4mIzQzO1xuJiM0MzsgICAgJCBjYXQgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3FlbXVcbiYjNDM7ICAgIGVuYWJsZWRcbiYjNDM7ICAgIGJwZiBteV9oYW5kbGVyXG4mIzQzOyAgICBicGYtaW50ZXJwcmV0ZXIgYWFyY2g2NCAvdXNyL2Jpbi9xZW11LWFhcmNoNjRcbiYjNDM7ICAgIGJwZi1pbnRlcnByZXRlciBhcm0gL3Vzci9iaW4vcWVtdS1hcm1cbiYjNDM7ICAgIGZsYWdzOlxuJiM0MztcbiYjNDM7VGhlIHBhdGggcmVwb3J0ZWQgaXMgdGhlIG9uZSB0aGUgaW50ZXJwcmV0ZXIgd2FzIGJvdW5kIHVuZGVyLCB3aGljaCBuYW1lZFxuJiM0Mzt0aGUgZmlsZSBhdCB0aGF0IG1vbWVudDsgaXQgaXMgbm90IHJlLXJlc29sdmVkLCBzbyBpdCBpcyBhIHJlY29yZCBvZiB3aGF0XG4mIzQzO3dhcyBib3VuZCByYXRoZXIgdGhhbiBhIHByb21pc2UgYWJvdXQgd2hhdCB0aGF0IHBhdGggaG9sZHMgbm93LlxuIFxuIFRoZSBgYGxvYWRgYCBwcm9ncmFtIGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyIHdpdGhcbiB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnBfYXJnKClgYCBrZnVuYy4gSXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGVcbkBAIC0yMjQsOCAmIzQzOzI4NiwxMSBAQCBoYW5kbGVyIGNhbiBkZWNpZGUgdGhlbSBkaWZmZXJlbnRseSBmb3IgZWFjaCBiaW5hcnkgaXQgaGFuZGxlczpcbiAgIGBgUFRfSU5URVJQYGAgYW5kIHJ1bnMgdGhlIGJpbmFyeSBhcyBhIGZ1bGx5IG5hdGl2ZSBleGVjICh0aGUgYGBMYGBcbiAgIGZsYWcpLiBJdCBleGNsdWRlcyB0aGUgb3RoZXIgZmxhZ3MgYW5kIGEgc3RhZ2VkIGludGVycHJldGVyIGFyZ3VtZW50LlxuIFxuLUJlY2F1c2UgdGhlc2UgYXJlIHByb2dyYW0gY2hvaWNlcywgYSBgYEJgYCBlbnRyeSBjYXJyaWVzIG5vIGZsYWdzIGluIHRoZVxuLXJlZ2lzdGVyIHN0cmluZzsgYGBGYGAgKHByZS1vcGVuIGEgZml4ZWQgaW50ZXJwcmV0ZXIpIGhhcyBubyBtZWFuaW5nIGZvciBpdC5cbiYjNDM7QmVjYXVzZSB0aGVzZSBhcmUgcHJvZ3JhbSBjaG9pY2VzLCBhIGBgQmBgIGVudHJ5IGNhcnJpZXMgbm8gaW52b2NhdGlvblxuJiM0MztmbGFncyBpbiB0aGUgcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCBoYXMgbm9uZSB0byBzcGVsbCBmb3IgaXQgZWl0aGVyLCBzaW5jZVxuJiM0Mzt0aGUgaW50ZXJwcmV0ZXJzIGl0IGJpbmRzIGFscmVhZHkgcHJlLW9wZW4gd2hhdCBgYEZgYCB3b3VsZC4gVGhlXG4mIzQzO3JlZ2lzdHJhdGlvbiBkaXJlY3RpdmUgYGBEYGAgaXMgdGhlIGV4Y2VwdGlvbjogaXQgZGVjaWRlcyBob3cgdGhlIGVudHJ5XG4mIzQzO3N0YXJ0cyBvdXQsIG5vdCBob3cgdGhlIGludGVycHJldGVyIGlzIGludm9rZWQuXG4gXG4gSGFuZGxlcnMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgdGhlIHN0cnVjdF9vcHMgbWFwIHdhc1xuIHJlZ2lzdGVyZWQgaW4sIGZhbGxpbmcgYmFjayB0byBhbmNlc3RvciBuYW1lc3BhY2VzLCBtaXJyb3JpbmcgaG93XG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcbmluZGV4IDcwN2Y4YTE0ZjhhNjMuLmFkOGM0ZjY0YmYxMDIgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzYy5jXG5AQCAtMjQsNiAmIzQzOzI0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mc19jb250ZXh0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc3RydG94LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbkBAIC0zNyw2ICYjNDM7MzksOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuJiM0MztcbiAvKiBFbnRyeSBzdGF0dXMgYW5kIG1hdGNoIHR5cGUgYml0IG51bWJlcnMuICovXG4gZW51bSBiaW5mbXRfbWlzY19lbnRyeV9iaXRzIHtcbiBcdE1JU0NfRk1UX0VOQUJMRURfQklUXHQ9IDAsXG5AQCAtNTIsOCAmIzQzOzU2LDE3IEBAIGVudW0gYmluZm10X21pc2NfZW50cnlfZmxhZ3Mge1xuIFx0TUlTQ19GTVRfT1BFTl9GSUxFXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMjgpLFxuIFx0TUlTQ19GTVRfVFJBTlNQQVJFTlRcdD0gKDFVIFx1MDAzY1x1MDAzYyAyNyksXG4gXHRNSVNDX0ZNVF9MT0FERVJcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDI2KSxcbiYjNDM7XHRNSVNDX0ZNVF9ESVNBQkxFRFx0PSAoMVUgXHUwMDNjXHUwMDNjIDI1KSxcbiB9O1xuIFxuJiM0MzsvKiBUaGUgZmxhZ3MgdGhhdCBzaGFwZSB0aGUgaW52b2NhdGlvbjsgYSAmIzM5O0ImIzM5OyBoYW5kbGVyIHBpY2tzIHRob3NlIHBlciBleGVjLiAqL1xuJiM0MzsjZGVmaW5lIE1JU0NfRk1UX0lOVk9DQVRJT05fRkxBR1MgKE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwIHxcdFxcXG4mIzQzO1x0XHRcdFx0ICAgTUlTQ19GTVRfT1BFTl9CSU5BUlkgfFx0XFxcbiYjNDM7XHRcdFx0XHQgICBNSVNDX0ZNVF9DUkVERU5USUFMUyB8XHRcXFxuJiM0MztcdFx0XHRcdCAgIE1JU0NfRk1UX09QRU5fRklMRSB8XHRcdFxcXG4mIzQzO1x0XHRcdFx0ICAgTUlTQ19GTVRfVFJBTlNQQVJFTlQgfFx0XFxcbiYjNDM7XHRcdFx0XHQgICBNSVNDX0ZNVF9MT0FERVIpXG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIC0gYSBmbGFnIGNoYXJhY3RlciBvZiB0aGUgcmVnaXN0ZXIgc3RyaW5nXG4gICogQGM6IHRoZSBjaGFyYWN0ZXIgdXNlcnNwYWNlIHdyaXRlcyBhbmQgcmVhZHMgYmFja1xuQEAgLTc1LDYgJiM0Mzs4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyBtaXNjX2ZsYWdzW10gPSB7XG4gXHR7ICYjMzk7RiYjMzk7LCBNSVNDX0ZNVF9PUEVOX0ZJTEUsXHQwLFx0XHRcdFwmIzM0O29wZW4gaW50ZXJwcmV0ZXIgZmlsZSBub3dcJiMzNDtcdH0sXG4gXHR7ICYjMzk7VCYjMzk7LCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcdE1JU0NfRk1UX09QRU5fQklOQVJZLFx0XCYjMzQ7dHJhbnNwYXJlbnRcJiMzNDtcdFx0XHR9LFxuIFx0eyAmIzM5O0wmIzM5OywgTUlTQ19GTVRfTE9BREVSLFx0XHQwLFx0XHRcdFwmIzM0O2xvYWRlciBzdWJzdGl0dXRpb25cJiMzNDtcdFx0fSxcbiYjNDM7XHR7ICYjMzk7RCYjMzk7LCBNSVNDX0ZNVF9ESVNBQkxFRCxcdDAsXHRcdFx0XCYjMzQ7cmVnaXN0ZXIgZGlzYWJsZWRcJiMzNDtcdFx0fSxcbiB9O1xuIFxuIC8qIExvb2sgdXAgYSBmbGFnIGNoYXJhY3RlciwgTlVMTCBpZiBAYyBpcyBub3Qgb25lLiAqL1xuQEAgLTk2LDkgJiM0MzsxMTAsOSBAQCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkge1xuIFx0Y29uc3QgY2hhciAqaW50ZXJwcmV0ZXI7XHQvKiBmaWxlbmFtZSBvZiBpbnRlcnByZXRlciAqL1xuIFx0Y2hhciAqbmFtZTtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbi1cdHN0cnVjdCBmaWxlICppbnRlcnBfZmlsZTtcbiBcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7XHQvKiBicGYtYmFja2VkIGhhbmRsZXIgKCYjMzk7QiYjMzk7KSAqL1xuIFx0Y29uc3QgY2hhciAqYnBmX29wc19uYW1lO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJwcztcdC8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi9cbiBcdHJlZmNvdW50X3QgdXNlcnM7XHRcdC8qIHN5bmMgcmVtb3ZhbCB3aXRoIGxvYWRfbWlzY19iaW5hcnkoKSAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdGNoYXIgYnVmW107XHRcdFx0LyogcmVnaXN0ZXIgc3RyaW5nLCBmaWVsZHMgcG9pbnQgaW4gaGVyZSAqL1xuQEAgLTE3NSw3ICYjNDM7MTg5LDEyIEBAIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHQvKiBXYWxrIGFsbCB0aGUgcmVnaXN0ZXJlZCBoYW5kbGVycy4gKi9cbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlLCBcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXMsIG5vZGUsXG4gXHRcdFx0XHQgc3JjdV9yZWFkX2xvY2tfaGVsZChcdTAwMjZibV9lbnRyaWVzX3NyY3UpKSB7XG4tXHRcdC8qIE1ha2Ugc3VyZSB0aGlzIG9uZSBpcyBjdXJyZW50bHkgZW5hYmxlZC4gKi9cbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBNYWtlIHN1cmUgdGhpcyBvbmUgaXMgY3VycmVudGx5IGVuYWJsZWQuIEFuIGVudHJ5IGVudGVyc1xuJiM0MztcdFx0ICogdGhlIGxpc3QgYXQgbW9zdCBvbmNlIGFuZCBvbmx5IHdob2xlOiBpdHMgY29uZmlndXJhdGlvbiBpc1xuJiM0MztcdFx0ICogb3JkZXJlZCBiZWZvcmUgdGhlIHJjdSBpbnNlcnRpb24gdGhhdCBtYWtlcyBpdCB2aXNpYmxlXG4mIzQzO1x0XHQgKiBoZXJlLlxuJiM0MztcdFx0ICovXG4gXHRcdGlmICghdGVzdF9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTIxNiw2ICYjNDM7MjM1LDEwOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpnZXRfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuIFx0cmV0dXJuIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBiaW5mbXRfbWlzY19maW5kX2ludGVycCAtIGZpbmQgYSBib3VuZCBpbnRlcnByZXRlciBieSBuYW1lXG4mIzQzOyAqIEBpbnRlcnBzOiB0aGUgaW50ZXJwcmV0ZXJzIHRoZSBtYXRjaGVkIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbiYjNDM7ICogQG5hbWU6IHRoZSBuYW1lIHRvIGxvb2sgZm9yXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIGludGVycHJldGVyIG9uIHN1Y2Nlc3MsIE5VTEwgaWYgQGludGVycHMgaGFzIG5vbmUgYnkgdGhhdCBuYW1lXG4mIzQzOyAqL1xuJiM0Mztjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICpcbiYjNDM7YmluZm10X21pc2NfZmluZF9pbnRlcnAoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaW50ZXJwcywgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlcnAsIGludGVycHMsIGxpc3QpXG4mIzQzO1x0XHRpZiAoIXN0cmNtcChpbnRlcnAtXHUwMDNlbmFtZSwgbmFtZSkpXG4mIzQzO1x0XHRcdHJldHVybiBpbnRlcnA7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFVuZG8gdGhlIG9wZW5fZXhlYygpIGEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBmaWxlIGNhbWUgZnJvbS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgY2xvc2VfaW50ZXJwX2ZpbGUoc3RydWN0IGZpbGUgKmYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoZikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xuJiM0MztcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0RFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPcGVuIGFuIGludGVycHJldGVyIEBwYXRoIGZvciBleGVjdXRpb246IG5vdywgaW4gdGhlIHdyaXRlciYjMzk7cyBjb250ZXh0LFxuJiM0MzsgKiBhbmQgLSBzaW5jZSBiaW5mbXRfbWlzYyBtb3VudHMgY2FuIGJlIHVucHJpdmlsZWdlZCAtIHdpdGggQGNyZWQsIHRoZVxuJiM0MzsgKiBjcmVkZW50aWFscyB0aGUgY29udHJvbCBmaWxlIGJlaW5nIHdyaXR0ZW4gd2FzIG9wZW5lZCB3aXRoLCBub3QgdGhlXG4mIzQzOyAqIHdyaXRlciYjMzk7cyBvd24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGZpbGUgKm9wZW5faW50ZXJwX2ZpbGUoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsIGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZjtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX3dpdGhfY3JlZHMoY3JlZClcbiYjNDM7XHRcdGYgPSBvcGVuX2V4ZWMocGF0aCk7XG4mIzQzO1x0aWYgKElTX0VSUihmKSlcbiYjNDM7XHRcdHByX25vdGljZShcJiMzNDtyZWdpc3RlcjogZmFpbGVkIHRvIGluc3RhbGwgaW50ZXJwcmV0ZXIgJXNcXG5cJiMzNDssIHBhdGgpO1xuJiM0MztcdHJldHVybiBmO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWxlYXNlIHRoZSBpbnRlcnByZXRlcnMgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aC4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnAsICp0bXA7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnRlcnAsIHRtcCwgXHUwMDI2ZS1cdTAwM2VpbnRlcnBzLCBsaXN0KSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZpbnRlcnAtXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRjbG9zZV9pbnRlcnBfZmlsZShpbnRlcnAtXHUwMDNlZmlsZSk7XG4mIzQzO1x0XHRrZnJlZShpbnRlcnApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlciAtIGJpbmQgYW4gb3BlbmVkIGludGVycHJldGVyIHRvIEBlXG4mIzQzOyAqIEBlOiBlbnRyeSBiZWluZyBjb25maWd1cmVkXG4mIzQzOyAqIEBuYW1lOiBuYW1lIHRoZSBsb2FkIHByb2dyYW0gd2lsbCBzZWxlY3QgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWRcbiYjNDM7ICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljIGVudHJ5XG4mIzQzOyAqIEBwYXRoOiB0aGUgcGF0aCBAZiB3YXMgb3BlbmVkIGZyb21cbiYjNDM7ICogQGY6IHRoZSBpbnRlcnByZXRlciwgb3BlbmVkIGZvciBleGVjdXRpb25cbiYjNDM7ICpcbiYjNDM7ICogRXZlcnkgZXhlYyBydW5zIGEgY2xvbmUgb2YgQGYsIHNvIHRoZSBwYXRoIGRlY2lkZWQgd2hpY2ggZmlsZSBpcyBib3VuZFxuJiM0MzsgKiBhbmQgbm90aGluZyBlbHNlOiBpdCBpcyBub3QgcmVzb2x2ZWQgYWdhaW4sIGluIGFueSBuYW1lc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgaGFzIHRvIGhhdmUgdmFsaWRhdGVkIEBuYW1lIGFuZCBAcGF0aCwgZXN0YWJsaXNoZWQgdGhhdCBAZVxuJiM0MzsgKiBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQsIGFuZCBvd25zIEBmIHVudGlsIHRoaXMgc3VjY2VlZHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiYjNDM7XHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGZpbGUgKmYpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbmxlbiA9IHN0cmxlbihuYW1lKSwgcGxlbiA9IHN0cmxlbihwYXRoKTtcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XG4mIzQzO1xuJiM0MztcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcdTAwMjZlLVx1MDAzZWludGVycHMsIG5hbWUpKVxuJiM0MztcdFx0cmV0dXJuIC1FRVhJU1Q7XG4mIzQzO1x0aWYgKGxpc3RfY291bnRfbm9kZXMoXHUwMDI2ZS1cdTAwM2VpbnRlcnBzKSBcdTAwM2U9IEJJTkZNVF9NSVNDX0lOVEVSUF9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XG4mIzQzO1x0LyogT25lIGFsbG9jYXRpb24sIGJvdGggc3RyaW5ncyBpbiBpdCwgbGlrZSB0aGUgZW50cnkmIzM5O3Mgb3duIGJ1ZmZlci4gKi9cbiYjNDM7XHRpbnRlcnAgPSBrbWFsbG9jKHN0cnVjdF9zaXplKGludGVycCwgbmFtZSwgbmxlbiAmIzQzOyBwbGVuICYjNDM7IDIpLFxuJiM0MztcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRpZiAoIWludGVycClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpbnRlcnAtXHUwMDNlcGF0aCA9IGludGVycC1cdTAwM2VuYW1lICYjNDM7IG5sZW4gJiM0MzsgMTtcbiYjNDM7XHRzdHJzY3B5KGludGVycC1cdTAwM2VuYW1lLCBuYW1lLCBubGVuICYjNDM7IDEpO1xuJiM0MztcdHN0cnNjcHkoaW50ZXJwLVx1MDAzZW5hbWUgJiM0MzsgbmxlbiAmIzQzOyAxLCBwYXRoLCBwbGVuICYjNDM7IDEpO1xuJiM0MztcdGludGVycC1cdTAwM2VmaWxlID0gZjtcbiYjNDM7XHQvKiBQdWJsaXNoIHRoZSBub2RlOiBhIGxvY2tsZXNzIGNhdCBtYXkgYmUgd2Fsa2luZyB0aGUgbGlzdC4gKi9cbiYjNDM7XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZpbnRlcnAtXHUwMDNlbGlzdCwgXHUwMDI2ZS1cdTAwM2VpbnRlcnBzKTtcbiYjNDM7XHRwcl9kZWJ1ZyhcJiMzNDtyZWdpc3RlcjogaW50ZXJwcmV0ZXI6ICVzIHslc31cXG5cJiMzNDssIG5hbWUsIHBhdGgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIHtcbiBcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSwgcmN1KTtcbkBAIC0yMzIsMjEgJiM0MzszNTMsMzYgQEAgc3RhdGljIHZvaWQgYm1fZW50cnlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gICpcbiAgKiBGcmVlIGVudHJ5IHN5bmNpbmcgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgYW5kIGRlZmVyIGZpbmFsIGZyZWUgdG9cbiAgKiBsb2FkX21pc2NfYmluYXJ5KCkgaW4gY2FzZSBpdCBpcyB1c2luZyB0aGUgYmluYXJ5IHR5cGUgaGFuZGxlciB3ZSB3ZXJlXG4tICogcmVxdWVzdGVkIHRvIHJlbW92ZS5cbiYjNDM7ICogcmVxdWVzdGVkIHRvIHJlbW92ZS4gQWxzbyB0aGUgdGVhcmRvd24gZm9yIGEgcmVnaXN0cmF0aW9uIHRoYXQgZmFpbHNcbiYjNDM7ICogYmVmb3JlIGFkZF9lbnRyeSgpIHB1Ymxpc2hlcyB0aGUgZW50cnkuXG4gICovXG4gc3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcbiB7XG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKGUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZS1cdTAwM2V1c2VycykpIHtcbi1cdFx0aWYgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xuLVx0XHRcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhlLVx1MDAzZWludGVycF9maWxlKTtcbi1cdFx0XHRmaWxwX2Nsb3NlKGUtXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xuLVx0XHR9XG4mIzQzO1x0XHRlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpO1xuIFx0XHQvKiBXYWxrZXJzIG1heSBzdGlsbCBkZXJlZmVyZW5jZSB0aGlzIGVudHJ5LCBldmVuIHNsZWVwaW5nLiAqL1xuIFx0XHRjYWxsX3NyY3UoXHUwMDI2Ym1fZW50cmllc19zcmN1LCBcdTAwMjZlLVx1MDAzZXJjdSwgYm1fZW50cnlfZnJlZV9yY3UpO1xuIFx0fVxuIH1cbiBcbi1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBpZiAoX1QpIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXG4mIzQzO0RFRklORV9GUkVFKHB1dF9iaW5mbXRfaGFuZGxlciwgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICosIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXG4mIzQzO1xuJiM0MzsvKiBEcm9wIGV2ZXJ5dGhpbmcgYSBsb2FkIHByb2dyYW0gc3RhZ2VkIGZvciB0aGlzIGV4ZWMuICovXG4mIzQzO3N0YXRpYyB2b2lkIGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbiYjNDM7XHRicHJtLVx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xuJiM0MztcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcpO1xuJiM0MztcdGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcgPSBOVUxMO1xuJiM0MztcdGlmIChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSkge1xuJiM0MztcdFx0ZnB1dChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSk7XG4mIzQzO1x0XHRicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGJwcm0tXHUwMDNlYnBmX2ZsYWdzID0gMDtcbiYjNDM7fVxuIFxuIC8qKlxuICAqIGN1cnJlbnRfYmluZm10X21pc2MgLSBnZXQgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIG9mIHRoZSBjYWxsZXImIzM5O3MgdXNlciBuYW1lc3BhY2VcbkBAIC0yODEsNyAmIzQzOzQxNyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2MgKmN1cnJlbnRfYmluZm10X21pc2Modm9pZClcbiAgKiBAYnBybTogYmluYXJ5IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWRcbiAgKlxuICAqIEEgc3RhdGljIGVudHJ5IGNhcnJpZXMgaXRzIGludGVycHJldGVyIHBhdGgsIGZvciBhICYjMzk7QiYjMzk7IGVudHJ5IHRoZVxuLSAqIGhhbmRsZXImIzM5O3MgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQuIFRoZSBtYXRjaCBpcyBjb21taXR0ZWQsIHNvIGEgZmFpbGluZ1xuJiM0MzsgKiBoYW5kbGVyJiMzOTtzIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0LCBlaXRoZXIgYnkgcGF0aCBvciBieSB0aGUgbmFtZSBvZiBvbmVcbiYjNDM7ICogb2YgdGhlIGludGVycHJldGVycyB0aGUgZW50cnkgYm91bmQuIFRoZSBtYXRjaCBpcyBjb21taXR0ZWQsIHNvIGEgZmFpbGluZ1xuICAqIHByb2dyYW0gZmFpbHMgdGhlIGV4ZWMuXG4gICpcbiAgKiBSZXR1cm46IHRoZSBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBhbiBFUlJfUFRSIG9uIGZhaWx1cmVcbkBAIC0yOTEsMTUgJiM0Mzs0MjgsMjAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4ge1xuIFx0aW50IHJldHZhbDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERyb3Agd2hhdCBhIHByZXZpb3VzIGNoYWluIGxldmVsIHN0YWdlZCBiZWZvcmUgYW55dGhpbmcgY2FuIHBpY2sgaXRcbiYjNDM7XHQgKiB1cC4gQSBzdGF0aWMgZW50cnkgc3RhZ2VzIG5vdGhpbmcgYnV0IGNvbnN1bWVzIGEgc3RhZ2VkIGZpbGUganVzdFxuJiM0MztcdCAqIGxpa2UgYSAmIzM5O0ImIzM5OyBlbnRyeSBkb2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihicHJtKTtcbiYjNDM7XG4gXHRpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZS1cdTAwM2VpbnRlcnByZXRlcjtcbiBcbi1cdC8qIERyb3AgYW55IGludGVycHJldGVyIG9yIGZsYWdzIGEgcHJldmlvdXMgY2hhaW4gbGV2ZWwgc3RhZ2VkLiAqL1xuLVx0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbi1cdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XG4tXHRicHJtLVx1MDAzZWJwZl9mbGFncyA9IDA7XG4tXG4mIzQzO1x0LyogVGhlIGludGVycHJldGVycyB0aGlzIGVudHJ5IGxldHMgdGhlIHByb2dyYW0gY2hvb3NlIGZyb20uICovXG4mIzQzO1x0YnBybS1cdTAwM2VicGZfaW50ZXJwcyA9IFx1MDAyNmUtXHUwMDNlaW50ZXJwcztcbiBcdHJldHZhbCA9IGUtXHUwMDNlYnBmX29wcy1cdTAwM2Vsb2FkKGJwcm0pO1xuJiM0MztcdGJwcm0tXHUwMDNlYnBmX2ludGVycHMgPSBOVUxMO1xuIFx0aWYgKHJldHZhbCkge1xuIFx0XHQvKiBLZWVwIGEgcHJvZ3JhbS1zdXBwbGllZCBlcnJvciB3aXRoaW4gZXJybm8gcmFuZ2UuICovXG4gXHRcdGlmIChyZXR2YWwgXHUwMDNlIDAgfHwgcmV0dmFsIFx1MDAzYyAtTUFYX0VSUk5PKVxuQEAgLTMxNyw5ICYjNDM7NDU5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4gXG4gZHJvcF9zdGFnZWQ6XG4gXHQvKiBBIGZhaWxpbmcgbG9hZCBsZWF2ZXMgbm90aGluZyBiZWhpbmQgZm9yIGxhdGVyIGVudHJpZXMuICovXG4tXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnBfYXJnKTtcbi1cdGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcgPSBOVUxMO1xuLVx0YnBybS1cdTAwM2VicGZfZmxhZ3MgPSAwO1xuJiM0MztcdGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihicHJtKTtcbiBcdHJldHVybiBFUlJfUFRSKHJldHZhbCk7XG4gfVxuIFxuQEAgLTM2NCwyMyAmIzQzOzUwNCwzNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiAvKipcbiAgKiBlbnRyeV9vcGVuX2ludGVycHJldGVyIC0gb3BlbiB0aGUgZW50cnkmIzM5O3MgaW50ZXJwcmV0ZXIgZm9yIGV4ZWN1dGlvblxuICAqIEBlOiBtYXRjaGVkIGJpbmFyeSB0eXBlIGhhbmRsZXJcbiYjNDM7ICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4gICogQGludGVycHJldGVyOiB0aGUgaW50ZXJwcmV0ZXIgc2VsZWN0ZWQgZm9yIHRoaXMgZXhlY1xuICAqXG4gICogQW4gJiMzOTtGJiMzOTsgZW50cnkgaGFuZHMgb3V0IGEgY2xvbmUgb2YgdGhlIGZpbGUgaXQgcHJlLW9wZW5lZCBhdCByZWdpc3RyYXRpb24sXG4tICogYW55IG90aGVyIGVudHJ5IG9wZW5zIHRoZSBzZWxlY3RlZCBwYXRoLlxuJiM0MzsgKiBhbmQgc28gZG9lcyBhICYjMzk7QiYjMzk7IGVudHJ5IHdob3NlIGxvYWQgcHJvZ3JhbSBzZWxlY3RlZCBvbmUgb2YgdGhlXG4mIzQzOyAqIGludGVycHJldGVycyBpdCBib3VuZC4gQW55IG90aGVyIGVudHJ5IG9wZW5zIHRoZSBzZWxlY3RlZCBwYXRoLlxuICAqXG4gICogUmV0dXJuOiB0aGUgb3BlbmVkIGludGVycHJldGVyIG9uIHN1Y2Nlc3MsIGFuIEVSUl9QVFIgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0XHRcdFx0XHQgICBjb25zdCBjaGFyICppbnRlcnByZXRlcilcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGUgX19mcmVlKGZwdXQpID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmJvdW5kO1xuIFx0aW50IHJldHZhbDtcbiBcbi1cdGlmICghKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkpXG4mIzQzO1x0aWYgKGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKSB7XG4mIzQzO1x0XHRib3VuZCA9IGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlO1xuJiM0MztcdH0gZWxzZSBpZiAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfT1BFTl9GSUxFKSB7XG4mIzQzO1x0XHQvKiBBbiAmIzM5O0YmIzM5OyBlbnRyeSBwcmUtb3BlbmVkIGV4YWN0bHkgb25lIGludGVycHJldGVyLiAqL1xuJiM0MztcdFx0aW50ZXJwID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZlLVx1MDAzZWludGVycHMsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAsIGxpc3QpO1xuJiM0MztcdFx0Ym91bmQgPSBpbnRlcnAtXHUwMDNlZmlsZTtcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRyZXR1cm4gb3Blbl9leGVjKGludGVycHJldGVyKTtcbiYjNDM7XHR9XG4gXG4tXHRpbnRlcnBfZmlsZSA9IGZpbGVfY2xvbmVfb3BlbihlLVx1MDAzZWludGVycF9maWxlKTtcbiYjNDM7XHRpbnRlcnBfZmlsZSA9IGZpbGVfY2xvbmVfb3Blbihib3VuZCk7XG4gXHRpZiAoSVNfRVJSKGludGVycF9maWxlKSlcbiBcdFx0cmV0dXJuIGludGVycF9maWxlO1xuIFxuQEAgLTQ5MCw3ICYjNDM7NjQzLDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHQgKiB0byB0aGUgcmVhbCBmb3JtYXQgaW4gdGhlIHNhbWUgcm91bmQuXG4gXHQgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgTUlTQ19GTVRfTE9BREVSKSB7XG4tXHRcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGludGVycHJldGVyKTtcbiYjNDM7XHRcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGJwcm0sIGludGVycHJldGVyKTtcbiBcdFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpIHtcbiBcdFx0XHRyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTtcbiBcdFx0XHQvKiBEZWNsaW5pbmcgaGVyZSB3b3VsZCBydW4gdGhlIGJpbmFyeSYjMzk7cyBvd24gUFRfSU5URVJQLiAqL1xuQEAgLTUxMiw3ICYjNDM7NjY1LDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgaW50ZXJwcmV0ZXIpO1xuJiM0MztcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGJwcm0sIGludGVycHJldGVyKTtcbiBcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihpbnRlcnBfZmlsZSk7XG4gXG5AQCAtNjg0LDcgJiM0Mzs4MzcsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0XHRcdFx0ICAgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbi1cdGNoYXIgKmJ1ZiwgKnAsICpmbGFncztcbiYjNDM7XHRjaGFyICpidWYsICpwO1xuIFx0Y2hhciBkZWw7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtyZWdpc3RlcjogcmVjZWl2ZWQgJXp1IGJ5dGVzXFxuXCYjMzQ7LCBjb3VudCk7XG5AQCAtNzAxLDYgJiM0Mzs4NTQsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdHAgPSBidWYgPSBlLVx1MDAzZWJ1ZjtcbiBcbiBcdG1lbXNldChlLCAwLCBzaXplb2YoKmUpKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZlLVx1MDAzZWludGVycHMpO1xuIFx0aWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xuIFxuQEAgLTc4MCwxOCAmIzQzOzkzNCwzMCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdH1cbiBcbiBcdC8qIFBhcnNlIHRoZSAmIzM5O2ZsYWdzJiMzOTsgZmllbGQuICovXG4tXHRmbGFncyA9IHA7XG4gXHRwID0gY2hlY2tfc3BlY2lhbF9mbGFncyhwLCBlKTtcbiBcbiBcdC8qXG4gXHQgKiBBIGJwZiBoYW5kbGVyIGRlY2lkZXMgdGhlIGludm9jYXRpb24gZmxhZ3MgcGVyIGV4ZWMgd2l0aFxuIFx0ICogYnBmX2JpbnBybV9zZXRfZmxhZ3MoKSByYXRoZXIgdGhhbiBmaXhpbmcgdGhlbSBhdCByZWdpc3RyYXRpb24sIGFuZFxuLVx0ICogJiMzOTtGJiMzOTsgKHByZS1vcGVuIGEgZml4ZWQgaW50ZXJwcmV0ZXIpIGlzIG1lYW5pbmdsZXNzIGZvciBpdCwgc28gYSAmIzM5O0ImIzM5O1xuLVx0ICogZW50cnkmIzM5O3MgZmxhZ3MgZmllbGQgaGFzIHRvIGJlIGVtcHR5LlxuJiM0MztcdCAqIHRoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgcHJlLW9wZW4gd2hhdCAmIzM5O0YmIzM5OyB3b3VsZCBoYXZlLCBzbyBhICYjMzk7QiYjMzk7XG4mIzQzO1x0ICogZW50cnkgY2FycmllcyBubyBpbnZvY2F0aW9uIGZsYWdzLlxuIFx0ICovXG4tXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2IHAgIT0gZmxhZ3MpXG4mIzQzO1x0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfSU5WT0NBVElPTl9GTEFHUykpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogJiMzOTtEJiMzOTsgaXMgYSBkaXJlY3RpdmUgZm9yIHRoaXMgcmVnaXN0cmF0aW9uIHJhdGhlciB0aGFuIGEgbGFzdGluZ1xuJiM0MztcdCAqIHByb3BlcnR5LCBzbyBjb25zdW1lIGl0OiB0aGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBhbmQgc3RheXNcbiYjNDM7XHQgKiBvdXQgb2YgdGhlIHNlYXJjaCBsaXN0IHVudGlsICYjMzk7MSYjMzk7IGlzIHdyaXR0ZW4gdG8gaXRzIGVudHJ5IGZpbGUuXG4mIzQzO1x0ICogU3RheWluZyBvdXQgaXMgd2hhdCBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiBpbnRlcnByZXRlcnM7XG4mIzQzO1x0ICogdGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgaXQsIGZvciBnb29kLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9ESVNBQkxFRCkge1xuJiM0MztcdFx0ZS1cdTAwM2VmbGFncyBcdTAwMjY9IH5NSVNDX0ZNVF9ESVNBQkxFRDtcbiYjNDM7XHRcdGNsZWFyX2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIFRyYW5zcGFyZW5jeSBwcmVzZXJ2ZXMgdGhlIHdob2xlIGFyZ3YsIGFyZ3ZbMF0gaW5jbHVkZWQuICovXG4gXHRpZiAoKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX1RSQU5TUEFSRU5UKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApKVxuQEAgLTgxNCw2ICYjNDM7OTgwLDggQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHQgICAgZS1cdTAwM2VpbnRlcnByZXRlclswXSAhPSAmIzM5Oy8mIzM5OylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4mIzQzO1x0LyogQm9ybiBob2xkaW5nIG9uZSByZWZlcmVuY2U7IHB1dF9iaW5mbXRfaGFuZGxlcigpIGlzIHRoZSB0ZWFyZG93bi4gKi9cbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2ZS1cdTAwM2V1c2VycywgMSk7XG4gXHRyZXR1cm4gbm9fZnJlZV9wdHIoZSk7XG4gfVxuIFxuQEAgLTgyNSwxOCAmIzQzOzk5MywxNyBAQCBlbnVtIGJtX2NvbW1hbmQge1xuIFx0Qk1fQ01EX1JFTU9WRSxcdC8qIFwmIzM0Oy0xXCYjMzQ7ICovXG4gfTtcbiBcbiYjNDM7LyogTG9uZ2VzdCBvZiB0aGUgY29tbWFuZHMgYWJvdmUsIFwmIzM0Oy0xXFxuXCYjMzQ7LiAqL1xuJiM0MzsjZGVmaW5lIE1BWF9DT01NQU5EX0xFTkdUSCAzXG4mIzQzO1xuIC8qXG4gICogUGFyc2Ugd2hhdCB1c2Vyc3BhY2Ugd3JvdGUgdG8gL3N0YXR1cyBvciBhbiBlbnRyeSBmaWxlOiAmIzM5OzEmIzM5OyBlbmFibGVzLFxuICAqICYjMzk7MCYjMzk7IGRpc2FibGVzIGFuZCAmIzM5Oy0xJiMzOTsgcmVtb3ZlcyB0aGUgZW50cnkgb3IgYWxsIGVudHJpZXMuXG4gICovXG4tc3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcbiYjNDM7c3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBjb3VudClcbiB7XG4tXHRjaGFyIHNbNF07XG4tXG4tXHRpZiAoY291bnQgXHUwMDNlIDMpXG4mIzQzO1x0aWYgKGNvdW50IFx1MDAzZSBNQVhfQ09NTUFORF9MRU5HVEgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0aWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmICghY291bnQpXG4gXHRcdHJldHVybiBCTV9DTURfSUdOT1JFO1xuIFx0aWYgKHNbY291bnQgLSAxXSA9PSAmIzM5O1xcbiYjMzk7KVxuQEAgLTg1MCw4ICYjNDM7MTAxNywyNiBAQCBzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MzsvKiBDb3B5IGluIGEgY29tbWFuZCBmcm9tIGEgZmlsZSB0aGF0IHRha2VzIG5vdGhpbmcgZWxzZSwgYW5kIHBhcnNlIGl0LiAqL1xuJiM0MztzdGF0aWMgaW50IHJlYWRfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHNbTUFYX0NPTU1BTkRfTEVOR1RIICYjNDM7IDFdO1xuJiM0MztcbiYjNDM7XHRpZiAoY291bnQgXHUwMDNlIHNpemVvZihzKSAtIDEpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIocywgYnVmZmVyLCBjb3VudCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRyZXR1cm4gcGFyc2VfY29tbWFuZChzLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gLyogZ2VuZXJpYyBzdHVmZiAqL1xuIFxuJiM0MzsvKiBUaGUgcm9vdCBkaXJlY3RvcnkmIzM5O3MgaW5vZGU7IGl0cyBsb2NrIHNlcmlhbGl6ZXMgY29uZmlndXJpbmcgYW4gaW5zdGFuY2UuICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBkX2lub2RlKHNiLVx1MDAzZXNfcm9vdCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgYm1fc2VxX2hleChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHU4ICpkYXRhLCBpbnQgc2l6ZSlcbiB7XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspXG5AQCAtODY3LDEwICYjNDM7MTA1MiwyMyBAQCBzdGF0aWMgaW50IGJtX2VudHJ5X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpXG4gXHRlbHNlXG4gXHRcdHNlcV9wdXRzKG0sIFwmIzM0O2Rpc2FibGVkXFxuXCYjMzQ7KTtcbiBcbi1cdGlmICh0ZXN0X2JpdChNSVNDX0ZNVF9CUEZfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbiYjNDM7XG4gXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7YnBmICVzXFxuXCYjMzQ7LCBlLVx1MDAzZWJwZl9vcHMtXHUwMDNlbmFtZSk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSBzdGFnZWQgZW50cnkmIzM5O3Mgc2V0IGNhbiBzdGlsbCBncm93LCBzbyBldmVyeSBiaW5kaW5nIGlzXG4mIzQzO1x0XHQgKiByY3UtcHVibGlzaGVkLiBUaGUgb3BlbiBmaWxlIHBpbnMgdGhlIGVudHJ5IGFuZCB3aXRoIGl0XG4mIzQzO1x0XHQgKiBldmVyeSBub2RlLCBzbyByY3UgaXMgZm9yIHRoZSB0ZWFyaW5nLCBub3QgdGhlIGxpZmV0aW1lLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpbnRlcnAsIFx1MDAyNmUtXHUwMDNlaW50ZXJwcywgbGlzdClcbiYjNDM7XHRcdFx0c2VxX3ByaW50ZihtLCBcJiMzNDticGYtaW50ZXJwcmV0ZXIgJXMgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgaW50ZXJwLVx1MDAzZW5hbWUsIGludGVycC1cdTAwM2VwYXRoKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7aW50ZXJwcmV0ZXIgJXNcXG5cJiMzNDssIGUtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuJiM0MztcdH1cbiBcbiBcdC8qIHByaW50IHRoZSBzcGVjaWFsIGZsYWdzICovXG4gXHRzZXFfcHV0cyhtLCBcJiMzNDtmbGFnczogXCYjMzQ7KTtcbkBAIC05OTIsMTAgJiM0MzsxMTkwLDExIEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG4gLyogUmVtb3ZlIEBlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSByZW1vdmVkLiAqL1xuIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuLVx0c3RydWN0IGlub2RlICpyb290ID0gZF9pbm9kZShzYi1cdTAwM2VzX3Jvb3QpO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoc2IpO1xuIFxuIFx0aW5vZGVfbG9ja19uZXN0ZWQocm9vdCwgSV9NVVRFWF9QQVJFTlQpO1xuLVx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZlLVx1MDAzZW5vZGUpKVxuJiM0MztcdC8qIEEgc3RhZ2VkIGVudHJ5IGlzIG5vdCBoYXNoZWQ7IHRoZSBkZW50cnkgc2F5cyBpZiBpdCB3YXMgcmVtb3ZlZC4gKi9cbiYjNDM7XHRpZiAoIWRfdW5oYXNoZWQoZS1cdTAwM2VkZW50cnkpKVxuIFx0XHRyZW1vdmVfYmluZm10X2hhbmRsZXIoaV9iaW5mbXRfbWlzYyhyb290KSwgZSk7XG4gXHRpbm9kZV91bmxvY2socm9vdCk7XG4gfVxuQEAgLTEwMDQsMTMgJiM0MzsxMjAzLDIxIEBAIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2FsbF9lbnRyaWVzKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiBcdFx0XHRcdCAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBkX2lub2RlKHNiLVx1MDAzZXNfcm9vdCk7XG4tXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmU7XG4tXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpjaGlsZCA9IE5VTEw7XG4gXG4gXHRpbm9kZV9sb2NrX25lc3RlZChyb290LCBJX01VVEVYX1BBUkVOVCk7XG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5leHQsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcywgbm9kZSlcbi1cdFx0cmVtb3ZlX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2FsayB0aGUgZGlyZWN0b3J5IHJhdGhlciB0aGFuIHRoZSBzZWFyY2ggbGlzdDogYSBzdGFnZWQgZW50cnlcbiYjNDM7XHQgKiBpcyBpbiB0aGUgZm9ybWVyIGJ1dCBub3QgeWV0IGluIHRoZSBsYXR0ZXIuIFRoZSBjb250cm9sIGZpbGVzXG4mIzQzO1x0ICogY2Fycnkgbm8gZW50cnkgYW5kIHN0YXkuXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKChjaGlsZCA9IGZpbmRfbmV4dF9jaGlsZChzYi1cdTAwM2VzX3Jvb3QsIGNoaWxkKSkpIHtcbiYjNDM7XHRcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGRfaW5vZGUoY2hpbGQpLVx1MDAzZWlfcHJpdmF0ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZSlcbiYjNDM7XHRcdFx0cmVtb3ZlX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGUpO1xuJiM0MztcdH1cbiBcdGlub2RlX3VubG9jayhyb290KTtcbiB9XG4gXG5AQCAtMTA1NiwyMCAmIzQzOzEyNjMsMTM4IEBAIHN0YXRpYyBpbnQgYm1fZW50cnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTG9uZ2VzdCAmIzM5OyYjNDM7XHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJiMzOTsgYSB3cml0ZSBjYW4gc3BlbGwsIGFuZCB3aXRoIGl0IHRoZSBsb25nZXN0XG4mIzQzOyAqIGNvbW1hbmQgYW4gZW50cnkgZmlsZSB0YWtlczogdGhlIHR3byBkZWxpbWl0ZXJzIGFuZCBhIG5ld2xpbmUgb24gdG9wIG9mXG4mIzQzOyAqIHRoZSB0d28gbmFtZXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1BWF9CSU5ESU5HX0xFTkdUSCAoQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYICYjNDM7IFBBVEhfTUFYICYjNDM7IDMpXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYm1fZW50cnlfYWRkX2ludGVycCAtIGJpbmQgYW5vdGhlciBpbnRlcnByZXRlciB0byBhIHN0YWdlZCBlbnRyeVxuJiM0MzsgKiBAZTogdGhlIGVudHJ5XG4mIzQzOyAqIEBmaWxlOiB0aGUgZW50cnkgZmlsZSBiZWluZyB3cml0dGVuIHRvLCBmb3IgaXRzIGNyZWRlbnRpYWxzXG4mIzQzOyAqIEBidWY6IHRoZSAmIzM5OyYjNDM7XHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJiMzOTsgY29tbWFuZCwgcGFyc2VkIGluIHBsYWNlIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyXG4mIzQzOyAqIEBjb3VudDogaXRzIGxlbmd0aFxuJiM0MzsgKlxuJiM0MzsgKiBBICYjMzk7RCYjMzk7IGVudHJ5IGlzIHJlZ2lzdGVyZWQgb3V0c2lkZSB0aGUgc2VhcmNoIGxpc3QsIHdoaWNoIGlzIHdoYXQgbGVhdmVzXG4mIzQzOyAqIGl0IG9wZW4gdG8gYmVpbmcgY29uZmlndXJlZDogaXQgY2Fubm90IGJlIG1hdGNoZWQsIHNvIG5vIGV4ZWMgY2FuIGJlXG4mIzQzOyAqIGhvbGRpbmcgaXRzIGludGVycHJldGVycyBhbmQgdGhlIHNldCBjYW4gc3RpbGwgZ3Jvdy4gSXRzIGZpcnN0IGVuYWJsZVxuJiM0MzsgKiBwdWJsaXNoZXMgaXQgYW5kIGVuZHMgdGhhdC4gT25lIGludGVycHJldGVyIHBlciB3cml0ZSwgdXAgdG9cbiYjNDM7ICogQklORk1UX01JU0NfSU5URVJQX01BWCBvZiB0aGVtLCBub25lIG9mIHdoaWNoIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlclxuJiM0MzsgKiBzdHJpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogQGNvdW50IG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmYgX19mcmVlKGNsb3NlX2ludGVycF9maWxlKSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGlub2RlICpyb290ID0gYm1fcm9vdF9pbm9kZShmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2IpO1xuJiM0MztcdHNpemVfdCBubGVuLCBwbGVuO1xuJiM0MztcdGNoYXIgKm5hbWUsICpwYXRoO1xuJiM0MztcdGludCByZXR2YWw7XG4mIzQzO1xuJiM0MztcdC8qIFNldHRsZWQgYmVmb3JlIHRoZSBvcGVuOiB0eXBlIGlzIGZpeGVkLCBwdWJsaWNhdGlvbiBpcyBwZXJtYW5lbnQuICovXG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChNSVNDX0ZNVF9CUEZfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghaGxpc3RfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2ZS1cdTAwM2Vub2RlKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdC8qICYjMzk7JiM0MztcdTAwM2NuYW1lXHUwMDNlIFx1MDAzY3BhdGhcdTAwM2UmIzM5OzogdGhlIHBhdGggaXMgZXZlcnl0aGluZyBwYXN0IHRoZSBmaXJzdCBzcGFjZS4gKi9cbiYjNDM7XHRuYW1lID0gYnVmICYjNDM7IDE7XG4mIzQzO1x0cGF0aCA9IHN0cmNocihuYW1lLCAmIzM5OyAmIzM5Oyk7XG4mIzQzO1x0aWYgKCFwYXRoKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0KnBhdGgmIzQzOyYjNDM7ID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XG4mIzQzO1x0cGxlbiA9IHN0cmxlbihwYXRoKTtcbiYjNDM7XHQvKiBUaGUgY29tbWFuZCBoYXMgdG8gZW5kIGF0IHRoZSB3cml0ZSwgbGlrZSBhIHJlZ2lzdGVyIHN0cmluZy4gKi9cbiYjNDM7XHRpZiAocGF0aCAmIzQzOyBwbGVuICE9IGJ1ZiAmIzQzOyBjb3VudClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmIChwbGVuIFx1MDAyNlx1MDAyNiBwYXRoW3BsZW4gLSAxXSA9PSAmIzM5O1xcbiYjMzk7KVxuJiM0MztcdFx0cGF0aFstLXBsZW5dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHQvKiBSZXNvbHZlZCBub3csIHNvIGEgcmVsYXRpdmUgcGF0aCB3b3VsZCBuYW1lIHRoZSB3cml0ZXImIzM5O3MgY3dkLiAqL1xuJiM0MztcdGlmIChwYXRoWzBdICE9ICYjMzk7LyYjMzk7KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdG5sZW4gPSBwYXRoIC0gbmFtZSAtIDE7XG4mIzQzO1x0aWYgKCFubGVuIHx8IG5sZW4gXHUwMDNlIEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdC8qIFRoZSBuYW1lIHByaW50cyBiZXR3ZWVuIGRlbGltaXRlcnMsIHNvIGtlZXAgaXQgYSBwcmludGFibGUgd29yZC4gKi9cbiYjNDM7XHRmb3IgKGNvbnN0IGNoYXIgKnAgPSBuYW1lOyAqcDsgcCYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoIWlzYXNjaWkoKnApIHx8ICFpc2dyYXBoKCpwKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIE9wZW5lZCBiZWZvcmUgdGhlIGxvY2s6IHJlc29sdmluZyBpdCBtYXkgd2FsayB0aGlzIHZlcnkgZmlsZXN5c3RlbS4gKi9cbiYjNDM7XHRmID0gb3Blbl9pbnRlcnBfZmlsZShmaWxlLVx1MDAzZWZfY3JlZCwgcGF0aCk7XG4mIzQzO1x0aWYgKElTX0VSUihmKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGYpO1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrKHJvb3QpO1xuJiM0MztcdGlmIChkX3VuaGFzaGVkKGUtXHUwMDNlZGVudHJ5KSlcbiYjNDM7XHRcdHJldHZhbCA9IC1FTk9FTlQ7XHQvKiByZW1vdmVkIHdoaWxlIHdlIHdlcmUgb3BlbmluZyBpdCAqL1xuJiM0MztcdGVsc2UgaWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZlLVx1MDAzZW5vZGUpKVxuJiM0MztcdFx0cmV0dmFsID0gLUVCVVNZO1x0LyogcHVibGlzaGVkIHdoaWxlIHdlIHdlcmUgb3BlbmluZyBpdCAqL1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHZhbCA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBuYW1lLCBwYXRoLCBmKTtcbiYjNDM7XHRpbm9kZV91bmxvY2socm9vdCk7XG4mIzQzO1x0aWYgKHJldHZhbClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZSBlbnRyeSBub3cuICovXG4mIzQzO1x0cmV0YWluX2FuZF9udWxsX3B0cihmKTtcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiBcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGlub2RlLVx1MDAzZWlfcHJpdmF0ZTtcbi1cdGludCByZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xuJiM0MztcdGNoYXIgKmJ1ZiBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHQvKiBBIGJpbmRpbmcgaXMgdGhlIGxvbmdlc3QgY29tbWFuZCB0aGlzIGZpbGUgdGFrZXMuICovXG4mIzQzO1x0aWYgKGNvdW50IFx1MDAzZSBNQVhfQklORElOR19MRU5HVEgpXG4mIzQzO1x0XHRyZXR1cm4gLUUyQklHO1xuJiM0MztcbiYjNDM7XHRidWYgPSBtZW1kdXBfdXNlcl9udWwoYnVmZmVyLCBjb3VudCk7XG4mIzQzO1x0aWYgKElTX0VSUihidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbiYjNDM7XG4mIzQzO1x0LyogJiMzOTsmIzQzO1x1MDAzY25hbWVcdTAwM2UgXHUwMDNjcGF0aFx1MDAzZSYjMzk7IGJpbmRzIGFuIGludGVycHJldGVyLCBldmVyeXRoaW5nIGVsc2UgdG9nZ2xlcy4gKi9cbiYjNDM7XHRpZiAoYnVmWzBdID09ICYjMzk7JiM0MzsmIzM5OylcbiYjNDM7XHRcdHJldHVybiBibV9lbnRyeV9hZGRfaW50ZXJwKGUsIGZpbGUsIGJ1ZiwgY291bnQpO1xuJiM0MztcbiYjNDM7XHRyZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZiwgY291bnQpO1xuIFxuIFx0c3dpdGNoIChyZXMpIHtcbiBcdGNhc2UgQk1fQ01EX0RJU0FCTEU6XG4gXHRcdGNsZWFyX2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncyk7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBCTV9DTURfRU5BQkxFOlxuJiM0MztcdGNhc2UgQk1fQ01EX0VOQUJMRToge1xuJiM0MztcdFx0c3RydWN0IGlub2RlICpyb290ID0gYm1fcm9vdF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgYSAmIzM5O0QmIzM5OyBlbnRyeSBpbnRvIHRoZSBzZWFyY2hcbiYjNDM7XHRcdCAqIGxpc3QsIHdob2xlLiBUaGUgbG9jayBrZWVwcyB0aGF0IG9yZGVyZWQgYWdhaW5zdCBhIHNlY29uZFxuJiM0MztcdFx0ICogZW5hYmxlLCBhZ2FpbnN0IHJlbW92YWwgLSBhIHJlbW92ZWQgZW50cnkgaGFzIG5vdGhpbmcgbGVmdFxuJiM0MztcdFx0ICogdG8gcHVibGlzaCAtIGFuZCBhZ2FpbnN0IGJpbmRpbmc6IHdoYXQgY2FuIGJlIG1hdGNoZWQgY2FuXG4mIzQzO1x0XHQgKiBubyBsb25nZXIgYmUgY29uZmlndXJlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW5vZGVfbG9jayhyb290KTtcbiBcdFx0c2V0X2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2ZS1cdTAwM2Vub2RlKSBcdTAwMjZcdTAwMjYgIWRfdW5oYXNoZWQoZS1cdTAwM2VkZW50cnkpKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbiYjNDM7XHRcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmUtXHUwMDNlbm9kZSwgXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzKTtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xuIFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRjYXNlIEJNX0NNRF9SRU1PVkU6XG4gXHRcdGJtX3JlbW92ZV9lbnRyeShlLCBpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdFx0YnJlYWs7XG5AQCAtMTEwNiwxNiAmIzQzOzE0MzEsMTggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbi1cdHJlZmNvdW50X3NldChcdTAwMjZlLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGUtXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xuIFx0aW5vZGUtXHUwMDNlaV9wcml2YXRlID0gZTtcbiBcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2Ym1fZW50cnlfb3BlcmF0aW9ucztcbiBcbiBcdGRfbWFrZV9wZXJzaXN0ZW50KGRlbnRyeSwgaW5vZGUpO1xuLVx0bWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbi1cdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZlLVx1MDAzZW5vZGUsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcyk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG4mIzQzO1x0LyogQSAmIzM5O0QmIzM5OyBlbnRyeSBzdGF5cyBvdXQgb2YgdGhlIHNlYXJjaCBsaXN0IHVudGlsIGl0cyBmaXJzdCBlbmFibGUuICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0bWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpO1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbiYjNDM7XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZlLVx1MDAzZW5vZGUsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcyk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG4mIzQzO1x0fVxuIFx0c2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTIzLDkgJiM0MzsxNDUwLDggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4tXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplIF9fZnJlZShwdXRfYmluZm10X2hhbmRsZXIpID0gTlVMTDtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBmaWxlX2lub2RlKGZpbGUpLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgZmlsZSAqZiA9IE5VTEw7XG4gXHRpbnQgZXJyO1xuIFxuIFx0ZSA9IGNyZWF0ZV9lbnRyeShidWZmZXIsIGNvdW50KTtcbkBAIC0xMTQyLDMzICYjNDM7MTQ2OCwyMCBAQCBzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdH1cbiBcbiBcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbi1cdFx0Lypcbi1cdFx0ICogTm93IHRoYXQgd2Ugc3VwcG9ydCB1bnByaXZpbGVnZWQgYmluZm10X21pc2MgbW91bnRzIG1ha2Vcbi1cdFx0ICogc3VyZSB3ZSB1c2UgdGhlIGNyZWRlbnRpYWxzIHRoYXQgdGhlIHJlZ2lzdGVyIEBmaWxlIHdhc1xuLVx0XHQgKiBvcGVuZWQgd2l0aCB0byBhbHNvIG9wZW4gdGhlIGludGVycHJldGVyLiBCZWZvcmUgdGhhdCB0aGlzXG4tXHRcdCAqIGRpZG4mIzM5O3QgbWF0dGVyIG11Y2ggYXMgb25seSBhIHByaXZpbGVnZWQgcHJvY2VzcyBjb3VsZCBvcGVuXG4tXHRcdCAqIHRoZSByZWdpc3RlciBmaWxlLlxuLVx0XHQgKi9cbi1cdFx0c2NvcGVkX3dpdGhfY3JlZHMoZmlsZS1cdTAwM2VmX2NyZWQpXG4tXHRcdFx0ZiA9IG9wZW5fZXhlYyhlLVx1MDAzZWludGVycHJldGVyKTtcbi1cdFx0aWYgKElTX0VSUihmKSkge1xuLVx0XHRcdHByX25vdGljZShcJiMzNDtyZWdpc3RlcjogZmFpbGVkIHRvIGluc3RhbGwgaW50ZXJwcmV0ZXIgZmlsZSAlc1xcblwmIzM0Oyxcbi1cdFx0XHRcdCBlLVx1MDAzZWludGVycHJldGVyKTtcbiYjNDM7XHRcdHN0cnVjdCBmaWxlICpmID0gb3Blbl9pbnRlcnBfZmlsZShmaWxlLVx1MDAzZWZfY3JlZCwgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKElTX0VSUihmKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihmKTtcbiYjNDM7XHRcdGVyciA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBcJiMzNDtcJiMzNDssIGUtXHUwMDNlaW50ZXJwcmV0ZXIsIGYpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRjbG9zZV9pbnRlcnBfZmlsZShmKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0XHRlLVx1MDAzZWludGVycF9maWxlID0gZjtcbiBcdH1cbiBcbiBcdGVyciA9IGFkZF9lbnRyeShlLCBzYik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGlmIChmKSB7XG4tXHRcdFx0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xuLVx0XHRcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4tXHRcdH1cbi1cdFx0aWYgKGUtXHUwMDNlYnBmX29wcylcbi1cdFx0XHRiaW5mbXRfbWlzY19wdXRfb3BzKGUtXHUwMDNlYnBmX29wcyk7XG4mIzQzO1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdC8qIFRoZSBlbnRyeSBpcyBvd25lZCBieSBpdHMgaW5vZGUgbm93LiAqL1xuIFx0cmV0YWluX2FuZF9udWxsX3B0cihlKTtcbkBAIC0xMTk3LDcgJiM0MzsxNTEwLDcgQEAgc3RhdGljIHNzaXplX3QgYm1fc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2M7XG4tXHRpbnQgcmVzID0gcGFyc2VfY29tbWFuZChidWZmZXIsIGNvdW50KTtcbiYjNDM7XHRpbnQgcmVzID0gcmVhZF9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xuIFxuIFx0bWlzYyA9IGlfYmluZm10X21pc2MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXHRzd2l0Y2ggKHJlcykge1xuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbmluZGV4IDkyMDAzZWE2NDBkM2YuLmIyNDZkODg2NDM3YjggMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzY19icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmluZm10X21pc2NfYnBmLmNcbkBAIC03LDYgJiM0Mzs3LDE1IEBAXG4gICogbmFtZXNwYWNlIGl0IHdhcyByZWdpc3RlcmVkIGluLiBBIGJpbmZtdF9taXNjICYjMzk7QiYjMzk7IGVudHJ5IGFjdGl2YXRlcyBpdDpcbiAgKlxuICAqICAgZWNobyAmIzM5OzplbnRyeTpCOjo6Olx1MDAzY2hhbmRsZXItbmFtZVx1MDAzZTomIzM5OyBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvcmVnaXN0ZXJcbiYjNDM7ICpcbiYjNDM7ICogVGhlIGVudHJ5IGNhbiBiaW5kIHRoZSBpbnRlcnByZXRlcnMgdGhlIGhhbmRsZXIgbWF5IHJ1biBpdHMgYmluYXJpZXNcbiYjNDM7ICogd2l0aCwgZWFjaCBvcGVuZWQgYnkgdGhlIHdyaXRlIHRoYXQgYmluZHMgaXQgYW5kIHNlbGVjdGVkIGJ5IG5hbWUgcGVyXG4mIzQzOyAqIGV4ZWMuIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aCAmIzM5O0QmIzM5OyBpcyBub3QgbWF0Y2hhYmxlIHlldCwgd2hpY2ggaXMgd2hhdFxuJiM0MzsgKiBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiB0aGVtOlxuJiM0MzsgKlxuJiM0MzsgKiAgIGVjaG8gJiMzOTs6ZW50cnk6Qjo6OjpcdTAwM2NoYW5kbGVyLW5hbWVcdTAwM2U6RCYjMzk7IFx1MDAzZSBcdTAwM2NiaW5mbXRfbWlzY1x1MDAzZS9yZWdpc3RlclxuJiM0MzsgKiAgIGVjaG8gJiMzOTsmIzQzO1x1MDAzY25hbWVcdTAwM2UgXHUwMDNjcGF0aFx1MDAzZSYjMzk7IFx1MDAzZSBcdTAwM2NiaW5mbXRfbWlzY1x1MDAzZS9lbnRyeVxuJiM0MzsgKiAgIGVjaG8gMSBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvZW50cnlcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXHUwMDNlXG5AQCAtMTYsNiAmIzQzOzI1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtOTEsNiAmIzQzOzEwMiwyMCBAQCBib29sIGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gXHQgICAgICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3Rfb3BzID09IFx1MDAyNmJwZl9iaW5mbXRfbWlzY19vcHM7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZXBsYWNlIHRoZSBzdGFnZWQgaW50ZXJwcmV0ZXIgc2VsZWN0aW9uOiBuYW1pbmcgYSBwYXRoIGRyb3BzIGEgYm91bmRcbiYjNDM7ICogZmlsZSwgc2VsZWN0aW5nIGEgYm91bmQgaW50ZXJwcmV0ZXIgY2FycmllcyBpdHMgZmlsZSBhbG9uZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY2hhciAqcGF0aCxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZilcbiYjNDM7e1xuJiM0MztcdGlmIChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSlcbiYjNDM7XHRcdGZwdXQoYnBybS1cdTAwM2VicGZfaW50ZXJwX2ZpbGUpO1xuJiM0MztcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycCk7XG4mIzQzO1x0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gcGF0aDtcbiYjNDM7XHRicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSA9IGY7XG4mIzQzO31cbiYjNDM7XG4gX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuIFxuIC8qKlxuQEAgLTEwMyw3ICYjNDM7MTI4LDggQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuICAqIGJlZm9yZSByZXR1cm5pbmcgemVybzsgdGhlIHZlcmlmaWVyIHJlamVjdHMgdGhlIGNhbGwgZnJvbSBhbnkgb3RoZXJcbiAgKiBwcm9ncmFtLCBpbmNsdWRpbmcgdGhlIGhhbmRsZXImIzM5O3Mgb3duIG1hdGNoIHByb2dyYW0uIFRoZSBwYXRoIGlzIG9wZW5lZFxuICAqIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjIGFmdGVyIHRoZSBwcm9ncmFtXG4tICogcmV0dXJucy5cbiYjNDM7ICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhblxuJiM0MzsgKiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmQgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcbiAgKi9cbkBAIC0xMjcsOCAmIzQzOzE1Myw1MCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4gXHRpZiAoIWludGVycClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuLVx0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gaW50ZXJwO1xuJiM0MztcdGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oYnBybSwgaW50ZXJwLCBOVUxMKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCAtIHJ1biB0aGlzIGV4ZWMgdW5kZXIgYW4gaW50ZXJwcmV0ZXIgdGhlIGVudHJ5IGJvdW5kXG4mIzQzOyAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxuJiM0MzsgKiBAbmFtZTogbmFtZSB0aGUgaW50ZXJwcmV0ZXIgd2FzIHJlZ2lzdGVyZWQgdW5kZXJcbiYjNDM7ICogQG5hbWVfX3N6OiBzaXplIG9mIHRoZSBAbmFtZSBidWZmZXIsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMXG4mIzQzOyAqXG4mIzQzOyAqIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb2FkIHByb2dyYW0gb2YgYSBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGhhbmRsZXJcbiYjNDM7ICogaW5zdGVhZCBvZiBicGZfYmlucHJtX3NldF9pbnRlcnAoKS4gSXQgc2VsZWN0cyBvbmUgb2YgdGhlIGludGVycHJldGVyc1xuJiM0MzsgKiB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLCBlYWNoIG9mIHdoaWNoIHdhcyBvcGVuZWQgb25jZSB3aGVuXG4mIzQzOyAqIHRoZSBlbnRyeSB3YXMgcmVnaXN0ZXJlZC4gTm90aGluZyBpcyByZXNvbHZlZCBhdCBleGVjIHRpbWUsIHNvIG5vXG4mIzQzOyAqIGZpbGVzeXN0ZW0gdmlldyBjYW4gcmVkaXJlY3QgdGhlIGludGVycHJldGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgaW50ZXJwcmV0ZXIgcnVucyB1bmRlciB0aGUgcGF0aCB0aGUgZW50cnkgcmVnaXN0ZXJlZCBpdCB1bmRlci5cbiYjNDM7ICogQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT0VOVCBpZiB0aGUgbWF0Y2hlZCBlbnRyeSBib3VuZCBubyBpbnRlcnByZXRlclxuJiM0MzsgKiBvZiB0aGF0IG5hbWUsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbiYjNDM7XHRzaXplX3QgbGVuO1xuJiM0MztcdGNoYXIgKnBhdGg7XG4mIzQzO1xuJiM0MztcdGlmICghbmFtZV9fc3opXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRsZW4gPSBzdHJubGVuKG5hbWUsIG5hbWVfX3N6KTtcbiYjNDM7XHRpZiAobGVuID09IG5hbWVfX3N6IHx8ICFsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aW50ZXJwID0gYmluZm10X21pc2NfZmluZF9pbnRlcnAoYnBybS1cdTAwM2VicGZfaW50ZXJwcywgbmFtZSk7XG4mIzQzO1x0aWYgKCFpbnRlcnApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0cGF0aCA9IGtzdHJkdXAoaW50ZXJwLVx1MDAzZXBhdGgsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGF0aClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRibV9icGZfc3RhZ2Vfc2VsZWN0aW9uKGJwcm0sIHBhdGgsIGdldF9maWxlKGludGVycC1cdTAwM2VmaWxlKSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjExLDYgJiM0MzsyNzksNyBAQCBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIFxuIEJURl9LRlVOQ1NfU1RBUlQoYm1fYnBmX2tmdW5jX2lkcylcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZywgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9mbGFncywgS0ZfU0xFRVBBQkxFKVxuIEJURl9LRlVOQ1NfRU5EKGJtX2JwZl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCA4NTY3MzFmNzhkMDU0Li5hMTRmMjhiMTU2MDdhIDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmNcbkBAIC0xNDc3LDYgJiM0MzsxNDc3LDggQEAgc3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRpZiAoYnBybS1cdTAwM2VpbnRlcnAgIT0gYnBybS1cdTAwM2VmaWxlbmFtZSlcbiBcdFx0a2ZyZWUoYnBybS1cdTAwM2VpbnRlcnApO1xuIFx0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbiYjNDM7XHRpZiAoYnBybS1cdTAwM2VicGZfaW50ZXJwX2ZpbGUpXG4mIzQzO1x0XHRmcHV0KGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKTtcbiBcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcpO1xuIFx0a2ZyZWUoYnBybS1cdTAwM2VmZHBhdGgpO1xuIFx0a2ZyZWUoYnBybSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5pbmRleCA0YWJkZmQzNmIzZmE4Li4wNzJlNGIzZGQ3OGQyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbkBAIC01LDExICYjNDM7NSw0MSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgYnBmX3Byb2c7XG4mIzQzO3N0cnVjdCBmaWxlO1xuIHN0cnVjdCBsaW51eF9iaW5wcm07XG4gc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xuIFxuICNkZWZpbmUgQklORk1UX01JU0NfT1BTX05BTUVfTUFYIDE2XG4gXG4mIzQzOy8qIExvbmdlc3QgbmFtZSBhICYjMzk7QiYjMzk7IGVudHJ5IGNhbiBiaW5kIGFuIGludGVycHJldGVyIHVuZGVyLiAqL1xuJiM0MzsjZGVmaW5lIEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWCAzMlxuJiM0MztcbiYjNDM7LyogTW9zdCBpbnRlcnByZXRlcnMgb25lIGVudHJ5IGNhbiBiaW5kLiAqL1xuJiM0MzsjZGVmaW5lIEJJTkZNVF9NSVNDX0lOVEVSUF9NQVggMTAwXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAtIGFuIGludGVycHJldGVyIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbiYjNDM7ICogQGxpc3Q6IGxpbmsgaW4gdGhlIGVudHJ5JiMzOTtzIGxpc3QsIGluIHJlZ2lzdHJhdGlvbiBvcmRlclxuJiM0MzsgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluXG4mIzQzOyAqIEBwYXRoOiB0aGUgcGF0aCBpdCB3YXMgcmVnaXN0ZXJlZCB1bmRlciwgdXNlZCBhcyB0aGUgbmFtZSB0aGUgaW50ZXJwcmV0ZXJcbiYjNDM7ICogICAgICAgIHJ1bnMgdW5kZXI7IHN0b3JlZCBhZnRlciBAbmFtZSBpbiB0aGUgc2FtZSBhbGxvY2F0aW9uXG4mIzQzOyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWRcbiYjNDM7ICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljICYjMzk7RiYjMzk7IGVudHJ5XG4mIzQzOyAqXG4mIzQzOyAqIE93bmVkIGJ5IHRoZSBlbnRyeSBhbmQgbGl2aW5nIGV4YWN0bHkgYXMgbG9uZyBhcyBpdCBkb2VzLiBUaGUgbGlzdCBoZWFkXG4mIzQzOyAqIGlzIGhhbmRlZCB0byB0aGUgaGFuZGxlciYjMzk7cyBsb2FkIHByb2dyYW0gZm9yIHRoZSBkdXJhdGlvbiBvZiBvbmUgZXhlYyxcbiYjNDM7ICogd2hpY2ggcGlja3Mgb25lIHdpdGggYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxlO1xuJiM0MztcdGNvbnN0IGNoYXJcdFx0KnBhdGg7XG4mIzQzO1x0Y2hhclx0XHRcdG5hbWVbXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxuJiM0MztiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKTtcbiYjNDM7XG4gLyoqXG4gICogZW51bSBicGZfYmlucHJtX2ZsYWdzIC0gcGVyLWV4ZWMgaW52b2NhdGlvbiBmbGFncyBhIGxvYWQgcHJvZ3JhbSBjYW4gcmVxdWVzdFxuICAqIEBCUEZfQklOUFJNX1BSRVNFUlZFX0FSR1YwOiBrZWVwIHRoZSBjYWxsZXImIzM5O3MgYXJndlswXSAobGlrZSB0aGUgJiMzOTtQJiMzOTsgZmxhZylcbkBAIC00MiwxMCAmIzQzOzcyLDExIEBAIGVudW0gYnBmX2JpbnBybV9mbGFncyB7XG4gICogICAgICAgICBzbyBpdCBjYW4gcmVhZCB0aGUgYmluYXJ5IHRvIGRlY2lkZSwgYnV0IHRoZSB2ZXJpZmllciByZWplY3RzXG4gICogICAgICAgICB0aGUgaW50ZXJwcmV0ZXIgc2VsZWN0aW9uIGtmdW5jcyBpbiBpdFxuICAqIEBsb2FkOiAgc2VsZWN0IGFuIGludGVycHJldGVyIGZvciB0aGUgbWF0Y2hlZCBAYnBybSB2aWFcbi0gKiAgICAgICAgIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpIGFuZCByZXR1cm4gemVybzsgYSBtYXRjaCBpcyBjb21taXR0ZWQsIHNvXG4tICogICAgICAgICBhIGZhaWx1cmUgZmFpbHMgdGhlIGV4ZWMgaW5zdGVhZCBvZiBmYWxsaW5nIHRocm91Z2ggdG8gbGF0ZXJcbi0gKiAgICAgICAgIGVudHJpZXM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0IG1vdmVzIG9uIHRvIHRoZVxuLSAqICAgICAgICAgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzXG4mIzQzOyAqICAgICAgICAgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCksIG9yIG9uZSB0aGUgZW50cnkgYm91bmQgdmlhXG4mIzQzOyAqICAgICAgICAgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKCksIGFuZCByZXR1cm4gemVybzsgYSBtYXRjaCBpc1xuJiM0MzsgKiAgICAgICAgIGNvbW1pdHRlZCwgc28gYSBmYWlsdXJlIGZhaWxzIHRoZSBleGVjIGluc3RlYWQgb2YgZmFsbGluZ1xuJiM0MzsgKiAgICAgICAgIHRocm91Z2ggdG8gbGF0ZXIgZW50cmllczsgLUVOT0VYRUMgZG9lcyBub3QgZmFpbCB0aGUgZXhlYyBidXRcbiYjNDM7ICogICAgICAgICBtb3ZlcyBvbiB0byB0aGUgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzXG4gICogQG5hbWU6IG5hbWUgdGhhdCAmIzM5O0ImIzM5OyBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgaGFuZGxlciBieVxuICAqL1xuIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbmluZGV4IGEyZGFlY2JiMDFkNmEuLmY2ODZhMzdmN2EwYTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbkBAIC0xNCw3ICYjNDM7MTQsMTAgQEAgc3RydWN0IGNvcmVkdW1wX3BhcmFtcztcbiBcbiAvKiBJbnRlcnByZXRlciBzZWxlY3Rpb24gc3RhZ2VkIGJ5IGEgYnBmIGJpbmZtdF9taXNjIGhhbmRsZXIuICovXG4gc3RydWN0IGJpbmZtdF9taXNjX2JwZiB7XG4mIzQzO1x0LyogaW50ZXJwcmV0ZXJzIHRoZSBtYXRjaGVkIGVudHJ5IGJvdW5kLCBzZWxlY3RhYmxlIGJ5IG5hbWUgKi9cbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpicGZfaW50ZXJwcztcbiBcdGNvbnN0IGNoYXIgKmJwZl9pbnRlcnA7XHRcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqYnBmX2ludGVycF9maWxlO1x0LyogdGhlIGJvdW5kIGludGVycHJldGVyIGl0IHNlbGVjdGVkICovXG4gXHRjb25zdCBjaGFyICpicGZfaW50ZXJwX2FyZztcdC8qIGludGVycHJldGVyIGFyZ3VtZW50IGZyb20gYSBicGYgaGFuZGxlciAqL1xuIFx0dTY0IGJwZl9mbGFncztcdFx0XHQvKiBlbnVtIGJwZl9iaW5wcm1fZmxhZ3MgZnJvbSBhIGJwZiBoYW5kbGVyICovXG4gfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuaW5kZXggMzkwZmUxMWE3YmVkZi4uNDEwYzkzNjA2YTBjMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcbkBAIC0yNSw2ICYjNDM7MjUsMTAgQEAgVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGNoZWNrLWV4ZWNcbiAjIG9yIGFuICYjMzk7RiYjMzk7IGVudHJ5IGNhbiBwaW4gdGhlIGluc3RhbmNlIHRoYXQgb3ducyBpdC4gVW5wcml2aWxlZ2VkLCBubyBicGYuXG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX3NlbGZwaW5cbiBcbiYjNDM7IyAmIzM5O0QmIzM5OyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzXG4mIzQzOyMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuIFN0YXRpYyBtYWdpYyBlbnRyeSwgbm8gYnBmIHRvb2xjaGFpbi5cbiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX2Rpc2FibGVkXG4mIzQzO1xuICMgU3RhdGljICgmIzM5O1QmIzM5OyBmbGFnKSB0cmFuc3BhcmVudCBiaW5mbXRfbWlzYyB0ZXN0OyB0aGUgYXNzZXJ0aW5nIGludGVycHJldGVyXG4gIyBpcyBzaGFyZWQgd2l0aCB0aGUgYnBmIGhhcm5lc3MmIzM5O3MgdHJhbnNwYXJlbnQgY2FzZS4gTm8gYnBmIHRvb2xjaGFpbiBuZWVkZWQuXG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX3RyYW5zcGFyZW50XG5AQCAtNTIsOCAmIzQzOzU2LDggQEAgSEFWRV9CUEZfVE9PTENIQUlOID89ICQoc2hlbGwgY29tbWFuZCAtdiAkKENMQU5HKSBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XHUwMDI2IFxcXG4gaWZlcSAoJChIQVZFX0JQRl9UT09MQ0hBSU4pLHkpXG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX2JwZlxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBicGZfaW50ZXJwLmJwZi5vIG5peF9vcmlnaW4uYnBmLm8gdHJhbnNwYXJlbnQuYnBmLm9cbi1URVNUX0dFTl9GSUxFUyAmIzQzOz0gbG9hZGVyLmJwZi5vXG4tVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGJpbmZtdF9icGZfaW50ZXJwIGJpbmZtdF9icGZfYXBwXG4mIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBsb2FkZXIuYnBmLm8gaW50ZXJwX2JpbmQuYnBmLm9cbiYjNDM7VEVTVF9HRU5fRklMRVMgJiM0Mzs9IGJpbmZtdF9icGZfaW50ZXJwIGJpbmZtdF9icGZfYXBwIGJpbmZtdF9iaW5kX2ludGVycFxuIGVsc2VcbiAkKGluZm8gZXhlYyBzZWxmdGVzdHM6IHNraXBwaW5nIGJpbmZtdF9taXNjX2JwZiwgbmVlZHMgY2xhbmcsIGJwZnRvb2wsIHZtbGludXggQlRGIGFuZCBsaWJicGYpXG4gZW5kaWZcbkBAIC0xMjMsNiAmIzQzOzEyNyw5IEBAICQoT1VUUFVUKS9iaW5mbXRfbWlzY19icGY6IGJpbmZtdF9taXNjX2JwZi5jIGJpbmZtdF9taXNjX2NvbW1vbi5oXG4gJChPVVRQVVQpL2JpbmZtdF9icGZfaW50ZXJwOiBiaW5mbXRfYnBmX2ludGVycC5jXG4gXHQkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkXHUwMDNjIC1vICRAXG4gXG4mIzQzOyQoT1VUUFVUKS9iaW5mbXRfYmluZF9pbnRlcnA6IGJpbmZtdF9iaW5kX2ludGVycC5jXG4mIzQzO1x0JChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJFx1MDAzYyAtbyAkQFxuJiM0MztcbiAkKE9VVFBVVCkvYmluZm10X2xvYWRlcl9wYXlsb2FkOiBiaW5mbXRfbG9hZGVyX3BheWxvYWQuYyBiaW5mbXRfbWlzY19jb21tb24uaFxuIFx0JChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLWZQSUUgLXBpZSAkXHUwMDNjIC1vICRAXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfYmluZF9pbnRlcnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X2JpbmRfaW50ZXJwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wNmQ2NTA2Mjg1NmI3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9iaW5kX2ludGVycC5jXG5AQCAtMCwwICYjNDM7MSwxNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBUZXN0IGludGVycHJldGVyIGZvciB0aGUgYm91bmQtaW50ZXJwcmV0ZXIgY2FzZSBvZiB0aGUgYmluZm10X21pc2NfYnBmXG4mIzQzOyAqIHNlbGZ0ZXN0LiBUd28gY29waWVzIGFyZSBpbnN0YWxsZWQgYXQgZGlmZmVyZW50IHBhdGhzIGFuZCBib3VuZCB0byBvbmVcbiYjNDM7ICogZW50cnkgdW5kZXIgZGlmZmVyZW50IG5hbWVzOyBwcmludGluZyBhcmd2WzBdIC0gdGhlIHBhdGggdGhlIGtlcm5lbCByYW5cbiYjNDM7ICogdGhpcyBjb3B5IHVuZGVyIC0gdGVsbHMgdGhlIGhhcm5lc3Mgd2hpY2ggb2YgdGhlbSB0aGUgbG9hZCBwcm9ncmFtIHBpY2tlZC5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdHByaW50ZihcJiMzNDtCSU5EX1JBTiAlc1xcblwmIzM0OywgYXJnYyBcdTAwM2UgMCA/IGFyZ3ZbMF0gOiBcJiMzNDtcJiMzNDspO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbmluZGV4IDA2OTc2OGE2NmJhMDcuLjJjN2I2MzA3NWYxZDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jXG5AQCAtOSw3ICYjNDM7OSw3IEBAXG4gICpcbiAgKiAgICAgZWNobyAmIzM5OzpuYW1lOkI6Ojo6XHUwMDNjaGFuZGxlclx1MDAzZTomIzM5OyBcdTAwM2UgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyXG4gICpcbi0gKiBUaHJlZSBzZWxmLWNvbnRhaW5lZCBjYXNlcyBhcmUgZXhlcmNpc2VkOlxuJiM0MzsgKiBGaXZlIHNlbGYtY29udGFpbmVkIGNhc2VzIGFyZSBleGVyY2lzZWQ6XG4gICpcbiAgKiAgIDEuIGJwZl9pbnRlcnA6IHRoZSBtYXRjaCBwcm9ncmFtIG1hdGNoZXMgYSBzeW50aGV0aWMgYWFyY2g2NCBFTEYgaGVhZGVyXG4gICogICAgICBmcm9tIHRoZSBwcmVmZXRjaGVkIGJwcm0tXHUwMDNlYnVmIGFuZCB0aGUgbG9hZCBwcm9ncmFtIHJvdXRlcyBpdCB0byBhXG5AQCAtMjYsNiAmIzQzOzI2LDExIEBAXG4gICogICAgICAoYmluZm10X2xvYWRlcl9wYXlsb2FkKSBydW5zIGFzIHRoZSBtYWluIGltYWdlIHdpdGggdGhlIHNlbGVjdGVkXG4gICogICAgICBpbnRlcnByZXRlciBzdWJzdGl0dXRlZCBmb3IgaXRzIFBUX0lOVEVSUCBhbmQgYXNzZXJ0cyB0aGUgbmF0aXZlXG4gICogICAgICBpZGVudGl0eSBmcm9tIGluc2lkZS5cbiYjNDM7ICogICA1LiBpbnRlcnBfYmluZDogYW4gZW50cnkgcmVnaXN0ZXJlZCBkaXNhYmxlZCB3aXRoICYjMzk7RCYjMzk7IGlzIGdpdmVuIGl0c1xuJiM0MzsgKiAgICAgIGludGVycHJldGVycyBvbmUgd3JpdGUgYXQgYSB0aW1lLCBhbmQgdGhlIGxvYWQgcHJvZ3JhbSBwaWNrcyBvbmUgYnlcbiYjNDM7ICogICAgICBuYW1lIHBlciBleGVjLiBSZXBsYWNpbmcgd2hhdCB0aGUgcGF0aCBob2xkcyBhZnRlcndhcmRzIGNoYW5nZXNcbiYjNDM7ICogICAgICBub3RoaW5nLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgYmluZGluZyBhIGZpbGUgcmF0aGVyIHRoYW4gcmVzb2x2aW5nXG4mIzQzOyAqICAgICAgYSBuYW1lIGF0IGV4ZWMgdGltZS4gRW5hYmxpbmcgdGhlIGVudHJ5IHNlYWxzIGl0LlxuICAqXG4gICogVGhlIGZpcnN0IHR3byByb3V0ZSB0byBhIHRlc3QgaW50ZXJwcmV0ZXIgdGhhdCBwcmludHMgQlBGX0lOVEVSUF9SQU4sXG4gICogcHJvdmluZyB0aGUgcHJvZ3JhbSYjMzk7cyBjaG9zZW4gaW50ZXJwcmV0ZXIgYWN0dWFsbHkgcmFuLlxuQEAgLTU0LDYgJiM0Mzs1OSwxMiBAQFxuICNkZWZpbmUgVFJBTlNfRVhQRUNUXHRcJiMzNDtUUkFOU1BBUkVOVF9PS1wmIzM0O1xuICNkZWZpbmUgTE9BREVSX0lOVEVSUFx0XCYjMzQ7L3RtcC9iaW5mbXRfbG9hZGVyX2ludGVycFwmIzM0O1xuICNkZWZpbmUgTE9BREVSX1BBVEhcdFwmIzM0Oy90bXAvYmluZm10X2JwZl9sb2FkZXIubGRydGVzdFwmIzM0O1xuJiM0MzsjZGVmaW5lIEJJTkRfRklSU1RcdFwmIzM0Oy90bXAvYmluZm10X2JpbmRfZmlyc3RcJiMzNDtcbiYjNDM7I2RlZmluZSBCSU5EX1NFQ09ORFx0XCYjMzQ7L3RtcC9iaW5mbXRfYmluZF9zZWNvbmRcJiMzNDtcbiYjNDM7I2RlZmluZSBCSU5EX0FSTV9QQVRIXHRcJiMzNDsvdG1wL2JpbmZtdF9iaW5kX2FybVwmIzM0O1xuJiM0MzsjZGVmaW5lIEJJTkRfUklTQ1ZfUEFUSFx0XCYjMzQ7L3RtcC9iaW5mbXRfYmluZF9yaXNjdlwmIzM0O1xuJiM0MzsjZGVmaW5lIEJJTkRfRVhQRUNUXHRcJiMzNDtCSU5EX1JBTiBcJiMzNDtcbiYjNDM7I2RlZmluZSBCSU5EX01BWFx0MTAwXG4gXG4gLyogQSBtaW5pbWFsIDY0LWJpdCBsaXR0bGUtZW5kaWFuIEVMRiBoZWFkZXIsIHBhZGRlZCB0byB0aGUgcmVhZCBzaXplLiAqL1xuIHN0YXRpYyBpbnQgY3JlYXRlX2Zha2VfZWxmKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIHNob3J0IG1hY2hpbmUpXG5AQCAtODIsMTEgJiM0Mzs5MywxNyBAQCBzdGF0aWMgaW50IGNyZWF0ZV9mYWtlX2VsZihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBzaG9ydCBtYWNoaW5lKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcmVnaXN0ZXJfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaGFuZGxlcilcbiYjNDM7LypcbiYjNDM7ICogUmVnaXN0ZXIgYSAmIzM5O0ImIzM5OyBlbnRyeSBmb3IgQGhhbmRsZXIuIFdpdGggQGZsYWdzIFwmIzM0O0RcJiMzNDsgdGhlIGVudHJ5IGlzIGNyZWF0ZWRcbiYjNDM7ICogZGlzYWJsZWQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpoYW5kbGVyLFxuJiM0MztcdFx0XHQgIGNvbnN0IGNoYXIgKmZsYWdzKVxuIHtcbiBcdGNoYXIgcnVsZVtQQVRIX01BWF07XG4gXG4tXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFwmIzM0OzolczpCOjo6OiVzOlwmIzM0OywgbmFtZSwgaGFuZGxlcik7XG4mIzQzO1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcJiMzNDs6JXM6Qjo6Ojolczolc1wmIzM0OywgbmFtZSwgaGFuZGxlcixcbiYjNDM7XHRcdCBmbGFncyA/IGZsYWdzIDogXCYjMzQ7XCYjMzQ7KTtcbiBcdHJldHVybiB3cml0ZV9yZWcocnVsZSk7XG4gfVxuIFxuQEAgLTEwNiw2ICYjNDM7MTIzLDMwIEBAIHN0YXRpYyBpbnQgY2hlY2tfb3V0cHV0KGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqZXhwZWN0ZWQpXG4gXHRyZXR1cm4gc3RybmNtcChidWYsIGV4cGVjdGVkLCBzdHJsZW4oZXhwZWN0ZWQpKSA/IC0xIDogMDtcbiB9XG4gXG4mIzQzOy8qIERvZXMgdGhlIGtlcm5lbCBCVEYga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKT8gKi9cbiYjNDM7c3RhdGljIGJvb2wgaGF2ZV9iaW5mbXRfbWlzY19vcHModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGYgKmJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuJiM0MztcdGJvb2wgaGF2ZTtcbiYjNDM7XG4mIzQzO1x0aGF2ZSA9IGJ0ZiBcdTAwMjZcdTAwMjYgYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwmIzM0O2JpbmZtdF9taXNjX29wc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgQlRGX0tJTkRfU1RSVUNUKSBcdTAwM2U9IDA7XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO1x0cmV0dXJuIGhhdmU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSByZWFzb24gYnBmIGhhbmRsZXIgY2FzZXMgY2Fubm90IHJ1biBoZXJlLCBOVUxMIGlmIHRoZXkgY2FuLiAqL1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChnZXR1aWQoKSAhPSAwKVxuJiM0MztcdFx0cmV0dXJuIFwmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0OztcbiYjNDM7XHRpZiAoIWhhdmVfYmluZm10X21pc2Nfb3BzKCkpXG4mIzQzO1x0XHRyZXR1cm4gXCYjMzQ7bm8gc3RydWN0IGJpbmZtdF9taXNjX29wcyBpbiB0aGUga2VybmVsIEJURiAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcJiMzNDs7XG4mIzQzO1x0aWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSlcbiYjNDM7XHRcdHJldHVybiBcJiMzNDtubyBiaW5mbXRfbWlzY1wmIzM0OztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiAvKiBBbiBhdHRhY2hlZCBoYW5kbGVyIHdpdGggaXRzICYjMzk7QiYjMzk7IGVudHJ5IGFjdGl2YXRlZC4gKi9cbiBzdHJ1Y3QgYnBmX2Nhc2Uge1xuIFx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbkBAIC0xMTUsMTAgJiM0MzsxNTYsMTIgQEAgc3RydWN0IGJwZl9jYXNlIHtcbiBcbiAvKlxuICAqIExvYWQgQG9iamZpbGUsIGF0dGFjaCBpdHMgc3RydWN0X29wcyBtYXAgQGhhbmRsZXIgKHdoaWNoIHB1Ymxpc2hlcyB0aGVcbi0gKiBoYW5kbGVyKSBhbmQgYWN0aXZhdGUgYSAmIzM5O0ImIzM5OyBlbnRyeSBuYW1lZCBAZW50cnkgdGhhdCByZWZlcmVuY2VzIGl0LlxuJiM0MzsgKiBoYW5kbGVyKSBhbmQgcmVnaXN0ZXIgYSAmIzM5O0ImIzM5OyBlbnRyeSBuYW1lZCBAZW50cnkgdGhhdCByZWZlcmVuY2VzIGl0LCB3aXRoXG4mIzQzOyAqIEBmbGFncyBhcyB0aGUgZW50cnkmIzM5O3MgcmVnaXN0ZXItc3RyaW5nIGZsYWdzLlxuICAqL1xuLXN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuLVx0XHRcdCAgY29uc3QgY2hhciAqaGFuZGxlciwgY29uc3QgY2hhciAqZW50cnkpXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnRfZmxhZ3Moc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuJiM0MztcdFx0XHRcdGNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5LFxuJiM0MztcdFx0XHRcdGNvbnN0IGNoYXIgKmZsYWdzKVxuIHtcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXG5AQCAtMTQ4LDcgJiM0MzsxOTEsNyBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcbiBcdFx0Yy1cdTAwM2VsaW5rID0gTlVMTDtcbiBcdFx0Z290byBmYWlsO1xuIFx0fVxuLVx0aWYgKHJlZ2lzdGVyX2VudHJ5KGVudHJ5LCBoYW5kbGVyKSkge1xuJiM0MztcdGlmIChyZWdpc3Rlcl9lbnRyeShlbnRyeSwgaGFuZGxlciwgZmxhZ3MpKSB7XG4gXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtyZWdpc3RlciAmIzM5O0ImIzM5OyBlbnRyeSAmIzM5OyVzJiMzOTsgZmFpbGVkXFxuXCYjMzQ7LCBlbnRyeSk7XG4gXHRcdGdvdG8gZmFpbDtcbiBcdH1cbkBAIC0xNjIsNiAmIzQzOzIwNSwxMiBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuJiM0MztcdFx0XHQgIGNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJwZl9jYXNlX3N0YXJ0X2ZsYWdzKGMsIG9iamZpbGUsIGhhbmRsZXIsIGVudHJ5LCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBicGZfY2FzZV9zdG9wKHN0cnVjdCBicGZfY2FzZSAqYylcbiB7XG4gXHR1bnJlZ2lzdGVyKGMtXHUwMDNlZW50cnkpO1xuQEAgLTE5MCwyMyAmIzQzOzIzOSwxMCBAQCBGSVhUVVJFKGJwZl9oYW5kbGVyKSB7XG4gRklYVFVSRV9TRVRVUChicGZfaGFuZGxlcilcbiB7XG4gXHRjaGFyIHNyY1tQQVRIX01BWF07XG4tXHRzdHJ1Y3QgYnRmICpidGY7XG4tXG4tXHRpZiAoZ2V0dWlkKCkgIT0gMClcbi1cdFx0U0tJUChyZXR1cm4sIFwmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0Oyk7XG4tXG4tXHQvKiBUaGUga2VybmVsIG11c3Qga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKS4gKi9cbi1cdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuLVx0aWYgKCFidGYgfHwgYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwmIzM0O2JpbmZtdF9taXNjX29wc1wmIzM0Oyxcbi1cdFx0XHRcdFx0ICAgQlRGX0tJTkRfU1RSVUNUKSBcdTAwM2MgMCkge1xuLVx0XHRidGZfX2ZyZWUoYnRmKTtcbi1cdFx0U0tJUChyZXR1cm4sXG4tXHRcdCAgICAgXCYjMzQ7bm8gc3RydWN0IGJpbmZtdF9taXNjX29wcyBpbiB0aGUga2VybmVsIEJURiAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcJiMzNDspO1xuLVx0fVxuLVx0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO1x0Y29uc3QgY2hhciAqd2h5ID0gYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQoKTtcbiBcbi1cdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXG4tXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBiaW5mbXRfbWlzY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKHdoeSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDslc1wmIzM0Oywgd2h5KTtcbiBcbiBcdC8qIFNoYXJlZCB0ZXN0IGludGVycHJldGVyLiAqL1xuIFx0QVNTRVJUX0VRKGFydGlmYWN0X3BhdGgoc3JjLCBzaXplb2Yoc3JjKSwgXCYjMzQ7YmluZm10X2JwZl9pbnRlcnBcJiMzNDspLCAwKTtcbkBAIC0yNTgsNyAmIzQzOzI5NCw3IEBAIFRFU1RfRihicGZfaGFuZGxlciwgdHJhbnNwYXJlbnRfZGlzcGF0Y2gpXG4gXHRjaGFyIHNyY1tQQVRIX01BWF0sIGNtZFtQQVRIX01BWCAmIzQzOyAxNl07XG4gXG4gXHQvKiBQcm9iZSBmb3IgdHJhbnNwYXJlbnQtbW9kZSBzdXBwb3J0IHZpYSBpdHMgc3RhdGljIGNvdW50ZXJwYXJ0LiAqL1xuLVx0aWYgKGJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpXG4mIzQzO1x0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJiMzOTtUJiMzOTspKVxuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIHdpdGhvdXQgdHJhbnNwYXJlbnQgbW9kZVwmIzM0Oyk7XG4gXG4gXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCBcJiMzNDtiaW5mbXRfdHJhbnNwYXJlbnRfaW50ZXJwXCYjMzQ7KSwgMCk7XG5AQCAtMzA3LDQgJiM0MzszNDMsMjI2IEBAIFRFU1RfRihicGZfaGFuZGxlciwgbG9hZGVyX3N1YnN0aXR1dGlvbilcbiBcdHVubGluayhMT0FERVJfSU5URVJQKTtcbiB9XG4gXG4mIzQzOy8qIFRoZSBlcnJubyBhbiBleGVjIG9mIEBwYXRoIGZhaWxzIHdpdGgsIDAgaWYgaXQgc3VjY2VlZGVkLiAqL1xuJiM0MztzdGF0aWMgaW50IGV4ZWNfZXJybm8oY29uc3QgY2hhciAqcGF0aClcbiYjNDM7e1xuJiM0MztcdGludCBzdGF0dXM7XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKHBpZCA9PSAwKSB7XG4mIzQzO1x0XHRleGVjbChwYXRoLCBwYXRoLCAoY2hhciAqKU5VTEwpO1xuJiM0MztcdFx0X2V4aXQoZXJybm8pO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGlkIFx1MDAzYyAwIHx8IHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApICE9IHBpZCB8fCAhV0lGRVhJVEVEKHN0YXR1cykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEluc3RhbGwgYSBjb3B5IG9mIHRoZSBib3VuZC1pbnRlcnByZXRlciB0ZXN0IGJpbmFyeSBhdCBAcGF0aC4gKi9cbiYjNDM7c3RhdGljIGludCBpbnN0YWxsX2ludGVycChjb25zdCBjaGFyICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBzcmNbUEFUSF9NQVhdO1xuJiM0MztcbiYjNDM7XHRpZiAoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCBcJiMzNDtiaW5mbXRfYmluZF9pbnRlcnBcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHJldHVybiBjb3B5X2ZpbGUoc3JjLCBwYXRoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQmluZCBAcGF0aCB0byBAZW50cnkgdW5kZXIgQG5hbWUsIHRoZSAmIzM5OyYjNDM7JiMzOTsgY29tbWFuZCBvZiBhIGRpc2FibGVkIGVudHJ5LiAqL1xuJiM0MztzdGF0aWMgaW50IGVudHJ5X2JpbmQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNtZFtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFwmIzM0OyYjNDM7JXMgJXNcXG5cJiMzNDssIG5hbWUsIHBhdGgpO1xuJiM0MztcdHJldHVybiBlbnRyeV9jb21tYW5kKGVudHJ5LCBjbWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKGJvdW5kX2ludGVycCkge1xuJiM0MztcdGNoYXIgb2JqW1BBVEhfTUFYXTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2Nhc2UgYztcbiYjNDM7XHRib29sIHN0YXJ0ZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKGJvdW5kX2ludGVycClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKndoeSA9IGJwZl9oYW5kbGVyX3Vuc3VwcG9ydGVkKCk7XG4mIzQzO1xuJiM0MztcdGlmICh3aHkpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7JXNcJiMzNDssIHdoeSk7XG4mIzQzO1x0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJiMzOTtEJiMzOTspKSB7XG4mIzQzO1x0XHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlICYjMzk7RCYjMzk7IGZsYWdcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfRklSU1QpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoaW5zdGFsbF9pbnRlcnAoQklORF9TRUNPTkQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGFydGlmYWN0X3BhdGgoc2VsZi1cdTAwM2VvYmosIHNpemVvZihzZWxmLVx1MDAzZW9iaiksXG4mIzQzO1x0XHRcdFx0XCYjMzQ7aW50ZXJwX2JpbmQuYnBmLm9cJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWdpc3RlcmVkIGRpc2FibGVkLCBzbyBpdCBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQgYW5kIGNhbiBzdGlsbCBiZVxuJiM0MztcdCAqIGdpdmVuIGludGVycHJldGVycy4gRWFjaCBwYXRoIGlzIHJlc29sdmVkIG9uY2UsIGJ5IGl0cyB3cml0ZSgyKTtcbiYjNDM7XHQgKiBmcm9tIGhlcmUgb24gdGhlIGVudHJ5IGhvbGRzIHRoZSBmaWxlcyB0aGVtc2VsdmVzLlxuJiM0MztcdCAqL1xuJiM0MztcdEFTU0VSVF9FUShicGZfY2FzZV9zdGFydF9mbGFncyhcdTAwMjZzZWxmLVx1MDAzZWMsIHNlbGYtXHUwMDNlb2JqLCBcJiMzNDtpbnRlcnBfYmluZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7RFwmIzM0OyksIDApO1xuJiM0MztcdHNlbGYtXHUwMDNlc3RhcnRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIFwmIzM0O2ZpcnN0XCYjMzQ7LCBCSU5EX0ZJUlNUKSwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7c2Vjb25kXCYjMzQ7LCBCSU5EX1NFQ09ORCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKGJvdW5kX2ludGVycClcbiYjNDM7e1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZXN0YXJ0ZWQpXG4mIzQzO1x0XHRicGZfY2FzZV9zdG9wKFx1MDAyNnNlbGYtXHUwMDNlYyk7XG4mIzQzO1x0dW5saW5rKEJJTkRfRklSU1QpO1xuJiM0MztcdHVubGluayhCSU5EX1NFQ09ORCk7XG4mIzQzO1x0dW5saW5rKEFBUkNINjRfUEFUSCk7XG4mIzQzO1x0dW5saW5rKEJJTkRfUklTQ1ZfUEFUSCk7XG4mIzQzO1x0dW5saW5rKEJJTkRfQVJNX1BBVEgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBFbmFibGluZyBpcyB3aGF0IG1ha2VzIHRoZSBjb25maWd1cmVkIGVudHJ5IG1hdGNoYWJsZS4gKi9cbiYjNDM7c3RhdGljIGludCBhY3RpdmF0ZShjb25zdCBjaGFyICplbnRyeSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBlbnRyeV9jb21tYW5kKGVudHJ5LCBcJiMzNDsxXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogT25lIGVudHJ5LCBvbmUgaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSwgcGlja2VkIHBlciBleGVjLiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBzZWxlY3RzX2J5X25hbWUpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEoY3JlYXRlX2Zha2VfZWxmKEFBUkNINjRfUEFUSCwgRU1fQUFSQ0g2NCksIDApO1xuJiM0MztcdEFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQklORF9SSVNDVl9QQVRILCBFTV9SSVNDViksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBEaXNhYmxlZCwgc28gaXQgZG9lcyBub3QgbWF0Y2ggYW5kIG5vIGZvcm1hdCBjbGFpbXMgdGhlIGJpbmFyeS4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEoZXhlY19lcnJubyhBQVJDSDY0X1BBVEgpLCBFTk9FWEVDKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDspLCAwKTtcbiYjNDM7XHRFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEFBUkNINjRfUEFUSCwgQklORF9FWFBFQ1QgQklORF9GSVJTVCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQklORF9SSVNDVl9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX1NFQ09ORCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBXaGF0IHdhcyBib3VuZCBpcyB3aGF0IHJ1bnMsIHdoYXRldmVyIHRoZSBwYXRoIGhvbGRzIGFmdGVyd2FyZHMuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIHBhdGhfbm9fbG9uZ2VyX2RlY2lkZXMpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIG90aGVyW1BBVEhfTUFYXTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihBQVJDSDY0X1BBVEgsIEVNX0FBUkNINjQpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoYWN0aXZhdGUoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBCb3VuZCBpbnRlcnByZXRlcnMgYXJlIHBpbm5lZCBhZ2FpbnN0IHdyaXRlcywgZXhhY3RseSBsaWtlICYjMzk7RiYjMzk7LiAqL1xuJiM0MztcdEVYUEVDVF9UUlVFKHdyaXRlX2RlbmllZChCSU5EX0ZJUlNUKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlcGxhY2UgdGhlIHBhdGggd2l0aCBhIGRpZmZlcmVudCBiaW5hcnk6IGEgbmV3IGZpbGUsIG5ldyBpbm9kZS4gKi9cbiYjNDM7XHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChvdGhlciwgc2l6ZW9mKG90aGVyKSwgXCYjMzQ7YmluZm10X2JwZl9pbnRlcnBcJiMzNDspLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEodW5saW5rKEJJTkRfRklSU1QpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY29weV9maWxlKG90aGVyLCBCSU5EX0ZJUlNUKSwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSBlbnRyeSByZXBvcnRzIHdoYXQgaXQgYm91bmQsIHVuZGVyIHRoZSBuYW1lcyBpdCBib3VuZCB0aGVtIGFzLiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBlbnRyeV9yZXBvcnRzX2JpbmRpbmdzKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDticGYtaW50ZXJwcmV0ZXIgZmlyc3QgXCYjMzQ7IEJJTkRfRklSU1QpKTtcbiYjNDM7XHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhcJiMzNDt0ZXN0X2ludGVycF9iaW5kXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0O2JwZi1pbnRlcnByZXRlciBzZWNvbmQgXCYjMzQ7IEJJTkRfU0VDT05EKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlbGVjdGluZyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBmYWlscyB0aGUgZXhlYy4gKi9cbiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgdW5ib3VuZF9uYW1lX2ZhaWxzKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihCSU5EX0FSTV9QQVRILCBFTV9BUk0pLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoYWN0aXZhdGUoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OyksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZXhlY19lcnJubyhCSU5EX0FSTV9QQVRIKSwgRU5PRU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQWN0aXZhdGluZyBzZWFscyBpdDogd2hhdCBjYW4gYmUgbWF0Y2hlZCBjYW5ub3QgYmUgY2hhbmdlZC4gKi9cbiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgc2VhbGVkX29uY2VfYWN0aXZlKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDspLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7dGhpcmRcJiMzNDssIEJJTkRfU0VDT05EKSwgLUVCVVNZKTtcbiYjNDM7XHRFWFBFQ1RfRkFMU0UoZW50cnlfc2hvd3MoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7YnBmLWludGVycHJldGVyIHRoaXJkIFwmIzM0OyBCSU5EX1NFQ09ORCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc2VhbCBpcyBmb3IgZ29vZDogZGlzYWJsaW5nIHRoZSBlbnRyeSBhZ2FpbiByZW9wZW5zIG5vdGhpbmcuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGRpc2FibGVfZG9lc19ub3RfdW5zZWFsKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDspLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChcJiMzNDt0ZXN0X2ludGVycF9iaW5kXCYjMzQ7LCBcJiMzNDswXFxuXCYjMzQ7KSwgMCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIFwmIzM0O3RoaXJkXCYjMzQ7LCBCSU5EX1NFQ09ORCksIC1FQlVTWSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aG91dCAmIzM5O0QmIzM5OyBpcyBzZWFsZWQgZnJvbSB0aGUgc3RhcnQuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGJvcm5fc2VhbGVkKVxuJiM0Mzt7XG4mIzQzO1x0LyogQSBzZWNvbmQgZW50cnkgZm9yIHRoZSBoYW5kbGVyIHRoZSBmaXh0dXJlIGFscmVhZHkgcHVibGlzaGVkLiAqL1xuJiM0MztcdEFTU0VSVF9FUShyZWdpc3Rlcl9lbnRyeShcJiMzNDt0ZXN0X2Jvcm5fc2VhbGVkXCYjMzQ7LCBcJiMzNDtpbnRlcnBfYmluZFwmIzM0OywgTlVMTCksIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZW50cnlfYmluZChcJiMzNDt0ZXN0X2Jvcm5fc2VhbGVkXCYjMzQ7LCBcJiMzNDtmaXJzdFwmIzM0OywgQklORF9GSVJTVCksIC1FQlVTWSk7XG4mIzQzO1x0dW5yZWdpc3RlcihcJiMzNDt0ZXN0X2Jvcm5fc2VhbGVkXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQSBuYW1lIGlzIGJvdW5kIG9uY2U7IGEgc2Vjb25kIHVzZSBvZiBpdCBpcyByZWZ1c2VkLiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBkdXBsaWNhdGVfbmFtZV9yZWZ1c2VkKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7Zmlyc3RcJiMzNDssIEJJTkRfU0VDT05EKSwgLUVFWElTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgbmFtZSBpcyBhIHByaW50YWJsZSB3b3JkOiB0aGUgZW50cnkgZmlsZSByZXBvcnRzICYjMzk7bmFtZSBwYXRoJiMzOTsgbGluZXMuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIG5hbWVfbXVzdF9iZV9wcmludGFibGUpXG4mIzQzO3tcbiYjNDM7XHQvKiBBIGNvbnRyb2wgY2hhcmFjdGVyIHdvdWxkIGZvcmdlIGEgbGluZSBpbnRvIHRoZSBlbnRyeSBmaWxlLiAqL1xuJiM0MztcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIFwmIzM0O2FcXHRiXCYjMzQ7LCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7XG4mIzQzO1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7YVxcbmJcJiMzNDssIEJJTkRfRklSU1QpLCAtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogQSBzcGFjZSBjYW5ub3QgZXZlbiBiZSBzcGVsbGVkOiB0aGUgcGF0aCBzdGFydHMgYWZ0ZXIgdGhlIGZpcnN0IG9uZS4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEoZW50cnlfYmluZChcJiMzNDt0ZXN0X2ludGVycF9iaW5kXCYjMzQ7LCBcJiMzNDthIGJcJiMzNDssIEJJTkRfRklSU1QpLCAtRUlOVkFMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGNvbW1hbmQgZW5kcyBhdCB0aGUgd3JpdGU6IGJ5dGVzIHBhc3QgYW4gZW1iZWRkZWQgbnVsIGFyZSByZWZ1c2VkLiAqL1xuJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCB0cmFpbGluZ19ieXRlc19yZWZ1c2VkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBjbWRbUEFUSF9NQVhdO1xuJiM0MztcdHNpemVfdCBsZW47XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHQvKiBlbnRyeV9jb21tYW5kKCkgY2Fubm90IHNwZWxsIGEgbnVsLCBzbyB3cml0ZSB0aGUgYnVmZmVyIHJhdy4gKi9cbiYjNDM7XHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcJiMzNDsmIzQzO251bCAlc1wmIzM0OywgQklORF9GSVJTVCk7XG4mIzQzO1x0bGVuID0gc3RybGVuKGNtZCkgJiM0MzsgMTtcbiYjNDM7XHRtZW1jcHkoY21kICYjNDM7IGxlbiwgXCYjMzQ7anVua1wmIzM0Oywgc2l6ZW9mKFwmIzM0O2p1bmtcJiMzNDspKTtcbiYjNDM7XHRsZW4gJiM0Mzs9IHNpemVvZihcJiMzNDtqdW5rXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKEJJTkZNVF9ESVIgXCYjMzQ7L3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmQsIDApO1xuJiM0MztcdEVYUEVDVF9FUSh3cml0ZShmZCwgY21kLCBsZW4pLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSU5WQUwpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssXG4mIzQzO1x0XHRcdFx0IFwmIzM0O2JwZi1pbnRlcnByZXRlciBudWwgXCYjMzQ7IEJJTkRfRklSU1QpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gZW50cnkgYmluZHMgYXQgbW9zdCBCSU5EX01BWCBpbnRlcnByZXRlcnMuICovXG4mIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGNhcHBlZF9iaW5kaW5ncylcbiYjNDM7e1xuJiM0MztcdGNoYXIgbmFtZVsxNl07XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmaXh0dXJlIGJvdW5kIFwmIzM0O2ZpcnN0XCYjMzQ7IGFuZCBcJiMzNDtzZWNvbmRcJiMzNDsgYWxyZWFkeS4gKi9cbiYjNDM7XHRmb3IgKGkgPSAyOyBpIFx1MDAzYyBCSU5EX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7biVkXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFwmIzM0O3Rlc3RfaW50ZXJwX2JpbmRcJiMzNDssIG5hbWUsIEJJTkRfRklSU1QpLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCYjMzQ7dGVzdF9pbnRlcnBfYmluZFwmIzM0OywgXCYjMzQ7b3ZlclwmIzM0OywgQklORF9GSVJTVCksIC1FTk9TUEMpO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfY29tbW9uLmhcbmluZGV4IGM2OTAwZGVkMDE5ZmMuLjc0NWFmZjg0ZGM3ODcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXG5AQCAtOTMsNiAmIzQzOzkzLDQ1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUpXG4gXHR9XG4gfVxuIFxuJiM0MzsvKiBXcml0ZSBAbGluZSB0byBAZW50cnkmIzM5O3MgZmlsZSwgcmVwb3J0aW5nIHRoZSBlcnJubyBpdCB3YXMgcmVmdXNlZCB3aXRoLiAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBlbnRyeV9jb21tYW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpsaW5lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgZmQsIHJldHZhbCA9IDA7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IHN0cmxlbihsaW5lKTtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBCSU5GTVRfRElSIFwmIzM0Oy8lc1wmIzM0OywgZW50cnkpO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XHRpZiAod3JpdGUoZmQsIGxpbmUsIGxlbikgIT0gKHNzaXplX3QpbGVuKVxuJiM0MztcdFx0cmV0dmFsID0gLWVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gcmV0dmFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEb2VzIEBlbnRyeSYjMzk7cyBmaWxlIHJlcG9ydCBAbGluZT8gKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGVudHJ5X3Nob3dzKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpsaW5lKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXSwgYnVmW1BBVEhfTUFYXTtcbiYjNDM7XHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1x0RklMRSAqZnA7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgQklORk1UX0RJUiBcJiMzNDsvJXNcJiMzNDssIGVudHJ5KTtcbiYjNDM7XHRmcCA9IGZvcGVuKHBhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZnApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkge1xuJiM0MztcdFx0YnVmW3N0cmNzcG4oYnVmLCBcJiMzNDtcXG5cJiMzNDspXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcChidWYsIGxpbmUpKSB7XG4mIzQzO1x0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGZjbG9zZShmcCk7XG4mIzQzO1x0cmV0dXJuIGZvdW5kO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIE1vdW50IGJpbmZtdF9taXNjIHVubGVzcyBpdCBhbHJlYWR5IGlzLCBhbmQgcmVwb3J0IHdoZXRoZXIgaXQgaXMgdXNhYmxlLiAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW5mbXRfbWlzY19hdmFpbGFibGUodm9pZClcbiB7XG5AQCAtMTE3LDE2ICYjNDM7MTU2LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFydGlmYWN0X3BhdGgoY2hhciAqb3V0LCBzaXplX3Qgc3osIGNvbnN0IGNoYXIgKm5hbWUpXG4gfVxuIFxuIC8qIFByb2JlIGtlcm5lbCBzdXBwb3J0IGZvciBhIHJlZ2lzdHJhdGlvbiBmbGFnIHdpdGggYSB0aHJvd2F3YXkgZW50cnkuICovXG4tc3RhdGljIGlubGluZSBpbnQgYmluZm10X2ZsYWdfc3VwcG9ydGVkKGNoYXIgZmxhZylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpXG4ge1xuIFx0Y2hhciBydWxlWzY0XTtcbiBcbiBcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCYjMzQ7OmJtX2ZsYWdfcHJvYmU6RTo6Ym1wcm9iZTo6L2Jpbi90cnVlOiVjXCYjMzQ7LFxuIFx0XHQgZmxhZyk7XG4gXHRpZiAod3JpdGVfcmVnKHJ1bGUpKVxuLVx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR1bnJlZ2lzdGVyKFwmIzM0O2JtX2ZsYWdfcHJvYmVcJiMzNDspO1xuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDdjOWU4YTRlZTQyYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXG5AQCAtMCwwICYjNDM7MSwxNzIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogVGVzdCB0aGUgJiMzOTtEJiMzOTsgKHJlZ2lzdGVyIGRpc2FibGVkKSBmbGFnIG9mIGJpbmZtdF9taXNjLiBBbiBlbnRyeVxuJiM0MzsgKiByZWdpc3RlcmVkIHdpdGggaXQgZXhpc3RzIGJ1dCBjYW5ub3QgYmUgbWF0Y2hlZCB1bnRpbCB1c2Vyc3BhY2UgZW5hYmxlc1xuJiM0MzsgKiBpdCwgd2hpY2ggc3BsaXRzIGEgcmVnaXN0cmF0aW9uIGludG8gY3JlYXRlIGFuZCBhY3RpdmF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogTmVlZHMgcm9vdCBmb3IgdGhlIHJlZ2lzdHJhdGlvbjsgbm8gYnBmIHRvb2xjaGFpbiBpbnZvbHZlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YmluZm10X21pc2NfY29tbW9uLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNQUdJQ1x0XHRcJiMzNDsjRElTQUJMRUQtU0VMRlRFU1QjXCYjMzQ7XG4mIzQzOyNkZWZpbmUgVEFSR0VUX1BBVEhcdFwmIzM0Oy90bXAvYmluZm10X2Rpc2FibGVkX3RhcmdldFwmIzM0O1xuJiM0MzsjZGVmaW5lIElOVEVSUF9QQVRIXHRcJiMzNDsvdG1wL2JpbmZtdF9kaXNhYmxlZF9pbnRlcnAuc2hcJiMzNDtcbiYjNDM7I2RlZmluZSBFTlRSWVx0XHRcJiMzNDt0ZXN0X2Rpc2FibGVkXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUlVMRShmbGFncylcdFwmIzM0OzpcJiMzNDsgRU5UUlkgXCYjMzQ7Ok06MDpcJiMzNDsgTUFHSUMgXCYjMzQ7OjpcJiMzNDsgSU5URVJQX1BBVEggXCYjMzQ7OlwmIzM0OyBmbGFnc1xuJiM0MztcbiYjNDM7LyogVGhlIGludGVycHJldGVyIGV4aXRzIHdpdGggYSBjb2RlIHRoZSBoYXJuZXNzIGNhbiByZWNvZ25pc2UuICovXG4mIzQzOyNkZWZpbmUgRVhJVF9JTlRFUlBcdDdcbiYjNDM7XG4mIzQzOy8qIFRoZSB0YXJnZXQgb25seSBoYXMgdG8gY2FycnkgdGhlIG1hZ2ljOyBpdCBpcyBuZXZlciBhY3R1YWxseSBsb2FkZWQuICovXG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3RhcmdldCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTI4XSA9IE1BR0lDIFwmIzM0O1xcblwmIzM0OztcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdHVubGluayhUQVJHRVRfUEFUSCk7XG4mIzQzO1x0ZmQgPSBvcGVuKFRBUkdFVF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAod3JpdGUoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IChzc2l6ZV90KXNpemVvZihidWYpKSB7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBjcmVhdGVfaW50ZXJwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1Zls2NF07XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHR1bmxpbmsoSU5URVJQX1BBVEgpO1xuJiM0MztcdGZkID0gb3BlbihJTlRFUlBfUEFUSCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNzU1KTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7IyEvYmluL3NoXFxuZXhpdCAlZFxcblwmIzM0OywgRVhJVF9JTlRFUlApO1xuJiM0MztcdGlmICh3cml0ZShmZCwgYnVmLCBzdHJsZW4oYnVmKSkgIT0gKHNzaXplX3Qpc3RybGVuKGJ1ZikpIHtcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGNsb3NlKGZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRShkaXNhYmxlZCkge1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUChkaXNhYmxlZClcbiYjNDM7e1xuJiM0MztcdGlmIChnZXR1aWQoKSAhPSAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSlcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBiaW5mbXRfbWlzY1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAmIzM5O0QmIzM5Oy4gKi9cbiYjNDM7XHRpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O0QmIzM5OykpIHtcbiYjNDM7XHRcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtrZXJuZWwgd2l0aG91dCB0aGUgJiMzOTtEJiMzOTsgZmxhZ1wmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoY3JlYXRlX2ludGVycCgpLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEoY3JlYXRlX3RhcmdldCgpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihkaXNhYmxlZClcbiYjNDM7e1xuJiM0MztcdHVucmVnaXN0ZXIoRU5UUlkpO1xuJiM0MztcdHVubGluayhUQVJHRVRfUEFUSCk7XG4mIzQzO1x0dW5saW5rKElOVEVSUF9QQVRIKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGVudHJ5IGV4aXN0cyBidXQgZG9lcyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gKi9cbiYjNDM7VEVTVF9GKGRpc2FibGVkLCBpbmVydF91bnRpbF9lbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwmIzM0O0RcJiMzNDspKSwgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFwmIzM0O2Rpc2FibGVkXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdC8qIE5vdGhpbmcgbWF0Y2hlcyBpdCwgc28gbm8gYmluYXJ5IGZvcm1hdCBjbGFpbXMgdGhlIHRhcmdldC4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShlbnRyeV9jb21tYW5kKEVOVFJZLCBcJiMzNDsxXFxuXCYjMzQ7KSwgMCk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFwmIzM0O2VuYWJsZWRcJiMzNDspKTtcbiYjNDM7XHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdpdGhvdXQgJiMzOTtEJiMzOTsgYW4gZW50cnkgaXMgbWF0Y2hhYmxlIHRoZSBtb21lbnQgaXQgaXMgcmVnaXN0ZXJlZC4gKi9cbiYjNDM7VEVTVF9GKGRpc2FibGVkLCBlbmFibGVkX3dpdGhvdXRfdGhlX2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXCYjMzQ7XCYjMzQ7KSksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcJiMzNDtlbmFibGVkXCYjMzQ7KSk7XG4mIzQzO1x0RVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgRVhJVF9JTlRFUlApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAmIzM5O0QmIzM5OyBpcyBzcGVudCBvbiB0aGUgcmVnaXN0cmF0aW9uOiB0aGUgZW50cnkgZG9lcyBub3QgcmVwb3J0IGl0IGJhY2suICovXG4mIzQzO1RFU1RfRihkaXNhYmxlZCwgZmxhZ19ub3RfcmVwb3J0ZWQpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXCYjMzQ7RFwmIzM0OykpLCAwKTtcbiYjNDM7XHRFWFBFQ1RfRkFMU0UoZW50cnlfc2hvd3MoRU5UUlksIFwmIzM0O2ZsYWdzOiBEXCYjMzQ7KSk7XG4mIzQzO1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFwmIzM0O2ZsYWdzOiBcJiMzNDspKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQSBkaXNhYmxlZCBlbnRyeSBjYW4gYmUgZGlzYWJsZWQgYW5kIGVuYWJsZWQgbGlrZSBhbnkgb3RoZXIuICovXG4mIzQzO1RFU1RfRihkaXNhYmxlZCwgdG9nZ2xlc19saWtlX2FueV9lbnRyeSlcbiYjNDM7e1xuJiM0MztcdEFTU0VSVF9FUSh3cml0ZV9yZWcoUlVMRShcJiMzNDtEXCYjMzQ7KSksIDApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXCYjMzQ7MVxcblwmIzM0OyksIDApO1xuJiM0MztcdEFTU0VSVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcbiYjNDM7XHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXCYjMzQ7MFxcblwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIFJVTl9FTk9FWEVDKTtcbiYjNDM7XHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXCYjMzQ7MVxcblwmIzM0OyksIDApO1xuJiM0MztcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogJiMzOTtEJiMzOTsgY29tcG9zZXMgd2l0aCB0aGUgaW52b2NhdGlvbiBmbGFncyBhIHN0YXRpYyBlbnRyeSBjYW4gY2FycnkuICovXG4mIzQzO1RFU1RfRihkaXNhYmxlZCwgY29tcG9zZXNfd2l0aF9pbnZvY2F0aW9uX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwmIzM0O1BEXCYjMzQ7KSksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcJiMzNDtkaXNhYmxlZFwmIzM0OykpO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcJiMzNDtmbGFnczogUFwmIzM0OykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAmIzM5Oy0xJiMzOTsgdG8gdGhlIHN0YXR1cyBmaWxlIHN3ZWVwcyBhIHN0YWdlZCBlbnRyeSB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gKi9cbiYjNDM7VEVTVF9GKGRpc2FibGVkLCByZW1vdmVkX2J5X3JlbW92ZV9hbGwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUSh3cml0ZV9yZWcoUlVMRShcJiMzNDtEXCYjMzQ7KSksIDApO1xuJiM0MztcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcJiMzNDtkaXNhYmxlZFwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oQklORk1UX0RJUiBcJiMzNDsvc3RhdHVzXCYjMzQ7LCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XHRBU1NFUlRfRVEod3JpdGUoZmQsIFwmIzM0Oy0xXCYjMzQ7LCAyKSwgMik7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfTkUoYWNjZXNzKEJJTkZNVF9ESVIgXCYjMzQ7L1wmIzM0OyBFTlRSWSwgRl9PSyksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIGZpbGUgaGFuZGxlIGhlbGQgYWNyb3NzIGEgcmVtb3ZhbCBjYW5ub3QgcmVzdXJyZWN0IHRoZSBlbnRyeS4gKi9cbiYjNDM7VEVTVF9GKGRpc2FibGVkLCBub19yZXN1cnJlY3Rpb25fYWZ0ZXJfcmVtb3ZlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXCYjMzQ7RFwmIzM0OykpLCAwKTtcbiYjNDM7XHRmZCA9IG9wZW4oQklORk1UX0RJUiBcJiMzNDsvXCYjMzQ7IEVOVFJZLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0QVNTRVJUX0dFKGZkLCAwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHdyaXRlKGZkLCBcJiMzNDstMVwmIzM0OywgMiksIDIpO1xuJiM0MztcdEVYUEVDVF9ORShhY2Nlc3MoQklORk1UX0RJUiBcJiMzNDsvXCYjMzQ7IEVOVFJZLCBGX09LKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qIEFjY2VwdGVkIGxpa2UgYW55IHRvZ2dsZSBvZiBhIHJlbW92ZWQgZW50cnksIGJ1dCBwdWJsaXNoZXMgbm90aGluZy4gKi9cbiYjNDM7XHRFWFBFQ1RfRVEod3JpdGUoZmQsIFwmIzM0OzFcJiMzNDssIDEpLCAxKTtcbiYjNDM7XHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfdHJhbnNwYXJlbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfdHJhbnNwYXJlbnQuY1xuaW5kZXggZDBjYjg0NWRmMWQzMC4uMmViZjczZGU4MDE4YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfdHJhbnNwYXJlbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jXG5AQCAtNTYsNyAmIzQzOzU2LDcgQEAgRklYVFVSRV9TRVRVUCh0cmFuc3BhcmVudClcbiBcdEFTU0VSVF9FUShjcmVhdGVfdGFyZ2V0KCksIDApO1xuIFxuIFx0LyogU2tpcCB0aGUgd2hvbGUgc3VpdGUgb24gYSBrZXJuZWwgdGhhdCBkb2VzIG5vdCBrbm93ICYjMzk7VCYjMzk7LiAqL1xuLVx0aWYgKGJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpIHtcbiYjNDM7XHRpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpIHtcbiBcdFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xuIFx0XHRTS0lQKHJldHVybiwgXCYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlICYjMzk7VCYjMzk7IGZsYWdcJiMzNDspO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWNlNDVjY2EyMTVmMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuY1xuQEAgLTAsMCAmIzQzOzEsNzYgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogYmluZm10X21pc2Nfb3BzIGhhbmRsZXIgZm9yIHRoZSBzZWxmdGVzdCYjMzk7cyBib3VuZC1pbnRlcnByZXRlciBjYXNlOiBvbmVcbiYjNDM7ICogaGFuZGxlciwgb25lIGVudHJ5LCBhbiBpbnRlcnByZXRlciBwZXIgZ3Vlc3QgYXJjaGl0ZWN0dXJlIC0gZWFjaCBib3VuZCB0b1xuJiM0MzsgKiBhIGZpbGUgd2hlbiB0aGUgZW50cnkgd2FzIHJlZ2lzdGVyZWQgcmF0aGVyIHRoYW4gdG8gYSBwYXRoIHJlc29sdmVkIGF0XG4mIzQzOyAqIGV4ZWMgdGltZS4gVGhlIGxvYWQgcHJvZ3JhbSBuYW1lcyB0aGUgb25lIGl0IHdhbnRzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZFxuJiM0MzsgKiBub3QgYmluZCBmYWlscyB0aGUgZXhlYywgd2hpY2ggdGhlIGhhcm5lc3MgY2hlY2tzIHRvby5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRUlfQ0xBU1NcdDRcbiYjNDM7I2RlZmluZSBFTEZDTEFTUzY0XHQyXG4mIzQzOyNkZWZpbmUgRV9NQUNISU5FX09GRlx0MThcbiYjNDM7I2RlZmluZSBFTV9BUk1cdFx0NDBcbiYjNDM7I2RlZmluZSBFTV9BQVJDSDY0XHQxODNcbiYjNDM7I2RlZmluZSBFTV9SSVNDVlx0MjQzXG4mIzQzO1xuJiM0MztleHRlcm4gaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opIF9fa3N5bTtcbiYjNDM7XG4mIzQzOy8qIFRoZSBndWVzdCBhcmNoaXRlY3R1cmUgb2YgYSA2NC1iaXQgRUxGLCBvciB6ZXJvIGlmIGl0IGlzIG5vdCBvbmUuICovXG4mIzQzO3N0YXRpYyBfX3UxNiBlbGZfbWFjaGluZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGJwcm0tXHUwMDNlYnVmWzBdICE9IDB4N2YgfHwgYnBybS1cdTAwM2VidWZbMV0gIT0gJiMzOTtFJiMzOTsgfHxcbiYjNDM7XHQgICAgYnBybS1cdTAwM2VidWZbMl0gIT0gJiMzOTtMJiMzOTsgfHwgYnBybS1cdTAwM2VidWZbM10gIT0gJiMzOTtGJiMzOTsgfHxcbiYjNDM7XHQgICAgYnBybS1cdTAwM2VidWZbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogTGl0dGxlLWVuZGlhbiAxNi1iaXQgZmllbGQsIHJlYWQgYnl0ZS13aXNlIGZvciB0aGUgdmVyaWZpZXIuICovXG4mIzQzO1x0cmV0dXJuIChfX3U4KWJwcm0tXHUwMDNlYnVmW0VfTUFDSElORV9PRkZdIHxcbiYjNDM7XHQgICAgICAgKChfX3UxNikoX191OClicHJtLVx1MDAzZWJ1ZltFX01BQ0hJTkVfT0ZGICYjNDM7IDFdIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N0cnVjdF9vcHMucy9tYXRjaFwmIzM0OylcbiYjNDM7Ym9vbCBCUEZfUFJPRyhpbnRlcnBfYmluZF9tYXRjaCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiYjNDM7e1xuJiM0MztcdF9fdTE2IG1hY2hpbmUgPSBlbGZfbWFjaGluZShicHJtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1hY2hpbmUgPT0gRU1fQUFSQ0g2NCB8fCBtYWNoaW5lID09IEVNX1JJU0NWIHx8XG4mIzQzO1x0ICAgICAgIG1hY2hpbmUgPT0gRU1fQVJNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3RydWN0X29wcy5zL2xvYWRcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyhpbnRlcnBfYmluZF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBOYW1lcywgbm90IHBhdGhzOiBlYWNoIG9uZSBzZWxlY3RzIGEgZmlsZSB0aGUgZW50cnkgcHJlLW9wZW5lZCwgc29cbiYjNDM7XHQgKiBub3RoaW5nIGlzIHJlc29sdmVkIGhlcmUgb3IgbGF0ZXIsIGluIGFueSBuYW1lc3BhY2UuIFRoZSBidWZmZXJzXG4mIzQzO1x0ICogYXJlIG9uIHRoZSBzdGFjayBiZWNhdXNlIHRoZSB2ZXJpZmllciByZWplY3RzIC5yb2RhdGEgZm9yIGEgc2l6ZWRcbiYjNDM7XHQgKiBtZW1vcnkgYXJndW1lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2hhciBmaXJzdFtdID0gXCYjMzQ7Zmlyc3RcJiMzNDs7XG4mIzQzO1x0Y2hhciBzZWNvbmRbXSA9IFwmIzM0O3NlY29uZFwmIzM0OztcbiYjNDM7XHRjaGFyIHVuYm91bmRbXSA9IFwmIzM0O3VuYm91bmRcJiMzNDs7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZWxmX21hY2hpbmUoYnBybSkpIHtcbiYjNDM7XHRjYXNlIEVNX0FBUkNINjQ6XG4mIzQzO1x0XHRyZXR1cm4gYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKGJwcm0sIGZpcnN0LCBzaXplb2YoZmlyc3QpKTtcbiYjNDM7XHRjYXNlIEVNX1JJU0NWOlxuJiM0MztcdFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBzZWNvbmQsIHNpemVvZihzZWNvbmQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBlbnRyeSBib3VuZCBub3RoaW5nIHVuZGVyIHRoaXMgbmFtZTogLUVOT0VOVCBmYWlscyB0aGUgZXhlYy4gKi9cbiYjNDM7XHRyZXR1cm4gYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKGJwcm0sIHVuYm91bmQsIHNpemVvZih1bmJvdW5kKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDsuc3RydWN0X29wcy5saW5rXCYjMzQ7KVxuJiM0MztzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGludGVycF9iaW5kID0ge1xuJiM0MztcdC5tYXRjaFx0PSAodm9pZCAqKWludGVycF9iaW5kX21hdGNoLFxuJiM0MztcdC5sb2FkXHQ9ICh2b2lkICopaW50ZXJwX2JpbmRfbG9hZCxcbiYjNDM7XHQubmFtZVx0PSBcJiMzNDtpbnRlcnBfYmluZFwmIzM0OyxcbiYjNDM7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OywKICAgICYjMzQ7QklORk1UX01JU0NfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmluZm10X21pc2NfZmluZF9pbnRlcnAmIzM0OywKICAgICYjMzQ7YnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtsb2FkX21pc2NfYmluYXJ5JiMzNDssCiAgICAmIzM0O2JtX2VudHJ5X3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmOTI1MWE2MGRhMTY2MjI0YmVhOWJhYTNiZDljNDJmNzRiOWQ1Y2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDAyOjU2OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAppbmRleCBjODA3MDJiNGNjZDVmLi4zZTJiMmE5NDE1YmM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdApAQCAtMTA3LDYgJiM0MzsxMDcsMTUgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjoKICAgICAgICAgICAgIGBgUFRfSU5URVJQYGAuIFNlZSB0aGUgJiMzNDtMb2FkZXIgc3Vic3RpdHV0aW9uJiMzNDsgc2VjdGlvbgogICAgICAgICAgICAgYmVsb3cuIGBgTGBgIHJlamVjdHMgYGBUYGAsIGBgUGBgLCBgYE9gYCBhbmQgYGBDYGA7CiAgICAgICAgICAgICBgYEZgYCBjb21wb3Nlcy4KJiM0MzsgICAgICBgYERgYCAtIHJlZ2lzdGVyZWQgZGlzYWJsZWQKJiM0MzsgICAgICAgICAgICBUaGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBpbnN0ZWFkIG9mIGJlaW5nIG1hdGNoYWJsZSBhdAomIzQzOyAgICAgICAgICAgIG9uY2UsIGFuZCBoYXMgdG8gYmUgZW5hYmxlZCBieSB3cml0aW5nIGBgMWBgIHRvIGl0cyBmaWxlCiYjNDM7ICAgICAgICAgICAgYmVmb3JlIGl0IGRpc3BhdGNoZXMgYW55dGhpbmcuIFRoaXMgc3BsaXRzIGEgcmVnaXN0cmF0aW9uCiYjNDM7ICAgICAgICAgICAgaW50byBjcmVhdGluZyB0aGUgZW50cnkgYW5kIGFjdGl2YXRpbmcgaXQsIGxlYXZpbmcgcm9vbSB0bwomIzQzOyAgICAgICAgICAgIGNvbmZpZ3VyZSBpdCBpbiBiZXR3ZWVuIC0gd2hpY2ggaXMgd2hhdCBhIGBgQmBgIGVudHJ5IHRoYXQKJiM0MzsgICAgICAgICAgICBiaW5kcyBpbnRlcnByZXRlcnMgbmVlZHM7IHNlZSB0aGUgYnBmIHNlY3Rpb24gYmVsb3cuIFRoZSBmbGFnCiYjNDM7ICAgICAgICAgICAgaXMgc3BlbnQgb24gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgaXMgbm90IHJlYWQgYmFjazogd2hhdCBhbgomIzQzOyAgICAgICAgICAgIGVudHJ5IGZpbGUgcmVwb3J0cyBhZnRlcndhcmRzIGlzIHdoZXRoZXIgaXQgaXMgZW5hYmxlZC4KIAogCiBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnM6CkBAIC0xODYsOSAmIzQzOzE5NSw2MiBAQCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBiaW5hcnkmIzM5O3MgbG9jYXRpb24uIEl0IHNlbGVjdHMgdGhlCiBpbnRlcnByZXRlciBieSBjYWxsaW5nIHRoZSBgYGJwZl9iaW5wcm1fc2V0X2ludGVycCgpYGAga2Z1bmMgd2l0aCBhbgogYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGBgMGBgLiBBIG1hdGNoIGlzIGNvbW1pdHRlZDogYSBmYWlsaW5nCiBgYGxvYWRgYCBmYWlscyB0aGUgZXhlYyB3aXRoIGl0cyBlcnJvciBpbnN0ZWFkIG9mIGZhbGxpbmcgdGhyb3VnaCB0byBsYXRlcgotZW50cmllczsgYGAtRU5PRVhFQ2BgIGxldHMgdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cyBoYXZlIGEgZ28uIFRoZQotaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjLAotZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3b3VsZCBiZS4KJiM0MztlbnRyaWVzOyBgYC1FTk9FWEVDYGAgbGV0cyB0aGUgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzIGhhdmUgYSBnby4gQSBwYXRoCiYjNDM7c2VsZWN0ZWQgdGhpcyB3YXkgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZQomIzQzO2V4ZWMsIGV4YWN0bHkgYXMgYSBzdGF0aWNhbGx5IHJlZ2lzdGVyZWQgaW50ZXJwcmV0ZXIgd2l0aG91dCBgYEZgYCB3b3VsZAomIzQzO2JlLgomIzQzOwomIzQzO0FuIGVudHJ5IGNhbiBpbnN0ZWFkIGJpbmQgdGhlIGludGVycHJldGVycyBpdHMgaGFuZGxlciBtYXkgdXNlLCBzbyB0aGF0IG5vCiYjNDM7cGF0aCBpcyByZXNvbHZlZCBhdCBleGVjIHRpbWUgYXQgYWxsLiBBbiBlbnRyeSByZWdpc3RlcmVkIHdpdGggYGBEYGAgaXMgbm90CiYjNDM7bWF0Y2hhYmxlIHlldCwgd2hpY2ggaXMgd2hhdCBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiB0aGVtLCBvbmUKJiM0MztgYCYjNDM7bmFtZSBwYXRoYGAgd3JpdGUgYXQgYSB0aW1lOjoKJiM0MzsKJiM0MzsgICAgZWNobyAmIzM5OzpxZW11OkI6Ojo6bXlfaGFuZGxlcjpEJiMzOTsgJmd0OyByZWdpc3RlcgomIzQzOyAgICBlY2hvICYjMzk7JiM0MzthYXJjaDY0IC91c3IvYmluL3FlbXUtYWFyY2g2NCYjMzk7ICZndDsgcWVtdQomIzQzOyAgICBlY2hvICYjMzk7JiM0Mzthcm0gL3Vzci9iaW4vcWVtdS1hcm0mIzM5OyAmZ3Q7IHFlbXUKJiM0MzsgICAgZWNobyAxICZndDsgcWVtdQomIzQzOwomIzQzO0VhY2ggcGF0aCBpcyBvcGVuZWQgZHVyaW5nIGl0cyB3cml0ZSwgaW4gdGhlIHdyaXRpbmcgcHJvY2VzcyYjMzk7cyBjb250ZXh0IGFuZAomIzQzO3dpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgCiYjNDM7cHJlLW9wZW5zIGEgc3RhdGljIGVudHJ5JiMzOTtzIGludGVycHJldGVyOyB0aGUgcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZS4gVGhlCiYjNDM7cGF0aCBpcyBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0IHNwYWNlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGl0IGNhbm5vdAomIzQzO2V4cHJlc3MsIGFuZCBubyBpbnRlcnByZXRlciBoYXMgdG8gZml0IGluIGEgcmVnaXN0ZXIgc3RyaW5nLiBBbiBlbnRyeQomIzQzO2JpbmRzIGF0IG1vc3QgMTAwIGludGVycHJldGVyczsgYSB3cml0ZSBwYXN0IHRoYXQgaXMgcmVmdXNlZCB3aXRoCiYjNDM7YGAtRU5PU1BDYGAuIFRvIGJpbmQgYSBmaWxlIHRoYXQgaGFzIG5vIHBhdGggb2YgaXRzIG93biAtIGFscmVhZHkKJiM0Mzt1bmxpbmtlZCwgYSBgYG1lbWZkYGAsIG9yIHJlYWNoYWJsZSBvbmx5IGluIGFub3RoZXIgbW91bnQgbmFtZXNwYWNlIC0KJiM0MztvcGVuIGl0IGFuZCB3cml0ZSBgYC9wcm9jL3NlbGYvZmQvTmBgLgomIzQzOwomIzQzO1RoZSBgYGxvYWRgYCBwcm9ncmFtIHRoZW4gc2VsZWN0cyBvbmUgcGVyIGV4ZWMgYnkgbmFtZSB3aXRoIHRoZQomIzQzO2BgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgYCBrZnVuYywgYW5kIGV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIHRoZQomIzQzO2ZpbGUgdGhhdCB3YXMgb3BlbmVkLiBUaGUgcGF0aCBkZWNpZGVzIHdoaWNoIGZpbGUgaXMgYm91bmQgYW5kIG5vdGhpbmcKJiM0MztlbHNlOiBpdCBpcyBub3QgcmVzb2x2ZWQgYWdhaW4sIGluIGFueSBuYW1lc3BhY2UsIHNvIHdoYXQgaXQgaG9sZHMgbGF0ZXIgLQomIzQzO29yIHdoYXQgaXQgaG9sZHMgaW4gdGhlIG5hbWVzcGFjZSBvZiB3aG9ldmVyIHJ1bnMgdGhlIGJpbmFyeSAtIG5vIGxvbmdlcgomIzQzO2RlY2lkZXMgYW55dGhpbmcuCiYjNDM7CiYjNDM7RW5hYmxpbmcgdGhlIGVudHJ5IGVuZHMgdGhpcy4gSXRzIGludGVycHJldGVycyBhcmUgcmVhZCBhdCBleGVjIHRpbWUgd2l0aAomIzQzO25vdGhpbmcgYnV0IGEgcmVmZXJlbmNlIGhlbGQgb24gdGhlIGVudHJ5LCBzbyBhbiBlbnRyeSB0aGF0IGhhcyBldmVyIGJlZW4KJiM0MzttYXRjaGFibGUgY2FuIG5ldmVyIGhhdmUgaXRzIHNldCBjaGFuZ2VkIGFnYWluOiB0aGUgZmlyc3QgYGAxYGAgc2VhbHMgaXQsCiYjNDM7ZnJvbSB0aGVuIG9uIGBgJiM0MztgYCBpcyByZWZ1c2VkIHdpdGggYGAtRUJVU1lgYCwgYW5kIGFuIGVudHJ5IHJlZ2lzdGVyZWQKJiM0Mzt3aXRob3V0IGBgRGBgIGlzIHNlYWxlZCBmcm9tIHRoZSBzdGFydC4gQmluZGluZyBhIG5hbWUgdHdpY2UgaXMgcmVmdXNlZAomIzQzO3dpdGggYGAtRUVYSVNUYGAuCiYjNDM7CiYjNDM7U2VsZWN0aW9uIGlzIGJ5IG5hbWUgc28gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGhlIHByb2dyYW0gbmVlZCBub3QKJiM0MzthZ3JlZSBvbiBhbiBvcmRlciwgYW5kIHNvIHRoYXQgYSBoYW5kbGVyIGlzIG5vdCB0aWVkIHRvIHdoZXJlIGEgZGlzdHJpYnV0aW9uCiYjNDM7cHV0cyBpdHMgaW50ZXJwcmV0ZXJzLiBBIG5hbWUgaXMgYSBzaW5nbGUgd29yZCBvZiBwcmludGFibGUgQVNDSUksIGF0IG1vc3QKJiM0MzszMiBjaGFyYWN0ZXJzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBnaXZlcyB0aGUgcHJvZ3JhbSBgYC1FTk9FTlRgYCwKJiM0Mzt3aGljaCBpdCBjYW4gYWN0IG9uIG9yIHJldHVybi4gVGhlIGludGVycHJldGVyIHJ1bnMgdW5kZXIgdGhlIHBhdGggaXQgd2FzCiYjNDM7cmVnaXN0ZXJlZCB1bmRlciwgYW5kIHRoZSBlbnRyeSByZXBvcnRzIHdoYXQgaXQgYm91bmQ6OgomIzQzOwomIzQzOyAgICAkIGNhdCAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcWVtdQomIzQzOyAgICBlbmFibGVkCiYjNDM7ICAgIGJwZiBteV9oYW5kbGVyCiYjNDM7ICAgIGJwZi1pbnRlcnByZXRlciBhYXJjaDY0IC91c3IvYmluL3FlbXUtYWFyY2g2NAomIzQzOyAgICBicGYtaW50ZXJwcmV0ZXIgYXJtIC91c3IvYmluL3FlbXUtYXJtCiYjNDM7ICAgIGZsYWdzOgomIzQzOwomIzQzO1RoZSBwYXRoIHJlcG9ydGVkIGlzIHRoZSBvbmUgdGhlIGludGVycHJldGVyIHdhcyBib3VuZCB1bmRlciwgd2hpY2ggbmFtZWQKJiM0Mzt0aGUgZmlsZSBhdCB0aGF0IG1vbWVudDsgaXQgaXMgbm90IHJlLXJlc29sdmVkLCBzbyBpdCBpcyBhIHJlY29yZCBvZiB3aGF0CiYjNDM7d2FzIGJvdW5kIHJhdGhlciB0aGFuIGEgcHJvbWlzZSBhYm91dCB3aGF0IHRoYXQgcGF0aCBob2xkcyBub3cuCiAKIFRoZSBgYGxvYWRgYCBwcm9ncmFtIGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyIHdpdGgKIHRoZSBgYGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcoKWBgIGtmdW5jLiBJdCBpcyBpbnNlcnRlZCBiZXR3ZWVuIHRoZQpAQCAtMjI0LDggJiM0MzsyODYsMTEgQEAgaGFuZGxlciBjYW4gZGVjaWRlIHRoZW0gZGlmZmVyZW50bHkgZm9yIGVhY2ggYmluYXJ5IGl0IGhhbmRsZXM6CiAgIGBgUFRfSU5URVJQYGAgYW5kIHJ1bnMgdGhlIGJpbmFyeSBhcyBhIGZ1bGx5IG5hdGl2ZSBleGVjICh0aGUgYGBMYGAKICAgZmxhZykuIEl0IGV4Y2x1ZGVzIHRoZSBvdGhlciBmbGFncyBhbmQgYSBzdGFnZWQgaW50ZXJwcmV0ZXIgYXJndW1lbnQuCiAKLUJlY2F1c2UgdGhlc2UgYXJlIHByb2dyYW0gY2hvaWNlcywgYSBgYEJgYCBlbnRyeSBjYXJyaWVzIG5vIGZsYWdzIGluIHRoZQotcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCAocHJlLW9wZW4gYSBmaXhlZCBpbnRlcnByZXRlcikgaGFzIG5vIG1lYW5pbmcgZm9yIGl0LgomIzQzO0JlY2F1c2UgdGhlc2UgYXJlIHByb2dyYW0gY2hvaWNlcywgYSBgYEJgYCBlbnRyeSBjYXJyaWVzIG5vIGludm9jYXRpb24KJiM0MztmbGFncyBpbiB0aGUgcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCBoYXMgbm9uZSB0byBzcGVsbCBmb3IgaXQgZWl0aGVyLCBzaW5jZQomIzQzO3RoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgYWxyZWFkeSBwcmUtb3BlbiB3aGF0IGBgRmBgIHdvdWxkLiBUaGUKJiM0MztyZWdpc3RyYXRpb24gZGlyZWN0aXZlIGBgRGBgIGlzIHRoZSBleGNlcHRpb246IGl0IGRlY2lkZXMgaG93IHRoZSBlbnRyeQomIzQzO3N0YXJ0cyBvdXQsIG5vdCBob3cgdGhlIGludGVycHJldGVyIGlzIGludm9rZWQuCiAKIEhhbmRsZXJzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCB3YXMKIHJlZ2lzdGVyZWQgaW4sIGZhbGxpbmcgYmFjayB0byBhbmNlc3RvciBuYW1lc3BhY2VzLCBtaXJyb3JpbmcgaG93CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCA3MDdmOGExNGY4YTYzLi5hZDhjNGY2NGJmMTAyIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfbWlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjLmMKQEAgLTI0LDYgJiM0MzsyNCw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZnNfY29udGV4dC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc3RydG94LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWFnaWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmludGsuaCZndDsKQEAgLTM3LDYgJiM0MzszOSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJfbmFtZXNwYWNlLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwomIzQzOwogLyogRW50cnkgc3RhdHVzIGFuZCBtYXRjaCB0eXBlIGJpdCBudW1iZXJzLiAqLwogZW51bSBiaW5mbXRfbWlzY19lbnRyeV9iaXRzIHsKIAlNSVNDX0ZNVF9FTkFCTEVEX0JJVAk9IDAsCkBAIC01Miw4ICYjNDM7NTYsMTcgQEAgZW51bSBiaW5mbXRfbWlzY19lbnRyeV9mbGFncyB7CiAJTUlTQ19GTVRfT1BFTl9GSUxFCT0gKDFVICZsdDsmbHQ7IDI4KSwKIAlNSVNDX0ZNVF9UUkFOU1BBUkVOVAk9ICgxVSAmbHQ7Jmx0OyAyNyksCiAJTUlTQ19GTVRfTE9BREVSCQk9ICgxVSAmbHQ7Jmx0OyAyNiksCiYjNDM7CU1JU0NfRk1UX0RJU0FCTEVECT0gKDFVICZsdDsmbHQ7IDI1KSwKIH07CiAKJiM0MzsvKiBUaGUgZmxhZ3MgdGhhdCBzaGFwZSB0aGUgaW52b2NhdGlvbjsgYSAmIzM5O0ImIzM5OyBoYW5kbGVyIHBpY2tzIHRob3NlIHBlciBleGVjLiAqLwomIzQzOyNkZWZpbmUgTUlTQ19GTVRfSU5WT0NBVElPTl9GTEFHUyAoTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgfAlcCiYjNDM7CQkJCSAgIE1JU0NfRk1UX09QRU5fQklOQVJZIHwJXAomIzQzOwkJCQkgICBNSVNDX0ZNVF9DUkVERU5USUFMUyB8CVwKJiM0MzsJCQkJICAgTUlTQ19GTVRfT1BFTl9GSUxFIHwJCVwKJiM0MzsJCQkJICAgTUlTQ19GTVRfVFJBTlNQQVJFTlQgfAlcCiYjNDM7CQkJCSAgIE1JU0NfRk1UX0xPQURFUikKJiM0MzsKIC8qKgogICogc3RydWN0IGJpbmZtdF9taXNjX2ZsYWcgLSBhIGZsYWcgY2hhcmFjdGVyIG9mIHRoZSByZWdpc3RlciBzdHJpbmcKICAqIEBjOiB0aGUgY2hhcmFjdGVyIHVzZXJzcGFjZSB3cml0ZXMgYW5kIHJlYWRzIGJhY2sKQEAgLTc1LDYgJiM0Mzs4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyBtaXNjX2ZsYWdzW10gPSB7CiAJeyAmIzM5O0YmIzM5OywgTUlTQ19GTVRfT1BFTl9GSUxFLAkwLAkJCSYjMzQ7b3BlbiBpbnRlcnByZXRlciBmaWxlIG5vdyYjMzQ7CX0sCiAJeyAmIzM5O1QmIzM5OywgTUlTQ19GTVRfVFJBTlNQQVJFTlQsCU1JU0NfRk1UX09QRU5fQklOQVJZLAkmIzM0O3RyYW5zcGFyZW50JiMzNDsJCQl9LAogCXsgJiMzOTtMJiMzOTssIE1JU0NfRk1UX0xPQURFUiwJCTAsCQkJJiMzNDtsb2FkZXIgc3Vic3RpdHV0aW9uJiMzNDsJCX0sCiYjNDM7CXsgJiMzOTtEJiMzOTssIE1JU0NfRk1UX0RJU0FCTEVELAkwLAkJCSYjMzQ7cmVnaXN0ZXIgZGlzYWJsZWQmIzM0OwkJfSwKIH07CiAKIC8qIExvb2sgdXAgYSBmbGFnIGNoYXJhY3RlciwgTlVMTCBpZiBAYyBpcyBub3Qgb25lLiAqLwpAQCAtOTYsOSAmIzQzOzExMCw5IEBAIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7CiAJY29uc3QgY2hhciAqaW50ZXJwcmV0ZXI7CS8qIGZpbGVuYW1lIG9mIGludGVycHJldGVyICovCiAJY2hhciAqbmFtZTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0Jc3RydWN0IGZpbGUgKmludGVycF9maWxlOwogCWNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7CS8qIGJwZi1iYWNrZWQgaGFuZGxlciAoJiMzOTtCJiMzOTspICovCiAJY29uc3QgY2hhciAqYnBmX29wc19uYW1lOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGludGVycHM7CS8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi8KIAlyZWZjb3VudF90IHVzZXJzOwkJLyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovCiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAljaGFyIGJ1ZltdOwkJCS8qIHJlZ2lzdGVyIHN0cmluZywgZmllbGRzIHBvaW50IGluIGhlcmUgKi8KQEAgLTE3NSw3ICYjNDM7MTg5LDEyIEBAIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAJLyogV2FsayBhbGwgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlcnMuICovCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsICZhbXA7bWlzYy0mZ3Q7ZW50cmllcywgbm9kZSwKIAkJCQkgc3JjdV9yZWFkX2xvY2tfaGVsZCgmYW1wO2JtX2VudHJpZXNfc3JjdSkpIHsKLQkJLyogTWFrZSBzdXJlIHRoaXMgb25lIGlzIGN1cnJlbnRseSBlbmFibGVkLiAqLwomIzQzOwkJLyoKJiM0MzsJCSAqIE1ha2Ugc3VyZSB0aGlzIG9uZSBpcyBjdXJyZW50bHkgZW5hYmxlZC4gQW4gZW50cnkgZW50ZXJzCiYjNDM7CQkgKiB0aGUgbGlzdCBhdCBtb3N0IG9uY2UgYW5kIG9ubHkgd2hvbGU6IGl0cyBjb25maWd1cmF0aW9uIGlzCiYjNDM7CQkgKiBvcmRlcmVkIGJlZm9yZSB0aGUgcmN1IGluc2VydGlvbiB0aGF0IG1ha2VzIGl0IHZpc2libGUKJiM0MzsJCSAqIGhlcmUuCiYjNDM7CQkgKi8KIAkJaWYgKCF0ZXN0X2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgJmFtcDtlLSZndDtmbGFncykpCiAJCQljb250aW51ZTsKIApAQCAtMjE2LDYgJiM0MzsyMzUsMTA4IEBAIHN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsCiAJcmV0dXJuIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWUKJiM0MzsgKiBAaW50ZXJwczogdGhlIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoCiYjNDM7ICogQG5hbWU6IHRoZSBuYW1lIHRvIGxvb2sgZm9yCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBOVUxMIGlmIEBpbnRlcnBzIGhhcyBub25lIGJ5IHRoYXQgbmFtZQomIzQzOyAqLwomIzQzO2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKgomIzQzO2JpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZXJwLCBpbnRlcnBzLCBsaXN0KQomIzQzOwkJaWYgKCFzdHJjbXAoaW50ZXJwLSZndDtuYW1lLCBuYW1lKSkKJiM0MzsJCQlyZXR1cm4gaW50ZXJwOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVW5kbyB0aGUgb3Blbl9leGVjKCkgYSBwcmUtb3BlbmVkIGludGVycHJldGVyIGZpbGUgY2FtZSBmcm9tLiAqLwomIzQzO3N0YXRpYyB2b2lkIGNsb3NlX2ludGVycF9maWxlKHN0cnVjdCBmaWxlICpmKQomIzQzO3sKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKGYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZik7CiYjNDM7CWZpbHBfY2xvc2UoZiwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO0RFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPcGVuIGFuIGludGVycHJldGVyIEBwYXRoIGZvciBleGVjdXRpb246IG5vdywgaW4gdGhlIHdyaXRlciYjMzk7cyBjb250ZXh0LAomIzQzOyAqIGFuZCAtIHNpbmNlIGJpbmZtdF9taXNjIG1vdW50cyBjYW4gYmUgdW5wcml2aWxlZ2VkIC0gd2l0aCBAY3JlZCwgdGhlCiYjNDM7ICogY3JlZGVudGlhbHMgdGhlIGNvbnRyb2wgZmlsZSBiZWluZyB3cml0dGVuIHdhcyBvcGVuZWQgd2l0aCwgbm90IHRoZQomIzQzOyAqIHdyaXRlciYjMzk7cyBvd24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCBmaWxlICpvcGVuX2ludGVycF9maWxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJc3RydWN0IGZpbGUgKmY7CiYjNDM7CiYjNDM7CXNjb3BlZF93aXRoX2NyZWRzKGNyZWQpCiYjNDM7CQlmID0gb3Blbl9leGVjKHBhdGgpOwomIzQzOwlpZiAoSVNfRVJSKGYpKQomIzQzOwkJcHJfbm90aWNlKCYjMzQ7cmVnaXN0ZXI6IGZhaWxlZCB0byBpbnN0YWxsIGludGVycHJldGVyICVzXG4mIzM0OywgcGF0aCk7CiYjNDM7CXJldHVybiBmOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWxlYXNlIHRoZSBpbnRlcnByZXRlcnMgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aC4gKi8KJiM0MztzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycCwgKnRtcDsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGludGVycCwgdG1wLCAmYW1wO2UtJmd0O2ludGVycHMsIGxpc3QpIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7aW50ZXJwLSZndDtsaXN0KTsKJiM0MzsJCWNsb3NlX2ludGVycF9maWxlKGludGVycC0mZ3Q7ZmlsZSk7CiYjNDM7CQlrZnJlZShpbnRlcnApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlciAtIGJpbmQgYW4gb3BlbmVkIGludGVycHJldGVyIHRvIEBlCiYjNDM7ICogQGU6IGVudHJ5IGJlaW5nIGNvbmZpZ3VyZWQKJiM0MzsgKiBAbmFtZTogbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHdpbGwgc2VsZWN0IGl0IGJ5OyBlbXB0eSBmb3IgdGhlIGZpeGVkCiYjNDM7ICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljIGVudHJ5CiYjNDM7ICogQHBhdGg6IHRoZSBwYXRoIEBmIHdhcyBvcGVuZWQgZnJvbQomIzQzOyAqIEBmOiB0aGUgaW50ZXJwcmV0ZXIsIG9wZW5lZCBmb3IgZXhlY3V0aW9uCiYjNDM7ICoKJiM0MzsgKiBFdmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiBAZiwgc28gdGhlIHBhdGggZGVjaWRlZCB3aGljaCBmaWxlIGlzIGJvdW5kCiYjNDM7ICogYW5kIG5vdGhpbmcgZWxzZTogaXQgaXMgbm90IHJlc29sdmVkIGFnYWluLCBpbiBhbnkgbmFtZXNwYWNlLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBoYXMgdG8gaGF2ZSB2YWxpZGF0ZWQgQG5hbWUgYW5kIEBwYXRoLCBlc3RhYmxpc2hlZCB0aGF0IEBlCiYjNDM7ICogY2Fubm90IGJlIG1hdGNoZWQgeWV0LCBhbmQgb3ducyBAZiB1bnRpbCB0aGlzIHN1Y2NlZWRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZmlsZSAqZikKJiM0Mzt7CiYjNDM7CXNpemVfdCBubGVuID0gc3RybGVuKG5hbWUpLCBwbGVuID0gc3RybGVuKHBhdGgpOwomIzQzOwlzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7CiYjNDM7CiYjNDM7CWlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycCgmYW1wO2UtJmd0O2ludGVycHMsIG5hbWUpKQomIzQzOwkJcmV0dXJuIC1FRVhJU1Q7CiYjNDM7CWlmIChsaXN0X2NvdW50X25vZGVzKCZhbXA7ZS0mZ3Q7aW50ZXJwcykgJmd0Oz0gQklORk1UX01JU0NfSU5URVJQX01BWCkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwomIzQzOwkvKiBPbmUgYWxsb2NhdGlvbiwgYm90aCBzdHJpbmdzIGluIGl0LCBsaWtlIHRoZSBlbnRyeSYjMzk7cyBvd24gYnVmZmVyLiAqLwomIzQzOwlpbnRlcnAgPSBrbWFsbG9jKHN0cnVjdF9zaXplKGludGVycCwgbmFtZSwgbmxlbiAmIzQzOyBwbGVuICYjNDM7IDIpLAomIzQzOwkJCSBHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwlpZiAoIWludGVycCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpbnRlcnAtJmd0O3BhdGggPSBpbnRlcnAtJmd0O25hbWUgJiM0MzsgbmxlbiAmIzQzOyAxOwomIzQzOwlzdHJzY3B5KGludGVycC0mZ3Q7bmFtZSwgbmFtZSwgbmxlbiAmIzQzOyAxKTsKJiM0MzsJc3Ryc2NweShpbnRlcnAtJmd0O25hbWUgJiM0MzsgbmxlbiAmIzQzOyAxLCBwYXRoLCBwbGVuICYjNDM7IDEpOwomIzQzOwlpbnRlcnAtJmd0O2ZpbGUgPSBmOwomIzQzOwkvKiBQdWJsaXNoIHRoZSBub2RlOiBhIGxvY2tsZXNzIGNhdCBtYXkgYmUgd2Fsa2luZyB0aGUgbGlzdC4gKi8KJiM0MzsJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtpbnRlcnAtJmd0O2xpc3QsICZhbXA7ZS0mZ3Q7aW50ZXJwcyk7CiYjNDM7CXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IGludGVycHJldGVyOiAlcyB7JXN9XG4mIzM0OywgbmFtZSwgcGF0aCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQogewogCXN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSwgcmN1KTsKQEAgLTIzMiwyMSAmIzQzOzM1MywzNiBAQCBzdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKICAqCiAgKiBGcmVlIGVudHJ5IHN5bmNpbmcgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgYW5kIGRlZmVyIGZpbmFsIGZyZWUgdG8KICAqIGxvYWRfbWlzY19iaW5hcnkoKSBpbiBjYXNlIGl0IGlzIHVzaW5nIHRoZSBiaW5hcnkgdHlwZSBoYW5kbGVyIHdlIHdlcmUKLSAqIHJlcXVlc3RlZCB0byByZW1vdmUuCiYjNDM7ICogcmVxdWVzdGVkIHRvIHJlbW92ZS4gQWxzbyB0aGUgdGVhcmRvd24gZm9yIGEgcmVnaXN0cmF0aW9uIHRoYXQgZmFpbHMKJiM0MzsgKiBiZWZvcmUgYWRkX2VudHJ5KCkgcHVibGlzaGVzIHRoZSBlbnRyeS4KICAqLwogc3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSkKIHsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtlLSZndDt1c2VycykpIHsKLQkJaWYgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX09QRU5fRklMRSkgewotCQkJZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGUtJmd0O2ludGVycF9maWxlKTsKLQkJCWZpbHBfY2xvc2UoZS0mZ3Q7aW50ZXJwX2ZpbGUsIE5VTEwpOwotCQl9CiYjNDM7CQllbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpOwogCQkvKiBXYWxrZXJzIG1heSBzdGlsbCBkZXJlZmVyZW5jZSB0aGlzIGVudHJ5LCBldmVuIHNsZWVwaW5nLiAqLwogCQljYWxsX3NyY3UoJmFtcDtibV9lbnRyaWVzX3NyY3UsICZhbXA7ZS0mZ3Q7cmN1LCBibV9lbnRyeV9mcmVlX3JjdSk7CiAJfQogfQogCi1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBpZiAoX1QpIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpCiYjNDM7REVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgcHV0X2JpbmZtdF9oYW5kbGVyKF9UKSkKJiM0MzsKJiM0MzsvKiBEcm9wIGV2ZXJ5dGhpbmcgYSBsb2FkIHByb2dyYW0gc3RhZ2VkIGZvciB0aGlzIGV4ZWMuICovCiYjNDM7c3RhdGljIHZvaWQgZHJvcF9zdGFnZWRfc2VsZWN0aW9uKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiYjNDM7ewomIzQzOwlrZnJlZShicHJtLSZndDticGZfaW50ZXJwKTsKJiM0MzsJYnBybS0mZ3Q7YnBmX2ludGVycCA9IE5VTEw7CiYjNDM7CWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnBfYXJnKTsKJiM0MzsJYnBybS0mZ3Q7YnBmX2ludGVycF9hcmcgPSBOVUxMOwomIzQzOwlpZiAoYnBybS0mZ3Q7YnBmX2ludGVycF9maWxlKSB7CiYjNDM7CQlmcHV0KGJwcm0tJmd0O2JwZl9pbnRlcnBfZmlsZSk7CiYjNDM7CQlicHJtLSZndDticGZfaW50ZXJwX2ZpbGUgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWJwcm0tJmd0O2JwZl9mbGFncyA9IDA7CiYjNDM7fQogCiAvKioKICAqIGN1cnJlbnRfYmluZm10X21pc2MgLSBnZXQgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIG9mIHRoZSBjYWxsZXImIzM5O3MgdXNlciBuYW1lc3BhY2UKQEAgLTI4MSw3ICYjNDM7NDE3LDggQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzYyAqY3VycmVudF9iaW5mbXRfbWlzYyh2b2lkKQogICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkCiAgKgogICogQSBzdGF0aWMgZW50cnkgY2FycmllcyBpdHMgaW50ZXJwcmV0ZXIgcGF0aCwgZm9yIGEgJiMzOTtCJiMzOTsgZW50cnkgdGhlCi0gKiBoYW5kbGVyJiMzOTtzIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0LiBUaGUgbWF0Y2ggaXMgY29tbWl0dGVkLCBzbyBhIGZhaWxpbmcKJiM0MzsgKiBoYW5kbGVyJiMzOTtzIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0LCBlaXRoZXIgYnkgcGF0aCBvciBieSB0aGUgbmFtZSBvZiBvbmUKJiM0MzsgKiBvZiB0aGUgaW50ZXJwcmV0ZXJzIHRoZSBlbnRyeSBib3VuZC4gVGhlIG1hdGNoIGlzIGNvbW1pdHRlZCwgc28gYSBmYWlsaW5nCiAgKiBwcm9ncmFtIGZhaWxzIHRoZSBleGVjLgogICoKICAqIFJldHVybjogdGhlIGludGVycHJldGVyIG9uIHN1Y2Nlc3MsIGFuIEVSUl9QVFIgb24gZmFpbHVyZQpAQCAtMjkxLDE1ICYjNDM7NDI4LDIwIEBAIHN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLAogewogCWludCByZXR2YWw7CiAKJiM0MzsJLyoKJiM0MzsJICogRHJvcCB3aGF0IGEgcHJldmlvdXMgY2hhaW4gbGV2ZWwgc3RhZ2VkIGJlZm9yZSBhbnl0aGluZyBjYW4gcGljayBpdAomIzQzOwkgKiB1cC4gQSBzdGF0aWMgZW50cnkgc3RhZ2VzIG5vdGhpbmcgYnV0IGNvbnN1bWVzIGEgc3RhZ2VkIGZpbGUganVzdAomIzQzOwkgKiBsaWtlIGEgJiMzOTtCJiMzOTsgZW50cnkgZG9lcy4KJiM0MzsJICovCiYjNDM7CWRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihicHJtKTsKJiM0MzsKIAlpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKQogCQlyZXR1cm4gZS0mZ3Q7aW50ZXJwcmV0ZXI7CiAKLQkvKiBEcm9wIGFueSBpbnRlcnByZXRlciBvciBmbGFncyBhIHByZXZpb3VzIGNoYWluIGxldmVsIHN0YWdlZC4gKi8KLQlrZnJlZShicHJtLSZndDticGZfaW50ZXJwKTsKLQlicHJtLSZndDticGZfaW50ZXJwID0gTlVMTDsKLQlicHJtLSZndDticGZfZmxhZ3MgPSAwOwotCiYjNDM7CS8qIFRoZSBpbnRlcnByZXRlcnMgdGhpcyBlbnRyeSBsZXRzIHRoZSBwcm9ncmFtIGNob29zZSBmcm9tLiAqLwomIzQzOwlicHJtLSZndDticGZfaW50ZXJwcyA9ICZhbXA7ZS0mZ3Q7aW50ZXJwczsKIAlyZXR2YWwgPSBlLSZndDticGZfb3BzLSZndDtsb2FkKGJwcm0pOwomIzQzOwlicHJtLSZndDticGZfaW50ZXJwcyA9IE5VTEw7CiAJaWYgKHJldHZhbCkgewogCQkvKiBLZWVwIGEgcHJvZ3JhbS1zdXBwbGllZCBlcnJvciB3aXRoaW4gZXJybm8gcmFuZ2UuICovCiAJCWlmIChyZXR2YWwgJmd0OyAwIHx8IHJldHZhbCAmbHQ7IC1NQVhfRVJSTk8pCkBAIC0zMTcsOSAmIzQzOzQ1OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLAogCiBkcm9wX3N0YWdlZDoKIAkvKiBBIGZhaWxpbmcgbG9hZCBsZWF2ZXMgbm90aGluZyBiZWhpbmQgZm9yIGxhdGVyIGVudHJpZXMuICovCi0Ja2ZyZWUoYnBybS0mZ3Q7YnBmX2ludGVycF9hcmcpOwotCWJwcm0tJmd0O2JwZl9pbnRlcnBfYXJnID0gTlVMTDsKLQlicHJtLSZndDticGZfZmxhZ3MgPSAwOwomIzQzOwlkcm9wX3N0YWdlZF9zZWxlY3Rpb24oYnBybSk7CiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KIApAQCAtMzY0LDIzICYjNDM7NTA0LDM2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVudHJ5X2ludm9jYXRpb25fZmxhZ3MoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLAogLyoqCiAgKiBlbnRyeV9vcGVuX2ludGVycHJldGVyIC0gb3BlbiB0aGUgZW50cnkmIzM5O3MgaW50ZXJwcmV0ZXIgZm9yIGV4ZWN1dGlvbgogICogQGU6IG1hdGNoZWQgYmluYXJ5IHR5cGUgaGFuZGxlcgomIzQzOyAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZAogICogQGludGVycHJldGVyOiB0aGUgaW50ZXJwcmV0ZXIgc2VsZWN0ZWQgZm9yIHRoaXMgZXhlYwogICoKICAqIEFuICYjMzk7RiYjMzk7IGVudHJ5IGhhbmRzIG91dCBhIGNsb25lIG9mIHRoZSBmaWxlIGl0IHByZS1vcGVuZWQgYXQgcmVnaXN0cmF0aW9uLAotICogYW55IG90aGVyIGVudHJ5IG9wZW5zIHRoZSBzZWxlY3RlZCBwYXRoLgomIzQzOyAqIGFuZCBzbyBkb2VzIGEgJiMzOTtCJiMzOTsgZW50cnkgd2hvc2UgbG9hZCBwcm9ncmFtIHNlbGVjdGVkIG9uZSBvZiB0aGUKJiM0MzsgKiBpbnRlcnByZXRlcnMgaXQgYm91bmQuIEFueSBvdGhlciBlbnRyeSBvcGVucyB0aGUgc2VsZWN0ZWQgcGF0aC4KICAqCiAgKiBSZXR1cm46IHRoZSBvcGVuZWQgaW50ZXJwcmV0ZXIgb24gc3VjY2VzcywgYW4gRVJSX1BUUiBvbiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCQkJCQkgICBjb25zdCBjaGFyICppbnRlcnByZXRlcikKIHsKIAlzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGUgX19mcmVlKGZwdXQpID0gTlVMTDsKJiM0MzsJc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwOwomIzQzOwlzdHJ1Y3QgZmlsZSAqYm91bmQ7CiAJaW50IHJldHZhbDsKIAotCWlmICghKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX09QRU5fRklMRSkpCiYjNDM7CWlmIChicHJtLSZndDticGZfaW50ZXJwX2ZpbGUpIHsKJiM0MzsJCWJvdW5kID0gYnBybS0mZ3Q7YnBmX2ludGVycF9maWxlOwomIzQzOwl9IGVsc2UgaWYgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX09QRU5fRklMRSkgewomIzQzOwkJLyogQW4gJiMzOTtGJiMzOTsgZW50cnkgcHJlLW9wZW5lZCBleGFjdGx5IG9uZSBpbnRlcnByZXRlci4gKi8KJiM0MzsJCWludGVycCA9IGxpc3RfZmlyc3RfZW50cnkoJmFtcDtlLSZndDtpbnRlcnBzLAomIzQzOwkJCQkJICBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwLCBsaXN0KTsKJiM0MzsJCWJvdW5kID0gaW50ZXJwLSZndDtmaWxlOwomIzQzOwl9IGVsc2UgewogCQlyZXR1cm4gb3Blbl9leGVjKGludGVycHJldGVyKTsKJiM0MzsJfQogCi0JaW50ZXJwX2ZpbGUgPSBmaWxlX2Nsb25lX29wZW4oZS0mZ3Q7aW50ZXJwX2ZpbGUpOwomIzQzOwlpbnRlcnBfZmlsZSA9IGZpbGVfY2xvbmVfb3Blbihib3VuZCk7CiAJaWYgKElTX0VSUihpbnRlcnBfZmlsZSkpCiAJCXJldHVybiBpbnRlcnBfZmlsZTsKIApAQCAtNDkwLDcgJiM0Mzs2NDMsNyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkgKiB0byB0aGUgcmVhbCBmb3JtYXQgaW4gdGhlIHNhbWUgcm91bmQuCiAJICovCiAJaWYgKGZsYWdzICZhbXA7IE1JU0NfRk1UX0xPQURFUikgewotCQlpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBpbnRlcnByZXRlcik7CiYjNDM7CQlpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBicHJtLCBpbnRlcnByZXRlcik7CiAJCWlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKSB7CiAJCQlyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTsKIAkJCS8qIERlY2xpbmluZyBoZXJlIHdvdWxkIHJ1biB0aGUgYmluYXJ5JiMzOTtzIG93biBQVF9JTlRFUlAuICovCkBAIC01MTIsNyAmIzQzOzY2NSw3IEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCWlmIChyZXR2YWwgJmx0OyAwKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JaW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgaW50ZXJwcmV0ZXIpOwomIzQzOwlpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBicHJtLCBpbnRlcnByZXRlcik7CiAJaWYgKElTX0VSUihpbnRlcnBfZmlsZSkpCiAJCXJldHVybiBQVFJfRVJSKGludGVycF9maWxlKTsKIApAQCAtNjg0LDcgJiM0Mzs4MzcsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCQkJICAgICAgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDsKLQljaGFyICpidWYsICpwLCAqZmxhZ3M7CiYjNDM7CWNoYXIgKmJ1ZiwgKnA7CiAJY2hhciBkZWw7CiAKIAlwcl9kZWJ1ZygmIzM0O3JlZ2lzdGVyOiByZWNlaXZlZCAlenUgYnl0ZXNcbiYjMzQ7LCBjb3VudCk7CkBAIC03MDEsNiAmIzQzOzg1NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCXAgPSBidWYgPSBlLSZndDtidWY7CiAKIAltZW1zZXQoZSwgMCwgc2l6ZW9mKCplKSk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZS0mZ3Q7aW50ZXJwcyk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpCiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCkBAIC03ODAsMTggJiM0Mzs5MzQsMzAgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJfQogCiAJLyogUGFyc2UgdGhlICYjMzk7ZmxhZ3MmIzM5OyBmaWVsZC4gKi8KLQlmbGFncyA9IHA7CiAJcCA9IGNoZWNrX3NwZWNpYWxfZmxhZ3MocCwgZSk7CiAKIAkvKgogCSAqIEEgYnBmIGhhbmRsZXIgZGVjaWRlcyB0aGUgaW52b2NhdGlvbiBmbGFncyBwZXIgZXhlYyB3aXRoCiAJICogYnBmX2JpbnBybV9zZXRfZmxhZ3MoKSByYXRoZXIgdGhhbiBmaXhpbmcgdGhlbSBhdCByZWdpc3RyYXRpb24sIGFuZAotCSAqICYjMzk7RiYjMzk7IChwcmUtb3BlbiBhIGZpeGVkIGludGVycHJldGVyKSBpcyBtZWFuaW5nbGVzcyBmb3IgaXQsIHNvIGEgJiMzOTtCJiMzOTsKLQkgKiBlbnRyeSYjMzk7cyBmbGFncyBmaWVsZCBoYXMgdG8gYmUgZW1wdHkuCiYjNDM7CSAqIHRoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgcHJlLW9wZW4gd2hhdCAmIzM5O0YmIzM5OyB3b3VsZCBoYXZlLCBzbyBhICYjMzk7QiYjMzk7CiYjNDM7CSAqIGVudHJ5IGNhcnJpZXMgbm8gaW52b2NhdGlvbiBmbGFncy4KIAkgKi8KLQlpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgJmFtcDtlLSZndDtmbGFncykgJmFtcDsmYW1wOyBwICE9IGZsYWdzKQomIzQzOwlpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgJmFtcDtlLSZndDtmbGFncykgJmFtcDsmYW1wOwomIzQzOwkgICAgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX0lOVk9DQVRJT05fRkxBR1MpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAomIzQzOwkvKgomIzQzOwkgKiAmIzM5O0QmIzM5OyBpcyBhIGRpcmVjdGl2ZSBmb3IgdGhpcyByZWdpc3RyYXRpb24gcmF0aGVyIHRoYW4gYSBsYXN0aW5nCiYjNDM7CSAqIHByb3BlcnR5LCBzbyBjb25zdW1lIGl0OiB0aGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBhbmQgc3RheXMKJiM0MzsJICogb3V0IG9mIHRoZSBzZWFyY2ggbGlzdCB1bnRpbCAmIzM5OzEmIzM5OyBpcyB3cml0dGVuIHRvIGl0cyBlbnRyeSBmaWxlLgomIzQzOwkgKiBTdGF5aW5nIG91dCBpcyB3aGF0IGxlYXZlcyBpdCBvcGVuIHRvIGJlaW5nIGdpdmVuIGludGVycHJldGVyczsKJiM0MzsJICogdGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgaXQsIGZvciBnb29kLgomIzQzOwkgKi8KJiM0MzsJaWYgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX0RJU0FCTEVEKSB7CiYjNDM7CQllLSZndDtmbGFncyAmYW1wOz0gfk1JU0NfRk1UX0RJU0FCTEVEOwomIzQzOwkJY2xlYXJfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCAmYW1wO2UtJmd0O2ZsYWdzKTsKJiM0MzsJfQomIzQzOwogCS8qIFRyYW5zcGFyZW5jeSBwcmVzZXJ2ZXMgdGhlIHdob2xlIGFyZ3YsIGFyZ3ZbMF0gaW5jbHVkZWQuICovCiAJaWYgKChlLSZndDtmbGFncyAmYW1wOyBNSVNDX0ZNVF9UUkFOU1BBUkVOVCkgJmFtcDsmYW1wOwogCSAgICAoZS0mZ3Q7ZmxhZ3MgJmFtcDsgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApKQpAQCAtODE0LDYgJiM0Mzs5ODAsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkgICAgZS0mZ3Q7aW50ZXJwcmV0ZXJbMF0gIT0gJiMzOTsvJiMzOTspCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiYjNDM7CS8qIEJvcm4gaG9sZGluZyBvbmUgcmVmZXJlbmNlOyBwdXRfYmluZm10X2hhbmRsZXIoKSBpcyB0aGUgdGVhcmRvd24uICovCiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2UtJmd0O3VzZXJzLCAxKTsKIAlyZXR1cm4gbm9fZnJlZV9wdHIoZSk7CiB9CiAKQEAgLTgyNSwxOCAmIzQzOzk5MywxNyBAQCBlbnVtIGJtX2NvbW1hbmQgewogCUJNX0NNRF9SRU1PVkUsCS8qICYjMzQ7LTEmIzM0OyAqLwogfTsKIAomIzQzOy8qIExvbmdlc3Qgb2YgdGhlIGNvbW1hbmRzIGFib3ZlLCAmIzM0Oy0xXG4mIzM0Oy4gKi8KJiM0MzsjZGVmaW5lIE1BWF9DT01NQU5EX0xFTkdUSCAzCiYjNDM7CiAvKgogICogUGFyc2Ugd2hhdCB1c2Vyc3BhY2Ugd3JvdGUgdG8gL3N0YXR1cyBvciBhbiBlbnRyeSBmaWxlOiAmIzM5OzEmIzM5OyBlbmFibGVzLAogICogJiMzOTswJiMzOTsgZGlzYWJsZXMgYW5kICYjMzk7LTEmIzM5OyByZW1vdmVzIHRoZSBlbnRyeSBvciBhbGwgZW50cmllcy4KICAqLwotc3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCkKJiM0MztzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciAqcywgc2l6ZV90IGNvdW50KQogewotCWNoYXIgc1s0XTsKLQotCWlmIChjb3VudCAmZ3Q7IDMpCiYjNDM7CWlmIChjb3VudCAmZ3Q7IE1BWF9DT01NQU5EX0xFTkdUSCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gQk1fQ01EX0lHTk9SRTsKIAlpZiAoc1tjb3VudCAtIDFdID09ICYjMzk7XG4mIzM5OykKQEAgLTg1MCw4ICYjNDM7MTAxNywyNiBAQCBzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogCXJldHVybiAtRUlOVkFMOwogfQogCiYjNDM7LyogQ29weSBpbiBhIGNvbW1hbmQgZnJvbSBhIGZpbGUgdGhhdCB0YWtlcyBub3RoaW5nIGVsc2UsIGFuZCBwYXJzZSBpdC4gKi8KJiM0MztzdGF0aWMgaW50IHJlYWRfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwljaGFyIHNbTUFYX0NPTU1BTkRfTEVOR1RIICYjNDM7IDFdOwomIzQzOwomIzQzOwlpZiAoY291bnQgJmd0OyBzaXplb2YocykgLSAxKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcihzLCBidWZmZXIsIGNvdW50KSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwlyZXR1cm4gcGFyc2VfY29tbWFuZChzLCBjb3VudCk7CiYjNDM7fQomIzQzOwogLyogZ2VuZXJpYyBzdHVmZiAqLwogCiYjNDM7LyogVGhlIHJvb3QgZGlyZWN0b3J5JiMzOTtzIGlub2RlOyBpdHMgbG9jayBzZXJpYWxpemVzIGNvbmZpZ3VyaW5nIGFuIGluc3RhbmNlLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmJtX3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKJiM0Mzt7CiYjNDM7CXJldHVybiBkX2lub2RlKHNiLSZndDtzX3Jvb3QpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGJtX3NlcV9oZXgoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1OCAqZGF0YSwgaW50IHNpemUpCiB7CiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBzaXplOyBpJiM0MzsmIzQzOykKQEAgLTg2NywxMCAmIzQzOzEwNTIsMjMgQEAgc3RhdGljIGludCBibV9lbnRyeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCWVsc2UKIAkJc2VxX3B1dHMobSwgJiMzNDtkaXNhYmxlZFxuJiMzNDspOwogCi0JaWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKQomIzQzOwlpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCXN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDsKJiM0MzsKIAkJc2VxX3ByaW50ZihtLCAmIzM0O2JwZiAlc1xuJiMzNDssIGUtJmd0O2JwZl9vcHMtJmd0O25hbWUpOwotCWVsc2UKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIHN0YWdlZCBlbnRyeSYjMzk7cyBzZXQgY2FuIHN0aWxsIGdyb3csIHNvIGV2ZXJ5IGJpbmRpbmcgaXMKJiM0MzsJCSAqIHJjdS1wdWJsaXNoZWQuIFRoZSBvcGVuIGZpbGUgcGlucyB0aGUgZW50cnkgYW5kIHdpdGggaXQKJiM0MzsJCSAqIGV2ZXJ5IG5vZGUsIHNvIHJjdSBpcyBmb3IgdGhlIHRlYXJpbmcsIG5vdCB0aGUgbGlmZXRpbWUuCiYjNDM7CQkgKi8KJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGludGVycCwgJmFtcDtlLSZndDtpbnRlcnBzLCBsaXN0KQomIzQzOwkJCXNlcV9wcmludGYobSwgJiMzNDticGYtaW50ZXJwcmV0ZXIgJXMgJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBpbnRlcnAtJmd0O25hbWUsIGludGVycC0mZ3Q7cGF0aCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJfSBlbHNlIHsKIAkJc2VxX3ByaW50ZihtLCAmIzM0O2ludGVycHJldGVyICVzXG4mIzM0OywgZS0mZ3Q7aW50ZXJwcmV0ZXIpOwomIzQzOwl9CiAKIAkvKiBwcmludCB0aGUgc3BlY2lhbCBmbGFncyAqLwogCXNlcV9wdXRzKG0sICYjMzQ7ZmxhZ3M6ICYjMzQ7KTsKQEAgLTk5MiwxMCAmIzQzOzExOTAsMTEgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywKIC8qIFJlbW92ZSBAZSB1bmxlc3MgaXQgd2FzIGFscmVhZHkgcmVtb3ZlZC4gKi8KIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IGlub2RlICpyb290ID0gZF9pbm9kZShzYi0mZ3Q7c19yb290KTsKJiM0MzsJc3RydWN0IGlub2RlICpyb290ID0gYm1fcm9vdF9pbm9kZShzYik7CiAKIAlpbm9kZV9sb2NrX25lc3RlZChyb290LCBJX01VVEVYX1BBUkVOVCk7Ci0JaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO2UtJmd0O25vZGUpKQomIzQzOwkvKiBBIHN0YWdlZCBlbnRyeSBpcyBub3QgaGFzaGVkOyB0aGUgZGVudHJ5IHNheXMgaWYgaXQgd2FzIHJlbW92ZWQuICovCiYjNDM7CWlmICghZF91bmhhc2hlZChlLSZndDtkZW50cnkpKQogCQlyZW1vdmVfYmluZm10X2hhbmRsZXIoaV9iaW5mbXRfbWlzYyhyb290KSwgZSk7CiAJaW5vZGVfdW5sb2NrKHJvb3QpOwogfQpAQCAtMTAwNCwxMyAmIzQzOzEyMDMsMjEgQEAgc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9hbGxfZW50cmllcyhzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsCiAJCQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBpbm9kZSAqcm9vdCA9IGRfaW5vZGUoc2ItJmd0O3Nfcm9vdCk7Ci0Jc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplOwotCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0OwomIzQzOwlzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKHNiKTsKJiM0MzsJc3RydWN0IGRlbnRyeSAqY2hpbGQgPSBOVUxMOwogCiAJaW5vZGVfbG9ja19uZXN0ZWQocm9vdCwgSV9NVVRFWF9QQVJFTlQpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbmV4dCwgJmFtcDttaXNjLSZndDtlbnRyaWVzLCBub2RlKQotCQlyZW1vdmVfYmluZm10X2hhbmRsZXIobWlzYywgZSk7CiYjNDM7CS8qCiYjNDM7CSAqIFdhbGsgdGhlIGRpcmVjdG9yeSByYXRoZXIgdGhhbiB0aGUgc2VhcmNoIGxpc3Q6IGEgc3RhZ2VkIGVudHJ5CiYjNDM7CSAqIGlzIGluIHRoZSBmb3JtZXIgYnV0IG5vdCB5ZXQgaW4gdGhlIGxhdHRlci4gVGhlIGNvbnRyb2wgZmlsZXMKJiM0MzsJICogY2Fycnkgbm8gZW50cnkgYW5kIHN0YXkuCiYjNDM7CSAqLwomIzQzOwl3aGlsZSAoKGNoaWxkID0gZmluZF9uZXh0X2NoaWxkKHNiLSZndDtzX3Jvb3QsIGNoaWxkKSkpIHsKJiM0MzsJCXN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGRfaW5vZGUoY2hpbGQpLSZndDtpX3ByaXZhdGU7CiYjNDM7CiYjNDM7CQlpZiAoZSkKJiM0MzsJCQlyZW1vdmVfYmluZm10X2hhbmRsZXIobWlzYywgZSk7CiYjNDM7CX0KIAlpbm9kZV91bmxvY2socm9vdCk7CiB9CiAKQEAgLTEwNTYsMjAgJiM0MzsxMjYzLDEzOCBAQCBzdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIExvbmdlc3QgJiMzOTsmIzQzOyZsdDtuYW1lJmd0OyAmbHQ7cGF0aCZndDsmIzM5OyBhIHdyaXRlIGNhbiBzcGVsbCwgYW5kIHdpdGggaXQgdGhlIGxvbmdlc3QKJiM0MzsgKiBjb21tYW5kIGFuIGVudHJ5IGZpbGUgdGFrZXM6IHRoZSB0d28gZGVsaW1pdGVycyBhbmQgYSBuZXdsaW5lIG9uIHRvcCBvZgomIzQzOyAqIHRoZSB0d28gbmFtZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNQVhfQklORElOR19MRU5HVEggKEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWCAmIzQzOyBQQVRIX01BWCAmIzQzOyAzKQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnkKJiM0MzsgKiBAZTogdGhlIGVudHJ5CiYjNDM7ICogQGZpbGU6IHRoZSBlbnRyeSBmaWxlIGJlaW5nIHdyaXR0ZW4gdG8sIGZvciBpdHMgY3JlZGVudGlhbHMKJiM0MzsgKiBAYnVmOiB0aGUgJiMzOTsmIzQzOyZsdDtuYW1lJmd0OyAmbHQ7cGF0aCZndDsmIzM5OyBjb21tYW5kLCBwYXJzZWQgaW4gcGxhY2UgYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIKJiM0MzsgKiBAY291bnQ6IGl0cyBsZW5ndGgKJiM0MzsgKgomIzQzOyAqIEEgJiMzOTtEJiMzOTsgZW50cnkgaXMgcmVnaXN0ZXJlZCBvdXRzaWRlIHRoZSBzZWFyY2ggbGlzdCwgd2hpY2ggaXMgd2hhdCBsZWF2ZXMKJiM0MzsgKiBpdCBvcGVuIHRvIGJlaW5nIGNvbmZpZ3VyZWQ6IGl0IGNhbm5vdCBiZSBtYXRjaGVkLCBzbyBubyBleGVjIGNhbiBiZQomIzQzOyAqIGhvbGRpbmcgaXRzIGludGVycHJldGVycyBhbmQgdGhlIHNldCBjYW4gc3RpbGwgZ3Jvdy4gSXRzIGZpcnN0IGVuYWJsZQomIzQzOyAqIHB1Ymxpc2hlcyBpdCBhbmQgZW5kcyB0aGF0LiBPbmUgaW50ZXJwcmV0ZXIgcGVyIHdyaXRlLCB1cCB0bwomIzQzOyAqIEJJTkZNVF9NSVNDX0lOVEVSUF9NQVggb2YgdGhlbSwgbm9uZSBvZiB3aGljaCBoYXMgdG8gZml0IGluIGEgcmVnaXN0ZXIKJiM0MzsgKiBzdHJpbmcuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IEBjb3VudCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUKJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwKJiM0MzsJCQkJICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGZpbGUgKmYgX19mcmVlKGNsb3NlX2ludGVycF9maWxlKSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoZmlsZV9pbm9kZShmaWxlKS0mZ3Q7aV9zYik7CiYjNDM7CXNpemVfdCBubGVuLCBwbGVuOwomIzQzOwljaGFyICpuYW1lLCAqcGF0aDsKJiM0MzsJaW50IHJldHZhbDsKJiM0MzsKJiM0MzsJLyogU2V0dGxlZCBiZWZvcmUgdGhlIG9wZW46IHR5cGUgaXMgZml4ZWQsIHB1YmxpY2F0aW9uIGlzIHBlcm1hbmVudC4gKi8KJiM0MzsJaWYgKCF0ZXN0X2JpdChNSVNDX0ZNVF9CUEZfQklULCAmYW1wO2UtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWhsaXN0X3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7ZS0mZ3Q7bm9kZSkpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwkvKiAmIzM5OyYjNDM7Jmx0O25hbWUmZ3Q7ICZsdDtwYXRoJmd0OyYjMzk7OiB0aGUgcGF0aCBpcyBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0IHNwYWNlLiAqLwomIzQzOwluYW1lID0gYnVmICYjNDM7IDE7CiYjNDM7CXBhdGggPSBzdHJjaHIobmFtZSwgJiMzOTsgJiMzOTspOwomIzQzOwlpZiAoIXBhdGgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJKnBhdGgmIzQzOyYjNDM7ID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwlwbGVuID0gc3RybGVuKHBhdGgpOwomIzQzOwkvKiBUaGUgY29tbWFuZCBoYXMgdG8gZW5kIGF0IHRoZSB3cml0ZSwgbGlrZSBhIHJlZ2lzdGVyIHN0cmluZy4gKi8KJiM0MzsJaWYgKHBhdGggJiM0MzsgcGxlbiAhPSBidWYgJiM0MzsgY291bnQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKHBsZW4gJmFtcDsmYW1wOyBwYXRoW3BsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCiYjNDM7CQlwYXRoWy0tcGxlbl0gPSAmIzM5O1wwJiMzOTs7CiYjNDM7CS8qIFJlc29sdmVkIG5vdywgc28gYSByZWxhdGl2ZSBwYXRoIHdvdWxkIG5hbWUgdGhlIHdyaXRlciYjMzk7cyBjd2QuICovCiYjNDM7CWlmIChwYXRoWzBdICE9ICYjMzk7LyYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CW5sZW4gPSBwYXRoIC0gbmFtZSAtIDE7CiYjNDM7CWlmICghbmxlbiB8fCBubGVuICZndDsgQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CS8qIFRoZSBuYW1lIHByaW50cyBiZXR3ZWVuIGRlbGltaXRlcnMsIHNvIGtlZXAgaXQgYSBwcmludGFibGUgd29yZC4gKi8KJiM0MzsJZm9yIChjb25zdCBjaGFyICpwID0gbmFtZTsgKnA7IHAmIzQzOyYjNDM7KQomIzQzOwkJaWYgKCFpc2FzY2lpKCpwKSB8fCAhaXNncmFwaCgqcCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIE9wZW5lZCBiZWZvcmUgdGhlIGxvY2s6IHJlc29sdmluZyBpdCBtYXkgd2FsayB0aGlzIHZlcnkgZmlsZXN5c3RlbS4gKi8KJiM0MzsJZiA9IG9wZW5faW50ZXJwX2ZpbGUoZmlsZS0mZ3Q7Zl9jcmVkLCBwYXRoKTsKJiM0MzsJaWYgKElTX0VSUihmKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGYpOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKHJvb3QpOwomIzQzOwlpZiAoZF91bmhhc2hlZChlLSZndDtkZW50cnkpKQomIzQzOwkJcmV0dmFsID0gLUVOT0VOVDsJLyogcmVtb3ZlZCB3aGlsZSB3ZSB3ZXJlIG9wZW5pbmcgaXQgKi8KJiM0MzsJZWxzZSBpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7ZS0mZ3Q7bm9kZSkpCiYjNDM7CQlyZXR2YWwgPSAtRUJVU1k7CS8qIHB1Ymxpc2hlZCB3aGlsZSB3ZSB3ZXJlIG9wZW5pbmcgaXQgKi8KJiM0MzsJZWxzZQomIzQzOwkJcmV0dmFsID0gZW50cnlfYXR0YWNoX2ludGVycHJldGVyKGUsIG5hbWUsIHBhdGgsIGYpOwomIzQzOwlpbm9kZV91bmxvY2socm9vdCk7CiYjNDM7CWlmIChyZXR2YWwpCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwomIzQzOwomIzQzOwkvKiBUaGUgZmlsZSBpcyBvd25lZCBieSB0aGUgZW50cnkgbm93LiAqLwomIzQzOwlyZXRhaW5fYW5kX251bGxfcHRyKGYpOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplID0gaW5vZGUtJmd0O2lfcHJpdmF0ZTsKLQlpbnQgcmVzID0gcGFyc2VfY29tbWFuZChidWZmZXIsIGNvdW50KTsKJiM0MzsJY2hhciAqYnVmIF9fZnJlZShrZnJlZSkgPSBOVUxMOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwkvKiBBIGJpbmRpbmcgaXMgdGhlIGxvbmdlc3QgY29tbWFuZCB0aGlzIGZpbGUgdGFrZXMuICovCiYjNDM7CWlmIChjb3VudCAmZ3Q7IE1BWF9CSU5ESU5HX0xFTkdUSCkKJiM0MzsJCXJldHVybiAtRTJCSUc7CiYjNDM7CiYjNDM7CWJ1ZiA9IG1lbWR1cF91c2VyX251bChidWZmZXIsIGNvdW50KTsKJiM0MzsJaWYgKElTX0VSUihidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKJiM0MzsKJiM0MzsJLyogJiMzOTsmIzQzOyZsdDtuYW1lJmd0OyAmbHQ7cGF0aCZndDsmIzM5OyBiaW5kcyBhbiBpbnRlcnByZXRlciwgZXZlcnl0aGluZyBlbHNlIHRvZ2dsZXMuICovCiYjNDM7CWlmIChidWZbMF0gPT0gJiMzOTsmIzQzOyYjMzk7KQomIzQzOwkJcmV0dXJuIGJtX2VudHJ5X2FkZF9pbnRlcnAoZSwgZmlsZSwgYnVmLCBjb3VudCk7CiYjNDM7CiYjNDM7CXJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmLCBjb3VudCk7CiAKIAlzd2l0Y2ggKHJlcykgewogCWNhc2UgQk1fQ01EX0RJU0FCTEU6CiAJCWNsZWFyX2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgJmFtcDtlLSZndDtmbGFncyk7CiAJCWJyZWFrOwotCWNhc2UgQk1fQ01EX0VOQUJMRToKJiM0MzsJY2FzZSBCTV9DTURfRU5BQkxFOiB7CiYjNDM7CQlzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKGlub2RlLSZndDtpX3NiKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZmlyc3QgZW5hYmxlIHB1Ymxpc2hlcyBhICYjMzk7RCYjMzk7IGVudHJ5IGludG8gdGhlIHNlYXJjaAomIzQzOwkJICogbGlzdCwgd2hvbGUuIFRoZSBsb2NrIGtlZXBzIHRoYXQgb3JkZXJlZCBhZ2FpbnN0IGEgc2Vjb25kCiYjNDM7CQkgKiBlbmFibGUsIGFnYWluc3QgcmVtb3ZhbCAtIGEgcmVtb3ZlZCBlbnRyeSBoYXMgbm90aGluZyBsZWZ0CiYjNDM7CQkgKiB0byBwdWJsaXNoIC0gYW5kIGFnYWluc3QgYmluZGluZzogd2hhdCBjYW4gYmUgbWF0Y2hlZCBjYW4KJiM0MzsJCSAqIG5vIGxvbmdlciBiZSBjb25maWd1cmVkLgomIzQzOwkJICovCiYjNDM7CQlpbm9kZV9sb2NrKHJvb3QpOwogCQlzZXRfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCAmYW1wO2UtJmd0O2ZsYWdzKTsKJiM0MzsJCWlmIChobGlzdF91bmhhc2hlZCgmYW1wO2UtJmd0O25vZGUpICZhbXA7JmFtcDsgIWRfdW5oYXNoZWQoZS0mZ3Q7ZGVudHJ5KSkgewomIzQzOwkJCXN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpOwomIzQzOwomIzQzOwkJCXNwaW5fbG9jaygmYW1wO21pc2MtJmd0O2VudHJpZXNfbG9jayk7CiYjNDM7CQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7ZS0mZ3Q7bm9kZSwgJmFtcDttaXNjLSZndDtlbnRyaWVzKTsKJiM0MzsJCQlzcGluX3VubG9jaygmYW1wO21pc2MtJmd0O2VudHJpZXNfbG9jayk7CiYjNDM7CQl9CiYjNDM7CQlpbm9kZV91bmxvY2socm9vdCk7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBCTV9DTURfUkVNT1ZFOgogCQlibV9yZW1vdmVfZW50cnkoZSwgaW5vZGUtJmd0O2lfc2IpOwogCQlicmVhazsKQEAgLTExMDYsMTYgJiM0MzsxNDMxLDE4IEBAIHN0YXRpYyBpbnQgYWRkX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmVmY291bnRfc2V0KCZhbXA7ZS0mZ3Q7dXNlcnMsIDEpOwogCWUtJmd0O2RlbnRyeSA9IGRlbnRyeTsKIAlpbm9kZS0mZ3Q7aV9wcml2YXRlID0gZTsKIAlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2JtX2VudHJ5X29wZXJhdGlvbnM7CiAKIAlkX21ha2VfcGVyc2lzdGVudChkZW50cnksIGlub2RlKTsKLQltaXNjID0gaV9iaW5mbXRfbWlzYyhpbm9kZSk7Ci0Jc3Bpbl9sb2NrKCZhbXA7bWlzYy0mZ3Q7ZW50cmllc19sb2NrKTsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDtlLSZndDtub2RlLCAmYW1wO21pc2MtJmd0O2VudHJpZXMpOwotCXNwaW5fdW5sb2NrKCZhbXA7bWlzYy0mZ3Q7ZW50cmllc19sb2NrKTsKJiM0MzsJLyogQSAmIzM5O0QmIzM5OyBlbnRyeSBzdGF5cyBvdXQgb2YgdGhlIHNlYXJjaCBsaXN0IHVudGlsIGl0cyBmaXJzdCBlbmFibGUuICovCiYjNDM7CWlmICh0ZXN0X2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCW1pc2MgPSBpX2JpbmZtdF9taXNjKGlub2RlKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO21pc2MtJmd0O2VudHJpZXNfbG9jayk7CiYjNDM7CQlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDtlLSZndDtub2RlLCAmYW1wO21pc2MtJmd0O2VudHJpZXMpOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDttaXNjLSZndDtlbnRyaWVzX2xvY2spOwomIzQzOwl9CiAJc2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjMsOSAmIzQzOzE0NTAsOCBAQCBzdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiBzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKGtmcmVlKSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUocHV0X2JpbmZtdF9oYW5kbGVyKSA9IE5VTEw7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktJmd0O2lfc2I7Ci0Jc3RydWN0IGZpbGUgKmYgPSBOVUxMOwogCWludCBlcnI7CiAKIAllID0gY3JlYXRlX2VudHJ5KGJ1ZmZlciwgY291bnQpOwpAQCAtMTE0MiwzMyAmIzQzOzE0NjgsMjAgQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJfQogCiAJaWYgKGUtJmd0O2ZsYWdzICZhbXA7IE1JU0NfRk1UX09QRU5fRklMRSkgewotCQkvKgotCQkgKiBOb3cgdGhhdCB3ZSBzdXBwb3J0IHVucHJpdmlsZWdlZCBiaW5mbXRfbWlzYyBtb3VudHMgbWFrZQotCQkgKiBzdXJlIHdlIHVzZSB0aGUgY3JlZGVudGlhbHMgdGhhdCB0aGUgcmVnaXN0ZXIgQGZpbGUgd2FzCi0JCSAqIG9wZW5lZCB3aXRoIHRvIGFsc28gb3BlbiB0aGUgaW50ZXJwcmV0ZXIuIEJlZm9yZSB0aGF0IHRoaXMKLQkJICogZGlkbiYjMzk7dCBtYXR0ZXIgbXVjaCBhcyBvbmx5IGEgcHJpdmlsZWdlZCBwcm9jZXNzIGNvdWxkIG9wZW4KLQkJICogdGhlIHJlZ2lzdGVyIGZpbGUuCi0JCSAqLwotCQlzY29wZWRfd2l0aF9jcmVkcyhmaWxlLSZndDtmX2NyZWQpCi0JCQlmID0gb3Blbl9leGVjKGUtJmd0O2ludGVycHJldGVyKTsKLQkJaWYgKElTX0VSUihmKSkgewotCQkJcHJfbm90aWNlKCYjMzQ7cmVnaXN0ZXI6IGZhaWxlZCB0byBpbnN0YWxsIGludGVycHJldGVyIGZpbGUgJXNcbiYjMzQ7LAotCQkJCSBlLSZndDtpbnRlcnByZXRlcik7CiYjNDM7CQlzdHJ1Y3QgZmlsZSAqZiA9IG9wZW5faW50ZXJwX2ZpbGUoZmlsZS0mZ3Q7Zl9jcmVkLCBlLSZndDtpbnRlcnByZXRlcik7CiYjNDM7CiYjNDM7CQlpZiAoSVNfRVJSKGYpKQogCQkJcmV0dXJuIFBUUl9FUlIoZik7CiYjNDM7CQllcnIgPSBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoZSwgJiMzNDsmIzM0OywgZS0mZ3Q7aW50ZXJwcmV0ZXIsIGYpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWNsb3NlX2ludGVycF9maWxlKGYpOwomIzQzOwkJCXJldHVybiBlcnI7CiAJCX0KLQkJZS0mZ3Q7aW50ZXJwX2ZpbGUgPSBmOwogCX0KIAogCWVyciA9IGFkZF9lbnRyeShlLCBzYik7Ci0JaWYgKGVycikgewotCQlpZiAoZikgewotCQkJZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpOwotCQkJZmlscF9jbG9zZShmLCBOVUxMKTsKLQkJfQotCQlpZiAoZS0mZ3Q7YnBmX29wcykKLQkJCWJpbmZtdF9taXNjX3B1dF9vcHMoZS0mZ3Q7YnBmX29wcyk7CiYjNDM7CWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJLyogVGhlIGVudHJ5IGlzIG93bmVkIGJ5IGl0cyBpbm9kZSBub3cuICovCiAJcmV0YWluX2FuZF9udWxsX3B0cihlKTsKQEAgLTExOTcsNyAmIzQzOzE1MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYzsKLQlpbnQgcmVzID0gcGFyc2VfY29tbWFuZChidWZmZXIsIGNvdW50KTsKJiM0MzsJaW50IHJlcyA9IHJlYWRfY29tbWFuZChidWZmZXIsIGNvdW50KTsKIAogCW1pc2MgPSBpX2JpbmZtdF9taXNjKGZpbGVfaW5vZGUoZmlsZSkpOwogCXN3aXRjaCAocmVzKSB7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzY19icGYuYyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jCmluZGV4IDkyMDAzZWE2NDBkM2YuLmIyNDZkODg2NDM3YjggMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jCkBAIC03LDYgJiM0Mzs3LDE1IEBACiAgKiBuYW1lc3BhY2UgaXQgd2FzIHJlZ2lzdGVyZWQgaW4uIEEgYmluZm10X21pc2MgJiMzOTtCJiMzOTsgZW50cnkgYWN0aXZhdGVzIGl0OgogICoKICAqICAgZWNobyAmIzM5OzplbnRyeTpCOjo6OiZsdDtoYW5kbGVyLW5hbWUmZ3Q7OiYjMzk7ICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9yZWdpc3RlcgomIzQzOyAqCiYjNDM7ICogVGhlIGVudHJ5IGNhbiBiaW5kIHRoZSBpbnRlcnByZXRlcnMgdGhlIGhhbmRsZXIgbWF5IHJ1biBpdHMgYmluYXJpZXMKJiM0MzsgKiB3aXRoLCBlYWNoIG9wZW5lZCBieSB0aGUgd3JpdGUgdGhhdCBiaW5kcyBpdCBhbmQgc2VsZWN0ZWQgYnkgbmFtZSBwZXIKJiM0MzsgKiBleGVjLiBBbiBlbnRyeSByZWdpc3RlcmVkIHdpdGggJiMzOTtEJiMzOTsgaXMgbm90IG1hdGNoYWJsZSB5ZXQsIHdoaWNoIGlzIHdoYXQKJiM0MzsgKiBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiB0aGVtOgomIzQzOyAqCiYjNDM7ICogICBlY2hvICYjMzk7OmVudHJ5OkI6Ojo6Jmx0O2hhbmRsZXItbmFtZSZndDs6RCYjMzk7ICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9yZWdpc3RlcgomIzQzOyAqICAgZWNobyAmIzM5OyYjNDM7Jmx0O25hbWUmZ3Q7ICZsdDtwYXRoJmd0OyYjMzk7ICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9lbnRyeQomIzQzOyAqICAgZWNobyAxICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9lbnRyeQogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRfbWlzYy5oJmd0OwpAQCAtMTYsNiAmIzQzOzI1LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9idGYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9idGZfaWRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKQEAgLTkxLDYgJiM0MzsxMDIsMjAgQEAgYm9vbCBicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCSAgICAgICBwcm9nLSZndDthdXgtJmd0O3N0X29wcyA9PSAmYW1wO2JwZl9iaW5mbXRfbWlzY19vcHM7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlcGxhY2UgdGhlIHN0YWdlZCBpbnRlcnByZXRlciBzZWxlY3Rpb246IG5hbWluZyBhIHBhdGggZHJvcHMgYSBib3VuZAomIzQzOyAqIGZpbGUsIHNlbGVjdGluZyBhIGJvdW5kIGludGVycHJldGVyIGNhcnJpZXMgaXRzIGZpbGUgYWxvbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYm1fYnBmX3N0YWdlX3NlbGVjdGlvbihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjaGFyICpwYXRoLAomIzQzOwkJCQkgICBzdHJ1Y3QgZmlsZSAqZikKJiM0Mzt7CiYjNDM7CWlmIChicHJtLSZndDticGZfaW50ZXJwX2ZpbGUpCiYjNDM7CQlmcHV0KGJwcm0tJmd0O2JwZl9pbnRlcnBfZmlsZSk7CiYjNDM7CWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnApOwomIzQzOwlicHJtLSZndDticGZfaW50ZXJwID0gcGF0aDsKJiM0MzsJYnBybS0mZ3Q7YnBmX2ludGVycF9maWxlID0gZjsKJiM0Mzt9CiYjNDM7CiBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAKIC8qKgpAQCAtMTAzLDcgJiM0MzsxMjgsOCBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7CiAgKiBiZWZvcmUgcmV0dXJuaW5nIHplcm87IHRoZSB2ZXJpZmllciByZWplY3RzIHRoZSBjYWxsIGZyb20gYW55IG90aGVyCiAgKiBwcm9ncmFtLCBpbmNsdWRpbmcgdGhlIGhhbmRsZXImIzM5O3Mgb3duIG1hdGNoIHByb2dyYW0uIFRoZSBwYXRoIGlzIG9wZW5lZAogICogd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlIGV4ZWMgYWZ0ZXIgdGhlIHByb2dyYW0KLSAqIHJldHVybnMuCiYjNDM7ICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhbgomIzQzOyAqIGludGVycHJldGVyIHRoZSBlbnRyeSBib3VuZCB3aXRoIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLgogICoKICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUKICAqLwpAQCAtMTI3LDggJiM0MzsxNTMsNTAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCWlmICghaW50ZXJwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnApOwotCWJwcm0tJmd0O2JwZl9pbnRlcnAgPSBpbnRlcnA7CiYjNDM7CWJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oYnBybSwgaW50ZXJwLCBOVUxMKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCAtIHJ1biB0aGlzIGV4ZWMgdW5kZXIgYW4gaW50ZXJwcmV0ZXIgdGhlIGVudHJ5IGJvdW5kCiYjNDM7ICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkCiYjNDM7ICogQG5hbWU6IG5hbWUgdGhlIGludGVycHJldGVyIHdhcyByZWdpc3RlcmVkIHVuZGVyCiYjNDM7ICogQG5hbWVfX3N6OiBzaXplIG9mIHRoZSBAbmFtZSBidWZmZXIsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMCiYjNDM7ICoKJiM0MzsgKiBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgbG9hZCBwcm9ncmFtIG9mIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBoYW5kbGVyCiYjNDM7ICogaW5zdGVhZCBvZiBicGZfYmlucHJtX3NldF9pbnRlcnAoKS4gSXQgc2VsZWN0cyBvbmUgb2YgdGhlIGludGVycHJldGVycwomIzQzOyAqIHRoZSBtYXRjaGVkIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGgsIGVhY2ggb2Ygd2hpY2ggd2FzIG9wZW5lZCBvbmNlIHdoZW4KJiM0MzsgKiB0aGUgZW50cnkgd2FzIHJlZ2lzdGVyZWQuIE5vdGhpbmcgaXMgcmVzb2x2ZWQgYXQgZXhlYyB0aW1lLCBzbyBubwomIzQzOyAqIGZpbGVzeXN0ZW0gdmlldyBjYW4gcmVkaXJlY3QgdGhlIGludGVycHJldGVyLgomIzQzOyAqCiYjNDM7ICogVGhlIGludGVycHJldGVyIHJ1bnMgdW5kZXIgdGhlIHBhdGggdGhlIGVudHJ5IHJlZ2lzdGVyZWQgaXQgdW5kZXIuCiYjNDM7ICogQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9FTlQgaWYgdGhlIG1hdGNoZWQgZW50cnkgYm91bmQgbm8gaW50ZXJwcmV0ZXIKJiM0MzsgKiBvZiB0aGF0IG5hbWUsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJCSBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7CiYjNDM7CXNpemVfdCBsZW47CiYjNDM7CWNoYXIgKnBhdGg7CiYjNDM7CiYjNDM7CWlmICghbmFtZV9fc3opCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJbGVuID0gc3RybmxlbihuYW1lLCBuYW1lX19zeik7CiYjNDM7CWlmIChsZW4gPT0gbmFtZV9fc3ogfHwgIWxlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpbnRlcnAgPSBiaW5mbXRfbWlzY19maW5kX2ludGVycChicHJtLSZndDticGZfaW50ZXJwcywgbmFtZSk7CiYjNDM7CWlmICghaW50ZXJwKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CXBhdGggPSBrc3RyZHVwKGludGVycC0mZ3Q7cGF0aCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGF0aCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlibV9icGZfc3RhZ2Vfc2VsZWN0aW9uKGJwcm0sIHBhdGgsIGdldF9maWxlKGludGVycC0mZ3Q7ZmlsZSkpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTEsNiAmIzQzOzI3OSw3IEBAIF9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiAKIEJURl9LRlVOQ1NfU1RBUlQoYm1fYnBmX2tmdW5jX2lkcykKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9pbnRlcnAsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwLCBLRl9TTEVFUEFCTEUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZywgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ZsYWdzLCBLRl9TTEVFUEFCTEUpCiBCVEZfS0ZVTkNTX0VORChibV9icGZfa2Z1bmNfaWRzKQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDg1NjczMWY3OGQwNTQuLmExNGYyOGIxNTYwN2EgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTE0NzcsNiAmIzQzOzE0NzcsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAlpZiAoYnBybS0mZ3Q7aW50ZXJwICE9IGJwcm0tJmd0O2ZpbGVuYW1lKQogCQlrZnJlZShicHJtLSZndDtpbnRlcnApOwogCWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnApOwomIzQzOwlpZiAoYnBybS0mZ3Q7YnBmX2ludGVycF9maWxlKQomIzQzOwkJZnB1dChicHJtLSZndDticGZfaW50ZXJwX2ZpbGUpOwogCWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnBfYXJnKTsKIAlrZnJlZShicHJtLSZndDtmZHBhdGgpOwogCWtmcmVlKGJwcm0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oCmluZGV4IDRhYmRmZDM2YjNmYTguLjA3MmU0YjNkZDc4ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgKQEAgLTUsMTEgJiM0Mzs1LDQxIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogc3RydWN0IGJwZl9wcm9nOwomIzQzO3N0cnVjdCBmaWxlOwogc3RydWN0IGxpbnV4X2JpbnBybTsKIHN0cnVjdCB1c2VyX25hbWVzcGFjZTsKIAogI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTYKIAomIzQzOy8qIExvbmdlc3QgbmFtZSBhICYjMzk7QiYjMzk7IGVudHJ5IGNhbiBiaW5kIGFuIGludGVycHJldGVyIHVuZGVyLiAqLwomIzQzOyNkZWZpbmUgQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYIDMyCiYjNDM7CiYjNDM7LyogTW9zdCBpbnRlcnByZXRlcnMgb25lIGVudHJ5IGNhbiBiaW5kLiAqLwomIzQzOyNkZWZpbmUgQklORk1UX01JU0NfSU5URVJQX01BWCAxMDAKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIC0gYW4gaW50ZXJwcmV0ZXIgYW4gZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aAomIzQzOyAqIEBsaXN0OiBsaW5rIGluIHRoZSBlbnRyeSYjMzk7cyBsaXN0LCBpbiByZWdpc3RyYXRpb24gb3JkZXIKJiM0MzsgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluCiYjNDM7ICogQHBhdGg6IHRoZSBwYXRoIGl0IHdhcyByZWdpc3RlcmVkIHVuZGVyLCB1c2VkIGFzIHRoZSBuYW1lIHRoZSBpbnRlcnByZXRlcgomIzQzOyAqICAgICAgICBydW5zIHVuZGVyOyBzdG9yZWQgYWZ0ZXIgQG5hbWUgaW4gdGhlIHNhbWUgYWxsb2NhdGlvbgomIzQzOyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWQKJiM0MzsgKiAgICAgICAgaW50ZXJwcmV0ZXIgb2YgYSBzdGF0aWMgJiMzOTtGJiMzOTsgZW50cnkKJiM0MzsgKgomIzQzOyAqIE93bmVkIGJ5IHRoZSBlbnRyeSBhbmQgbGl2aW5nIGV4YWN0bHkgYXMgbG9uZyBhcyBpdCBkb2VzLiBUaGUgbGlzdCBoZWFkCiYjNDM7ICogaXMgaGFuZGVkIHRvIHRoZSBoYW5kbGVyJiMzOTtzIGxvYWQgcHJvZ3JhbSBmb3IgdGhlIGR1cmF0aW9uIG9mIG9uZSBleGVjLAomIzQzOyAqIHdoaWNoIHBpY2tzIG9uZSB3aXRoIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLgomIzQzOyAqLwomIzQzO3N0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiYjNDM7CXN0cnVjdCBmaWxlCQkqZmlsZTsKJiM0MzsJY29uc3QgY2hhcgkJKnBhdGg7CiYjNDM7CWNoYXIJCQluYW1lW107CiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICoKJiM0MztiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKTsKJiM0MzsKIC8qKgogICogZW51bSBicGZfYmlucHJtX2ZsYWdzIC0gcGVyLWV4ZWMgaW52b2NhdGlvbiBmbGFncyBhIGxvYWQgcHJvZ3JhbSBjYW4gcmVxdWVzdAogICogQEJQRl9CSU5QUk1fUFJFU0VSVkVfQVJHVjA6IGtlZXAgdGhlIGNhbGxlciYjMzk7cyBhcmd2WzBdIChsaWtlIHRoZSAmIzM5O1AmIzM5OyBmbGFnKQpAQCAtNDIsMTAgJiM0Mzs3MiwxMSBAQCBlbnVtIGJwZl9iaW5wcm1fZmxhZ3MgewogICogICAgICAgICBzbyBpdCBjYW4gcmVhZCB0aGUgYmluYXJ5IHRvIGRlY2lkZSwgYnV0IHRoZSB2ZXJpZmllciByZWplY3RzCiAgKiAgICAgICAgIHRoZSBpbnRlcnByZXRlciBzZWxlY3Rpb24ga2Z1bmNzIGluIGl0CiAgKiBAbG9hZDogIHNlbGVjdCBhbiBpbnRlcnByZXRlciBmb3IgdGhlIG1hdGNoZWQgQGJwcm0gdmlhCi0gKiAgICAgICAgIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpIGFuZCByZXR1cm4gemVybzsgYSBtYXRjaCBpcyBjb21taXR0ZWQsIHNvCi0gKiAgICAgICAgIGEgZmFpbHVyZSBmYWlscyB0aGUgZXhlYyBpbnN0ZWFkIG9mIGZhbGxpbmcgdGhyb3VnaCB0byBsYXRlcgotICogICAgICAgICBlbnRyaWVzOyAtRU5PRVhFQyBkb2VzIG5vdCBmYWlsIHRoZSBleGVjIGJ1dCBtb3ZlcyBvbiB0byB0aGUKLSAqICAgICAgICAgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzCiYjNDM7ICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSwgb3Igb25lIHRoZSBlbnRyeSBib3VuZCB2aWEKJiM0MzsgKiAgICAgICAgIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLCBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXMKJiM0MzsgKiAgICAgICAgIGNvbW1pdHRlZCwgc28gYSBmYWlsdXJlIGZhaWxzIHRoZSBleGVjIGluc3RlYWQgb2YgZmFsbGluZwomIzQzOyAqICAgICAgICAgdGhyb3VnaCB0byBsYXRlciBlbnRyaWVzOyAtRU5PRVhFQyBkb2VzIG5vdCBmYWlsIHRoZSBleGVjIGJ1dAomIzQzOyAqICAgICAgICAgbW92ZXMgb24gdG8gdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cwogICogQG5hbWU6IG5hbWUgdGhhdCAmIzM5O0ImIzM5OyBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgaGFuZGxlciBieQogICovCiBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKaW5kZXggYTJkYWVjYmIwMWQ2YS4uZjY4NmEzN2Y3YTBhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKQEAgLTE0LDcgJiM0MzsxNCwxMCBAQCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zOwogCiAvKiBJbnRlcnByZXRlciBzZWxlY3Rpb24gc3RhZ2VkIGJ5IGEgYnBmIGJpbmZtdF9taXNjIGhhbmRsZXIuICovCiBzdHJ1Y3QgYmluZm10X21pc2NfYnBmIHsKJiM0MzsJLyogaW50ZXJwcmV0ZXJzIHRoZSBtYXRjaGVkIGVudHJ5IGJvdW5kLCBzZWxlY3RhYmxlIGJ5IG5hbWUgKi8KJiM0MzsJY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYnBmX2ludGVycHM7CiAJY29uc3QgY2hhciAqYnBmX2ludGVycDsJCS8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi8KJiM0MzsJc3RydWN0IGZpbGUgKmJwZl9pbnRlcnBfZmlsZTsJLyogdGhlIGJvdW5kIGludGVycHJldGVyIGl0IHNlbGVjdGVkICovCiAJY29uc3QgY2hhciAqYnBmX2ludGVycF9hcmc7CS8qIGludGVycHJldGVyIGFyZ3VtZW50IGZyb20gYSBicGYgaGFuZGxlciAqLwogCXU2NCBicGZfZmxhZ3M7CQkJLyogZW51bSBicGZfYmlucHJtX2ZsYWdzIGZyb20gYSBicGYgaGFuZGxlciAqLwogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlCmluZGV4IDM5MGZlMTFhN2JlZGYuLjQxMGM5MzYwNmEwYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZQpAQCAtMjUsNiAmIzQzOzI1LDEwIEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSBjaGVjay1leGVjCiAjIG9yIGFuICYjMzk7RiYjMzk7IGVudHJ5IGNhbiBwaW4gdGhlIGluc3RhbmNlIHRoYXQgb3ducyBpdC4gVW5wcml2aWxlZ2VkLCBubyBicGYuCiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gYmluZm10X21pc2Nfc2VsZnBpbgogCiYjNDM7IyAmIzM5O0QmIzM5OyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzCiYjNDM7IyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gU3RhdGljIG1hZ2ljIGVudHJ5LCBubyBicGYgdG9vbGNoYWluLgomIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19kaXNhYmxlZAomIzQzOwogIyBTdGF0aWMgKCYjMzk7VCYjMzk7IGZsYWcpIHRyYW5zcGFyZW50IGJpbmZtdF9taXNjIHRlc3Q7IHRoZSBhc3NlcnRpbmcgaW50ZXJwcmV0ZXIKICMgaXMgc2hhcmVkIHdpdGggdGhlIGJwZiBoYXJuZXNzJiMzOTtzIHRyYW5zcGFyZW50IGNhc2UuIE5vIGJwZiB0b29sY2hhaW4gbmVlZGVkLgogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGJpbmZtdF9taXNjX3RyYW5zcGFyZW50CkBAIC01Miw4ICYjNDM7NTYsOCBAQCBIQVZFX0JQRl9UT09MQ0hBSU4gPz0gJChzaGVsbCBjb21tYW5kIC12ICQoQ0xBTkcpICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsmYW1wOyBcCiBpZmVxICgkKEhBVkVfQlBGX1RPT0xDSEFJTikseSkKIFRFU1RfR0VOX1BST0dTICYjNDM7PSBiaW5mbXRfbWlzY19icGYKIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBicGZfaW50ZXJwLmJwZi5vIG5peF9vcmlnaW4uYnBmLm8gdHJhbnNwYXJlbnQuYnBmLm8KLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBsb2FkZXIuYnBmLm8KLVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBiaW5mbXRfYnBmX2ludGVycCBiaW5mbXRfYnBmX2FwcAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBsb2FkZXIuYnBmLm8gaW50ZXJwX2JpbmQuYnBmLm8KJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gYmluZm10X2JwZl9pbnRlcnAgYmluZm10X2JwZl9hcHAgYmluZm10X2JpbmRfaW50ZXJwCiBlbHNlCiAkKGluZm8gZXhlYyBzZWxmdGVzdHM6IHNraXBwaW5nIGJpbmZtdF9taXNjX2JwZiwgbmVlZHMgY2xhbmcsIGJwZnRvb2wsIHZtbGludXggQlRGIGFuZCBsaWJicGYpCiBlbmRpZgpAQCAtMTIzLDYgJiM0MzsxMjcsOSBAQCAkKE9VVFBVVCkvYmluZm10X21pc2NfYnBmOiBiaW5mbXRfbWlzY19icGYuYyBiaW5mbXRfbWlzY19jb21tb24uaAogJChPVVRQVVQpL2JpbmZtdF9icGZfaW50ZXJwOiBiaW5mbXRfYnBmX2ludGVycC5jCiAJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJCZsdDsgLW8gJEAKIAomIzQzOyQoT1VUUFVUKS9iaW5mbXRfYmluZF9pbnRlcnA6IGJpbmZtdF9iaW5kX2ludGVycC5jCiYjNDM7CSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQmbHQ7IC1vICRACiYjNDM7CiAkKE9VVFBVVCkvYmluZm10X2xvYWRlcl9wYXlsb2FkOiBiaW5mbXRfbG9hZGVyX3BheWxvYWQuYyBiaW5mbXRfbWlzY19jb21tb24uaAogCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1mUElFIC1waWUgJCZsdDsgLW8gJEAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfYmluZF9pbnRlcnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X2JpbmRfaW50ZXJwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMDZkNjUwNjI4NTZiNwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X2JpbmRfaW50ZXJwLmMKQEAgLTAsMCAmIzQzOzEsMTQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVGVzdCBpbnRlcnByZXRlciBmb3IgdGhlIGJvdW5kLWludGVycHJldGVyIGNhc2Ugb2YgdGhlIGJpbmZtdF9taXNjX2JwZgomIzQzOyAqIHNlbGZ0ZXN0LiBUd28gY29waWVzIGFyZSBpbnN0YWxsZWQgYXQgZGlmZmVyZW50IHBhdGhzIGFuZCBib3VuZCB0byBvbmUKJiM0MzsgKiBlbnRyeSB1bmRlciBkaWZmZXJlbnQgbmFtZXM7IHByaW50aW5nIGFyZ3ZbMF0gLSB0aGUgcGF0aCB0aGUga2VybmVsIHJhbgomIzQzOyAqIHRoaXMgY29weSB1bmRlciAtIHRlbGxzIHRoZSBoYXJuZXNzIHdoaWNoIG9mIHRoZW0gdGhlIGxvYWQgcHJvZ3JhbSBwaWNrZWQuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO3sKJiM0MzsJcHJpbnRmKCYjMzQ7QklORF9SQU4gJXNcbiYjMzQ7LCBhcmdjICZndDsgMCA/IGFyZ3ZbMF0gOiAmIzM0OyYjMzQ7KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmMKaW5kZXggMDY5NzY4YTY2YmEwNy4uMmM3YjYzMDc1ZjFkOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jCkBAIC05LDcgJiM0Mzs5LDcgQEAKICAqCiAgKiAgICAgZWNobyAmIzM5OzpuYW1lOkI6Ojo6Jmx0O2hhbmRsZXImZ3Q7OiYjMzk7ICZndDsgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyCiAgKgotICogVGhyZWUgc2VsZi1jb250YWluZWQgY2FzZXMgYXJlIGV4ZXJjaXNlZDoKJiM0MzsgKiBGaXZlIHNlbGYtY29udGFpbmVkIGNhc2VzIGFyZSBleGVyY2lzZWQ6CiAgKgogICogICAxLiBicGZfaW50ZXJwOiB0aGUgbWF0Y2ggcHJvZ3JhbSBtYXRjaGVzIGEgc3ludGhldGljIGFhcmNoNjQgRUxGIGhlYWRlcgogICogICAgICBmcm9tIHRoZSBwcmVmZXRjaGVkIGJwcm0tJmd0O2J1ZiBhbmQgdGhlIGxvYWQgcHJvZ3JhbSByb3V0ZXMgaXQgdG8gYQpAQCAtMjYsNiAmIzQzOzI2LDExIEBACiAgKiAgICAgIChiaW5mbXRfbG9hZGVyX3BheWxvYWQpIHJ1bnMgYXMgdGhlIG1haW4gaW1hZ2Ugd2l0aCB0aGUgc2VsZWN0ZWQKICAqICAgICAgaW50ZXJwcmV0ZXIgc3Vic3RpdHV0ZWQgZm9yIGl0cyBQVF9JTlRFUlAgYW5kIGFzc2VydHMgdGhlIG5hdGl2ZQogICogICAgICBpZGVudGl0eSBmcm9tIGluc2lkZS4KJiM0MzsgKiAgIDUuIGludGVycF9iaW5kOiBhbiBlbnRyeSByZWdpc3RlcmVkIGRpc2FibGVkIHdpdGggJiMzOTtEJiMzOTsgaXMgZ2l2ZW4gaXRzCiYjNDM7ICogICAgICBpbnRlcnByZXRlcnMgb25lIHdyaXRlIGF0IGEgdGltZSwgYW5kIHRoZSBsb2FkIHByb2dyYW0gcGlja3Mgb25lIGJ5CiYjNDM7ICogICAgICBuYW1lIHBlciBleGVjLiBSZXBsYWNpbmcgd2hhdCB0aGUgcGF0aCBob2xkcyBhZnRlcndhcmRzIGNoYW5nZXMKJiM0MzsgKiAgICAgIG5vdGhpbmcsIHdoaWNoIGlzIHRoZSBwb2ludCBvZiBiaW5kaW5nIGEgZmlsZSByYXRoZXIgdGhhbiByZXNvbHZpbmcKJiM0MzsgKiAgICAgIGEgbmFtZSBhdCBleGVjIHRpbWUuIEVuYWJsaW5nIHRoZSBlbnRyeSBzZWFscyBpdC4KICAqCiAgKiBUaGUgZmlyc3QgdHdvIHJvdXRlIHRvIGEgdGVzdCBpbnRlcnByZXRlciB0aGF0IHByaW50cyBCUEZfSU5URVJQX1JBTiwKICAqIHByb3ZpbmcgdGhlIHByb2dyYW0mIzM5O3MgY2hvc2VuIGludGVycHJldGVyIGFjdHVhbGx5IHJhbi4KQEAgLTU0LDYgJiM0Mzs1OSwxMiBAQAogI2RlZmluZSBUUkFOU19FWFBFQ1QJJiMzNDtUUkFOU1BBUkVOVF9PSyYjMzQ7CiAjZGVmaW5lIExPQURFUl9JTlRFUlAJJiMzNDsvdG1wL2JpbmZtdF9sb2FkZXJfaW50ZXJwJiMzNDsKICNkZWZpbmUgTE9BREVSX1BBVEgJJiMzNDsvdG1wL2JpbmZtdF9icGZfbG9hZGVyLmxkcnRlc3QmIzM0OwomIzQzOyNkZWZpbmUgQklORF9GSVJTVAkmIzM0Oy90bXAvYmluZm10X2JpbmRfZmlyc3QmIzM0OwomIzQzOyNkZWZpbmUgQklORF9TRUNPTkQJJiMzNDsvdG1wL2JpbmZtdF9iaW5kX3NlY29uZCYjMzQ7CiYjNDM7I2RlZmluZSBCSU5EX0FSTV9QQVRICSYjMzQ7L3RtcC9iaW5mbXRfYmluZF9hcm0mIzM0OwomIzQzOyNkZWZpbmUgQklORF9SSVNDVl9QQVRICSYjMzQ7L3RtcC9iaW5mbXRfYmluZF9yaXNjdiYjMzQ7CiYjNDM7I2RlZmluZSBCSU5EX0VYUEVDVAkmIzM0O0JJTkRfUkFOICYjMzQ7CiYjNDM7I2RlZmluZSBCSU5EX01BWAkxMDAKIAogLyogQSBtaW5pbWFsIDY0LWJpdCBsaXR0bGUtZW5kaWFuIEVMRiBoZWFkZXIsIHBhZGRlZCB0byB0aGUgcmVhZCBzaXplLiAqLwogc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSkKQEAgLTgyLDExICYjNDM7OTMsMTcgQEAgc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByZWdpc3Rlcl9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpoYW5kbGVyKQomIzQzOy8qCiYjNDM7ICogUmVnaXN0ZXIgYSAmIzM5O0ImIzM5OyBlbnRyeSBmb3IgQGhhbmRsZXIuIFdpdGggQGZsYWdzICYjMzQ7RCYjMzQ7IHRoZSBlbnRyeSBpcyBjcmVhdGVkCiYjNDM7ICogZGlzYWJsZWQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcmVnaXN0ZXJfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaGFuZGxlciwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKmZsYWdzKQogewogCWNoYXIgcnVsZVtQQVRIX01BWF07CiAKLQlzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksICYjMzQ7OiVzOkI6Ojo6JXM6JiMzNDssIG5hbWUsIGhhbmRsZXIpOwomIzQzOwlzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksICYjMzQ7OiVzOkI6Ojo6JXM6JXMmIzM0OywgbmFtZSwgaGFuZGxlciwKJiM0MzsJCSBmbGFncyA/IGZsYWdzIDogJiMzNDsmIzM0Oyk7CiAJcmV0dXJuIHdyaXRlX3JlZyhydWxlKTsKIH0KIApAQCAtMTA2LDYgJiM0MzsxMjMsMzAgQEAgc3RhdGljIGludCBjaGVja19vdXRwdXQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpleHBlY3RlZCkKIAlyZXR1cm4gc3RybmNtcChidWYsIGV4cGVjdGVkLCBzdHJsZW4oZXhwZWN0ZWQpKSA/IC0xIDogMDsKIH0KIAomIzQzOy8qIERvZXMgdGhlIGtlcm5lbCBCVEYga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKT8gKi8KJiM0MztzdGF0aWMgYm9vbCBoYXZlX2JpbmZtdF9taXNjX29wcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7CiYjNDM7CWJvb2wgaGF2ZTsKJiM0MzsKJiM0MzsJaGF2ZSA9IGJ0ZiAmYW1wOyZhbXA7IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCAmIzM0O2JpbmZtdF9taXNjX29wcyYjMzQ7LAomIzQzOwkJCQkJICAgICBCVEZfS0lORF9TVFJVQ1QpICZndDs9IDA7CiYjNDM7CWJ0Zl9fZnJlZShidGYpOwomIzQzOwlyZXR1cm4gaGF2ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIHJlYXNvbiBicGYgaGFuZGxlciBjYXNlcyBjYW5ub3QgcnVuIGhlcmUsIE5VTEwgaWYgdGhleSBjYW4uICovCiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9oYW5kbGVyX3Vuc3VwcG9ydGVkKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZ2V0dWlkKCkgIT0gMCkKJiM0MzsJCXJldHVybiAmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdCYjMzQ7OwomIzQzOwlpZiAoIWhhdmVfYmluZm10X21pc2Nfb3BzKCkpCiYjNDM7CQlyZXR1cm4gJiMzNDtubyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGluIHRoZSBrZXJuZWwgQlRGIChDT05GSUdfQklORk1UX01JU0NfQlBGKSYjMzQ7OwomIzQzOwlpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKQomIzQzOwkJcmV0dXJuICYjMzQ7bm8gYmluZm10X21pc2MmIzM0OzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogLyogQW4gYXR0YWNoZWQgaGFuZGxlciB3aXRoIGl0cyAmIzM5O0ImIzM5OyBlbnRyeSBhY3RpdmF0ZWQuICovCiBzdHJ1Y3QgYnBmX2Nhc2UgewogCXN0cnVjdCBicGZfb2JqZWN0ICpvYmo7CkBAIC0xMTUsMTAgJiM0MzsxNTYsMTIgQEAgc3RydWN0IGJwZl9jYXNlIHsKIAogLyoKICAqIExvYWQgQG9iamZpbGUsIGF0dGFjaCBpdHMgc3RydWN0X29wcyBtYXAgQGhhbmRsZXIgKHdoaWNoIHB1Ymxpc2hlcyB0aGUKLSAqIGhhbmRsZXIpIGFuZCBhY3RpdmF0ZSBhICYjMzk7QiYjMzk7IGVudHJ5IG5hbWVkIEBlbnRyeSB0aGF0IHJlZmVyZW5jZXMgaXQuCiYjNDM7ICogaGFuZGxlcikgYW5kIHJlZ2lzdGVyIGEgJiMzOTtCJiMzOTsgZW50cnkgbmFtZWQgQGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCwgd2l0aAomIzQzOyAqIEBmbGFncyBhcyB0aGUgZW50cnkmIzM5O3MgcmVnaXN0ZXItc3RyaW5nIGZsYWdzLgogICovCi1zdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSwKLQkJCSAgY29uc3QgY2hhciAqaGFuZGxlciwgY29uc3QgY2hhciAqZW50cnkpCiYjNDM7c3RhdGljIGludCBicGZfY2FzZV9zdGFydF9mbGFncyhzdHJ1Y3QgYnBmX2Nhc2UgKmMsIGNvbnN0IGNoYXIgKm9iamZpbGUsCiYjNDM7CQkJCWNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5LAomIzQzOwkJCQljb25zdCBjaGFyICpmbGFncykKIHsKIAlzdHJ1Y3QgYnBmX21hcCAqbWFwOwogCkBAIC0xNDgsNyAmIzQzOzE5MSw3IEBAIHN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLAogCQljLSZndDtsaW5rID0gTlVMTDsKIAkJZ290byBmYWlsOwogCX0KLQlpZiAocmVnaXN0ZXJfZW50cnkoZW50cnksIGhhbmRsZXIpKSB7CiYjNDM7CWlmIChyZWdpc3Rlcl9lbnRyeShlbnRyeSwgaGFuZGxlciwgZmxhZ3MpKSB7CiAJCWZwcmludGYoc3RkZXJyLCAmIzM0O3JlZ2lzdGVyICYjMzk7QiYjMzk7IGVudHJ5ICYjMzk7JXMmIzM5OyBmYWlsZWRcbiYjMzQ7LCBlbnRyeSk7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0xNjIsNiAmIzQzOzIwNSwxMiBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSwKIAlyZXR1cm4gLTE7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSwKJiM0MzsJCQkgIGNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5KQomIzQzO3sKJiM0MzsJcmV0dXJuIGJwZl9jYXNlX3N0YXJ0X2ZsYWdzKGMsIG9iamZpbGUsIGhhbmRsZXIsIGVudHJ5LCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBicGZfY2FzZV9zdG9wKHN0cnVjdCBicGZfY2FzZSAqYykKIHsKIAl1bnJlZ2lzdGVyKGMtJmd0O2VudHJ5KTsKQEAgLTE5MCwyMyAmIzQzOzIzOSwxMCBAQCBGSVhUVVJFKGJwZl9oYW5kbGVyKSB7CiBGSVhUVVJFX1NFVFVQKGJwZl9oYW5kbGVyKQogewogCWNoYXIgc3JjW1BBVEhfTUFYXTsKLQlzdHJ1Y3QgYnRmICpidGY7Ci0KLQlpZiAoZ2V0dWlkKCkgIT0gMCkKLQkJU0tJUChyZXR1cm4sICYjMzQ7dGVzdCBtdXN0IGJlIHJ1biBhcyByb290JiMzNDspOwotCi0JLyogVGhlIGtlcm5lbCBtdXN0IGtub3cgc3RydWN0IGJpbmZtdF9taXNjX29wcyAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikuICovCi0JYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7Ci0JaWYgKCFidGYgfHwgYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsICYjMzQ7YmluZm10X21pc2Nfb3BzJiMzNDssCi0JCQkJCSAgIEJURl9LSU5EX1NUUlVDVCkgJmx0OyAwKSB7Ci0JCWJ0Zl9fZnJlZShidGYpOwotCQlTS0lQKHJldHVybiwKLQkJICAgICAmIzM0O25vIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgaW4gdGhlIGtlcm5lbCBCVEYgKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpJiMzNDspOwotCX0KLQlidGZfX2ZyZWUoYnRmKTsKJiM0MzsJY29uc3QgY2hhciAqd2h5ID0gYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQoKTsKIAotCWlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpCi0JCVNLSVAocmV0dXJuLCAmIzM0O25vIGJpbmZtdF9taXNjJiMzNDspOwomIzQzOwlpZiAod2h5KQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7JXMmIzM0Oywgd2h5KTsKIAogCS8qIFNoYXJlZCB0ZXN0IGludGVycHJldGVyLiAqLwogCUFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksICYjMzQ7YmluZm10X2JwZl9pbnRlcnAmIzM0OyksIDApOwpAQCAtMjU4LDcgJiM0MzsyOTQsNyBAQCBURVNUX0YoYnBmX2hhbmRsZXIsIHRyYW5zcGFyZW50X2Rpc3BhdGNoKQogCWNoYXIgc3JjW1BBVEhfTUFYXSwgY21kW1BBVEhfTUFYICYjNDM7IDE2XTsKIAogCS8qIFByb2JlIGZvciB0cmFuc3BhcmVudC1tb2RlIHN1cHBvcnQgdmlhIGl0cyBzdGF0aWMgY291bnRlcnBhcnQuICovCi0JaWYgKGJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpCiYjNDM7CWlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCYjMzk7VCYjMzk7KSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIHdpdGhvdXQgdHJhbnNwYXJlbnQgbW9kZSYjMzQ7KTsKIAogCUFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksICYjMzQ7YmluZm10X3RyYW5zcGFyZW50X2ludGVycCYjMzQ7KSwgMCk7CkBAIC0zMDcsNCAmIzQzOzM0MywyMjYgQEAgVEVTVF9GKGJwZl9oYW5kbGVyLCBsb2FkZXJfc3Vic3RpdHV0aW9uKQogCXVubGluayhMT0FERVJfSU5URVJQKTsKIH0KIAomIzQzOy8qIFRoZSBlcnJubyBhbiBleGVjIG9mIEBwYXRoIGZhaWxzIHdpdGgsIDAgaWYgaXQgc3VjY2VlZGVkLiAqLwomIzQzO3N0YXRpYyBpbnQgZXhlY19lcnJubyhjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJaW50IHN0YXR1czsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwlwaWQgPSBmb3JrKCk7CiYjNDM7CWlmIChwaWQgPT0gMCkgewomIzQzOwkJZXhlY2wocGF0aCwgcGF0aCwgKGNoYXIgKilOVUxMKTsKJiM0MzsJCV9leGl0KGVycm5vKTsKJiM0MzsJfQomIzQzOwlpZiAocGlkICZsdDsgMCB8fCB3YWl0cGlkKHBpZCwgJmFtcDtzdGF0dXMsIDApICE9IHBpZCB8fCAhV0lGRVhJVEVEKHN0YXR1cykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiBXRVhJVFNUQVRVUyhzdGF0dXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBJbnN0YWxsIGEgY29weSBvZiB0aGUgYm91bmQtaW50ZXJwcmV0ZXIgdGVzdCBiaW5hcnkgYXQgQHBhdGguICovCiYjNDM7c3RhdGljIGludCBpbnN0YWxsX2ludGVycChjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJY2hhciBzcmNbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlpZiAoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCAmIzM0O2JpbmZtdF9iaW5kX2ludGVycCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIGNvcHlfZmlsZShzcmMsIHBhdGgpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBCaW5kIEBwYXRoIHRvIEBlbnRyeSB1bmRlciBAbmFtZSwgdGhlICYjMzk7JiM0MzsmIzM5OyBjb21tYW5kIG9mIGEgZGlzYWJsZWQgZW50cnkuICovCiYjNDM7c3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKQomIzQzO3sKJiM0MzsJY2hhciBjbWRbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCAmIzM0OyYjNDM7JXMgJXNcbiYjMzQ7LCBuYW1lLCBwYXRoKTsKJiM0MzsJcmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIGNtZCk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoYm91bmRfaW50ZXJwKSB7CiYjNDM7CWNoYXIgb2JqW1BBVEhfTUFYXTsKJiM0MzsJc3RydWN0IGJwZl9jYXNlIGM7CiYjNDM7CWJvb2wgc3RhcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoYm91bmRfaW50ZXJwKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqd2h5ID0gYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQoKTsKJiM0MzsKJiM0MzsJaWYgKHdoeSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0OyVzJiMzNDssIHdoeSk7CiYjNDM7CWlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCYjMzk7RCYjMzk7KSkgewomIzQzOwkJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlICYjMzk7RCYjMzk7IGZsYWcmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfRklSU1QpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfU0VDT05EKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNlbGYtJmd0O29iaiwgc2l6ZW9mKHNlbGYtJmd0O29iaiksCiYjNDM7CQkJCSYjMzQ7aW50ZXJwX2JpbmQuYnBmLm8mIzM0OyksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWdpc3RlcmVkIGRpc2FibGVkLCBzbyBpdCBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQgYW5kIGNhbiBzdGlsbCBiZQomIzQzOwkgKiBnaXZlbiBpbnRlcnByZXRlcnMuIEVhY2ggcGF0aCBpcyByZXNvbHZlZCBvbmNlLCBieSBpdHMgd3JpdGUoMik7CiYjNDM7CSAqIGZyb20gaGVyZSBvbiB0aGUgZW50cnkgaG9sZHMgdGhlIGZpbGVzIHRoZW1zZWx2ZXMuCiYjNDM7CSAqLwomIzQzOwlBU1NFUlRfRVEoYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoJmFtcDtzZWxmLSZndDtjLCBzZWxmLSZndDtvYmosICYjMzQ7aW50ZXJwX2JpbmQmIzM0OywKJiM0MzsJCQkJICAgICAgICYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LCAmIzM0O0QmIzM0OyksIDApOwomIzQzOwlzZWxmLSZndDtzdGFydGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGVudHJ5X2JpbmQoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssICYjMzQ7Zmlyc3QmIzM0OywgQklORF9GSVJTVCksIDApOwomIzQzOwlBU1NFUlRfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDtzZWNvbmQmIzM0OywgQklORF9TRUNPTkQpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihib3VuZF9pbnRlcnApCiYjNDM7ewomIzQzOwlpZiAoc2VsZi0mZ3Q7c3RhcnRlZCkKJiM0MzsJCWJwZl9jYXNlX3N0b3AoJmFtcDtzZWxmLSZndDtjKTsKJiM0MzsJdW5saW5rKEJJTkRfRklSU1QpOwomIzQzOwl1bmxpbmsoQklORF9TRUNPTkQpOwomIzQzOwl1bmxpbmsoQUFSQ0g2NF9QQVRIKTsKJiM0MzsJdW5saW5rKEJJTkRfUklTQ1ZfUEFUSCk7CiYjNDM7CXVubGluayhCSU5EX0FSTV9QQVRIKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRW5hYmxpbmcgaXMgd2hhdCBtYWtlcyB0aGUgY29uZmlndXJlZCBlbnRyeSBtYXRjaGFibGUuICovCiYjNDM7c3RhdGljIGludCBhY3RpdmF0ZShjb25zdCBjaGFyICplbnRyeSkKJiM0Mzt7CiYjNDM7CXJldHVybiBlbnRyeV9jb21tYW5kKGVudHJ5LCAmIzM0OzFcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogT25lIGVudHJ5LCBvbmUgaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSwgcGlja2VkIHBlciBleGVjLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIHNlbGVjdHNfYnlfbmFtZSkKJiM0Mzt7CiYjNDM7CUFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQUFSQ0g2NF9QQVRILCBFTV9BQVJDSDY0KSwgMCk7CiYjNDM7CUFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQklORF9SSVNDVl9QQVRILCBFTV9SSVNDViksIDApOwomIzQzOwomIzQzOwkvKiBEaXNhYmxlZCwgc28gaXQgZG9lcyBub3QgbWF0Y2ggYW5kIG5vIGZvcm1hdCBjbGFpbXMgdGhlIGJpbmFyeS4gKi8KJiM0MzsJRVhQRUNUX0VRKGV4ZWNfZXJybm8oQUFSQ0g2NF9QQVRIKSwgRU5PRVhFQyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShhY3RpdmF0ZSgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OyksIDApOwomIzQzOwlFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEFBUkNINjRfUEFUSCwgQklORF9FWFBFQ1QgQklORF9GSVJTVCksIDApOwomIzQzOwlFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEJJTkRfUklTQ1ZfUEFUSCwgQklORF9FWFBFQ1QgQklORF9TRUNPTkQpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogV2hhdCB3YXMgYm91bmQgaXMgd2hhdCBydW5zLCB3aGF0ZXZlciB0aGUgcGF0aCBob2xkcyBhZnRlcndhcmRzLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIHBhdGhfbm9fbG9uZ2VyX2RlY2lkZXMpCiYjNDM7ewomIzQzOwljaGFyIG90aGVyW1BBVEhfTUFYXTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihBQVJDSDY0X1BBVEgsIEVNX0FBUkNINjQpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGFjdGl2YXRlKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7KSwgMCk7CiYjNDM7CiYjNDM7CS8qIEJvdW5kIGludGVycHJldGVycyBhcmUgcGlubmVkIGFnYWluc3Qgd3JpdGVzLCBleGFjdGx5IGxpa2UgJiMzOTtGJiMzOTsuICovCiYjNDM7CUVYUEVDVF9UUlVFKHdyaXRlX2RlbmllZChCSU5EX0ZJUlNUKSk7CiYjNDM7CiYjNDM7CS8qIFJlcGxhY2UgdGhlIHBhdGggd2l0aCBhIGRpZmZlcmVudCBiaW5hcnk6IGEgbmV3IGZpbGUsIG5ldyBpbm9kZS4gKi8KJiM0MzsJQVNTRVJUX0VRKGFydGlmYWN0X3BhdGgob3RoZXIsIHNpemVvZihvdGhlciksICYjMzQ7YmluZm10X2JwZl9pbnRlcnAmIzM0OyksIDApOwomIzQzOwlBU1NFUlRfRVEodW5saW5rKEJJTkRfRklSU1QpLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGNvcHlfZmlsZShvdGhlciwgQklORF9GSVJTVCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEFBUkNINjRfUEFUSCwgQklORF9FWFBFQ1QgQklORF9GSVJTVCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgZW50cnkgcmVwb3J0cyB3aGF0IGl0IGJvdW5kLCB1bmRlciB0aGUgbmFtZXMgaXQgYm91bmQgdGhlbSBhcy4gKi8KJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBlbnRyeV9yZXBvcnRzX2JpbmRpbmdzKQomIzQzO3sKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssCiYjNDM7CQkJCSYjMzQ7YnBmLWludGVycHJldGVyIGZpcnN0ICYjMzQ7IEJJTkRfRklSU1QpKTsKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssCiYjNDM7CQkJCSYjMzQ7YnBmLWludGVycHJldGVyIHNlY29uZCAmIzM0OyBCSU5EX1NFQ09ORCkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZWxlY3RpbmcgYSBuYW1lIHRoZSBlbnRyeSBkaWQgbm90IGJpbmQgZmFpbHMgdGhlIGV4ZWMuICovCiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgdW5ib3VuZF9uYW1lX2ZhaWxzKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihCSU5EX0FSTV9QQVRILCBFTV9BUk0pLCAwKTsKJiM0MzsJQVNTRVJUX0VRKGFjdGl2YXRlKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7KSwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShleGVjX2Vycm5vKEJJTkRfQVJNX1BBVEgpLCBFTk9FTlQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBY3RpdmF0aW5nIHNlYWxzIGl0OiB3aGF0IGNhbiBiZSBtYXRjaGVkIGNhbm5vdCBiZSBjaGFuZ2VkLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIHNlYWxlZF9vbmNlX2FjdGl2ZSkKJiM0Mzt7CiYjNDM7CUFTU0VSVF9FUShhY3RpdmF0ZSgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OyksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDt0aGlyZCYjMzQ7LCBCSU5EX1NFQ09ORCksIC1FQlVTWSk7CiYjNDM7CUVYUEVDVF9GQUxTRShlbnRyeV9zaG93cygmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywKJiM0MzsJCQkJICYjMzQ7YnBmLWludGVycHJldGVyIHRoaXJkICYjMzQ7IEJJTkRfU0VDT05EKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBzZWFsIGlzIGZvciBnb29kOiBkaXNhYmxpbmcgdGhlIGVudHJ5IGFnYWluIHJlb3BlbnMgbm90aGluZy4gKi8KJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCBkaXNhYmxlX2RvZXNfbm90X3Vuc2VhbCkKJiM0Mzt7CiYjNDM7CUFTU0VSVF9FUShhY3RpdmF0ZSgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OyksIDApOwomIzQzOwlBU1NFUlRfRVEoZW50cnlfY29tbWFuZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDswXG4mIzM0OyksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDt0aGlyZCYjMzQ7LCBCSU5EX1NFQ09ORCksIC1FQlVTWSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aG91dCAmIzM5O0QmIzM5OyBpcyBzZWFsZWQgZnJvbSB0aGUgc3RhcnQuICovCiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgYm9ybl9zZWFsZWQpCiYjNDM7ewomIzQzOwkvKiBBIHNlY29uZCBlbnRyeSBmb3IgdGhlIGhhbmRsZXIgdGhlIGZpeHR1cmUgYWxyZWFkeSBwdWJsaXNoZWQuICovCiYjNDM7CUFTU0VSVF9FUShyZWdpc3Rlcl9lbnRyeSgmIzM0O3Rlc3RfYm9ybl9zZWFsZWQmIzM0OywgJiMzNDtpbnRlcnBfYmluZCYjMzQ7LCBOVUxMKSwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShlbnRyeV9iaW5kKCYjMzQ7dGVzdF9ib3JuX3NlYWxlZCYjMzQ7LCAmIzM0O2ZpcnN0JiMzNDssIEJJTkRfRklSU1QpLCAtRUJVU1kpOwomIzQzOwl1bnJlZ2lzdGVyKCYjMzQ7dGVzdF9ib3JuX3NlYWxlZCYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBuYW1lIGlzIGJvdW5kIG9uY2U7IGEgc2Vjb25kIHVzZSBvZiBpdCBpcyByZWZ1c2VkLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIGR1cGxpY2F0ZV9uYW1lX3JlZnVzZWQpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDtmaXJzdCYjMzQ7LCBCSU5EX1NFQ09ORCksIC1FRVhJU1QpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIG5hbWUgaXMgYSBwcmludGFibGUgd29yZDogdGhlIGVudHJ5IGZpbGUgcmVwb3J0cyAmIzM5O25hbWUgcGF0aCYjMzk7IGxpbmVzLiAqLwomIzQzO1RFU1RfRihib3VuZF9pbnRlcnAsIG5hbWVfbXVzdF9iZV9wcmludGFibGUpCiYjNDM7ewomIzQzOwkvKiBBIGNvbnRyb2wgY2hhcmFjdGVyIHdvdWxkIGZvcmdlIGEgbGluZSBpbnRvIHRoZSBlbnRyeSBmaWxlLiAqLwomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDthXHRiJiMzNDssIEJJTkRfRklSU1QpLCAtRUlOVkFMKTsKJiM0MzsJRVhQRUNUX0VRKGVudHJ5X2JpbmQoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssICYjMzQ7YVxuYiYjMzQ7LCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7CiYjNDM7CiYjNDM7CS8qIEEgc3BhY2UgY2Fubm90IGV2ZW4gYmUgc3BlbGxlZDogdGhlIHBhdGggc3RhcnRzIGFmdGVyIHRoZSBmaXJzdCBvbmUuICovCiYjNDM7CUVYUEVDVF9FUShlbnRyeV9iaW5kKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LCAmIzM0O2EgYiYjMzQ7LCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBjb21tYW5kIGVuZHMgYXQgdGhlIHdyaXRlOiBieXRlcyBwYXN0IGFuIGVtYmVkZGVkIG51bCBhcmUgcmVmdXNlZC4gKi8KJiM0MztURVNUX0YoYm91bmRfaW50ZXJwLCB0cmFpbGluZ19ieXRlc19yZWZ1c2VkKQomIzQzO3sKJiM0MzsJY2hhciBjbWRbUEFUSF9NQVhdOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CS8qIGVudHJ5X2NvbW1hbmQoKSBjYW5ub3Qgc3BlbGwgYSBudWwsIHNvIHdyaXRlIHRoZSBidWZmZXIgcmF3LiAqLwomIzQzOwlzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCAmIzM0OyYjNDM7bnVsICVzJiMzNDssIEJJTkRfRklSU1QpOwomIzQzOwlsZW4gPSBzdHJsZW4oY21kKSAmIzQzOyAxOwomIzQzOwltZW1jcHkoY21kICYjNDM7IGxlbiwgJiMzNDtqdW5rJiMzNDssIHNpemVvZigmIzM0O2p1bmsmIzM0OykpOwomIzQzOwlsZW4gJiM0Mzs9IHNpemVvZigmIzM0O2p1bmsmIzM0Oyk7CiYjNDM7CiYjNDM7CWZkID0gb3BlbihCSU5GTVRfRElSICYjMzQ7L3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgT19XUk9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwlBU1NFUlRfR0UoZmQsIDApOwomIzQzOwlFWFBFQ1RfRVEod3JpdGUoZmQsIGNtZCwgbGVuKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKCYjMzQ7dGVzdF9pbnRlcnBfYmluZCYjMzQ7LAomIzQzOwkJCQkgJiMzNDticGYtaW50ZXJwcmV0ZXIgbnVsICYjMzQ7IEJJTkRfRklSU1QpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQW4gZW50cnkgYmluZHMgYXQgbW9zdCBCSU5EX01BWCBpbnRlcnByZXRlcnMuICovCiYjNDM7VEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKQomIzQzO3sKJiM0MzsJY2hhciBuYW1lWzE2XTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CS8qIFRoZSBmaXh0dXJlIGJvdW5kICYjMzQ7Zmlyc3QmIzM0OyBhbmQgJiMzNDtzZWNvbmQmIzM0OyBhbHJlYWR5LiAqLwomIzQzOwlmb3IgKGkgPSAyOyBpICZsdDsgQklORF9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICYjMzQ7biVkJiMzNDssIGkpOwomIzQzOwkJQVNTRVJUX0VRKGVudHJ5X2JpbmQoJiMzNDt0ZXN0X2ludGVycF9iaW5kJiMzNDssIG5hbWUsIEJJTkRfRklSU1QpLCAwKTsKJiM0MzsJfQomIzQzOwlFWFBFQ1RfRVEoZW50cnlfYmluZCgmIzM0O3Rlc3RfaW50ZXJwX2JpbmQmIzM0OywgJiMzNDtvdmVyJiMzNDssIEJJTkRfRklSU1QpLCAtRU5PU1BDKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfY29tbW9uLmgKaW5kZXggYzY5MDBkZWQwMTlmYy4uNzQ1YWZmODRkYzc4NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oCkBAIC05Myw2ICYjNDM7OTMsNDUgQEAgc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSkKIAl9CiB9CiAKJiM0MzsvKiBXcml0ZSBAbGluZSB0byBAZW50cnkmIzM5O3MgZmlsZSwgcmVwb3J0aW5nIHRoZSBlcnJubyBpdCB3YXMgcmVmdXNlZCB3aXRoLiAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGVudHJ5X2NvbW1hbmQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKmxpbmUpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwlpbnQgZmQsIHJldHZhbCA9IDA7CiYjNDM7CXNpemVfdCBsZW4gPSBzdHJsZW4obGluZSk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgQklORk1UX0RJUiAmIzM0Oy8lcyYjMzQ7LCBlbnRyeSk7CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmIChmZCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwlpZiAod3JpdGUoZmQsIGxpbmUsIGxlbikgIT0gKHNzaXplX3QpbGVuKQomIzQzOwkJcmV0dmFsID0gLWVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiByZXR2YWw7CiYjNDM7fQomIzQzOwomIzQzOy8qIERvZXMgQGVudHJ5JiMzOTtzIGZpbGUgcmVwb3J0IEBsaW5lPyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBlbnRyeV9zaG93cyhjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbGluZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZltQQVRIX01BWF07CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsJRklMRSAqZnA7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgQklORk1UX0RJUiAmIzM0Oy8lcyYjMzQ7LCBlbnRyeSk7CiYjNDM7CWZwID0gZm9wZW4ocGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWZwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7CiYjNDM7CQlidWZbc3RyY3NwbihidWYsICYjMzQ7XG4mIzM0OyldID0gJiMzOTtcMCYjMzk7OwomIzQzOwkJaWYgKCFzdHJjbXAoYnVmLCBsaW5lKSkgewomIzQzOwkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlmY2xvc2UoZnApOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwogLyogTW91bnQgYmluZm10X21pc2MgdW5sZXNzIGl0IGFscmVhZHkgaXMsIGFuZCByZXBvcnQgd2hldGhlciBpdCBpcyB1c2FibGUuICovCiBzdGF0aWMgaW5saW5lIGJvb2wgYmluZm10X21pc2NfYXZhaWxhYmxlKHZvaWQpCiB7CkBAIC0xMTcsMTYgJiM0MzsxNTYsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgYXJ0aWZhY3RfcGF0aChjaGFyICpvdXQsIHNpemVfdCBzeiwgY29uc3QgY2hhciAqbmFtZSkKIH0KIAogLyogUHJvYmUga2VybmVsIHN1cHBvcnQgZm9yIGEgcmVnaXN0cmF0aW9uIGZsYWcgd2l0aCBhIHRocm93YXdheSBlbnRyeS4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpCiYjNDM7c3RhdGljIGlubGluZSBib29sIGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpCiB7CiAJY2hhciBydWxlWzY0XTsKIAogCXNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgJiMzNDs6Ym1fZmxhZ19wcm9iZTpFOjpibXByb2JlOjovYmluL3RydWU6JWMmIzM0OywKIAkJIGZsYWcpOwogCWlmICh3cml0ZV9yZWcocnVsZSkpCi0JCXJldHVybiAtMTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl1bnJlZ2lzdGVyKCYjMzQ7Ym1fZmxhZ19wcm9iZSYjMzQ7KTsKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2Rpc2FibGVkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2Rpc2FibGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNDdjOWU4YTRlZTQyYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGlzYWJsZWQuYwpAQCAtMCwwICYjNDM7MSwxNzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGUgJiMzOTtEJiMzOTsgKHJlZ2lzdGVyIGRpc2FibGVkKSBmbGFnIG9mIGJpbmZtdF9taXNjLiBBbiBlbnRyeQomIzQzOyAqIHJlZ2lzdGVyZWQgd2l0aCBpdCBleGlzdHMgYnV0IGNhbm5vdCBiZSBtYXRjaGVkIHVudGlsIHVzZXJzcGFjZSBlbmFibGVzCiYjNDM7ICogaXQsIHdoaWNoIHNwbGl0cyBhIHJlZ2lzdHJhdGlvbiBpbnRvIGNyZWF0ZSBhbmQgYWN0aXZhdGUuCiYjNDM7ICoKJiM0MzsgKiBOZWVkcyByb290IGZvciB0aGUgcmVnaXN0cmF0aW9uOyBubyBicGYgdG9vbGNoYWluIGludm9sdmVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtiaW5mbXRfbWlzY19jb21tb24uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIE1BR0lDCQkmIzM0OyNESVNBQkxFRC1TRUxGVEVTVCMmIzM0OwomIzQzOyNkZWZpbmUgVEFSR0VUX1BBVEgJJiMzNDsvdG1wL2JpbmZtdF9kaXNhYmxlZF90YXJnZXQmIzM0OwomIzQzOyNkZWZpbmUgSU5URVJQX1BBVEgJJiMzNDsvdG1wL2JpbmZtdF9kaXNhYmxlZF9pbnRlcnAuc2gmIzM0OwomIzQzOyNkZWZpbmUgRU5UUlkJCSYjMzQ7dGVzdF9kaXNhYmxlZCYjMzQ7CiYjNDM7I2RlZmluZSBSVUxFKGZsYWdzKQkmIzM0OzomIzM0OyBFTlRSWSAmIzM0OzpNOjA6JiMzNDsgTUFHSUMgJiMzNDs6OiYjMzQ7IElOVEVSUF9QQVRIICYjMzQ7OiYjMzQ7IGZsYWdzCiYjNDM7CiYjNDM7LyogVGhlIGludGVycHJldGVyIGV4aXRzIHdpdGggYSBjb2RlIHRoZSBoYXJuZXNzIGNhbiByZWNvZ25pc2UuICovCiYjNDM7I2RlZmluZSBFWElUX0lOVEVSUAk3CiYjNDM7CiYjNDM7LyogVGhlIHRhcmdldCBvbmx5IGhhcyB0byBjYXJyeSB0aGUgbWFnaWM7IGl0IGlzIG5ldmVyIGFjdHVhbGx5IGxvYWRlZC4gKi8KJiM0MztzdGF0aWMgaW50IGNyZWF0ZV90YXJnZXQodm9pZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzEyOF0gPSBNQUdJQyAmIzM0O1xuJiMzNDs7CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJdW5saW5rKFRBUkdFVF9QQVRIKTsKJiM0MzsJZmQgPSBvcGVuKFRBUkdFVF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAod3JpdGUoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IChzc2l6ZV90KXNpemVvZihidWYpKSB7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfaW50ZXJwKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1Zls2NF07CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJdW5saW5rKElOVEVSUF9QQVRIKTsKJiM0MzsJZmQgPSBvcGVuKElOVEVSUF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyMhL2Jpbi9zaFxuZXhpdCAlZFxuJiMzNDssIEVYSVRfSU5URVJQKTsKJiM0MzsJaWYgKHdyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKSAhPSAoc3NpemVfdClzdHJsZW4oYnVmKSkgewomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CXJldHVybiBjbG9zZShmZCk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoZGlzYWJsZWQpIHsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfU0VUVVAoZGlzYWJsZWQpCiYjNDM7ewomIzQzOwlpZiAoZ2V0dWlkKCkgIT0gMCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O3Rlc3QgbXVzdCBiZSBydW4gYXMgcm9vdCYjMzQ7KTsKJiM0MzsJaWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIGJpbmZtdF9taXNjJiMzNDspOwomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSB3aG9sZSBzdWl0ZSBvbiBhIGtlcm5lbCB0aGF0IGRvZXMgbm90IGtub3cgJiMzOTtEJiMzOTsuICovCiYjNDM7CWlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCYjMzk7RCYjMzk7KSkgewomIzQzOwkJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7a2VybmVsIHdpdGhvdXQgdGhlICYjMzk7RCYjMzk7IGZsYWcmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGNyZWF0ZV9pbnRlcnAoKSwgMCk7CiYjNDM7CUFTU0VSVF9FUShjcmVhdGVfdGFyZ2V0KCksIDApOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFX1RFQVJET1dOKGRpc2FibGVkKQomIzQzO3sKJiM0MzsJdW5yZWdpc3RlcihFTlRSWSk7CiYjNDM7CXVubGluayhUQVJHRVRfUEFUSCk7CiYjNDM7CXVubGluayhJTlRFUlBfUEFUSCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBlbnRyeSBleGlzdHMgYnV0IGRvZXMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuICovCiYjNDM7VEVTVF9GKGRpc2FibGVkLCBpbmVydF91bnRpbF9lbmFibGVkKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKCYjMzQ7RCYjMzQ7KSksIDApOwomIzQzOwlFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgJiMzNDtkaXNhYmxlZCYjMzQ7KSk7CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgbWF0Y2hlcyBpdCwgc28gbm8gYmluYXJ5IGZvcm1hdCBjbGFpbXMgdGhlIHRhcmdldC4gKi8KJiM0MzsJRVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgUlVOX0VOT0VYRUMpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgJiMzNDsxXG4mIzM0OyksIDApOwomIzQzOwlFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgJiMzNDtlbmFibGVkJiMzNDspKTsKJiM0MzsJRVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgRVhJVF9JTlRFUlApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXaXRob3V0ICYjMzk7RCYjMzk7IGFuIGVudHJ5IGlzIG1hdGNoYWJsZSB0aGUgbW9tZW50IGl0IGlzIHJlZ2lzdGVyZWQuICovCiYjNDM7VEVTVF9GKGRpc2FibGVkLCBlbmFibGVkX3dpdGhvdXRfdGhlX2ZsYWcpCiYjNDM7ewomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDsmIzM0OykpLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksICYjMzQ7ZW5hYmxlZCYjMzQ7KSk7CiYjNDM7CUVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogJiMzOTtEJiMzOTsgaXMgc3BlbnQgb24gdGhlIHJlZ2lzdHJhdGlvbjogdGhlIGVudHJ5IGRvZXMgbm90IHJlcG9ydCBpdCBiYWNrLiAqLwomIzQzO1RFU1RfRihkaXNhYmxlZCwgZmxhZ19ub3RfcmVwb3J0ZWQpCiYjNDM7ewomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDtEJiMzNDspKSwgMCk7CiYjNDM7CUVYUEVDVF9GQUxTRShlbnRyeV9zaG93cyhFTlRSWSwgJiMzNDtmbGFnczogRCYjMzQ7KSk7CiYjNDM7CUVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCAmIzM0O2ZsYWdzOiAmIzM0OykpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIGRpc2FibGVkIGVudHJ5IGNhbiBiZSBkaXNhYmxlZCBhbmQgZW5hYmxlZCBsaWtlIGFueSBvdGhlci4gKi8KJiM0MztURVNUX0YoZGlzYWJsZWQsIHRvZ2dsZXNfbGlrZV9hbnlfZW50cnkpCiYjNDM7ewomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDtEJiMzNDspKSwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShlbnRyeV9jb21tYW5kKEVOVFJZLCAmIzM0OzFcbiYjMzQ7KSwgMCk7CiYjNDM7CUFTU0VSVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTsKJiM0MzsJQVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksICYjMzQ7MFxuJiMzNDspLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgUlVOX0VOT0VYRUMpOwomIzQzOwlBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgJiMzNDsxXG4mIzM0OyksIDApOwomIzQzOwlFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7CiYjNDM7fQomIzQzOwomIzQzOy8qICYjMzk7RCYjMzk7IGNvbXBvc2VzIHdpdGggdGhlIGludm9jYXRpb24gZmxhZ3MgYSBzdGF0aWMgZW50cnkgY2FuIGNhcnJ5LiAqLwomIzQzO1RFU1RfRihkaXNhYmxlZCwgY29tcG9zZXNfd2l0aF9pbnZvY2F0aW9uX2ZsYWdzKQomIzQzO3sKJiM0MzsJQVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKCYjMzQ7UEQmIzM0OykpLCAwKTsKJiM0MzsJRVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksICYjMzQ7ZGlzYWJsZWQmIzM0OykpOwomIzQzOwlFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgJiMzNDtmbGFnczogUCYjMzQ7KSk7CiYjNDM7fQomIzQzOwomIzQzOy8qICYjMzk7LTEmIzM5OyB0byB0aGUgc3RhdHVzIGZpbGUgc3dlZXBzIGEgc3RhZ2VkIGVudHJ5IHdpdGggZXZlcnl0aGluZyBlbHNlLiAqLwomIzQzO1RFU1RfRihkaXNhYmxlZCwgcmVtb3ZlZF9ieV9yZW1vdmVfYWxsKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDtEJiMzNDspKSwgMCk7CiYjNDM7CUVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCAmIzM0O2Rpc2FibGVkJiMzNDspKTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKEJJTkZNVF9ESVIgJiMzNDsvc3RhdHVzJiMzNDssIE9fV1JPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsJQVNTRVJUX0dFKGZkLCAwKTsKJiM0MzsJQVNTRVJUX0VRKHdyaXRlKGZkLCAmIzM0Oy0xJiMzNDssIDIpLCAyKTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwomIzQzOwlFWFBFQ1RfTkUoYWNjZXNzKEJJTkZNVF9ESVIgJiMzNDsvJiMzNDsgRU5UUlksIEZfT0spLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBmaWxlIGhhbmRsZSBoZWxkIGFjcm9zcyBhIHJlbW92YWwgY2Fubm90IHJlc3VycmVjdCB0aGUgZW50cnkuICovCiYjNDM7VEVTVF9GKGRpc2FibGVkLCBub19yZXN1cnJlY3Rpb25fYWZ0ZXJfcmVtb3ZlKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoJiMzNDtEJiMzNDspKSwgMCk7CiYjNDM7CWZkID0gb3BlbihCSU5GTVRfRElSICYjMzQ7LyYjMzQ7IEVOVFJZLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CUFTU0VSVF9HRShmZCwgMCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUSh3cml0ZShmZCwgJiMzNDstMSYjMzQ7LCAyKSwgMik7CiYjNDM7CUVYUEVDVF9ORShhY2Nlc3MoQklORk1UX0RJUiAmIzM0Oy8mIzM0OyBFTlRSWSwgRl9PSyksIDApOwomIzQzOwomIzQzOwkvKiBBY2NlcHRlZCBsaWtlIGFueSB0b2dnbGUgb2YgYSByZW1vdmVkIGVudHJ5LCBidXQgcHVibGlzaGVzIG5vdGhpbmcuICovCiYjNDM7CUVYUEVDVF9FUSh3cml0ZShmZCwgJiMzNDsxJiMzNDssIDEpLCAxKTsKJiM0MzsJRVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgUlVOX0VOT0VYRUMpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmMKaW5kZXggZDBjYjg0NWRmMWQzMC4uMmViZjczZGU4MDE4YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfdHJhbnNwYXJlbnQuYwpAQCAtNTYsNyAmIzQzOzU2LDcgQEAgRklYVFVSRV9TRVRVUCh0cmFuc3BhcmVudCkKIAlBU1NFUlRfRVEoY3JlYXRlX3RhcmdldCgpLCAwKTsKIAogCS8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAmIzM5O1QmIzM5Oy4gKi8KLQlpZiAoYmluZm10X2ZsYWdfc3VwcG9ydGVkKCYjMzk7VCYjMzk7KSkgewomIzQzOwlpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgmIzM5O1QmIzM5OykpIHsKIAkJQVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpOwogCQlTS0lQKHJldHVybiwgJiMzNDtrZXJuZWwgd2l0aG91dCB0aGUgJiMzOTtUJiMzOTsgZmxhZyYjMzQ7KTsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xY2U0NWNjYTIxNWYwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYwpAQCAtMCwwICYjNDM7MSw3NiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBiaW5mbXRfbWlzY19vcHMgaGFuZGxlciBmb3IgdGhlIHNlbGZ0ZXN0JiMzOTtzIGJvdW5kLWludGVycHJldGVyIGNhc2U6IG9uZQomIzQzOyAqIGhhbmRsZXIsIG9uZSBlbnRyeSwgYW4gaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSAtIGVhY2ggYm91bmQgdG8KJiM0MzsgKiBhIGZpbGUgd2hlbiB0aGUgZW50cnkgd2FzIHJlZ2lzdGVyZWQgcmF0aGVyIHRoYW4gdG8gYSBwYXRoIHJlc29sdmVkIGF0CiYjNDM7ICogZXhlYyB0aW1lLiBUaGUgbG9hZCBwcm9ncmFtIG5hbWVzIHRoZSBvbmUgaXQgd2FudHM7IGEgbmFtZSB0aGUgZW50cnkgZGlkCiYjNDM7ICogbm90IGJpbmQgZmFpbHMgdGhlIGV4ZWMsIHdoaWNoIHRoZSBoYXJuZXNzIGNoZWNrcyB0b28uCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzOyNkZWZpbmUgRUlfQ0xBU1MJNAomIzQzOyNkZWZpbmUgRUxGQ0xBU1M2NAkyCiYjNDM7I2RlZmluZSBFX01BQ0hJTkVfT0ZGCTE4CiYjNDM7I2RlZmluZSBFTV9BUk0JCTQwCiYjNDM7I2RlZmluZSBFTV9BQVJDSDY0CTE4MwomIzQzOyNkZWZpbmUgRU1fUklTQ1YJMjQzCiYjNDM7CiYjNDM7ZXh0ZXJuIGludCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeikgX19rc3ltOwomIzQzOwomIzQzOy8qIFRoZSBndWVzdCBhcmNoaXRlY3R1cmUgb2YgYSA2NC1iaXQgRUxGLCBvciB6ZXJvIGlmIGl0IGlzIG5vdCBvbmUuICovCiYjNDM7c3RhdGljIF9fdTE2IGVsZl9tYWNoaW5lKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiYjNDM7ewomIzQzOwlpZiAoYnBybS0mZ3Q7YnVmWzBdICE9IDB4N2YgfHwgYnBybS0mZ3Q7YnVmWzFdICE9ICYjMzk7RSYjMzk7IHx8CiYjNDM7CSAgICBicHJtLSZndDtidWZbMl0gIT0gJiMzOTtMJiMzOTsgfHwgYnBybS0mZ3Q7YnVmWzNdICE9ICYjMzk7RiYjMzk7IHx8CiYjNDM7CSAgICBicHJtLSZndDtidWZbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogTGl0dGxlLWVuZGlhbiAxNi1iaXQgZmllbGQsIHJlYWQgYnl0ZS13aXNlIGZvciB0aGUgdmVyaWZpZXIuICovCiYjNDM7CXJldHVybiAoX191OClicHJtLSZndDtidWZbRV9NQUNISU5FX09GRl0gfAomIzQzOwkgICAgICAgKChfX3UxNikoX191OClicHJtLSZndDtidWZbRV9NQUNISU5FX09GRiAmIzQzOyAxXSAmbHQ7Jmx0OyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy5zL21hdGNoJiMzNDspCiYjNDM7Ym9vbCBCUEZfUFJPRyhpbnRlcnBfYmluZF9tYXRjaCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CV9fdTE2IG1hY2hpbmUgPSBlbGZfbWFjaGluZShicHJtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hY2hpbmUgPT0gRU1fQUFSQ0g2NCB8fCBtYWNoaW5lID09IEVNX1JJU0NWIHx8CiYjNDM7CSAgICAgICBtYWNoaW5lID09IEVNX0FSTTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3RydWN0X29wcy5zL2xvYWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coaW50ZXJwX2JpbmRfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIE5hbWVzLCBub3QgcGF0aHM6IGVhY2ggb25lIHNlbGVjdHMgYSBmaWxlIHRoZSBlbnRyeSBwcmUtb3BlbmVkLCBzbwomIzQzOwkgKiBub3RoaW5nIGlzIHJlc29sdmVkIGhlcmUgb3IgbGF0ZXIsIGluIGFueSBuYW1lc3BhY2UuIFRoZSBidWZmZXJzCiYjNDM7CSAqIGFyZSBvbiB0aGUgc3RhY2sgYmVjYXVzZSB0aGUgdmVyaWZpZXIgcmVqZWN0cyAucm9kYXRhIGZvciBhIHNpemVkCiYjNDM7CSAqIG1lbW9yeSBhcmd1bWVudC4KJiM0MzsJICovCiYjNDM7CWNoYXIgZmlyc3RbXSA9ICYjMzQ7Zmlyc3QmIzM0OzsKJiM0MzsJY2hhciBzZWNvbmRbXSA9ICYjMzQ7c2Vjb25kJiMzNDs7CiYjNDM7CWNoYXIgdW5ib3VuZFtdID0gJiMzNDt1bmJvdW5kJiMzNDs7CiYjNDM7CiYjNDM7CXN3aXRjaCAoZWxmX21hY2hpbmUoYnBybSkpIHsKJiM0MzsJY2FzZSBFTV9BQVJDSDY0OgomIzQzOwkJcmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBmaXJzdCwgc2l6ZW9mKGZpcnN0KSk7CiYjNDM7CWNhc2UgRU1fUklTQ1Y6CiYjNDM7CQlyZXR1cm4gYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKGJwcm0sIHNlY29uZCwgc2l6ZW9mKHNlY29uZCkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBlbnRyeSBib3VuZCBub3RoaW5nIHVuZGVyIHRoaXMgbmFtZTogLUVOT0VOVCBmYWlscyB0aGUgZXhlYy4gKi8KJiM0MzsJcmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCB1bmJvdW5kLCBzaXplb2YodW5ib3VuZCkpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDspCiYjNDM7c3RydWN0IGJpbmZtdF9taXNjX29wcyBpbnRlcnBfYmluZCA9IHsKJiM0MzsJLm1hdGNoCT0gKHZvaWQgKilpbnRlcnBfYmluZF9tYXRjaCwKJiM0MzsJLmxvYWQJPSAodm9pZCAqKWludGVycF9iaW5kX2xvYWQsCiYjNDM7CS5uYW1lCT0gJiMzNDtpbnRlcnBfYmluZCYjMzQ7LAomIzQzO307CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTI0CgkJCQkJCQlvdXRwdXQ6IDExOQoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIEJpbmZtdF9taXNjIEludGVycHJldGVyIEJpbmRpbmcqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCB0aGF0IGludHJvZHVjZXMgaW50ZXJwcmV0ZXIgYmluZGluZyB0byBgYmluZm10X21pc2NgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgaW4gYGZzL2JpbmZtdF9taXNjLmNgLCBgZnMvYmluZm10X21pc2NfYnBmLmNgLCBhbmQgYGZzL2V4ZWMuY2AuIEl0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgd2UgbmVlZCB0byBmdXp6IGl0IHRob3JvdWdobHkuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhICYjMzQ7RCYjMzQ7IGZsYWcgZm9yIGRpc2FibGVkIGVudHJpZXMgd2hpY2ggY2FuIGhhdmUgYW4gaW50ZXJwcmV0ZXIgYm91bmQgbGF0ZXIgd2l0aCB0aGUgJiMzNDsmIzQzO25hbWUgcGF0aCYjMzQ7IGZlYXR1cmUsIHRoZW4gYmUgc2VsZWN0ZWQgYnkgYSBCUEYgaGFuZGxlciB1c2luZyBhIG5ldyBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgIGtmdW5jLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0LCBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gY2hvb3NlIGFuIGludGVycHJldGVyIHdpdGhvdXQgZG9pbmcgcGF0aCByZXNvbHV0aW9uIGF0IGV4ZWN1dGlvbiB0aW1lLgoKU2luY2UgaXTigJlzIGluIHRoZSBjb3JlIGtlcm5lbCwgZnV6emluZyBpcyBlc3NlbnRpYWwgaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGBmcy9iaW5mbXRfbWlzYy5jYCwgSSYjMzk7dmUgZ290OgoKKiAgIGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAKKiAgIGBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXJgIChzdGF0aWMpCiogICBgYm1fZW50cnlfYWRkX2ludGVycGAgKHN0YXRpYykKKiAgIGBibV9lbnRyeV93cml0ZWAgKHN0YXRpYykKKiAgIGBjcmVhdGVfZW50cnlgCiogICBgYWRkX2VudHJ5YAoqICAgYGJtX3JlZ2lzdGVyX3dyaXRlYAoqICAgYGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcmAKKiAgIGBlbnRyeV9vcGVuX2ludGVycHJldGVyYAoKQW5kIGZyb20gYGZzL2JpbmZtdF9taXNjX2JwZi5jYDoKCiogICBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwYCAoa2Z1bmMsIG5vbi1zdGF0aWMpCiogICBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCAoa2Z1bmMsIG1vZGlmaWVkKQoKQWxyaWdodCwgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGFuZCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCBzZWVtIGltbWVkaWF0ZWx5IHJlbGV2YW50IGFzIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFyZSBmaWxlIG9wZXJhdGlvbnMsIHNvIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgdGhleSBjYW4gc3RpbGwgYmUgcmVhY2hlZCB2aWEgc3lzY2FsbHMsIHRoZXJlZm9yZSBhcmUgaW1wb3J0YW50LiBIb3dldmVyLCBgbG9hZF9taXNjX2JpbmFyeWAgaXMgbGlrZWx5IHRoZSBtYWluIGVudHJ5cG9pbnQgaW50byB0aGlzIHdob2xlIG1vZHVsZSBzbyB3ZSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBpdCB0b28uCgpUbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lcyBhbmQgc2lnbmF0dXJlcywgSSYjMzk7bSBnb2luZyB0byBydW4gYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoaXQgZXZlcnkgYW5nbGUgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHNzaXplX3R8dm9pZHxzdHJ1Y3QgZmlsZSBcXCp8Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCBcXCp8Y29uc3QgY2hhciBcXCopLiogKGJtX2VudHJ5X3dyaXRlfGJtX3JlZ2lzdGVyX3dyaXRlfGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwfGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycHxicGZfYmlucHJtX3NldF9pbnRlcnB8bG9hZF9taXNjX2JpbmFyeXxlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJ8ZW50cnlfb3Blbl9pbnRlcnByZXRlcnxibV9lbnRyeV9hZGRfaW50ZXJwKVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4NjYKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgcmVhc3Nlc3MuIFRoZSBjdXJyZW50IGFwcHJvYWNoLCB3aGlsZSBwb3RlbnRpYWxseSBwb3dlcmZ1bCwgbWlnaHQgYmUgb3ZlcmNvbXBsaWNhdGluZyB0aGluZ3MuIExldCYjMzk7cyBzZWUgaWYgYSBtb3JlIGJhc2ljIGBncmVwYCBjYW4gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRjb21lLiBTb21ldGltZXMsIGJydXRlIGZvcmNlIGFuZCBzaW1wbGljaXR5IHlpZWxkIGJldHRlciByZXN1bHRzIHRoYW4gY29tcGxleCwgbGF5ZXJlZCBzb2x1dGlvbnMsIGVzcGVjaWFsbHkgZm9yIGluaXRpYWwgZGVidWdnaW5nIG9yIHZhbGlkYXRpb24uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgcGF0dGVybiBhbmQgaXRlcmF0aXZlbHkgcmVmaW5lIGl0IGFzIG5lZWRlZCwgZm9jdXNpbmcgb24gbWluaW1pemluZyB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IGF0IHRoaXMgc3RhZ2UuIEl0JiMzOTtzIGEgcHJhZ21hdGljIHNoaWZ0IOKAkyBhdm9pZCBvdmVya2lsbCwgZ2V0IHNvbWV0aGluZyBmdW5jdGlvbmFsIGZpcnN0LCB0aGVuIG9wdGltaXplIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGJtX2VudHJ5X3dyaXRlfGJtX3JlZ2lzdGVyX3dyaXRlfGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwfGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycHxicGZfYmlucHJtX3NldF9pbnRlcnB8bG9hZF9taXNjX2JpbmFyeXxlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJ8ZW50cnlfb3Blbl9pbnRlcnByZXRlcnxibV9lbnRyeV9hZGRfaW50ZXJwKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdD0xOTQ9YW5kIGRlcml2ZSB0aGUgaW50ZXJwcmV0ZXIgZnJvbSB0aGUgYmluYXJ5JiMzOTtzIGxvY2F0aW9uLiBJdCBzZWxlY3RzIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q6MTk1OmludGVycHJldGVyIGJ5IGNhbGxpbmcgdGhlIGBgYnBmX2JpbnBybV9zZXRfaW50ZXJwKClgYCBrZnVuYyB3aXRoIGFuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdC0xOTYtYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGBgMGBgLiBBIG1hdGNoIGlzIGNvbW1pdHRlZDogYSBmYWlsaW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q9MjIzPVRoZSBgYGxvYWRgYCBwcm9ncmFtIHRoZW4gc2VsZWN0cyBvbmUgcGVyIGV4ZWMgYnkgbmFtZSB3aXRoIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q6MjI0OmBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgYCBrZnVuYywgYW5kIGV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QtMjI1LWZpbGUgdGhhdCB3YXMgb3BlbmVkLiBUaGUgcGF0aCBkZWNpZGVzIHdoaWNoIGZpbGUgaXMgYm91bmQgYW5kIG5vdGhpbmdcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdD0yNTU9VGhlIGBgbG9hZGBgIHByb2dyYW0gY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBhcmd1bWVudCB0byB0aGUgaW50ZXJwcmV0ZXIgd2l0aFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q6MjU2OnRoZSBgYGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcoKWBgIGtmdW5jLiBJdCBpcyBpbnNlcnRlZCBiZXR3ZWVuIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QtMjU3LWludGVycHJldGVyIGFuZCB0aGUgYmluYXJ5LCBleGFjdGx5IGxpa2UgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGEgYGAjIWBgXG4tLVxuZnMvYmluZm10X21pc2MuYz0xMDM9c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5IHtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTExNS1cdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJwcztcdC8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi9cbmZzL2JpbmZtdF9taXNjLmM6MTE2Olx0cmVmY291bnRfdCB1c2VycztcdFx0Lyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovXG5mcy9iaW5mbXRfbWlzYy5jLTExNy1cdHN0cnVjdCByY3VfaGVhZCByY3U7XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMzgtXG5mcy9iaW5mbXRfbWlzYy5jOjEzOTovKiBQcm90ZWN0cyB0aGUgZW50cnkgd2FsayBpbiBsb2FkX21pc2NfYmluYXJ5KCksIHdoaWNoIG1heSBzbGVlcCBpbiBpdC4gKi9cbmZzL2JpbmZtdF9taXNjLmMtMTQwLURFRklORV9TVEFUSUNfU1JDVV9GQVNUKGJtX2VudHJpZXNfc3JjdSk7XG4tLVxuZnMvYmluZm10X21pc2MuYz0yMzE9c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTIzOC0vKipcbmZzL2JpbmZtdF9taXNjLmM6MjM5OiAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWVcbmZzL2JpbmZtdF9taXNjLmMtMjQwLSAqIEBpbnRlcnBzOiB0aGUgaW50ZXJwcmV0ZXJzIHRoZSBtYXRjaGVkIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTI0NT1jb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICpcbmZzL2JpbmZtdF9taXNjLmM6MjQ2OmJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpXG5mcy9iaW5mbXRfbWlzYy5jLTI0Ny17XG4tLVxuZnMvYmluZm10X21pc2MuYz0zMTI9c3RhdGljIGludCBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMzE4LVxuZnMvYmluZm10X21pc2MuYzozMTk6XHRpZiAoYmluZm10X21pc2NfZmluZF9pbnRlcnAoXHUwMDI2ZS1cdTAwM2VpbnRlcnBzLCBuYW1lKSlcbmZzL2JpbmZtdF9taXNjLmMtMzIwLVx0XHRyZXR1cm4gLUVFWElTVDtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTM0MD1zdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTM1My0gKlxuZnMvYmluZm10X21pc2MuYzozNTQ6ICogRnJlZSBlbnRyeSBzeW5jaW5nIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpIGFuZCBkZWZlciBmaW5hbCBmcmVlIHRvXG5mcy9iaW5mbXRfbWlzYy5jOjM1NTogKiBsb2FkX21pc2NfYmluYXJ5KCkgaW4gY2FzZSBpdCBpcyB1c2luZyB0aGUgYmluYXJ5IHR5cGUgaGFuZGxlciB3ZSB3ZXJlXG5mcy9iaW5mbXRfbWlzYy5jLTM1Ni0gKiByZXF1ZXN0ZWQgdG8gcmVtb3ZlLiBBbHNvIHRoZSB0ZWFyZG93biBmb3IgYSByZWdpc3RyYXRpb24gdGhhdCBmYWlsc1xuLS1cbmZzL2JpbmZtdF9taXNjLmM9Mzk5PXN0YXRpYyBzdHJ1Y3QgYmluZm10X21pc2MgKmN1cnJlbnRfYmluZm10X21pc2Modm9pZClcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTQxNC0vKipcbmZzL2JpbmZtdF9taXNjLmM6NDE1OiAqIGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlciAtIGdldCB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoZSBtYXRjaGVkIEBlXG5mcy9iaW5mbXRfbWlzYy5jLTQxNi0gKiBAZTogbWF0Y2hlZCBiaW5hcnkgdHlwZSBoYW5kbGVyXG4tLVxuZnMvYmluZm10X21pc2MuYy00MjUtICovXG5mcy9iaW5mbXRfbWlzYy5jOjQyNjpzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfc2VsZWN0X2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbmZzL2JpbmZtdF9taXNjLmMtNDI3LVx0XHRcdFx0XHQgICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTQ3Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTUwNC0vKipcbmZzL2JpbmZtdF9taXNjLmM6NTA1OiAqIGVudHJ5X29wZW5faW50ZXJwcmV0ZXIgLSBvcGVuIHRoZSBlbnRyeSYjMzk7cyBpbnRlcnByZXRlciBmb3IgZXhlY3V0aW9uXG5mcy9iaW5mbXRfbWlzYy5jLTUwNi0gKiBAZTogbWF0Y2hlZCBiaW5hcnkgdHlwZSBoYW5kbGVyXG4tLVxuZnMvYmluZm10X21pc2MuYy01MTUtICovXG5mcy9iaW5mbXRfbWlzYy5jOjUxNjpzdGF0aWMgc3RydWN0IGZpbGUgKmVudHJ5X29wZW5faW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy01MTctXHRcdFx0XHRcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X21pc2MuYz01NTk9c3RhdGljIGludCBidWlsZF9pbnRlcnBfYXJndihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICppbnRlcnByZXRlcixcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTYwOC0gKi9cbmZzL2JpbmZtdF9taXNjLmM6NjA5OnN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuZnMvYmluZm10X21pc2MuYy02MTAte1xuLS1cbmZzL2JpbmZtdF9taXNjLmMtNjI4LVxuZnMvYmluZm10X21pc2MuYzo2Mjk6XHRpbnRlcnByZXRlciA9IGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihmbXQsIGJwcm0pO1xuZnMvYmluZm10X21pc2MuYy02MzAtXHRpZiAoSVNfRVJSKGludGVycHJldGVyKSlcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTY0NS1cdGlmIChmbGFncyBcdTAwMjYgTUlTQ19GTVRfTE9BREVSKSB7XG5mcy9iaW5mbXRfbWlzYy5jOjY0NjpcdFx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgYnBybSwgaW50ZXJwcmV0ZXIpO1xuZnMvYmluZm10X21pc2MuYy02NDctXHRcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKSB7XG4tLVxuZnMvYmluZm10X21pc2MuYy02NjctXG5mcy9iaW5mbXRfbWlzYy5jOjY2ODpcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGJwcm0sIGludGVycHJldGVyKTtcbmZzL2JpbmZtdF9taXNjLmMtNjY5LVx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpXG4tLVxuZnMvYmluZm10X21pc2MuYz0xMTM3PXN0YXRpYyB2b2lkIGJtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMTYxLSAqIHVubGluaygyKSBoYXBwZW5zIHVuZGVyIHRoZSBleGNsdXNpdmVseSBoZWxkIGlub2RlIGxvY2sgb2YgdGhlIHJvb3RcbmZzL2JpbmZtdF9taXNjLmM6MTE2MjogKiBkZW50cnkga2VlcGluZyB0aGUgbGlzdCBzdGFibGUgZm9yIHdyaXRlcnMuIGxvYWRfbWlzY19iaW5hcnkoKSB3YWxrcyBpdFxuZnMvYmluZm10X21pc2MuYy0xMTYzLSAqIGNvbmN1cnJlbnRseSB1bmRlciBTUkNVLiBUaGUgZW50cmllc19sb2NrIGlzIG9ubHkgaGVsZCBhcm91bmQgdGhlIGFjdHVhbFxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTI1Mj1zdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjU5LVxuZnMvYmluZm10X21pc2MuYzoxMjYwOlx0Lyogc2VxX29wZW4oKSBjbGVhcnMgRk1PREVfUFdSSVRFLCBibV9lbnRyeV93cml0ZSgpIHRha2VzIGFueSBvZmZzZXQgKi9cbmZzL2JpbmZtdF9taXNjLmMtMTI2MS1cdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfV1JJVEUpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjczLS8qKlxuZnMvYmluZm10X21pc2MuYzoxMjc0OiAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnlcbmZzL2JpbmZtdF9taXNjLmMtMTI3NS0gKiBAZTogdGhlIGVudHJ5XG4tLVxuZnMvYmluZm10X21pc2MuYy0xMjg4LSAqL1xuZnMvYmluZm10X21pc2MuYzoxMjg5OnN0YXRpYyBzc2l6ZV90IGJtX2VudHJ5X2FkZF9pbnRlcnAoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuZnMvYmluZm10X21pc2MuYy0xMjkwLVx0XHRcdFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTM0OS1cbmZzL2JpbmZtdF9taXNjLmM6MTM1MDpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbmZzL2JpbmZtdF9taXNjLmMtMTM1MS1cdFx0XHRcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTM2Ny1cdGlmIChidWZbMF0gPT0gJiMzOTsmIzQzOyYjMzk7KVxuZnMvYmluZm10X21pc2MuYzoxMzY4Olx0XHRyZXR1cm4gYm1fZW50cnlfYWRkX2ludGVycChlLCBmaWxlLCBidWYsIGNvdW50KTtcbmZzL2JpbmZtdF9taXNjLmMtMTM2OS1cbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTE0MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fZW50cnlfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9iaW5mbXRfbWlzYy5jLTE0MTAtXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuZnMvYmluZm10X21pc2MuYzoxNDExOlx0LndyaXRlXHRcdD0gYm1fZW50cnlfd3JpdGUsXG5mcy9iaW5mbXRfbWlzYy5jLTE0MTItXHQubGxzZWVrXHRcdD0gc2VxX2xzZWVrLFxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTQxOT1zdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvYmluZm10X21pc2MuYy0xNDQ5LVxuZnMvYmluZm10X21pc2MuYzoxNDUwOnN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuZnMvYmluZm10X21pc2MuYy0xNDUxLVx0XHRcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9iaW5mbXRfbWlzYy5jPTE0OTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYm1fcmVnaXN0ZXJfb3BlcmF0aW9ucyA9IHtcbmZzL2JpbmZtdF9taXNjLmM6MTQ5MjpcdC53cml0ZVx0XHQ9IGJtX3JlZ2lzdGVyX3dyaXRlLFxuZnMvYmluZm10X21pc2MuYy0xNDkzLVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTU0Nj1zdGF0aWMgaW50IGJtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2JpbmZtdF9taXNjLmMtMTYwMy1cdCAqIHRoYXQgdGhlIGJpbmFyeSB0eXBlIGxpc3QgZm9yIHRoaXMgYmluZm10X21pc2MgbW91bnQgaXMgZW1wdHkgbWFraW5nXG5mcy9iaW5mbXRfbWlzYy5jOjE2MDQ6XHQgKiBsb2FkX21pc2NfYmluYXJ5KCkgcmV0dXJuIC1FTk9FWEVDIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgLVx1MDAzZWVuYWJsZWRcbmZzL2JpbmZtdF9taXNjLmMtMTYwNS1cdCAqIGlzIHRydWUuIEluc3RlYWQsIGlmIHNvbWVvbmUgbW91bnRzIGJpbmZtdF9taXNjIGZvciB0aGUgZmlyc3QgdGltZSBvclxuLS1cbmZzL2JpbmZtdF9taXNjLmM9MTY0OT1zdGF0aWMgc3RydWN0IGxpbnV4X2JpbmZtdCBtaXNjX2Zvcm1hdCA9IHtcbmZzL2JpbmZtdF9taXNjLmMtMTY1MC1cdC5tb2R1bGUgPSBUSElTX01PRFVMRSxcbmZzL2JpbmZtdF9taXNjLmM6MTY1MTpcdC5sb2FkX2JpbmFyeSA9IGxvYWRfbWlzY19iaW5hcnksXG5mcy9iaW5mbXRfbWlzYy5jLTE2NTItfTtcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYz0xMTk9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuLS1cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEyMS0vKipcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjEyMjogKiBicGZfYmlucHJtX3NldF9pbnRlcnAgLSBzZWxlY3QgdGhlIGludGVycHJldGVyIGZvciB0aGUgY3VycmVudCBleGVjXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMjMtICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMTMxLSAqIHJldHVybnMuIENhbGxpbmcgaXQgYWdhaW4gcmVwbGFjZXMgdGhlIHNlbGVjdGlvbiwgYXMgZG9lcyBzZWxlY3RpbmcgYW5cbmZzL2JpbmZtdF9taXNjX2JwZi5jOjEzMjogKiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmQgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEzMy0gKlxuLS1cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEzNS0gKi9cbmZzL2JpbmZtdF9taXNjX2JwZi5jOjEzNjpfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMzctXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9fc3opXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMTYwLS8qKlxuZnMvYmluZm10X21pc2NfYnBmLmM6MTYxOiAqIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCAtIHJ1biB0aGlzIGV4ZWMgdW5kZXIgYW4gaW50ZXJwcmV0ZXIgdGhlIGVudHJ5IGJvdW5kXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNjItICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMTY2LSAqIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb2FkIHByb2dyYW0gb2YgYSBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGhhbmRsZXJcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjE2NzogKiBpbnN0ZWFkIG9mIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpLiBJdCBzZWxlY3RzIG9uZSBvZiB0aGUgaW50ZXJwcmV0ZXJzXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNjgtICogdGhlIG1hdGNoZWQgZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aCwgZWFjaCBvZiB3aGljaCB3YXMgb3BlbmVkIG9uY2Ugd2hlblxuLS1cbmZzL2JpbmZtdF9taXNjX2JwZi5jLTE3Ny0gKi9cbmZzL2JpbmZtdF9taXNjX2JwZi5jOjE3ODpfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNzktXHRcdFx0XHRcdCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMTkwLVxuZnMvYmluZm10X21pc2NfYnBmLmM6MTkxOlx0aW50ZXJwID0gYmluZm10X21pc2NfZmluZF9pbnRlcnAoYnBybS1cdTAwM2VicGZfaW50ZXJwcywgbmFtZSk7XG5mcy9iaW5mbXRfbWlzY19icGYuYy0xOTItXHRpZiAoIWludGVycClcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYy0yMDMtLyoqXG5mcy9iaW5mbXRfbWlzY19icGYuYzoyMDQ6ICogYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZyAtIHNldCBhIHNpbmdsZSBhcmd1bWVudCBmb3IgdGhlIGludGVycHJldGVyXG5mcy9iaW5mbXRfbWlzY19icGYuYy0yMDUtICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4tLVxuZnMvYmluZm10X21pc2NfYnBmLmMtMjE1LSAqL1xuZnMvYmluZm10X21pc2NfYnBmLmM6MjE2Ol9fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NldF9pbnRlcnBfYXJnKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG5mcy9iaW5mbXRfbWlzY19icGYuYy0yMTctXHRcdFx0XHRcdCAgY29uc3QgY2hhciAqYXJnLCBzaXplX3QgYXJnX19zeilcbi0tXG5mcy9iaW5mbXRfbWlzY19icGYuYz0yODA9QlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxuZnMvYmluZm10X21pc2NfYnBmLmM6MjgxOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjI4MjpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXG5mcy9iaW5mbXRfbWlzY19icGYuYzoyODM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcsIEtGX1NMRUVQQUJMRSlcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTI4NC1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfZmxhZ3MsIEtGX1NMRUVQQUJMRSlcbi0tXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg9MTA9c3RydWN0IHVzZXJfbmFtZXNwYWNlO1xuLS1cbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaC0zMC0gKiBpcyBoYW5kZWQgdG8gdGhlIGhhbmRsZXImIzM5O3MgbG9hZCBwcm9ncmFtIGZvciB0aGUgZHVyYXRpb24gb2Ygb25lIGV4ZWMsXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg6MzE6ICogd2hpY2ggcGlja3Mgb25lIHdpdGggYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKCkuXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgtMzItICovXG4tLVxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oPTQwPWNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oOjQxOmJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpO1xuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oLTQyLVxuLS1cbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaD01OT1lbnVtIGJwZl9iaW5wcm1fZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaC03NC0gKiBAbG9hZDogIHNlbGVjdCBhbiBpbnRlcnByZXRlciBmb3IgdGhlIG1hdGNoZWQgQGJwcm0gdmlhXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg6NzU6ICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSwgb3Igb25lIHRoZSBlbnRyeSBib3VuZCB2aWFcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaDo3NjogKiAgICAgICAgIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLCBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXNcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaC03Ny0gKiAgICAgICAgIGNvbW1pdHRlZCwgc28gYSBmYWlsdXJlIGZhaWxzIHRoZSBleGVjIGluc3RlYWQgb2YgZmFsbGluZ1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYz0xND1jaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYy0xOS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYzoyMDpleHRlcm4gaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICpwYXRoLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTIxLVx0XHRcdFx0IHNpemVfdCBwYXRoX19zeikgX19rc3ltO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYz00Mz1pbnQgQlBGX1BST0coYnBmX2ludGVycF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYy00NS1cdC8qXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmM6NDY6XHQgKiBLZWVwIHRoZSBwYXRoIG9uIHRoZSAod3JpdGFibGUpIHN0YWNrOiBicGZfYmlucHJtX3NldF9pbnRlcnAoKSB0YWtlc1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTQ3LVx0ICogYSBzaXplZCBtZW1vcnkgYXJnIGFuZCB0aGUgdmVyaWZpZXIgcmVqZWN0cyBhIHJlYWQtb25seSAucm9kYXRhXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTUyLVx0LyogQHBhdGhfX3N6IGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBOVUw7IDAgY29tbWl0cyB0aGUgc2VsZWN0aW9uLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jOjUzOlx0cmV0dXJuIGJwZl9iaW5wcm1fc2V0X2ludGVycChicHJtLCBpbnRlcnAsIHNpemVvZihpbnRlcnApKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYy01NC19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYz0xMz1jaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jOjIyOmV4dGVybiBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jLTIzLVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeikgX19rc3ltO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM9NDg9aW50IEJQRl9QUk9HKGludGVycF9iaW5kX2xvYWQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYy02MS1cdGNhc2UgRU1fQUFSQ0g2NDpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM6NjI6XHRcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgZmlyc3QsIHNpemVvZihmaXJzdCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYy02My1cdGNhc2UgRU1fUklTQ1Y6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jOjY0Olx0XHRyZXR1cm4gYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKGJwcm0sIHNlY29uZCwgc2l6ZW9mKHNlY29uZCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYy02NS1cdH1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jLTY3LVx0LyogVGhlIGVudHJ5IGJvdW5kIG5vdGhpbmcgdW5kZXIgdGhpcyBuYW1lOiAtRU5PRU5UIGZhaWxzIHRoZSBleGVjLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYzo2ODpcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgdW5ib3VuZCwgc2l6ZW9mKHVuYm91bmQpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtNjktfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jPTEyPWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmMtMTctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2xvYWRlci5icGYuYzoxODpleHRlcm4gaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICpwYXRoLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmMtMTktXHRcdFx0XHQgc2l6ZV90IHBhdGhfX3N6KSBfX2tzeW07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmM9Mzg9aW50IEJQRl9QUk9HKGxvYWRlcl9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jLTQ3LVx0LyogQHBhdGhfX3N6IGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBOVUw7IDAgY29tbWl0cyB0aGUgc2VsZWN0aW9uLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmM6NDg6XHRyZXR1cm4gYnBmX2JpbnBybV9zZXRfaW50ZXJwKGJwcm0sIGludGVycCwgc2l6ZW9mKGludGVycCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmMtNDktfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy03LSAqIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGJpbmFyeSBiZWluZyBleGVjdXRlZCBhbmRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYzo4OiAqIHNlbGVjdGVkIHZpYSBicGZfYmlucHJtX3NldF9pbnRlcnAoKS4gVGhlIG1hdGNoIHByb2dyYW0gcmVhZHMgdGhlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmMtOS0gKiBwcm9ncmFtIGhlYWRlcnMgaXRzZWxmLCBzbyBhbnl0aGluZyBlbHNlIG5ldmVyIGNvbW1pdHMgdG8gdGhpc1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYz0zOD1leHRlcm4gaW50IGJwZl9wYXRoX2RfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9uaXhfb3JpZ2luLmJwZi5jLTM5LVx0XHRcdCAgIHNpemVfdCBidWZfX3N6KSBfX2tzeW07XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM6NDA6ZXh0ZXJuIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy00MS1cdFx0XHRcdCBzaXplX3QgcGF0aF9fc3opIF9fa3N5bTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM9MTI3PWludCBCUEZfUFJPRyhuaXhfb3JpZ2luX2xvYWQsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9uaXhfb3JpZ2luLmJwZi5jLTIxMC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYzoyMTE6XHRyZXQgPSBicGZfYmlucHJtX3NldF9pbnRlcnAoYnBybSwgc2MtXHUwMDNlcGF0aCwgcnN6KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy0yMTItb3V0X2RlbDpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jPTEyPWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYy0xNy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvdHJhbnNwYXJlbnQuYnBmLmM6MTg6ZXh0ZXJuIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvdHJhbnNwYXJlbnQuYnBmLmMtMTktXHRcdFx0XHQgc2l6ZV90IHBhdGhfX3N6KSBfX2tzeW07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYz0zOT1pbnQgQlBGX1BST0codHJhbnNwYXJlbnRfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jLTQ4LVx0LyogQHBhdGhfX3N6IGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBOVUw7IDAgY29tbWl0cyB0aGUgc2VsZWN0aW9uLiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYzo0OTpcdHJldHVybiBicGZfYmlucHJtX3NldF9pbnRlcnAoYnBybSwgaW50ZXJwLCBzaXplb2YoaW50ZXJwKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jLTUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBJbnRlcnByZXRlciBTZWxlY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlIGtlcm5lbCBzZWxlY3RzIGludGVycHJldGVycy4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGlzIHByb2Nlc3MuIExldCYjMzk7cyBzZWUsIHRoZSBvbmVzIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFyZTogYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGBicGZfYmlucHJtX3NldF9pbnRlcnBgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgLCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgLiAgSSYjMzk7bGwgYWxzbyBrZWVwIGBibV9lbnRyeV9hZGRfaW50ZXJwYCwgYGJtX2VudHJ5X3dyaXRlYCwgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAgaW4gbWluZCwgZXZlbiB0aG91Z2ggc29tZSBhcmUgc3RhdGljOyBsaXN0aW5nIHRoZW0gd29uJiMzOTt0IGh1cnQsIGFuZCBtaWdodCBiZSBoZWxwZnVsIGxhdGVyLgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgZnMvYmluZm10X21pc2MuY2AgYW5kIGh1bnQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGJtX2VudHJ5X3dyaXRlYCwgYGJtX3JlZ2lzdGVyX3dyaXRlYCwgYW5kIGBibV9lbnRyeV9hZGRfaW50ZXJwYC4gQWgsIHJpZ2h0LCB0aG9zZSBhcmUgZmlsZSBvcGVyYXRpb25zISAgT2theSwgSSBjYW4gZGVmaW5pdGVseSBsaXN0IHRob3NlLiAgRXZlbiB0aG91Z2ggYGJtX2VudHJ5X3dyaXRlYCBpcyBtYXJrZWQgYHN0YXRpY2AsIGl0JiMzOTtzIHN0aWxsIGEgZ29vZCBwbGFjZSB0byBwb2tlIGFyb3VuZC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGxvb2sgaW50byBhcmU6IGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAsIGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnBgLCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCwgYGxvYWRfbWlzY19iaW5hcnlgLCBgYm1fZW50cnlfd3JpdGVgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBgYm1fZW50cnlfYWRkX2ludGVycGAsIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgLCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgLgoKTmV4dCwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgaW4gYEtjb25maWdgIHRvIHNlZSBob3cgYEJJTkZNVF9NSVNDYCBhbmQgYEJJTkZNVF9NSVNDX0JQRmAgYXJlIGNvbmZpZ3VyZWQgYW5kIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUgc2VsZWN0aW9uIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIGJlZ2luIHRoZSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJJTkZNVF9NSVNDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcuYmluZm10PTEzOD1jb25maWcgQklORk1UX1pGTEFUXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ0LVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTQ1OmNvbmZpZyBCSU5GTVRfTUlTQ1xuZnMvS2NvbmZpZy5iaW5mbXQtMTQ2LVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsIHN1cHBvcnQgZm9yIE1JU0MgYmluYXJpZXNcJiMzNDtcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC0xNzAtXG5mcy9LY29uZmlnLmJpbmZtdDoxNzE6Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVx0Ym9vbCBcJiMzNDtCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZnMvS2NvbmZpZy5iaW5mbXRgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzEuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3Rpbmcgb3IgcG90ZW50aWFsbHkgcmVsZXZhbnQgdGhlcmUgaW4gcmVsYXRpb24gdG8gd2hhdCBJJiMzOTttIHdvcmtpbmcgb24sIHBlcmhhcHMgZGVhbGluZyB3aXRoIGJpbmFyeSBmb3JtYXQgY29uZmlndXJhdGlvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgY29uZGl0aW9uYWwsIGEgZGVwZW5kZW5jeSBkZWZpbml0aW9uLCBvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQmIzM5O3MgZ29pbmcgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBjdXJyZW50IHByb2JsZW0uIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZy5iaW5mbXQmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2MDpcdFx0ICBmZWF0dXJlLCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvamF2YS5yc3RcdTAwM2UgZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvd1xuIDE2MTpcdFx0ICB0byBpbmNsdWRlIEphdmEgc3VwcG9ydC4gYW5kIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tb25vLnJzdFx1MDAzZSBmb3JcbiAxNjI6XHQgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGluY2x1ZGUgTW9uby1iYXNlZCAuTkVUIHN1cHBvcnQuXG4gMTYzOlx0XG4gMTY0Olx0ICAgICAgICAgIFRvIHVzZSBiaW5mbXRfbWlzYywgeW91IHdpbGwgbmVlZCB0byBtb3VudCBpdDpcbiAxNjU6XHRcdFx0bW91bnQgYmluZm10X21pc2MgLXQgYmluZm10X21pc2MgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjXG4gMTY2Olx0XG4gMTY3Olx0XHQgIFlvdSBtYXkgc2F5IE0gaGVyZSBmb3IgbW9kdWxlIHN1cHBvcnQgYW5kIGxhdGVyIGxvYWQgdGhlIG1vZHVsZSB3aGVuXG4gMTY4Olx0XHQgIHlvdSBoYXZlIHVzZSBmb3IgaXQ7IHRoZSBtb2R1bGUgaXMgY2FsbGVkIGJpbmZtdF9taXNjLiBJZiB5b3VcbiAxNjk6XHRcdCAgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBhbnN3ZXIgYXQgdGhpcyBwb2ludCwgc2F5IFkuXG4gMTcwOlx0XG4gMTcxOlx0Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxuIDE3MjpcdFx0Ym9vbCBcJiMzNDtCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCYjMzQ7XG4gMTczOlx0XHRkZXBlbmRzIG9uIEJJTkZNVF9NSVNDPXlcbiAxNzQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IERFQlVHX0lORk9fQlRGXG4gMTc1Olx0XHRoZWxwXG4gMTc2Olx0XHQgIEFsbG93IGJpbmZtdF9taXNjIGJpbmFyeSB0eXBlIGhhbmRsZXJzIHRvIGJlIGltcGxlbWVudGVkIGFzIGJwZlxuIDE3NzpcdFx0ICBzdHJ1Y3Rfb3BzIHByb2dyYW1zLiBJbnN0ZWFkIG9mIG1hdGNoaW5nIGEgZml4ZWQgbWFnaWMgYW5kXG4gMTc4Olx0XHQgIHJlZGlyZWN0aW5nIHRvIGEgZml4ZWQgaW50ZXJwcmV0ZXIgcmVjb3JkZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWVcbiAxNzk6XHRcdCAgc3VjaCBoYW5kbGVycyBtYXRjaCBiaW5hcmllcyBwcm9ncmFtbWF0aWNhbGx5IGFuZCBjb21wdXRlIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg2MQoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiAxMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJJTkZNVF9NSVNDIGFuZCBCUEYgSW50ZWdyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgQklORk1UX01JU0NfQlBGYCBpcyBlbmFibGVkLCB3aGljaCBvYnZpb3VzbHkgcmVsaWVzIG9uIGBCSU5GTVRfTUlTQz15YCwgYW5kIHRoZW4gYWxzbyB0aGUgcmVsZXZhbnQgQlBGLXNwZWNpZmljIGNvbmZpZ3M6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBERUJVR19JTkZPX0JURmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGluY2x1ZGUgYm90aCBgQklORk1UX01JU0NgIGFuZCBgQklORk1UX01JU0NfQlBGYCBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoYXQgY292ZXJzIHRoZSBiYXNpYyBkZXBlbmRlbmNpZXMuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyBwYXRjaCB0b3VjaD8gTG9va3MgbGlrZSBgZnMvYmluZm10X21pc2MuY2AgYW5kIGBmcy9iaW5mbXRfbWlzY19icGYuY2AuIFNvLCBgQklORk1UX01JU0NgIGFuZCBgQklORk1UX01JU0NfQlBGYCBhcmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgaW4gdGhpcyBhcmVhLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCByZWxldmFudC4gTXkgbWVudGFsIGNoZWNrbGlzdCBmb2N1c2VzIG9uIHRoZXNlIHBvdGVudGlhbCBob3RzcG90czogYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGBicGZfYmlucHJtX3NldF9pbnRlcnBgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBibV9lbnRyeV93cml0ZWAsIGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV9hZGRfaW50ZXJwYCwgYGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcmAsIGFuZCBgZW50cnlfb3Blbl9pbnRlcnByZXRlcmAuCgpOb3csIGxldCYjMzk7cyByZWZpbmUgdGhpcyBsaXN0LiBgbG9hZF9taXNjX2JpbmFyeWAgaXMgZGVmaW5pdGVseSBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBidXQgaXQgaXMgc3BlY2lmaWMgdG8gYGJpbmZtdF9taXNjYC4gSXQmIzM5O3Mgbm90IGEgZ2VuZXJpYyBrZXJuZWwgZnVuY3Rpb24gbGlrZSBgc2NoZWR1bGVgIG9yIGBrbWFsbG9jYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgb2theSB0byBpbmNsdWRlLiBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFyZSBzdGF0aWMsIGJ1dCB0aGV5IGFyZSBjcnVjaWFsIGZvciBzZXR0aW5nIHVwIHRoZSBmdW5jdGlvbmFsaXR5LiBUaGUgcHJvbXB0IHNheXMgdG8gZmF2b3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBidXQgdGhlc2UgYXJlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGBmaWxlX29wZXJhdGlvbnNgLCBzbyB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGV5IGFyZSBnb29kIHRhcmdldHMuIGBibV9lbnRyeV9hZGRfaW50ZXJwYCBhcHBlYXJzIHN0YXRpYy4gTGV0JiMzOTtzIG9taXQgaXQgYXMgaXQmIzM5O3MgbGlrZWx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBMaWtld2lzZSwgYGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcmAgYW5kIGBlbnRyeV9vcGVuX2ludGVycHJldGVyYCBhcmUgc3RhdGljLCBhbmQgcHJvYmFibHkgaW5saW5lZCwgc28gbGV0JiMzOTtzIG9taXQgdGhlbSB0b28uIGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAgaXMgbm9uLXN0YXRpYy4gYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAgaXMgbm9uLXN0YXRpYyAoYSBrZnVuYykuIGBicGZfYmlucHJtX3NldF9pbnRlcnBgIGlzIGFsc28gbm9uLXN0YXRpYyAoYSBrZnVuYykuCgpQdXR0aW5nIGFsbCB0aGF0IHRvZ2V0aGVyLCBJIHRoaW5rIHRoZSBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYmU6CgotIGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAKLSBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwYAotIGBicGZfYmlucHJtX3NldF9pbnRlcnBgCi0gYGxvYWRfbWlzY19iaW5hcnlgCi0gYGJtX2VudHJ5X3dyaXRlYAotIGBibV9yZWdpc3Rlcl93cml0ZWAKCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiBgbG9hZF9taXNjX2JpbmFyeWAuLi4gWWVzLCBgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pYCBpbiBgZnMvYmluZm10X21pc2MuY2AsIGFuZCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgbWlzY19mb3JtYXQubG9hZF9iaW5hcnlgLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KCkRvdWJsZS1jaGVja2luZyBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgLi4uIEJvdGggYXJlIGBzdGF0aWMgc3NpemVfdGAgZnVuY3Rpb25zLCBhbmQgYm90aCBhcmUgYXNzaWduZWQgdG8gYGZpbGVfb3BlcmF0aW9ucy53cml0ZWAuIENvbmZpcm1lZC4KCldoYXQgYWJvdXQgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYD8gWWVzLCBpdCYjMzk7cyBub24tc3RhdGljOiBgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpYC4KCmBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnBgIGlzIGFsc28gbm9uLXN0YXRpYzogYF9fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfX3N6KWAuCgpBbmQgYGJwZl9iaW5wcm1fc2V0X2ludGVycGA/IE5vbi1zdGF0aWMgYXMgd2VsbDogYF9fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KWAuCgpTbywgdGhlIGBDb25maWdzYCBJJiMzOTttIGluY2x1ZGluZyBhcmU6CgotIGBCSU5GTVRfTUlTQ2AKLSBgQklORk1UX01JU0NfQlBGYAoKTXkgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpbnRlZ3JhdGVzIEJQRiBoYW5kbGVycyBpbnRvIGBiaW5mbXRfbWlzY2AsIGFsbG93aW5nIGludGVycHJldGVycyB0byBiZSBib3VuZCBhbmQgc2VsZWN0ZWQgYnkgbmFtZSBhdCBgZXhlY2AgdGltZS4KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OywKICAgICYjMzQ7QklORk1UX01JU0NfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmluZm10X21pc2NfZmluZF9pbnRlcnAmIzM0OywKICAgICYjMzQ7YnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtsb2FkX21pc2NfYmluYXJ5JiMzNDssCiAgICAmIzM0O2JtX2VudHJ5X3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0MmIzM0OywKICAgICYjMzQ7QklORk1UX01JU0NfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmluZm10X21pc2NfZmluZF9pbnRlcnAmIzM0OywKICAgICYjMzQ7YnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtsb2FkX21pc2NfYmluYXJ5JiMzNDssCiAgICAmIzM0O2JtX2VudHJ5X3dyaXRlJiMzNDssCiAgICAmIzM0O2JtX3JlZ2lzdGVyX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjU2OjAyLjUyNjc0MTc4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNDg0Nzg2NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCIsXG4gICAgXCJCSU5GTVRfTUlTQ19CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW5mbXRfbWlzY19maW5kX2ludGVycFwiLFxuICAgIFwiYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwXCIsXG4gICAgXCJicGZfYmlucHJtX3NldF9pbnRlcnBcIixcbiAgICBcImxvYWRfbWlzY19iaW5hcnlcIixcbiAgICBcImJtX2VudHJ5X3dyaXRlXCIsXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTY6MDIuNTI2NzQ4MTU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ4NDEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZjkyNTFhNjBkYTE2NjIyNGJlYTliYWEzYmQ5YzQyZjc0YjlkNWNhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDI6NTY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbmluZGV4IGM4MDcwMmI0Y2NkNWYuLjNlMmIyYTk0MTViYzggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxcbkBAIC0xMDcsNiArMTA3LDE1IEBAIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46XFxuICAgICAgICAgICAgIGBgUFRfSU5URVJQYGAuIFNlZSB0aGUgXFxcIkxvYWRlciBzdWJzdGl0dXRpb25cXFwiIHNlY3Rpb25cXG4gICAgICAgICAgICAgYmVsb3cuIGBgTGBgIHJlamVjdHMgYGBUYGAsIGBgUGBgLCBgYE9gYCBhbmQgYGBDYGA7XFxuICAgICAgICAgICAgIGBgRmBgIGNvbXBvc2VzLlxcbisgICAgICBgYERgYCAtIHJlZ2lzdGVyZWQgZGlzYWJsZWRcXG4rICAgICAgICAgICAgVGhlIGVudHJ5IGlzIGNyZWF0ZWQgZGlzYWJsZWQgaW5zdGVhZCBvZiBiZWluZyBtYXRjaGFibGUgYXRcXG4rICAgICAgICAgICAgb25jZSwgYW5kIGhhcyB0byBiZSBlbmFibGVkIGJ5IHdyaXRpbmcgYGAxYGAgdG8gaXRzIGZpbGVcXG4rICAgICAgICAgICAgYmVmb3JlIGl0IGRpc3BhdGNoZXMgYW55dGhpbmcuIFRoaXMgc3BsaXRzIGEgcmVnaXN0cmF0aW9uXFxuKyAgICAgICAgICAgIGludG8gY3JlYXRpbmcgdGhlIGVudHJ5IGFuZCBhY3RpdmF0aW5nIGl0LCBsZWF2aW5nIHJvb20gdG9cXG4rICAgICAgICAgICAgY29uZmlndXJlIGl0IGluIGJldHdlZW4gLSB3aGljaCBpcyB3aGF0IGEgYGBCYGAgZW50cnkgdGhhdFxcbisgICAgICAgICAgICBiaW5kcyBpbnRlcnByZXRlcnMgbmVlZHM7IHNlZSB0aGUgYnBmIHNlY3Rpb24gYmVsb3cuIFRoZSBmbGFnXFxuKyAgICAgICAgICAgIGlzIHNwZW50IG9uIHRoZSByZWdpc3RyYXRpb24gYW5kIGlzIG5vdCByZWFkIGJhY2s6IHdoYXQgYW5cXG4rICAgICAgICAgICAgZW50cnkgZmlsZSByZXBvcnRzIGFmdGVyd2FyZHMgaXMgd2hldGhlciBpdCBpcyBlbmFibGVkLlxcbiBcXG4gXFxuIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcXG5AQCAtMTg2LDkgKzE5NSw2MiBAQCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBiaW5hcnkncyBsb2NhdGlvbi4gSXQgc2VsZWN0cyB0aGVcXG4gaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnAoKWBgIGtmdW5jIHdpdGggYW5cXG4gYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGBgMGBgLiBBIG1hdGNoIGlzIGNvbW1pdHRlZDogYSBmYWlsaW5nXFxuIGBgbG9hZGBgIGZhaWxzIHRoZSBleGVjIHdpdGggaXRzIGVycm9yIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIHRvIGxhdGVyXFxuLWVudHJpZXM7IGBgLUVOT0VYRUNgYCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5IGZvcm1hdHMgaGF2ZSBhIGdvLiBUaGVcXG4taW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjLFxcbi1leGFjdGx5IGFzIGEgc3RhdGljYWxseSByZWdpc3RlcmVkIGludGVycHJldGVyIHdvdWxkIGJlLlxcbitlbnRyaWVzOyBgYC1FTk9FWEVDYGAgbGV0cyB0aGUgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzIGhhdmUgYSBnby4gQSBwYXRoXFxuK3NlbGVjdGVkIHRoaXMgd2F5IGlzIG9wZW5lZCB3aXRoIHRoZSBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGVcXG4rZXhlYywgZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3aXRob3V0IGBgRmBgIHdvdWxkXFxuK2JlLlxcbitcXG4rQW4gZW50cnkgY2FuIGluc3RlYWQgYmluZCB0aGUgaW50ZXJwcmV0ZXJzIGl0cyBoYW5kbGVyIG1heSB1c2UsIHNvIHRoYXQgbm9cXG4rcGF0aCBpcyByZXNvbHZlZCBhdCBleGVjIHRpbWUgYXQgYWxsLiBBbiBlbnRyeSByZWdpc3RlcmVkIHdpdGggYGBEYGAgaXMgbm90XFxuK21hdGNoYWJsZSB5ZXQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gdGhlbSwgb25lXFxuK2BgK25hbWUgcGF0aGBgIHdyaXRlIGF0IGEgdGltZTo6XFxuK1xcbisgICAgZWNobyAnOnFlbXU6Qjo6OjpteV9oYW5kbGVyOkQnIFxcdTAwM2UgcmVnaXN0ZXJcXG4rICAgIGVjaG8gJythYXJjaDY0IC91c3IvYmluL3FlbXUtYWFyY2g2NCcgXFx1MDAzZSBxZW11XFxuKyAgICBlY2hvICcrYXJtIC91c3IvYmluL3FlbXUtYXJtJyBcXHUwMDNlIHFlbXVcXG4rICAgIGVjaG8gMSBcXHUwMDNlIHFlbXVcXG4rXFxuK0VhY2ggcGF0aCBpcyBvcGVuZWQgZHVyaW5nIGl0cyB3cml0ZSwgaW4gdGhlIHdyaXRpbmcgcHJvY2VzcydzIGNvbnRleHQgYW5kXFxuK3dpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgXFxuK3ByZS1vcGVucyBhIHN0YXRpYyBlbnRyeSdzIGludGVycHJldGVyOyB0aGUgcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZS4gVGhlXFxuK3BhdGggaXMgZXZlcnl0aGluZyBwYXN0IHRoZSBmaXJzdCBzcGFjZSwgc28gdGhlcmUgaXMgbm90aGluZyBpdCBjYW5ub3RcXG4rZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XFxuK2JpbmRzIGF0IG1vc3QgMTAwIGludGVycHJldGVyczsgYSB3cml0ZSBwYXN0IHRoYXQgaXMgcmVmdXNlZCB3aXRoXFxuK2BgLUVOT1NQQ2BgLiBUbyBiaW5kIGEgZmlsZSB0aGF0IGhhcyBubyBwYXRoIG9mIGl0cyBvd24gLSBhbHJlYWR5XFxuK3VubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxcbitvcGVuIGl0IGFuZCB3cml0ZSBgYC9wcm9jL3NlbGYvZmQvTmBgLlxcbitcXG4rVGhlIGBgbG9hZGBgIHByb2dyYW0gdGhlbiBzZWxlY3RzIG9uZSBwZXIgZXhlYyBieSBuYW1lIHdpdGggdGhlXFxuK2BgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKClgYCBrZnVuYywgYW5kIGV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIHRoZVxcbitmaWxlIHRoYXQgd2FzIG9wZW5lZC4gVGhlIHBhdGggZGVjaWRlcyB3aGljaCBmaWxlIGlzIGJvdW5kIGFuZCBub3RoaW5nXFxuK2Vsc2U6IGl0IGlzIG5vdCByZXNvbHZlZCBhZ2FpbiwgaW4gYW55IG5hbWVzcGFjZSwgc28gd2hhdCBpdCBob2xkcyBsYXRlciAtXFxuK29yIHdoYXQgaXQgaG9sZHMgaW4gdGhlIG5hbWVzcGFjZSBvZiB3aG9ldmVyIHJ1bnMgdGhlIGJpbmFyeSAtIG5vIGxvbmdlclxcbitkZWNpZGVzIGFueXRoaW5nLlxcbitcXG4rRW5hYmxpbmcgdGhlIGVudHJ5IGVuZHMgdGhpcy4gSXRzIGludGVycHJldGVycyBhcmUgcmVhZCBhdCBleGVjIHRpbWUgd2l0aFxcbitub3RoaW5nIGJ1dCBhIHJlZmVyZW5jZSBoZWxkIG9uIHRoZSBlbnRyeSwgc28gYW4gZW50cnkgdGhhdCBoYXMgZXZlciBiZWVuXFxuK21hdGNoYWJsZSBjYW4gbmV2ZXIgaGF2ZSBpdHMgc2V0IGNoYW5nZWQgYWdhaW46IHRoZSBmaXJzdCBgYDFgYCBzZWFscyBpdCxcXG4rZnJvbSB0aGVuIG9uIGBgK2BgIGlzIHJlZnVzZWQgd2l0aCBgYC1FQlVTWWBgLCBhbmQgYW4gZW50cnkgcmVnaXN0ZXJlZFxcbit3aXRob3V0IGBgRGBgIGlzIHNlYWxlZCBmcm9tIHRoZSBzdGFydC4gQmluZGluZyBhIG5hbWUgdHdpY2UgaXMgcmVmdXNlZFxcbit3aXRoIGBgLUVFWElTVGBgLlxcbitcXG4rU2VsZWN0aW9uIGlzIGJ5IG5hbWUgc28gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGhlIHByb2dyYW0gbmVlZCBub3RcXG4rYWdyZWUgb24gYW4gb3JkZXIsIGFuZCBzbyB0aGF0IGEgaGFuZGxlciBpcyBub3QgdGllZCB0byB3aGVyZSBhIGRpc3RyaWJ1dGlvblxcbitwdXRzIGl0cyBpbnRlcnByZXRlcnMuIEEgbmFtZSBpcyBhIHNpbmdsZSB3b3JkIG9mIHByaW50YWJsZSBBU0NJSSwgYXQgbW9zdFxcbiszMiBjaGFyYWN0ZXJzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBnaXZlcyB0aGUgcHJvZ3JhbSBgYC1FTk9FTlRgYCxcXG4rd2hpY2ggaXQgY2FuIGFjdCBvbiBvciByZXR1cm4uIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIGl0IHdhc1xcbityZWdpc3RlcmVkIHVuZGVyLCBhbmQgdGhlIGVudHJ5IHJlcG9ydHMgd2hhdCBpdCBib3VuZDo6XFxuK1xcbisgICAgJCBjYXQgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3FlbXVcXG4rICAgIGVuYWJsZWRcXG4rICAgIGJwZiBteV9oYW5kbGVyXFxuKyAgICBicGYtaW50ZXJwcmV0ZXIgYWFyY2g2NCAvdXNyL2Jpbi9xZW11LWFhcmNoNjRcXG4rICAgIGJwZi1pbnRlcnByZXRlciBhcm0gL3Vzci9iaW4vcWVtdS1hcm1cXG4rICAgIGZsYWdzOlxcbitcXG4rVGhlIHBhdGggcmVwb3J0ZWQgaXMgdGhlIG9uZSB0aGUgaW50ZXJwcmV0ZXIgd2FzIGJvdW5kIHVuZGVyLCB3aGljaCBuYW1lZFxcbit0aGUgZmlsZSBhdCB0aGF0IG1vbWVudDsgaXQgaXMgbm90IHJlLXJlc29sdmVkLCBzbyBpdCBpcyBhIHJlY29yZCBvZiB3aGF0XFxuK3dhcyBib3VuZCByYXRoZXIgdGhhbiBhIHByb21pc2UgYWJvdXQgd2hhdCB0aGF0IHBhdGggaG9sZHMgbm93LlxcbiBcXG4gVGhlIGBgbG9hZGBgIHByb2dyYW0gY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBhcmd1bWVudCB0byB0aGUgaW50ZXJwcmV0ZXIgd2l0aFxcbiB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnBfYXJnKClgYCBrZnVuYy4gSXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGVcXG5AQCAtMjI0LDggKzI4NiwxMSBAQCBoYW5kbGVyIGNhbiBkZWNpZGUgdGhlbSBkaWZmZXJlbnRseSBmb3IgZWFjaCBiaW5hcnkgaXQgaGFuZGxlczpcXG4gICBgYFBUX0lOVEVSUGBgIGFuZCBydW5zIHRoZSBiaW5hcnkgYXMgYSBmdWxseSBuYXRpdmUgZXhlYyAodGhlIGBgTGBgXFxuICAgZmxhZykuIEl0IGV4Y2x1ZGVzIHRoZSBvdGhlciBmbGFncyBhbmQgYSBzdGFnZWQgaW50ZXJwcmV0ZXIgYXJndW1lbnQuXFxuIFxcbi1CZWNhdXNlIHRoZXNlIGFyZSBwcm9ncmFtIGNob2ljZXMsIGEgYGBCYGAgZW50cnkgY2FycmllcyBubyBmbGFncyBpbiB0aGVcXG4tcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCAocHJlLW9wZW4gYSBmaXhlZCBpbnRlcnByZXRlcikgaGFzIG5vIG1lYW5pbmcgZm9yIGl0LlxcbitCZWNhdXNlIHRoZXNlIGFyZSBwcm9ncmFtIGNob2ljZXMsIGEgYGBCYGAgZW50cnkgY2FycmllcyBubyBpbnZvY2F0aW9uXFxuK2ZsYWdzIGluIHRoZSByZWdpc3RlciBzdHJpbmc7IGBgRmBgIGhhcyBub25lIHRvIHNwZWxsIGZvciBpdCBlaXRoZXIsIHNpbmNlXFxuK3RoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgYWxyZWFkeSBwcmUtb3BlbiB3aGF0IGBgRmBgIHdvdWxkLiBUaGVcXG4rcmVnaXN0cmF0aW9uIGRpcmVjdGl2ZSBgYERgYCBpcyB0aGUgZXhjZXB0aW9uOiBpdCBkZWNpZGVzIGhvdyB0aGUgZW50cnlcXG4rc3RhcnRzIG91dCwgbm90IGhvdyB0aGUgaW50ZXJwcmV0ZXIgaXMgaW52b2tlZC5cXG4gXFxuIEhhbmRsZXJzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCB3YXNcXG4gcmVnaXN0ZXJlZCBpbiwgZmFsbGluZyBiYWNrIHRvIGFuY2VzdG9yIG5hbWVzcGFjZXMsIG1pcnJvcmluZyBob3dcXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcXG5pbmRleCA3MDdmOGExNGY4YTYzLi5hZDhjNGY2NGJmMTAyIDEwMDY0NFxcbi0tLSBhL2ZzL2JpbmZtdF9taXNjLmNcXG4rKysgYi9mcy9iaW5mbXRfbWlzYy5jXFxuQEAgLTI0LDYgKzI0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tzdHJ0b3guaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWFnaWMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJpbnRrLmhcXHUwMDNlXFxuQEAgLTM3LDYgKzM5LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4rXFxuIC8qIEVudHJ5IHN0YXR1cyBhbmQgbWF0Y2ggdHlwZSBiaXQgbnVtYmVycy4gKi9cXG4gZW51bSBiaW5mbXRfbWlzY19lbnRyeV9iaXRzIHtcXG4gXFx0TUlTQ19GTVRfRU5BQkxFRF9CSVRcXHQ9IDAsXFxuQEAgLTUyLDggKzU2LDE3IEBAIGVudW0gYmluZm10X21pc2NfZW50cnlfZmxhZ3Mge1xcbiBcXHRNSVNDX0ZNVF9PUEVOX0ZJTEVcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAyOCksXFxuIFxcdE1JU0NfRk1UX1RSQU5TUEFSRU5UXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMjcpLFxcbiBcXHRNSVNDX0ZNVF9MT0FERVJcXHRcXHQ9ICgxVSBcXHUwMDNjXFx1MDAzYyAyNiksXFxuK1xcdE1JU0NfRk1UX0RJU0FCTEVEXFx0PSAoMVUgXFx1MDAzY1xcdTAwM2MgMjUpLFxcbiB9O1xcbiBcXG4rLyogVGhlIGZsYWdzIHRoYXQgc2hhcGUgdGhlIGludm9jYXRpb247IGEgJ0InIGhhbmRsZXIgcGlja3MgdGhvc2UgcGVyIGV4ZWMuICovXFxuKyNkZWZpbmUgTUlTQ19GTVRfSU5WT0NBVElPTl9GTEFHUyAoTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgTUlTQ19GTVRfT1BFTl9CSU5BUlkgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgTUlTQ19GTVRfQ1JFREVOVElBTFMgfFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0ICAgTUlTQ19GTVRfT1BFTl9GSUxFIHxcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCAgIE1JU0NfRk1UX1RSQU5TUEFSRU5UIHxcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdCAgIE1JU0NfRk1UX0xPQURFUilcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAtIGEgZmxhZyBjaGFyYWN0ZXIgb2YgdGhlIHJlZ2lzdGVyIHN0cmluZ1xcbiAgKiBAYzogdGhlIGNoYXJhY3RlciB1c2Vyc3BhY2Ugd3JpdGVzIGFuZCByZWFkcyBiYWNrXFxuQEAgLTc1LDYgKzg4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19mbGFnIG1pc2NfZmxhZ3NbXSA9IHtcXG4gXFx0eyAnRicsIE1JU0NfRk1UX09QRU5fRklMRSxcXHQwLFxcdFxcdFxcdFxcXCJvcGVuIGludGVycHJldGVyIGZpbGUgbm93XFxcIlxcdH0sXFxuIFxcdHsgJ1QnLCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcXHRNSVNDX0ZNVF9PUEVOX0JJTkFSWSxcXHRcXFwidHJhbnNwYXJlbnRcXFwiXFx0XFx0XFx0fSxcXG4gXFx0eyAnTCcsIE1JU0NfRk1UX0xPQURFUixcXHRcXHQwLFxcdFxcdFxcdFxcXCJsb2FkZXIgc3Vic3RpdHV0aW9uXFxcIlxcdFxcdH0sXFxuK1xcdHsgJ0QnLCBNSVNDX0ZNVF9ESVNBQkxFRCxcXHQwLFxcdFxcdFxcdFxcXCJyZWdpc3RlciBkaXNhYmxlZFxcXCJcXHRcXHR9LFxcbiB9O1xcbiBcXG4gLyogTG9vayB1cCBhIGZsYWcgY2hhcmFjdGVyLCBOVUxMIGlmIEBjIGlzIG5vdCBvbmUuICovXFxuQEAgLTk2LDkgKzExMCw5IEBAIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSB7XFxuIFxcdGNvbnN0IGNoYXIgKmludGVycHJldGVyO1xcdC8qIGZpbGVuYW1lIG9mIGludGVycHJldGVyICovXFxuIFxcdGNoYXIgKm5hbWU7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4tXFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpicGZfb3BzO1xcdC8qIGJwZi1iYWNrZWQgaGFuZGxlciAoJ0InKSAqL1xcbiBcXHRjb25zdCBjaGFyICpicGZfb3BzX25hbWU7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJwcztcXHQvKiB0aGUgaW50ZXJwcmV0ZXJzIGl0IGJvdW5kICovXFxuIFxcdHJlZmNvdW50X3QgdXNlcnM7XFx0XFx0Lyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovXFxuIFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuIFxcdGNoYXIgYnVmW107XFx0XFx0XFx0LyogcmVnaXN0ZXIgc3RyaW5nLCBmaWVsZHMgcG9pbnQgaW4gaGVyZSAqL1xcbkBAIC0xNzUsNyArMTg5LDEyIEBAIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcdC8qIFdhbGsgYWxsIHRoZSByZWdpc3RlcmVkIGhhbmRsZXJzLiAqL1xcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXMsIG5vZGUsXFxuIFxcdFxcdFxcdFxcdCBzcmN1X3JlYWRfbG9ja19oZWxkKFxcdTAwMjZibV9lbnRyaWVzX3NyY3UpKSB7XFxuLVxcdFxcdC8qIE1ha2Ugc3VyZSB0aGlzIG9uZSBpcyBjdXJyZW50bHkgZW5hYmxlZC4gKi9cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTWFrZSBzdXJlIHRoaXMgb25lIGlzIGN1cnJlbnRseSBlbmFibGVkLiBBbiBlbnRyeSBlbnRlcnNcXG4rXFx0XFx0ICogdGhlIGxpc3QgYXQgbW9zdCBvbmNlIGFuZCBvbmx5IHdob2xlOiBpdHMgY29uZmlndXJhdGlvbiBpc1xcbitcXHRcXHQgKiBvcmRlcmVkIGJlZm9yZSB0aGUgcmN1IGluc2VydGlvbiB0aGF0IG1ha2VzIGl0IHZpc2libGVcXG4rXFx0XFx0ICogaGVyZS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGlmICghdGVzdF9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG5AQCAtMjE2LDYgKzIzNSwxMDggQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG4gXFx0cmV0dXJuIHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWVcXG4rICogQGludGVycHM6IHRoZSBpbnRlcnByZXRlcnMgdGhlIG1hdGNoZWQgZW50cnkgd2FzIHJlZ2lzdGVyZWQgd2l0aFxcbisgKiBAbmFtZTogdGhlIG5hbWUgdG8gbG9vayBmb3JcXG4rICpcXG4rICogUmV0dXJuOiB0aGUgaW50ZXJwcmV0ZXIgb24gc3VjY2VzcywgTlVMTCBpZiBAaW50ZXJwcyBoYXMgbm9uZSBieSB0aGF0IG5hbWVcXG4rICovXFxuK2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxcbitiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZXJwLCBpbnRlcnBzLCBsaXN0KVxcbitcXHRcXHRpZiAoIXN0cmNtcChpbnRlcnAtXFx1MDAzZW5hbWUsIG5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gaW50ZXJwO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rLyogVW5kbyB0aGUgb3Blbl9leGVjKCkgYSBwcmUtb3BlbmVkIGludGVycHJldGVyIGZpbGUgY2FtZSBmcm9tLiAqL1xcbitzdGF0aWMgdm9pZCBjbG9zZV9pbnRlcnBfZmlsZShzdHJ1Y3QgZmlsZSAqZilcXG4re1xcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoZikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xcbitcXHRmaWxwX2Nsb3NlKGYsIE5VTEwpO1xcbit9XFxuK1xcbitERUZJTkVfRlJFRShjbG9zZV9pbnRlcnBfZmlsZSwgc3RydWN0IGZpbGUgKiwgY2xvc2VfaW50ZXJwX2ZpbGUoX1QpKVxcbitcXG4rLypcXG4rICogT3BlbiBhbiBpbnRlcnByZXRlciBAcGF0aCBmb3IgZXhlY3V0aW9uOiBub3csIGluIHRoZSB3cml0ZXIncyBjb250ZXh0LFxcbisgKiBhbmQgLSBzaW5jZSBiaW5mbXRfbWlzYyBtb3VudHMgY2FuIGJlIHVucHJpdmlsZWdlZCAtIHdpdGggQGNyZWQsIHRoZVxcbisgKiBjcmVkZW50aWFscyB0aGUgY29udHJvbCBmaWxlIGJlaW5nIHdyaXR0ZW4gd2FzIG9wZW5lZCB3aXRoLCBub3QgdGhlXFxuKyAqIHdyaXRlcidzIG93bi5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl9pbnRlcnBfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRzdHJ1Y3QgZmlsZSAqZjtcXG4rXFxuK1xcdHNjb3BlZF93aXRoX2NyZWRzKGNyZWQpXFxuK1xcdFxcdGYgPSBvcGVuX2V4ZWMocGF0aCk7XFxuK1xcdGlmIChJU19FUlIoZikpXFxuK1xcdFxcdHByX25vdGljZShcXFwicmVnaXN0ZXI6IGZhaWxlZCB0byBpbnN0YWxsIGludGVycHJldGVyICVzXFxcXG5cXFwiLCBwYXRoKTtcXG4rXFx0cmV0dXJuIGY7XFxuK31cXG4rXFxuKy8qIFJlbGVhc2UgdGhlIGludGVycHJldGVycyBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLiAqL1xcbitzdGF0aWMgdm9pZCBlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSlcXG4re1xcbitcXHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnAsICp0bXA7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW50ZXJwLCB0bXAsIFxcdTAwMjZlLVxcdTAwM2VpbnRlcnBzLCBsaXN0KSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZpbnRlcnAtXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRjbG9zZV9pbnRlcnBfZmlsZShpbnRlcnAtXFx1MDAzZWZpbGUpO1xcbitcXHRcXHRrZnJlZShpbnRlcnApO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qKlxcbisgKiBlbnRyeV9hdHRhY2hfaW50ZXJwcmV0ZXIgLSBiaW5kIGFuIG9wZW5lZCBpbnRlcnByZXRlciB0byBAZVxcbisgKiBAZTogZW50cnkgYmVpbmcgY29uZmlndXJlZFxcbisgKiBAbmFtZTogbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHdpbGwgc2VsZWN0IGl0IGJ5OyBlbXB0eSBmb3IgdGhlIGZpeGVkXFxuKyAqICAgICAgICBpbnRlcnByZXRlciBvZiBhIHN0YXRpYyBlbnRyeVxcbisgKiBAcGF0aDogdGhlIHBhdGggQGYgd2FzIG9wZW5lZCBmcm9tXFxuKyAqIEBmOiB0aGUgaW50ZXJwcmV0ZXIsIG9wZW5lZCBmb3IgZXhlY3V0aW9uXFxuKyAqXFxuKyAqIEV2ZXJ5IGV4ZWMgcnVucyBhIGNsb25lIG9mIEBmLCBzbyB0aGUgcGF0aCBkZWNpZGVkIHdoaWNoIGZpbGUgaXMgYm91bmRcXG4rICogYW5kIG5vdGhpbmcgZWxzZTogaXQgaXMgbm90IHJlc29sdmVkIGFnYWluLCBpbiBhbnkgbmFtZXNwYWNlLlxcbisgKlxcbisgKiBUaGUgY2FsbGVyIGhhcyB0byBoYXZlIHZhbGlkYXRlZCBAbmFtZSBhbmQgQHBhdGgsIGVzdGFibGlzaGVkIHRoYXQgQGVcXG4rICogY2Fubm90IGJlIG1hdGNoZWQgeWV0LCBhbmQgb3ducyBAZiB1bnRpbCB0aGlzIHN1Y2NlZWRzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXFxuKyAqL1xcbitzdGF0aWMgaW50IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZpbGUgKmYpXFxuK3tcXG4rXFx0c2l6ZV90IG5sZW4gPSBzdHJsZW4obmFtZSksIHBsZW4gPSBzdHJsZW4ocGF0aCk7XFxuK1xcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcXG4rXFxuK1xcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcywgbmFtZSkpXFxuK1xcdFxcdHJldHVybiAtRUVYSVNUO1xcbitcXHRpZiAobGlzdF9jb3VudF9ub2RlcyhcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcykgXFx1MDAzZT0gQklORk1UX01JU0NfSU5URVJQX01BWClcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcbitcXHQvKiBPbmUgYWxsb2NhdGlvbiwgYm90aCBzdHJpbmdzIGluIGl0LCBsaWtlIHRoZSBlbnRyeSdzIG93biBidWZmZXIuICovXFxuK1xcdGludGVycCA9IGttYWxsb2Moc3RydWN0X3NpemUoaW50ZXJwLCBuYW1lLCBubGVuICsgcGxlbiArIDIpLFxcbitcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCFpbnRlcnApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aW50ZXJwLVxcdTAwM2VwYXRoID0gaW50ZXJwLVxcdTAwM2VuYW1lICsgbmxlbiArIDE7XFxuK1xcdHN0cnNjcHkoaW50ZXJwLVxcdTAwM2VuYW1lLCBuYW1lLCBubGVuICsgMSk7XFxuK1xcdHN0cnNjcHkoaW50ZXJwLVxcdTAwM2VuYW1lICsgbmxlbiArIDEsIHBhdGgsIHBsZW4gKyAxKTtcXG4rXFx0aW50ZXJwLVxcdTAwM2VmaWxlID0gZjtcXG4rXFx0LyogUHVibGlzaCB0aGUgbm9kZTogYSBsb2NrbGVzcyBjYXQgbWF5IGJlIHdhbGtpbmcgdGhlIGxpc3QuICovXFxuK1xcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZpbnRlcnAtXFx1MDAzZWxpc3QsIFxcdTAwMjZlLVxcdTAwM2VpbnRlcnBzKTtcXG4rXFx0cHJfZGVidWcoXFxcInJlZ2lzdGVyOiBpbnRlcnByZXRlcjogJXMgeyVzfVxcXFxuXFxcIiwgbmFtZSwgcGF0aCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnksIHJjdSk7XFxuQEAgLTIzMiwyMSArMzUzLDM2IEBAIHN0YXRpYyB2b2lkIGJtX2VudHJ5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbiAgKlxcbiAgKiBGcmVlIGVudHJ5IHN5bmNpbmcgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgYW5kIGRlZmVyIGZpbmFsIGZyZWUgdG9cXG4gICogbG9hZF9taXNjX2JpbmFyeSgpIGluIGNhc2UgaXQgaXMgdXNpbmcgdGhlIGJpbmFyeSB0eXBlIGhhbmRsZXIgd2Ugd2VyZVxcbi0gKiByZXF1ZXN0ZWQgdG8gcmVtb3ZlLlxcbisgKiByZXF1ZXN0ZWQgdG8gcmVtb3ZlLiBBbHNvIHRoZSB0ZWFyZG93biBmb3IgYSByZWdpc3RyYXRpb24gdGhhdCBmYWlsc1xcbisgKiBiZWZvcmUgYWRkX2VudHJ5KCkgcHVibGlzaGVzIHRoZSBlbnRyeS5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXFxuIHtcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZlLVxcdTAwM2V1c2VycykpIHtcXG4tXFx0XFx0aWYgKGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfT1BFTl9GSUxFKSB7XFxuLVxcdFxcdFxcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhlLVxcdTAwM2VpbnRlcnBfZmlsZSk7XFxuLVxcdFxcdFxcdGZpbHBfY2xvc2UoZS1cXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGVudHJ5X3B1dF9pbnRlcnByZXRlcnMoZSk7XFxuIFxcdFxcdC8qIFdhbGtlcnMgbWF5IHN0aWxsIGRlcmVmZXJlbmNlIHRoaXMgZW50cnksIGV2ZW4gc2xlZXBpbmcuICovXFxuIFxcdFxcdGNhbGxfc3JjdShcXHUwMDI2Ym1fZW50cmllc19zcmN1LCBcXHUwMDI2ZS1cXHUwMDNlcmN1LCBibV9lbnRyeV9mcmVlX3JjdSk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tREVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgaWYgKF9UKSBwdXRfYmluZm10X2hhbmRsZXIoX1QpKVxcbitERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBwdXRfYmluZm10X2hhbmRsZXIoX1QpKVxcbitcXG4rLyogRHJvcCBldmVyeXRoaW5nIGEgbG9hZCBwcm9ncmFtIHN0YWdlZCBmb3IgdGhpcyBleGVjLiAqL1xcbitzdGF0aWMgdm9pZCBkcm9wX3N0YWdlZF9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4re1xcbitcXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwKTtcXG4rXFx0YnBybS1cXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XFxuK1xcdGtmcmVlKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfYXJnKTtcXG4rXFx0YnBybS1cXHUwMDNlYnBmX2ludGVycF9hcmcgPSBOVUxMO1xcbitcXHRpZiAoYnBybS1cXHUwMDNlYnBmX2ludGVycF9maWxlKSB7XFxuK1xcdFxcdGZwdXQoYnBybS1cXHUwMDNlYnBmX2ludGVycF9maWxlKTtcXG4rXFx0XFx0YnBybS1cXHUwMDNlYnBmX2ludGVycF9maWxlID0gTlVMTDtcXG4rXFx0fVxcbitcXHRicHJtLVxcdTAwM2VicGZfZmxhZ3MgPSAwO1xcbit9XFxuIFxcbiAvKipcXG4gICogY3VycmVudF9iaW5mbXRfbWlzYyAtIGdldCB0aGUgYmluZm10X21pc2MgaW5zdGFuY2Ugb2YgdGhlIGNhbGxlcidzIHVzZXIgbmFtZXNwYWNlXFxuQEAgLTI4MSw3ICs0MTcsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICpjdXJyZW50X2JpbmZtdF9taXNjKHZvaWQpXFxuICAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxcbiAgKlxcbiAgKiBBIHN0YXRpYyBlbnRyeSBjYXJyaWVzIGl0cyBpbnRlcnByZXRlciBwYXRoLCBmb3IgYSAnQicgZW50cnkgdGhlXFxuLSAqIGhhbmRsZXIncyBsb2FkIHByb2dyYW0gc2VsZWN0cyBpdC4gVGhlIG1hdGNoIGlzIGNvbW1pdHRlZCwgc28gYSBmYWlsaW5nXFxuKyAqIGhhbmRsZXIncyBsb2FkIHByb2dyYW0gc2VsZWN0cyBpdCwgZWl0aGVyIGJ5IHBhdGggb3IgYnkgdGhlIG5hbWUgb2Ygb25lXFxuKyAqIG9mIHRoZSBpbnRlcnByZXRlcnMgdGhlIGVudHJ5IGJvdW5kLiBUaGUgbWF0Y2ggaXMgY29tbWl0dGVkLCBzbyBhIGZhaWxpbmdcXG4gICogcHJvZ3JhbSBmYWlscyB0aGUgZXhlYy5cXG4gICpcXG4gICogUmV0dXJuOiB0aGUgaW50ZXJwcmV0ZXIgb24gc3VjY2VzcywgYW4gRVJSX1BUUiBvbiBmYWlsdXJlXFxuQEAgLTI5MSwxNSArNDI4LDIwIEBAIHN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbiB7XFxuIFxcdGludCByZXR2YWw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBEcm9wIHdoYXQgYSBwcmV2aW91cyBjaGFpbiBsZXZlbCBzdGFnZWQgYmVmb3JlIGFueXRoaW5nIGNhbiBwaWNrIGl0XFxuK1xcdCAqIHVwLiBBIHN0YXRpYyBlbnRyeSBzdGFnZXMgbm90aGluZyBidXQgY29uc3VtZXMgYSBzdGFnZWQgZmlsZSBqdXN0XFxuK1xcdCAqIGxpa2UgYSAnQicgZW50cnkgZG9lcy5cXG4rXFx0ICovXFxuK1xcdGRyb3Bfc3RhZ2VkX3NlbGVjdGlvbihicHJtKTtcXG4rXFxuIFxcdGlmICghdGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0cmV0dXJuIGUtXFx1MDAzZWludGVycHJldGVyO1xcbiBcXG4tXFx0LyogRHJvcCBhbnkgaW50ZXJwcmV0ZXIgb3IgZmxhZ3MgYSBwcmV2aW91cyBjaGFpbiBsZXZlbCBzdGFnZWQuICovXFxuLVxcdGtmcmVlKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnApO1xcbi1cXHRicHJtLVxcdTAwM2VicGZfaW50ZXJwID0gTlVMTDtcXG4tXFx0YnBybS1cXHUwMDNlYnBmX2ZsYWdzID0gMDtcXG4tXFxuK1xcdC8qIFRoZSBpbnRlcnByZXRlcnMgdGhpcyBlbnRyeSBsZXRzIHRoZSBwcm9ncmFtIGNob29zZSBmcm9tLiAqL1xcbitcXHRicHJtLVxcdTAwM2VicGZfaW50ZXJwcyA9IFxcdTAwMjZlLVxcdTAwM2VpbnRlcnBzO1xcbiBcXHRyZXR2YWwgPSBlLVxcdTAwM2VicGZfb3BzLVxcdTAwM2Vsb2FkKGJwcm0pO1xcbitcXHRicHJtLVxcdTAwM2VicGZfaW50ZXJwcyA9IE5VTEw7XFxuIFxcdGlmIChyZXR2YWwpIHtcXG4gXFx0XFx0LyogS2VlcCBhIHByb2dyYW0tc3VwcGxpZWQgZXJyb3Igd2l0aGluIGVycm5vIHJhbmdlLiAqL1xcbiBcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2UgMCB8fCByZXR2YWwgXFx1MDAzYyAtTUFYX0VSUk5PKVxcbkBAIC0zMTcsOSArNDU5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuIFxcbiBkcm9wX3N0YWdlZDpcXG4gXFx0LyogQSBmYWlsaW5nIGxvYWQgbGVhdmVzIG5vdGhpbmcgYmVoaW5kIGZvciBsYXRlciBlbnRyaWVzLiAqL1xcbi1cXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwX2FyZyk7XFxuLVxcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfYXJnID0gTlVMTDtcXG4tXFx0YnBybS1cXHUwMDNlYnBmX2ZsYWdzID0gMDtcXG4rXFx0ZHJvcF9zdGFnZWRfc2VsZWN0aW9uKGJwcm0pO1xcbiBcXHRyZXR1cm4gRVJSX1BUUihyZXR2YWwpO1xcbiB9XFxuIFxcbkBAIC0zNjQsMjMgKzUwNCwzNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4gLyoqXFxuICAqIGVudHJ5X29wZW5faW50ZXJwcmV0ZXIgLSBvcGVuIHRoZSBlbnRyeSdzIGludGVycHJldGVyIGZvciBleGVjdXRpb25cXG4gICogQGU6IG1hdGNoZWQgYmluYXJ5IHR5cGUgaGFuZGxlclxcbisgKiBAYnBybTogYmluYXJ5IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWRcXG4gICogQGludGVycHJldGVyOiB0aGUgaW50ZXJwcmV0ZXIgc2VsZWN0ZWQgZm9yIHRoaXMgZXhlY1xcbiAgKlxcbiAgKiBBbiAnRicgZW50cnkgaGFuZHMgb3V0IGEgY2xvbmUgb2YgdGhlIGZpbGUgaXQgcHJlLW9wZW5lZCBhdCByZWdpc3RyYXRpb24sXFxuLSAqIGFueSBvdGhlciBlbnRyeSBvcGVucyB0aGUgc2VsZWN0ZWQgcGF0aC5cXG4rICogYW5kIHNvIGRvZXMgYSAnQicgZW50cnkgd2hvc2UgbG9hZCBwcm9ncmFtIHNlbGVjdGVkIG9uZSBvZiB0aGVcXG4rICogaW50ZXJwcmV0ZXJzIGl0IGJvdW5kLiBBbnkgb3RoZXIgZW50cnkgb3BlbnMgdGhlIHNlbGVjdGVkIHBhdGguXFxuICAqXFxuICAqIFJldHVybjogdGhlIG9wZW5lZCBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBhbiBFUlJfUFRSIG9uIGZhaWx1cmVcXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqZW50cnlfb3Blbl9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmludGVycHJldGVyKVxcbiB7XFxuIFxcdHN0cnVjdCBmaWxlICppbnRlcnBfZmlsZSBfX2ZyZWUoZnB1dCkgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICppbnRlcnA7XFxuK1xcdHN0cnVjdCBmaWxlICpib3VuZDtcXG4gXFx0aW50IHJldHZhbDtcXG4gXFxuLVxcdGlmICghKGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfT1BFTl9GSUxFKSlcXG4rXFx0aWYgKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZSkge1xcbitcXHRcXHRib3VuZCA9IGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZTtcXG4rXFx0fSBlbHNlIGlmIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xcbitcXHRcXHQvKiBBbiAnRicgZW50cnkgcHJlLW9wZW5lZCBleGFjdGx5IG9uZSBpbnRlcnByZXRlci4gKi9cXG4rXFx0XFx0aW50ZXJwID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwLCBsaXN0KTtcXG4rXFx0XFx0Ym91bmQgPSBpbnRlcnAtXFx1MDAzZWZpbGU7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdHJldHVybiBvcGVuX2V4ZWMoaW50ZXJwcmV0ZXIpO1xcbitcXHR9XFxuIFxcbi1cXHRpbnRlcnBfZmlsZSA9IGZpbGVfY2xvbmVfb3BlbihlLVxcdTAwM2VpbnRlcnBfZmlsZSk7XFxuK1xcdGludGVycF9maWxlID0gZmlsZV9jbG9uZV9vcGVuKGJvdW5kKTtcXG4gXFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpXFxuIFxcdFxcdHJldHVybiBpbnRlcnBfZmlsZTtcXG4gXFxuQEAgLTQ5MCw3ICs2NDMsNyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFx0ICogdG8gdGhlIHJlYWwgZm9ybWF0IGluIHRoZSBzYW1lIHJvdW5kLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfTE9BREVSKSB7XFxuLVxcdFxcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGludGVycHJldGVyKTtcXG4rXFx0XFx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgYnBybSwgaW50ZXJwcmV0ZXIpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKGludGVycF9maWxlKSkge1xcbiBcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTtcXG4gXFx0XFx0XFx0LyogRGVjbGluaW5nIGhlcmUgd291bGQgcnVuIHRoZSBiaW5hcnkncyBvd24gUFRfSU5URVJQLiAqL1xcbkBAIC01MTIsNyArNjY1LDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4tXFx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgaW50ZXJwcmV0ZXIpO1xcbitcXHRpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBicHJtLCBpbnRlcnByZXRlcik7XFxuIFxcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihpbnRlcnBfZmlsZSk7XFxuIFxcbkBAIC02ODQsNyArODM3LDcgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBjb3VudClcXG4ge1xcbiBcXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuLVxcdGNoYXIgKmJ1ZiwgKnAsICpmbGFncztcXG4rXFx0Y2hhciAqYnVmLCAqcDtcXG4gXFx0Y2hhciBkZWw7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwicmVnaXN0ZXI6IHJlY2VpdmVkICV6dSBieXRlc1xcXFxuXFxcIiwgY291bnQpO1xcbkBAIC03MDEsNiArODU0LDcgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdHAgPSBidWYgPSBlLVxcdTAwM2VidWY7XFxuIFxcbiBcXHRtZW1zZXQoZSwgMCwgc2l6ZW9mKCplKSk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlLVxcdTAwM2VpbnRlcnBzKTtcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xcbiBcXG5AQCAtNzgwLDE4ICs5MzQsMzAgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFBhcnNlIHRoZSAnZmxhZ3MnIGZpZWxkLiAqL1xcbi1cXHRmbGFncyA9IHA7XFxuIFxcdHAgPSBjaGVja19zcGVjaWFsX2ZsYWdzKHAsIGUpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQSBicGYgaGFuZGxlciBkZWNpZGVzIHRoZSBpbnZvY2F0aW9uIGZsYWdzIHBlciBleGVjIHdpdGhcXG4gXFx0ICogYnBmX2JpbnBybV9zZXRfZmxhZ3MoKSByYXRoZXIgdGhhbiBmaXhpbmcgdGhlbSBhdCByZWdpc3RyYXRpb24sIGFuZFxcbi1cXHQgKiAnRicgKHByZS1vcGVuIGEgZml4ZWQgaW50ZXJwcmV0ZXIpIGlzIG1lYW5pbmdsZXNzIGZvciBpdCwgc28gYSAnQidcXG4tXFx0ICogZW50cnkncyBmbGFncyBmaWVsZCBoYXMgdG8gYmUgZW1wdHkuXFxuK1xcdCAqIHRoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgcHJlLW9wZW4gd2hhdCAnRicgd291bGQgaGF2ZSwgc28gYSAnQidcXG4rXFx0ICogZW50cnkgY2FycmllcyBubyBpbnZvY2F0aW9uIGZsYWdzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjYgcCAhPSBmbGFncylcXG4rXFx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX0lOVk9DQVRJT05fRkxBR1MpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqICdEJyBpcyBhIGRpcmVjdGl2ZSBmb3IgdGhpcyByZWdpc3RyYXRpb24gcmF0aGVyIHRoYW4gYSBsYXN0aW5nXFxuK1xcdCAqIHByb3BlcnR5LCBzbyBjb25zdW1lIGl0OiB0aGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBhbmQgc3RheXNcXG4rXFx0ICogb3V0IG9mIHRoZSBzZWFyY2ggbGlzdCB1bnRpbCAnMScgaXMgd3JpdHRlbiB0byBpdHMgZW50cnkgZmlsZS5cXG4rXFx0ICogU3RheWluZyBvdXQgaXMgd2hhdCBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiBpbnRlcnByZXRlcnM7XFxuK1xcdCAqIHRoZSBmaXJzdCBlbmFibGUgcHVibGlzaGVzIGl0LCBmb3IgZ29vZC5cXG4rXFx0ICovXFxuK1xcdGlmIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX0RJU0FCTEVEKSB7XFxuK1xcdFxcdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5NSVNDX0ZNVF9ESVNBQkxFRDtcXG4rXFx0XFx0Y2xlYXJfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBUcmFuc3BhcmVuY3kgcHJlc2VydmVzIHRoZSB3aG9sZSBhcmd2LCBhcmd2WzBdIGluY2x1ZGVkLiAqL1xcbiBcXHRpZiAoKGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfVFJBTlNQQVJFTlQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAoZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkpXFxuQEAgLTgxNCw2ICs5ODAsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gXFx0ICAgIGUtXFx1MDAzZWludGVycHJldGVyWzBdICE9ICcvJylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcbitcXHQvKiBCb3JuIGhvbGRpbmcgb25lIHJlZmVyZW5jZTsgcHV0X2JpbmZtdF9oYW5kbGVyKCkgaXMgdGhlIHRlYXJkb3duLiAqL1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmUtXFx1MDAzZXVzZXJzLCAxKTtcXG4gXFx0cmV0dXJuIG5vX2ZyZWVfcHRyKGUpO1xcbiB9XFxuIFxcbkBAIC04MjUsMTggKzk5MywxNyBAQCBlbnVtIGJtX2NvbW1hbmQge1xcbiBcXHRCTV9DTURfUkVNT1ZFLFxcdC8qIFxcXCItMVxcXCIgKi9cXG4gfTtcXG4gXFxuKy8qIExvbmdlc3Qgb2YgdGhlIGNvbW1hbmRzIGFib3ZlLCBcXFwiLTFcXFxcblxcXCIuICovXFxuKyNkZWZpbmUgTUFYX0NPTU1BTkRfTEVOR1RIIDNcXG4rXFxuIC8qXFxuICAqIFBhcnNlIHdoYXQgdXNlcnNwYWNlIHdyb3RlIHRvIC9zdGF0dXMgb3IgYW4gZW50cnkgZmlsZTogJzEnIGVuYWJsZXMsXFxuICAqICcwJyBkaXNhYmxlcyBhbmQgJy0xJyByZW1vdmVzIHRoZSBlbnRyeSBvciBhbGwgZW50cmllcy5cXG4gICovXFxuLXN0YXRpYyBpbnQgcGFyc2VfY29tbWFuZChjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXFxuK3N0YXRpYyBpbnQgcGFyc2VfY29tbWFuZChjb25zdCBjaGFyICpzLCBzaXplX3QgY291bnQpXFxuIHtcXG4tXFx0Y2hhciBzWzRdO1xcbi1cXG4tXFx0aWYgKGNvdW50IFxcdTAwM2UgMylcXG4rXFx0aWYgKGNvdW50IFxcdTAwM2UgTUFYX0NPTU1BTkRfTEVOR1RIKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0aWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKVxcbi1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKCFjb3VudClcXG4gXFx0XFx0cmV0dXJuIEJNX0NNRF9JR05PUkU7XFxuIFxcdGlmIChzW2NvdW50IC0gMV0gPT0gJ1xcXFxuJylcXG5AQCAtODUwLDggKzEwMTcsMjYgQEAgc3RhdGljIGludCBwYXJzZV9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4gXFxuKy8qIENvcHkgaW4gYSBjb21tYW5kIGZyb20gYSBmaWxlIHRoYXQgdGFrZXMgbm90aGluZyBlbHNlLCBhbmQgcGFyc2UgaXQuICovXFxuK3N0YXRpYyBpbnQgcmVhZF9jb21tYW5kKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcXG4re1xcbitcXHRjaGFyIHNbTUFYX0NPTU1BTkRfTEVOR1RIICsgMV07XFxuK1xcbitcXHRpZiAoY291bnQgXFx1MDAzZSBzaXplb2YocykgLSAxKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0cmV0dXJuIHBhcnNlX2NvbW1hbmQocywgY291bnQpO1xcbit9XFxuK1xcbiAvKiBnZW5lcmljIHN0dWZmICovXFxuIFxcbisvKiBUaGUgcm9vdCBkaXJlY3RvcnkncyBpbm9kZTsgaXRzIGxvY2sgc2VyaWFsaXplcyBjb25maWd1cmluZyBhbiBpbnN0YW5jZS4gKi9cXG4rc3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbit7XFxuK1xcdHJldHVybiBkX2lub2RlKHNiLVxcdTAwM2VzX3Jvb3QpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibV9zZXFfaGV4KHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3QgdTggKmRhdGEsIGludCBzaXplKVxcbiB7XFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTsgaSsrKVxcbkBAIC04NjcsMTAgKzEwNTIsMjMgQEAgc3RhdGljIGludCBibV9lbnRyeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKVxcbiBcXHRlbHNlXFxuIFxcdFxcdHNlcV9wdXRzKG0sIFxcXCJkaXNhYmxlZFxcXFxuXFxcIik7XFxuIFxcbi1cXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSlcXG4rXFx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xcbitcXG4gXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiYnBmICVzXFxcXG5cXFwiLCBlLVxcdTAwM2VicGZfb3BzLVxcdTAwM2VuYW1lKTtcXG4tXFx0ZWxzZVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBIHN0YWdlZCBlbnRyeSdzIHNldCBjYW4gc3RpbGwgZ3Jvdywgc28gZXZlcnkgYmluZGluZyBpc1xcbitcXHRcXHQgKiByY3UtcHVibGlzaGVkLiBUaGUgb3BlbiBmaWxlIHBpbnMgdGhlIGVudHJ5IGFuZCB3aXRoIGl0XFxuK1xcdFxcdCAqIGV2ZXJ5IG5vZGUsIHNvIHJjdSBpcyBmb3IgdGhlIHRlYXJpbmcsIG5vdCB0aGUgbGlmZXRpbWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGludGVycCwgXFx1MDAyNmUtXFx1MDAzZWludGVycHMsIGxpc3QpXFxuK1xcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcImJwZi1pbnRlcnByZXRlciAlcyAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgaW50ZXJwLVxcdTAwM2VuYW1lLCBpbnRlcnAtXFx1MDAzZXBhdGgpO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiaW50ZXJwcmV0ZXIgJXNcXFxcblxcXCIsIGUtXFx1MDAzZWludGVycHJldGVyKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogcHJpbnQgdGhlIHNwZWNpYWwgZmxhZ3MgKi9cXG4gXFx0c2VxX3B1dHMobSwgXFxcImZsYWdzOiBcXFwiKTtcXG5AQCAtOTkyLDEwICsxMTkwLDExIEBAIHN0YXRpYyB2b2lkIHJlbW92ZV9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuIC8qIFJlbW92ZSBAZSB1bmxlc3MgaXQgd2FzIGFscmVhZHkgcmVtb3ZlZC4gKi9cXG4gc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBkX2lub2RlKHNiLVxcdTAwM2VzX3Jvb3QpO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKHNiKTtcXG4gXFxuIFxcdGlub2RlX2xvY2tfbmVzdGVkKHJvb3QsIElfTVVURVhfUEFSRU5UKTtcXG4tXFx0aWYgKCFobGlzdF91bmhhc2hlZChcXHUwMDI2ZS1cXHUwMDNlbm9kZSkpXFxuK1xcdC8qIEEgc3RhZ2VkIGVudHJ5IGlzIG5vdCBoYXNoZWQ7IHRoZSBkZW50cnkgc2F5cyBpZiBpdCB3YXMgcmVtb3ZlZC4gKi9cXG4rXFx0aWYgKCFkX3VuaGFzaGVkKGUtXFx1MDAzZWRlbnRyeSkpXFxuIFxcdFxcdHJlbW92ZV9iaW5mbXRfaGFuZGxlcihpX2JpbmZtdF9taXNjKHJvb3QpLCBlKTtcXG4gXFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xcbiB9XFxuQEAgLTEwMDQsMTMgKzEyMDMsMjEgQEAgc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2FsbF9lbnRyaWVzKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiB7XFxuLVxcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGRfaW5vZGUoc2ItXFx1MDAzZXNfcm9vdCk7XFxuLVxcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZTtcXG4tXFx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XFxuK1xcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoc2IpO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpjaGlsZCA9IE5VTEw7XFxuIFxcbiBcXHRpbm9kZV9sb2NrX25lc3RlZChyb290LCBJX01VVEVYX1BBUkVOVCk7XFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbmV4dCwgXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXMsIG5vZGUpXFxuLVxcdFxcdHJlbW92ZV9iaW5mbXRfaGFuZGxlcihtaXNjLCBlKTtcXG4rXFx0LypcXG4rXFx0ICogV2FsayB0aGUgZGlyZWN0b3J5IHJhdGhlciB0aGFuIHRoZSBzZWFyY2ggbGlzdDogYSBzdGFnZWQgZW50cnlcXG4rXFx0ICogaXMgaW4gdGhlIGZvcm1lciBidXQgbm90IHlldCBpbiB0aGUgbGF0dGVyLiBUaGUgY29udHJvbCBmaWxlc1xcbitcXHQgKiBjYXJyeSBubyBlbnRyeSBhbmQgc3RheS5cXG4rXFx0ICovXFxuK1xcdHdoaWxlICgoY2hpbGQgPSBmaW5kX25leHRfY2hpbGQoc2ItXFx1MDAzZXNfcm9vdCwgY2hpbGQpKSkge1xcbitcXHRcXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgPSBkX2lub2RlKGNoaWxkKS1cXHUwMDNlaV9wcml2YXRlO1xcbitcXG4rXFx0XFx0aWYgKGUpXFxuK1xcdFxcdFxcdHJlbW92ZV9iaW5mbXRfaGFuZGxlcihtaXNjLCBlKTtcXG4rXFx0fVxcbiBcXHRpbm9kZV91bmxvY2socm9vdCk7XFxuIH1cXG4gXFxuQEAgLTEwNTYsMjAgKzEyNjMsMTM4IEBAIHN0YXRpYyBpbnQgYm1fZW50cnlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIExvbmdlc3QgJytcXHUwMDNjbmFtZVxcdTAwM2UgXFx1MDAzY3BhdGhcXHUwMDNlJyBhIHdyaXRlIGNhbiBzcGVsbCwgYW5kIHdpdGggaXQgdGhlIGxvbmdlc3RcXG4rICogY29tbWFuZCBhbiBlbnRyeSBmaWxlIHRha2VzOiB0aGUgdHdvIGRlbGltaXRlcnMgYW5kIGEgbmV3bGluZSBvbiB0b3Agb2ZcXG4rICogdGhlIHR3byBuYW1lcy5cXG4rICovXFxuKyNkZWZpbmUgTUFYX0JJTkRJTkdfTEVOR1RIIChCSU5GTVRfTUlTQ19JTlRFUlBfTkFNRV9NQVggKyBQQVRIX01BWCArIDMpXFxuK1xcbisvKipcXG4rICogYm1fZW50cnlfYWRkX2ludGVycCAtIGJpbmQgYW5vdGhlciBpbnRlcnByZXRlciB0byBhIHN0YWdlZCBlbnRyeVxcbisgKiBAZTogdGhlIGVudHJ5XFxuKyAqIEBmaWxlOiB0aGUgZW50cnkgZmlsZSBiZWluZyB3cml0dGVuIHRvLCBmb3IgaXRzIGNyZWRlbnRpYWxzXFxuKyAqIEBidWY6IHRoZSAnK1xcdTAwM2NuYW1lXFx1MDAzZSBcXHUwMDNjcGF0aFxcdTAwM2UnIGNvbW1hbmQsIHBhcnNlZCBpbiBwbGFjZSBhbmQgb3duZWQgYnkgdGhlIGNhbGxlclxcbisgKiBAY291bnQ6IGl0cyBsZW5ndGhcXG4rICpcXG4rICogQSAnRCcgZW50cnkgaXMgcmVnaXN0ZXJlZCBvdXRzaWRlIHRoZSBzZWFyY2ggbGlzdCwgd2hpY2ggaXMgd2hhdCBsZWF2ZXNcXG4rICogaXQgb3BlbiB0byBiZWluZyBjb25maWd1cmVkOiBpdCBjYW5ub3QgYmUgbWF0Y2hlZCwgc28gbm8gZXhlYyBjYW4gYmVcXG4rICogaG9sZGluZyBpdHMgaW50ZXJwcmV0ZXJzIGFuZCB0aGUgc2V0IGNhbiBzdGlsbCBncm93LiBJdHMgZmlyc3QgZW5hYmxlXFxuKyAqIHB1Ymxpc2hlcyBpdCBhbmQgZW5kcyB0aGF0LiBPbmUgaW50ZXJwcmV0ZXIgcGVyIHdyaXRlLCB1cCB0b1xcbisgKiBCSU5GTVRfTUlTQ19JTlRFUlBfTUFYIG9mIHRoZW0sIG5vbmUgb2Ygd2hpY2ggaGFzIHRvIGZpdCBpbiBhIHJlZ2lzdGVyXFxuKyAqIHN0cmluZy5cXG4rICpcXG4rICogUmV0dXJuOiBAY291bnQgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBmaWxlICpmIF9fZnJlZShjbG9zZV9pbnRlcnBfZmlsZSkgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2IpO1xcbitcXHRzaXplX3QgbmxlbiwgcGxlbjtcXG4rXFx0Y2hhciAqbmFtZSwgKnBhdGg7XFxuK1xcdGludCByZXR2YWw7XFxuK1xcbitcXHQvKiBTZXR0bGVkIGJlZm9yZSB0aGUgb3BlbjogdHlwZSBpcyBmaXhlZCwgcHVibGljYXRpb24gaXMgcGVybWFuZW50LiAqL1xcbitcXHRpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWhsaXN0X3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZlLVxcdTAwM2Vub2RlKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdC8qICcrXFx1MDAzY25hbWVcXHUwMDNlIFxcdTAwM2NwYXRoXFx1MDAzZSc6IHRoZSBwYXRoIGlzIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3Qgc3BhY2UuICovXFxuK1xcdG5hbWUgPSBidWYgKyAxO1xcbitcXHRwYXRoID0gc3RyY2hyKG5hbWUsICcgJyk7XFxuK1xcdGlmICghcGF0aClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdCpwYXRoKysgPSAnXFxcXDAnO1xcbitcXG4rXFx0cGxlbiA9IHN0cmxlbihwYXRoKTtcXG4rXFx0LyogVGhlIGNvbW1hbmQgaGFzIHRvIGVuZCBhdCB0aGUgd3JpdGUsIGxpa2UgYSByZWdpc3RlciBzdHJpbmcuICovXFxuK1xcdGlmIChwYXRoICsgcGxlbiAhPSBidWYgKyBjb3VudClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChwbGVuIFxcdTAwMjZcXHUwMDI2IHBhdGhbcGxlbiAtIDFdID09ICdcXFxcbicpXFxuK1xcdFxcdHBhdGhbLS1wbGVuXSA9ICdcXFxcMCc7XFxuK1xcdC8qIFJlc29sdmVkIG5vdywgc28gYSByZWxhdGl2ZSBwYXRoIHdvdWxkIG5hbWUgdGhlIHdyaXRlcidzIGN3ZC4gKi9cXG4rXFx0aWYgKHBhdGhbMF0gIT0gJy8nKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdG5sZW4gPSBwYXRoIC0gbmFtZSAtIDE7XFxuK1xcdGlmICghbmxlbiB8fCBubGVuIFxcdTAwM2UgQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0LyogVGhlIG5hbWUgcHJpbnRzIGJldHdlZW4gZGVsaW1pdGVycywgc28ga2VlcCBpdCBhIHByaW50YWJsZSB3b3JkLiAqL1xcbitcXHRmb3IgKGNvbnN0IGNoYXIgKnAgPSBuYW1lOyAqcDsgcCsrKVxcbitcXHRcXHRpZiAoIWlzYXNjaWkoKnApIHx8ICFpc2dyYXBoKCpwKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBPcGVuZWQgYmVmb3JlIHRoZSBsb2NrOiByZXNvbHZpbmcgaXQgbWF5IHdhbGsgdGhpcyB2ZXJ5IGZpbGVzeXN0ZW0uICovXFxuK1xcdGYgPSBvcGVuX2ludGVycF9maWxlKGZpbGUtXFx1MDAzZWZfY3JlZCwgcGF0aCk7XFxuK1xcdGlmIChJU19FUlIoZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGYpO1xcbitcXG4rXFx0aW5vZGVfbG9jayhyb290KTtcXG4rXFx0aWYgKGRfdW5oYXNoZWQoZS1cXHUwMDNlZGVudHJ5KSlcXG4rXFx0XFx0cmV0dmFsID0gLUVOT0VOVDtcXHQvKiByZW1vdmVkIHdoaWxlIHdlIHdlcmUgb3BlbmluZyBpdCAqL1xcbitcXHRlbHNlIGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNmUtXFx1MDAzZW5vZGUpKVxcbitcXHRcXHRyZXR2YWwgPSAtRUJVU1k7XFx0LyogcHVibGlzaGVkIHdoaWxlIHdlIHdlcmUgb3BlbmluZyBpdCAqL1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHZhbCA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBuYW1lLCBwYXRoLCBmKTtcXG4rXFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xcbitcXHRpZiAocmV0dmFsKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbitcXG4rXFx0LyogVGhlIGZpbGUgaXMgb3duZWQgYnkgdGhlIGVudHJ5IG5vdy4gKi9cXG4rXFx0cmV0YWluX2FuZF9udWxsX3B0cihmKTtcXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbiBzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuIFxcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGlub2RlLVxcdTAwM2VpX3ByaXZhdGU7XFxuLVxcdGludCByZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xcbitcXHRjaGFyICpidWYgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHQvKiBBIGJpbmRpbmcgaXMgdGhlIGxvbmdlc3QgY29tbWFuZCB0aGlzIGZpbGUgdGFrZXMuICovXFxuK1xcdGlmIChjb3VudCBcXHUwMDNlIE1BWF9CSU5ESU5HX0xFTkdUSClcXG4rXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4rXFxuK1xcdGJ1ZiA9IG1lbWR1cF91c2VyX251bChidWZmZXIsIGNvdW50KTtcXG4rXFx0aWYgKElTX0VSUihidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihidWYpO1xcbitcXG4rXFx0LyogJytcXHUwMDNjbmFtZVxcdTAwM2UgXFx1MDAzY3BhdGhcXHUwMDNlJyBiaW5kcyBhbiBpbnRlcnByZXRlciwgZXZlcnl0aGluZyBlbHNlIHRvZ2dsZXMuICovXFxuK1xcdGlmIChidWZbMF0gPT0gJysnKVxcbitcXHRcXHRyZXR1cm4gYm1fZW50cnlfYWRkX2ludGVycChlLCBmaWxlLCBidWYsIGNvdW50KTtcXG4rXFxuK1xcdHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmLCBjb3VudCk7XFxuIFxcbiBcXHRzd2l0Y2ggKHJlcykge1xcbiBcXHRjYXNlIEJNX0NNRF9ESVNBQkxFOlxcbiBcXHRcXHRjbGVhcl9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFxcdTAwMjZlLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIEJNX0NNRF9FTkFCTEU6XFxuK1xcdGNhc2UgQk1fQ01EX0VOQUJMRToge1xcbitcXHRcXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBmaXJzdCBlbmFibGUgcHVibGlzaGVzIGEgJ0QnIGVudHJ5IGludG8gdGhlIHNlYXJjaFxcbitcXHRcXHQgKiBsaXN0LCB3aG9sZS4gVGhlIGxvY2sga2VlcHMgdGhhdCBvcmRlcmVkIGFnYWluc3QgYSBzZWNvbmRcXG4rXFx0XFx0ICogZW5hYmxlLCBhZ2FpbnN0IHJlbW92YWwgLSBhIHJlbW92ZWQgZW50cnkgaGFzIG5vdGhpbmcgbGVmdFxcbitcXHRcXHQgKiB0byBwdWJsaXNoIC0gYW5kIGFnYWluc3QgYmluZGluZzogd2hhdCBjYW4gYmUgbWF0Y2hlZCBjYW5cXG4rXFx0XFx0ICogbm8gbG9uZ2VyIGJlIGNvbmZpZ3VyZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpbm9kZV9sb2NrKHJvb3QpO1xcbiBcXHRcXHRzZXRfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRpZiAoaGxpc3RfdW5oYXNoZWQoXFx1MDAyNmUtXFx1MDAzZW5vZGUpIFxcdTAwMjZcXHUwMDI2ICFkX3VuaGFzaGVkKGUtXFx1MDAzZWRlbnRyeSkpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGJpbmZtdF9taXNjICptaXNjID0gaV9iaW5mbXRfbWlzYyhpbm9kZSk7XFxuK1xcbitcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuK1xcdFxcdFxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2ZS1cXHUwMDNlbm9kZSwgXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXMpO1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWlzYy1cXHUwMDNlZW50cmllc19sb2NrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpbm9kZV91bmxvY2socm9vdCk7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgQk1fQ01EX1JFTU9WRTpcXG4gXFx0XFx0Ym1fcmVtb3ZlX2VudHJ5KGUsIGlub2RlLVxcdTAwM2VpX3NiKTtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTExMDYsMTYgKzE0MzEsMTggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4tXFx0cmVmY291bnRfc2V0KFxcdTAwMjZlLVxcdTAwM2V1c2VycywgMSk7XFxuIFxcdGUtXFx1MDAzZWRlbnRyeSA9IGRlbnRyeTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSA9IGU7XFxuIFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZibV9lbnRyeV9vcGVyYXRpb25zO1xcbiBcXG4gXFx0ZF9tYWtlX3BlcnNpc3RlbnQoZGVudHJ5LCBpbm9kZSk7XFxuLVxcdG1pc2MgPSBpX2JpbmZtdF9taXNjKGlub2RlKTtcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzX2xvY2spO1xcbi1cXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmUtXFx1MDAzZW5vZGUsIFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzKTtcXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuK1xcdC8qIEEgJ0QnIGVudHJ5IHN0YXlzIG91dCBvZiB0aGUgc2VhcmNoIGxpc3QgdW50aWwgaXRzIGZpcnN0IGVuYWJsZS4gKi9cXG4rXFx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdG1pc2MgPSBpX2JpbmZtdF9taXNjKGlub2RlKTtcXG4rXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzX2xvY2spO1xcbitcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNmUtXFx1MDAzZW5vZGUsIFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuK1xcdH1cXG4gXFx0c2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTEyMyw5ICsxNDUwLDggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gXFx0XFx0XFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiB7XFxuLVxcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4rXFx0c3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplIF9fZnJlZShwdXRfYmluZm10X2hhbmRsZXIpID0gTlVMTDtcXG4gXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGZpbGVfaW5vZGUoZmlsZSktXFx1MDAzZWlfc2I7XFxuLVxcdHN0cnVjdCBmaWxlICpmID0gTlVMTDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7XFxuQEAgLTExNDIsMzMgKzE0NjgsMjAgQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBOb3cgdGhhdCB3ZSBzdXBwb3J0IHVucHJpdmlsZWdlZCBiaW5mbXRfbWlzYyBtb3VudHMgbWFrZVxcbi1cXHRcXHQgKiBzdXJlIHdlIHVzZSB0aGUgY3JlZGVudGlhbHMgdGhhdCB0aGUgcmVnaXN0ZXIgQGZpbGUgd2FzXFxuLVxcdFxcdCAqIG9wZW5lZCB3aXRoIHRvIGFsc28gb3BlbiB0aGUgaW50ZXJwcmV0ZXIuIEJlZm9yZSB0aGF0IHRoaXNcXG4tXFx0XFx0ICogZGlkbid0IG1hdHRlciBtdWNoIGFzIG9ubHkgYSBwcml2aWxlZ2VkIHByb2Nlc3MgY291bGQgb3Blblxcbi1cXHRcXHQgKiB0aGUgcmVnaXN0ZXIgZmlsZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHNjb3BlZF93aXRoX2NyZWRzKGZpbGUtXFx1MDAzZWZfY3JlZClcXG4tXFx0XFx0XFx0ZiA9IG9wZW5fZXhlYyhlLVxcdTAwM2VpbnRlcnByZXRlcik7XFxuLVxcdFxcdGlmIChJU19FUlIoZikpIHtcXG4tXFx0XFx0XFx0cHJfbm90aWNlKFxcXCJyZWdpc3RlcjogZmFpbGVkIHRvIGluc3RhbGwgaW50ZXJwcmV0ZXIgZmlsZSAlc1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IGUtXFx1MDAzZWludGVycHJldGVyKTtcXG4rXFx0XFx0c3RydWN0IGZpbGUgKmYgPSBvcGVuX2ludGVycF9maWxlKGZpbGUtXFx1MDAzZWZfY3JlZCwgZS1cXHUwMDNlaW50ZXJwcmV0ZXIpO1xcbitcXG4rXFx0XFx0aWYgKElTX0VSUihmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZik7XFxuK1xcdFxcdGVyciA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBcXFwiXFxcIiwgZS1cXHUwMDNlaW50ZXJwcmV0ZXIsIGYpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGNsb3NlX2ludGVycF9maWxlKGYpO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGUtXFx1MDAzZWludGVycF9maWxlID0gZjtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gYWRkX2VudHJ5KGUsIHNiKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRpZiAoZikge1xcbi1cXHRcXHRcXHRleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZik7XFxuLVxcdFxcdFxcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKGUtXFx1MDAzZWJwZl9vcHMpXFxuLVxcdFxcdFxcdGJpbmZtdF9taXNjX3B1dF9vcHMoZS1cXHUwMDNlYnBmX29wcyk7XFxuK1xcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4gXFxuIFxcdC8qIFRoZSBlbnRyeSBpcyBvd25lZCBieSBpdHMgaW5vZGUgbm93LiAqL1xcbiBcXHRyZXRhaW5fYW5kX251bGxfcHRyKGUpO1xcbkBAIC0xMTk3LDcgKzE1MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBibV9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiB7XFxuIFxcdHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYztcXG4tXFx0aW50IHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmZmVyLCBjb3VudCk7XFxuK1xcdGludCByZXMgPSByZWFkX2NvbW1hbmQoYnVmZmVyLCBjb3VudCk7XFxuIFxcbiBcXHRtaXNjID0gaV9iaW5mbXRfbWlzYyhmaWxlX2lub2RlKGZpbGUpKTtcXG4gXFx0c3dpdGNoIChyZXMpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2NfYnBmLmMgYi9mcy9iaW5mbXRfbWlzY19icGYuY1xcbmluZGV4IDkyMDAzZWE2NDBkM2YuLmIyNDZkODg2NDM3YjggMTAwNjQ0XFxuLS0tIGEvZnMvYmluZm10X21pc2NfYnBmLmNcXG4rKysgYi9mcy9iaW5mbXRfbWlzY19icGYuY1xcbkBAIC03LDYgKzcsMTUgQEBcXG4gICogbmFtZXNwYWNlIGl0IHdhcyByZWdpc3RlcmVkIGluLiBBIGJpbmZtdF9taXNjICdCJyBlbnRyeSBhY3RpdmF0ZXMgaXQ6XFxuICAqXFxuICAqICAgZWNobyAnOmVudHJ5OkI6Ojo6XFx1MDAzY2hhbmRsZXItbmFtZVxcdTAwM2U6JyBcXHUwMDNlIFxcdTAwM2NiaW5mbXRfbWlzY1xcdTAwM2UvcmVnaXN0ZXJcXG4rICpcXG4rICogVGhlIGVudHJ5IGNhbiBiaW5kIHRoZSBpbnRlcnByZXRlcnMgdGhlIGhhbmRsZXIgbWF5IHJ1biBpdHMgYmluYXJpZXNcXG4rICogd2l0aCwgZWFjaCBvcGVuZWQgYnkgdGhlIHdyaXRlIHRoYXQgYmluZHMgaXQgYW5kIHNlbGVjdGVkIGJ5IG5hbWUgcGVyXFxuKyAqIGV4ZWMuIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aCAnRCcgaXMgbm90IG1hdGNoYWJsZSB5ZXQsIHdoaWNoIGlzIHdoYXRcXG4rICogbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gdGhlbTpcXG4rICpcXG4rICogICBlY2hvICc6ZW50cnk6Qjo6OjpcXHUwMDNjaGFuZGxlci1uYW1lXFx1MDAzZTpEJyBcXHUwMDNlIFxcdTAwM2NiaW5mbXRfbWlzY1xcdTAwM2UvcmVnaXN0ZXJcXG4rICogICBlY2hvICcrXFx1MDAzY25hbWVcXHUwMDNlIFxcdTAwM2NwYXRoXFx1MDAzZScgXFx1MDAzZSBcXHUwMDNjYmluZm10X21pc2NcXHUwMDNlL2VudHJ5XFxuKyAqICAgZWNobyAxIFxcdTAwM2UgXFx1MDAzY2JpbmZtdF9taXNjXFx1MDAzZS9lbnRyeVxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXFx1MDAzZVxcbkBAIC0xNiw2ICsyNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtOTEsNiArMTAyLDIwIEBAIGJvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0ICAgICAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc3Rfb3BzID09IFxcdTAwMjZicGZfYmluZm10X21pc2Nfb3BzO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZXBsYWNlIHRoZSBzdGFnZWQgaW50ZXJwcmV0ZXIgc2VsZWN0aW9uOiBuYW1pbmcgYSBwYXRoIGRyb3BzIGEgYm91bmRcXG4rICogZmlsZSwgc2VsZWN0aW5nIGEgYm91bmQgaW50ZXJwcmV0ZXIgY2FycmllcyBpdHMgZmlsZSBhbG9uZy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY2hhciAqcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmYpXFxuK3tcXG4rXFx0aWYgKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZSlcXG4rXFx0XFx0ZnB1dChicHJtLVxcdTAwM2VicGZfaW50ZXJwX2ZpbGUpO1xcbitcXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwKTtcXG4rXFx0YnBybS1cXHUwMDNlYnBmX2ludGVycCA9IHBhdGg7XFxuK1xcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZSA9IGY7XFxuK31cXG4rXFxuIF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4gXFxuIC8qKlxcbkBAIC0xMDMsNyArMTI4LDggQEAgX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbiAgKiBiZWZvcmUgcmV0dXJuaW5nIHplcm87IHRoZSB2ZXJpZmllciByZWplY3RzIHRoZSBjYWxsIGZyb20gYW55IG90aGVyXFxuICAqIHByb2dyYW0sIGluY2x1ZGluZyB0aGUgaGFuZGxlcidzIG93biBtYXRjaCBwcm9ncmFtLiBUaGUgcGF0aCBpcyBvcGVuZWRcXG4gICogd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlIGV4ZWMgYWZ0ZXIgdGhlIHByb2dyYW1cXG4tICogcmV0dXJucy5cXG4rICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhblxcbisgKiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmQgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxcbiAgKi9cXG5AQCAtMTI3LDggKzE1Myw1MCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuIFxcdGlmICghaW50ZXJwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGtmcmVlKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnApO1xcbi1cXHRicHJtLVxcdTAwM2VicGZfaW50ZXJwID0gaW50ZXJwO1xcbitcXHRibV9icGZfc3RhZ2Vfc2VsZWN0aW9uKGJwcm0sIGludGVycCwgTlVMTCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwIC0gcnVuIHRoaXMgZXhlYyB1bmRlciBhbiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmRcXG4rICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXFxuKyAqIEBuYW1lOiBuYW1lIHRoZSBpbnRlcnByZXRlciB3YXMgcmVnaXN0ZXJlZCB1bmRlclxcbisgKiBAbmFtZV9fc3o6IHNpemUgb2YgdGhlIEBuYW1lIGJ1ZmZlciwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxcXG4rICpcXG4rICogVG8gYmUgY2FsbGVkIGZyb20gdGhlIGxvYWQgcHJvZ3JhbSBvZiBhIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgaGFuZGxlclxcbisgKiBpbnN0ZWFkIG9mIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpLiBJdCBzZWxlY3RzIG9uZSBvZiB0aGUgaW50ZXJwcmV0ZXJzXFxuKyAqIHRoZSBtYXRjaGVkIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGgsIGVhY2ggb2Ygd2hpY2ggd2FzIG9wZW5lZCBvbmNlIHdoZW5cXG4rICogdGhlIGVudHJ5IHdhcyByZWdpc3RlcmVkLiBOb3RoaW5nIGlzIHJlc29sdmVkIGF0IGV4ZWMgdGltZSwgc28gbm9cXG4rICogZmlsZXN5c3RlbSB2aWV3IGNhbiByZWRpcmVjdCB0aGUgaW50ZXJwcmV0ZXIuXFxuKyAqXFxuKyAqIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIHRoZSBlbnRyeSByZWdpc3RlcmVkIGl0IHVuZGVyLlxcbisgKiBDYWxsaW5nIGl0IGFnYWluIHJlcGxhY2VzIHRoZSBzZWxlY3Rpb24uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PRU5UIGlmIHRoZSBtYXRjaGVkIGVudHJ5IGJvdW5kIG5vIGludGVycHJldGVyXFxuKyAqIG9mIHRoYXQgbmFtZSwgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xcbitcXHRzaXplX3QgbGVuO1xcbitcXHRjaGFyICpwYXRoO1xcbitcXG4rXFx0aWYgKCFuYW1lX19zeilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGxlbiA9IHN0cm5sZW4obmFtZSwgbmFtZV9fc3opO1xcbitcXHRpZiAobGVuID09IG5hbWVfX3N6IHx8ICFsZW4pXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aW50ZXJwID0gYmluZm10X21pc2NfZmluZF9pbnRlcnAoYnBybS1cXHUwMDNlYnBmX2ludGVycHMsIG5hbWUpO1xcbitcXHRpZiAoIWludGVycClcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRwYXRoID0ga3N0cmR1cChpbnRlcnAtXFx1MDAzZXBhdGgsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBhdGgpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Ym1fYnBmX3N0YWdlX3NlbGVjdGlvbihicHJtLCBwYXRoLCBnZXRfZmlsZShpbnRlcnAtXFx1MDAzZWZpbGUpKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTIxMSw2ICsyNzksNyBAQCBfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbiBcXG4gQlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcsIEtGX1NMRUVQQUJMRSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ZsYWdzLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9LRlVOQ1NfRU5EKGJtX2JwZl9rZnVuY19pZHMpXFxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xcbmluZGV4IDg1NjczMWY3OGQwNTQuLmExNGYyOGIxNTYwN2EgMTAwNjQ0XFxuLS0tIGEvZnMvZXhlYy5jXFxuKysrIGIvZnMvZXhlYy5jXFxuQEAgLTE0NzcsNiArMTQ3Nyw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHRpZiAoYnBybS1cXHUwMDNlaW50ZXJwICE9IGJwcm0tXFx1MDAzZWZpbGVuYW1lKVxcbiBcXHRcXHRrZnJlZShicHJtLVxcdTAwM2VpbnRlcnApO1xcbiBcXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwKTtcXG4rXFx0aWYgKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnBfZmlsZSlcXG4rXFx0XFx0ZnB1dChicHJtLVxcdTAwM2VicGZfaW50ZXJwX2ZpbGUpO1xcbiBcXHRrZnJlZShicHJtLVxcdTAwM2VicGZfaW50ZXJwX2FyZyk7XFxuIFxcdGtmcmVlKGJwcm0tXFx1MDAzZWZkcGF0aCk7XFxuIFxcdGtmcmVlKGJwcm0pO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcXG5pbmRleCA0YWJkZmQzNmIzZmE4Li4wNzJlNGIzZGQ3OGQyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaFxcbkBAIC01LDExICs1LDQxIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IGJwZl9wcm9nO1xcbitzdHJ1Y3QgZmlsZTtcXG4gc3RydWN0IGxpbnV4X2JpbnBybTtcXG4gc3RydWN0IHVzZXJfbmFtZXNwYWNlO1xcbiBcXG4gI2RlZmluZSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVggMTZcXG4gXFxuKy8qIExvbmdlc3QgbmFtZSBhICdCJyBlbnRyeSBjYW4gYmluZCBhbiBpbnRlcnByZXRlciB1bmRlci4gKi9cXG4rI2RlZmluZSBCSU5GTVRfTUlTQ19JTlRFUlBfTkFNRV9NQVggMzJcXG4rXFxuKy8qIE1vc3QgaW50ZXJwcmV0ZXJzIG9uZSBlbnRyeSBjYW4gYmluZC4gKi9cXG4rI2RlZmluZSBCSU5GTVRfTUlTQ19JTlRFUlBfTUFYIDEwMFxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgLSBhbiBpbnRlcnByZXRlciBhbiBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoXFxuKyAqIEBsaXN0OiBsaW5rIGluIHRoZSBlbnRyeSdzIGxpc3QsIGluIHJlZ2lzdHJhdGlvbiBvcmRlclxcbisgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluXFxuKyAqIEBwYXRoOiB0aGUgcGF0aCBpdCB3YXMgcmVnaXN0ZXJlZCB1bmRlciwgdXNlZCBhcyB0aGUgbmFtZSB0aGUgaW50ZXJwcmV0ZXJcXG4rICogICAgICAgIHJ1bnMgdW5kZXI7IHN0b3JlZCBhZnRlciBAbmFtZSBpbiB0aGUgc2FtZSBhbGxvY2F0aW9uXFxuKyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWRcXG4rICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljICdGJyBlbnRyeVxcbisgKlxcbisgKiBPd25lZCBieSB0aGUgZW50cnkgYW5kIGxpdmluZyBleGFjdGx5IGFzIGxvbmcgYXMgaXQgZG9lcy4gVGhlIGxpc3QgaGVhZFxcbisgKiBpcyBoYW5kZWQgdG8gdGhlIGhhbmRsZXIncyBsb2FkIHByb2dyYW0gZm9yIHRoZSBkdXJhdGlvbiBvZiBvbmUgZXhlYyxcXG4rICogd2hpY2ggcGlja3Mgb25lIHdpdGggYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKCkuXFxuKyAqL1xcbitzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGU7XFxuK1xcdGNvbnN0IGNoYXJcXHRcXHQqcGF0aDtcXG4rXFx0Y2hhclxcdFxcdFxcdG5hbWVbXTtcXG4rfTtcXG4rXFxuK2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxcbitiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKTtcXG4rXFxuIC8qKlxcbiAgKiBlbnVtIGJwZl9iaW5wcm1fZmxhZ3MgLSBwZXItZXhlYyBpbnZvY2F0aW9uIGZsYWdzIGEgbG9hZCBwcm9ncmFtIGNhbiByZXF1ZXN0XFxuICAqIEBCUEZfQklOUFJNX1BSRVNFUlZFX0FSR1YwOiBrZWVwIHRoZSBjYWxsZXIncyBhcmd2WzBdIChsaWtlIHRoZSAnUCcgZmxhZylcXG5AQCAtNDIsMTAgKzcyLDExIEBAIGVudW0gYnBmX2JpbnBybV9mbGFncyB7XFxuICAqICAgICAgICAgc28gaXQgY2FuIHJlYWQgdGhlIGJpbmFyeSB0byBkZWNpZGUsIGJ1dCB0aGUgdmVyaWZpZXIgcmVqZWN0c1xcbiAgKiAgICAgICAgIHRoZSBpbnRlcnByZXRlciBzZWxlY3Rpb24ga2Z1bmNzIGluIGl0XFxuICAqIEBsb2FkOiAgc2VsZWN0IGFuIGludGVycHJldGVyIGZvciB0aGUgbWF0Y2hlZCBAYnBybSB2aWFcXG4tICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXMgY29tbWl0dGVkLCBzb1xcbi0gKiAgICAgICAgIGEgZmFpbHVyZSBmYWlscyB0aGUgZXhlYyBpbnN0ZWFkIG9mIGZhbGxpbmcgdGhyb3VnaCB0byBsYXRlclxcbi0gKiAgICAgICAgIGVudHJpZXM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0IG1vdmVzIG9uIHRvIHRoZVxcbi0gKiAgICAgICAgIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0c1xcbisgKiAgICAgICAgIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpLCBvciBvbmUgdGhlIGVudHJ5IGJvdW5kIHZpYVxcbisgKiAgICAgICAgIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLCBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXNcXG4rICogICAgICAgICBjb21taXR0ZWQsIHNvIGEgZmFpbHVyZSBmYWlscyB0aGUgZXhlYyBpbnN0ZWFkIG9mIGZhbGxpbmdcXG4rICogICAgICAgICB0aHJvdWdoIHRvIGxhdGVyIGVudHJpZXM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0XFxuKyAqICAgICAgICAgbW92ZXMgb24gdG8gdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0c1xcbiAgKiBAbmFtZTogbmFtZSB0aGF0ICdCJyBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgaGFuZGxlciBieVxcbiAgKi9cXG4gc3RydWN0IGJpbmZtdF9taXNjX29wcyB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcXG5pbmRleCBhMmRhZWNiYjAxZDZhLi5mNjg2YTM3ZjdhMGEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcXG5AQCAtMTQsNyArMTQsMTAgQEAgc3RydWN0IGNvcmVkdW1wX3BhcmFtcztcXG4gXFxuIC8qIEludGVycHJldGVyIHNlbGVjdGlvbiBzdGFnZWQgYnkgYSBicGYgYmluZm10X21pc2MgaGFuZGxlci4gKi9cXG4gc3RydWN0IGJpbmZtdF9taXNjX2JwZiB7XFxuK1xcdC8qIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSBib3VuZCwgc2VsZWN0YWJsZSBieSBuYW1lICovXFxuK1xcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmJwZl9pbnRlcnBzO1xcbiBcXHRjb25zdCBjaGFyICpicGZfaW50ZXJwO1xcdFxcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cXG4rXFx0c3RydWN0IGZpbGUgKmJwZl9pbnRlcnBfZmlsZTtcXHQvKiB0aGUgYm91bmQgaW50ZXJwcmV0ZXIgaXQgc2VsZWN0ZWQgKi9cXG4gXFx0Y29uc3QgY2hhciAqYnBmX2ludGVycF9hcmc7XFx0LyogaW50ZXJwcmV0ZXIgYXJndW1lbnQgZnJvbSBhIGJwZiBoYW5kbGVyICovXFxuIFxcdHU2NCBicGZfZmxhZ3M7XFx0XFx0XFx0LyogZW51bSBicGZfYmlucHJtX2ZsYWdzIGZyb20gYSBicGYgaGFuZGxlciAqL1xcbiB9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbmluZGV4IDM5MGZlMTFhN2JlZGYuLjQxMGM5MzYwNmEwYzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGVcXG5AQCAtMjUsNiArMjUsMTAgQEAgVEVTVF9HRU5fUFJPR1MgKz0gY2hlY2stZXhlY1xcbiAjIG9yIGFuICdGJyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxcbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY19zZWxmcGluXFxuIFxcbisjICdEJyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzXFxuKyMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuIFN0YXRpYyBtYWdpYyBlbnRyeSwgbm8gYnBmIHRvb2xjaGFpbi5cXG4rVEVTVF9HRU5fUFJPR1MgKz0gYmluZm10X21pc2NfZGlzYWJsZWRcXG4rXFxuICMgU3RhdGljICgnVCcgZmxhZykgdHJhbnNwYXJlbnQgYmluZm10X21pc2MgdGVzdDsgdGhlIGFzc2VydGluZyBpbnRlcnByZXRlclxcbiAjIGlzIHNoYXJlZCB3aXRoIHRoZSBicGYgaGFybmVzcydzIHRyYW5zcGFyZW50IGNhc2UuIE5vIGJwZiB0b29sY2hhaW4gbmVlZGVkLlxcbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY190cmFuc3BhcmVudFxcbkBAIC01Miw4ICs1Niw4IEBAIEhBVkVfQlBGX1RPT0xDSEFJTiA/PSAkKHNoZWxsIGNvbW1hbmQgLXYgJChDTEFORykgXFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gaWZlcSAoJChIQVZFX0JQRl9UT09MQ0hBSU4pLHkpXFxuIFRFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2JwZlxcbiBURVNUX0dFTl9GSUxFUyArPSBicGZfaW50ZXJwLmJwZi5vIG5peF9vcmlnaW4uYnBmLm8gdHJhbnNwYXJlbnQuYnBmLm9cXG4tVEVTVF9HRU5fRklMRVMgKz0gbG9hZGVyLmJwZi5vXFxuLVRFU1RfR0VOX0ZJTEVTICs9IGJpbmZtdF9icGZfaW50ZXJwIGJpbmZtdF9icGZfYXBwXFxuK1RFU1RfR0VOX0ZJTEVTICs9IGxvYWRlci5icGYubyBpbnRlcnBfYmluZC5icGYub1xcbitURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfYnBmX2ludGVycCBiaW5mbXRfYnBmX2FwcCBiaW5mbXRfYmluZF9pbnRlcnBcXG4gZWxzZVxcbiAkKGluZm8gZXhlYyBzZWxmdGVzdHM6IHNraXBwaW5nIGJpbmZtdF9taXNjX2JwZiwgbmVlZHMgY2xhbmcsIGJwZnRvb2wsIHZtbGludXggQlRGIGFuZCBsaWJicGYpXFxuIGVuZGlmXFxuQEAgLTEyMyw2ICsxMjcsOSBAQCAkKE9VVFBVVCkvYmluZm10X21pc2NfYnBmOiBiaW5mbXRfbWlzY19icGYuYyBiaW5mbXRfbWlzY19jb21tb24uaFxcbiAkKE9VVFBVVCkvYmluZm10X2JwZl9pbnRlcnA6IGJpbmZtdF9icGZfaW50ZXJwLmNcXG4gXFx0JChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJFxcdTAwM2MgLW8gJEBcXG4gXFxuKyQoT1VUUFVUKS9iaW5mbXRfYmluZF9pbnRlcnA6IGJpbmZtdF9iaW5kX2ludGVycC5jXFxuK1xcdCQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICRcXHUwMDNjIC1vICRAXFxuK1xcbiAkKE9VVFBVVCkvYmluZm10X2xvYWRlcl9wYXlsb2FkOiBiaW5mbXRfbG9hZGVyX3BheWxvYWQuYyBiaW5mbXRfbWlzY19jb21tb24uaFxcbiBcXHQkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtZlBJRSAtcGllICRcXHUwMDNjIC1vICRAXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9iaW5kX2ludGVycC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfYmluZF9pbnRlcnAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDZkNjUwNjI4NTZiN1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9iaW5kX2ludGVycC5jXFxuQEAgLTAsMCArMSwxNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBUZXN0IGludGVycHJldGVyIGZvciB0aGUgYm91bmQtaW50ZXJwcmV0ZXIgY2FzZSBvZiB0aGUgYmluZm10X21pc2NfYnBmXFxuKyAqIHNlbGZ0ZXN0LiBUd28gY29waWVzIGFyZSBpbnN0YWxsZWQgYXQgZGlmZmVyZW50IHBhdGhzIGFuZCBib3VuZCB0byBvbmVcXG4rICogZW50cnkgdW5kZXIgZGlmZmVyZW50IG5hbWVzOyBwcmludGluZyBhcmd2WzBdIC0gdGhlIHBhdGggdGhlIGtlcm5lbCByYW5cXG4rICogdGhpcyBjb3B5IHVuZGVyIC0gdGVsbHMgdGhlIGhhcm5lc3Mgd2hpY2ggb2YgdGhlbSB0aGUgbG9hZCBwcm9ncmFtIHBpY2tlZC5cXG4rICovXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdHByaW50ZihcXFwiQklORF9SQU4gJXNcXFxcblxcXCIsIGFyZ2MgXFx1MDAzZSAwID8gYXJndlswXSA6IFxcXCJcXFwiKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcXG5pbmRleCAwNjk3NjhhNjZiYTA3Li4yYzdiNjMwNzVmMWQ5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jXFxuQEAgLTksNyArOSw3IEBAXFxuICAqXFxuICAqICAgICBlY2hvICc6bmFtZTpCOjo6OlxcdTAwM2NoYW5kbGVyXFx1MDAzZTonIFxcdTAwM2UgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyXFxuICAqXFxuLSAqIFRocmVlIHNlbGYtY29udGFpbmVkIGNhc2VzIGFyZSBleGVyY2lzZWQ6XFxuKyAqIEZpdmUgc2VsZi1jb250YWluZWQgY2FzZXMgYXJlIGV4ZXJjaXNlZDpcXG4gICpcXG4gICogICAxLiBicGZfaW50ZXJwOiB0aGUgbWF0Y2ggcHJvZ3JhbSBtYXRjaGVzIGEgc3ludGhldGljIGFhcmNoNjQgRUxGIGhlYWRlclxcbiAgKiAgICAgIGZyb20gdGhlIHByZWZldGNoZWQgYnBybS1cXHUwMDNlYnVmIGFuZCB0aGUgbG9hZCBwcm9ncmFtIHJvdXRlcyBpdCB0byBhXFxuQEAgLTI2LDYgKzI2LDExIEBAXFxuICAqICAgICAgKGJpbmZtdF9sb2FkZXJfcGF5bG9hZCkgcnVucyBhcyB0aGUgbWFpbiBpbWFnZSB3aXRoIHRoZSBzZWxlY3RlZFxcbiAgKiAgICAgIGludGVycHJldGVyIHN1YnN0aXR1dGVkIGZvciBpdHMgUFRfSU5URVJQIGFuZCBhc3NlcnRzIHRoZSBuYXRpdmVcXG4gICogICAgICBpZGVudGl0eSBmcm9tIGluc2lkZS5cXG4rICogICA1LiBpbnRlcnBfYmluZDogYW4gZW50cnkgcmVnaXN0ZXJlZCBkaXNhYmxlZCB3aXRoICdEJyBpcyBnaXZlbiBpdHNcXG4rICogICAgICBpbnRlcnByZXRlcnMgb25lIHdyaXRlIGF0IGEgdGltZSwgYW5kIHRoZSBsb2FkIHByb2dyYW0gcGlja3Mgb25lIGJ5XFxuKyAqICAgICAgbmFtZSBwZXIgZXhlYy4gUmVwbGFjaW5nIHdoYXQgdGhlIHBhdGggaG9sZHMgYWZ0ZXJ3YXJkcyBjaGFuZ2VzXFxuKyAqICAgICAgbm90aGluZywgd2hpY2ggaXMgdGhlIHBvaW50IG9mIGJpbmRpbmcgYSBmaWxlIHJhdGhlciB0aGFuIHJlc29sdmluZ1xcbisgKiAgICAgIGEgbmFtZSBhdCBleGVjIHRpbWUuIEVuYWJsaW5nIHRoZSBlbnRyeSBzZWFscyBpdC5cXG4gICpcXG4gICogVGhlIGZpcnN0IHR3byByb3V0ZSB0byBhIHRlc3QgaW50ZXJwcmV0ZXIgdGhhdCBwcmludHMgQlBGX0lOVEVSUF9SQU4sXFxuICAqIHByb3ZpbmcgdGhlIHByb2dyYW0ncyBjaG9zZW4gaW50ZXJwcmV0ZXIgYWN0dWFsbHkgcmFuLlxcbkBAIC01NCw2ICs1OSwxMiBAQFxcbiAjZGVmaW5lIFRSQU5TX0VYUEVDVFxcdFxcXCJUUkFOU1BBUkVOVF9PS1xcXCJcXG4gI2RlZmluZSBMT0FERVJfSU5URVJQXFx0XFxcIi90bXAvYmluZm10X2xvYWRlcl9pbnRlcnBcXFwiXFxuICNkZWZpbmUgTE9BREVSX1BBVEhcXHRcXFwiL3RtcC9iaW5mbXRfYnBmX2xvYWRlci5sZHJ0ZXN0XFxcIlxcbisjZGVmaW5lIEJJTkRfRklSU1RcXHRcXFwiL3RtcC9iaW5mbXRfYmluZF9maXJzdFxcXCJcXG4rI2RlZmluZSBCSU5EX1NFQ09ORFxcdFxcXCIvdG1wL2JpbmZtdF9iaW5kX3NlY29uZFxcXCJcXG4rI2RlZmluZSBCSU5EX0FSTV9QQVRIXFx0XFxcIi90bXAvYmluZm10X2JpbmRfYXJtXFxcIlxcbisjZGVmaW5lIEJJTkRfUklTQ1ZfUEFUSFxcdFxcXCIvdG1wL2JpbmZtdF9iaW5kX3Jpc2N2XFxcIlxcbisjZGVmaW5lIEJJTkRfRVhQRUNUXFx0XFxcIkJJTkRfUkFOIFxcXCJcXG4rI2RlZmluZSBCSU5EX01BWFxcdDEwMFxcbiBcXG4gLyogQSBtaW5pbWFsIDY0LWJpdCBsaXR0bGUtZW5kaWFuIEVMRiBoZWFkZXIsIHBhZGRlZCB0byB0aGUgcmVhZCBzaXplLiAqL1xcbiBzdGF0aWMgaW50IGNyZWF0ZV9mYWtlX2VsZihjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBzaG9ydCBtYWNoaW5lKVxcbkBAIC04MiwxMSArOTMsMTcgQEAgc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcmVnaXN0ZXJfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaGFuZGxlcilcXG4rLypcXG4rICogUmVnaXN0ZXIgYSAnQicgZW50cnkgZm9yIEBoYW5kbGVyLiBXaXRoIEBmbGFncyBcXFwiRFxcXCIgdGhlIGVudHJ5IGlzIGNyZWF0ZWRcXG4rICogZGlzYWJsZWQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzLlxcbisgKi9cXG4rc3RhdGljIGludCByZWdpc3Rlcl9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpoYW5kbGVyLFxcbitcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmZsYWdzKVxcbiB7XFxuIFxcdGNoYXIgcnVsZVtQQVRIX01BWF07XFxuIFxcbi1cXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFxcXCI6JXM6Qjo6OjolczpcXFwiLCBuYW1lLCBoYW5kbGVyKTtcXG4rXFx0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcXFwiOiVzOkI6Ojo6JXM6JXNcXFwiLCBuYW1lLCBoYW5kbGVyLFxcbitcXHRcXHQgZmxhZ3MgPyBmbGFncyA6IFxcXCJcXFwiKTtcXG4gXFx0cmV0dXJuIHdyaXRlX3JlZyhydWxlKTtcXG4gfVxcbiBcXG5AQCAtMTA2LDYgKzEyMywzMCBAQCBzdGF0aWMgaW50IGNoZWNrX291dHB1dChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKmV4cGVjdGVkKVxcbiBcXHRyZXR1cm4gc3RybmNtcChidWYsIGV4cGVjdGVkLCBzdHJsZW4oZXhwZWN0ZWQpKSA/IC0xIDogMDtcXG4gfVxcbiBcXG4rLyogRG9lcyB0aGUga2VybmVsIEJURiBrbm93IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpPyAqL1xcbitzdGF0aWMgYm9vbCBoYXZlX2JpbmZtdF9taXNjX29wcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGYgKmJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbitcXHRib29sIGhhdmU7XFxuK1xcbitcXHRoYXZlID0gYnRmIFxcdTAwMjZcXHUwMDI2IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBcXFwiYmluZm10X21pc2Nfb3BzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBCVEZfS0lORF9TVFJVQ1QpIFxcdTAwM2U9IDA7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbitcXHRyZXR1cm4gaGF2ZTtcXG4rfVxcbitcXG4rLyogVGhlIHJlYXNvbiBicGYgaGFuZGxlciBjYXNlcyBjYW5ub3QgcnVuIGhlcmUsIE5VTEwgaWYgdGhleSBjYW4uICovXFxuK3N0YXRpYyBjb25zdCBjaGFyICpicGZfaGFuZGxlcl91bnN1cHBvcnRlZCh2b2lkKVxcbit7XFxuK1xcdGlmIChnZXR1aWQoKSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gXFxcInRlc3QgbXVzdCBiZSBydW4gYXMgcm9vdFxcXCI7XFxuK1xcdGlmICghaGF2ZV9iaW5mbXRfbWlzY19vcHMoKSlcXG4rXFx0XFx0cmV0dXJuIFxcXCJubyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGluIHRoZSBrZXJuZWwgQlRGIChDT05GSUdfQklORk1UX01JU0NfQlBGKVxcXCI7XFxuK1xcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXFxuK1xcdFxcdHJldHVybiBcXFwibm8gYmluZm10X21pc2NcXFwiO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4gLyogQW4gYXR0YWNoZWQgaGFuZGxlciB3aXRoIGl0cyAnQicgZW50cnkgYWN0aXZhdGVkLiAqL1xcbiBzdHJ1Y3QgYnBmX2Nhc2Uge1xcbiBcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbkBAIC0xMTUsMTAgKzE1NiwxMiBAQCBzdHJ1Y3QgYnBmX2Nhc2Uge1xcbiBcXG4gLypcXG4gICogTG9hZCBAb2JqZmlsZSwgYXR0YWNoIGl0cyBzdHJ1Y3Rfb3BzIG1hcCBAaGFuZGxlciAod2hpY2ggcHVibGlzaGVzIHRoZVxcbi0gKiBoYW5kbGVyKSBhbmQgYWN0aXZhdGUgYSAnQicgZW50cnkgbmFtZWQgQGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdC5cXG4rICogaGFuZGxlcikgYW5kIHJlZ2lzdGVyIGEgJ0InIGVudHJ5IG5hbWVkIEBlbnRyeSB0aGF0IHJlZmVyZW5jZXMgaXQsIHdpdGhcXG4rICogQGZsYWdzIGFzIHRoZSBlbnRyeSdzIHJlZ2lzdGVyLXN0cmluZyBmbGFncy5cXG4gICovXFxuLXN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxcbi1cXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmVudHJ5KVxcbitzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0X2ZsYWdzKHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcXG4rXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqaGFuZGxlciwgY29uc3QgY2hhciAqZW50cnksXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfbWFwICptYXA7XFxuIFxcbkBAIC0xNDgsNyArMTkxLDcgQEAgc3RhdGljIGludCBicGZfY2FzZV9zdGFydChzdHJ1Y3QgYnBmX2Nhc2UgKmMsIGNvbnN0IGNoYXIgKm9iamZpbGUsXFxuIFxcdFxcdGMtXFx1MDAzZWxpbmsgPSBOVUxMO1xcbiBcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdH1cXG4tXFx0aWYgKHJlZ2lzdGVyX2VudHJ5KGVudHJ5LCBoYW5kbGVyKSkge1xcbitcXHRpZiAocmVnaXN0ZXJfZW50cnkoZW50cnksIGhhbmRsZXIsIGZsYWdzKSkge1xcbiBcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInJlZ2lzdGVyICdCJyBlbnRyeSAnJXMnIGZhaWxlZFxcXFxuXFxcIiwgZW50cnkpO1xcbiBcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdH1cXG5AQCAtMTYyLDYgKzIwNSwxMiBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcXG4gXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcXG4rXFx0XFx0XFx0ICBjb25zdCBjaGFyICpoYW5kbGVyLCBjb25zdCBjaGFyICplbnRyeSlcXG4re1xcbitcXHRyZXR1cm4gYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoYywgb2JqZmlsZSwgaGFuZGxlciwgZW50cnksIE5VTEwpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBicGZfY2FzZV9zdG9wKHN0cnVjdCBicGZfY2FzZSAqYylcXG4ge1xcbiBcXHR1bnJlZ2lzdGVyKGMtXFx1MDAzZWVudHJ5KTtcXG5AQCAtMTkwLDIzICsyMzksMTAgQEAgRklYVFVSRShicGZfaGFuZGxlcikge1xcbiBGSVhUVVJFX1NFVFVQKGJwZl9oYW5kbGVyKVxcbiB7XFxuIFxcdGNoYXIgc3JjW1BBVEhfTUFYXTtcXG4tXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbi1cXG4tXFx0aWYgKGdldHVpZCgpICE9IDApXFxuLVxcdFxcdFNLSVAocmV0dXJuLCBcXFwidGVzdCBtdXN0IGJlIHJ1biBhcyByb290XFxcIik7XFxuLVxcbi1cXHQvKiBUaGUga2VybmVsIG11c3Qga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKS4gKi9cXG4tXFx0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XFxuLVxcdGlmICghYnRmIHx8IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBcXFwiYmluZm10X21pc2Nfb3BzXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgQlRGX0tJTkRfU1RSVUNUKSBcXHUwMDNjIDApIHtcXG4tXFx0XFx0YnRmX19mcmVlKGJ0Zik7XFxuLVxcdFxcdFNLSVAocmV0dXJuLFxcbi1cXHRcXHQgICAgIFxcXCJubyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGluIHRoZSBrZXJuZWwgQlRGIChDT05GSUdfQklORk1UX01JU0NfQlBGKVxcXCIpO1xcbi1cXHR9XFxuLVxcdGJ0Zl9fZnJlZShidGYpO1xcbitcXHRjb25zdCBjaGFyICp3aHkgPSBicGZfaGFuZGxlcl91bnN1cHBvcnRlZCgpO1xcbiBcXG4tXFx0aWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSlcXG4tXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBiaW5mbXRfbWlzY1xcXCIpO1xcbitcXHRpZiAod2h5KVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIiVzXFxcIiwgd2h5KTtcXG4gXFxuIFxcdC8qIFNoYXJlZCB0ZXN0IGludGVycHJldGVyLiAqL1xcbiBcXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCBcXFwiYmluZm10X2JwZl9pbnRlcnBcXFwiKSwgMCk7XFxuQEAgLTI1OCw3ICsyOTQsNyBAQCBURVNUX0YoYnBmX2hhbmRsZXIsIHRyYW5zcGFyZW50X2Rpc3BhdGNoKVxcbiBcXHRjaGFyIHNyY1tQQVRIX01BWF0sIGNtZFtQQVRIX01BWCArIDE2XTtcXG4gXFxuIFxcdC8qIFByb2JlIGZvciB0cmFuc3BhcmVudC1tb2RlIHN1cHBvcnQgdmlhIGl0cyBzdGF0aWMgY291bnRlcnBhcnQuICovXFxuLVxcdGlmIChiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ1QnKSlcXG4rXFx0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ1QnKSlcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJrZXJuZWwgd2l0aG91dCB0cmFuc3BhcmVudCBtb2RlXFxcIik7XFxuIFxcbiBcXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzcmMsIHNpemVvZihzcmMpLCBcXFwiYmluZm10X3RyYW5zcGFyZW50X2ludGVycFxcXCIpLCAwKTtcXG5AQCAtMzA3LDQgKzM0MywyMjYgQEAgVEVTVF9GKGJwZl9oYW5kbGVyLCBsb2FkZXJfc3Vic3RpdHV0aW9uKVxcbiBcXHR1bmxpbmsoTE9BREVSX0lOVEVSUCk7XFxuIH1cXG4gXFxuKy8qIFRoZSBlcnJubyBhbiBleGVjIG9mIEBwYXRoIGZhaWxzIHdpdGgsIDAgaWYgaXQgc3VjY2VlZGVkLiAqL1xcbitzdGF0aWMgaW50IGV4ZWNfZXJybm8oY29uc3QgY2hhciAqcGF0aClcXG4re1xcbitcXHRpbnQgc3RhdHVzO1xcbitcXHRwaWRfdCBwaWQ7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmIChwaWQgPT0gMCkge1xcbitcXHRcXHRleGVjbChwYXRoLCBwYXRoLCAoY2hhciAqKU5VTEwpO1xcbitcXHRcXHRfZXhpdChlcnJubyk7XFxuK1xcdH1cXG4rXFx0aWYgKHBpZCBcXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFxcdTAwMjZzdGF0dXMsIDApICE9IHBpZCB8fCAhV0lGRVhJVEVEKHN0YXR1cykpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XFxuK31cXG4rXFxuKy8qIEluc3RhbGwgYSBjb3B5IG9mIHRoZSBib3VuZC1pbnRlcnByZXRlciB0ZXN0IGJpbmFyeSBhdCBAcGF0aC4gKi9cXG4rc3RhdGljIGludCBpbnN0YWxsX2ludGVycChjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdGNoYXIgc3JjW1BBVEhfTUFYXTtcXG4rXFxuK1xcdGlmIChhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksIFxcXCJiaW5mbXRfYmluZF9pbnRlcnBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRyZXR1cm4gY29weV9maWxlKHNyYywgcGF0aCk7XFxuK31cXG4rXFxuKy8qIEJpbmQgQHBhdGggdG8gQGVudHJ5IHVuZGVyIEBuYW1lLCB0aGUgJysnIGNvbW1hbmQgb2YgYSBkaXNhYmxlZCBlbnRyeS4gKi9cXG4rc3RhdGljIGludCBlbnRyeV9iaW5kKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdGNoYXIgY21kW1BBVEhfTUFYXTtcXG4rXFxuK1xcdHNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksIFxcXCIrJXMgJXNcXFxcblxcXCIsIG5hbWUsIHBhdGgpO1xcbitcXHRyZXR1cm4gZW50cnlfY29tbWFuZChlbnRyeSwgY21kKTtcXG4rfVxcbitcXG4rRklYVFVSRShib3VuZF9pbnRlcnApIHtcXG4rXFx0Y2hhciBvYmpbUEFUSF9NQVhdO1xcbitcXHRzdHJ1Y3QgYnBmX2Nhc2UgYztcXG4rXFx0Ym9vbCBzdGFydGVkO1xcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChib3VuZF9pbnRlcnApXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqd2h5ID0gYnBmX2hhbmRsZXJfdW5zdXBwb3J0ZWQoKTtcXG4rXFxuK1xcdGlmICh3aHkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiJXNcXFwiLCB3aHkpO1xcbitcXHRpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgnRCcpKSB7XFxuK1xcdFxcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJrZXJuZWwgd2l0aG91dCB0aGUgJ0QnIGZsYWdcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0QVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfRklSU1QpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfU0VDT05EKSwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzZWxmLVxcdTAwM2VvYmosIHNpemVvZihzZWxmLVxcdTAwM2VvYmopLFxcbitcXHRcXHRcXHRcXHRcXFwiaW50ZXJwX2JpbmQuYnBmLm9cXFwiKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWdpc3RlcmVkIGRpc2FibGVkLCBzbyBpdCBjYW5ub3QgYmUgbWF0Y2hlZCB5ZXQgYW5kIGNhbiBzdGlsbCBiZVxcbitcXHQgKiBnaXZlbiBpbnRlcnByZXRlcnMuIEVhY2ggcGF0aCBpcyByZXNvbHZlZCBvbmNlLCBieSBpdHMgd3JpdGUoMik7XFxuK1xcdCAqIGZyb20gaGVyZSBvbiB0aGUgZW50cnkgaG9sZHMgdGhlIGZpbGVzIHRoZW1zZWx2ZXMuXFxuK1xcdCAqL1xcbitcXHRBU1NFUlRfRVEoYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoXFx1MDAyNnNlbGYtXFx1MDAzZWMsIHNlbGYtXFx1MDAzZW9iaiwgXFxcImludGVycF9iaW5kXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcIkRcXFwiKSwgMCk7XFxuK1xcdHNlbGYtXFx1MDAzZXN0YXJ0ZWQgPSB0cnVlO1xcbitcXG4rXFx0QVNTRVJUX0VRKGVudHJ5X2JpbmQoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiLCBcXFwiZmlyc3RcXFwiLCBCSU5EX0ZJUlNUKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcInNlY29uZFxcXCIsIEJJTkRfU0VDT05EKSwgMCk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oYm91bmRfaW50ZXJwKVxcbit7XFxuK1xcdGlmIChzZWxmLVxcdTAwM2VzdGFydGVkKVxcbitcXHRcXHRicGZfY2FzZV9zdG9wKFxcdTAwMjZzZWxmLVxcdTAwM2VjKTtcXG4rXFx0dW5saW5rKEJJTkRfRklSU1QpO1xcbitcXHR1bmxpbmsoQklORF9TRUNPTkQpO1xcbitcXHR1bmxpbmsoQUFSQ0g2NF9QQVRIKTtcXG4rXFx0dW5saW5rKEJJTkRfUklTQ1ZfUEFUSCk7XFxuK1xcdHVubGluayhCSU5EX0FSTV9QQVRIKTtcXG4rfVxcbitcXG4rLyogRW5hYmxpbmcgaXMgd2hhdCBtYWtlcyB0aGUgY29uZmlndXJlZCBlbnRyeSBtYXRjaGFibGUuICovXFxuK3N0YXRpYyBpbnQgYWN0aXZhdGUoY29uc3QgY2hhciAqZW50cnkpXFxuK3tcXG4rXFx0cmV0dXJuIGVudHJ5X2NvbW1hbmQoZW50cnksIFxcXCIxXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rLyogT25lIGVudHJ5LCBvbmUgaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSwgcGlja2VkIHBlciBleGVjLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBzZWxlY3RzX2J5X25hbWUpXFxuK3tcXG4rXFx0QVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihBQVJDSDY0X1BBVEgsIEVNX0FBUkNINjQpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGNyZWF0ZV9mYWtlX2VsZihCSU5EX1JJU0NWX1BBVEgsIEVNX1JJU0NWKSwgMCk7XFxuK1xcbitcXHQvKiBEaXNhYmxlZCwgc28gaXQgZG9lcyBub3QgbWF0Y2ggYW5kIG5vIGZvcm1hdCBjbGFpbXMgdGhlIGJpbmFyeS4gKi9cXG4rXFx0RVhQRUNUX0VRKGV4ZWNfZXJybm8oQUFSQ0g2NF9QQVRIKSwgRU5PRVhFQyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoYWN0aXZhdGUoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiKSwgMCk7XFxuK1xcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XFxuK1xcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQklORF9SSVNDVl9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX1NFQ09ORCksIDApO1xcbit9XFxuK1xcbisvKiBXaGF0IHdhcyBib3VuZCBpcyB3aGF0IHJ1bnMsIHdoYXRldmVyIHRoZSBwYXRoIGhvbGRzIGFmdGVyd2FyZHMuICovXFxuK1RFU1RfRihib3VuZF9pbnRlcnAsIHBhdGhfbm9fbG9uZ2VyX2RlY2lkZXMpXFxuK3tcXG4rXFx0Y2hhciBvdGhlcltQQVRIX01BWF07XFxuK1xcbitcXHRBU1NFUlRfRVEoY3JlYXRlX2Zha2VfZWxmKEFBUkNINjRfUEFUSCwgRU1fQUFSQ0g2NCksIDApO1xcbitcXHRBU1NFUlRfRVEoYWN0aXZhdGUoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiKSwgMCk7XFxuK1xcbitcXHQvKiBCb3VuZCBpbnRlcnByZXRlcnMgYXJlIHBpbm5lZCBhZ2FpbnN0IHdyaXRlcywgZXhhY3RseSBsaWtlICdGJy4gKi9cXG4rXFx0RVhQRUNUX1RSVUUod3JpdGVfZGVuaWVkKEJJTkRfRklSU1QpKTtcXG4rXFxuK1xcdC8qIFJlcGxhY2UgdGhlIHBhdGggd2l0aCBhIGRpZmZlcmVudCBiaW5hcnk6IGEgbmV3IGZpbGUsIG5ldyBpbm9kZS4gKi9cXG4rXFx0QVNTRVJUX0VRKGFydGlmYWN0X3BhdGgob3RoZXIsIHNpemVvZihvdGhlciksIFxcXCJiaW5mbXRfYnBmX2ludGVycFxcXCIpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKHVubGluayhCSU5EX0ZJUlNUKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShjb3B5X2ZpbGUob3RoZXIsIEJJTkRfRklSU1QpLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XFxuK31cXG4rXFxuKy8qIFRoZSBlbnRyeSByZXBvcnRzIHdoYXQgaXQgYm91bmQsIHVuZGVyIHRoZSBuYW1lcyBpdCBib3VuZCB0aGVtIGFzLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBlbnRyeV9yZXBvcnRzX2JpbmRpbmdzKVxcbit7XFxuK1xcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcImJwZi1pbnRlcnByZXRlciBmaXJzdCBcXFwiIEJJTkRfRklSU1QpKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiYnBmLWludGVycHJldGVyIHNlY29uZCBcXFwiIEJJTkRfU0VDT05EKSk7XFxuK31cXG4rXFxuKy8qIFNlbGVjdGluZyBhIG5hbWUgdGhlIGVudHJ5IGRpZCBub3QgYmluZCBmYWlscyB0aGUgZXhlYy4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgdW5ib3VuZF9uYW1lX2ZhaWxzKVxcbit7XFxuK1xcdEFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQklORF9BUk1fUEFUSCwgRU1fQVJNKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShhY3RpdmF0ZShcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIpLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShleGVjX2Vycm5vKEJJTkRfQVJNX1BBVEgpLCBFTk9FTlQpO1xcbit9XFxuK1xcbisvKiBBY3RpdmF0aW5nIHNlYWxzIGl0OiB3aGF0IGNhbiBiZSBtYXRjaGVkIGNhbm5vdCBiZSBjaGFuZ2VkLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBzZWFsZWRfb25jZV9hY3RpdmUpXFxuK3tcXG4rXFx0QVNTRVJUX0VRKGFjdGl2YXRlKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiksIDApO1xcbitcXG4rXFx0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiLCBcXFwidGhpcmRcXFwiLCBCSU5EX1NFQ09ORCksIC1FQlVTWSk7XFxuK1xcdEVYUEVDVF9GQUxTRShlbnRyeV9zaG93cyhcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIsXFxuK1xcdFxcdFxcdFxcdCBcXFwiYnBmLWludGVycHJldGVyIHRoaXJkIFxcXCIgQklORF9TRUNPTkQpKTtcXG4rfVxcbitcXG4rLyogVGhlIHNlYWwgaXMgZm9yIGdvb2Q6IGRpc2FibGluZyB0aGUgZW50cnkgYWdhaW4gcmVvcGVucyBub3RoaW5nLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBkaXNhYmxlX2RvZXNfbm90X3Vuc2VhbClcXG4re1xcbitcXHRBU1NFUlRfRVEoYWN0aXZhdGUoXFxcInRlc3RfaW50ZXJwX2JpbmRcXFwiKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShlbnRyeV9jb21tYW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcIjBcXFxcblxcXCIpLCAwKTtcXG4rXFxuK1xcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcInRoaXJkXFxcIiwgQklORF9TRUNPTkQpLCAtRUJVU1kpO1xcbit9XFxuK1xcbisvKiBBbiBlbnRyeSByZWdpc3RlcmVkIHdpdGhvdXQgJ0QnIGlzIHNlYWxlZCBmcm9tIHRoZSBzdGFydC4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgYm9ybl9zZWFsZWQpXFxuK3tcXG4rXFx0LyogQSBzZWNvbmQgZW50cnkgZm9yIHRoZSBoYW5kbGVyIHRoZSBmaXh0dXJlIGFscmVhZHkgcHVibGlzaGVkLiAqL1xcbitcXHRBU1NFUlRfRVEocmVnaXN0ZXJfZW50cnkoXFxcInRlc3RfYm9ybl9zZWFsZWRcXFwiLCBcXFwiaW50ZXJwX2JpbmRcXFwiLCBOVUxMKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcXFwidGVzdF9ib3JuX3NlYWxlZFxcXCIsIFxcXCJmaXJzdFxcXCIsIEJJTkRfRklSU1QpLCAtRUJVU1kpO1xcbitcXHR1bnJlZ2lzdGVyKFxcXCJ0ZXN0X2Jvcm5fc2VhbGVkXFxcIik7XFxuK31cXG4rXFxuKy8qIEEgbmFtZSBpcyBib3VuZCBvbmNlOyBhIHNlY29uZCB1c2Ugb2YgaXQgaXMgcmVmdXNlZC4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgZHVwbGljYXRlX25hbWVfcmVmdXNlZClcXG4re1xcbitcXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIsIFxcXCJmaXJzdFxcXCIsIEJJTkRfU0VDT05EKSwgLUVFWElTVCk7XFxuK31cXG4rXFxuKy8qIEEgbmFtZSBpcyBhIHByaW50YWJsZSB3b3JkOiB0aGUgZW50cnkgZmlsZSByZXBvcnRzICduYW1lIHBhdGgnIGxpbmVzLiAqL1xcbitURVNUX0YoYm91bmRfaW50ZXJwLCBuYW1lX211c3RfYmVfcHJpbnRhYmxlKVxcbit7XFxuK1xcdC8qIEEgY29udHJvbCBjaGFyYWN0ZXIgd291bGQgZm9yZ2UgYSBsaW5lIGludG8gdGhlIGVudHJ5IGZpbGUuICovXFxuK1xcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcImFcXFxcdGJcXFwiLCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7XFxuK1xcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcImFcXFxcbmJcXFwiLCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7XFxuK1xcbitcXHQvKiBBIHNwYWNlIGNhbm5vdCBldmVuIGJlIHNwZWxsZWQ6IHRoZSBwYXRoIHN0YXJ0cyBhZnRlciB0aGUgZmlyc3Qgb25lLiAqL1xcbitcXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcXFwidGVzdF9pbnRlcnBfYmluZFxcXCIsIFxcXCJhIGJcXFwiLCBCSU5EX0ZJUlNUKSwgLUVJTlZBTCk7XFxuK31cXG4rXFxuKy8qIFRoZSBjb21tYW5kIGVuZHMgYXQgdGhlIHdyaXRlOiBieXRlcyBwYXN0IGFuIGVtYmVkZGVkIG51bCBhcmUgcmVmdXNlZC4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgdHJhaWxpbmdfYnl0ZXNfcmVmdXNlZClcXG4re1xcbitcXHRjaGFyIGNtZFtQQVRIX01BWF07XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdC8qIGVudHJ5X2NvbW1hbmQoKSBjYW5ub3Qgc3BlbGwgYSBudWwsIHNvIHdyaXRlIHRoZSBidWZmZXIgcmF3LiAqL1xcbitcXHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcXFwiK251bCAlc1xcXCIsIEJJTkRfRklSU1QpO1xcbitcXHRsZW4gPSBzdHJsZW4oY21kKSArIDE7XFxuK1xcdG1lbWNweShjbWQgKyBsZW4sIFxcXCJqdW5rXFxcIiwgc2l6ZW9mKFxcXCJqdW5rXFxcIikpO1xcbitcXHRsZW4gKz0gc2l6ZW9mKFxcXCJqdW5rXFxcIik7XFxuK1xcbitcXHRmZCA9IG9wZW4oQklORk1UX0RJUiBcXFwiL3Rlc3RfaW50ZXJwX2JpbmRcXFwiLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEVYUEVDVF9FUSh3cml0ZShmZCwgY21kLCBsZW4pLCAtMSk7XFxuK1xcdEVYUEVDVF9FUShlcnJubywgRUlOVkFMKTtcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0RVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIixcXG4rXFx0XFx0XFx0XFx0IFxcXCJicGYtaW50ZXJwcmV0ZXIgbnVsIFxcXCIgQklORF9GSVJTVCkpO1xcbit9XFxuK1xcbisvKiBBbiBlbnRyeSBiaW5kcyBhdCBtb3N0IEJJTkRfTUFYIGludGVycHJldGVycy4gKi9cXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKVxcbit7XFxuK1xcdGNoYXIgbmFtZVsxNl07XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogVGhlIGZpeHR1cmUgYm91bmQgXFxcImZpcnN0XFxcIiBhbmQgXFxcInNlY29uZFxcXCIgYWxyZWFkeS4gKi9cXG4rXFx0Zm9yIChpID0gMjsgaSBcXHUwMDNjIEJJTkRfTUFYOyBpKyspIHtcXG4rXFx0XFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwibiVkXFxcIiwgaSk7XFxuK1xcdFxcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgbmFtZSwgQklORF9GSVJTVCksIDApO1xcbitcXHR9XFxuK1xcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFxcXCJ0ZXN0X2ludGVycF9iaW5kXFxcIiwgXFxcIm92ZXJcXFwiLCBCSU5EX0ZJUlNUKSwgLUVOT1NQQyk7XFxuK31cXG4rXFxuIFRFU1RfSEFSTkVTU19NQUlOXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXFxuaW5kZXggYzY5MDBkZWQwMTlmYy4uNzQ1YWZmODRkYzc4NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaFxcbkBAIC05Myw2ICs5Myw0NSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdW5yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lKVxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qIFdyaXRlIEBsaW5lIHRvIEBlbnRyeSdzIGZpbGUsIHJlcG9ydGluZyB0aGUgZXJybm8gaXQgd2FzIHJlZnVzZWQgd2l0aC4gKi9cXG4rc3RhdGljIGlubGluZSBpbnQgZW50cnlfY29tbWFuZChjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbGluZSlcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXHRpbnQgZmQsIHJldHZhbCA9IDA7XFxuK1xcdHNpemVfdCBsZW4gPSBzdHJsZW4obGluZSk7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEJJTkZNVF9ESVIgXFxcIi8lc1xcXCIsIGVudHJ5KTtcXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFx0aWYgKHdyaXRlKGZkLCBsaW5lLCBsZW4pICE9IChzc2l6ZV90KWxlbilcXG4rXFx0XFx0cmV0dmFsID0gLWVycm5vO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiByZXR2YWw7XFxuK31cXG4rXFxuKy8qIERvZXMgQGVudHJ5J3MgZmlsZSByZXBvcnQgQGxpbmU/ICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBlbnRyeV9zaG93cyhjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbGluZSlcXG4re1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdLCBidWZbUEFUSF9NQVhdO1xcbitcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdEZJTEUgKmZwO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBCSU5GTVRfRElSIFxcXCIvJXNcXFwiLCBlbnRyeSk7XFxuK1xcdGZwID0gZm9wZW4ocGF0aCwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmcClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7XFxuK1xcdFxcdGJ1ZltzdHJjc3BuKGJ1ZiwgXFxcIlxcXFxuXFxcIildID0gJ1xcXFwwJztcXG4rXFx0XFx0aWYgKCFzdHJjbXAoYnVmLCBsaW5lKSkge1xcbitcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0ZmNsb3NlKGZwKTtcXG4rXFx0cmV0dXJuIGZvdW5kO1xcbit9XFxuK1xcbiAvKiBNb3VudCBiaW5mbXRfbWlzYyB1bmxlc3MgaXQgYWxyZWFkeSBpcywgYW5kIHJlcG9ydCB3aGV0aGVyIGl0IGlzIHVzYWJsZS4gKi9cXG4gc3RhdGljIGlubGluZSBib29sIGJpbmZtdF9taXNjX2F2YWlsYWJsZSh2b2lkKVxcbiB7XFxuQEAgLTExNywxNiArMTU2LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFydGlmYWN0X3BhdGgoY2hhciAqb3V0LCBzaXplX3Qgc3osIGNvbnN0IGNoYXIgKm5hbWUpXFxuIH1cXG4gXFxuIC8qIFByb2JlIGtlcm5lbCBzdXBwb3J0IGZvciBhIHJlZ2lzdHJhdGlvbiBmbGFnIHdpdGggYSB0aHJvd2F3YXkgZW50cnkuICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoY2hhciBmbGFnKVxcbiB7XFxuIFxcdGNoYXIgcnVsZVs2NF07XFxuIFxcbiBcXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFxcXCI6Ym1fZmxhZ19wcm9iZTpFOjpibXByb2JlOjovYmluL3RydWU6JWNcXFwiLFxcbiBcXHRcXHQgZmxhZyk7XFxuIFxcdGlmICh3cml0ZV9yZWcocnVsZSkpXFxuLVxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR1bnJlZ2lzdGVyKFxcXCJibV9mbGFnX3Byb2JlXFxcIik7XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi40N2M5ZThhNGVlNDJhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfZGlzYWJsZWQuY1xcbkBAIC0wLDAgKzEsMTcyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFRlc3QgdGhlICdEJyAocmVnaXN0ZXIgZGlzYWJsZWQpIGZsYWcgb2YgYmluZm10X21pc2MuIEFuIGVudHJ5XFxuKyAqIHJlZ2lzdGVyZWQgd2l0aCBpdCBleGlzdHMgYnV0IGNhbm5vdCBiZSBtYXRjaGVkIHVudGlsIHVzZXJzcGFjZSBlbmFibGVzXFxuKyAqIGl0LCB3aGljaCBzcGxpdHMgYSByZWdpc3RyYXRpb24gaW50byBjcmVhdGUgYW5kIGFjdGl2YXRlLlxcbisgKlxcbisgKiBOZWVkcyByb290IGZvciB0aGUgcmVnaXN0cmF0aW9uOyBubyBicGYgdG9vbGNoYWluIGludm9sdmVkLlxcbisgKi9cXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImJpbmZtdF9taXNjX2NvbW1vbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0X2hhcm5lc3MuaFxcXCJcXG4rXFxuKyNkZWZpbmUgTUFHSUNcXHRcXHRcXFwiI0RJU0FCTEVELVNFTEZURVNUI1xcXCJcXG4rI2RlZmluZSBUQVJHRVRfUEFUSFxcdFxcXCIvdG1wL2JpbmZtdF9kaXNhYmxlZF90YXJnZXRcXFwiXFxuKyNkZWZpbmUgSU5URVJQX1BBVEhcXHRcXFwiL3RtcC9iaW5mbXRfZGlzYWJsZWRfaW50ZXJwLnNoXFxcIlxcbisjZGVmaW5lIEVOVFJZXFx0XFx0XFxcInRlc3RfZGlzYWJsZWRcXFwiXFxuKyNkZWZpbmUgUlVMRShmbGFncylcXHRcXFwiOlxcXCIgRU5UUlkgXFxcIjpNOjA6XFxcIiBNQUdJQyBcXFwiOjpcXFwiIElOVEVSUF9QQVRIIFxcXCI6XFxcIiBmbGFnc1xcbitcXG4rLyogVGhlIGludGVycHJldGVyIGV4aXRzIHdpdGggYSBjb2RlIHRoZSBoYXJuZXNzIGNhbiByZWNvZ25pc2UuICovXFxuKyNkZWZpbmUgRVhJVF9JTlRFUlBcXHQ3XFxuK1xcbisvKiBUaGUgdGFyZ2V0IG9ubHkgaGFzIHRvIGNhcnJ5IHRoZSBtYWdpYzsgaXQgaXMgbmV2ZXIgYWN0dWFsbHkgbG9hZGVkLiAqL1xcbitzdGF0aWMgaW50IGNyZWF0ZV90YXJnZXQodm9pZClcXG4re1xcbitcXHRjaGFyIGJ1ZlsxMjhdID0gTUFHSUMgXFxcIlxcXFxuXFxcIjtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0dW5saW5rKFRBUkdFVF9QQVRIKTtcXG4rXFx0ZmQgPSBvcGVuKFRBUkdFVF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmICh3cml0ZShmZCwgYnVmLCBzaXplb2YoYnVmKSkgIT0gKHNzaXplX3Qpc2l6ZW9mKGJ1ZikpIHtcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfaW50ZXJwKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbNjRdO1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHR1bmxpbmsoSU5URVJQX1BBVEgpO1xcbitcXHRmZCA9IG9wZW4oSU5URVJQX1BBVEgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDc1NSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiMhL2Jpbi9zaFxcXFxuZXhpdCAlZFxcXFxuXFxcIiwgRVhJVF9JTlRFUlApO1xcbitcXHRpZiAod3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpICE9IChzc2l6ZV90KXN0cmxlbihidWYpKSB7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiBjbG9zZShmZCk7XFxuK31cXG4rXFxuK0ZJWFRVUkUoZGlzYWJsZWQpIHtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoZGlzYWJsZWQpXFxuK3tcXG4rXFx0aWYgKGdldHVpZCgpICE9IDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwidGVzdCBtdXN0IGJlIHJ1biBhcyByb290XFxcIik7XFxuK1xcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwibm8gYmluZm10X21pc2NcXFwiKTtcXG4rXFxuK1xcdC8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAnRCcuICovXFxuK1xcdGlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCdEJykpIHtcXG4rXFx0XFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcImtlcm5lbCB3aXRob3V0IHRoZSAnRCcgZmxhZ1xcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRBU1NFUlRfRVEoY3JlYXRlX2ludGVycCgpLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGNyZWF0ZV90YXJnZXQoKSwgMCk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oZGlzYWJsZWQpXFxuK3tcXG4rXFx0dW5yZWdpc3RlcihFTlRSWSk7XFxuK1xcdHVubGluayhUQVJHRVRfUEFUSCk7XFxuK1xcdHVubGluayhJTlRFUlBfUEFUSCk7XFxuK31cXG4rXFxuKy8qIFRoZSBlbnRyeSBleGlzdHMgYnV0IGRvZXMgbm90IGRpc3BhdGNoIHVudGlsIGl0IGlzIGVuYWJsZWQuICovXFxuK1RFU1RfRihkaXNhYmxlZCwgaW5lcnRfdW50aWxfZW5hYmxlZClcXG4re1xcbitcXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXFxcIkRcXFwiKSksIDApO1xcbitcXHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgXFxcImRpc2FibGVkXFxcIikpO1xcbitcXG4rXFx0LyogTm90aGluZyBtYXRjaGVzIGl0LCBzbyBubyBiaW5hcnkgZm9ybWF0IGNsYWltcyB0aGUgdGFyZ2V0LiAqL1xcbitcXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XFxuK1xcbitcXHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXFxcIjFcXFxcblxcXCIpLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFxcXCJlbmFibGVkXFxcIikpO1xcbitcXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7XFxuK31cXG4rXFxuKy8qIFdpdGhvdXQgJ0QnIGFuIGVudHJ5IGlzIG1hdGNoYWJsZSB0aGUgbW9tZW50IGl0IGlzIHJlZ2lzdGVyZWQuICovXFxuK1RFU1RfRihkaXNhYmxlZCwgZW5hYmxlZF93aXRob3V0X3RoZV9mbGFnKVxcbit7XFxuK1xcdEFTU0VSVF9FUSh3cml0ZV9yZWcoUlVMRShcXFwiXFxcIikpLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFxcXCJlbmFibGVkXFxcIikpO1xcbitcXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7XFxuK31cXG4rXFxuKy8qICdEJyBpcyBzcGVudCBvbiB0aGUgcmVnaXN0cmF0aW9uOiB0aGUgZW50cnkgZG9lcyBub3QgcmVwb3J0IGl0IGJhY2suICovXFxuK1RFU1RfRihkaXNhYmxlZCwgZmxhZ19ub3RfcmVwb3J0ZWQpXFxuK3tcXG4rXFx0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFxcXCJEXFxcIikpLCAwKTtcXG4rXFx0RVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKEVOVFJZLCBcXFwiZmxhZ3M6IERcXFwiKSk7XFxuK1xcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcXFwiZmxhZ3M6IFxcXCIpKTtcXG4rfVxcbitcXG4rLyogQSBkaXNhYmxlZCBlbnRyeSBjYW4gYmUgZGlzYWJsZWQgYW5kIGVuYWJsZWQgbGlrZSBhbnkgb3RoZXIuICovXFxuK1RFU1RfRihkaXNhYmxlZCwgdG9nZ2xlc19saWtlX2FueV9lbnRyeSlcXG4re1xcbitcXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXFxcIkRcXFwiKSksIDApO1xcbitcXG4rXFx0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFxcXCIxXFxcXG5cXFwiKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcXG4rXFx0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFxcXCIwXFxcXG5cXFwiKSwgMCk7XFxuK1xcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIFJVTl9FTk9FWEVDKTtcXG4rXFx0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFxcXCIxXFxcXG5cXFwiKSwgMCk7XFxuK1xcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcXG4rfVxcbitcXG4rLyogJ0QnIGNvbXBvc2VzIHdpdGggdGhlIGludm9jYXRpb24gZmxhZ3MgYSBzdGF0aWMgZW50cnkgY2FuIGNhcnJ5LiAqL1xcbitURVNUX0YoZGlzYWJsZWQsIGNvbXBvc2VzX3dpdGhfaW52b2NhdGlvbl9mbGFncylcXG4re1xcbitcXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXFxcIlBEXFxcIikpLCAwKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFxcXCJkaXNhYmxlZFxcXCIpKTtcXG4rXFx0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFxcXCJmbGFnczogUFxcXCIpKTtcXG4rfVxcbitcXG4rLyogJy0xJyB0byB0aGUgc3RhdHVzIGZpbGUgc3dlZXBzIGEgc3RhZ2VkIGVudHJ5IHdpdGggZXZlcnl0aGluZyBlbHNlLiAqL1xcbitURVNUX0YoZGlzYWJsZWQsIHJlbW92ZWRfYnlfcmVtb3ZlX2FsbClcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXFxcIkRcXFwiKSksIDApO1xcbitcXHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgXFxcImRpc2FibGVkXFxcIikpO1xcbitcXG4rXFx0ZmQgPSBvcGVuKEJJTkZNVF9ESVIgXFxcIi9zdGF0dXNcXFwiLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcdEFTU0VSVF9FUSh3cml0ZShmZCwgXFxcIi0xXFxcIiwgMiksIDIpO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcbitcXHRFWFBFQ1RfTkUoYWNjZXNzKEJJTkZNVF9ESVIgXFxcIi9cXFwiIEVOVFJZLCBGX09LKSwgMCk7XFxuK31cXG4rXFxuKy8qIEEgZmlsZSBoYW5kbGUgaGVsZCBhY3Jvc3MgYSByZW1vdmFsIGNhbm5vdCByZXN1cnJlY3QgdGhlIGVudHJ5LiAqL1xcbitURVNUX0YoZGlzYWJsZWQsIG5vX3Jlc3VycmVjdGlvbl9hZnRlcl9yZW1vdmUpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFxcXCJEXFxcIikpLCAwKTtcXG4rXFx0ZmQgPSBvcGVuKEJJTkZNVF9ESVIgXFxcIi9cXFwiIEVOVFJZLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdEFTU0VSVF9HRShmZCwgMCk7XFxuK1xcbitcXHRBU1NFUlRfRVEod3JpdGUoZmQsIFxcXCItMVxcXCIsIDIpLCAyKTtcXG4rXFx0RVhQRUNUX05FKGFjY2VzcyhCSU5GTVRfRElSIFxcXCIvXFxcIiBFTlRSWSwgRl9PSyksIDApO1xcbitcXG4rXFx0LyogQWNjZXB0ZWQgbGlrZSBhbnkgdG9nZ2xlIG9mIGEgcmVtb3ZlZCBlbnRyeSwgYnV0IHB1Ymxpc2hlcyBub3RoaW5nLiAqL1xcbitcXHRFWFBFQ1RfRVEod3JpdGUoZmQsIFxcXCIxXFxcIiwgMSksIDEpO1xcbitcXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4rVEVTVF9IQVJORVNTX01BSU5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jXFxuaW5kZXggZDBjYjg0NWRmMWQzMC4uMmViZjczZGU4MDE4YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmNcXG5AQCAtNTYsNyArNTYsNyBAQCBGSVhUVVJFX1NFVFVQKHRyYW5zcGFyZW50KVxcbiBcXHRBU1NFUlRfRVEoY3JlYXRlX3RhcmdldCgpLCAwKTtcXG4gXFxuIFxcdC8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAnVCcuICovXFxuLVxcdGlmIChiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ1QnKSkge1xcbitcXHRpZiAoIWJpbmZtdF9mbGFnX3N1cHBvcnRlZCgnVCcpKSB7XFxuIFxcdFxcdEFTU0VSVF9FUShlcnJubywgRUlOVkFMKTtcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJrZXJuZWwgd2l0aG91dCB0aGUgJ1QnIGZsYWdcXFwiKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWNlNDVjY2EyMTVmMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jXFxuQEAgLTAsMCArMSw3NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBiaW5mbXRfbWlzY19vcHMgaGFuZGxlciBmb3IgdGhlIHNlbGZ0ZXN0J3MgYm91bmQtaW50ZXJwcmV0ZXIgY2FzZTogb25lXFxuKyAqIGhhbmRsZXIsIG9uZSBlbnRyeSwgYW4gaW50ZXJwcmV0ZXIgcGVyIGd1ZXN0IGFyY2hpdGVjdHVyZSAtIGVhY2ggYm91bmQgdG9cXG4rICogYSBmaWxlIHdoZW4gdGhlIGVudHJ5IHdhcyByZWdpc3RlcmVkIHJhdGhlciB0aGFuIHRvIGEgcGF0aCByZXNvbHZlZCBhdFxcbisgKiBleGVjIHRpbWUuIFRoZSBsb2FkIHByb2dyYW0gbmFtZXMgdGhlIG9uZSBpdCB3YW50czsgYSBuYW1lIHRoZSBlbnRyeSBkaWRcXG4rICogbm90IGJpbmQgZmFpbHMgdGhlIGV4ZWMsIHdoaWNoIHRoZSBoYXJuZXNzIGNoZWNrcyB0b28uXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rI2RlZmluZSBFSV9DTEFTU1xcdDRcXG4rI2RlZmluZSBFTEZDTEFTUzY0XFx0MlxcbisjZGVmaW5lIEVfTUFDSElORV9PRkZcXHQxOFxcbisjZGVmaW5lIEVNX0FSTVxcdFxcdDQwXFxuKyNkZWZpbmUgRU1fQUFSQ0g2NFxcdDE4M1xcbisjZGVmaW5lIEVNX1JJU0NWXFx0MjQzXFxuK1xcbitleHRlcm4gaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfX3N6KSBfX2tzeW07XFxuK1xcbisvKiBUaGUgZ3Vlc3QgYXJjaGl0ZWN0dXJlIG9mIGEgNjQtYml0IEVMRiwgb3IgemVybyBpZiBpdCBpcyBub3Qgb25lLiAqL1xcbitzdGF0aWMgX191MTYgZWxmX21hY2hpbmUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4re1xcbitcXHRpZiAoYnBybS1cXHUwMDNlYnVmWzBdICE9IDB4N2YgfHwgYnBybS1cXHUwMDNlYnVmWzFdICE9ICdFJyB8fFxcbitcXHQgICAgYnBybS1cXHUwMDNlYnVmWzJdICE9ICdMJyB8fCBicHJtLVxcdTAwM2VidWZbM10gIT0gJ0YnIHx8XFxuK1xcdCAgICBicHJtLVxcdTAwM2VidWZbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogTGl0dGxlLWVuZGlhbiAxNi1iaXQgZmllbGQsIHJlYWQgYnl0ZS13aXNlIGZvciB0aGUgdmVyaWZpZXIuICovXFxuK1xcdHJldHVybiAoX191OClicHJtLVxcdTAwM2VidWZbRV9NQUNISU5FX09GRl0gfFxcbitcXHQgICAgICAgKChfX3UxNikoX191OClicHJtLVxcdTAwM2VidWZbRV9NQUNISU5FX09GRiArIDFdIFxcdTAwM2NcXHUwMDNjIDgpO1xcbit9XFxuK1xcbitTRUMoXFxcInN0cnVjdF9vcHMucy9tYXRjaFxcXCIpXFxuK2Jvb2wgQlBGX1BST0coaW50ZXJwX2JpbmRfbWF0Y2gsIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuK3tcXG4rXFx0X191MTYgbWFjaGluZSA9IGVsZl9tYWNoaW5lKGJwcm0pO1xcbitcXG4rXFx0cmV0dXJuIG1hY2hpbmUgPT0gRU1fQUFSQ0g2NCB8fCBtYWNoaW5lID09IEVNX1JJU0NWIHx8XFxuK1xcdCAgICAgICBtYWNoaW5lID09IEVNX0FSTTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzdHJ1Y3Rfb3BzLnMvbG9hZFxcXCIpXFxuK2ludCBCUEZfUFJPRyhpbnRlcnBfYmluZF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE5hbWVzLCBub3QgcGF0aHM6IGVhY2ggb25lIHNlbGVjdHMgYSBmaWxlIHRoZSBlbnRyeSBwcmUtb3BlbmVkLCBzb1xcbitcXHQgKiBub3RoaW5nIGlzIHJlc29sdmVkIGhlcmUgb3IgbGF0ZXIsIGluIGFueSBuYW1lc3BhY2UuIFRoZSBidWZmZXJzXFxuK1xcdCAqIGFyZSBvbiB0aGUgc3RhY2sgYmVjYXVzZSB0aGUgdmVyaWZpZXIgcmVqZWN0cyAucm9kYXRhIGZvciBhIHNpemVkXFxuK1xcdCAqIG1lbW9yeSBhcmd1bWVudC5cXG4rXFx0ICovXFxuK1xcdGNoYXIgZmlyc3RbXSA9IFxcXCJmaXJzdFxcXCI7XFxuK1xcdGNoYXIgc2Vjb25kW10gPSBcXFwic2Vjb25kXFxcIjtcXG4rXFx0Y2hhciB1bmJvdW5kW10gPSBcXFwidW5ib3VuZFxcXCI7XFxuK1xcbitcXHRzd2l0Y2ggKGVsZl9tYWNoaW5lKGJwcm0pKSB7XFxuK1xcdGNhc2UgRU1fQUFSQ0g2NDpcXG4rXFx0XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBmaXJzdCwgc2l6ZW9mKGZpcnN0KSk7XFxuK1xcdGNhc2UgRU1fUklTQ1Y6XFxuK1xcdFxcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgc2Vjb25kLCBzaXplb2Yoc2Vjb25kKSk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBlbnRyeSBib3VuZCBub3RoaW5nIHVuZGVyIHRoaXMgbmFtZTogLUVOT0VOVCBmYWlscyB0aGUgZXhlYy4gKi9cXG4rXFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCB1bmJvdW5kLCBzaXplb2YodW5ib3VuZCkpO1xcbit9XFxuK1xcbitTRUMoXFxcIi5zdHJ1Y3Rfb3BzLmxpbmtcXFwiKVxcbitzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGludGVycF9iaW5kID0ge1xcbitcXHQubWF0Y2hcXHQ9ICh2b2lkICopaW50ZXJwX2JpbmRfbWF0Y2gsXFxuK1xcdC5sb2FkXFx0PSAodm9pZCAqKWludGVycF9iaW5kX2xvYWQsXFxuK1xcdC5uYW1lXFx0PSBcXFwiaW50ZXJwX2JpbmRcXFwiLFxcbit9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjowMi45MTIyNDgyMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTA5OTI3MTA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCSU5GTVRfTUlTQ1wiLFxuICAgIFwiQklORk1UX01JU0NfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmluZm10X21pc2NfZmluZF9pbnRlcnBcIixcbiAgICBcImJwZl9iaW5wcm1fc2VsZWN0X2ludGVycFwiLFxuICAgIFwiYnBmX2JpbnBybV9zZXRfaW50ZXJwXCIsXG4gICAgXCJsb2FkX21pc2NfYmluYXJ5XCIsXG4gICAgXCJibV9lbnRyeV93cml0ZVwiLFxuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYmluZm10X21pc2MgYWxsb3dpbmcgQlBGIGhhbmRsZXJzIHRvIGJpbmQgaW50ZXJwcmV0ZXJzIHRvIGFuIGVudHJ5IGFuZCBzZWxlY3QgdGhlbSBieSBuYW1lIGF0IGV4ZWMgdGltZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBmcy9iaW5mbXRfbWlzYy5jIGFuZCBmcy9iaW5mbXRfbWlzY19icGYuYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBiaW5mbXRfbWlzYyBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gb2YgbWF0Y2hpbmcgYmluYXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmOTI1MWE2MGRhMTY2MjI0YmVhOWJhYTNiZDljNDJmNzRiOWQ1Y2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDAyOjU2OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuaW5kZXggYzgwNzAyYjRjY2Q1Zi4uM2UyYjJhOTQxNWJjOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuQEAgLTEwNyw2ICsxMDcsMTUgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiAgICAgICAgICAgICBgYFBUX0lOVEVSUGBgLiBTZWUgdGhlIFwiTG9hZGVyIHN1YnN0aXR1dGlvblwiIHNlY3Rpb25cbiAgICAgICAgICAgICBiZWxvdy4gYGBMYGAgcmVqZWN0cyBgYFRgYCwgYGBQYGAsIGBgT2BgIGFuZCBgYENgYDtcbiAgICAgICAgICAgICBgYEZgYCBjb21wb3Nlcy5cbisgICAgICBgYERgYCAtIHJlZ2lzdGVyZWQgZGlzYWJsZWRcbisgICAgICAgICAgICBUaGUgZW50cnkgaXMgY3JlYXRlZCBkaXNhYmxlZCBpbnN0ZWFkIG9mIGJlaW5nIG1hdGNoYWJsZSBhdFxuKyAgICAgICAgICAgIG9uY2UsIGFuZCBoYXMgdG8gYmUgZW5hYmxlZCBieSB3cml0aW5nIGBgMWBgIHRvIGl0cyBmaWxlXG4rICAgICAgICAgICAgYmVmb3JlIGl0IGRpc3BhdGNoZXMgYW55dGhpbmcuIFRoaXMgc3BsaXRzIGEgcmVnaXN0cmF0aW9uXG4rICAgICAgICAgICAgaW50byBjcmVhdGluZyB0aGUgZW50cnkgYW5kIGFjdGl2YXRpbmcgaXQsIGxlYXZpbmcgcm9vbSB0b1xuKyAgICAgICAgICAgIGNvbmZpZ3VyZSBpdCBpbiBiZXR3ZWVuIC0gd2hpY2ggaXMgd2hhdCBhIGBgQmBgIGVudHJ5IHRoYXRcbisgICAgICAgICAgICBiaW5kcyBpbnRlcnByZXRlcnMgbmVlZHM7IHNlZSB0aGUgYnBmIHNlY3Rpb24gYmVsb3cuIFRoZSBmbGFnXG4rICAgICAgICAgICAgaXMgc3BlbnQgb24gdGhlIHJlZ2lzdHJhdGlvbiBhbmQgaXMgbm90IHJlYWQgYmFjazogd2hhdCBhblxuKyAgICAgICAgICAgIGVudHJ5IGZpbGUgcmVwb3J0cyBhZnRlcndhcmRzIGlzIHdoZXRoZXIgaXQgaXMgZW5hYmxlZC5cbiBcbiBcbiBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnM6XG5AQCAtMTg2LDkgKzE5NSw2MiBAQCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBiaW5hcnkncyBsb2NhdGlvbi4gSXQgc2VsZWN0cyB0aGVcbiBpbnRlcnByZXRlciBieSBjYWxsaW5nIHRoZSBgYGJwZl9iaW5wcm1fc2V0X2ludGVycCgpYGAga2Z1bmMgd2l0aCBhblxuIGFic29sdXRlIHBhdGggYW5kIHJldHVybmluZyBgYDBgYC4gQSBtYXRjaCBpcyBjb21taXR0ZWQ6IGEgZmFpbGluZ1xuIGBgbG9hZGBgIGZhaWxzIHRoZSBleGVjIHdpdGggaXRzIGVycm9yIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIHRvIGxhdGVyXG4tZW50cmllczsgYGAtRU5PRVhFQ2BgIGxldHMgdGhlIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cyBoYXZlIGEgZ28uIFRoZVxuLWludGVycHJldGVyIGlzIG9wZW5lZCB3aXRoIHRoZSBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGUgZXhlYyxcbi1leGFjdGx5IGFzIGEgc3RhdGljYWxseSByZWdpc3RlcmVkIGludGVycHJldGVyIHdvdWxkIGJlLlxuK2VudHJpZXM7IGBgLUVOT0VYRUNgYCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5IGZvcm1hdHMgaGF2ZSBhIGdvLiBBIHBhdGhcbitzZWxlY3RlZCB0aGlzIHdheSBpcyBvcGVuZWQgd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlIHRhc2sgZG9pbmcgdGhlXG4rZXhlYywgZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3aXRob3V0IGBgRmBgIHdvdWxkXG4rYmUuXG4rXG4rQW4gZW50cnkgY2FuIGluc3RlYWQgYmluZCB0aGUgaW50ZXJwcmV0ZXJzIGl0cyBoYW5kbGVyIG1heSB1c2UsIHNvIHRoYXQgbm9cbitwYXRoIGlzIHJlc29sdmVkIGF0IGV4ZWMgdGltZSBhdCBhbGwuIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aCBgYERgYCBpcyBub3RcbittYXRjaGFibGUgeWV0LCB3aGljaCBpcyB3aGF0IGxlYXZlcyBpdCBvcGVuIHRvIGJlaW5nIGdpdmVuIHRoZW0sIG9uZVxuK2BgK25hbWUgcGF0aGBgIHdyaXRlIGF0IGEgdGltZTo6XG4rXG4rICAgIGVjaG8gJzpxZW11OkI6Ojo6bXlfaGFuZGxlcjpEJyBcdTAwM2UgcmVnaXN0ZXJcbisgICAgZWNobyAnK2FhcmNoNjQgL3Vzci9iaW4vcWVtdS1hYXJjaDY0JyBcdTAwM2UgcWVtdVxuKyAgICBlY2hvICcrYXJtIC91c3IvYmluL3FlbXUtYXJtJyBcdTAwM2UgcWVtdVxuKyAgICBlY2hvIDEgXHUwMDNlIHFlbXVcbitcbitFYWNoIHBhdGggaXMgb3BlbmVkIGR1cmluZyBpdHMgd3JpdGUsIGluIHRoZSB3cml0aW5nIHByb2Nlc3MncyBjb250ZXh0IGFuZFxuK3dpdGggdGhlIGNyZWRlbnRpYWxzIHRoZSBlbnRyeSBmaWxlIHdhcyBvcGVuZWQgd2l0aCwgZXhhY3RseSB0aGUgd2F5IGBgRmBgXG4rcHJlLW9wZW5zIGEgc3RhdGljIGVudHJ5J3MgaW50ZXJwcmV0ZXI7IHRoZSBwYXRocyBtdXN0IGJlIGFic29sdXRlLiBUaGVcbitwYXRoIGlzIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgZmlyc3Qgc3BhY2UsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaXQgY2Fubm90XG4rZXhwcmVzcywgYW5kIG5vIGludGVycHJldGVyIGhhcyB0byBmaXQgaW4gYSByZWdpc3RlciBzdHJpbmcuIEFuIGVudHJ5XG4rYmluZHMgYXQgbW9zdCAxMDAgaW50ZXJwcmV0ZXJzOyBhIHdyaXRlIHBhc3QgdGhhdCBpcyByZWZ1c2VkIHdpdGhcbitgYC1FTk9TUENgYC4gVG8gYmluZCBhIGZpbGUgdGhhdCBoYXMgbm8gcGF0aCBvZiBpdHMgb3duIC0gYWxyZWFkeVxuK3VubGlua2VkLCBhIGBgbWVtZmRgYCwgb3IgcmVhY2hhYmxlIG9ubHkgaW4gYW5vdGhlciBtb3VudCBuYW1lc3BhY2UgLVxuK29wZW4gaXQgYW5kIHdyaXRlIGBgL3Byb2Mvc2VsZi9mZC9OYGAuXG4rXG4rVGhlIGBgbG9hZGBgIHByb2dyYW0gdGhlbiBzZWxlY3RzIG9uZSBwZXIgZXhlYyBieSBuYW1lIHdpdGggdGhlXG4rYGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKWBgIGtmdW5jLCBhbmQgZXZlcnkgZXhlYyBydW5zIGEgY2xvbmUgb2YgdGhlXG4rZmlsZSB0aGF0IHdhcyBvcGVuZWQuIFRoZSBwYXRoIGRlY2lkZXMgd2hpY2ggZmlsZSBpcyBib3VuZCBhbmQgbm90aGluZ1xuK2Vsc2U6IGl0IGlzIG5vdCByZXNvbHZlZCBhZ2FpbiwgaW4gYW55IG5hbWVzcGFjZSwgc28gd2hhdCBpdCBob2xkcyBsYXRlciAtXG4rb3Igd2hhdCBpdCBob2xkcyBpbiB0aGUgbmFtZXNwYWNlIG9mIHdob2V2ZXIgcnVucyB0aGUgYmluYXJ5IC0gbm8gbG9uZ2VyXG4rZGVjaWRlcyBhbnl0aGluZy5cbitcbitFbmFibGluZyB0aGUgZW50cnkgZW5kcyB0aGlzLiBJdHMgaW50ZXJwcmV0ZXJzIGFyZSByZWFkIGF0IGV4ZWMgdGltZSB3aXRoXG4rbm90aGluZyBidXQgYSByZWZlcmVuY2UgaGVsZCBvbiB0aGUgZW50cnksIHNvIGFuIGVudHJ5IHRoYXQgaGFzIGV2ZXIgYmVlblxuK21hdGNoYWJsZSBjYW4gbmV2ZXIgaGF2ZSBpdHMgc2V0IGNoYW5nZWQgYWdhaW46IHRoZSBmaXJzdCBgYDFgYCBzZWFscyBpdCxcbitmcm9tIHRoZW4gb24gYGArYGAgaXMgcmVmdXNlZCB3aXRoIGBgLUVCVVNZYGAsIGFuZCBhbiBlbnRyeSByZWdpc3RlcmVkXG4rd2l0aG91dCBgYERgYCBpcyBzZWFsZWQgZnJvbSB0aGUgc3RhcnQuIEJpbmRpbmcgYSBuYW1lIHR3aWNlIGlzIHJlZnVzZWRcbit3aXRoIGBgLUVFWElTVGBgLlxuK1xuK1NlbGVjdGlvbiBpcyBieSBuYW1lIHNvIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBwcm9ncmFtIG5lZWQgbm90XG4rYWdyZWUgb24gYW4gb3JkZXIsIGFuZCBzbyB0aGF0IGEgaGFuZGxlciBpcyBub3QgdGllZCB0byB3aGVyZSBhIGRpc3RyaWJ1dGlvblxuK3B1dHMgaXRzIGludGVycHJldGVycy4gQSBuYW1lIGlzIGEgc2luZ2xlIHdvcmQgb2YgcHJpbnRhYmxlIEFTQ0lJLCBhdCBtb3N0XG4rMzIgY2hhcmFjdGVyczsgYSBuYW1lIHRoZSBlbnRyeSBkaWQgbm90IGJpbmQgZ2l2ZXMgdGhlIHByb2dyYW0gYGAtRU5PRU5UYGAsXG4rd2hpY2ggaXQgY2FuIGFjdCBvbiBvciByZXR1cm4uIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIGl0IHdhc1xuK3JlZ2lzdGVyZWQgdW5kZXIsIGFuZCB0aGUgZW50cnkgcmVwb3J0cyB3aGF0IGl0IGJvdW5kOjpcbitcbisgICAgJCBjYXQgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3FlbXVcbisgICAgZW5hYmxlZFxuKyAgICBicGYgbXlfaGFuZGxlclxuKyAgICBicGYtaW50ZXJwcmV0ZXIgYWFyY2g2NCAvdXNyL2Jpbi9xZW11LWFhcmNoNjRcbisgICAgYnBmLWludGVycHJldGVyIGFybSAvdXNyL2Jpbi9xZW11LWFybVxuKyAgICBmbGFnczpcbitcbitUaGUgcGF0aCByZXBvcnRlZCBpcyB0aGUgb25lIHRoZSBpbnRlcnByZXRlciB3YXMgYm91bmQgdW5kZXIsIHdoaWNoIG5hbWVkXG4rdGhlIGZpbGUgYXQgdGhhdCBtb21lbnQ7IGl0IGlzIG5vdCByZS1yZXNvbHZlZCwgc28gaXQgaXMgYSByZWNvcmQgb2Ygd2hhdFxuK3dhcyBib3VuZCByYXRoZXIgdGhhbiBhIHByb21pc2UgYWJvdXQgd2hhdCB0aGF0IHBhdGggaG9sZHMgbm93LlxuIFxuIFRoZSBgYGxvYWRgYCBwcm9ncmFtIGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyIHdpdGhcbiB0aGUgYGBicGZfYmlucHJtX3NldF9pbnRlcnBfYXJnKClgYCBrZnVuYy4gSXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGVcbkBAIC0yMjQsOCArMjg2LDExIEBAIGhhbmRsZXIgY2FuIGRlY2lkZSB0aGVtIGRpZmZlcmVudGx5IGZvciBlYWNoIGJpbmFyeSBpdCBoYW5kbGVzOlxuICAgYGBQVF9JTlRFUlBgYCBhbmQgcnVucyB0aGUgYmluYXJ5IGFzIGEgZnVsbHkgbmF0aXZlIGV4ZWMgKHRoZSBgYExgYFxuICAgZmxhZykuIEl0IGV4Y2x1ZGVzIHRoZSBvdGhlciBmbGFncyBhbmQgYSBzdGFnZWQgaW50ZXJwcmV0ZXIgYXJndW1lbnQuXG4gXG4tQmVjYXVzZSB0aGVzZSBhcmUgcHJvZ3JhbSBjaG9pY2VzLCBhIGBgQmBgIGVudHJ5IGNhcnJpZXMgbm8gZmxhZ3MgaW4gdGhlXG4tcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCAocHJlLW9wZW4gYSBmaXhlZCBpbnRlcnByZXRlcikgaGFzIG5vIG1lYW5pbmcgZm9yIGl0LlxuK0JlY2F1c2UgdGhlc2UgYXJlIHByb2dyYW0gY2hvaWNlcywgYSBgYEJgYCBlbnRyeSBjYXJyaWVzIG5vIGludm9jYXRpb25cbitmbGFncyBpbiB0aGUgcmVnaXN0ZXIgc3RyaW5nOyBgYEZgYCBoYXMgbm9uZSB0byBzcGVsbCBmb3IgaXQgZWl0aGVyLCBzaW5jZVxuK3RoZSBpbnRlcnByZXRlcnMgaXQgYmluZHMgYWxyZWFkeSBwcmUtb3BlbiB3aGF0IGBgRmBgIHdvdWxkLiBUaGVcbityZWdpc3RyYXRpb24gZGlyZWN0aXZlIGBgRGBgIGlzIHRoZSBleGNlcHRpb246IGl0IGRlY2lkZXMgaG93IHRoZSBlbnRyeVxuK3N0YXJ0cyBvdXQsIG5vdCBob3cgdGhlIGludGVycHJldGVyIGlzIGludm9rZWQuXG4gXG4gSGFuZGxlcnMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgdGhlIHN0cnVjdF9vcHMgbWFwIHdhc1xuIHJlZ2lzdGVyZWQgaW4sIGZhbGxpbmcgYmFjayB0byBhbmNlc3RvciBuYW1lc3BhY2VzLCBtaXJyb3JpbmcgaG93XG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcbmluZGV4IDcwN2Y4YTE0ZjhhNjMuLmFkOGM0ZjY0YmYxMDIgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXG4rKysgYi9mcy9iaW5mbXRfbWlzYy5jXG5AQCAtMjQsNiArMjQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX2NvbnRleHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzdHJ0b3guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbkBAIC0zNyw2ICszOSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4rXG4gLyogRW50cnkgc3RhdHVzIGFuZCBtYXRjaCB0eXBlIGJpdCBudW1iZXJzLiAqL1xuIGVudW0gYmluZm10X21pc2NfZW50cnlfYml0cyB7XG4gXHRNSVNDX0ZNVF9FTkFCTEVEX0JJVFx0PSAwLFxuQEAgLTUyLDggKzU2LDE3IEBAIGVudW0gYmluZm10X21pc2NfZW50cnlfZmxhZ3Mge1xuIFx0TUlTQ19GTVRfT1BFTl9GSUxFXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMjgpLFxuIFx0TUlTQ19GTVRfVFJBTlNQQVJFTlRcdD0gKDFVIFx1MDAzY1x1MDAzYyAyNyksXG4gXHRNSVNDX0ZNVF9MT0FERVJcdFx0PSAoMVUgXHUwMDNjXHUwMDNjIDI2KSxcbitcdE1JU0NfRk1UX0RJU0FCTEVEXHQ9ICgxVSBcdTAwM2NcdTAwM2MgMjUpLFxuIH07XG4gXG4rLyogVGhlIGZsYWdzIHRoYXQgc2hhcGUgdGhlIGludm9jYXRpb247IGEgJ0InIGhhbmRsZXIgcGlja3MgdGhvc2UgcGVyIGV4ZWMuICovXG4rI2RlZmluZSBNSVNDX0ZNVF9JTlZPQ0FUSU9OX0ZMQUdTIChNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCB8XHRcXFxuK1x0XHRcdFx0ICAgTUlTQ19GTVRfT1BFTl9CSU5BUlkgfFx0XFxcbitcdFx0XHRcdCAgIE1JU0NfRk1UX0NSRURFTlRJQUxTIHxcdFxcXG4rXHRcdFx0XHQgICBNSVNDX0ZNVF9PUEVOX0ZJTEUgfFx0XHRcXFxuK1x0XHRcdFx0ICAgTUlTQ19GTVRfVFJBTlNQQVJFTlQgfFx0XFxcbitcdFx0XHRcdCAgIE1JU0NfRk1UX0xPQURFUilcbitcbiAvKipcbiAgKiBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyAtIGEgZmxhZyBjaGFyYWN0ZXIgb2YgdGhlIHJlZ2lzdGVyIHN0cmluZ1xuICAqIEBjOiB0aGUgY2hhcmFjdGVyIHVzZXJzcGFjZSB3cml0ZXMgYW5kIHJlYWRzIGJhY2tcbkBAIC03NSw2ICs4OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZmxhZyBtaXNjX2ZsYWdzW10gPSB7XG4gXHR7ICdGJywgTUlTQ19GTVRfT1BFTl9GSUxFLFx0MCxcdFx0XHRcIm9wZW4gaW50ZXJwcmV0ZXIgZmlsZSBub3dcIlx0fSxcbiBcdHsgJ1QnLCBNSVNDX0ZNVF9UUkFOU1BBUkVOVCxcdE1JU0NfRk1UX09QRU5fQklOQVJZLFx0XCJ0cmFuc3BhcmVudFwiXHRcdFx0fSxcbiBcdHsgJ0wnLCBNSVNDX0ZNVF9MT0FERVIsXHRcdDAsXHRcdFx0XCJsb2FkZXIgc3Vic3RpdHV0aW9uXCJcdFx0fSxcbitcdHsgJ0QnLCBNSVNDX0ZNVF9ESVNBQkxFRCxcdDAsXHRcdFx0XCJyZWdpc3RlciBkaXNhYmxlZFwiXHRcdH0sXG4gfTtcbiBcbiAvKiBMb29rIHVwIGEgZmxhZyBjaGFyYWN0ZXIsIE5VTEwgaWYgQGMgaXMgbm90IG9uZS4gKi9cbkBAIC05Niw5ICsxMTAsOSBAQCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkge1xuIFx0Y29uc3QgY2hhciAqaW50ZXJwcmV0ZXI7XHQvKiBmaWxlbmFtZSBvZiBpbnRlcnByZXRlciAqL1xuIFx0Y2hhciAqbmFtZTtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbi1cdHN0cnVjdCBmaWxlICppbnRlcnBfZmlsZTtcbiBcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7XHQvKiBicGYtYmFja2VkIGhhbmRsZXIgKCdCJykgKi9cbiBcdGNvbnN0IGNoYXIgKmJwZl9vcHNfbmFtZTtcbitcdHN0cnVjdCBsaXN0X2hlYWQgaW50ZXJwcztcdC8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi9cbiBcdHJlZmNvdW50X3QgdXNlcnM7XHRcdC8qIHN5bmMgcmVtb3ZhbCB3aXRoIGxvYWRfbWlzY19iaW5hcnkoKSAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiBcdGNoYXIgYnVmW107XHRcdFx0LyogcmVnaXN0ZXIgc3RyaW5nLCBmaWVsZHMgcG9pbnQgaW4gaGVyZSAqL1xuQEAgLTE3NSw3ICsxODksMTIgQEAgc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdC8qIFdhbGsgYWxsIHRoZSByZWdpc3RlcmVkIGhhbmRsZXJzLiAqL1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcywgbm9kZSxcbiBcdFx0XHRcdCBzcmN1X3JlYWRfbG9ja19oZWxkKFx1MDAyNmJtX2VudHJpZXNfc3JjdSkpIHtcbi1cdFx0LyogTWFrZSBzdXJlIHRoaXMgb25lIGlzIGN1cnJlbnRseSBlbmFibGVkLiAqL1xuK1x0XHQvKlxuK1x0XHQgKiBNYWtlIHN1cmUgdGhpcyBvbmUgaXMgY3VycmVudGx5IGVuYWJsZWQuIEFuIGVudHJ5IGVudGVyc1xuK1x0XHQgKiB0aGUgbGlzdCBhdCBtb3N0IG9uY2UgYW5kIG9ubHkgd2hvbGU6IGl0cyBjb25maWd1cmF0aW9uIGlzXG4rXHRcdCAqIG9yZGVyZWQgYmVmb3JlIHRoZSByY3UgaW5zZXJ0aW9uIHRoYXQgbWFrZXMgaXQgdmlzaWJsZVxuK1x0XHQgKiBoZXJlLlxuK1x0XHQgKi9cbiBcdFx0aWYgKCF0ZXN0X2JpdChNSVNDX0ZNVF9FTkFCTEVEX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtMjE2LDYgKzIzNSwxMDggQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiBcdHJldHVybiBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSk7XG4gfVxuIFxuKy8qKlxuKyAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWVcbisgKiBAaW50ZXJwczogdGhlIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoXG4rICogQG5hbWU6IHRoZSBuYW1lIHRvIGxvb2sgZm9yXG4rICpcbisgKiBSZXR1cm46IHRoZSBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBOVUxMIGlmIEBpbnRlcnBzIGhhcyBub25lIGJ5IHRoYXQgbmFtZVxuKyAqL1xuK2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKlxuK2JpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShpbnRlcnAsIGludGVycHMsIGxpc3QpXG4rXHRcdGlmICghc3RyY21wKGludGVycC1cdTAwM2VuYW1lLCBuYW1lKSlcbitcdFx0XHRyZXR1cm4gaW50ZXJwO1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuKy8qIFVuZG8gdGhlIG9wZW5fZXhlYygpIGEgcHJlLW9wZW5lZCBpbnRlcnByZXRlciBmaWxlIGNhbWUgZnJvbS4gKi9cbitzdGF0aWMgdm9pZCBjbG9zZV9pbnRlcnBfZmlsZShzdHJ1Y3QgZmlsZSAqZilcbit7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwoZikpXG4rXHRcdHJldHVybjtcbitcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhmKTtcbitcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4rfVxuK1xuK0RFRklORV9GUkVFKGNsb3NlX2ludGVycF9maWxlLCBzdHJ1Y3QgZmlsZSAqLCBjbG9zZV9pbnRlcnBfZmlsZShfVCkpXG4rXG4rLypcbisgKiBPcGVuIGFuIGludGVycHJldGVyIEBwYXRoIGZvciBleGVjdXRpb246IG5vdywgaW4gdGhlIHdyaXRlcidzIGNvbnRleHQsXG4rICogYW5kIC0gc2luY2UgYmluZm10X21pc2MgbW91bnRzIGNhbiBiZSB1bnByaXZpbGVnZWQgLSB3aXRoIEBjcmVkLCB0aGVcbisgKiBjcmVkZW50aWFscyB0aGUgY29udHJvbCBmaWxlIGJlaW5nIHdyaXR0ZW4gd2FzIG9wZW5lZCB3aXRoLCBub3QgdGhlXG4rICogd3JpdGVyJ3Mgb3duLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgZmlsZSAqb3Blbl9pbnRlcnBfZmlsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRzdHJ1Y3QgZmlsZSAqZjtcbitcbitcdHNjb3BlZF93aXRoX2NyZWRzKGNyZWQpXG4rXHRcdGYgPSBvcGVuX2V4ZWMocGF0aCk7XG4rXHRpZiAoSVNfRVJSKGYpKVxuK1x0XHRwcl9ub3RpY2UoXCJyZWdpc3RlcjogZmFpbGVkIHRvIGluc3RhbGwgaW50ZXJwcmV0ZXIgJXNcXG5cIiwgcGF0aCk7XG4rXHRyZXR1cm4gZjtcbit9XG4rXG4rLyogUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXJzIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGguICovXG4rc3RhdGljIHZvaWQgZW50cnlfcHV0X2ludGVycHJldGVycyhzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4re1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwLCAqdG1wO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGludGVycCwgdG1wLCBcdTAwMjZlLVx1MDAzZWludGVycHMsIGxpc3QpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2aW50ZXJwLVx1MDAzZWxpc3QpO1xuK1x0XHRjbG9zZV9pbnRlcnBfZmlsZShpbnRlcnAtXHUwMDNlZmlsZSk7XG4rXHRcdGtmcmVlKGludGVycCk7XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlciAtIGJpbmQgYW4gb3BlbmVkIGludGVycHJldGVyIHRvIEBlXG4rICogQGU6IGVudHJ5IGJlaW5nIGNvbmZpZ3VyZWRcbisgKiBAbmFtZTogbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHdpbGwgc2VsZWN0IGl0IGJ5OyBlbXB0eSBmb3IgdGhlIGZpeGVkXG4rICogICAgICAgIGludGVycHJldGVyIG9mIGEgc3RhdGljIGVudHJ5XG4rICogQHBhdGg6IHRoZSBwYXRoIEBmIHdhcyBvcGVuZWQgZnJvbVxuKyAqIEBmOiB0aGUgaW50ZXJwcmV0ZXIsIG9wZW5lZCBmb3IgZXhlY3V0aW9uXG4rICpcbisgKiBFdmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiBAZiwgc28gdGhlIHBhdGggZGVjaWRlZCB3aGljaCBmaWxlIGlzIGJvdW5kXG4rICogYW5kIG5vdGhpbmcgZWxzZTogaXQgaXMgbm90IHJlc29sdmVkIGFnYWluLCBpbiBhbnkgbmFtZXNwYWNlLlxuKyAqXG4rICogVGhlIGNhbGxlciBoYXMgdG8gaGF2ZSB2YWxpZGF0ZWQgQG5hbWUgYW5kIEBwYXRoLCBlc3RhYmxpc2hlZCB0aGF0IEBlXG4rICogY2Fubm90IGJlIG1hdGNoZWQgeWV0LCBhbmQgb3ducyBAZiB1bnRpbCB0aGlzIHN1Y2NlZWRzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuKyAqL1xuK3N0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbitcdFx0XHRcdCAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBmaWxlICpmKVxuK3tcbitcdHNpemVfdCBubGVuID0gc3RybGVuKG5hbWUpLCBwbGVuID0gc3RybGVuKHBhdGgpO1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xuK1xuK1x0aWYgKGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKFx1MDAyNmUtXHUwMDNlaW50ZXJwcywgbmFtZSkpXG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0aWYgKGxpc3RfY291bnRfbm9kZXMoXHUwMDI2ZS1cdTAwM2VpbnRlcnBzKSBcdTAwM2U9IEJJTkZNVF9NSVNDX0lOVEVSUF9NQVgpXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1xuK1x0LyogT25lIGFsbG9jYXRpb24sIGJvdGggc3RyaW5ncyBpbiBpdCwgbGlrZSB0aGUgZW50cnkncyBvd24gYnVmZmVyLiAqL1xuK1x0aW50ZXJwID0ga21hbGxvYyhzdHJ1Y3Rfc2l6ZShpbnRlcnAsIG5hbWUsIG5sZW4gKyBwbGVuICsgMiksXG4rXHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRpZiAoIWludGVycClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpbnRlcnAtXHUwMDNlcGF0aCA9IGludGVycC1cdTAwM2VuYW1lICsgbmxlbiArIDE7XG4rXHRzdHJzY3B5KGludGVycC1cdTAwM2VuYW1lLCBuYW1lLCBubGVuICsgMSk7XG4rXHRzdHJzY3B5KGludGVycC1cdTAwM2VuYW1lICsgbmxlbiArIDEsIHBhdGgsIHBsZW4gKyAxKTtcbitcdGludGVycC1cdTAwM2VmaWxlID0gZjtcbitcdC8qIFB1Ymxpc2ggdGhlIG5vZGU6IGEgbG9ja2xlc3MgY2F0IG1heSBiZSB3YWxraW5nIHRoZSBsaXN0LiAqL1xuK1x0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2aW50ZXJwLVx1MDAzZWxpc3QsIFx1MDAyNmUtXHUwMDNlaW50ZXJwcyk7XG4rXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiBpbnRlcnByZXRlcjogJXMgeyVzfVxcblwiLCBuYW1lLCBwYXRoKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiB7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnksIHJjdSk7XG5AQCAtMjMyLDIxICszNTMsMzYgQEAgc3RhdGljIHZvaWQgYm1fZW50cnlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gICpcbiAgKiBGcmVlIGVudHJ5IHN5bmNpbmcgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgYW5kIGRlZmVyIGZpbmFsIGZyZWUgdG9cbiAgKiBsb2FkX21pc2NfYmluYXJ5KCkgaW4gY2FzZSBpdCBpcyB1c2luZyB0aGUgYmluYXJ5IHR5cGUgaGFuZGxlciB3ZSB3ZXJlXG4tICogcmVxdWVzdGVkIHRvIHJlbW92ZS5cbisgKiByZXF1ZXN0ZWQgdG8gcmVtb3ZlLiBBbHNvIHRoZSB0ZWFyZG93biBmb3IgYSByZWdpc3RyYXRpb24gdGhhdCBmYWlsc1xuKyAqIGJlZm9yZSBhZGRfZW50cnkoKSBwdWJsaXNoZXMgdGhlIGVudHJ5LlxuICAqL1xuIHN0YXRpYyB2b2lkIHB1dF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUpXG4ge1xuK1x0aWYgKElTX0VSUl9PUl9OVUxMKGUpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmUtXHUwMDNldXNlcnMpKSB7XG4tXHRcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbi1cdFx0XHRleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZS1cdTAwM2VpbnRlcnBfZmlsZSk7XG4tXHRcdFx0ZmlscF9jbG9zZShlLVx1MDAzZWludGVycF9maWxlLCBOVUxMKTtcbi1cdFx0fVxuK1x0XHRlbnRyeV9wdXRfaW50ZXJwcmV0ZXJzKGUpO1xuIFx0XHQvKiBXYWxrZXJzIG1heSBzdGlsbCBkZXJlZmVyZW5jZSB0aGlzIGVudHJ5LCBldmVuIHNsZWVwaW5nLiAqL1xuIFx0XHRjYWxsX3NyY3UoXHUwMDI2Ym1fZW50cmllc19zcmN1LCBcdTAwMjZlLVx1MDAzZXJjdSwgYm1fZW50cnlfZnJlZV9yY3UpO1xuIFx0fVxuIH1cbiBcbi1ERUZJTkVfRlJFRShwdXRfYmluZm10X2hhbmRsZXIsIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqLCBpZiAoX1QpIHB1dF9iaW5mbXRfaGFuZGxlcihfVCkpXG4rREVGSU5FX0ZSRUUocHV0X2JpbmZtdF9oYW5kbGVyLCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKiwgcHV0X2JpbmZtdF9oYW5kbGVyKF9UKSlcbitcbisvKiBEcm9wIGV2ZXJ5dGhpbmcgYSBsb2FkIHByb2dyYW0gc3RhZ2VkIGZvciB0aGlzIGV4ZWMuICovXG4rc3RhdGljIHZvaWQgZHJvcF9zdGFnZWRfc2VsZWN0aW9uKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4re1xuK1x0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XG4rXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnBfYXJnKTtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcgPSBOVUxMO1xuK1x0aWYgKGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKSB7XG4rXHRcdGZwdXQoYnBybS1cdTAwM2VicGZfaW50ZXJwX2ZpbGUpO1xuK1x0XHRicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSA9IE5VTEw7XG4rXHR9XG4rXHRicHJtLVx1MDAzZWJwZl9mbGFncyA9IDA7XG4rfVxuIFxuIC8qKlxuICAqIGN1cnJlbnRfYmluZm10X21pc2MgLSBnZXQgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlIG9mIHRoZSBjYWxsZXIncyB1c2VyIG5hbWVzcGFjZVxuQEAgLTI4MSw3ICs0MTcsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICpjdXJyZW50X2JpbmZtdF9taXNjKHZvaWQpXG4gICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4gICpcbiAgKiBBIHN0YXRpYyBlbnRyeSBjYXJyaWVzIGl0cyBpbnRlcnByZXRlciBwYXRoLCBmb3IgYSAnQicgZW50cnkgdGhlXG4tICogaGFuZGxlcidzIGxvYWQgcHJvZ3JhbSBzZWxlY3RzIGl0LiBUaGUgbWF0Y2ggaXMgY29tbWl0dGVkLCBzbyBhIGZhaWxpbmdcbisgKiBoYW5kbGVyJ3MgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQsIGVpdGhlciBieSBwYXRoIG9yIGJ5IHRoZSBuYW1lIG9mIG9uZVxuKyAqIG9mIHRoZSBpbnRlcnByZXRlcnMgdGhlIGVudHJ5IGJvdW5kLiBUaGUgbWF0Y2ggaXMgY29tbWl0dGVkLCBzbyBhIGZhaWxpbmdcbiAgKiBwcm9ncmFtIGZhaWxzIHRoZSBleGVjLlxuICAqXG4gICogUmV0dXJuOiB0aGUgaW50ZXJwcmV0ZXIgb24gc3VjY2VzcywgYW4gRVJSX1BUUiBvbiBmYWlsdXJlXG5AQCAtMjkxLDE1ICs0MjgsMjAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcihjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4ge1xuIFx0aW50IHJldHZhbDtcbiBcbitcdC8qXG4rXHQgKiBEcm9wIHdoYXQgYSBwcmV2aW91cyBjaGFpbiBsZXZlbCBzdGFnZWQgYmVmb3JlIGFueXRoaW5nIGNhbiBwaWNrIGl0XG4rXHQgKiB1cC4gQSBzdGF0aWMgZW50cnkgc3RhZ2VzIG5vdGhpbmcgYnV0IGNvbnN1bWVzIGEgc3RhZ2VkIGZpbGUganVzdFxuK1x0ICogbGlrZSBhICdCJyBlbnRyeSBkb2VzLlxuK1x0ICovXG4rXHRkcm9wX3N0YWdlZF9zZWxlY3Rpb24oYnBybSk7XG4rXG4gXHRpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gZS1cdTAwM2VpbnRlcnByZXRlcjtcbiBcbi1cdC8qIERyb3AgYW55IGludGVycHJldGVyIG9yIGZsYWdzIGEgcHJldmlvdXMgY2hhaW4gbGV2ZWwgc3RhZ2VkLiAqL1xuLVx0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbi1cdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XG4tXHRicHJtLVx1MDAzZWJwZl9mbGFncyA9IDA7XG4tXG4rXHQvKiBUaGUgaW50ZXJwcmV0ZXJzIHRoaXMgZW50cnkgbGV0cyB0aGUgcHJvZ3JhbSBjaG9vc2UgZnJvbS4gKi9cbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycHMgPSBcdTAwMjZlLVx1MDAzZWludGVycHM7XG4gXHRyZXR2YWwgPSBlLVx1MDAzZWJwZl9vcHMtXHUwMDNlbG9hZChicHJtKTtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycHMgPSBOVUxMO1xuIFx0aWYgKHJldHZhbCkge1xuIFx0XHQvKiBLZWVwIGEgcHJvZ3JhbS1zdXBwbGllZCBlcnJvciB3aXRoaW4gZXJybm8gcmFuZ2UuICovXG4gXHRcdGlmIChyZXR2YWwgXHUwMDNlIDAgfHwgcmV0dmFsIFx1MDAzYyAtTUFYX0VSUk5PKVxuQEAgLTMxNyw5ICs0NTksNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfc2VsZWN0X2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiBcbiBkcm9wX3N0YWdlZDpcbiBcdC8qIEEgZmFpbGluZyBsb2FkIGxlYXZlcyBub3RoaW5nIGJlaGluZCBmb3IgbGF0ZXIgZW50cmllcy4gKi9cbi1cdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcpO1xuLVx0YnBybS1cdTAwM2VicGZfaW50ZXJwX2FyZyA9IE5VTEw7XG4tXHRicHJtLVx1MDAzZWJwZl9mbGFncyA9IDA7XG4rXHRkcm9wX3N0YWdlZF9zZWxlY3Rpb24oYnBybSk7XG4gXHRyZXR1cm4gRVJSX1BUUihyZXR2YWwpO1xuIH1cbiBcbkBAIC0zNjQsMjMgKzUwNCwzNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlbnRyeV9pbnZvY2F0aW9uX2ZsYWdzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcbiAvKipcbiAgKiBlbnRyeV9vcGVuX2ludGVycHJldGVyIC0gb3BlbiB0aGUgZW50cnkncyBpbnRlcnByZXRlciBmb3IgZXhlY3V0aW9uXG4gICogQGU6IG1hdGNoZWQgYmluYXJ5IHR5cGUgaGFuZGxlclxuKyAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxuICAqIEBpbnRlcnByZXRlcjogdGhlIGludGVycHJldGVyIHNlbGVjdGVkIGZvciB0aGlzIGV4ZWNcbiAgKlxuICAqIEFuICdGJyBlbnRyeSBoYW5kcyBvdXQgYSBjbG9uZSBvZiB0aGUgZmlsZSBpdCBwcmUtb3BlbmVkIGF0IHJlZ2lzdHJhdGlvbixcbi0gKiBhbnkgb3RoZXIgZW50cnkgb3BlbnMgdGhlIHNlbGVjdGVkIHBhdGguXG4rICogYW5kIHNvIGRvZXMgYSAnQicgZW50cnkgd2hvc2UgbG9hZCBwcm9ncmFtIHNlbGVjdGVkIG9uZSBvZiB0aGVcbisgKiBpbnRlcnByZXRlcnMgaXQgYm91bmQuIEFueSBvdGhlciBlbnRyeSBvcGVucyB0aGUgc2VsZWN0ZWQgcGF0aC5cbiAgKlxuICAqIFJldHVybjogdGhlIG9wZW5lZCBpbnRlcnByZXRlciBvbiBzdWNjZXNzLCBhbiBFUlJfUFRSIG9uIGZhaWx1cmVcbiAgKi9cbiBzdGF0aWMgc3RydWN0IGZpbGUgKmVudHJ5X29wZW5faW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0XHRcdFx0XHQgICBjb25zdCBjaGFyICppbnRlcnByZXRlcilcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGUgX19mcmVlKGZwdXQpID0gTlVMTDtcbitcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbitcdHN0cnVjdCBmaWxlICpib3VuZDtcbiBcdGludCByZXR2YWw7XG4gXG4tXHRpZiAoIShlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpKVxuK1x0aWYgKGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKSB7XG4rXHRcdGJvdW5kID0gYnBybS1cdTAwM2VicGZfaW50ZXJwX2ZpbGU7XG4rXHR9IGVsc2UgaWYgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xuK1x0XHQvKiBBbiAnRicgZW50cnkgcHJlLW9wZW5lZCBleGFjdGx5IG9uZSBpbnRlcnByZXRlci4gKi9cbitcdFx0aW50ZXJwID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZlLVx1MDAzZWludGVycHMsXG4rXHRcdFx0XHRcdCAgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCwgbGlzdCk7XG4rXHRcdGJvdW5kID0gaW50ZXJwLVx1MDAzZWZpbGU7XG4rXHR9IGVsc2Uge1xuIFx0XHRyZXR1cm4gb3Blbl9leGVjKGludGVycHJldGVyKTtcbitcdH1cbiBcbi1cdGludGVycF9maWxlID0gZmlsZV9jbG9uZV9vcGVuKGUtXHUwMDNlaW50ZXJwX2ZpbGUpO1xuK1x0aW50ZXJwX2ZpbGUgPSBmaWxlX2Nsb25lX29wZW4oYm91bmQpO1xuIFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpXG4gXHRcdHJldHVybiBpbnRlcnBfZmlsZTtcbiBcbkBAIC00OTAsNyArNjQzLDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHQgKiB0byB0aGUgcmVhbCBmb3JtYXQgaW4gdGhlIHNhbWUgcm91bmQuXG4gXHQgKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgTUlTQ19GTVRfTE9BREVSKSB7XG4tXHRcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGludGVycHJldGVyKTtcbitcdFx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgYnBybSwgaW50ZXJwcmV0ZXIpO1xuIFx0XHRpZiAoSVNfRVJSKGludGVycF9maWxlKSkge1xuIFx0XHRcdHJldHZhbCA9IFBUUl9FUlIoaW50ZXJwX2ZpbGUpO1xuIFx0XHRcdC8qIERlY2xpbmluZyBoZXJlIHdvdWxkIHJ1biB0aGUgYmluYXJ5J3Mgb3duIFBUX0lOVEVSUC4gKi9cbkBAIC01MTIsNyArNjY1LDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgaW50ZXJwcmV0ZXIpO1xuK1x0aW50ZXJwX2ZpbGUgPSBlbnRyeV9vcGVuX2ludGVycHJldGVyKGZtdCwgYnBybSwgaW50ZXJwcmV0ZXIpO1xuIFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGludGVycF9maWxlKTtcbiBcbkBAIC02ODQsNyArODM3LDcgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0XHRcdCAgICAgIHNpemVfdCBjb3VudClcbiB7XG4gXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4tXHRjaGFyICpidWYsICpwLCAqZmxhZ3M7XG4rXHRjaGFyICpidWYsICpwO1xuIFx0Y2hhciBkZWw7XG4gXG4gXHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiByZWNlaXZlZCAlenUgYnl0ZXNcXG5cIiwgY291bnQpO1xuQEAgLTcwMSw2ICs4NTQsNyBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdHAgPSBidWYgPSBlLVx1MDAzZWJ1ZjtcbiBcbiBcdG1lbXNldChlLCAwLCBzaXplb2YoKmUpKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmUtXHUwMDNlaW50ZXJwcyk7XG4gXHRpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSlcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XG4gXG5AQCAtNzgwLDE4ICs5MzQsMzAgQEAgc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHR9XG4gXG4gXHQvKiBQYXJzZSB0aGUgJ2ZsYWdzJyBmaWVsZC4gKi9cbi1cdGZsYWdzID0gcDtcbiBcdHAgPSBjaGVja19zcGVjaWFsX2ZsYWdzKHAsIGUpO1xuIFxuIFx0LypcbiBcdCAqIEEgYnBmIGhhbmRsZXIgZGVjaWRlcyB0aGUgaW52b2NhdGlvbiBmbGFncyBwZXIgZXhlYyB3aXRoXG4gXHQgKiBicGZfYmlucHJtX3NldF9mbGFncygpIHJhdGhlciB0aGFuIGZpeGluZyB0aGVtIGF0IHJlZ2lzdHJhdGlvbiwgYW5kXG4tXHQgKiAnRicgKHByZS1vcGVuIGEgZml4ZWQgaW50ZXJwcmV0ZXIpIGlzIG1lYW5pbmdsZXNzIGZvciBpdCwgc28gYSAnQidcbi1cdCAqIGVudHJ5J3MgZmxhZ3MgZmllbGQgaGFzIHRvIGJlIGVtcHR5LlxuK1x0ICogdGhlIGludGVycHJldGVycyBpdCBiaW5kcyBwcmUtb3BlbiB3aGF0ICdGJyB3b3VsZCBoYXZlLCBzbyBhICdCJ1xuK1x0ICogZW50cnkgY2FycmllcyBubyBpbnZvY2F0aW9uIGZsYWdzLlxuIFx0ICovXG4tXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2IHAgIT0gZmxhZ3MpXG4rXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfQlBGX0JJVCwgXHUwMDI2ZS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX0lOVk9DQVRJT05fRkxBR1MpKVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcbitcdC8qXG4rXHQgKiAnRCcgaXMgYSBkaXJlY3RpdmUgZm9yIHRoaXMgcmVnaXN0cmF0aW9uIHJhdGhlciB0aGFuIGEgbGFzdGluZ1xuK1x0ICogcHJvcGVydHksIHNvIGNvbnN1bWUgaXQ6IHRoZSBlbnRyeSBpcyBjcmVhdGVkIGRpc2FibGVkIGFuZCBzdGF5c1xuK1x0ICogb3V0IG9mIHRoZSBzZWFyY2ggbGlzdCB1bnRpbCAnMScgaXMgd3JpdHRlbiB0byBpdHMgZW50cnkgZmlsZS5cbitcdCAqIFN0YXlpbmcgb3V0IGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzO1xuK1x0ICogdGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgaXQsIGZvciBnb29kLlxuK1x0ICovXG4rXHRpZiAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfRElTQUJMRUQpIHtcbitcdFx0ZS1cdTAwM2VmbGFncyBcdTAwMjY9IH5NSVNDX0ZNVF9ESVNBQkxFRDtcbitcdFx0Y2xlYXJfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKTtcbitcdH1cbitcbiBcdC8qIFRyYW5zcGFyZW5jeSBwcmVzZXJ2ZXMgdGhlIHdob2xlIGFyZ3YsIGFyZ3ZbMF0gaW5jbHVkZWQuICovXG4gXHRpZiAoKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX1RSQU5TUEFSRU5UKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApKVxuQEAgLTgxNCw2ICs5ODAsOCBAQCBzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdCAgICBlLVx1MDAzZWludGVycHJldGVyWzBdICE9ICcvJylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXG4rXHQvKiBCb3JuIGhvbGRpbmcgb25lIHJlZmVyZW5jZTsgcHV0X2JpbmZtdF9oYW5kbGVyKCkgaXMgdGhlIHRlYXJkb3duLiAqL1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmUtXHUwMDNldXNlcnMsIDEpO1xuIFx0cmV0dXJuIG5vX2ZyZWVfcHRyKGUpO1xuIH1cbiBcbkBAIC04MjUsMTggKzk5MywxNyBAQCBlbnVtIGJtX2NvbW1hbmQge1xuIFx0Qk1fQ01EX1JFTU9WRSxcdC8qIFwiLTFcIiAqL1xuIH07XG4gXG4rLyogTG9uZ2VzdCBvZiB0aGUgY29tbWFuZHMgYWJvdmUsIFwiLTFcXG5cIi4gKi9cbisjZGVmaW5lIE1BWF9DT01NQU5EX0xFTkdUSCAzXG4rXG4gLypcbiAgKiBQYXJzZSB3aGF0IHVzZXJzcGFjZSB3cm90ZSB0byAvc3RhdHVzIG9yIGFuIGVudHJ5IGZpbGU6ICcxJyBlbmFibGVzLFxuICAqICcwJyBkaXNhYmxlcyBhbmQgJy0xJyByZW1vdmVzIHRoZSBlbnRyeSBvciBhbGwgZW50cmllcy5cbiAgKi9cbi1zdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuK3N0YXRpYyBpbnQgcGFyc2VfY29tbWFuZChjb25zdCBjaGFyICpzLCBzaXplX3QgY291bnQpXG4ge1xuLVx0Y2hhciBzWzRdO1xuLVxuLVx0aWYgKGNvdW50IFx1MDAzZSAzKVxuK1x0aWYgKGNvdW50IFx1MDAzZSBNQVhfQ09NTUFORF9MRU5HVEgpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0aWYgKGNvcHlfZnJvbV91c2VyKHMsIGJ1ZmZlciwgY291bnQpKVxuLVx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmICghY291bnQpXG4gXHRcdHJldHVybiBCTV9DTURfSUdOT1JFO1xuIFx0aWYgKHNbY291bnQgLSAxXSA9PSAnXFxuJylcbkBAIC04NTAsOCArMTAxNywyNiBAQCBzdGF0aWMgaW50IHBhcnNlX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuKy8qIENvcHkgaW4gYSBjb21tYW5kIGZyb20gYSBmaWxlIHRoYXQgdGFrZXMgbm90aGluZyBlbHNlLCBhbmQgcGFyc2UgaXQuICovXG4rc3RhdGljIGludCByZWFkX2NvbW1hbmQoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuK3tcbitcdGNoYXIgc1tNQVhfQ09NTUFORF9MRU5HVEggKyAxXTtcbitcbitcdGlmIChjb3VudCBcdTAwM2Ugc2l6ZW9mKHMpIC0gMSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoY29weV9mcm9tX3VzZXIocywgYnVmZmVyLCBjb3VudCkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0cmV0dXJuIHBhcnNlX2NvbW1hbmQocywgY291bnQpO1xuK31cbitcbiAvKiBnZW5lcmljIHN0dWZmICovXG4gXG4rLyogVGhlIHJvb3QgZGlyZWN0b3J5J3MgaW5vZGU7IGl0cyBsb2NrIHNlcmlhbGl6ZXMgY29uZmlndXJpbmcgYW4gaW5zdGFuY2UuICovXG4rc3RhdGljIHN0cnVjdCBpbm9kZSAqYm1fcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3tcbitcdHJldHVybiBkX2lub2RlKHNiLVx1MDAzZXNfcm9vdCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGJtX3NlcV9oZXgoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1OCAqZGF0YSwgaW50IHNpemUpXG4ge1xuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkrKylcbkBAIC04NjcsMTAgKzEwNTIsMjMgQEAgc3RhdGljIGludCBibV9lbnRyeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKVxuIFx0ZWxzZVxuIFx0XHRzZXFfcHV0cyhtLCBcImRpc2FibGVkXFxuXCIpO1xuIFxuLVx0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuK1x0aWYgKHRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgKmludGVycDtcbitcbiBcdFx0c2VxX3ByaW50ZihtLCBcImJwZiAlc1xcblwiLCBlLVx1MDAzZWJwZl9vcHMtXHUwMDNlbmFtZSk7XG4tXHRlbHNlXG4rXHRcdC8qXG4rXHRcdCAqIEEgc3RhZ2VkIGVudHJ5J3Mgc2V0IGNhbiBzdGlsbCBncm93LCBzbyBldmVyeSBiaW5kaW5nIGlzXG4rXHRcdCAqIHJjdS1wdWJsaXNoZWQuIFRoZSBvcGVuIGZpbGUgcGlucyB0aGUgZW50cnkgYW5kIHdpdGggaXRcbitcdFx0ICogZXZlcnkgbm9kZSwgc28gcmN1IGlzIGZvciB0aGUgdGVhcmluZywgbm90IHRoZSBsaWZldGltZS5cbitcdFx0ICovXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaW50ZXJwLCBcdTAwMjZlLVx1MDAzZWludGVycHMsIGxpc3QpXG4rXHRcdFx0c2VxX3ByaW50ZihtLCBcImJwZi1pbnRlcnByZXRlciAlcyAlc1xcblwiLFxuK1x0XHRcdFx0ICAgaW50ZXJwLVx1MDAzZW5hbWUsIGludGVycC1cdTAwM2VwYXRoKTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR9IGVsc2Uge1xuIFx0XHRzZXFfcHJpbnRmKG0sIFwiaW50ZXJwcmV0ZXIgJXNcXG5cIiwgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4rXHR9XG4gXG4gXHQvKiBwcmludCB0aGUgc3BlY2lhbCBmbGFncyAqL1xuIFx0c2VxX3B1dHMobSwgXCJmbGFnczogXCIpO1xuQEAgLTk5MiwxMCArMTE5MCwxMSBAQCBzdGF0aWMgdm9pZCByZW1vdmVfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuIC8qIFJlbW92ZSBAZSB1bmxlc3MgaXQgd2FzIGFscmVhZHkgcmVtb3ZlZC4gKi9cbiBzdGF0aWMgdm9pZCBibV9yZW1vdmVfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGRfaW5vZGUoc2ItXHUwMDNlc19yb290KTtcbitcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoc2IpO1xuIFxuIFx0aW5vZGVfbG9ja19uZXN0ZWQocm9vdCwgSV9NVVRFWF9QQVJFTlQpO1xuLVx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZlLVx1MDAzZW5vZGUpKVxuK1x0LyogQSBzdGFnZWQgZW50cnkgaXMgbm90IGhhc2hlZDsgdGhlIGRlbnRyeSBzYXlzIGlmIGl0IHdhcyByZW1vdmVkLiAqL1xuK1x0aWYgKCFkX3VuaGFzaGVkKGUtXHUwMDNlZGVudHJ5KSlcbiBcdFx0cmVtb3ZlX2JpbmZtdF9oYW5kbGVyKGlfYmluZm10X21pc2Mocm9vdCksIGUpO1xuIFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xuIH1cbkBAIC0xMDA0LDEzICsxMjAzLDIxIEBAIHN0YXRpYyB2b2lkIGJtX3JlbW92ZV9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHZvaWQgYm1fcmVtb3ZlX2FsbF9lbnRyaWVzKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiBcdFx0XHRcdCAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBkX2lub2RlKHNiLVx1MDAzZXNfcm9vdCk7XG4tXHRzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmU7XG4tXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcbitcdHN0cnVjdCBpbm9kZSAqcm9vdCA9IGJtX3Jvb3RfaW5vZGUoc2IpO1xuK1x0c3RydWN0IGRlbnRyeSAqY2hpbGQgPSBOVUxMO1xuIFxuIFx0aW5vZGVfbG9ja19uZXN0ZWQocm9vdCwgSV9NVVRFWF9QQVJFTlQpO1xuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCBcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXMsIG5vZGUpXG4tXHRcdHJlbW92ZV9iaW5mbXRfaGFuZGxlcihtaXNjLCBlKTtcbitcdC8qXG4rXHQgKiBXYWxrIHRoZSBkaXJlY3RvcnkgcmF0aGVyIHRoYW4gdGhlIHNlYXJjaCBsaXN0OiBhIHN0YWdlZCBlbnRyeVxuK1x0ICogaXMgaW4gdGhlIGZvcm1lciBidXQgbm90IHlldCBpbiB0aGUgbGF0dGVyLiBUaGUgY29udHJvbCBmaWxlc1xuK1x0ICogY2Fycnkgbm8gZW50cnkgYW5kIHN0YXkuXG4rXHQgKi9cbitcdHdoaWxlICgoY2hpbGQgPSBmaW5kX25leHRfY2hpbGQoc2ItXHUwMDNlc19yb290LCBjaGlsZCkpKSB7XG4rXHRcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGRfaW5vZGUoY2hpbGQpLVx1MDAzZWlfcHJpdmF0ZTtcbitcbitcdFx0aWYgKGUpXG4rXHRcdFx0cmVtb3ZlX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGUpO1xuK1x0fVxuIFx0aW5vZGVfdW5sb2NrKHJvb3QpO1xuIH1cbiBcbkBAIC0xMDU2LDIwICsxMjYzLDEzOCBAQCBzdGF0aWMgaW50IGJtX2VudHJ5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBMb25nZXN0ICcrXHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJyBhIHdyaXRlIGNhbiBzcGVsbCwgYW5kIHdpdGggaXQgdGhlIGxvbmdlc3RcbisgKiBjb21tYW5kIGFuIGVudHJ5IGZpbGUgdGFrZXM6IHRoZSB0d28gZGVsaW1pdGVycyBhbmQgYSBuZXdsaW5lIG9uIHRvcCBvZlxuKyAqIHRoZSB0d28gbmFtZXMuXG4rICovXG4rI2RlZmluZSBNQVhfQklORElOR19MRU5HVEggKEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWCArIFBBVEhfTUFYICsgMylcbitcbisvKipcbisgKiBibV9lbnRyeV9hZGRfaW50ZXJwIC0gYmluZCBhbm90aGVyIGludGVycHJldGVyIHRvIGEgc3RhZ2VkIGVudHJ5XG4rICogQGU6IHRoZSBlbnRyeVxuKyAqIEBmaWxlOiB0aGUgZW50cnkgZmlsZSBiZWluZyB3cml0dGVuIHRvLCBmb3IgaXRzIGNyZWRlbnRpYWxzXG4rICogQGJ1ZjogdGhlICcrXHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJyBjb21tYW5kLCBwYXJzZWQgaW4gcGxhY2UgYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXJcbisgKiBAY291bnQ6IGl0cyBsZW5ndGhcbisgKlxuKyAqIEEgJ0QnIGVudHJ5IGlzIHJlZ2lzdGVyZWQgb3V0c2lkZSB0aGUgc2VhcmNoIGxpc3QsIHdoaWNoIGlzIHdoYXQgbGVhdmVzXG4rICogaXQgb3BlbiB0byBiZWluZyBjb25maWd1cmVkOiBpdCBjYW5ub3QgYmUgbWF0Y2hlZCwgc28gbm8gZXhlYyBjYW4gYmVcbisgKiBob2xkaW5nIGl0cyBpbnRlcnByZXRlcnMgYW5kIHRoZSBzZXQgY2FuIHN0aWxsIGdyb3cuIEl0cyBmaXJzdCBlbmFibGVcbisgKiBwdWJsaXNoZXMgaXQgYW5kIGVuZHMgdGhhdC4gT25lIGludGVycHJldGVyIHBlciB3cml0ZSwgdXAgdG9cbisgKiBCSU5GTVRfTUlTQ19JTlRFUlBfTUFYIG9mIHRoZW0sIG5vbmUgb2Ygd2hpY2ggaGFzIHRvIGZpdCBpbiBhIHJlZ2lzdGVyXG4rICogc3RyaW5nLlxuKyAqXG4rICogUmV0dXJuOiBAY291bnQgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4rICovXG4rc3RhdGljIHNzaXplX3QgYm1fZW50cnlfYWRkX2ludGVycChzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4re1xuK1x0c3RydWN0IGZpbGUgKmYgX19mcmVlKGNsb3NlX2ludGVycF9maWxlKSA9IE5VTEw7XG4rXHRzdHJ1Y3QgaW5vZGUgKnJvb3QgPSBibV9yb290X2lub2RlKGZpbGVfaW5vZGUoZmlsZSktXHUwMDNlaV9zYik7XG4rXHRzaXplX3QgbmxlbiwgcGxlbjtcbitcdGNoYXIgKm5hbWUsICpwYXRoO1xuK1x0aW50IHJldHZhbDtcbitcbitcdC8qIFNldHRsZWQgYmVmb3JlIHRoZSBvcGVuOiB0eXBlIGlzIGZpeGVkLCBwdWJsaWNhdGlvbiBpcyBwZXJtYW5lbnQuICovXG4rXHRpZiAoIXRlc3RfYml0KE1JU0NfRk1UX0JQRl9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghaGxpc3RfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2ZS1cdTAwM2Vub2RlKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdC8qICcrXHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJzogdGhlIHBhdGggaXMgZXZlcnl0aGluZyBwYXN0IHRoZSBmaXJzdCBzcGFjZS4gKi9cbitcdG5hbWUgPSBidWYgKyAxO1xuK1x0cGF0aCA9IHN0cmNocihuYW1lLCAnICcpO1xuK1x0aWYgKCFwYXRoKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdCpwYXRoKysgPSAnXFwwJztcbitcbitcdHBsZW4gPSBzdHJsZW4ocGF0aCk7XG4rXHQvKiBUaGUgY29tbWFuZCBoYXMgdG8gZW5kIGF0IHRoZSB3cml0ZSwgbGlrZSBhIHJlZ2lzdGVyIHN0cmluZy4gKi9cbitcdGlmIChwYXRoICsgcGxlbiAhPSBidWYgKyBjb3VudClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAocGxlbiBcdTAwMjZcdTAwMjYgcGF0aFtwbGVuIC0gMV0gPT0gJ1xcbicpXG4rXHRcdHBhdGhbLS1wbGVuXSA9ICdcXDAnO1xuK1x0LyogUmVzb2x2ZWQgbm93LCBzbyBhIHJlbGF0aXZlIHBhdGggd291bGQgbmFtZSB0aGUgd3JpdGVyJ3MgY3dkLiAqL1xuK1x0aWYgKHBhdGhbMF0gIT0gJy8nKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5sZW4gPSBwYXRoIC0gbmFtZSAtIDE7XG4rXHRpZiAoIW5sZW4gfHwgbmxlbiBcdTAwM2UgQklORk1UX01JU0NfSU5URVJQX05BTUVfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdC8qIFRoZSBuYW1lIHByaW50cyBiZXR3ZWVuIGRlbGltaXRlcnMsIHNvIGtlZXAgaXQgYSBwcmludGFibGUgd29yZC4gKi9cbitcdGZvciAoY29uc3QgY2hhciAqcCA9IG5hbWU7ICpwOyBwKyspXG4rXHRcdGlmICghaXNhc2NpaSgqcCkgfHwgIWlzZ3JhcGgoKnApKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogT3BlbmVkIGJlZm9yZSB0aGUgbG9jazogcmVzb2x2aW5nIGl0IG1heSB3YWxrIHRoaXMgdmVyeSBmaWxlc3lzdGVtLiAqL1xuK1x0ZiA9IG9wZW5faW50ZXJwX2ZpbGUoZmlsZS1cdTAwM2VmX2NyZWQsIHBhdGgpO1xuK1x0aWYgKElTX0VSUihmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZik7XG4rXG4rXHRpbm9kZV9sb2NrKHJvb3QpO1xuK1x0aWYgKGRfdW5oYXNoZWQoZS1cdTAwM2VkZW50cnkpKVxuK1x0XHRyZXR2YWwgPSAtRU5PRU5UO1x0LyogcmVtb3ZlZCB3aGlsZSB3ZSB3ZXJlIG9wZW5pbmcgaXQgKi9cbitcdGVsc2UgaWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZlLVx1MDAzZW5vZGUpKVxuK1x0XHRyZXR2YWwgPSAtRUJVU1k7XHQvKiBwdWJsaXNoZWQgd2hpbGUgd2Ugd2VyZSBvcGVuaW5nIGl0ICovXG4rXHRlbHNlXG4rXHRcdHJldHZhbCA9IGVudHJ5X2F0dGFjaF9pbnRlcnByZXRlcihlLCBuYW1lLCBwYXRoLCBmKTtcbitcdGlub2RlX3VubG9jayhyb290KTtcbitcdGlmIChyZXR2YWwpXG4rXHRcdHJldHVybiByZXR2YWw7XG4rXG4rXHQvKiBUaGUgZmlsZSBpcyBvd25lZCBieSB0aGUgZW50cnkgbm93LiAqL1xuK1x0cmV0YWluX2FuZF9udWxsX3B0cihmKTtcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gc3RhdGljIHNzaXplX3QgYm1fZW50cnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiBcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSA9IGlub2RlLVx1MDAzZWlfcHJpdmF0ZTtcbi1cdGludCByZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xuK1x0Y2hhciAqYnVmIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuK1x0aW50IHJlcztcbitcbitcdC8qIEEgYmluZGluZyBpcyB0aGUgbG9uZ2VzdCBjb21tYW5kIHRoaXMgZmlsZSB0YWtlcy4gKi9cbitcdGlmIChjb3VudCBcdTAwM2UgTUFYX0JJTkRJTkdfTEVOR1RIKVxuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1xuK1x0YnVmID0gbWVtZHVwX3VzZXJfbnVsKGJ1ZmZlciwgY291bnQpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuK1xuK1x0LyogJytcdTAwM2NuYW1lXHUwMDNlIFx1MDAzY3BhdGhcdTAwM2UnIGJpbmRzIGFuIGludGVycHJldGVyLCBldmVyeXRoaW5nIGVsc2UgdG9nZ2xlcy4gKi9cbitcdGlmIChidWZbMF0gPT0gJysnKVxuK1x0XHRyZXR1cm4gYm1fZW50cnlfYWRkX2ludGVycChlLCBmaWxlLCBidWYsIGNvdW50KTtcbitcbitcdHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmLCBjb3VudCk7XG4gXG4gXHRzd2l0Y2ggKHJlcykge1xuIFx0Y2FzZSBCTV9DTURfRElTQUJMRTpcbiBcdFx0Y2xlYXJfYml0KE1JU0NfRk1UX0VOQUJMRURfQklULCBcdTAwMjZlLVx1MDAzZWZsYWdzKTtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIEJNX0NNRF9FTkFCTEU6XG4rXHRjYXNlIEJNX0NNRF9FTkFCTEU6IHtcbitcdFx0c3RydWN0IGlub2RlICpyb290ID0gYm1fcm9vdF9pbm9kZShpbm9kZS1cdTAwM2VpX3NiKTtcbitcbitcdFx0LypcbitcdFx0ICogVGhlIGZpcnN0IGVuYWJsZSBwdWJsaXNoZXMgYSAnRCcgZW50cnkgaW50byB0aGUgc2VhcmNoXG4rXHRcdCAqIGxpc3QsIHdob2xlLiBUaGUgbG9jayBrZWVwcyB0aGF0IG9yZGVyZWQgYWdhaW5zdCBhIHNlY29uZFxuK1x0XHQgKiBlbmFibGUsIGFnYWluc3QgcmVtb3ZhbCAtIGEgcmVtb3ZlZCBlbnRyeSBoYXMgbm90aGluZyBsZWZ0XG4rXHRcdCAqIHRvIHB1Ymxpc2ggLSBhbmQgYWdhaW5zdCBiaW5kaW5nOiB3aGF0IGNhbiBiZSBtYXRjaGVkIGNhblxuK1x0XHQgKiBubyBsb25nZXIgYmUgY29uZmlndXJlZC5cbitcdFx0ICovXG4rXHRcdGlub2RlX2xvY2socm9vdCk7XG4gXHRcdHNldF9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpO1xuK1x0XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2ZS1cdTAwM2Vub2RlKSBcdTAwMjZcdTAwMjYgIWRfdW5oYXNoZWQoZS1cdTAwM2VkZW50cnkpKSB7XG4rXHRcdFx0c3RydWN0IGJpbmZtdF9taXNjICptaXNjID0gaV9iaW5mbXRfbWlzYyhpbm9kZSk7XG4rXG4rXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbitcdFx0XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2ZS1cdTAwM2Vub2RlLCBcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXMpO1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbitcdFx0fVxuK1x0XHRpbm9kZV91bmxvY2socm9vdCk7XG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0Y2FzZSBCTV9DTURfUkVNT1ZFOlxuIFx0XHRibV9yZW1vdmVfZW50cnkoZSwgaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRcdGJyZWFrO1xuQEAgLTExMDYsMTYgKzE0MzEsMTggQEAgc3RhdGljIGludCBhZGRfZW50cnkoc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbi1cdHJlZmNvdW50X3NldChcdTAwMjZlLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGUtXHUwMDNlZGVudHJ5ID0gZGVudHJ5O1xuIFx0aW5vZGUtXHUwMDNlaV9wcml2YXRlID0gZTtcbiBcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2Ym1fZW50cnlfb3BlcmF0aW9ucztcbiBcbiBcdGRfbWFrZV9wZXJzaXN0ZW50KGRlbnRyeSwgaW5vZGUpO1xuLVx0bWlzYyA9IGlfYmluZm10X21pc2MoaW5vZGUpO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbi1cdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZlLVx1MDAzZW5vZGUsIFx1MDAyNm1pc2MtXHUwMDNlZW50cmllcyk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG4rXHQvKiBBICdEJyBlbnRyeSBzdGF5cyBvdXQgb2YgdGhlIHNlYXJjaCBsaXN0IHVudGlsIGl0cyBmaXJzdCBlbmFibGUuICovXG4rXHRpZiAodGVzdF9iaXQoTUlTQ19GTVRfRU5BQkxFRF9CSVQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdG1pc2MgPSBpX2JpbmZtdF9taXNjKGlub2RlKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm1pc2MtXHUwMDNlZW50cmllc19sb2NrKTtcbitcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNmUtXHUwMDNlbm9kZSwgXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuK1x0fVxuIFx0c2ltcGxlX2RvbmVfY3JlYXRpbmcoZGVudHJ5KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMTIzLDkgKzE0NTAsOCBAQCBzdGF0aWMgaW50IGFkZF9lbnRyeShzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0ICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIHtcbi1cdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbitcdHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSBfX2ZyZWUocHV0X2JpbmZtdF9oYW5kbGVyKSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZmlsZV9pbm9kZShmaWxlKS1cdTAwM2VpX3NiO1xuLVx0c3RydWN0IGZpbGUgKmYgPSBOVUxMO1xuIFx0aW50IGVycjtcbiBcbiBcdGUgPSBjcmVhdGVfZW50cnkoYnVmZmVyLCBjb3VudCk7XG5AQCAtMTE0MiwzMyArMTQ2OCwyMCBAQCBzdGF0aWMgc3NpemVfdCBibV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdH1cbiBcbiBcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbi1cdFx0Lypcbi1cdFx0ICogTm93IHRoYXQgd2Ugc3VwcG9ydCB1bnByaXZpbGVnZWQgYmluZm10X21pc2MgbW91bnRzIG1ha2Vcbi1cdFx0ICogc3VyZSB3ZSB1c2UgdGhlIGNyZWRlbnRpYWxzIHRoYXQgdGhlIHJlZ2lzdGVyIEBmaWxlIHdhc1xuLVx0XHQgKiBvcGVuZWQgd2l0aCB0byBhbHNvIG9wZW4gdGhlIGludGVycHJldGVyLiBCZWZvcmUgdGhhdCB0aGlzXG4tXHRcdCAqIGRpZG4ndCBtYXR0ZXIgbXVjaCBhcyBvbmx5IGEgcHJpdmlsZWdlZCBwcm9jZXNzIGNvdWxkIG9wZW5cbi1cdFx0ICogdGhlIHJlZ2lzdGVyIGZpbGUuXG4tXHRcdCAqL1xuLVx0XHRzY29wZWRfd2l0aF9jcmVkcyhmaWxlLVx1MDAzZWZfY3JlZClcbi1cdFx0XHRmID0gb3Blbl9leGVjKGUtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuLVx0XHRpZiAoSVNfRVJSKGYpKSB7XG4tXHRcdFx0cHJfbm90aWNlKFwicmVnaXN0ZXI6IGZhaWxlZCB0byBpbnN0YWxsIGludGVycHJldGVyIGZpbGUgJXNcXG5cIixcbi1cdFx0XHRcdCBlLVx1MDAzZWludGVycHJldGVyKTtcbitcdFx0c3RydWN0IGZpbGUgKmYgPSBvcGVuX2ludGVycF9maWxlKGZpbGUtXHUwMDNlZl9jcmVkLCBlLVx1MDAzZWludGVycHJldGVyKTtcbitcbitcdFx0aWYgKElTX0VSUihmKSlcbiBcdFx0XHRyZXR1cm4gUFRSX0VSUihmKTtcbitcdFx0ZXJyID0gZW50cnlfYXR0YWNoX2ludGVycHJldGVyKGUsIFwiXCIsIGUtXHUwMDNlaW50ZXJwcmV0ZXIsIGYpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0Y2xvc2VfaW50ZXJwX2ZpbGUoZik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuLVx0XHRlLVx1MDAzZWludGVycF9maWxlID0gZjtcbiBcdH1cbiBcbiBcdGVyciA9IGFkZF9lbnRyeShlLCBzYik7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGlmIChmKSB7XG4tXHRcdFx0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xuLVx0XHRcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4tXHRcdH1cbi1cdFx0aWYgKGUtXHUwMDNlYnBmX29wcylcbi1cdFx0XHRiaW5mbXRfbWlzY19wdXRfb3BzKGUtXHUwMDNlYnBmX29wcyk7XG4rXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFxuIFx0LyogVGhlIGVudHJ5IGlzIG93bmVkIGJ5IGl0cyBpbm9kZSBub3cuICovXG4gXHRyZXRhaW5fYW5kX251bGxfcHRyKGUpO1xuQEAgLTExOTcsNyArMTUxMCw3IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3N0YXR1c193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4ge1xuIFx0c3RydWN0IGJpbmZtdF9taXNjICptaXNjO1xuLVx0aW50IHJlcyA9IHBhcnNlX2NvbW1hbmQoYnVmZmVyLCBjb3VudCk7XG4rXHRpbnQgcmVzID0gcmVhZF9jb21tYW5kKGJ1ZmZlciwgY291bnQpO1xuIFxuIFx0bWlzYyA9IGlfYmluZm10X21pc2MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXHRzd2l0Y2ggKHJlcykge1xuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbmluZGV4IDkyMDAzZWE2NDBkM2YuLmIyNDZkODg2NDM3YjggMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzY19icGYuY1xuKysrIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbkBAIC03LDYgKzcsMTUgQEBcbiAgKiBuYW1lc3BhY2UgaXQgd2FzIHJlZ2lzdGVyZWQgaW4uIEEgYmluZm10X21pc2MgJ0InIGVudHJ5IGFjdGl2YXRlcyBpdDpcbiAgKlxuICAqICAgZWNobyAnOmVudHJ5OkI6Ojo6XHUwMDNjaGFuZGxlci1uYW1lXHUwMDNlOicgXHUwMDNlIFx1MDAzY2JpbmZtdF9taXNjXHUwMDNlL3JlZ2lzdGVyXG4rICpcbisgKiBUaGUgZW50cnkgY2FuIGJpbmQgdGhlIGludGVycHJldGVycyB0aGUgaGFuZGxlciBtYXkgcnVuIGl0cyBiaW5hcmllc1xuKyAqIHdpdGgsIGVhY2ggb3BlbmVkIGJ5IHRoZSB3cml0ZSB0aGF0IGJpbmRzIGl0IGFuZCBzZWxlY3RlZCBieSBuYW1lIHBlclxuKyAqIGV4ZWMuIEFuIGVudHJ5IHJlZ2lzdGVyZWQgd2l0aCAnRCcgaXMgbm90IG1hdGNoYWJsZSB5ZXQsIHdoaWNoIGlzIHdoYXRcbisgKiBsZWF2ZXMgaXQgb3BlbiB0byBiZWluZyBnaXZlbiB0aGVtOlxuKyAqXG4rICogICBlY2hvICc6ZW50cnk6Qjo6OjpcdTAwM2NoYW5kbGVyLW5hbWVcdTAwM2U6RCcgXHUwMDNlIFx1MDAzY2JpbmZtdF9taXNjXHUwMDNlL3JlZ2lzdGVyXG4rICogICBlY2hvICcrXHUwMDNjbmFtZVx1MDAzZSBcdTAwM2NwYXRoXHUwMDNlJyBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvZW50cnlcbisgKiAgIGVjaG8gMSBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvZW50cnlcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXHUwMDNlXG5AQCAtMTYsNiArMjUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtOTEsNiArMTAyLDIwIEBAIGJvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdCAgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VzdF9vcHMgPT0gXHUwMDI2YnBmX2JpbmZtdF9taXNjX29wcztcbiB9XG4gXG4rLypcbisgKiBSZXBsYWNlIHRoZSBzdGFnZWQgaW50ZXJwcmV0ZXIgc2VsZWN0aW9uOiBuYW1pbmcgYSBwYXRoIGRyb3BzIGEgYm91bmRcbisgKiBmaWxlLCBzZWxlY3RpbmcgYSBib3VuZCBpbnRlcnByZXRlciBjYXJyaWVzIGl0cyBmaWxlIGFsb25nLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY2hhciAqcGF0aCxcbitcdFx0XHRcdCAgIHN0cnVjdCBmaWxlICpmKVxuK3tcbitcdGlmIChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSlcbitcdFx0ZnB1dChicHJtLVx1MDAzZWJwZl9pbnRlcnBfZmlsZSk7XG4rXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuK1x0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gcGF0aDtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlID0gZjtcbit9XG4rXG4gX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuIFxuIC8qKlxuQEAgLTEwMyw3ICsxMjgsOCBAQCBfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4gICogYmVmb3JlIHJldHVybmluZyB6ZXJvOyB0aGUgdmVyaWZpZXIgcmVqZWN0cyB0aGUgY2FsbCBmcm9tIGFueSBvdGhlclxuICAqIHByb2dyYW0sIGluY2x1ZGluZyB0aGUgaGFuZGxlcidzIG93biBtYXRjaCBwcm9ncmFtLiBUaGUgcGF0aCBpcyBvcGVuZWRcbiAgKiB3aXRoIHRoZSBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGUgZXhlYyBhZnRlciB0aGUgcHJvZ3JhbVxuLSAqIHJldHVybnMuXG4rICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhblxuKyAqIGludGVycHJldGVyIHRoZSBlbnRyeSBib3VuZCB3aXRoIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZVxuICAqL1xuQEAgLTEyNyw4ICsxNTMsNTAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0aWYgKCFpbnRlcnApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbi1cdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IGludGVycDtcbitcdGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oYnBybSwgaW50ZXJwLCBOVUxMKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAgLSBydW4gdGhpcyBleGVjIHVuZGVyIGFuIGludGVycHJldGVyIHRoZSBlbnRyeSBib3VuZFxuKyAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxuKyAqIEBuYW1lOiBuYW1lIHRoZSBpbnRlcnByZXRlciB3YXMgcmVnaXN0ZXJlZCB1bmRlclxuKyAqIEBuYW1lX19zejogc2l6ZSBvZiB0aGUgQG5hbWUgYnVmZmVyLCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTFxuKyAqXG4rICogVG8gYmUgY2FsbGVkIGZyb20gdGhlIGxvYWQgcHJvZ3JhbSBvZiBhIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgaGFuZGxlclxuKyAqIGluc3RlYWQgb2YgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCkuIEl0IHNlbGVjdHMgb25lIG9mIHRoZSBpbnRlcnByZXRlcnNcbisgKiB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLCBlYWNoIG9mIHdoaWNoIHdhcyBvcGVuZWQgb25jZSB3aGVuXG4rICogdGhlIGVudHJ5IHdhcyByZWdpc3RlcmVkLiBOb3RoaW5nIGlzIHJlc29sdmVkIGF0IGV4ZWMgdGltZSwgc28gbm9cbisgKiBmaWxlc3lzdGVtIHZpZXcgY2FuIHJlZGlyZWN0IHRoZSBpbnRlcnByZXRlci5cbisgKlxuKyAqIFRoZSBpbnRlcnByZXRlciBydW5zIHVuZGVyIHRoZSBwYXRoIHRoZSBlbnRyeSByZWdpc3RlcmVkIGl0IHVuZGVyLlxuKyAqIENhbGxpbmcgaXQgYWdhaW4gcmVwbGFjZXMgdGhlIHNlbGVjdGlvbi5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PRU5UIGlmIHRoZSBtYXRjaGVkIGVudHJ5IGJvdW5kIG5vIGludGVycHJldGVyXG4rICogb2YgdGhhdCBuYW1lLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHRcdFx0XHRcdCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqaW50ZXJwO1xuK1x0c2l6ZV90IGxlbjtcbitcdGNoYXIgKnBhdGg7XG4rXG4rXHRpZiAoIW5hbWVfX3N6KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGxlbiA9IHN0cm5sZW4obmFtZSwgbmFtZV9fc3opO1xuK1x0aWYgKGxlbiA9PSBuYW1lX19zeiB8fCAhbGVuKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGludGVycCA9IGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGJwcm0tXHUwMDNlYnBmX2ludGVycHMsIG5hbWUpO1xuK1x0aWYgKCFpbnRlcnApXG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1xuK1x0cGF0aCA9IGtzdHJkdXAoaW50ZXJwLVx1MDAzZXBhdGgsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwYXRoKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGJtX2JwZl9zdGFnZV9zZWxlY3Rpb24oYnBybSwgcGF0aCwgZ2V0X2ZpbGUoaW50ZXJwLVx1MDAzZWZpbGUpKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMTEsNiArMjc5LDcgQEAgX19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbiBcbiBCVEZfS0ZVTkNTX1NUQVJUKGJtX2JwZl9rZnVuY19pZHMpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycCwgS0ZfU0xFRVBBQkxFKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZywgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9mbGFncywgS0ZfU0xFRVBBQkxFKVxuIEJURl9LRlVOQ1NfRU5EKGJtX2JwZl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCA4NTY3MzFmNzhkMDU0Li5hMTRmMjhiMTU2MDdhIDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4rKysgYi9mcy9leGVjLmNcbkBAIC0xNDc3LDYgKzE0NzcsOCBAQCBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdGlmIChicHJtLVx1MDAzZWludGVycCAhPSBicHJtLVx1MDAzZWZpbGVuYW1lKVxuIFx0XHRrZnJlZShicHJtLVx1MDAzZWludGVycCk7XG4gXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuK1x0aWYgKGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKVxuK1x0XHRmcHV0KGJwcm0tXHUwMDNlYnBmX2ludGVycF9maWxlKTtcbiBcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycF9hcmcpO1xuIFx0a2ZyZWUoYnBybS1cdTAwM2VmZHBhdGgpO1xuIFx0a2ZyZWUoYnBybSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5pbmRleCA0YWJkZmQzNmIzZmE4Li4wNzJlNGIzZGQ3OGQyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbkBAIC01LDExICs1LDQxIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBicGZfcHJvZztcbitzdHJ1Y3QgZmlsZTtcbiBzdHJ1Y3QgbGludXhfYmlucHJtO1xuIHN0cnVjdCB1c2VyX25hbWVzcGFjZTtcbiBcbiAjZGVmaW5lIEJJTkZNVF9NSVNDX09QU19OQU1FX01BWCAxNlxuIFxuKy8qIExvbmdlc3QgbmFtZSBhICdCJyBlbnRyeSBjYW4gYmluZCBhbiBpbnRlcnByZXRlciB1bmRlci4gKi9cbisjZGVmaW5lIEJJTkZNVF9NSVNDX0lOVEVSUF9OQU1FX01BWCAzMlxuK1xuKy8qIE1vc3QgaW50ZXJwcmV0ZXJzIG9uZSBlbnRyeSBjYW4gYmluZC4gKi9cbisjZGVmaW5lIEJJTkZNVF9NSVNDX0lOVEVSUF9NQVggMTAwXG4rXG4rLyoqXG4rICogc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAtIGFuIGludGVycHJldGVyIGFuIGVudHJ5IHdhcyByZWdpc3RlcmVkIHdpdGhcbisgKiBAbGlzdDogbGluayBpbiB0aGUgZW50cnkncyBsaXN0LCBpbiByZWdpc3RyYXRpb24gb3JkZXJcbisgKiBAZmlsZTogdGhlIGZpbGUsIG9wZW5lZCBhdCByZWdpc3RyYXRpb24gYW5kIG5ldmVyIHJlc29sdmVkIGFnYWluXG4rICogQHBhdGg6IHRoZSBwYXRoIGl0IHdhcyByZWdpc3RlcmVkIHVuZGVyLCB1c2VkIGFzIHRoZSBuYW1lIHRoZSBpbnRlcnByZXRlclxuKyAqICAgICAgICBydW5zIHVuZGVyOyBzdG9yZWQgYWZ0ZXIgQG5hbWUgaW4gdGhlIHNhbWUgYWxsb2NhdGlvblxuKyAqIEBuYW1lOiB0aGUgbmFtZSB0aGUgbG9hZCBwcm9ncmFtIHNlbGVjdHMgaXQgYnk7IGVtcHR5IGZvciB0aGUgZml4ZWRcbisgKiAgICAgICAgaW50ZXJwcmV0ZXIgb2YgYSBzdGF0aWMgJ0YnIGVudHJ5XG4rICpcbisgKiBPd25lZCBieSB0aGUgZW50cnkgYW5kIGxpdmluZyBleGFjdGx5IGFzIGxvbmcgYXMgaXQgZG9lcy4gVGhlIGxpc3QgaGVhZFxuKyAqIGlzIGhhbmRlZCB0byB0aGUgaGFuZGxlcidzIGxvYWQgcHJvZ3JhbSBmb3IgdGhlIGR1cmF0aW9uIG9mIG9uZSBleGVjLFxuKyAqIHdoaWNoIHBpY2tzIG9uZSB3aXRoIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpLlxuKyAqL1xuK3N0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAge1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbitcdHN0cnVjdCBmaWxlXHRcdCpmaWxlO1xuK1x0Y29uc3QgY2hhclx0XHQqcGF0aDtcbitcdGNoYXJcdFx0XHRuYW1lW107XG4rfTtcbitcbitjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICpcbitiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKTtcbitcbiAvKipcbiAgKiBlbnVtIGJwZl9iaW5wcm1fZmxhZ3MgLSBwZXItZXhlYyBpbnZvY2F0aW9uIGZsYWdzIGEgbG9hZCBwcm9ncmFtIGNhbiByZXF1ZXN0XG4gICogQEJQRl9CSU5QUk1fUFJFU0VSVkVfQVJHVjA6IGtlZXAgdGhlIGNhbGxlcidzIGFyZ3ZbMF0gKGxpa2UgdGhlICdQJyBmbGFnKVxuQEAgLTQyLDEwICs3MiwxMSBAQCBlbnVtIGJwZl9iaW5wcm1fZmxhZ3Mge1xuICAqICAgICAgICAgc28gaXQgY2FuIHJlYWQgdGhlIGJpbmFyeSB0byBkZWNpZGUsIGJ1dCB0aGUgdmVyaWZpZXIgcmVqZWN0c1xuICAqICAgICAgICAgdGhlIGludGVycHJldGVyIHNlbGVjdGlvbiBrZnVuY3MgaW4gaXRcbiAgKiBAbG9hZDogIHNlbGVjdCBhbiBpbnRlcnByZXRlciBmb3IgdGhlIG1hdGNoZWQgQGJwcm0gdmlhXG4tICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSBhbmQgcmV0dXJuIHplcm87IGEgbWF0Y2ggaXMgY29tbWl0dGVkLCBzb1xuLSAqICAgICAgICAgYSBmYWlsdXJlIGZhaWxzIHRoZSBleGVjIGluc3RlYWQgb2YgZmFsbGluZyB0aHJvdWdoIHRvIGxhdGVyXG4tICogICAgICAgICBlbnRyaWVzOyAtRU5PRVhFQyBkb2VzIG5vdCBmYWlsIHRoZSBleGVjIGJ1dCBtb3ZlcyBvbiB0byB0aGVcbi0gKiAgICAgICAgIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0c1xuKyAqICAgICAgICAgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCksIG9yIG9uZSB0aGUgZW50cnkgYm91bmQgdmlhXG4rICogICAgICAgICBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKSwgYW5kIHJldHVybiB6ZXJvOyBhIG1hdGNoIGlzXG4rICogICAgICAgICBjb21taXR0ZWQsIHNvIGEgZmFpbHVyZSBmYWlscyB0aGUgZXhlYyBpbnN0ZWFkIG9mIGZhbGxpbmdcbisgKiAgICAgICAgIHRocm91Z2ggdG8gbGF0ZXIgZW50cmllczsgLUVOT0VYRUMgZG9lcyBub3QgZmFpbCB0aGUgZXhlYyBidXRcbisgKiAgICAgICAgIG1vdmVzIG9uIHRvIHRoZSByZW1haW5pbmcgYmluYXJ5IGZvcm1hdHNcbiAgKiBAbmFtZTogbmFtZSB0aGF0ICdCJyBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgaGFuZGxlciBieVxuICAqL1xuIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbmluZGV4IGEyZGFlY2JiMDFkNmEuLmY2ODZhMzdmN2EwYTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbkBAIC0xNCw3ICsxNCwxMCBAQCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xuIFxuIC8qIEludGVycHJldGVyIHNlbGVjdGlvbiBzdGFnZWQgYnkgYSBicGYgYmluZm10X21pc2MgaGFuZGxlci4gKi9cbiBzdHJ1Y3QgYmluZm10X21pc2NfYnBmIHtcbitcdC8qIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSBib3VuZCwgc2VsZWN0YWJsZSBieSBuYW1lICovXG4rXHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpicGZfaW50ZXJwcztcbiBcdGNvbnN0IGNoYXIgKmJwZl9pbnRlcnA7XHRcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cbitcdHN0cnVjdCBmaWxlICpicGZfaW50ZXJwX2ZpbGU7XHQvKiB0aGUgYm91bmQgaW50ZXJwcmV0ZXIgaXQgc2VsZWN0ZWQgKi9cbiBcdGNvbnN0IGNoYXIgKmJwZl9pbnRlcnBfYXJnO1x0LyogaW50ZXJwcmV0ZXIgYXJndW1lbnQgZnJvbSBhIGJwZiBoYW5kbGVyICovXG4gXHR1NjQgYnBmX2ZsYWdzO1x0XHRcdC8qIGVudW0gYnBmX2JpbnBybV9mbGFncyBmcm9tIGEgYnBmIGhhbmRsZXIgKi9cbiB9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL01ha2VmaWxlXG5pbmRleCAzOTBmZTExYTdiZWRmLi40MTBjOTM2MDZhMGMzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9NYWtlZmlsZVxuQEAgLTI1LDYgKzI1LDEwIEBAIFRFU1RfR0VOX1BST0dTICs9IGNoZWNrLWV4ZWNcbiAjIG9yIGFuICdGJyBlbnRyeSBjYW4gcGluIHRoZSBpbnN0YW5jZSB0aGF0IG93bnMgaXQuIFVucHJpdmlsZWdlZCwgbm8gYnBmLlxuIFRFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX3NlbGZwaW5cbiBcbisjICdEJyAocmVnaXN0ZXIgZGlzYWJsZWQpIGJpbmZtdF9taXNjIHRlc3Q6IGFuIGVudHJ5IHRoYXQgZXhpc3RzIGJ1dCBkb2VzXG4rIyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gU3RhdGljIG1hZ2ljIGVudHJ5LCBubyBicGYgdG9vbGNoYWluLlxuK1RFU1RfR0VOX1BST0dTICs9IGJpbmZtdF9taXNjX2Rpc2FibGVkXG4rXG4gIyBTdGF0aWMgKCdUJyBmbGFnKSB0cmFuc3BhcmVudCBiaW5mbXRfbWlzYyB0ZXN0OyB0aGUgYXNzZXJ0aW5nIGludGVycHJldGVyXG4gIyBpcyBzaGFyZWQgd2l0aCB0aGUgYnBmIGhhcm5lc3MncyB0cmFuc3BhcmVudCBjYXNlLiBObyBicGYgdG9vbGNoYWluIG5lZWRlZC5cbiBURVNUX0dFTl9QUk9HUyArPSBiaW5mbXRfbWlzY190cmFuc3BhcmVudFxuQEAgLTUyLDggKzU2LDggQEAgSEFWRV9CUEZfVE9PTENIQUlOID89ICQoc2hlbGwgY29tbWFuZCAtdiAkKENMQU5HKSBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XHUwMDI2IFxcXG4gaWZlcSAoJChIQVZFX0JQRl9UT09MQ0hBSU4pLHkpXG4gVEVTVF9HRU5fUFJPR1MgKz0gYmluZm10X21pc2NfYnBmXG4gVEVTVF9HRU5fRklMRVMgKz0gYnBmX2ludGVycC5icGYubyBuaXhfb3JpZ2luLmJwZi5vIHRyYW5zcGFyZW50LmJwZi5vXG4tVEVTVF9HRU5fRklMRVMgKz0gbG9hZGVyLmJwZi5vXG4tVEVTVF9HRU5fRklMRVMgKz0gYmluZm10X2JwZl9pbnRlcnAgYmluZm10X2JwZl9hcHBcbitURVNUX0dFTl9GSUxFUyArPSBsb2FkZXIuYnBmLm8gaW50ZXJwX2JpbmQuYnBmLm9cbitURVNUX0dFTl9GSUxFUyArPSBiaW5mbXRfYnBmX2ludGVycCBiaW5mbXRfYnBmX2FwcCBiaW5mbXRfYmluZF9pbnRlcnBcbiBlbHNlXG4gJChpbmZvIGV4ZWMgc2VsZnRlc3RzOiBza2lwcGluZyBiaW5mbXRfbWlzY19icGYsIG5lZWRzIGNsYW5nLCBicGZ0b29sLCB2bWxpbnV4IEJURiBhbmQgbGliYnBmKVxuIGVuZGlmXG5AQCAtMTIzLDYgKzEyNyw5IEBAICQoT1VUUFVUKS9iaW5mbXRfbWlzY19icGY6IGJpbmZtdF9taXNjX2JwZi5jIGJpbmZtdF9taXNjX2NvbW1vbi5oXG4gJChPVVRQVVQpL2JpbmZtdF9icGZfaW50ZXJwOiBiaW5mbXRfYnBmX2ludGVycC5jXG4gXHQkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkXHUwMDNjIC1vICRAXG4gXG4rJChPVVRQVVQpL2JpbmZtdF9iaW5kX2ludGVycDogYmluZm10X2JpbmRfaW50ZXJwLmNcbitcdCQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICRcdTAwM2MgLW8gJEBcbitcbiAkKE9VVFBVVCkvYmluZm10X2xvYWRlcl9wYXlsb2FkOiBiaW5mbXRfbG9hZGVyX3BheWxvYWQuYyBiaW5mbXRfbWlzY19jb21tb24uaFxuIFx0JChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLWZQSUUgLXBpZSAkXHUwMDNjIC1vICRAXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfYmluZF9pbnRlcnAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X2JpbmRfaW50ZXJwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wNmQ2NTA2Mjg1NmI3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9iaW5kX2ludGVycC5jXG5AQCAtMCwwICsxLDE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFRlc3QgaW50ZXJwcmV0ZXIgZm9yIHRoZSBib3VuZC1pbnRlcnByZXRlciBjYXNlIG9mIHRoZSBiaW5mbXRfbWlzY19icGZcbisgKiBzZWxmdGVzdC4gVHdvIGNvcGllcyBhcmUgaW5zdGFsbGVkIGF0IGRpZmZlcmVudCBwYXRocyBhbmQgYm91bmQgdG8gb25lXG4rICogZW50cnkgdW5kZXIgZGlmZmVyZW50IG5hbWVzOyBwcmludGluZyBhcmd2WzBdIC0gdGhlIHBhdGggdGhlIGtlcm5lbCByYW5cbisgKiB0aGlzIGNvcHkgdW5kZXIgLSB0ZWxscyB0aGUgaGFybmVzcyB3aGljaCBvZiB0aGVtIHRoZSBsb2FkIHByb2dyYW0gcGlja2VkLlxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2VcbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0cHJpbnRmKFwiQklORF9SQU4gJXNcXG5cIiwgYXJnYyBcdTAwM2UgMCA/IGFyZ3ZbMF0gOiBcIlwiKTtcbitcdHJldHVybiAwO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2JwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19icGYuY1xuaW5kZXggMDY5NzY4YTY2YmEwNy4uMmM3YjYzMDc1ZjFkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfYnBmLmNcbkBAIC05LDcgKzksNyBAQFxuICAqXG4gICogICAgIGVjaG8gJzpuYW1lOkI6Ojo6XHUwMDNjaGFuZGxlclx1MDAzZTonIFx1MDAzZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXJcbiAgKlxuLSAqIFRocmVlIHNlbGYtY29udGFpbmVkIGNhc2VzIGFyZSBleGVyY2lzZWQ6XG4rICogRml2ZSBzZWxmLWNvbnRhaW5lZCBjYXNlcyBhcmUgZXhlcmNpc2VkOlxuICAqXG4gICogICAxLiBicGZfaW50ZXJwOiB0aGUgbWF0Y2ggcHJvZ3JhbSBtYXRjaGVzIGEgc3ludGhldGljIGFhcmNoNjQgRUxGIGhlYWRlclxuICAqICAgICAgZnJvbSB0aGUgcHJlZmV0Y2hlZCBicHJtLVx1MDAzZWJ1ZiBhbmQgdGhlIGxvYWQgcHJvZ3JhbSByb3V0ZXMgaXQgdG8gYVxuQEAgLTI2LDYgKzI2LDExIEBAXG4gICogICAgICAoYmluZm10X2xvYWRlcl9wYXlsb2FkKSBydW5zIGFzIHRoZSBtYWluIGltYWdlIHdpdGggdGhlIHNlbGVjdGVkXG4gICogICAgICBpbnRlcnByZXRlciBzdWJzdGl0dXRlZCBmb3IgaXRzIFBUX0lOVEVSUCBhbmQgYXNzZXJ0cyB0aGUgbmF0aXZlXG4gICogICAgICBpZGVudGl0eSBmcm9tIGluc2lkZS5cbisgKiAgIDUuIGludGVycF9iaW5kOiBhbiBlbnRyeSByZWdpc3RlcmVkIGRpc2FibGVkIHdpdGggJ0QnIGlzIGdpdmVuIGl0c1xuKyAqICAgICAgaW50ZXJwcmV0ZXJzIG9uZSB3cml0ZSBhdCBhIHRpbWUsIGFuZCB0aGUgbG9hZCBwcm9ncmFtIHBpY2tzIG9uZSBieVxuKyAqICAgICAgbmFtZSBwZXIgZXhlYy4gUmVwbGFjaW5nIHdoYXQgdGhlIHBhdGggaG9sZHMgYWZ0ZXJ3YXJkcyBjaGFuZ2VzXG4rICogICAgICBub3RoaW5nLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgYmluZGluZyBhIGZpbGUgcmF0aGVyIHRoYW4gcmVzb2x2aW5nXG4rICogICAgICBhIG5hbWUgYXQgZXhlYyB0aW1lLiBFbmFibGluZyB0aGUgZW50cnkgc2VhbHMgaXQuXG4gICpcbiAgKiBUaGUgZmlyc3QgdHdvIHJvdXRlIHRvIGEgdGVzdCBpbnRlcnByZXRlciB0aGF0IHByaW50cyBCUEZfSU5URVJQX1JBTixcbiAgKiBwcm92aW5nIHRoZSBwcm9ncmFtJ3MgY2hvc2VuIGludGVycHJldGVyIGFjdHVhbGx5IHJhbi5cbkBAIC01NCw2ICs1OSwxMiBAQFxuICNkZWZpbmUgVFJBTlNfRVhQRUNUXHRcIlRSQU5TUEFSRU5UX09LXCJcbiAjZGVmaW5lIExPQURFUl9JTlRFUlBcdFwiL3RtcC9iaW5mbXRfbG9hZGVyX2ludGVycFwiXG4gI2RlZmluZSBMT0FERVJfUEFUSFx0XCIvdG1wL2JpbmZtdF9icGZfbG9hZGVyLmxkcnRlc3RcIlxuKyNkZWZpbmUgQklORF9GSVJTVFx0XCIvdG1wL2JpbmZtdF9iaW5kX2ZpcnN0XCJcbisjZGVmaW5lIEJJTkRfU0VDT05EXHRcIi90bXAvYmluZm10X2JpbmRfc2Vjb25kXCJcbisjZGVmaW5lIEJJTkRfQVJNX1BBVEhcdFwiL3RtcC9iaW5mbXRfYmluZF9hcm1cIlxuKyNkZWZpbmUgQklORF9SSVNDVl9QQVRIXHRcIi90bXAvYmluZm10X2JpbmRfcmlzY3ZcIlxuKyNkZWZpbmUgQklORF9FWFBFQ1RcdFwiQklORF9SQU4gXCJcbisjZGVmaW5lIEJJTkRfTUFYXHQxMDBcbiBcbiAvKiBBIG1pbmltYWwgNjQtYml0IGxpdHRsZS1lbmRpYW4gRUxGIGhlYWRlciwgcGFkZGVkIHRvIHRoZSByZWFkIHNpemUuICovXG4gc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSlcbkBAIC04MiwxMSArOTMsMTcgQEAgc3RhdGljIGludCBjcmVhdGVfZmFrZV9lbGYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgbWFjaGluZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJlZ2lzdGVyX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmhhbmRsZXIpXG4rLypcbisgKiBSZWdpc3RlciBhICdCJyBlbnRyeSBmb3IgQGhhbmRsZXIuIFdpdGggQGZsYWdzIFwiRFwiIHRoZSBlbnRyeSBpcyBjcmVhdGVkXG4rICogZGlzYWJsZWQsIHdoaWNoIGlzIHdoYXQgbGVhdmVzIGl0IG9wZW4gdG8gYmVpbmcgZ2l2ZW4gaW50ZXJwcmV0ZXJzLlxuKyAqL1xuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaGFuZGxlcixcbitcdFx0XHQgIGNvbnN0IGNoYXIgKmZsYWdzKVxuIHtcbiBcdGNoYXIgcnVsZVtQQVRIX01BWF07XG4gXG4tXHRzbnByaW50ZihydWxlLCBzaXplb2YocnVsZSksIFwiOiVzOkI6Ojo6JXM6XCIsIG5hbWUsIGhhbmRsZXIpO1xuK1x0c25wcmludGYocnVsZSwgc2l6ZW9mKHJ1bGUpLCBcIjolczpCOjo6OiVzOiVzXCIsIG5hbWUsIGhhbmRsZXIsXG4rXHRcdCBmbGFncyA/IGZsYWdzIDogXCJcIik7XG4gXHRyZXR1cm4gd3JpdGVfcmVnKHJ1bGUpO1xuIH1cbiBcbkBAIC0xMDYsNiArMTIzLDMwIEBAIHN0YXRpYyBpbnQgY2hlY2tfb3V0cHV0KGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqZXhwZWN0ZWQpXG4gXHRyZXR1cm4gc3RybmNtcChidWYsIGV4cGVjdGVkLCBzdHJsZW4oZXhwZWN0ZWQpKSA/IC0xIDogMDtcbiB9XG4gXG4rLyogRG9lcyB0aGUga2VybmVsIEJURiBrbm93IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpPyAqL1xuK3N0YXRpYyBib29sIGhhdmVfYmluZm10X21pc2Nfb3BzKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0ZiAqYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4rXHRib29sIGhhdmU7XG4rXG4rXHRoYXZlID0gYnRmIFx1MDAyNlx1MDAyNiBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXCJiaW5mbXRfbWlzY19vcHNcIixcbitcdFx0XHRcdFx0ICAgICBCVEZfS0lORF9TVFJVQ1QpIFx1MDAzZT0gMDtcbitcdGJ0Zl9fZnJlZShidGYpO1xuK1x0cmV0dXJuIGhhdmU7XG4rfVxuK1xuKy8qIFRoZSByZWFzb24gYnBmIGhhbmRsZXIgY2FzZXMgY2Fubm90IHJ1biBoZXJlLCBOVUxMIGlmIHRoZXkgY2FuLiAqL1xuK3N0YXRpYyBjb25zdCBjaGFyICpicGZfaGFuZGxlcl91bnN1cHBvcnRlZCh2b2lkKVxuK3tcbitcdGlmIChnZXR1aWQoKSAhPSAwKVxuK1x0XHRyZXR1cm4gXCJ0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3RcIjtcbitcdGlmICghaGF2ZV9iaW5mbXRfbWlzY19vcHMoKSlcbitcdFx0cmV0dXJuIFwibm8gc3RydWN0IGJpbmZtdF9taXNjX29wcyBpbiB0aGUga2VybmVsIEJURiAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcIjtcbitcdGlmICghYmluZm10X21pc2NfYXZhaWxhYmxlKCkpXG4rXHRcdHJldHVybiBcIm5vIGJpbmZtdF9taXNjXCI7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gLyogQW4gYXR0YWNoZWQgaGFuZGxlciB3aXRoIGl0cyAnQicgZW50cnkgYWN0aXZhdGVkLiAqL1xuIHN0cnVjdCBicGZfY2FzZSB7XG4gXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuQEAgLTExNSwxMCArMTU2LDEyIEBAIHN0cnVjdCBicGZfY2FzZSB7XG4gXG4gLypcbiAgKiBMb2FkIEBvYmpmaWxlLCBhdHRhY2ggaXRzIHN0cnVjdF9vcHMgbWFwIEBoYW5kbGVyICh3aGljaCBwdWJsaXNoZXMgdGhlXG4tICogaGFuZGxlcikgYW5kIGFjdGl2YXRlIGEgJ0InIGVudHJ5IG5hbWVkIEBlbnRyeSB0aGF0IHJlZmVyZW5jZXMgaXQuXG4rICogaGFuZGxlcikgYW5kIHJlZ2lzdGVyIGEgJ0InIGVudHJ5IG5hbWVkIEBlbnRyeSB0aGF0IHJlZmVyZW5jZXMgaXQsIHdpdGhcbisgKiBAZmxhZ3MgYXMgdGhlIGVudHJ5J3MgcmVnaXN0ZXItc3RyaW5nIGZsYWdzLlxuICAqL1xuLXN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuLVx0XHRcdCAgY29uc3QgY2hhciAqaGFuZGxlciwgY29uc3QgY2hhciAqZW50cnkpXG4rc3RhdGljIGludCBicGZfY2FzZV9zdGFydF9mbGFncyhzdHJ1Y3QgYnBmX2Nhc2UgKmMsIGNvbnN0IGNoYXIgKm9iamZpbGUsXG4rXHRcdFx0XHRjb25zdCBjaGFyICpoYW5kbGVyLCBjb25zdCBjaGFyICplbnRyeSxcbitcdFx0XHRcdGNvbnN0IGNoYXIgKmZsYWdzKVxuIHtcbiBcdHN0cnVjdCBicGZfbWFwICptYXA7XG4gXG5AQCAtMTQ4LDcgKzE5MSw3IEBAIHN0YXRpYyBpbnQgYnBmX2Nhc2Vfc3RhcnQoc3RydWN0IGJwZl9jYXNlICpjLCBjb25zdCBjaGFyICpvYmpmaWxlLFxuIFx0XHRjLVx1MDAzZWxpbmsgPSBOVUxMO1xuIFx0XHRnb3RvIGZhaWw7XG4gXHR9XG4tXHRpZiAocmVnaXN0ZXJfZW50cnkoZW50cnksIGhhbmRsZXIpKSB7XG4rXHRpZiAocmVnaXN0ZXJfZW50cnkoZW50cnksIGhhbmRsZXIsIGZsYWdzKSkge1xuIFx0XHRmcHJpbnRmKHN0ZGVyciwgXCJyZWdpc3RlciAnQicgZW50cnkgJyVzJyBmYWlsZWRcXG5cIiwgZW50cnkpO1xuIFx0XHRnb3RvIGZhaWw7XG4gXHR9XG5AQCAtMTYyLDYgKzIwNSwxMiBAQCBzdGF0aWMgaW50IGJwZl9jYXNlX3N0YXJ0KHN0cnVjdCBicGZfY2FzZSAqYywgY29uc3QgY2hhciAqb2JqZmlsZSxcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4rc3RhdGljIGludCBicGZfY2FzZV9zdGFydChzdHJ1Y3QgYnBmX2Nhc2UgKmMsIGNvbnN0IGNoYXIgKm9iamZpbGUsXG4rXHRcdFx0ICBjb25zdCBjaGFyICpoYW5kbGVyLCBjb25zdCBjaGFyICplbnRyeSlcbit7XG4rXHRyZXR1cm4gYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoYywgb2JqZmlsZSwgaGFuZGxlciwgZW50cnksIE5VTEwpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBicGZfY2FzZV9zdG9wKHN0cnVjdCBicGZfY2FzZSAqYylcbiB7XG4gXHR1bnJlZ2lzdGVyKGMtXHUwMDNlZW50cnkpO1xuQEAgLTE5MCwyMyArMjM5LDEwIEBAIEZJWFRVUkUoYnBmX2hhbmRsZXIpIHtcbiBGSVhUVVJFX1NFVFVQKGJwZl9oYW5kbGVyKVxuIHtcbiBcdGNoYXIgc3JjW1BBVEhfTUFYXTtcbi1cdHN0cnVjdCBidGYgKmJ0Zjtcbi1cbi1cdGlmIChnZXR1aWQoKSAhPSAwKVxuLVx0XHRTS0lQKHJldHVybiwgXCJ0ZXN0IG11c3QgYmUgcnVuIGFzIHJvb3RcIik7XG4tXG4tXHQvKiBUaGUga2VybmVsIG11c3Qga25vdyBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIChDT05GSUdfQklORk1UX01JU0NfQlBGKS4gKi9cbi1cdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuLVx0aWYgKCFidGYgfHwgYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwiYmluZm10X21pc2Nfb3BzXCIsXG4tXHRcdFx0XHRcdCAgIEJURl9LSU5EX1NUUlVDVCkgXHUwMDNjIDApIHtcbi1cdFx0YnRmX19mcmVlKGJ0Zik7XG4tXHRcdFNLSVAocmV0dXJuLFxuLVx0XHQgICAgIFwibm8gc3RydWN0IGJpbmZtdF9taXNjX29wcyBpbiB0aGUga2VybmVsIEJURiAoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcIik7XG4tXHR9XG4tXHRidGZfX2ZyZWUoYnRmKTtcbitcdGNvbnN0IGNoYXIgKndoeSA9IGJwZl9oYW5kbGVyX3Vuc3VwcG9ydGVkKCk7XG4gXG4tXHRpZiAoIWJpbmZtdF9taXNjX2F2YWlsYWJsZSgpKVxuLVx0XHRTS0lQKHJldHVybiwgXCJubyBiaW5mbXRfbWlzY1wiKTtcbitcdGlmICh3aHkpXG4rXHRcdFNLSVAocmV0dXJuLCBcIiVzXCIsIHdoeSk7XG4gXG4gXHQvKiBTaGFyZWQgdGVzdCBpbnRlcnByZXRlci4gKi9cbiBcdEFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksIFwiYmluZm10X2JwZl9pbnRlcnBcIiksIDApO1xuQEAgLTI1OCw3ICsyOTQsNyBAQCBURVNUX0YoYnBmX2hhbmRsZXIsIHRyYW5zcGFyZW50X2Rpc3BhdGNoKVxuIFx0Y2hhciBzcmNbUEFUSF9NQVhdLCBjbWRbUEFUSF9NQVggKyAxNl07XG4gXG4gXHQvKiBQcm9iZSBmb3IgdHJhbnNwYXJlbnQtbW9kZSBzdXBwb3J0IHZpYSBpdHMgc3RhdGljIGNvdW50ZXJwYXJ0LiAqL1xuLVx0aWYgKGJpbmZtdF9mbGFnX3N1cHBvcnRlZCgnVCcpKVxuK1x0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ1QnKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwia2VybmVsIHdpdGhvdXQgdHJhbnNwYXJlbnQgbW9kZVwiKTtcbiBcbiBcdEFTU0VSVF9FUShhcnRpZmFjdF9wYXRoKHNyYywgc2l6ZW9mKHNyYyksIFwiYmluZm10X3RyYW5zcGFyZW50X2ludGVycFwiKSwgMCk7XG5AQCAtMzA3LDQgKzM0MywyMjYgQEAgVEVTVF9GKGJwZl9oYW5kbGVyLCBsb2FkZXJfc3Vic3RpdHV0aW9uKVxuIFx0dW5saW5rKExPQURFUl9JTlRFUlApO1xuIH1cbiBcbisvKiBUaGUgZXJybm8gYW4gZXhlYyBvZiBAcGF0aCBmYWlscyB3aXRoLCAwIGlmIGl0IHN1Y2NlZWRlZC4gKi9cbitzdGF0aWMgaW50IGV4ZWNfZXJybm8oY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRpbnQgc3RhdHVzO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGV4ZWNsKHBhdGgsIHBhdGgsIChjaGFyICopTlVMTCk7XG4rXHRcdF9leGl0KGVycm5vKTtcbitcdH1cbitcdGlmIChwaWQgXHUwMDNjIDAgfHwgd2FpdHBpZChwaWQsIFx1MDAyNnN0YXR1cywgMCkgIT0gcGlkIHx8ICFXSUZFWElURUQoc3RhdHVzKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7XG4rfVxuK1xuKy8qIEluc3RhbGwgYSBjb3B5IG9mIHRoZSBib3VuZC1pbnRlcnByZXRlciB0ZXN0IGJpbmFyeSBhdCBAcGF0aC4gKi9cbitzdGF0aWMgaW50IGluc3RhbGxfaW50ZXJwKGNvbnN0IGNoYXIgKnBhdGgpXG4re1xuK1x0Y2hhciBzcmNbUEFUSF9NQVhdO1xuK1xuK1x0aWYgKGFydGlmYWN0X3BhdGgoc3JjLCBzaXplb2Yoc3JjKSwgXCJiaW5mbXRfYmluZF9pbnRlcnBcIikpXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiBjb3B5X2ZpbGUoc3JjLCBwYXRoKTtcbit9XG4rXG4rLyogQmluZCBAcGF0aCB0byBAZW50cnkgdW5kZXIgQG5hbWUsIHRoZSAnKycgY29tbWFuZCBvZiBhIGRpc2FibGVkIGVudHJ5LiAqL1xuK3N0YXRpYyBpbnQgZW50cnlfYmluZChjb25zdCBjaGFyICplbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRjaGFyIGNtZFtQQVRIX01BWF07XG4rXG4rXHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcIislcyAlc1xcblwiLCBuYW1lLCBwYXRoKTtcbitcdHJldHVybiBlbnRyeV9jb21tYW5kKGVudHJ5LCBjbWQpO1xuK31cbitcbitGSVhUVVJFKGJvdW5kX2ludGVycCkge1xuK1x0Y2hhciBvYmpbUEFUSF9NQVhdO1xuK1x0c3RydWN0IGJwZl9jYXNlIGM7XG4rXHRib29sIHN0YXJ0ZWQ7XG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKGJvdW5kX2ludGVycClcbit7XG4rXHRjb25zdCBjaGFyICp3aHkgPSBicGZfaGFuZGxlcl91bnN1cHBvcnRlZCgpO1xuK1xuK1x0aWYgKHdoeSlcbitcdFx0U0tJUChyZXR1cm4sIFwiJXNcIiwgd2h5KTtcbitcdGlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCdEJykpIHtcbitcdFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xuK1x0XHRTS0lQKHJldHVybiwgXCJrZXJuZWwgd2l0aG91dCB0aGUgJ0QnIGZsYWdcIik7XG4rXHR9XG4rXG4rXHRBU1NFUlRfRVEoaW5zdGFsbF9pbnRlcnAoQklORF9GSVJTVCksIDApO1xuK1x0QVNTRVJUX0VRKGluc3RhbGxfaW50ZXJwKEJJTkRfU0VDT05EKSwgMCk7XG4rXG4rXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChzZWxmLVx1MDAzZW9iaiwgc2l6ZW9mKHNlbGYtXHUwMDNlb2JqKSxcbitcdFx0XHRcdFwiaW50ZXJwX2JpbmQuYnBmLm9cIiksIDApO1xuK1xuK1x0LypcbitcdCAqIFJlZ2lzdGVyZWQgZGlzYWJsZWQsIHNvIGl0IGNhbm5vdCBiZSBtYXRjaGVkIHlldCBhbmQgY2FuIHN0aWxsIGJlXG4rXHQgKiBnaXZlbiBpbnRlcnByZXRlcnMuIEVhY2ggcGF0aCBpcyByZXNvbHZlZCBvbmNlLCBieSBpdHMgd3JpdGUoMik7XG4rXHQgKiBmcm9tIGhlcmUgb24gdGhlIGVudHJ5IGhvbGRzIHRoZSBmaWxlcyB0aGVtc2VsdmVzLlxuK1x0ICovXG4rXHRBU1NFUlRfRVEoYnBmX2Nhc2Vfc3RhcnRfZmxhZ3MoXHUwMDI2c2VsZi1cdTAwM2VjLCBzZWxmLVx1MDAzZW9iaiwgXCJpbnRlcnBfYmluZFwiLFxuK1x0XHRcdFx0ICAgICAgIFwidGVzdF9pbnRlcnBfYmluZFwiLCBcIkRcIiksIDApO1xuK1x0c2VsZi1cdTAwM2VzdGFydGVkID0gdHJ1ZTtcbitcbitcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcImZpcnN0XCIsIEJJTkRfRklSU1QpLCAwKTtcbitcdEFTU0VSVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcInNlY29uZFwiLCBCSU5EX1NFQ09ORCksIDApO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKGJvdW5kX2ludGVycClcbit7XG4rXHRpZiAoc2VsZi1cdTAwM2VzdGFydGVkKVxuK1x0XHRicGZfY2FzZV9zdG9wKFx1MDAyNnNlbGYtXHUwMDNlYyk7XG4rXHR1bmxpbmsoQklORF9GSVJTVCk7XG4rXHR1bmxpbmsoQklORF9TRUNPTkQpO1xuK1x0dW5saW5rKEFBUkNINjRfUEFUSCk7XG4rXHR1bmxpbmsoQklORF9SSVNDVl9QQVRIKTtcbitcdHVubGluayhCSU5EX0FSTV9QQVRIKTtcbit9XG4rXG4rLyogRW5hYmxpbmcgaXMgd2hhdCBtYWtlcyB0aGUgY29uZmlndXJlZCBlbnRyeSBtYXRjaGFibGUuICovXG4rc3RhdGljIGludCBhY3RpdmF0ZShjb25zdCBjaGFyICplbnRyeSlcbit7XG4rXHRyZXR1cm4gZW50cnlfY29tbWFuZChlbnRyeSwgXCIxXFxuXCIpO1xuK31cbitcbisvKiBPbmUgZW50cnksIG9uZSBpbnRlcnByZXRlciBwZXIgZ3Vlc3QgYXJjaGl0ZWN0dXJlLCBwaWNrZWQgcGVyIGV4ZWMuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgc2VsZWN0c19ieV9uYW1lKVxuK3tcbitcdEFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQUFSQ0g2NF9QQVRILCBFTV9BQVJDSDY0KSwgMCk7XG4rXHRBU1NFUlRfRVEoY3JlYXRlX2Zha2VfZWxmKEJJTkRfUklTQ1ZfUEFUSCwgRU1fUklTQ1YpLCAwKTtcbitcbitcdC8qIERpc2FibGVkLCBzbyBpdCBkb2VzIG5vdCBtYXRjaCBhbmQgbm8gZm9ybWF0IGNsYWltcyB0aGUgYmluYXJ5LiAqL1xuK1x0RVhQRUNUX0VRKGV4ZWNfZXJybm8oQUFSQ0g2NF9QQVRIKSwgRU5PRVhFQyk7XG4rXG4rXHRBU1NFUlRfRVEoYWN0aXZhdGUoXCJ0ZXN0X2ludGVycF9iaW5kXCIpLCAwKTtcbitcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XG4rXHRFWFBFQ1RfRVEoY2hlY2tfb3V0cHV0KEJJTkRfUklTQ1ZfUEFUSCwgQklORF9FWFBFQ1QgQklORF9TRUNPTkQpLCAwKTtcbit9XG4rXG4rLyogV2hhdCB3YXMgYm91bmQgaXMgd2hhdCBydW5zLCB3aGF0ZXZlciB0aGUgcGF0aCBob2xkcyBhZnRlcndhcmRzLiAqL1xuK1RFU1RfRihib3VuZF9pbnRlcnAsIHBhdGhfbm9fbG9uZ2VyX2RlY2lkZXMpXG4re1xuK1x0Y2hhciBvdGhlcltQQVRIX01BWF07XG4rXG4rXHRBU1NFUlRfRVEoY3JlYXRlX2Zha2VfZWxmKEFBUkNINjRfUEFUSCwgRU1fQUFSQ0g2NCksIDApO1xuK1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwidGVzdF9pbnRlcnBfYmluZFwiKSwgMCk7XG4rXG4rXHQvKiBCb3VuZCBpbnRlcnByZXRlcnMgYXJlIHBpbm5lZCBhZ2FpbnN0IHdyaXRlcywgZXhhY3RseSBsaWtlICdGJy4gKi9cbitcdEVYUEVDVF9UUlVFKHdyaXRlX2RlbmllZChCSU5EX0ZJUlNUKSk7XG4rXG4rXHQvKiBSZXBsYWNlIHRoZSBwYXRoIHdpdGggYSBkaWZmZXJlbnQgYmluYXJ5OiBhIG5ldyBmaWxlLCBuZXcgaW5vZGUuICovXG4rXHRBU1NFUlRfRVEoYXJ0aWZhY3RfcGF0aChvdGhlciwgc2l6ZW9mKG90aGVyKSwgXCJiaW5mbXRfYnBmX2ludGVycFwiKSwgMCk7XG4rXHRBU1NFUlRfRVEodW5saW5rKEJJTkRfRklSU1QpLCAwKTtcbitcdEFTU0VSVF9FUShjb3B5X2ZpbGUob3RoZXIsIEJJTkRfRklSU1QpLCAwKTtcbitcbitcdEVYUEVDVF9FUShjaGVja19vdXRwdXQoQUFSQ0g2NF9QQVRILCBCSU5EX0VYUEVDVCBCSU5EX0ZJUlNUKSwgMCk7XG4rfVxuK1xuKy8qIFRoZSBlbnRyeSByZXBvcnRzIHdoYXQgaXQgYm91bmQsIHVuZGVyIHRoZSBuYW1lcyBpdCBib3VuZCB0aGVtIGFzLiAqL1xuK1RFU1RfRihib3VuZF9pbnRlcnAsIGVudHJ5X3JlcG9ydHNfYmluZGluZ3MpXG4re1xuK1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoXCJ0ZXN0X2ludGVycF9iaW5kXCIsXG4rXHRcdFx0XHRcImJwZi1pbnRlcnByZXRlciBmaXJzdCBcIiBCSU5EX0ZJUlNUKSk7XG4rXHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhcInRlc3RfaW50ZXJwX2JpbmRcIixcbitcdFx0XHRcdFwiYnBmLWludGVycHJldGVyIHNlY29uZCBcIiBCSU5EX1NFQ09ORCkpO1xuK31cbitcbisvKiBTZWxlY3RpbmcgYSBuYW1lIHRoZSBlbnRyeSBkaWQgbm90IGJpbmQgZmFpbHMgdGhlIGV4ZWMuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgdW5ib3VuZF9uYW1lX2ZhaWxzKVxuK3tcbitcdEFTU0VSVF9FUShjcmVhdGVfZmFrZV9lbGYoQklORF9BUk1fUEFUSCwgRU1fQVJNKSwgMCk7XG4rXHRBU1NFUlRfRVEoYWN0aXZhdGUoXCJ0ZXN0X2ludGVycF9iaW5kXCIpLCAwKTtcbitcbitcdEVYUEVDVF9FUShleGVjX2Vycm5vKEJJTkRfQVJNX1BBVEgpLCBFTk9FTlQpO1xuK31cbitcbisvKiBBY3RpdmF0aW5nIHNlYWxzIGl0OiB3aGF0IGNhbiBiZSBtYXRjaGVkIGNhbm5vdCBiZSBjaGFuZ2VkLiAqL1xuK1RFU1RfRihib3VuZF9pbnRlcnAsIHNlYWxlZF9vbmNlX2FjdGl2ZSlcbit7XG4rXHRBU1NFUlRfRVEoYWN0aXZhdGUoXCJ0ZXN0X2ludGVycF9iaW5kXCIpLCAwKTtcbitcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcInRoaXJkXCIsIEJJTkRfU0VDT05EKSwgLUVCVVNZKTtcbitcdEVYUEVDVF9GQUxTRShlbnRyeV9zaG93cyhcInRlc3RfaW50ZXJwX2JpbmRcIixcbitcdFx0XHRcdCBcImJwZi1pbnRlcnByZXRlciB0aGlyZCBcIiBCSU5EX1NFQ09ORCkpO1xuK31cbitcbisvKiBUaGUgc2VhbCBpcyBmb3IgZ29vZDogZGlzYWJsaW5nIHRoZSBlbnRyeSBhZ2FpbiByZW9wZW5zIG5vdGhpbmcuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgZGlzYWJsZV9kb2VzX25vdF91bnNlYWwpXG4re1xuK1x0QVNTRVJUX0VRKGFjdGl2YXRlKFwidGVzdF9pbnRlcnBfYmluZFwiKSwgMCk7XG4rXHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChcInRlc3RfaW50ZXJwX2JpbmRcIiwgXCIwXFxuXCIpLCAwKTtcbitcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcInRoaXJkXCIsIEJJTkRfU0VDT05EKSwgLUVCVVNZKTtcbit9XG4rXG4rLyogQW4gZW50cnkgcmVnaXN0ZXJlZCB3aXRob3V0ICdEJyBpcyBzZWFsZWQgZnJvbSB0aGUgc3RhcnQuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgYm9ybl9zZWFsZWQpXG4re1xuK1x0LyogQSBzZWNvbmQgZW50cnkgZm9yIHRoZSBoYW5kbGVyIHRoZSBmaXh0dXJlIGFscmVhZHkgcHVibGlzaGVkLiAqL1xuK1x0QVNTRVJUX0VRKHJlZ2lzdGVyX2VudHJ5KFwidGVzdF9ib3JuX3NlYWxlZFwiLCBcImludGVycF9iaW5kXCIsIE5VTEwpLCAwKTtcbitcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9ib3JuX3NlYWxlZFwiLCBcImZpcnN0XCIsIEJJTkRfRklSU1QpLCAtRUJVU1kpO1xuK1x0dW5yZWdpc3RlcihcInRlc3RfYm9ybl9zZWFsZWRcIik7XG4rfVxuK1xuKy8qIEEgbmFtZSBpcyBib3VuZCBvbmNlOyBhIHNlY29uZCB1c2Ugb2YgaXQgaXMgcmVmdXNlZC4gKi9cbitURVNUX0YoYm91bmRfaW50ZXJwLCBkdXBsaWNhdGVfbmFtZV9yZWZ1c2VkKVxuK3tcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcImZpcnN0XCIsIEJJTkRfU0VDT05EKSwgLUVFWElTVCk7XG4rfVxuK1xuKy8qIEEgbmFtZSBpcyBhIHByaW50YWJsZSB3b3JkOiB0aGUgZW50cnkgZmlsZSByZXBvcnRzICduYW1lIHBhdGgnIGxpbmVzLiAqL1xuK1RFU1RfRihib3VuZF9pbnRlcnAsIG5hbWVfbXVzdF9iZV9wcmludGFibGUpXG4re1xuK1x0LyogQSBjb250cm9sIGNoYXJhY3RlciB3b3VsZCBmb3JnZSBhIGxpbmUgaW50byB0aGUgZW50cnkgZmlsZS4gKi9cbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcImFcXHRiXCIsIEJJTkRfRklSU1QpLCAtRUlOVkFMKTtcbitcdEVYUEVDVF9FUShlbnRyeV9iaW5kKFwidGVzdF9pbnRlcnBfYmluZFwiLCBcImFcXG5iXCIsIEJJTkRfRklSU1QpLCAtRUlOVkFMKTtcbitcbitcdC8qIEEgc3BhY2UgY2Fubm90IGV2ZW4gYmUgc3BlbGxlZDogdGhlIHBhdGggc3RhcnRzIGFmdGVyIHRoZSBmaXJzdCBvbmUuICovXG4rXHRFWFBFQ1RfRVEoZW50cnlfYmluZChcInRlc3RfaW50ZXJwX2JpbmRcIiwgXCJhIGJcIiwgQklORF9GSVJTVCksIC1FSU5WQUwpO1xuK31cbitcbisvKiBUaGUgY29tbWFuZCBlbmRzIGF0IHRoZSB3cml0ZTogYnl0ZXMgcGFzdCBhbiBlbWJlZGRlZCBudWwgYXJlIHJlZnVzZWQuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgdHJhaWxpbmdfYnl0ZXNfcmVmdXNlZClcbit7XG4rXHRjaGFyIGNtZFtQQVRIX01BWF07XG4rXHRzaXplX3QgbGVuO1xuK1x0aW50IGZkO1xuK1xuK1x0LyogZW50cnlfY29tbWFuZCgpIGNhbm5vdCBzcGVsbCBhIG51bCwgc28gd3JpdGUgdGhlIGJ1ZmZlciByYXcuICovXG4rXHRzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCBcIitudWwgJXNcIiwgQklORF9GSVJTVCk7XG4rXHRsZW4gPSBzdHJsZW4oY21kKSArIDE7XG4rXHRtZW1jcHkoY21kICsgbGVuLCBcImp1bmtcIiwgc2l6ZW9mKFwianVua1wiKSk7XG4rXHRsZW4gKz0gc2l6ZW9mKFwianVua1wiKTtcbitcbitcdGZkID0gb3BlbihCSU5GTVRfRElSIFwiL3Rlc3RfaW50ZXJwX2JpbmRcIiwgT19XUk9OTFkgfCBPX0NMT0VYRUMpO1xuK1x0QVNTRVJUX0dFKGZkLCAwKTtcbitcdEVYUEVDVF9FUSh3cml0ZShmZCwgY21kLCBsZW4pLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVJTlZBTCk7XG4rXHRjbG9zZShmZCk7XG4rXG4rXHRFWFBFQ1RfRkFMU0UoZW50cnlfc2hvd3MoXCJ0ZXN0X2ludGVycF9iaW5kXCIsXG4rXHRcdFx0XHQgXCJicGYtaW50ZXJwcmV0ZXIgbnVsIFwiIEJJTkRfRklSU1QpKTtcbit9XG4rXG4rLyogQW4gZW50cnkgYmluZHMgYXQgbW9zdCBCSU5EX01BWCBpbnRlcnByZXRlcnMuICovXG4rVEVTVF9GKGJvdW5kX2ludGVycCwgY2FwcGVkX2JpbmRpbmdzKVxuK3tcbitcdGNoYXIgbmFtZVsxNl07XG4rXHRpbnQgaTtcbitcbitcdC8qIFRoZSBmaXh0dXJlIGJvdW5kIFwiZmlyc3RcIiBhbmQgXCJzZWNvbmRcIiBhbHJlYWR5LiAqL1xuK1x0Zm9yIChpID0gMjsgaSBcdTAwM2MgQklORF9NQVg7IGkrKykge1xuK1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwibiVkXCIsIGkpO1xuK1x0XHRBU1NFUlRfRVEoZW50cnlfYmluZChcInRlc3RfaW50ZXJwX2JpbmRcIiwgbmFtZSwgQklORF9GSVJTVCksIDApO1xuK1x0fVxuK1x0RVhQRUNUX0VRKGVudHJ5X2JpbmQoXCJ0ZXN0X2ludGVycF9iaW5kXCIsIFwib3ZlclwiLCBCSU5EX0ZJUlNUKSwgLUVOT1NQQyk7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYmluZm10X21pc2NfY29tbW9uLmhcbmluZGV4IGM2OTAwZGVkMDE5ZmMuLjc0NWFmZjg0ZGM3ODcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX2NvbW1vbi5oXG5AQCAtOTMsNiArOTMsNDUgQEAgc3RhdGljIGlubGluZSB2b2lkIHVucmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSlcbiBcdH1cbiB9XG4gXG4rLyogV3JpdGUgQGxpbmUgdG8gQGVudHJ5J3MgZmlsZSwgcmVwb3J0aW5nIHRoZSBlcnJubyBpdCB3YXMgcmVmdXNlZCB3aXRoLiAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGVudHJ5X2NvbW1hbmQoY29uc3QgY2hhciAqZW50cnksIGNvbnN0IGNoYXIgKmxpbmUpXG4re1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcdGludCBmZCwgcmV0dmFsID0gMDtcbitcdHNpemVfdCBsZW4gPSBzdHJsZW4obGluZSk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEJJTkZNVF9ESVIgXCIvJXNcIiwgZW50cnkpO1xuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbitcdGlmIChmZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC1lcnJubztcbitcdGlmICh3cml0ZShmZCwgbGluZSwgbGVuKSAhPSAoc3NpemVfdClsZW4pXG4rXHRcdHJldHZhbCA9IC1lcnJubztcbitcdGNsb3NlKGZkKTtcbitcdHJldHVybiByZXR2YWw7XG4rfVxuK1xuKy8qIERvZXMgQGVudHJ5J3MgZmlsZSByZXBvcnQgQGxpbmU/ICovXG4rc3RhdGljIGlubGluZSBib29sIGVudHJ5X3Nob3dzKGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpsaW5lKVxuK3tcbitcdGNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZltQQVRIX01BWF07XG4rXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXHRGSUxFICpmcDtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgQklORk1UX0RJUiBcIi8lc1wiLCBlbnRyeSk7XG4rXHRmcCA9IGZvcGVuKHBhdGgsIFwiclwiKTtcbitcdGlmICghZnApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkpIHtcbitcdFx0YnVmW3N0cmNzcG4oYnVmLCBcIlxcblwiKV0gPSAnXFwwJztcbitcdFx0aWYgKCFzdHJjbXAoYnVmLCBsaW5lKSkge1xuK1x0XHRcdGZvdW5kID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0ZmNsb3NlKGZwKTtcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4gLyogTW91bnQgYmluZm10X21pc2MgdW5sZXNzIGl0IGFscmVhZHkgaXMsIGFuZCByZXBvcnQgd2hldGhlciBpdCBpcyB1c2FibGUuICovXG4gc3RhdGljIGlubGluZSBib29sIGJpbmZtdF9taXNjX2F2YWlsYWJsZSh2b2lkKVxuIHtcbkBAIC0xMTcsMTYgKzE1NiwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBhcnRpZmFjdF9wYXRoKGNoYXIgKm91dCwgc2l6ZV90IHN6LCBjb25zdCBjaGFyICpuYW1lKVxuIH1cbiBcbiAvKiBQcm9iZSBrZXJuZWwgc3VwcG9ydCBmb3IgYSByZWdpc3RyYXRpb24gZmxhZyB3aXRoIGEgdGhyb3dhd2F5IGVudHJ5LiAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpXG4rc3RhdGljIGlubGluZSBib29sIGJpbmZtdF9mbGFnX3N1cHBvcnRlZChjaGFyIGZsYWcpXG4ge1xuIFx0Y2hhciBydWxlWzY0XTtcbiBcbiBcdHNucHJpbnRmKHJ1bGUsIHNpemVvZihydWxlKSwgXCI6Ym1fZmxhZ19wcm9iZTpFOjpibXByb2JlOjovYmluL3RydWU6JWNcIixcbiBcdFx0IGZsYWcpO1xuIFx0aWYgKHdyaXRlX3JlZyhydWxlKSlcbi1cdFx0cmV0dXJuIC0xO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR1bnJlZ2lzdGVyKFwiYm1fZmxhZ19wcm9iZVwiKTtcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDdjOWU4YTRlZTQyYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY19kaXNhYmxlZC5jXG5AQCAtMCwwICsxLDE3MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBUZXN0IHRoZSAnRCcgKHJlZ2lzdGVyIGRpc2FibGVkKSBmbGFnIG9mIGJpbmZtdF9taXNjLiBBbiBlbnRyeVxuKyAqIHJlZ2lzdGVyZWQgd2l0aCBpdCBleGlzdHMgYnV0IGNhbm5vdCBiZSBtYXRjaGVkIHVudGlsIHVzZXJzcGFjZSBlbmFibGVzXG4rICogaXQsIHdoaWNoIHNwbGl0cyBhIHJlZ2lzdHJhdGlvbiBpbnRvIGNyZWF0ZSBhbmQgYWN0aXZhdGUuXG4rICpcbisgKiBOZWVkcyByb290IGZvciB0aGUgcmVnaXN0cmF0aW9uOyBubyBicGYgdG9vbGNoYWluIGludm9sdmVkLlxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJpbmZtdF9taXNjX2NvbW1vbi5oXCJcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgTUFHSUNcdFx0XCIjRElTQUJMRUQtU0VMRlRFU1QjXCJcbisjZGVmaW5lIFRBUkdFVF9QQVRIXHRcIi90bXAvYmluZm10X2Rpc2FibGVkX3RhcmdldFwiXG4rI2RlZmluZSBJTlRFUlBfUEFUSFx0XCIvdG1wL2JpbmZtdF9kaXNhYmxlZF9pbnRlcnAuc2hcIlxuKyNkZWZpbmUgRU5UUllcdFx0XCJ0ZXN0X2Rpc2FibGVkXCJcbisjZGVmaW5lIFJVTEUoZmxhZ3MpXHRcIjpcIiBFTlRSWSBcIjpNOjA6XCIgTUFHSUMgXCI6OlwiIElOVEVSUF9QQVRIIFwiOlwiIGZsYWdzXG4rXG4rLyogVGhlIGludGVycHJldGVyIGV4aXRzIHdpdGggYSBjb2RlIHRoZSBoYXJuZXNzIGNhbiByZWNvZ25pc2UuICovXG4rI2RlZmluZSBFWElUX0lOVEVSUFx0N1xuK1xuKy8qIFRoZSB0YXJnZXQgb25seSBoYXMgdG8gY2FycnkgdGhlIG1hZ2ljOyBpdCBpcyBuZXZlciBhY3R1YWxseSBsb2FkZWQuICovXG4rc3RhdGljIGludCBjcmVhdGVfdGFyZ2V0KHZvaWQpXG4re1xuK1x0Y2hhciBidWZbMTI4XSA9IE1BR0lDIFwiXFxuXCI7XG4rXHRpbnQgZmQ7XG4rXG4rXHR1bmxpbmsoVEFSR0VUX1BBVEgpO1xuK1x0ZmQgPSBvcGVuKFRBUkdFVF9QQVRILCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA3NTUpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAod3JpdGUoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpICE9IChzc2l6ZV90KXNpemVvZihidWYpKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY3JlYXRlX2ludGVycCh2b2lkKVxuK3tcbitcdGNoYXIgYnVmWzY0XTtcbitcdGludCBmZDtcbitcbitcdHVubGluayhJTlRFUlBfUEFUSCk7XG4rXHRmZCA9IG9wZW4oSU5URVJQX1BBVEgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDc1NSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtMTtcbitcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiIyEvYmluL3NoXFxuZXhpdCAlZFxcblwiLCBFWElUX0lOVEVSUCk7XG4rXHRpZiAod3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpICE9IChzc2l6ZV90KXN0cmxlbihidWYpKSB7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIGNsb3NlKGZkKTtcbit9XG4rXG4rRklYVFVSRShkaXNhYmxlZCkge1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChkaXNhYmxlZClcbit7XG4rXHRpZiAoZ2V0dWlkKCkgIT0gMClcbitcdFx0U0tJUChyZXR1cm4sIFwidGVzdCBtdXN0IGJlIHJ1biBhcyByb290XCIpO1xuK1x0aWYgKCFiaW5mbXRfbWlzY19hdmFpbGFibGUoKSlcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gYmluZm10X21pc2NcIik7XG4rXG4rXHQvKiBTa2lwIHRoZSB3aG9sZSBzdWl0ZSBvbiBhIGtlcm5lbCB0aGF0IGRvZXMgbm90IGtub3cgJ0QnLiAqL1xuK1x0aWYgKCFiaW5mbXRfZmxhZ19zdXBwb3J0ZWQoJ0QnKSkge1xuK1x0XHRBU1NFUlRfRVEoZXJybm8sIEVJTlZBTCk7XG4rXHRcdFNLSVAocmV0dXJuLCBcImtlcm5lbCB3aXRob3V0IHRoZSAnRCcgZmxhZ1wiKTtcbitcdH1cbitcbitcdEFTU0VSVF9FUShjcmVhdGVfaW50ZXJwKCksIDApO1xuK1x0QVNTRVJUX0VRKGNyZWF0ZV90YXJnZXQoKSwgMCk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04oZGlzYWJsZWQpXG4re1xuK1x0dW5yZWdpc3RlcihFTlRSWSk7XG4rXHR1bmxpbmsoVEFSR0VUX1BBVEgpO1xuK1x0dW5saW5rKElOVEVSUF9QQVRIKTtcbit9XG4rXG4rLyogVGhlIGVudHJ5IGV4aXN0cyBidXQgZG9lcyBub3QgZGlzcGF0Y2ggdW50aWwgaXQgaXMgZW5hYmxlZC4gKi9cbitURVNUX0YoZGlzYWJsZWQsIGluZXJ0X3VudGlsX2VuYWJsZWQpXG4re1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiRFwiKSksIDApO1xuK1x0RVhQRUNUX1RSVUUoZW50cnlfc2hvd3MoRU5UUlksIFwiZGlzYWJsZWRcIikpO1xuK1xuK1x0LyogTm90aGluZyBtYXRjaGVzIGl0LCBzbyBubyBiaW5hcnkgZm9ybWF0IGNsYWltcyB0aGUgdGFyZ2V0LiAqL1xuK1x0RVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgUlVOX0VOT0VYRUMpO1xuK1xuK1x0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFwiMVxcblwiKSwgMCk7XG4rXHRFWFBFQ1RfVFJVRShlbnRyeV9zaG93cyhFTlRSWSwgXCJlbmFibGVkXCIpKTtcbitcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIEVYSVRfSU5URVJQKTtcbit9XG4rXG4rLyogV2l0aG91dCAnRCcgYW4gZW50cnkgaXMgbWF0Y2hhYmxlIHRoZSBtb21lbnQgaXQgaXMgcmVnaXN0ZXJlZC4gKi9cbitURVNUX0YoZGlzYWJsZWQsIGVuYWJsZWRfd2l0aG91dF90aGVfZmxhZylcbit7XG4rXHRBU1NFUlRfRVEod3JpdGVfcmVnKFJVTEUoXCJcIikpLCAwKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImVuYWJsZWRcIikpO1xuK1x0RVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgRVhJVF9JTlRFUlApO1xuK31cbitcbisvKiAnRCcgaXMgc3BlbnQgb24gdGhlIHJlZ2lzdHJhdGlvbjogdGhlIGVudHJ5IGRvZXMgbm90IHJlcG9ydCBpdCBiYWNrLiAqL1xuK1RFU1RfRihkaXNhYmxlZCwgZmxhZ19ub3RfcmVwb3J0ZWQpXG4re1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiRFwiKSksIDApO1xuK1x0RVhQRUNUX0ZBTFNFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImZsYWdzOiBEXCIpKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImZsYWdzOiBcIikpO1xuK31cbitcbisvKiBBIGRpc2FibGVkIGVudHJ5IGNhbiBiZSBkaXNhYmxlZCBhbmQgZW5hYmxlZCBsaWtlIGFueSBvdGhlci4gKi9cbitURVNUX0YoZGlzYWJsZWQsIHRvZ2dsZXNfbGlrZV9hbnlfZW50cnkpXG4re1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiRFwiKSksIDApO1xuK1xuK1x0QVNTRVJUX0VRKGVudHJ5X2NvbW1hbmQoRU5UUlksIFwiMVxcblwiKSwgMCk7XG4rXHRBU1NFUlRfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBFWElUX0lOVEVSUCk7XG4rXHRBU1NFUlRfRVEoZW50cnlfY29tbWFuZChFTlRSWSwgXCIwXFxuXCIpLCAwKTtcbitcdEVYUEVDVF9FUShydW5fcGF5bG9hZChUQVJHRVRfUEFUSCksIFJVTl9FTk9FWEVDKTtcbitcdEFTU0VSVF9FUShlbnRyeV9jb21tYW5kKEVOVFJZLCBcIjFcXG5cIiksIDApO1xuK1x0RVhQRUNUX0VRKHJ1bl9wYXlsb2FkKFRBUkdFVF9QQVRIKSwgRVhJVF9JTlRFUlApO1xuK31cbitcbisvKiAnRCcgY29tcG9zZXMgd2l0aCB0aGUgaW52b2NhdGlvbiBmbGFncyBhIHN0YXRpYyBlbnRyeSBjYW4gY2FycnkuICovXG4rVEVTVF9GKGRpc2FibGVkLCBjb21wb3Nlc193aXRoX2ludm9jYXRpb25fZmxhZ3MpXG4re1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiUERcIikpLCAwKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImRpc2FibGVkXCIpKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImZsYWdzOiBQXCIpKTtcbit9XG4rXG4rLyogJy0xJyB0byB0aGUgc3RhdHVzIGZpbGUgc3dlZXBzIGEgc3RhZ2VkIGVudHJ5IHdpdGggZXZlcnl0aGluZyBlbHNlLiAqL1xuK1RFU1RfRihkaXNhYmxlZCwgcmVtb3ZlZF9ieV9yZW1vdmVfYWxsKVxuK3tcbitcdGludCBmZDtcbitcbitcdEFTU0VSVF9FUSh3cml0ZV9yZWcoUlVMRShcIkRcIikpLCAwKTtcbitcdEVYUEVDVF9UUlVFKGVudHJ5X3Nob3dzKEVOVFJZLCBcImRpc2FibGVkXCIpKTtcbitcbitcdGZkID0gb3BlbihCSU5GTVRfRElSIFwiL3N0YXR1c1wiLCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRBU1NFUlRfR0UoZmQsIDApO1xuK1x0QVNTRVJUX0VRKHdyaXRlKGZkLCBcIi0xXCIsIDIpLCAyKTtcbitcdGNsb3NlKGZkKTtcbitcbitcdEVYUEVDVF9ORShhY2Nlc3MoQklORk1UX0RJUiBcIi9cIiBFTlRSWSwgRl9PSyksIDApO1xuK31cbitcbisvKiBBIGZpbGUgaGFuZGxlIGhlbGQgYWNyb3NzIGEgcmVtb3ZhbCBjYW5ub3QgcmVzdXJyZWN0IHRoZSBlbnRyeS4gKi9cbitURVNUX0YoZGlzYWJsZWQsIG5vX3Jlc3VycmVjdGlvbl9hZnRlcl9yZW1vdmUpXG4re1xuK1x0aW50IGZkO1xuK1xuK1x0QVNTRVJUX0VRKHdyaXRlX3JlZyhSVUxFKFwiRFwiKSksIDApO1xuK1x0ZmQgPSBvcGVuKEJJTkZNVF9ESVIgXCIvXCIgRU5UUlksIE9fV1JPTkxZIHwgT19DTE9FWEVDKTtcbitcdEFTU0VSVF9HRShmZCwgMCk7XG4rXG4rXHRBU1NFUlRfRVEod3JpdGUoZmQsIFwiLTFcIiwgMiksIDIpO1xuK1x0RVhQRUNUX05FKGFjY2VzcyhCSU5GTVRfRElSIFwiL1wiIEVOVFJZLCBGX09LKSwgMCk7XG4rXG4rXHQvKiBBY2NlcHRlZCBsaWtlIGFueSB0b2dnbGUgb2YgYSByZW1vdmVkIGVudHJ5LCBidXQgcHVibGlzaGVzIG5vdGhpbmcuICovXG4rXHRFWFBFQ1RfRVEod3JpdGUoZmQsIFwiMVwiLCAxKSwgMSk7XG4rXHRFWFBFQ1RfRVEocnVuX3BheWxvYWQoVEFSR0VUX1BBVEgpLCBSVU5fRU5PRVhFQyk7XG4rXHRjbG9zZShmZCk7XG4rfVxuK1xuK1RFU1RfSEFSTkVTU19NQUlOXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jXG5pbmRleCBkMGNiODQ1ZGYxZDMwLi4yZWJmNzNkZTgwMThjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9iaW5mbXRfbWlzY190cmFuc3BhcmVudC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JpbmZtdF9taXNjX3RyYW5zcGFyZW50LmNcbkBAIC01Niw3ICs1Niw3IEBAIEZJWFRVUkVfU0VUVVAodHJhbnNwYXJlbnQpXG4gXHRBU1NFUlRfRVEoY3JlYXRlX3RhcmdldCgpLCAwKTtcbiBcbiBcdC8qIFNraXAgdGhlIHdob2xlIHN1aXRlIG9uIGEga2VybmVsIHRoYXQgZG9lcyBub3Qga25vdyAnVCcuICovXG4tXHRpZiAoYmluZm10X2ZsYWdfc3VwcG9ydGVkKCdUJykpIHtcbitcdGlmICghYmluZm10X2ZsYWdfc3VwcG9ydGVkKCdUJykpIHtcbiBcdFx0QVNTRVJUX0VRKGVycm5vLCBFSU5WQUwpO1xuIFx0XHRTS0lQKHJldHVybiwgXCJrZXJuZWwgd2l0aG91dCB0aGUgJ1QnIGZsYWdcIik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xY2U0NWNjYTIxNWYwXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jXG5AQCAtMCwwICsxLDc2IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGJpbmZtdF9taXNjX29wcyBoYW5kbGVyIGZvciB0aGUgc2VsZnRlc3QncyBib3VuZC1pbnRlcnByZXRlciBjYXNlOiBvbmVcbisgKiBoYW5kbGVyLCBvbmUgZW50cnksIGFuIGludGVycHJldGVyIHBlciBndWVzdCBhcmNoaXRlY3R1cmUgLSBlYWNoIGJvdW5kIHRvXG4rICogYSBmaWxlIHdoZW4gdGhlIGVudHJ5IHdhcyByZWdpc3RlcmVkIHJhdGhlciB0aGFuIHRvIGEgcGF0aCByZXNvbHZlZCBhdFxuKyAqIGV4ZWMgdGltZS4gVGhlIGxvYWQgcHJvZ3JhbSBuYW1lcyB0aGUgb25lIGl0IHdhbnRzOyBhIG5hbWUgdGhlIGVudHJ5IGRpZFxuKyAqIG5vdCBiaW5kIGZhaWxzIHRoZSBleGVjLCB3aGljaCB0aGUgaGFybmVzcyBjaGVja3MgdG9vLlxuKyAqL1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuKyNkZWZpbmUgRUlfQ0xBU1NcdDRcbisjZGVmaW5lIEVMRkNMQVNTNjRcdDJcbisjZGVmaW5lIEVfTUFDSElORV9PRkZcdDE4XG4rI2RlZmluZSBFTV9BUk1cdFx0NDBcbisjZGVmaW5lIEVNX0FBUkNINjRcdDE4M1xuKyNkZWZpbmUgRU1fUklTQ1ZcdDI0M1xuK1xuK2V4dGVybiBpbnQgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfX3N6KSBfX2tzeW07XG4rXG4rLyogVGhlIGd1ZXN0IGFyY2hpdGVjdHVyZSBvZiBhIDY0LWJpdCBFTEYsIG9yIHplcm8gaWYgaXQgaXMgbm90IG9uZS4gKi9cbitzdGF0aWMgX191MTYgZWxmX21hY2hpbmUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbit7XG4rXHRpZiAoYnBybS1cdTAwM2VidWZbMF0gIT0gMHg3ZiB8fCBicHJtLVx1MDAzZWJ1ZlsxXSAhPSAnRScgfHxcbitcdCAgICBicHJtLVx1MDAzZWJ1ZlsyXSAhPSAnTCcgfHwgYnBybS1cdTAwM2VidWZbM10gIT0gJ0YnIHx8XG4rXHQgICAgYnBybS1cdTAwM2VidWZbRUlfQ0xBU1NdICE9IEVMRkNMQVNTNjQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogTGl0dGxlLWVuZGlhbiAxNi1iaXQgZmllbGQsIHJlYWQgYnl0ZS13aXNlIGZvciB0aGUgdmVyaWZpZXIuICovXG4rXHRyZXR1cm4gKF9fdTgpYnBybS1cdTAwM2VidWZbRV9NQUNISU5FX09GRl0gfFxuK1x0ICAgICAgICgoX191MTYpKF9fdTgpYnBybS1cdTAwM2VidWZbRV9NQUNISU5FX09GRiArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wcy5zL21hdGNoXCIpXG4rYm9vbCBCUEZfUFJPRyhpbnRlcnBfYmluZF9tYXRjaCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbit7XG4rXHRfX3UxNiBtYWNoaW5lID0gZWxmX21hY2hpbmUoYnBybSk7XG4rXG4rXHRyZXR1cm4gbWFjaGluZSA9PSBFTV9BQVJDSDY0IHx8IG1hY2hpbmUgPT0gRU1fUklTQ1YgfHxcbitcdCAgICAgICBtYWNoaW5lID09IEVNX0FSTTtcbit9XG4rXG4rU0VDKFwic3RydWN0X29wcy5zL2xvYWRcIilcbitpbnQgQlBGX1BST0coaW50ZXJwX2JpbmRfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbit7XG4rXHQvKlxuK1x0ICogTmFtZXMsIG5vdCBwYXRoczogZWFjaCBvbmUgc2VsZWN0cyBhIGZpbGUgdGhlIGVudHJ5IHByZS1vcGVuZWQsIHNvXG4rXHQgKiBub3RoaW5nIGlzIHJlc29sdmVkIGhlcmUgb3IgbGF0ZXIsIGluIGFueSBuYW1lc3BhY2UuIFRoZSBidWZmZXJzXG4rXHQgKiBhcmUgb24gdGhlIHN0YWNrIGJlY2F1c2UgdGhlIHZlcmlmaWVyIHJlamVjdHMgLnJvZGF0YSBmb3IgYSBzaXplZFxuK1x0ICogbWVtb3J5IGFyZ3VtZW50LlxuK1x0ICovXG4rXHRjaGFyIGZpcnN0W10gPSBcImZpcnN0XCI7XG4rXHRjaGFyIHNlY29uZFtdID0gXCJzZWNvbmRcIjtcbitcdGNoYXIgdW5ib3VuZFtdID0gXCJ1bmJvdW5kXCI7XG4rXG4rXHRzd2l0Y2ggKGVsZl9tYWNoaW5lKGJwcm0pKSB7XG4rXHRjYXNlIEVNX0FBUkNINjQ6XG4rXHRcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgZmlyc3QsIHNpemVvZihmaXJzdCkpO1xuK1x0Y2FzZSBFTV9SSVNDVjpcbitcdFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBzZWNvbmQsIHNpemVvZihzZWNvbmQpKTtcbitcdH1cbitcbitcdC8qIFRoZSBlbnRyeSBib3VuZCBub3RoaW5nIHVuZGVyIHRoaXMgbmFtZTogLUVOT0VOVCBmYWlscyB0aGUgZXhlYy4gKi9cbitcdHJldHVybiBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoYnBybSwgdW5ib3VuZCwgc2l6ZW9mKHVuYm91bmQpKTtcbit9XG4rXG4rU0VDKFwiLnN0cnVjdF9vcHMubGlua1wiKVxuK3N0cnVjdCBiaW5mbXRfbWlzY19vcHMgaW50ZXJwX2JpbmQgPSB7XG4rXHQubWF0Y2hcdD0gKHZvaWQgKilpbnRlcnBfYmluZF9tYXRjaCxcbitcdC5sb2FkXHQ9ICh2b2lkICopaW50ZXJwX2JpbmRfbG9hZCxcbitcdC5uYW1lXHQ9IFwiaW50ZXJwX2JpbmRcIixcbit9O1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTY6MDIuOTEyMjQ5NjY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU3ODc2Mjg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIEJpbmZtdF9taXNjIEludGVycHJldGVyIEJpbmRpbmcqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGludGVycHJldGVyIGJpbmRpbmcgdG8gYGJpbmZtdF9taXNjYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIGluIGBmcy9iaW5mbXRfbWlzYy5jYCwgYGZzL2JpbmZtdF9taXNjX2JwZi5jYCwgYW5kIGBmcy9leGVjLmNgLiBJdCdzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgd2UgbmVlZCB0byBmdXp6IGl0IHRob3JvdWdobHkuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIFwiRFwiIGZsYWcgZm9yIGRpc2FibGVkIGVudHJpZXMgd2hpY2ggY2FuIGhhdmUgYW4gaW50ZXJwcmV0ZXIgYm91bmQgbGF0ZXIgd2l0aCB0aGUgXCIrbmFtZSBwYXRoXCIgZmVhdHVyZSwgdGhlbiBiZSBzZWxlY3RlZCBieSBhIEJQRiBoYW5kbGVyIHVzaW5nIGEgbmV3IGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKWAga2Z1bmMuIFRoYXQncyB0aGUgY29yZSBvZiBpdCwgYWxsb3dpbmcgQlBGIGhhbmRsZXJzIHRvIGNob29zZSBhbiBpbnRlcnByZXRlciB3aXRob3V0IGRvaW5nIHBhdGggcmVzb2x1dGlvbiBhdCBleGVjdXRpb24gdGltZS5cblxuU2luY2UgaXTigJlzIGluIHRoZSBjb3JlIGtlcm5lbCwgZnV6emluZyBpcyBlc3NlbnRpYWwgaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGZzL2JpbmZtdF9taXNjLmNgLCBJJ3ZlIGdvdDpcblxuKiAgIGBiaW5mbXRfbWlzY19maW5kX2ludGVycGBcbiogICBgZW50cnlfYXR0YWNoX2ludGVycHJldGVyYCAoc3RhdGljKVxuKiAgIGBibV9lbnRyeV9hZGRfaW50ZXJwYCAoc3RhdGljKVxuKiAgIGBibV9lbnRyeV93cml0ZWAgKHN0YXRpYylcbiogICBgY3JlYXRlX2VudHJ5YFxuKiAgIGBhZGRfZW50cnlgXG4qICAgYGJtX3JlZ2lzdGVyX3dyaXRlYFxuKiAgIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgXG4qICAgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgXG5cbkFuZCBmcm9tIGBmcy9iaW5mbXRfbWlzY19icGYuY2A6XG5cbiogICBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwYCAoa2Z1bmMsIG5vbi1zdGF0aWMpXG4qICAgYGJwZl9iaW5wcm1fc2V0X2ludGVycGAgKGtmdW5jLCBtb2RpZmllZClcblxuQWxyaWdodCwgYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGFuZCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCBzZWVtIGltbWVkaWF0ZWx5IHJlbGV2YW50IGFzIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgYm1fZW50cnlfd3JpdGVgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGFyZSBmaWxlIG9wZXJhdGlvbnMsIHNvIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0YXRpYywgdGhleSBjYW4gc3RpbGwgYmUgcmVhY2hlZCB2aWEgc3lzY2FsbHMsIHRoZXJlZm9yZSBhcmUgaW1wb3J0YW50LiBIb3dldmVyLCBgbG9hZF9taXNjX2JpbmFyeWAgaXMgbGlrZWx5IHRoZSBtYWluIGVudHJ5cG9pbnQgaW50byB0aGlzIHdob2xlIG1vZHVsZSBzbyB3ZSdsbCBuZWVkIHRvIGNvbnNpZGVyIGl0IHRvby5cblxuVG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXhhY3QgbmFtZXMgYW5kIHNpZ25hdHVyZXMsIEknbSBnb2luZyB0byBydW4gYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi4gTGV0J3MgbWFrZSBzdXJlIHdlIGhpdCBldmVyeSBhbmdsZSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUyNCwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjoxMS40OTEwMTU1MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI4NTM2MzQxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8c3NpemVfdHx2b2lkfHN0cnVjdCBmaWxlIFxcXFwqfGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19pbnRlcnAgXFxcXCp8Y29uc3QgY2hhciBcXFxcKikuKiAoYm1fZW50cnlfd3JpdGV8Ym1fcmVnaXN0ZXJfd3JpdGV8YmluZm10X21pc2NfZmluZF9pbnRlcnB8YnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwfGJwZl9iaW5wcm1fc2V0X2ludGVycHxsb2FkX21pc2NfYmluYXJ5fGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcnxlbnRyeV9vcGVuX2ludGVycHJldGVyfGJtX2VudHJ5X2FkZF9pbnRlcnApXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjU2OjE0Ljc3NjM4OTM5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzIxMzIwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIHJlYXNzZXNzLiBUaGUgY3VycmVudCBhcHByb2FjaCwgd2hpbGUgcG90ZW50aWFsbHkgcG93ZXJmdWwsIG1pZ2h0IGJlIG92ZXJjb21wbGljYXRpbmcgdGhpbmdzLiBMZXQncyBzZWUgaWYgYSBtb3JlIGJhc2ljIGBncmVwYCBjYW4gYWNoaWV2ZSB0aGUgZGVzaXJlZCBvdXRjb21lLiBTb21ldGltZXMsIGJydXRlIGZvcmNlIGFuZCBzaW1wbGljaXR5IHlpZWxkIGJldHRlciByZXN1bHRzIHRoYW4gY29tcGxleCwgbGF5ZXJlZCBzb2x1dGlvbnMsIGVzcGVjaWFsbHkgZm9yIGluaXRpYWwgZGVidWdnaW5nIG9yIHZhbGlkYXRpb24uIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXR0ZXJuIGFuZCBpdGVyYXRpdmVseSByZWZpbmUgaXQgYXMgbmVlZGVkLCBmb2N1c2luZyBvbiBtaW5pbWl6aW5nIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgYXQgdGhpcyBzdGFnZS4gSXQncyBhIHByYWdtYXRpYyBzaGlmdCDigJMgYXZvaWQgb3ZlcmtpbGwsIGdldCBzb21ldGhpbmcgZnVuY3Rpb25hbCBmaXJzdCwgdGhlbiBvcHRpbWl6ZSBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg2NiwiT3V0cHV0VG9rZW5zIjo4OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTY6MTguMTQ4NTI0MzEzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjY2NjAzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGJtX2VudHJ5X3dyaXRlfGJtX3JlZ2lzdGVyX3dyaXRlfGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwfGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycHxicGZfYmlucHJtX3NldF9pbnRlcnB8bG9hZF9taXNjX2JpbmFyeXxlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJ8ZW50cnlfb3Blbl9pbnRlcnByZXRlcnxibV9lbnRyeV9hZGRfaW50ZXJwKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdD0xOTQ9YW5kIGRlcml2ZSB0aGUgaW50ZXJwcmV0ZXIgZnJvbSB0aGUgYmluYXJ5J3MgbG9jYXRpb24uIEl0IHNlbGVjdHMgdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q6MTk1OmludGVycHJldGVyIGJ5IGNhbGxpbmcgdGhlIGBgYnBmX2JpbnBybV9zZXRfaW50ZXJwKClgYCBrZnVuYyB3aXRoIGFuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QtMTk2LWFic29sdXRlIHBhdGggYW5kIHJldHVybmluZyBgYDBgYC4gQSBtYXRjaCBpcyBjb21taXR0ZWQ6IGEgZmFpbGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q9MjIzPVRoZSBgYGxvYWRgYCBwcm9ncmFtIHRoZW4gc2VsZWN0cyBvbmUgcGVyIGV4ZWMgYnkgbmFtZSB3aXRoIHRoZVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0OjIyNDpgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCgpYGAga2Z1bmMsIGFuZCBldmVyeSBleGVjIHJ1bnMgYSBjbG9uZSBvZiB0aGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdC0yMjUtZmlsZSB0aGF0IHdhcyBvcGVuZWQuIFRoZSBwYXRoIGRlY2lkZXMgd2hpY2ggZmlsZSBpcyBib3VuZCBhbmQgbm90aGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3Q9MjU1PVRoZSBgYGxvYWRgYCBwcm9ncmFtIGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyIHdpdGhcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdDoyNTY6dGhlIGBgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZygpYGAga2Z1bmMuIEl0IGlzIGluc2VydGVkIGJldHdlZW4gdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QtMjU3LWludGVycHJldGVyIGFuZCB0aGUgYmluYXJ5LCBleGFjdGx5IGxpa2UgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGEgYGAjIWBgXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTEwMz1zdHJ1Y3QgYmluZm10X21pc2NfZW50cnkge1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMTUtXFx0c3RydWN0IGxpc3RfaGVhZCBpbnRlcnBzO1xcdC8qIHRoZSBpbnRlcnByZXRlcnMgaXQgYm91bmQgKi9cXG5mcy9iaW5mbXRfbWlzYy5jOjExNjpcXHRyZWZjb3VudF90IHVzZXJzO1xcdFxcdC8qIHN5bmMgcmVtb3ZhbCB3aXRoIGxvYWRfbWlzY19iaW5hcnkoKSAqL1xcbmZzL2JpbmZtdF9taXNjLmMtMTE3LVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEzOC1cXG5mcy9iaW5mbXRfbWlzYy5jOjEzOTovKiBQcm90ZWN0cyB0aGUgZW50cnkgd2FsayBpbiBsb2FkX21pc2NfYmluYXJ5KCksIHdoaWNoIG1heSBzbGVlcCBpbiBpdC4gKi9cXG5mcy9iaW5mbXRfbWlzYy5jLTE0MC1ERUZJTkVfU1RBVElDX1NSQ1VfRkFTVChibV9lbnRyaWVzX3NyY3UpO1xcbi0tXFxuZnMvYmluZm10X21pc2MuYz0yMzE9c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMjM4LS8qKlxcbmZzL2JpbmZtdF9taXNjLmM6MjM5OiAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwIC0gZmluZCBhIGJvdW5kIGludGVycHJldGVyIGJ5IG5hbWVcXG5mcy9iaW5mbXRfbWlzYy5jLTI0MC0gKiBAaW50ZXJwczogdGhlIGludGVycHJldGVycyB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTI0NT1jb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfaW50ZXJwICpcXG5mcy9iaW5mbXRfbWlzYy5jOjI0NjpiaW5mbXRfbWlzY19maW5kX2ludGVycChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICppbnRlcnBzLCBjb25zdCBjaGFyICpuYW1lKVxcbmZzL2JpbmZtdF9taXNjLmMtMjQ3LXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MzEyPXN0YXRpYyBpbnQgZW50cnlfYXR0YWNoX2ludGVycHJldGVyKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzE4LVxcbmZzL2JpbmZtdF9taXNjLmM6MzE5OlxcdGlmIChiaW5mbXRfbWlzY19maW5kX2ludGVycChcXHUwMDI2ZS1cXHUwMDNlaW50ZXJwcywgbmFtZSkpXFxuZnMvYmluZm10X21pc2MuYy0zMjAtXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTM0MD1zdGF0aWMgdm9pZCBibV9lbnRyeV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMzUzLSAqXFxuZnMvYmluZm10X21pc2MuYzozNTQ6ICogRnJlZSBlbnRyeSBzeW5jaW5nIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpIGFuZCBkZWZlciBmaW5hbCBmcmVlIHRvXFxuZnMvYmluZm10X21pc2MuYzozNTU6ICogbG9hZF9taXNjX2JpbmFyeSgpIGluIGNhc2UgaXQgaXMgdXNpbmcgdGhlIGJpbmFyeSB0eXBlIGhhbmRsZXIgd2Ugd2VyZVxcbmZzL2JpbmZtdF9taXNjLmMtMzU2LSAqIHJlcXVlc3RlZCB0byByZW1vdmUuIEFsc28gdGhlIHRlYXJkb3duIGZvciBhIHJlZ2lzdHJhdGlvbiB0aGF0IGZhaWxzXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTM5OT1zdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjICpjdXJyZW50X2JpbmZtdF9taXNjKHZvaWQpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTQxNC0vKipcXG5mcy9iaW5mbXRfbWlzYy5jOjQxNTogKiBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIgLSBnZXQgdGhlIGludGVycHJldGVyIGZvciB0aGUgbWF0Y2hlZCBAZVxcbmZzL2JpbmZtdF9taXNjLmMtNDE2LSAqIEBlOiBtYXRjaGVkIGJpbmFyeSB0eXBlIGhhbmRsZXJcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNDI1LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NDI2OnN0YXRpYyBjb25zdCBjaGFyICplbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXIoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2VudHJ5ICplLFxcbmZzL2JpbmZtdF9taXNjLmMtNDI3LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYz00Nzc9c3RhdGljIHVuc2lnbmVkIGxvbmcgZW50cnlfaW52b2NhdGlvbl9mbGFncyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2NfZW50cnkgKmUsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTUwNC0vKipcXG5mcy9iaW5mbXRfbWlzYy5jOjUwNTogKiBlbnRyeV9vcGVuX2ludGVycHJldGVyIC0gb3BlbiB0aGUgZW50cnkncyBpbnRlcnByZXRlciBmb3IgZXhlY3V0aW9uXFxuZnMvYmluZm10X21pc2MuYy01MDYtICogQGU6IG1hdGNoZWQgYmluYXJ5IHR5cGUgaGFuZGxlclxcbi0tXFxuZnMvYmluZm10X21pc2MuYy01MTUtICovXFxuZnMvYmluZm10X21pc2MuYzo1MTY6c3RhdGljIHN0cnVjdCBmaWxlICplbnRyeV9vcGVuX2ludGVycHJldGVyKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTUxNy1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYz01NTk9c3RhdGljIGludCBidWlsZF9pbnRlcnBfYXJndihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICppbnRlcnByZXRlcixcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNjA4LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6NjA5OnN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbmZzL2JpbmZtdF9taXNjLmMtNjEwLXtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNjI4LVxcbmZzL2JpbmZtdF9taXNjLmM6NjI5OlxcdGludGVycHJldGVyID0gZW50cnlfc2VsZWN0X2ludGVycHJldGVyKGZtdCwgYnBybSk7XFxuZnMvYmluZm10X21pc2MuYy02MzAtXFx0aWYgKElTX0VSUihpbnRlcnByZXRlcikpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTY0NS1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBNSVNDX0ZNVF9MT0FERVIpIHtcXG5mcy9iaW5mbXRfbWlzYy5jOjY0NjpcXHRcXHRpbnRlcnBfZmlsZSA9IGVudHJ5X29wZW5faW50ZXJwcmV0ZXIoZm10LCBicHJtLCBpbnRlcnByZXRlcik7XFxuZnMvYmluZm10X21pc2MuYy02NDctXFx0XFx0aWYgKElTX0VSUihpbnRlcnBfZmlsZSkpIHtcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtNjY3LVxcbmZzL2JpbmZtdF9taXNjLmM6NjY4OlxcdGludGVycF9maWxlID0gZW50cnlfb3Blbl9pbnRlcnByZXRlcihmbXQsIGJwcm0sIGludGVycHJldGVyKTtcXG5mcy9iaW5mbXRfbWlzYy5jLTY2OS1cXHRpZiAoSVNfRVJSKGludGVycF9maWxlKSlcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTEzNz1zdGF0aWMgdm9pZCBibV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMTYxLSAqIHVubGluaygyKSBoYXBwZW5zIHVuZGVyIHRoZSBleGNsdXNpdmVseSBoZWxkIGlub2RlIGxvY2sgb2YgdGhlIHJvb3RcXG5mcy9iaW5mbXRfbWlzYy5jOjExNjI6ICogZGVudHJ5IGtlZXBpbmcgdGhlIGxpc3Qgc3RhYmxlIGZvciB3cml0ZXJzLiBsb2FkX21pc2NfYmluYXJ5KCkgd2Fsa3MgaXRcXG5mcy9iaW5mbXRfbWlzYy5jLTExNjMtICogY29uY3VycmVudGx5IHVuZGVyIFNSQ1UuIFRoZSBlbnRyaWVzX2xvY2sgaXMgb25seSBoZWxkIGFyb3VuZCB0aGUgYWN0dWFsXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTEyNTI9c3RhdGljIGludCBibV9lbnRyeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjU5LVxcbmZzL2JpbmZtdF9taXNjLmM6MTI2MDpcXHQvKiBzZXFfb3BlbigpIGNsZWFycyBGTU9ERV9QV1JJVEUsIGJtX2VudHJ5X3dyaXRlKCkgdGFrZXMgYW55IG9mZnNldCAqL1xcbmZzL2JpbmZtdF9taXNjLmMtMTI2MS1cXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEyNzMtLyoqXFxuZnMvYmluZm10X21pc2MuYzoxMjc0OiAqIGJtX2VudHJ5X2FkZF9pbnRlcnAgLSBiaW5kIGFub3RoZXIgaW50ZXJwcmV0ZXIgdG8gYSBzdGFnZWQgZW50cnlcXG5mcy9iaW5mbXRfbWlzYy5jLTEyNzUtICogQGU6IHRoZSBlbnRyeVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMjg4LSAqL1xcbmZzL2JpbmZtdF9taXNjLmM6MTI4OTpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV9hZGRfaW50ZXJwKHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTEyOTAtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xMzQ5LVxcbmZzL2JpbmZtdF9taXNjLmM6MTM1MDpzdGF0aWMgc3NpemVfdCBibV9lbnRyeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG5mcy9iaW5mbXRfbWlzYy5jLTEzNTEtXFx0XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jLTEzNjctXFx0aWYgKGJ1ZlswXSA9PSAnKycpXFxuZnMvYmluZm10X21pc2MuYzoxMzY4OlxcdFxcdHJldHVybiBibV9lbnRyeV9hZGRfaW50ZXJwKGUsIGZpbGUsIGJ1ZiwgY291bnQpO1xcbmZzL2JpbmZtdF9taXNjLmMtMTM2OS1cXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTQwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9lbnRyeV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNDEwLVxcdC5yZWFkXFx0XFx0PSBzZXFfcmVhZCxcXG5mcy9iaW5mbXRfbWlzYy5jOjE0MTE6XFx0LndyaXRlXFx0XFx0PSBibV9lbnRyeV93cml0ZSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE0MTItXFx0Lmxsc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbi0tXFxuZnMvYmluZm10X21pc2MuYz0xNDE5PXN0YXRpYyBpbnQgYWRkX2VudHJ5KHN0cnVjdCBiaW5mbXRfbWlzY19lbnRyeSAqZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmMtMTQ0OS1cXG5mcy9iaW5mbXRfbWlzYy5jOjE0NTA6c3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuZnMvYmluZm10X21pc2MuYy0xNDUxLVxcdFxcdFxcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTQ5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibV9yZWdpc3Rlcl9vcGVyYXRpb25zID0ge1xcbmZzL2JpbmZtdF9taXNjLmM6MTQ5MjpcXHQud3JpdGVcXHRcXHQ9IGJtX3JlZ2lzdGVyX3dyaXRlLFxcbmZzL2JpbmZtdF9taXNjLmMtMTQ5My1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG4tLVxcbmZzL2JpbmZtdF9taXNjLmM9MTU0Nj1zdGF0aWMgaW50IGJtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvYmluZm10X21pc2MuYy0xNjAzLVxcdCAqIHRoYXQgdGhlIGJpbmFyeSB0eXBlIGxpc3QgZm9yIHRoaXMgYmluZm10X21pc2MgbW91bnQgaXMgZW1wdHkgbWFraW5nXFxuZnMvYmluZm10X21pc2MuYzoxNjA0OlxcdCAqIGxvYWRfbWlzY19iaW5hcnkoKSByZXR1cm4gLUVOT0VYRUMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciAtXFx1MDAzZWVuYWJsZWRcXG5mcy9iaW5mbXRfbWlzYy5jLTE2MDUtXFx0ICogaXMgdHJ1ZS4gSW5zdGVhZCwgaWYgc29tZW9uZSBtb3VudHMgYmluZm10X21pc2MgZm9yIHRoZSBmaXJzdCB0aW1lIG9yXFxuLS1cXG5mcy9iaW5mbXRfbWlzYy5jPTE2NDk9c3RhdGljIHN0cnVjdCBsaW51eF9iaW5mbXQgbWlzY19mb3JtYXQgPSB7XFxuZnMvYmluZm10X21pc2MuYy0xNjUwLVxcdC5tb2R1bGUgPSBUSElTX01PRFVMRSxcXG5mcy9iaW5mbXRfbWlzYy5jOjE2NTE6XFx0LmxvYWRfYmluYXJ5ID0gbG9hZF9taXNjX2JpbmFyeSxcXG5mcy9iaW5mbXRfbWlzYy5jLTE2NTItfTtcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jPTExOT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMjEtLyoqXFxuZnMvYmluZm10X21pc2NfYnBmLmM6MTIyOiAqIGJwZl9iaW5wcm1fc2V0X2ludGVycCAtIHNlbGVjdCB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoZSBjdXJyZW50IGV4ZWNcXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMjMtICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMzEtICogcmV0dXJucy4gQ2FsbGluZyBpdCBhZ2FpbiByZXBsYWNlcyB0aGUgc2VsZWN0aW9uLCBhcyBkb2VzIHNlbGVjdGluZyBhblxcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjEzMjogKiBpbnRlcnByZXRlciB0aGUgZW50cnkgYm91bmQgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xMzMtICpcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEzNS0gKi9cXG5mcy9iaW5mbXRfbWlzY19icGYuYzoxMzY6X19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTEzNy1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9fc3opXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNjAtLyoqXFxuZnMvYmluZm10X21pc2NfYnBmLmM6MTYxOiAqIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycCAtIHJ1biB0aGlzIGV4ZWMgdW5kZXIgYW4gaW50ZXJwcmV0ZXIgdGhlIGVudHJ5IGJvdW5kXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMTYyLSAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxcbi0tXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMTY2LSAqIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb2FkIHByb2dyYW0gb2YgYSBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGhhbmRsZXJcXG5mcy9iaW5mbXRfbWlzY19icGYuYzoxNjc6ICogaW5zdGVhZCBvZiBicGZfYmlucHJtX3NldF9pbnRlcnAoKS4gSXQgc2VsZWN0cyBvbmUgb2YgdGhlIGludGVycHJldGVyc1xcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTE2OC0gKiB0aGUgbWF0Y2hlZCBlbnRyeSB3YXMgcmVnaXN0ZXJlZCB3aXRoLCBlYWNoIG9mIHdoaWNoIHdhcyBvcGVuZWQgb25jZSB3aGVuXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNzctICovXFxuZnMvYmluZm10X21pc2NfYnBmLmM6MTc4Ol9fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG5mcy9iaW5mbXRfbWlzY19icGYuYy0xNzktXFx0XFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeilcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTE5MC1cXG5mcy9iaW5mbXRfbWlzY19icGYuYzoxOTE6XFx0aW50ZXJwID0gYmluZm10X21pc2NfZmluZF9pbnRlcnAoYnBybS1cXHUwMDNlYnBmX2ludGVycHMsIG5hbWUpO1xcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTE5Mi1cXHRpZiAoIWludGVycClcXG4tLVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTIwMy0vKipcXG5mcy9iaW5mbXRfbWlzY19icGYuYzoyMDQ6ICogYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZyAtIHNldCBhIHNpbmdsZSBhcmd1bWVudCBmb3IgdGhlIGludGVycHJldGVyXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMjA1LSAqIEBicHJtOiBiaW5hcnkgdGhhdCBpcyBiZWluZyBleGVjdXRlZFxcbi0tXFxuZnMvYmluZm10X21pc2NfYnBmLmMtMjE1LSAqL1xcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjIxNjpfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwX2FyZyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbmZzL2JpbmZtdF9taXNjX2JwZi5jLTIxNy1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmFyZywgc2l6ZV90IGFyZ19fc3opXFxuLS1cXG5mcy9iaW5mbXRfbWlzY19icGYuYz0yODA9QlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxcbmZzL2JpbmZtdF9taXNjX2JwZi5jOjI4MTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXFxuZnMvYmluZm10X21pc2NfYnBmLmM6MjgyOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcXG5mcy9iaW5mbXRfbWlzY19icGYuYzoyODM6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycF9hcmcsIEtGX1NMRUVQQUJMRSlcXG5mcy9iaW5mbXRfbWlzY19icGYuYy0yODQtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ZsYWdzLCBLRl9TTEVFUEFCTEUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg9MTA9c3RydWN0IHVzZXJfbmFtZXNwYWNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oLTMwLSAqIGlzIGhhbmRlZCB0byB0aGUgaGFuZGxlcidzIGxvYWQgcHJvZ3JhbSBmb3IgdGhlIGR1cmF0aW9uIG9mIG9uZSBleGVjLFxcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaDozMTogKiB3aGljaCBwaWNrcyBvbmUgd2l0aCBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKS5cXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgtMzItICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg9NDA9Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqXFxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oOjQxOmJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaC00Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvYmluZm10X21pc2MuaD01OT1lbnVtIGJwZl9iaW5wcm1fZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oLTc0LSAqIEBsb2FkOiAgc2VsZWN0IGFuIGludGVycHJldGVyIGZvciB0aGUgbWF0Y2hlZCBAYnBybSB2aWFcXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg6NzU6ICogICAgICAgICBicGZfYmlucHJtX3NldF9pbnRlcnAoKSwgb3Igb25lIHRoZSBlbnRyeSBib3VuZCB2aWFcXG5pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmg6NzY6ICogICAgICAgICBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnAoKSwgYW5kIHJldHVybiB6ZXJvOyBhIG1hdGNoIGlzXFxuaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oLTc3LSAqICAgICAgICAgY29tbWl0dGVkLCBzbyBhIGZhaWx1cmUgZmFpbHMgdGhlIGV4ZWMgaW5zdGVhZCBvZiBmYWxsaW5nXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmM9MTQ9Y2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmMtMTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jOjIwOmV4dGVybiBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKnBhdGgsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTIxLVxcdFxcdFxcdFxcdCBzaXplX3QgcGF0aF9fc3opIF9fa3N5bTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvYnBmX2ludGVycC5icGYuYz00Mz1pbnQgQlBGX1BST0coYnBmX2ludGVycF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTQ1LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jOjQ2OlxcdCAqIEtlZXAgdGhlIHBhdGggb24gdGhlICh3cml0YWJsZSkgc3RhY2s6IGJwZl9iaW5wcm1fc2V0X2ludGVycCgpIHRha2VzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTQ3LVxcdCAqIGEgc2l6ZWQgbWVtb3J5IGFyZyBhbmQgdGhlIHZlcmlmaWVyIHJlamVjdHMgYSByZWFkLW9ubHkgLnJvZGF0YVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9icGZfaW50ZXJwLmJwZi5jLTUyLVxcdC8qIEBwYXRoX19zeiBpbmNsdWRlcyB0aGUgdGVybWluYXRpbmcgTlVMOyAwIGNvbW1pdHMgdGhlIHNlbGVjdGlvbi4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmM6NTM6XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2V0X2ludGVycChicHJtLCBpbnRlcnAsIHNpemVvZihpbnRlcnApKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2JwZl9pbnRlcnAuYnBmLmMtNTQtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYz0xMz1jaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtMjEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYzoyMjpleHRlcm4gaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtMjMtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX19zeikgX19rc3ltO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYz00OD1pbnQgQlBGX1BST0coaW50ZXJwX2JpbmRfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtNjEtXFx0Y2FzZSBFTV9BQVJDSDY0OlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM6NjI6XFx0XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBmaXJzdCwgc2l6ZW9mKGZpcnN0KSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9pbnRlcnBfYmluZC5icGYuYy02My1cXHRjYXNlIEVNX1JJU0NWOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM6NjQ6XFx0XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCBzZWNvbmQsIHNpemVvZihzZWNvbmQpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2ludGVycF9iaW5kLmJwZi5jLTY1LVxcdH1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtNjctXFx0LyogVGhlIGVudHJ5IGJvdW5kIG5vdGhpbmcgdW5kZXIgdGhpcyBuYW1lOiAtRU5PRU5UIGZhaWxzIHRoZSBleGVjLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmM6Njg6XFx0cmV0dXJuIGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChicHJtLCB1bmJvdW5kLCBzaXplb2YodW5ib3VuZCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvaW50ZXJwX2JpbmQuYnBmLmMtNjktfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9sb2FkZXIuYnBmLmM9MTI9Y2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2xvYWRlci5icGYuYy0xNy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2xvYWRlci5icGYuYzoxODpleHRlcm4gaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICpwYXRoLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jLTE5LVxcdFxcdFxcdFxcdCBzaXplX3QgcGF0aF9fc3opIF9fa3N5bTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jPTM4PWludCBCUEZfUFJPRyhsb2FkZXJfbG9hZCwgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jLTQ3LVxcdC8qIEBwYXRoX19zeiBpbmNsdWRlcyB0aGUgdGVybWluYXRpbmcgTlVMOyAwIGNvbW1pdHMgdGhlIHNlbGVjdGlvbi4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL2xvYWRlci5icGYuYzo0ODpcXHRyZXR1cm4gYnBmX2JpbnBybV9zZXRfaW50ZXJwKGJwcm0sIGludGVycCwgc2l6ZW9mKGludGVycCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbG9hZGVyLmJwZi5jLTQ5LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy03LSAqIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGJpbmFyeSBiZWluZyBleGVjdXRlZCBhbmRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM6ODogKiBzZWxlY3RlZCB2aWEgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCkuIFRoZSBtYXRjaCBwcm9ncmFtIHJlYWRzIHRoZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvbml4X29yaWdpbi5icGYuYy05LSAqIHByb2dyYW0gaGVhZGVycyBpdHNlbGYsIHNvIGFueXRoaW5nIGVsc2UgbmV2ZXIgY29tbWl0cyB0byB0aGlzXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM9Mzg9ZXh0ZXJuIGludCBicGZfcGF0aF9kX3BhdGgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKmJ1ZixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmMtMzktXFx0XFx0XFx0ICAgc2l6ZV90IGJ1Zl9fc3opIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM6NDA6ZXh0ZXJuIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmMtNDEtXFx0XFx0XFx0XFx0IHNpemVfdCBwYXRoX19zeikgX19rc3ltO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9uaXhfb3JpZ2luLmJwZi5jPTEyNz1pbnQgQlBGX1BST0cobml4X29yaWdpbl9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy9uaXhfb3JpZ2luLmJwZi5jLTIxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmM6MjExOlxcdHJldCA9IGJwZl9iaW5wcm1fc2V0X2ludGVycChicHJtLCBzYy1cXHUwMDNlcGF0aCwgcnN6KTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL25peF9vcmlnaW4uYnBmLmMtMjEyLW91dF9kZWw6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jPTEyPWNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYy0xNy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jOjE4OmV4dGVybiBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKnBhdGgsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYy0xOS1cXHRcXHRcXHRcXHQgc2l6ZV90IHBhdGhfX3N6KSBfX2tzeW07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9leGVjL3RyYW5zcGFyZW50LmJwZi5jPTM5PWludCBCUEZfUFJPRyh0cmFuc3BhcmVudF9sb2FkLCBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYy00OC1cXHQvKiBAcGF0aF9fc3ogaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIE5VTDsgMCBjb21taXRzIHRoZSBzZWxlY3Rpb24uICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZXhlYy90cmFuc3BhcmVudC5icGYuYzo0OTpcXHRyZXR1cm4gYnBmX2JpbnBybV9zZXRfaW50ZXJwKGJwcm0sIGludGVycCwgc2l6ZW9mKGludGVycCkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2V4ZWMvdHJhbnNwYXJlbnQuYnBmLmMtNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjoyMS4wNzUxOTIzMjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzczNzQyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIEludGVycHJldGVyIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBrZXJuZWwgc2VsZWN0cyBpbnRlcnByZXRlcnMuIE15IGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzLiBMZXQncyBzZWUsIHRoZSBvbmVzIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFyZTogYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGBicGZfYmlucHJtX3NldF9pbnRlcnBgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgLCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgLiAgSSdsbCBhbHNvIGtlZXAgYGJtX2VudHJ5X2FkZF9pbnRlcnBgLCBgYm1fZW50cnlfd3JpdGVgLCBhbmQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBpbiBtaW5kLCBldmVuIHRob3VnaCBzb21lIGFyZSBzdGF0aWM7IGxpc3RpbmcgdGhlbSB3b24ndCBodXJ0LCBhbmQgbWlnaHQgYmUgaGVscGZ1bCBsYXRlci5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdsbCBzdGFydCB3aXRoIGBmcy9iaW5mbXRfbWlzYy5jYCBhbmQgaHVudCBmb3IgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgYm1fZW50cnlfd3JpdGVgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBhbmQgYGJtX2VudHJ5X2FkZF9pbnRlcnBgLiBBaCwgcmlnaHQsIHRob3NlIGFyZSBmaWxlIG9wZXJhdGlvbnMhICBPa2F5LCBJIGNhbiBkZWZpbml0ZWx5IGxpc3QgdGhvc2UuICBFdmVuIHRob3VnaCBgYm1fZW50cnlfd3JpdGVgIGlzIG1hcmtlZCBgc3RhdGljYCwgaXQncyBzdGlsbCBhIGdvb2QgcGxhY2UgdG8gcG9rZSBhcm91bmQuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGxvb2sgaW50byBhcmU6IGBiaW5mbXRfbWlzY19maW5kX2ludGVycGAsIGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnBgLCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCwgYGxvYWRfbWlzY19iaW5hcnlgLCBgYm1fZW50cnlfd3JpdGVgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgLCBgYm1fZW50cnlfYWRkX2ludGVycGAsIGBlbnRyeV9zZWxlY3RfaW50ZXJwcmV0ZXJgLCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgLlxuXG5OZXh0LCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGluIGBLY29uZmlnYCB0byBzZWUgaG93IGBCSU5GTVRfTUlTQ2AgYW5kIGBCSU5GTVRfTUlTQ19CUEZgIGFyZSBjb25maWd1cmVkIGFuZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHRoZSBmb3VuZGF0aW9uIEkgbmVlZCB0byBiZWdpbiB0aGUgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzMxMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjoyNi44NDg5Mzc5MDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNzIyNTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQklORk1UX01JU0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTM4PWNvbmZpZyBCSU5GTVRfWkZMQVRcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE0NC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxNDU6Y29uZmlnIEJJTkZNVF9NSVNDXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTQ2LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgTUlTQyBiaW5hcmllc1xcXCJcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE3MC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxNzE6Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxcbmZzL0tjb25maWcuYmluZm10LTE3Mi1cXHRib29sIFxcXCJCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjoyOC4zNjYxNjc2OThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIzNDcxODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9LY29uZmlnLmJpbmZtdGAqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZnMvS2NvbmZpZy5iaW5mbXRgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzEuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBvciBwb3RlbnRpYWxseSByZWxldmFudCB0aGVyZSBpbiByZWxhdGlvbiB0byB3aGF0IEknbSB3b3JraW5nIG9uLCBwZXJoYXBzIGRlYWxpbmcgd2l0aCBiaW5hcnkgZm9ybWF0IGNvbmZpZ3VyYXRpb24uIEhvcGVmdWxseSwgaXQncyBzb21ldGhpbmcgc3BlY2lmaWMsIG1heWJlIGEgY29uZGl0aW9uYWwsIGEgZGVwZW5kZW5jeSBkZWZpbml0aW9uLCBvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQncyBnb2luZyB0byBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGN1cnJlbnQgcHJvYmxlbS4gVGltZSB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAyOjU2OjMxLjU4OTY0MjQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWcuYmluZm10XCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2MDpcXHRcXHQgIGZlYXR1cmUsIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvamF2YS5yc3RcXHUwMDNlIGZvciBpbmZvcm1hdGlvbiBhYm91dCBob3dcXG4gMTYxOlxcdFxcdCAgdG8gaW5jbHVkZSBKYXZhIHN1cHBvcnQuIGFuZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21vbm8ucnN0XFx1MDAzZSBmb3JcXG4gMTYyOlxcdCAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gaW5jbHVkZSBNb25vLWJhc2VkIC5ORVQgc3VwcG9ydC5cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0ICAgICAgICAgIFRvIHVzZSBiaW5mbXRfbWlzYywgeW91IHdpbGwgbmVlZCB0byBtb3VudCBpdDpcXG4gMTY1OlxcdFxcdFxcdG1vdW50IGJpbmZtdF9taXNjIC10IGJpbmZtdF9taXNjIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzY1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHQgIFlvdSBtYXkgc2F5IE0gaGVyZSBmb3IgbW9kdWxlIHN1cHBvcnQgYW5kIGxhdGVyIGxvYWQgdGhlIG1vZHVsZSB3aGVuXFxuIDE2ODpcXHRcXHQgIHlvdSBoYXZlIHVzZSBmb3IgaXQ7IHRoZSBtb2R1bGUgaXMgY2FsbGVkIGJpbmZtdF9taXNjLiBJZiB5b3VcXG4gMTY5OlxcdFxcdCAgZG9uJ3Qga25vdyB3aGF0IHRvIGFuc3dlciBhdCB0aGlzIHBvaW50LCBzYXkgWS5cXG4gMTcwOlxcdFxcbiAxNzE6XFx0Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxcbiAxNzI6XFx0XFx0Ym9vbCBcXFwiQlBGLXNlbGVjdGVkIGludGVycHJldGVycyBmb3IgbWlzYyBiaW5hcmllc1xcXCJcXG4gMTczOlxcdFxcdGRlcGVuZHMgb24gQklORk1UX01JU0M9eVxcbiAxNzQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuIDE3NTpcXHRcXHRoZWxwXFxuIDE3NjpcXHRcXHQgIEFsbG93IGJpbmZtdF9taXNjIGJpbmFyeSB0eXBlIGhhbmRsZXJzIHRvIGJlIGltcGxlbWVudGVkIGFzIGJwZlxcbiAxNzc6XFx0XFx0ICBzdHJ1Y3Rfb3BzIHByb2dyYW1zLiBJbnN0ZWFkIG9mIG1hdGNoaW5nIGEgZml4ZWQgbWFnaWMgYW5kXFxuIDE3ODpcXHRcXHQgIHJlZGlyZWN0aW5nIHRvIGEgZml4ZWQgaW50ZXJwcmV0ZXIgcmVjb3JkZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWVcXG4gMTc5OlxcdFxcdCAgc3VjaCBoYW5kbGVycyBtYXRjaCBiaW5hcmllcyBwcm9ncmFtbWF0aWNhbGx5IGFuZCBjb21wdXRlIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMjo1NjozMS41ODk3Mjk5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjM0NTc0MjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBCSU5GTVRfTUlTQyBhbmQgQlBGIEludGVncmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBCSU5GTVRfTUlTQ19CUEZgIGlzIGVuYWJsZWQsIHdoaWNoIG9idmlvdXNseSByZWxpZXMgb24gYEJJTkZNVF9NSVNDPXlgLCBhbmQgdGhlbiBhbHNvIHRoZSByZWxldmFudCBCUEYtc3BlY2lmaWMgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gaW5jbHVkZSBib3RoIGBCSU5GTVRfTUlTQ2AgYW5kIGBCSU5GTVRfTUlTQ19CUEZgIGluIGBFbmFibGVDb25maWdzYC4gVGhhdCBjb3ZlcnMgdGhlIGJhc2ljIGRlcGVuZGVuY2llcy5cblxuTm93LCB3aGVyZSBkb2VzIHRoaXMgcGF0Y2ggdG91Y2g/IExvb2tzIGxpa2UgYGZzL2JpbmZtdF9taXNjLmNgIGFuZCBgZnMvYmluZm10X21pc2NfYnBmLmNgLiBTbywgYEJJTkZNVF9NSVNDYCBhbmQgYEJJTkZNVF9NSVNDX0JQRmAgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHRoaXMgYXJlYS5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCByZWxldmFudC4gTXkgbWVudGFsIGNoZWNrbGlzdCBmb2N1c2VzIG9uIHRoZXNlIHBvdGVudGlhbCBob3RzcG90czogYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYCwgYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAsIGBicGZfYmlucHJtX3NldF9pbnRlcnBgLCBgbG9hZF9taXNjX2JpbmFyeWAsIGBibV9lbnRyeV93cml0ZWAsIGBibV9yZWdpc3Rlcl93cml0ZWAsIGBibV9lbnRyeV9hZGRfaW50ZXJwYCwgYGVudHJ5X3NlbGVjdF9pbnRlcnByZXRlcmAsIGFuZCBgZW50cnlfb3Blbl9pbnRlcnByZXRlcmAuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdC4gYGxvYWRfbWlzY19iaW5hcnlgIGlzIGRlZmluaXRlbHkgYSBob3QtcGF0aCBmdW5jdGlvbiwgYnV0IGl0IGlzIHNwZWNpZmljIHRvIGBiaW5mbXRfbWlzY2AuIEl0J3Mgbm90IGEgZ2VuZXJpYyBrZXJuZWwgZnVuY3Rpb24gbGlrZSBgc2NoZWR1bGVgIG9yIGBrbWFsbG9jYCwgc28gaXQncyBwcm9iYWJseSBva2F5IHRvIGluY2x1ZGUuIGBibV9lbnRyeV93cml0ZWAgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAgYXJlIHN0YXRpYywgYnV0IHRoZXkgYXJlIGNydWNpYWwgZm9yIHNldHRpbmcgdXAgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZSBwcm9tcHQgc2F5cyB0byBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIGJ1dCB0aGVzZSBhcmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYGZpbGVfb3BlcmF0aW9uc2AsIHNvIHRoZXkgd29uJ3QgYmUgaW5saW5lZC4gVGhleSBhcmUgZ29vZCB0YXJnZXRzLiBgYm1fZW50cnlfYWRkX2ludGVycGAgYXBwZWFycyBzdGF0aWMuIExldCdzIG9taXQgaXQgYXMgaXQncyBsaWtlbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIExpa2V3aXNlLCBgZW50cnlfc2VsZWN0X2ludGVycHJldGVyYCBhbmQgYGVudHJ5X29wZW5faW50ZXJwcmV0ZXJgIGFyZSBzdGF0aWMsIGFuZCBwcm9iYWJseSBpbmxpbmVkLCBzbyBsZXQncyBvbWl0IHRoZW0gdG9vLiBgYmluZm10X21pc2NfZmluZF9pbnRlcnBgIGlzIG5vbi1zdGF0aWMuIGBicGZfYmlucHJtX3NlbGVjdF9pbnRlcnBgIGlzIG5vbi1zdGF0aWMgKGEga2Z1bmMpLiBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCBpcyBhbHNvIG5vbi1zdGF0aWMgKGEga2Z1bmMpLlxuXG5QdXR0aW5nIGFsbCB0aGF0IHRvZ2V0aGVyLCBJIHRoaW5rIHRoZSBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYmU6XG5cbi0gYGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwYFxuLSBgYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwYFxuLSBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYFxuLSBgbG9hZF9taXNjX2JpbmFyeWBcbi0gYGJtX2VudHJ5X3dyaXRlYFxuLSBgYm1fcmVnaXN0ZXJfd3JpdGVgXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBsb2FkX21pc2NfYmluYXJ5YC4uLiBZZXMsIGBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlgIGluIGBmcy9iaW5mbXRfbWlzYy5jYCwgYW5kIGl0J3MgYXNzaWduZWQgdG8gYG1pc2NfZm9ybWF0LmxvYWRfYmluYXJ5YCwgc28gd2UncmUgZ29vZCB0aGVyZS5cblxuRG91YmxlLWNoZWNraW5nIGBibV9lbnRyeV93cml0ZWAgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAuLi4gQm90aCBhcmUgYHN0YXRpYyBzc2l6ZV90YCBmdW5jdGlvbnMsIGFuZCBib3RoIGFyZSBhc3NpZ25lZCB0byBgZmlsZV9vcGVyYXRpb25zLndyaXRlYC4gQ29uZmlybWVkLlxuXG5XaGF0IGFib3V0IGBiaW5mbXRfbWlzY19maW5kX2ludGVycGA/IFllcywgaXQncyBub24tc3RhdGljOiBgY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX2ludGVycCAqIGJpbmZtdF9taXNjX2ZpbmRfaW50ZXJwKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmludGVycHMsIGNvbnN0IGNoYXIgKm5hbWUpYC5cblxuYGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycGAgaXMgYWxzbyBub24tc3RhdGljOiBgX19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2VsZWN0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9fc3opYC5cblxuQW5kIGBicGZfYmlucHJtX3NldF9pbnRlcnBgPyBOb24tc3RhdGljIGFzIHdlbGw6IGBfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBwYXRoX19zeilgLlxuXG5TbywgdGhlIGBDb25maWdzYCBJJ20gaW5jbHVkaW5nIGFyZTpcblxuLSBgQklORk1UX01JU0NgXG4tIGBCSU5GTVRfTUlTQ19CUEZgXG5cbk15IHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggaW50ZWdyYXRlcyBCUEYgaGFuZGxlcnMgaW50byBgYmluZm10X21pc2NgLCBhbGxvd2luZyBpbnRlcnByZXRlcnMgdG8gYmUgYm91bmQgYW5kIHNlbGVjdGVkIGJ5IG5hbWUgYXQgYGV4ZWNgIHRpbWUuXG5cbiIsIklucHV0VG9rZW5zIjozNDg2MSwiT3V0cHV0VG9rZW5zIjoxOTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDI6NTY6NDMuOTM1NDc2MDU2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYwNDA0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDXCIsXG4gICAgXCJCSU5GTVRfTUlTQ19CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiaW5mbXRfbWlzY19maW5kX2ludGVycFwiLFxuICAgIFwiYnBmX2JpbnBybV9zZWxlY3RfaW50ZXJwXCIsXG4gICAgXCJicGZfYmlucHJtX3NldF9pbnRlcnBcIixcbiAgICBcImxvYWRfbWlzY19iaW5hcnlcIixcbiAgICBcImJtX2VudHJ5X3dyaXRlXCIsXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0byBiaW5mbXRfbWlzYyBhbGxvd2luZyBCUEYgaGFuZGxlcnMgdG8gYmluZCBpbnRlcnByZXRlcnMgdG8gYW4gZW50cnkgYW5kIHNlbGVjdCB0aGVtIGJ5IG5hbWUgYXQgZXhlYyB0aW1lLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGZzL2JpbmZtdF9taXNjLmMgYW5kIGZzL2JpbmZtdF9taXNjX2JwZi5jIGFuZCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGJpbmZtdF9taXNjIGNvbmZpZ3VyYXRpb24gYW5kIGV4ZWN1dGlvbiBvZiBtYXRjaGluZyBiaW5hcmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCSU5GTVRfTUlTQ1wiLFxuICAgIFwiQklORk1UX01JU0NfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmluZm10X21pc2NfZmluZF9pbnRlcnBcIixcbiAgICBcImJwZl9iaW5wcm1fc2VsZWN0X2ludGVycFwiLFxuICAgIFwiYnBmX2JpbnBybV9zZXRfaW50ZXJwXCIsXG4gICAgXCJsb2FkX21pc2NfYmluYXJ5XCIsXG4gICAgXCJibV9lbnRyeV93cml0ZVwiLFxuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gYmluZm10X21pc2MgYWxsb3dpbmcgQlBGIGhhbmRsZXJzIHRvIGJpbmQgaW50ZXJwcmV0ZXJzIHRvIGFuIGVudHJ5IGFuZCBzZWxlY3QgdGhlbSBieSBuYW1lIGF0IGV4ZWMgdGltZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBmcy9iaW5mbXRfbWlzYy5jIGFuZCBmcy9iaW5mbXRfbWlzY19icGYuYyBhbmQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBiaW5mbXRfbWlzYyBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRpb24gb2YgbWF0Y2hpbmcgYmluYXJpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rrt4[1] Phase: Succeeded StartedAt: 2026-08-01 02:56:55 +0000 UTC FinishedAt: 2026-08-01 02:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 02:56:55 +0000 UTC FinishedAt: 2026-08-01 02:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2] Phase: Running StartedAt: 2026-08-01 02:56:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-01 02:56:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 02:56:55 +0000 UTC FinishedAt: 2026-08-01 02:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 02:56:55 +0000 UTC FinishedAt: 2026-08-01 02:57:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6rrt4/series-workflow6rrt4-convert-artifact-964936266/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 02:57:05 +0000 UTC FinishedAt: 2026-08-01 03:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 02:57:05 +0000 UTC FinishedAt: 2026-08-01 03:15:20 +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:*bb7b0eff-1847-49ca-abc9-4bb4f4e80e95,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-workflow6rrt4/series-workflow6rrt4-convert-artifact-964936266/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": "1fb4caa6-29b5-4819-a985-272ab3eda49e", "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-workflow6rrt4/series-workflow6rrt4-build-action-1826118200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 02:57:05 +0000 UTC FinishedAt: 2026-08-01 03:15:10 +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:*bb7b0eff-1847-49ca-abc9-4bb4f4e80e95,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-workflow6rrt4/series-workflow6rrt4-convert-artifact-964936266/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": "1fb4caa6-29b5-4819-a985-272ab3eda49e", "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-workflow6rrt4/series-workflow6rrt4-build-action-1826118200/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 03:15:20 +0000 UTC FinishedAt: 2026-08-01 03:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 03:15:20 +0000 UTC FinishedAt: 2026-08-01 03:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 03:15:20 +0000 UTC FinishedAt: 2026-08-01 03:15:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 03:15:20 +0000 UTC FinishedAt: 2026-08-01 03:15:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6rrt4/series-workflow6rrt4-convert-artifact-2473263077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 03:15:30 +0000 UTC FinishedAt: 2026-08-01 03:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 03:15:30 +0000 UTC FinishedAt: 2026-08-01 03:17:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fb4caa6-29b5-4819-a985-272ab3eda49e,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-workflow6rrt4/series-workflow6rrt4-build-action-1826118200/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-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 03:17:10 +0000 UTC FinishedAt: 2026-08-01 03:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 03:17:10 +0000 UTC FinishedAt: 2026-08-01 03:17:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Running StartedAt: 2026-08-01 03:17:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Running StartedAt: 2026-08-01 03:17:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*bb7b0eff-1847-49ca-abc9-4bb4f4e80e95,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-workflow6rrt4/series-workflow6rrt4-convert-artifact-2473263077/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6rrt4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","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":["bpf","fs"],"focus_symbols":["binfmt_misc_find_interp","bpf_binprm_select_interp","bpf_binprm_set_interp","load_misc_binary","bm_entry_write","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4bdcf682a476e8d9f52b2c5c01e998d70e45656c","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC","BINFMT_MISC_BPF"],"series_id":"3f622d72-0b9a-4dda-8388-7a343af1f11e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Running StartedAt: 2026-08-01 03:17:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*bb7b0eff-1847-49ca-abc9-4bb4f4e80e95,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-workflow6rrt4/series-workflow6rrt4-convert-artifact-2473263077/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,}