Name: series-workflowbn8b6 Phase: Succeeded StartedAt: 2026-08-01 07:53:59 +0000 UTC FinishedAt: 2026-08-01 11:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[0] Phase: Succeeded StartedAt: 2026-08-01 07:53:59 +0000 UTC FinishedAt: 2026-08-01 07:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 07:53:59 +0000 UTC FinishedAt: 2026-08-01 07:57:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5c458073553f0ef74f5c8db1bd459c87c722a299", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "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": "5c458073553f0ef74f5c8db1bd459c87c722a299", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "tun_set_iff", "tun_queue_resize", "tun_attach", "tun_wake_queue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fc2V0X2lmZiYjMzQ7LAogICAgJiMzNDt0dW5fcXVldWVfcmVzaXplJiMzNDssCiAgICAmIzM0O3R1bl9hdHRhY2gmIzM0OywKICAgICYjMzQ7dHVuX3dha2VfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBJRkZfQkFDS1BSRVNTVVJFIGZsYWcgZm9yIFRVTi9UQVAgZGV2aWNlcywgd2hpY2ggbW9kaWZpZXMgdGhlIHF1ZXVlIGhhbmRsaW5nIGxvZ2ljIGluIHR1bl9uZXRfeG1pdCBhbmQgdmhvc3RfbmV0IHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHZpcnR1YWxpemF0aW9uIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUVU5TRVRJRkYgaW9jdGwgYW5kIG5ldHdvcmsgdHJhZmZpYywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFkNTIyOTM1NThhYjUyZDI5OTI2MTAzOTdjMjlkZGJjOGExMmQwYzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjU1OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbmluZGV4IDRkNzA4N2Y3MjdiZTUuLjA0MTU1ZWY5OGU1YmIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbkBAIC0yMDYsNiAmIzQzOzIwNiwyOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjpcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVx1MDAyNmlmcik7XG4gICB9XG4gXG4mIzQzOzMuNCBxZGlzYyBiYWNrcHJlc3N1cmVcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7SUZGX0JBQ0tQUkVTU1VSRSBjYW4gYmUgc2V0IHRvIGVuYWJsZSBxZGlzYyBiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYXG4mIzQzO2Ryb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwsIHNvIGFueSBhdHRhY2hlZCBxZGlzY1xuJiM0MztpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvblxuJiM0Mzt0aHJvdWdoIHRob3NlIGRyb3BzLlxuJiM0MztcbiYjNDM7V2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyBpbnN0ZWFkLCBsZXR0aW5nIHRoZSBxZGlzYyBob2xkIGFuZCBzY2hlZHVsZVxuJiM0MztwYWNrZXRzLCBzbyBpdHMgQVFNLCBzaGFwaW5nIGFuZCBmYWlybmVzcyBhY3R1YWxseSBhcHBseS4gVGhpcyBoZWxwc1xuJiM0Mztwcm90b2NvbHMgbGlrZSBUQ1AsIHdoaWNoIGN1dCB0aHJvdWdocHV0IGluIHJlYWN0aW9uIHRvIHBhY2tldCBkcm9wcy5cbiYjNDM7V2l0aCBJRkZfQkFDS1BSRVNTVVJFLCBkcm9wcyB0aGVuIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIEJhY2twcmVzc3VyZVxuJiM0MztyZXF1aXJlcyBhIHFkaXNjIHRvIGJlIGF0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGggbm9xdWV1ZS5cbiYjNDM7XG4mIzQzO1RoZSB0eHF1ZXVlbGVuIGNhbiBiZSByZWR1Y2VkIGFsb25nc2lkZSB0aGlzIGZsYWcgdG8gZnVydGhlciBzaGlmdFxuJiM0MztidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYnV0IGNvbWVzIGF0IHBvc3NpYmxlXG4mIzQzO3BlcmZvcm1hbmNlIGNvc3QuXG4mIzQzO1xuJiM0MztXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgbmV0d29yayBzdHJlYW1zIGluIHBhcmFsbGVsIHRocm91Z2ggYSBzaW5nbGVcbiYjNDM7VFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkXG4mIzQzO29mIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtLlxuJiM0MztcbiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCA1MWU4MDAwMGJkMGVkLi41YTkyN2JiYmRhMmY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5AQCAtOTgsNyAmIzQzOzk4LDggQEAgc3RhdGljIHZvaWQgdHVuX2RlZmF1bHRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAjZGVmaW5lIFRVTl9GQVNZTkNcdElGRl9BVFRBQ0hfUVVFVUVcbiBcbiAjZGVmaW5lIFRVTl9GRUFUVVJFUyAoSUZGX05PX1BJIHwgSUZGX09ORV9RVUVVRSB8IElGRl9WTkVUX0hEUiB8IFxcXG4tXHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MpXG4mIzQzO1x0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcbiYjNDM7XHRcdCAgICAgIElGRl9CQUNLUFJFU1NVUkUpXG4gXG4gI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4XG4gXG5AQCAtMTQ1LDYgJiM0MzsxNDYsOCBAQCBzdHJ1Y3QgdHVuX2ZpbGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBuZXh0O1xuIFx0c3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkO1xuIFx0c3RydWN0IHB0cl9yaW5nIHR4X3Jpbmc7XG4mIzQzO1x0LyogUHJvdGVjdGVkIGJ5IHR4X3JpbmcuY29uc3VtZXJfbG9jayAqL1xuJiM0MztcdGludCBjb25zX2NudDtcbiBcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcbiB9O1xuIFxuQEAgLTU4OCw4ICYjNDM7NTkxLDE2IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKVxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1tpbmRleF0sXG4gXHRcdFx0XHQgICB0dW4tXHUwMDNldGZpbGVzW3R1bi1cdTAwM2VudW1xdWV1ZXMgLSAxXSk7XG4gXHRcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpbmRleF0pO1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRudGZpbGUtXHUwMDNlcXVldWVfaW5kZXggPSBpbmRleDtcbiBcdFx0bnRmaWxlLVx1MDAzZXhkcF9yeHEucXVldWVfaW5kZXggPSBpbmRleDtcbiYjNDM7XHRcdG50ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4mIzQzO1x0XHQvKiBJZiB0aGUgcmluZyBpcyBub3QgZW1wdHksIHRoZSBjb25zdW1lciB3YWtlcyB0aGUgcXVldWVcbiYjNDM7XHRcdCAqIGFmdGVyIGNvbnN1bWluZyB0aGUgcmVtYWluaW5nIGVudHJpZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChfX3B0cl9yaW5nX2VtcHR5KFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nKSlcbiYjNDM7XHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCBpbmRleCk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbdHVuLVx1MDAzZW51bXF1ZXVlcyAtIDFdLFxuIFx0XHRcdFx0ICAgTlVMTCk7XG4gXG5AQCAtNjg3LDYgJiM0Mzs2OTgsMjAgQEAgc3RhdGljIHZvaWQgdHVuX2RldGFjaF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0LyogRW5zdXJlIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBub3Qgc3RvcCB0aGVcbiYjNDM7XHQgKiBxdWV1ZSBjb25jdXJyZW50bHkgYnkgdGFraW5nIGxvY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuJiM0MztcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgICAgICBib29sIHNraXBfZmlsdGVyLCBib29sIG5hcGksIGJvb2wgbmFwaV9mcmFncyxcbiBcdFx0ICAgICAgYm9vbCBwdWJsaXNoX3R1bilcbkBAIC03MzIsNiAmIzQzOzc1Nyw3IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4ID0gdHVuLVx1MDAzZW51bXF1ZXVlcztcbiBcdHRmaWxlLVx1MDAzZXNvY2tldC5zay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjY9IH5SQ1ZfU0hVVERPV047XG4mIzQzO1x0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG4gXG4gXHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpIHtcbiBcdFx0LyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi9cbkBAIC0xMDA4LDYgJiM0MzsxMDM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7XG4gXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuIFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHRmaWxlID0gcmN1X2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbdHhxXSk7XG5AQCAtMTA2MiwxMyAmIzQzOzEwODksMzQgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbi1cdGlmIChwdHJfcmluZ19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcsIHNrYikpIHtcbiYjNDM7XHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbiYjNDM7XHRpZiAoKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcbiYjNDM7XHRcdG5ldGlmX3R4X3N0b3BfcXVldWUocXVldWUpO1xuJiM0MztcdFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXG4mIzQzO1x0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuJiM0MztcdFx0aWYgKCFfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykpXG4mIzQzO1x0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHQvKiBUaGlzIHNob3VsZCBiZSBhIHJhcmUgY2FzZSBpZiBJRkZfQkFDS1BSRVNTVVJFIGlzIGVuYWJsZWQgYW5kXG4mIzQzO1x0XHQgKiBhIHFkaXNjIGlzIHByZXNlbnQsIGJ1dCBjYW4gaGFwcGVuIGR1ZSB0byBsbHR4LlxuJiM0MztcdFx0ICogU2luY2Ugc2tiX3R4X3RpbWVzdGFtcCgpLCBza2Jfb3JwaGFuKCksXG4mIzQzO1x0XHQgKiBydW5fZWJwZl9maWx0ZXIoKSBhbmQgcHNrYl90cmltKCkgY291bGQgaGF2ZSB0aW5rZXJlZFxuJiM0MztcdFx0ICogd2l0aCB0aGUgU0tCLCByZXR1cm5pbmcgTkVUREVWX1RYX0JVU1kgaXMgdW5zYWZlIGFuZFxuJiM0MztcdFx0ICogd2UgbXVzdCBkcm9wIGluc3RlYWQuXG4mIzQzO1x0XHQgKi9cbiBcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4gXHQvKiBkZXYtXHUwMDNlbGx0eCByZXF1aXJlcyB0byBkbyBvdXIgb3duIHVwZGF0ZSBvZiB0cmFuc19zdGFydCAqL1xuLVx0cXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTtcbiBcdHR4cV90cmFuc19jb25kX3VwZGF0ZShxdWV1ZSk7XG4gXG4gXHQvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi9cbkBAIC0yMTE2LDEzICYjNDM7MjE2NCw1MCBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbiBcdHJldHVybiB0b3RhbDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuJiM0MzsvKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cbiYjNDM7c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfQkFDS1BSRVNTVVJFKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXHUwMDNlZGV2LCB0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCk7XG4mIzQzO1xuJiM0MztcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbiYjNDM7XHRzbXBfbWIoKTtcbiYjNDM7XHRpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7XG4mIzQzO1x0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCAmIzQzOz0gY29uc3VtZWQ7XG4mIzQzO1x0XHRpZiAodGZpbGUtXHUwMDNlY29uc19jbnQgXHUwMDNlPSB0ZmlsZS1cdTAwM2V0eF9yaW5nLnNpemUgLyAyIHx8XG4mIzQzO1x0XHQgICAgX19wdHJfcmluZ19lbXB0eShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSkge1xuJiM0MztcdFx0XHRuZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7XG4mIzQzO1x0XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpwdHI7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuJiM0MztcdHB0ciA9IF9fcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbiYjNDM7XHRpZiAocHRyKVxuJiM0MztcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcHRyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuJiM0MztcdFx0XHQgICBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4ge1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4gXHR2b2lkICpwdHIgPSBOVUxMO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcbiBcdGlmIChwdHIpXG4gXHRcdGdvdG8gb3V0O1xuIFx0aWYgKG5vYmxvY2spIHtcbkBAIC0yMTM0LDcgJiM0MzsyMjE5LDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuIFxuIFx0d2hpbGUgKDEpIHtcbiBcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbi1cdFx0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbiYjNDM7XHRcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4gXHRcdGlmIChwdHIpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuQEAgLTIxNzEsNyAmIzQzOzIyNTYsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFxuIFx0aWYgKCFwdHIpIHtcbiBcdFx0LyogUmVhZCBmcmFtZXMgZnJvbSByaW5nICovXG4tXHRcdHB0ciA9IHR1bl9yaW5nX3JlY3YodGZpbGUsIG5vYmxvY2ssIFx1MDAyNmVycik7XG4mIzQzO1x0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssIFx1MDAyNmVycik7XG4gXHRcdGlmICghcHRyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMjcwNCw3ICYjNDM7Mjc4OSw3IEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuIFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IGVyciwgaTtcbiBcbiBcdGlmICh0ZmlsZS1cdTAwM2VkZXRhY2hlZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMjgzMyw4ICYjNDM7MjkxOCwxMiBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuIFx0LyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluXG4gXHQgKiB4b2ZmIHN0YXRlLlxuIFx0ICovXG4tXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSlcbi1cdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHR1bi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0dW4tXHUwMDNlbnVtcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4mIzQzO1x0XHRcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdHN0cnNjcHkoaWZyLVx1MDAzZWlmcl9uYW1lLCB0dW4tXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzYzMCw2ICYjNDM7MzcxOSwxMyBAQCBzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcbiBcdFx0XHRcdFx0ICBkZXYtXHUwMDNldHhfcXVldWVfbGVuLCBHRlBfS0VSTkVMLFxuIFx0XHRcdFx0XHQgIHR1bl9wdHJfZnJlZSk7XG4gXG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2ldKTtcbiYjNDM7XHRcdFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGtmcmVlKHJpbmdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM3MzgsNiAmIzQzOzM4MzQsMjkgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4gXG4mIzQzOy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuJiM0MztcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW47XG4mIzQzO1xuJiM0MztcdGlmIChmaWxlLVx1MDAzZWZfb3AgIT0gXHUwMDI2dHVuX2ZvcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHRmaWxlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0aWYgKCF0ZmlsZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcbiYjNDM7XHR0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtXHUwMDNldHVuKTtcbiYjNDM7XHRpZiAodHVuKVxuJiM0MztcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcbiYjNDM7XG4gbW9kdWxlX2luaXQodHVuX2luaXQpO1xuIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L25ldC5jIGIvZHJpdmVycy92aG9zdC9uZXQuY1xuaW5kZXggNjk0OWI3MDQxNjZkNS4uM2U3MmI5YzZhZjBjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbkBAIC0xNzYsMTMgJiM0MzsxNzYsMjEgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmaWxlO1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRyeHEtXHUwMDNlaGVhZCA9IDA7XG4tXHRyeHEtXHUwMDNldGFpbCA9IHB0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXHUwMDNlcnhfcmluZywgcnhxLVx1MDAzZXF1ZXVlLFxuLVx0XHRcdFx0XHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbiYjNDM7XHRyeHEtXHUwMDNldGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cdTAwM2VyeF9yaW5nLCByeHEtXHUwMDNlcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgVkhPU1RfTkVUX0JBVENIKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ4cS1cdTAwM2V0YWlsKVxuJiM0MztcdFx0dHVuX3dha2VfcXVldWUoZmlsZSwgcnhxLVx1MDAzZXRhaWwpO1xuJiM0MztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbiBcdHJldHVybiByeHEtXHUwMDNldGFpbDtcbiB9XG4gXG5AQCAtMjA5LDE0ICYjNDM7MjE3LDE1IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXG4gXHRyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gXHUwMDI2bnZxLVx1MDAzZXJ4cTtcbiBcbiBcdGlmICghdmhvc3RfbmV0X2J1Zl9pc19lbXB0eShyeHEpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKG52cSkpXG4mIzQzO1x0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc2ssIG52cSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIG91dDpcbkBAIC0xMDA0LDcgJiM0MzsxMDEzLDcgQEAgc3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAocnZxLVx1MDAzZXJ4X3JpbmcpXG4tXHRcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsocnZxKTtcbiYjNDM7XHRcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsoc2ssIHJ2cSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2ssIGZsYWdzKTtcbiBcdGhlYWQgPSBza2JfcGVlayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaFxuaW5kZXggODAxNjZlYjYyZjQxYy4uNWYzZTIwNmM3YTczNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwge1xuICNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XG4gc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpO1xuJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG5AQCAtNTUsNiAmIzQzOzU2LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG5pbmRleCBkMmMzNjI5YmJlNDUxLi5jOTVlODkxOTAzZjA1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbkBAIC05Niw2ICYjNDM7OTYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuJiM0MzsgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkoIXItXHUwMDNlc2l6ZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRhdGFfcmFjZShyLVx1MDAzZXF1ZXVlW3ItXHUwMDNlcHJvZHVjZXJdKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBOb3RlOiBjYWxsZXJzIGludm9raW5nIHRoaXMgaW4gYSBsb29wIG11c3QgdXNlIGEgY29tcGlsZXIgYmFycmllcixcbiAgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cbiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZFxuQEAgLTEwMyw4ICYjNDM7MTE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXG4ge1xuLVx0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpIHx8IGRhdGFfcmFjZShyLVx1MDAzZXF1ZXVlW3ItXHUwMDNlcHJvZHVjZXJdKSlcbi1cdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0aW50IHAgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XG4mIzQzO1xuJiM0MztcdGlmIChwKVxuJiM0MztcdFx0cmV0dXJuIHA7XG4gXG4gXHQvKiBNYWtlIHN1cmUgdGhlIHBvaW50ZXIgd2UgYXJlIHN0b3JpbmcgcG9pbnRzIHRvIGEgdmFsaWQgZGF0YS4gKi9cbiBcdC8qIFBhaXJzIHdpdGggdGhlIGRlcGVuZGVuY3kgb3JkZXJpbmcgaW4gX19wdHJfcmluZ19jb25zdW1lLiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggNzlkNTNjN2ExZWJkYy4uYTBkZGM1MGE3NTM0MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjksNiAmIzQzOzY5LDEwIEBAXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1x0MHgwMDIwXG4gLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi9cbiAjZGVmaW5lIElGRl9OT19DQVJSSUVSXHQweDAwNDBcbiYjNDM7LyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuXG4mIzQzOyAqIGF0dGFjaGVkIHFkaXNjIGFwcGxpZXMgYmFja3ByZXNzdXJlIGluc3RlYWQgb2YgYmVpbmcgYnlwYXNzZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcdDB4MDA4MFxuICNkZWZpbmUgSUZGX05PX1BJXHQweDEwMDBcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXHQweDIwMDBcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbmluZGV4IDJlYzA3ZGUxZDczYmUuLjJjODU1MjU3MDRjMTYgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuQEAgLTY3LDYgJiM0Mzs2NywxMCBAQFxuICNkZWZpbmUgSUZGX1RBUFx0XHQweDAwMDJcbiAjZGVmaW5lIElGRl9OQVBJXHQweDAwMTBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiYjNDM7LyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuXG4mIzQzOyAqIGF0dGFjaGVkIHFkaXNjIGFwcGxpZXMgYmFja3ByZXNzdXJlIGluc3RlYWQgb2YgYmVpbmcgYnlwYXNzZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcdDB4MDA4MFxuICNkZWZpbmUgSUZGX05PX1BJXHQweDEwMDBcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXHQweDIwMDBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDssCiAgICAmIzM0O3R1bl9xdWV1ZV9yZXNpemUmIzM0OywKICAgICYjMzQ7dHVuX2F0dGFjaCYjMzQ7LAogICAgJiMzNDt0dW5fd2FrZV9xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCB3aGljaCBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gdHVuX25ldF94bWl0IGFuZCB2aG9zdF9uZXQgdG8gc3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdmlydHVhbGl6YXRpb24gZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRVTlNFVElGRiBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWQ1MjI5MzU1OGFiNTJkMjk5MjYxMDM5N2MyOWRkYmM4YTEyZDBjNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDc6NTU6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0CmluZGV4IDRkNzA4N2Y3MjdiZTUuLjA0MTU1ZWY5OGU1YmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0CkBAIC0yMDYsNiAmIzQzOzIwNiwyOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjoKICAgICAgIHJldHVybiBpb2N0bChmZCwgVFVOU0VUUVVFVUUsICh2b2lkICopJmFtcDtpZnIpOwogICB9CiAKJiM0MzszLjQgcWRpc2MgYmFja3ByZXNzdXJlCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO0lGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2MgYmFja3ByZXNzdXJlLiBXaXRob3V0IGl0LCBUWAomIzQzO2Ryb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwsIHNvIGFueSBhdHRhY2hlZCBxZGlzYwomIzQzO2lzIGVmZmVjdGl2ZWx5IGJ5cGFzc2VkIGFuZCBhcHBsaWNhdGlvbnMgb25seSBsZWFybiBhYm91dCBjb25nZXN0aW9uCiYjNDM7dGhyb3VnaCB0aG9zZSBkcm9wcy4KJiM0MzsKJiM0MztXaXRoIGl0LCB0aGUga2VybmVsIHN0b3BzIGluc3RlYWQsIGxldHRpbmcgdGhlIHFkaXNjIGhvbGQgYW5kIHNjaGVkdWxlCiYjNDM7cGFja2V0cywgc28gaXRzIEFRTSwgc2hhcGluZyBhbmQgZmFpcm5lc3MgYWN0dWFsbHkgYXBwbHkuIFRoaXMgaGVscHMKJiM0Mztwcm90b2NvbHMgbGlrZSBUQ1AsIHdoaWNoIGN1dCB0aHJvdWdocHV0IGluIHJlYWN0aW9uIHRvIHBhY2tldCBkcm9wcy4KJiM0MztXaXRoIElGRl9CQUNLUFJFU1NVUkUsIGRyb3BzIHRoZW4gb25seSBvY2N1ciBhcyBhIHJhcmUgcmFjZS4gQmFja3ByZXNzdXJlCiYjNDM7cmVxdWlyZXMgYSBxZGlzYyB0byBiZSBhdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoIG5vcXVldWUuCiYjNDM7CiYjNDM7VGhlIHR4cXVldWVsZW4gY2FuIGJlIHJlZHVjZWQgYWxvbmdzaWRlIHRoaXMgZmxhZyB0byBmdXJ0aGVyIHNoaWZ0CiYjNDM7YnVmZmVyaW5nIGludG8gdGhlIHFkaXNjIGFuZCByZWR1Y2UgYnVmZmVyYmxvYXQsIGJ1dCBjb21lcyBhdCBwb3NzaWJsZQomIzQzO3BlcmZvcm1hbmNlIGNvc3QuCiYjNDM7CiYjNDM7V2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCB0aHJvdWdoIGEgc2luZ2xlCiYjNDM7VFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkCiYjNDM7b2YgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20uCiYjNDM7CiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDUxZTgwMDAwYmQwZWQuLjVhOTI3YmJiZGEyZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC05OCw3ICYjNDM7OTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogI2RlZmluZSBUVU5fRkFTWU5DCUlGRl9BVFRBQ0hfUVVFVUUKIAogI2RlZmluZSBUVU5fRkVBVFVSRVMgKElGRl9OT19QSSB8IElGRl9PTkVfUVVFVUUgfCBJRkZfVk5FVF9IRFIgfCBcCi0JCSAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MpCiYjNDM7CQkgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXAomIzQzOwkJICAgICAgSUZGX0JBQ0tQUkVTU1VSRSkKIAogI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4CiAKQEAgLTE0NSw2ICYjNDM7MTQ2LDggQEAgc3RydWN0IHR1bl9maWxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkOwogCXN0cnVjdCBwdHJfcmluZyB0eF9yaW5nOwomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovCiYjNDM7CWludCBjb25zX2NudDsKIAlzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7CiB9OwogCkBAIC01ODgsOCAmIzQzOzU5MSwxNiBAQCBzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbikKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHR1bi0mZ3Q7dGZpbGVzW2luZGV4XSwKIAkJCQkgICB0dW4tJmd0O3RmaWxlc1t0dW4tJmd0O251bXF1ZXVlcyAtIDFdKTsKIAkJbnRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tJmd0O3RmaWxlc1tpbmRleF0pOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCQludGZpbGUtJmd0O3F1ZXVlX2luZGV4ID0gaW5kZXg7CiAJCW50ZmlsZS0mZ3Q7eGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4OwomIzQzOwkJbnRmaWxlLSZndDtjb25zX2NudCA9IDA7CiYjNDM7CQkvKiBJZiB0aGUgcmluZyBpcyBub3QgZW1wdHksIHRoZSBjb25zdW1lciB3YWtlcyB0aGUgcXVldWUKJiM0MzsJCSAqIGFmdGVyIGNvbnN1bWluZyB0aGUgcmVtYWluaW5nIGVudHJpZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChfX3B0cl9yaW5nX2VtcHR5KCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nKSkKJiM0MzsJCQluZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi0mZ3Q7ZGV2LCBpbmRleCk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHR1bi0mZ3Q7dGZpbGVzW3R1bi0mZ3Q7bnVtcXVldWVzIC0gMV0sCiAJCQkJICAgTlVMTCk7CiAKQEAgLTY4Nyw2ICYjNDM7Njk4LDIwIEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdHVuX2ZvcmNlX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKJiM0MzsJCQkJIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpCiYjNDM7ewomIzQzOwkvKiBFbnN1cmUgdGhhdCB0aGUgcHJvZHVjZXIgY2FuIG5vdCBzdG9wIHRoZQomIzQzOwkgKiBxdWV1ZSBjb25jdXJyZW50bHkgYnkgdGFraW5nIGxvY2tzLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwomIzQzOwluZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi0mZ3Q7ZGV2LCB0ZmlsZS0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwl0ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgYm9vbCBza2lwX2ZpbHRlciwgYm9vbCBuYXBpLCBib29sIG5hcGlfZnJhZ3MsCiAJCSAgICAgIGJvb2wgcHVibGlzaF90dW4pCkBAIC03MzIsNiAmIzQzOzc1Nyw3IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCXRmaWxlLSZndDtxdWV1ZV9pbmRleCA9IHR1bi0mZ3Q7bnVtcXVldWVzOwogCXRmaWxlLSZndDtzb2NrZXQuc2stJmd0O3NrX3NodXRkb3duICZhbXA7PSB+UkNWX1NIVVRET1dOOwomIzQzOwl0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTsKIAogCWlmICh0ZmlsZS0mZ3Q7ZGV0YWNoZWQpIHsKIAkJLyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi8KQEAgLTEwMDgsNiAmIzQzOzEwMzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7CiAJc3RydWN0IHR1bl9maWxlICp0ZmlsZTsKIAlpbnQgbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWludCByZXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbdHhxXSk7CkBAIC0xMDYyLDEzICYjNDM7MTA4OSwzNCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZl9yZXNldF9jdChza2IpOwogCi0JaWYgKHB0cl9yaW5nX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZywgc2tiKSkgewomIzQzOwlxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJcmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcsIHNrYik7CiYjNDM7CWlmICgodHVuLSZndDtmbGFncyAmYW1wOyBJRkZfQkFDS1BSRVNTVVJFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpID09IC1FTk9TUEMpIHsKJiM0MzsJCW5ldGlmX3R4X3N0b3BfcXVldWUocXVldWUpOwomIzQzOwkJLyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovCiYjNDM7CQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwomIzQzOwkJaWYgKCFfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZykpCiYjNDM7CQkJbmV0aWZfdHhfd2FrZV9xdWV1ZShxdWV1ZSk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJLyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgSUZGX0JBQ0tQUkVTU1VSRSBpcyBlbmFibGVkIGFuZAomIzQzOwkJICogYSBxZGlzYyBpcyBwcmVzZW50LCBidXQgY2FuIGhhcHBlbiBkdWUgdG8gbGx0eC4KJiM0MzsJCSAqIFNpbmNlIHNrYl90eF90aW1lc3RhbXAoKSwgc2tiX29ycGhhbigpLAomIzQzOwkJICogcnVuX2VicGZfZmlsdGVyKCkgYW5kIHBza2JfdHJpbSgpIGNvdWxkIGhhdmUgdGlua2VyZWQKJiM0MzsJCSAqIHdpdGggdGhlIFNLQiwgcmV0dXJuaW5nIE5FVERFVl9UWF9CVVNZIGlzIHVuc2FmZSBhbmQKJiM0MzsJCSAqIHdlIG11c3QgZHJvcCBpbnN0ZWFkLgomIzQzOwkJICovCiAJCWRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZVTExfUklORzsKIAkJZ290byBkcm9wOwogCX0KIAogCS8qIGRldi0mZ3Q7bGx0eCByZXF1aXJlcyB0byBkbyBvdXIgb3duIHVwZGF0ZSBvZiB0cmFuc19zdGFydCAqLwotCXF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7CiAJdHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTsKIAogCS8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqLwpAQCAtMjExNiwxMyAmIzQzOzIxNjQsNTAgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCiAJcmV0dXJuIHRvdGFsOwogfQogCi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpCiYjNDM7LyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovCiYjNDM7c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAomIzQzOwkJCSAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwomIzQzOwomIzQzOwlpZiAoISh0dW4tJmd0O2ZsYWdzICZhbXA7IElGRl9CQUNLUFJFU1NVUkUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi0mZ3Q7ZGV2LCB0ZmlsZS0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwkvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovCiYjNDM7CXNtcF9tYigpOwomIzQzOwlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7CiYjNDM7CQl0ZmlsZS0mZ3Q7Y29uc19jbnQgJiM0Mzs9IGNvbnN1bWVkOwomIzQzOwkJaWYgKHRmaWxlLSZndDtjb25zX2NudCAmZ3Q7PSB0ZmlsZS0mZ3Q7dHhfcmluZy5zaXplIC8gMiB8fAomIzQzOwkJICAgIF9fcHRyX3JpbmdfZW1wdHkoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZykpIHsKJiM0MzsJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CiYjNDM7CQkJdGZpbGUtJmd0O2NvbnNfY250ID0gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKQomIzQzO3sKJiM0MzsJdm9pZCAqcHRyOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJcHRyID0gX19wdHJfcmluZ19jb25zdW1lKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpOwomIzQzOwlpZiAocHRyKQomIzQzOwkJX190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJcmV0dXJuIHB0cjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKJiM0MzsJCQkgICBpbnQgbm9ibG9jaywgaW50ICplcnIpCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJdm9pZCAqcHRyID0gTlVMTDsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcHRyID0gcHRyX3JpbmdfY29uc3VtZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKTsKJiM0MzsJcHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTsKIAlpZiAocHRyKQogCQlnb3RvIG91dDsKIAlpZiAobm9ibG9jaykgewpAQCAtMjEzNCw3ICYjNDM7MjIxOSw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycikKIAogCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZyk7CiYjNDM7CQlwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpOwogCQlpZiAocHRyKQogCQkJYnJlYWs7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtMjE3MSw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsCiAKIAlpZiAoIXB0cikgewogCQkvKiBSZWFkIGZyYW1lcyBmcm9tIHJpbmcgKi8KLQkJcHRyID0gdHVuX3JpbmdfcmVjdih0ZmlsZSwgbm9ibG9jaywgJmFtcDtlcnIpOwomIzQzOwkJcHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCAmYW1wO2Vycik7CiAJCWlmICghcHRyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yNzA0LDcgJiM0MzsyNzg5LDcgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgZXJyOwomIzQzOwlpbnQgZXJyLCBpOwogCiAJaWYgKHRmaWxlLSZndDtkZXRhY2hlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yODMzLDggJiM0MzsyOTE4LDEyIEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpCiAJLyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluCiAJICogeG9mZiBzdGF0ZS4KIAkgKi8KLQlpZiAobmV0aWZfcnVubmluZyh0dW4tJmd0O2RldikpCi0JCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tJmd0O2Rldik7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHR1bi0mZ3Q7ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHR1bi0mZ3Q7bnVtcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tJmd0O3RmaWxlc1tpXSk7CiYjNDM7CQkJdHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXN0cnNjcHkoaWZyLSZndDtpZnJfbmFtZSwgdHVuLSZndDtkZXYtJmd0O25hbWUpOwogCXJldHVybiAwOwpAQCAtMzYzMCw2ICYjNDM7MzcxOSwxMyBAQCBzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bikKIAkJCQkJICBkZXYtJmd0O3R4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCwKIAkJCQkJICB0dW5fcHRyX2ZyZWUpOwogCiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgdHVuLSZndDtudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi0mZ3Q7dGZpbGVzW2ldKTsKJiM0MzsJCQl0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWtmcmVlKHJpbmdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzczOCw2ICYjNDM7MzgzNCwyOSBAQCBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7CiAKJiM0MzsvKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi8KJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlOwomIzQzOwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwomIzQzOwomIzQzOwlpZiAoZmlsZS0mZ3Q7Zl9vcCAhPSAmYW1wO3R1bl9mb3BzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0ZmlsZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCF0ZmlsZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwl0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtJmd0O3R1bik7CiYjNDM7CWlmICh0dW4pCiYjNDM7CQlfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTsKJiM0MzsKIG1vZHVsZV9pbml0KHR1bl9pbml0KTsKIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggNjk0OWI3MDQxNjZkNS4uM2U3MmI5YzZhZjBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xNzYsMTMgJiM0MzsxNzYsMjEgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSkKIHsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGUgPSBzay0mZ3Q7c2tfc29ja2V0LSZndDtmaWxlOwogCXN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSAmYW1wO252cS0mZ3Q7cnhxOwogCiAJcnhxLSZndDtoZWFkID0gMDsKLQlyeHEtJmd0O3RhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLSZndDtyeF9yaW5nLCByeHEtJmd0O3F1ZXVlLAotCQkJCQkgICAgICBWSE9TVF9ORVRfQkFUQ0gpOwomIzQzOwlzcGluX2xvY2soJmFtcDtudnEtJmd0O3J4X3JpbmctJmd0O2NvbnN1bWVyX2xvY2spOwomIzQzOwlyeHEtJmd0O3RhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtJmd0O3J4X3JpbmcsIHJ4cS0mZ3Q7cXVldWUsCiYjNDM7CQkJCQkgICAgICAgVkhPU1RfTkVUX0JBVENIKTsKJiM0MzsKJiM0MzsJaWYgKHJ4cS0mZ3Q7dGFpbCkKJiM0MzsJCXR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS0mZ3Q7dGFpbCk7CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bnZxLSZndDtyeF9yaW5nLSZndDtjb25zdW1lcl9sb2NrKTsKIAlyZXR1cm4gcnhxLSZndDt0YWlsOwogfQogCkBAIC0yMDksMTQgJiM0MzsyMTcsMTUgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZvaWQgKnB0cikKIAlyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCSAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiB7CiAJc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9ICZhbXA7bnZxLSZndDtyeHE7CiAKIAlpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKQomIzQzOwlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSkKIAkJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTEwMDQsNyAmIzQzOzEwMTMsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocnZxLSZndDtyeF9yaW5nKQotCQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7CiYjNDM7CQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7CiAJaGVhZCA9IHNrYl9wZWVrKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKaW5kZXggODAxNjZlYjYyZjQxYy4uNWYzZTIwNmM3YTczNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC0yMiw2ICYjNDM7MjIsNyBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwgewogI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSkKIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopOwogc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpOwomIzQzO3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cikKIHsKQEAgLTU1LDYgJiM0Mzs1Niw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmYpCiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cikKIHsKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgKaW5kZXggZDJjMzYyOWJiZTQ1MS4uYzk1ZTg5MTkwM2YwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaApAQCAtOTYsNiAmIzQzOzk2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcikKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsCiYjNDM7ICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcikKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseSghci0mZ3Q7c2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGRhdGFfcmFjZShyLSZndDtxdWV1ZVtyLSZndDtwcm9kdWNlcl0pKQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLAogICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZApAQCAtMTAzLDggJiM0MzsxMTcsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKQogICovCiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpCiB7Ci0JaWYgKHVubGlrZWx5KCFyLSZndDtzaXplKSB8fCBkYXRhX3JhY2Uoci0mZ3Q7cXVldWVbci0mZ3Q7cHJvZHVjZXJdKSkKLQkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWludCBwID0gX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHIpOwomIzQzOwomIzQzOwlpZiAocCkKJiM0MzsJCXJldHVybiBwOwogCiAJLyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovCiAJLyogUGFpcnMgd2l0aCB0aGUgZGVwZW5kZW5jeSBvcmRlcmluZyBpbiBfX3B0cl9yaW5nX2NvbnN1bWUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKaW5kZXggNzlkNTNjN2ExZWJkYy4uYTBkZGM1MGE3NTM0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaApAQCAtNjksNiAmIzQzOzY5LDEwIEBACiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTCTB4MDAyMAogLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi8KICNkZWZpbmUgSUZGX05PX0NBUlJJRVIJMHgwMDQwCiYjNDM7LyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuCiYjNDM7ICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkUJMHgwMDgwCiAjZGVmaW5lIElGRl9OT19QSQkweDEwMDAKIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi8KICNkZWZpbmUgSUZGX09ORV9RVUVVRQkweDIwMDAKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaAppbmRleCAyZWMwN2RlMWQ3M2JlLi4yYzg1NTI1NzA0YzE2IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCkBAIC02Nyw2ICYjNDM7NjcsMTAgQEAKICNkZWZpbmUgSUZGX1RBUAkJMHgwMDAyCiAjZGVmaW5lIElGRl9OQVBJCTB4MDAxMAogI2RlZmluZSBJRkZfTkFQSV9GUkFHUwkweDAwMjAKJiM0MzsvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW4KJiM0MzsgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRQkweDAwODAKICNkZWZpbmUgSUZGX05PX1BJCTB4MTAwMAogLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqLwogI2RlZmluZSBJRkZfT05FX1FVRVVFCTB4MjAwMAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBUVU4vVEFQIGFuZCB2aG9zdF9uZXQgQmFja3ByZXNzdXJlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIFRVTi9UQVAgYW5kIHZob3N0X25ldCBkcml2ZXJzLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBzcGVjaWZpY2FsbHkgZm9yIFRVTi9UQVAgZGV2aWNlcy4gVGhlIGtleSB0aGluZyBpcyB0aGF0LCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBwYWNrZXQgZHJvcHBpbmcgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbCwgaXQmIzM5O2xsIHN0b3AgdGhlIHF1ZXVlIGFuZCBhbGxvdyB0aGUgYXR0YWNoZWQgcWRpc2MgdG8gbWFuYWdlIHRoZSBiYWNrcHJlc3N1cmUuIFRoYXQmIzM5O3MgYSBwcmV0dHkgaW50ZXJlc3RpbmcgY2hhbmdlIHRvIGhvdyB0aGVzZSBkcml2ZXJzIGJlaGF2ZSB1bmRlciBsb2FkLgoKTG9va3MgbGlrZSB0aGUgY2hhbmdlcyB0b3VjaCBhIGZhaXIgbnVtYmVyIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHNvbWUgaGVhZGVyIGZpbGVzIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLCBhbmQgZXZlbiB0aGUgVUFQSSBkZWZpbml0aW9ucy4gSSBjYW4gY29uZmlybSB0aGlzIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIGV4cG9zZWQgdGhyb3VnaCB0aGUgVFVOU0VUSUZGIGlvY3RsIG9uIGAvZGV2L25ldC90dW5gIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZCBmb3IgYWNjZXNzaWJpbGl0eS4gVGhleSYjMzk7dmUgYWxzbyBtb2RpZmllZCB0aGUgdmhvc3RfbmV0IGRyaXZlciB0byBoYW5kbGUgcXVldWUgd2FraW5nIHdoZW4gY29uc3VtaW5nIHBhY2tldHMgZnJvbSB0aGUgcmluZywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBvdmVyYWxsIGZsb3cuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGNvbnNpZGVyIGZ1enppbmc/IEdpdmVuIHRoYXQgaXQgbW9kaWZpZXMgY29yZSBUVU4vVEFQIGxvZ2ljIGFuZCB0aG9zZSBhcmUgaGlnaGx5IHJlYWNoYWJsZSB0YXJnZXRzLCAqZXNwZWNpYWxseSogZ2l2ZW4gaG93IGhlYXZpbHkgdGhleSYjMzk7cmUgZnV6emVkLCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUuIFRoZSBuZXcgYElGRl9CQUNLUFJFU1NVUkVgIGZsYWcgaXMgYWRkZWQgdG8gYFRVTl9GRUFUVVJFU2AsIHNvIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVlbiBwcm9wZXJseSBpbnRlZ3JhdGVkLiBJIHNlZSB0aGUgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIGFzIGB0dW5fbmV0X3htaXRgLCBgdHVuX3JpbmdfcmVjdmAsIGB0dW5fc2V0X2lmZmAsIGB0dW5fcXVldWVfcmVzaXplYCwgYHZob3N0X25ldF9idWZfcHJvZHVjZWAsIGFuZCBgdmhvc3RfbmV0X2J1Zl9wZWVrYCB3aGljaCBpcyBhIHN1YnN0YW50aWFsIGltcGFjdCBvbiB0aGUgY29yZSBsb2dpYyBhbmQgY3JpdGljYWwgYXJlYXMgZm9yIHRlc3RpbmcuIEkgYWxzbyBzZWUgbmV3IGZ1bmN0aW9ucyBsaWtlIGB0dW5fZm9yY2Vfd2FrZV9xdWV1ZWAsIGBfX3R1bl93YWtlX3F1ZXVlYCwgYHR1bl9yaW5nX2NvbnN1bWVgLCBhbmQgYHR1bl93YWtlX3F1ZXVlYCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzIGJlaW5nIGNoYW5nZWQuCgpUaW1lIHRvIGxvb2sgaW50byB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIHRvIHdvcmsuIE9idmlvdXNseSwgVFVOL1RBUCBpdHNlbGYgbmVlZHMgYENPTkZJR19UVU5gLCBhbmQgdmhvc3RfbmV0LCByZXF1aXJlcyBgQ09ORklHX1ZIT1NUX05FVGAuIExldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhvc2UgcmVxdWlyZW1lbnRzIGV4aXN0IGluIGBkcml2ZXJzL25ldC90dW4uY2AgYW5kIGBkcml2ZXJzL3Zob3N0L25ldC5jYCwgc28gSSBzaG91bGQgYmUgZ29vZCB0byBnby4KCkFscmlnaHQsIEkmIzM5O2xsIHVzZSB0aGUgZGVmYXVsdCBncmVwcGVyIHRvIHZlcmlmeSBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFZIT1NUX05FVCBJbnF1aXJ5KioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aG91Z2h0IHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gY2hlY2sgaW50byBgVkhPU1RfTkVUYC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IHdoZW4gdHJvdWJsZXNob290aW5nIHNvbWV0aGluZyBsaWtlIHRoaXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdGUgb2YgdGhhdCBzdWJzeXN0ZW0sIGl0IHVzdWFsbHkgaGFzIHNvbWUgdGVsbCB0YWxlIGxvZ3MgYW5kIGlzc3VlcyBpZiBub3QgY29uZmlndXJlZCBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdHMgcHJlc2VuY2UsIGNvbmZpZ3VyYXRpb24sIGFuZCBzdGF0dXMgb2YgYW55IGFzc29jaWF0ZWQgbmV0d29ya2luZyBjb21wb25lbnRzLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGZvciBhbnkgb2J2aW91cyBlcnJvciBtZXNzYWdlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIGl0LiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9ORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGUgZmllbGQ6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBWSE9TVF9ORVQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFZIT1NUX05FVCBtb2R1bGUsIGluc2lkZSBhbmQgb3V0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogd2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSBjYW4mIzM5O3QganVzdCBkaXZlIGluIHdpdGhvdXQga25vd2luZyB0aGUgZm91bmRhdGlvbiBpdCYjMzk7cyBidWlsdCBvbi4gSSBoYXZlIHRvIHRyYWNlIGV2ZXJ5dGhpbmcgYW5kIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igc3lzdGVtIGNvbXBvbmVudHMgdGhpcyBkZXBlbmRzIG9uLiBUaGlzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZywgb3B0aW1pemluZywgYW5kIGV2ZW4ganVzdCBmb3IgYXJjaGl0ZWN0aW5nIG15IGFwcHJvYWNoIHRvIHdoYXRldmVyIEkmIzM5O20gd29ya2luZyBvbi4gRGVwZW5kZW5jeSBkaXNjb3ZlcnkgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGdldHRpbmcgdGhlIGxheSBvZiB0aGUgbGFuZCwgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgZW5zdXJpbmcgcHJvcGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbm9uLW5lZ290aWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDtcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNjpcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBFVkVOVEZEIFx1MDAyNlx1MDAyNiAoVFVOIHx8ICFUVU4pIFx1MDAyNlx1MDAyNiAoVEFQIHx8ICFUQVApXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzctXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00OS1cdHNlbGVjdCBWSE9TVFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01Ny1cdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OS1cdHNlbGVjdCBWSE9TVFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz03MD1jb25maWcgVkhPU1RfVkRQQVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MjpcdGRlcGVuZHMgb24gRVZFTlRGRFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTczLVx0c2VsZWN0IFZIT1NUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzQtXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzU6XHRkZXBlbmRzIG9uIFZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03Ni1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBUVU5gIGFuZCBgVkhPU1RfTkVUYCBhcyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBXYWl0LCB3aGF0IGFib3V0IGBFVkVOVEZEYD8gSXQmIzM5O3MgdXN1YWxseSBlbmFibGVkLCBidXQganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgaW5jbHVkZSBpdCBpbiBteSB0aGlua2luZy4gTm93LCBhIHF1aWNrIGNoZWNr4oCmIHllcCwgYFZIT1NUX05FVGAgKmRvZXMqIGRlcGVuZCBvbiBib3RoIGBORVRgIGFuZCBgRVZFTlRGRGAuIEFuZCB3ZSBhbHJlYWR5IGtub3cgYE5FVGAgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgZ29vZC4KClJpZ2h0LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdGhlIHBhdGNoIGlzIHRvdWNoaW5nLiBJIHNlZSBpdCYjMzk7cyBtb2RpZnlpbmc6CgoqICAgYHR1bl9uZXRfeG1pdGAKKiAgIGB0dW5fcmluZ19yZWN2YCAod2l0aCBhIGNoYW5nZSBub3cgdGFraW5nIGB0dW5gIGFuZCBgdGZpbGVgKSAtIGJ1dCBpdCBpcyBzdGF0aWMKKiAgIGB0dW5fc2V0X2lmZmAgLSB3aGljaCBpcyBzdGF0aWMsIGJ1dCByZWFjaGFibGUgdmlhIGB0dW5fY2hyX2lvY3RsYC4KKiAgIGB0dW5fcXVldWVfcmVzaXplYCAtIHRoaXMgaXMgYWxzbyBzdGF0aWMsIHJlYWNoYWJsZSB2aWEgYHR1bl9jaHJfaW9jdGxgLgoqICAgYHR1bl93YWtlX3F1ZXVlYCAtIGFoYSwgdGhpcyBvbmUmIzM5O3MgYW4gZXhwb3J0ZWQgc3ltYm9sIQoqICAgYHZob3N0X25ldF9idWZfcHJvZHVjZWAgLSB3aGljaCBpcyBzdGF0aWMKKiAgIGB2aG9zdF9uZXRfYnVmX3BlZWtgIC0gYW5kIHRoaXMgb25lIGlzIGFsc28gc3RhdGljCgpPa2F5LCBzbyB0aGUgbW9zdCBpbXBvcnRhbnQgYXJlYXMgdG8gZm9jdXMgb24gc2VlbSB0byBiZToKCiogICBgdHVuX25ldF94bWl0YCDigJMgYWx3YXlzIGltcG9ydGFudCBpbiBuZXR3b3JrIGRyaXZlcnMKKiAgIGB0dW5fd2FrZV9xdWV1ZWAg4oCTIGNyaXRpY2FsIGJlY2F1c2UgaXQmIzM5O3MgZXhwb3J0ZWQsIGFuZCB0aGVyZWZvcmUgaGFzIGV4dGVybmFsIGRlcGVuZGVuY2llcy4KKiAgIGB0dW5fY2hyX2lvY3RsYCDigJMgYmVjYXVzZSBpdCB0b3VjaGVzIGJvdGggYHR1bl9zZXRfaWZmYCBhbmQgYHR1bl9xdWV1ZV9yZXNpemVgCiogICBBbmQgZmluYWxseSwgSSBuZWVkIHRvIGxvb2sgaW50byBgdmhvc3QvbmV0LmNgLCBiZWNhdXNlIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIGNoYW5nZSB0byB0aGUgYHZob3N0X25ldGAgaW9jdGxzIGFuZCBvcGVuIG9yIHJlbGVhc2UgZnVuY3Rpb25zLiBXYWl0IC0gaXQgbG9va3MgbGlrZSBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBjYWxsZWQgYnkgYHZob3N0X25ldF9idWZfcGVla2AuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgY2FsbGVkIGJ5IGBwZWVrX2hlYWRfbGVuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgc29tZXRoaW5nIGxpa2UgYGhhbmRsZV9yeGAgaW4gYHZob3N0L25ldC5jYC4KCk9rYXksIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgcGVla19oZWFkX2xlbmAgaXMgdXNlZC4gVGltZSB0byBkaXZlIGludG8gYHZob3N0L25ldC5jYCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVla19oZWFkX2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz05ODM9c3RhdGljIHZvaWQgaGFuZGxlX3R4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMDgtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDk6c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAxMC17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDI5LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDMwOnN0YXRpYyBpbnQgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMzEtXHRcdFx0XHQgICAgICBib29sICpidXN5bG9vcF9pbnRyLCB1bnNpZ25lZCBpbnQgKmNvdW50KVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzNi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR2cSA9IFx1MDAyNnRudnEtXHUwMDNldnE7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMzc6XHRpbnQgbGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMzgtXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDQ1LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDQ2Olx0XHRsZW4gPSBwZWVrX2hlYWRfbGVuKHJudnEsIHNrKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTA0Ny1cdH1cbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTExNDk9c3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEyMDEtXHRkbyB7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjEyMDI6XHRcdHNvY2tfbGVuID0gdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4obmV0LCBzb2NrLVx1MDAzZXNrLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjAzLVx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmJ1c3lsb29wX2ludHIsIFx1MDAyNmNvdW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBWaG9zdCBSWCBQcm9jZXNzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCBvZiBpbmNvbWluZyBwYWNrZXRzIGluIHRoaXMgdmhvc3Qgc2V0dXAuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJlY2VpdmUgcGF0aCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgZnJvbSB0aGUgZ3Vlc3QgVk0gZ2V0cyBpbnRvIHRoZSBob3N0LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYGhhbmRsZV9yeGAgaW4gYHZob3N0L25ldC5jYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiBmb3IgdGhlIFJYIHNpZGUuIE5vdywgYSBzbGlnaHQgd3JpbmtsZS4uLiBgaGFuZGxlX3J4YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCBhbmQgbGlrZWx5ICpub3QqIGRpcmVjdGx5IGV4cG9zZWQgdG8sIHNheSwgYW4gaW50ZXJydXB0IGhhbmRsZXIuIEl0JiMzOTtzIHByb2JhYmx5IGJlaW5nIGludm9rZWQgYnkgc29tZSB3b3JrZXIgdGhyZWFkIG9yIHNpbWlsYXIgbWVjaGFuaXNtLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiBpdCYjMzk7cyBnZXR0aW5nIGNhbGxlZC4KCk9rYXksIGxldCYjMzk7cyBiYWNrdHJhY2sgYSBiaXQuIFRoZSB0eXBpY2FsIHZob3N0IHNldHVwIGludm9sdmVzIGlvY3RscyBmb3IgY29uZmlndXJhdGlvbi4gQ291bGQgaXQgYmUgdHJpZ2dlcmVkIGJ5IGB2aG9zdF9uZXRfaW9jdGxgIG9yIG1heWJlIGB2aG9zdF9uZXRfY2hyX3dyaXRlYD8gTm8sIEkmIzM5O20gcHJldHR5IHN1cmUgYHZob3N0X25ldF9pb2N0bGAgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIHNldHRpbmcgdXAgdGhlIGJhY2tlbmQsIGNvbmZpZ3VyaW5nIG1lbW9yeSByZWdpb25zLCBhbmQgdGhpbmdzIGxpa2UgdGhhdCwgbm90IG5lY2Vzc2FyaWx5IGZvciBkaXJlY3QgcGFja2V0IGluamVjdGlvbi4gU28sIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlIGd1ZXN0JiMzOTtzIGRhdGEgaXMgcHVzaGVkIGludG8gdGhlIGhvc3QuCgpBbHJpZ2h0LCBhIGxpa2VseSBjYW5kaWRhdGUgaGVyZSBpcyB0aGUgVFVOIGRldmljZS4gTGV0IG1lIGNoZWNrIHRoZSBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSXQmIzM5O3MgcG9zc2libGUgdGhlIHNldHVwIGludm9sdmVzIHNvbWUgc29ydCBvZiBpb2N0bCBjYWxsIHRvIHNlbmQgdGhlIGRhdGEgaW50byB0aGUgbmV0d29yayBzdGFjay4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0zMTAxPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTM4LVxuZHJpdmVycy9uZXQvdHVuLmM6MzEzOTpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25ldC90dW4uYy0zMTQwLVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMjE1LVxuZHJpdmVycy9uZXQvdHVuLmM6MzIxNjpcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O3R1bl9jaHJfaW9jdGwgY21kICV1XFxuXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzIxNy1cbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDMyLVxuZHJpdmVycy9uZXQvdHVuLmM6MzQzMzpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQzNC1cdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtMzQzNS17XG5kcml2ZXJzL25ldC90dW4uYzozNDM2Olx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM0MzctfVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0NDA9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ2My1cdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzQ2NDpcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XG5kcml2ZXJzL25ldC90dW4uYy0zNDY1LX1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM1NjYtXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG5kcml2ZXJzL25ldC90dW4uYzozNTY3Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHR1bl9jaHJfaW9jdGwsXG5kcml2ZXJzL25ldC90dW4uYy0zNTY4LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBUVU4vVkhPU1QgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIG15IGZvY3VzIG5lZWRzIHRvIGJlIGxhc2VyLXNoYXJwIGhlcmUuIEl0IGxvb2tzIGxpa2UgYHR1bl9jaHJfaW9jdGxgIGlzIHRoZSBjZW50cmFsIElPQ1RMIGhhbmRsZXIgaW4gdGhpcyB3aG9sZSBUVU4gc2V0dXAuIEtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBmZXcgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDogYHR1bl9uZXRfeG1pdGAsIHdoaWNoIGhhbmRsZXMgdGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uOyBgdHVuX2Nocl9pb2N0bGAsIG9mIGNvdXJzZSwgaXMgYSBjb250cm9sIHBsYW5lIGVudHJ5cG9pbnQuIGB0dW5fd2FrZV9xdWV1ZWAgYW5kIGZpbmFsbHkgYHZob3N0X25ldF9pb2N0bGAgd2hpY2ggaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGluZ3MgaW50ZWdyYXRlIHdpdGggdmhvc3QuCgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB2aG9zdF9uZXRfaW9jdGxgIGFuZCBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoZXJlIHRoYXQgaXMgZGVmaW5lZC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayB3b3VsZCBiZSBpbiB0aGUgYGRyaXZlcnMvdmhvc3QvbmV0LmNgIGZpbGUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTcyNj1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNzQ2LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxNzQ3OnN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xNzQ4LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgwLVx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfbmV0X2Nocl9wb2xsLFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODgxOlx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3RfbmV0X2lvY3RsLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgyLVx0LmNvbXBhdF9pb2N0bCAgID0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRVTiBEZXZpY2UgQmFja3ByZXNzdXJlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZywgd2hpY2ggaXMgZW5hYmxlZCB1c2luZyB0aGUgYFRVTlNFVElGRmAgaW9jdGwuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgd2hlbiB0aGlzIGZsYWcgaXMgYWN0aXZlLCB0aGUgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24gd2lsbCBub3cgYWN0aXZlbHkgaGFsdCB0aGUgdHJhbnNtaXNzaW9uIHF1ZXVlIGlmIHRoZSByaW5nIGJ1ZmZlciBmaWxscyB1cC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS4KCk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoaXMgaGFsdGVkIHF1ZXVlIGdldHMgcmVzdGFydGVkLiBUaGUgbG9naWMgaGluZ2VzIG9uIHR3byBrZXkgZnVuY3Rpb25zLiBGaXJzdCwgYHZob3N0X25ldGAsIHdoZW4gaXQgY29uc3VtZXMgcGFja2V0cyBmcm9tIHRoZSBUVU4gZGV2aWNlLCBpcyBnb2luZyB0byBjYWxsIGB0dW5fd2FrZV9xdWV1ZWAuICBTZWNvbmQsIGB0dW5fZG9fcmVhZGAsIHdoaWNoIGFsc28gY29uc3VtZXMgcGFja2V0cywgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBgdHVuX3dha2VfcXVldWVgLiAgSSBrbm93IGB0dW5fZG9fcmVhZGAgaXMgY2FsbGVkIGZyb20gYHR1bl9jaHJfcmVhZF9pdGVyYCwgc28gdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBhY3R1YWxseSBwdWxsZWQgZnJvbSB0aGUgZGV2aWNlLiBMZXQgbWUgZHJpbGwgZG93biBpbnRvIGB0dW5fY2hyX3JlYWRfaXRlcmAgYW5kIGl0cyBjYWxsIHRvIGB0dW5fZG9fcmVhZGAgYW5kIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfcmVhZF9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjI0NT1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIyODEtXG5kcml2ZXJzL25ldC90dW4uYzoyMjgyOnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmRyaXZlcnMvbmV0L3R1bi5jLTIyODMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM1NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XG5kcml2ZXJzL25ldC90dW4uYy0zNTYzLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvdHVuLmM6MzU2NDpcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYy0zNTY1LVx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUVU4vVkhPU1QgSG90IFBhdGhzIGZvciBTeW1ib2xpYyBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgYW5hbHlzaXMgb2YgdGhlIFRVTi9WSE9TVCBjb2RlLiBgdHVuX2Nocl9yZWFkX2l0ZXJgIGlzIHRoZSByZWFkIGhhbmRsZXIsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgb24gbXkgbGlzdC4gVGhlIGluc3RydWN0aW9ucyBzdWdnZXN0IEkgYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gZ2V0IGEgbW9yZSBmb2N1c2VkIGFuYWx5c2lzLgoKVGhlIGxpc3QgSSBoYWQgaW5pdGlhbGx5IHdhczogYHR1bl9uZXRfeG1pdGAsIGB0dW5fY2hyX2lvY3RsYCwgYHR1bl9jaHJfcmVhZF9pdGVyYCwgYHR1bl93YWtlX3F1ZXVlYCwgYW5kIGB2aG9zdF9uZXRfaW9jdGxgLgoKSG9sZCBvbiwgYHR1bl9uZXRfeG1pdGAgaXMgKmRlZmluaXRlbHkqIGEgaG90IHBhdGggZnVuY3Rpb24uIEl04oCZcyBlc3NlbnRpYWxseSB0aGUgYG5kb19zdGFydF94bWl0YCBmb3IgVFVOIGRldmljZXMuIEkgbmVlZCB0byBhdm9pZCB0aG9zZSwgcmlnaHQ/IEFuZCBgdHVuX2Nocl9yZWFkX2l0ZXJgIGlzIGFsc28gYSBob3QgcGF0aCBiZWNhdXNlLCB3ZWxsLCBpdCYjMzk7cyB0aGUgcmVhZCBoYW5kbGVyLiBEJiMzOTtvaCEKCk5vdywgYHR1bl93YWtlX3F1ZXVlYCBpcyBjYWxsZWQgZXZlcnkgdGltZSBhIHBhY2tldCBpcyBjb25zdW1lZCBpZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQuIEl0ICppcyogZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIEJ1dC4uLiBpcyBpdCBhIGhvdCBwYXRoPyBJdCYjMzk7cyBjYWxsZWQgd2hlbiBjb25zdW1pbmcgcGFja2V0cy4gSSBuZWVkIHRvIGZpZ3VyZSB0aGF0IG91dC4gSGFuZyBvbiwgd2FpdCwgYHR1bl93YWtlX3F1ZXVlYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGByeHEtJmd0O3RhaWxgIGlzIG5vbi16ZXJvIGluIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgLiBUaGF0IG1ha2VzIGEgZGlmZmVyZW5jZS4gSXMgKnRoYXQqIGEgaG90IHBhdGg/IE1vcmUgaW52ZXN0aWdhdGlvbiBpcyByZXF1aXJlZC4KCkxldCYjMzk7cyBsb29rIGF0IGB0dW5fc2V0X2lmZmAgdGhlbi4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyBnb29kLCBidXQgaXMgaXQgYSBob3QgcGF0aD8gTm8sIG5vdCByZWFsbHkuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX3R1bl9jaHJfaW9jdGxgLCB3aGljaCBpcyBhbiBpb2N0bCBoYW5kbGVyLiBJcyBgX190dW5fY2hyX2lvY3RsYCBhIGhvdCBwYXRoPyBOby4gV2hhdCBhYm91dCBgdHVuX3F1ZXVlX3Jlc2l6ZWA/IFRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fdHVuX2Nocl9pb2N0bGAgd2hlbiBgVFVOU0VUUVVFVUVgIGlzIGNhbGxlZC4gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgaG90IHBhdGggZWl0aGVyLiBPa2F5LCBsZXQmIzM5O3Mga2VlcCBnb2luZy4gYHZob3N0X25ldF9pb2N0bGAgaXNuJiMzOTt0IGEgaG90IHBhdGggZWl0aGVyLgoKTm93LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGB0dW5fc2V0X2lmZmAgaXMgaW5saW5lZC4gSXQmIzM5O3MgcXVpdGUgbGFyZ2UsIHNvIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGlubGluZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHNpemUgdG8gYmUgc3VyZSwgdGhvdWdoLiBSaWdodCwgSSBuZWVkIHRvIGdldCBzb21lIG1vcmUgZGF0YSBvbiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fc2V0X2lmZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTI3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjc4Ni1cbmRyaXZlcnMvbmV0L3R1bi5jOjI3ODc6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbmRyaXZlcnMvbmV0L3R1bi5jLTI3ODgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTMxMzk9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMxODYtXG5kcml2ZXJzL25ldC90dW4uYzozMTg3Olx0XHRyZXQgPSB0dW5fc2V0X2lmZihuZXQsIGZpbGUsIFx1MDAyNmlmcik7XG5kcml2ZXJzL25ldC90dW4uYy0zMTg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2V5IFN5bWJvbHMgaW4gdGhlIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBwYXRjaC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGB0dW5fc2V0X2lmZmAganVtcHMgb3V0LiBJdCYjMzk7cyBub3QgaW5saW5lZCwgYW5kIGl0IHNwYW5zIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgY29kZSAobGluZXMgMjc4NyB0byByb3VnaGx5IDMxMDApLiBUaGF0IG1ha2VzIGl0IGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gYHR1bl9xdWV1ZV9yZXNpemVgIGFsc28gbG9va3MgcHJvbWlzaW5nIGZvciBzaW1pbGFyIHJlYXNvbnMuCgpOb3csIGB0dW5fd2FrZV9xdWV1ZWAuLi4gaXQmIzM5O3MgZXhwb3J0ZWQsIHNvIGRlZmluaXRlbHkgbm90IGlubGluZWQuIEl0JiMzOTtzIGNvcmUgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgaW50cm9kdWNlZCBieSB0aGUgbmV3IGZlYXR1cmUsIHNvIGl0IHNlZW1zIGxpa2UgYSBnb29kIGNob2ljZSBkZXNwaXRlIHRoZSBpbnN0cnVjdGlvbiB0byAmIzM0O0F2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuJiMzNDsgVGhlIGNhdmVhdCBiZWluZyB0aGF0IGB0dW5fd2FrZV9xdWV1ZWAgaXMsIGluIGZhY3QsIHNwZWNpZmljIHRvIHRoaXMgbmV3IGZlYXR1cmUuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGZlYXR1cmUsIGFuZCBub3Qgc2ltcGx5IGFuIG9wdGltaXphdGlvbiwgaXQgc2VlbXMganVzdGlmaWFibGUgdG8gaW5jbHVkZSBpdC4KCkluaXRpYWxseSwgSSBjb25zaWRlcmVkIGB2aG9zdF9uZXRfaW9jdGxgLCBidXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhY3R1YWxseSB0b3VjaCBpdC4gSXQgZG9lcywgaG93ZXZlciwgbW9kaWZ5IGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGFuZCBgdmhvc3RfbmV0X2J1Zl9wZWVrYC4gSG1tLCBhcmUgdGhlc2UgaG90LXBhdGggZnVuY3Rpb25zPyBZZXMsIGFzIHRoZXkmIzM5O3JlIGludm9sdmVkIGluIGV2ZXJ5IHBhY2tldCB3aXRoaW4gYGhhbmRsZV9yeGAuIFNvLCBJJiMzOTtsbCBhdm9pZCBsaXN0aW5nIHRob3NlLCBhcyBzdWdnZXN0ZWQuCgpTbyBmYXIsIG15IGxpc3QgbG9va3MgbGlrZSB0aGlzOgoKKiAgIGB0dW5fc2V0X2lmZmAKKiAgIGB0dW5fcXVldWVfcmVzaXplYAoqICAgYHR1bl93YWtlX3F1ZXVlYAoKT2theSwgYmVmb3JlIEkgZmluYWxpemUsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHR1bl93YWtlX3F1ZXVlYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHZob3N0X25ldF9idWZfcHJvZHVjZWAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB2aG9zdF9uZXRfYnVmX3BlZWtgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgcGVla19oZWFkX2xlbmAsIHdoaWNoIGlzIHVsdGltYXRlbHkgY2FsbGVkIGZyb20gYGhhbmRsZV9yeGAgaW4gYSBsb29wLiBZZXAsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBob3QtcGF0aCBmdW5jdGlvbi4gQnV0LCB3YWl0LCBJIGtlZXAgY29taW5nIGJhY2sgdG8gdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0aGUgcHJpbWFyeSBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24uIEl0JiMzOTtzIHJlYXNvbmFibGUgdG8gaW5jbHVkZSBpdC4KCkZpbmFsbHksIEkgc2hvdWxkIGluY2x1ZGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHVzZXIgaW50ZXJmYWNlLiBMZXQmIzM5O3MgYWRkIGVpdGhlciBgX190dW5fY2hyX2lvY3RsYCBvciBgdHVuX2Nocl9pb2N0bGAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHR1bl9xdWV1ZV9yZXNpemVgIG1ha2VzIHNlbnNlLiBSaWdodCwgYWxsIHNlZW1zIGdvb2QuCgoqKkZpbmFsIExpc3QqKgoKT2theSwgaGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6CgoqICAgYHR1bl9zZXRfaWZmYAoqICAgYHR1bl9xdWV1ZV9yZXNpemVgCiogICBgdHVuX3dha2VfcXVldWVgCiogICBgdHVuX2Nocl9pb2N0bGAgKG9yIGBfX3R1bl9jaHJfaW9jdGxgKQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fcXVldWVfcmVzaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MzY4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHR1bl9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjk4LVxuZHJpdmVycy9uZXQvdHVuLmM6MzY5OTpzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MDAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM3MzM9c3RhdGljIGludCB0dW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM3NDQtXHRjYXNlIE5FVERFVl9DSEFOR0VfVFhfUVVFVUVfTEVOOlxuZHJpdmVycy9uZXQvdHVuLmM6Mzc0NTpcdFx0aWYgKHR1bl9xdWV1ZV9yZXNpemUodHVuKSlcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NDYtXHRcdFx0cmV0dXJuIE5PVElGWV9CQUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdHVuX3F1ZXVlX3Jlc2l6ZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYE5FVERFVl9DSEFOR0VfVFhfUVVFVUVfTEVOYCBldmVudCwgd2hpY2ggdHJpZ2dlcnMgYSBjYWxsIHRvIGB0dW5fcXVldWVfcmVzaXplYC4gVGhlIGdvb2QgbmV3cyBpcywgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgaXNuJiMzOTt0IGluIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aCDigJMgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGVzcyBwcmVzc3VyZSBvbiBvcHRpbWl6YXRpb24gdGhlcmUsIHRob3VnaCB3ZSBzdGlsbCB3YW50IHRvIGVuc3VyZSBpdOKAmXMgZG9uZSBjb3JyZWN0bHkuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdHVuX2ZvcmNlX3dha2VfcXVldWVgLiBJdCYjMzk7cyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIGN1cmlvdXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBxdWV1ZSBsZW5ndGggY2hhbmdlLiBXb25kZXJpbmcgaWYgdGhpcyBpcyBhYm91dCBlbnN1cmluZyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSByZWZsZWN0ZWQgb24gdGhlIGhhcmR3YXJlIGxheWVyLiBPciBpZiBpdCBpcyBzb21lIHNvcnQgb2YgYW4gb3B0aW1pemF0aW9uIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fZm9yY2Vfd2FrZV9xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTY1Nz1zdGF0aWMgdm9pZCB0dW5fZGV0YWNoX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTcwMC1cbmRyaXZlcnMvbmV0L3R1bi5jOjcwMTpzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuZHJpdmVycy9uZXQvdHVuLmMtNzAyLVx0XHRcdFx0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9NzE1PXN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy03NTktXHR0ZmlsZS1cdTAwM2Vzb2NrZXQuc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xuZHJpdmVycy9uZXQvdHVuLmM6NzYwOlx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG5kcml2ZXJzL25ldC90dW4uYy03NjEtXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9Mjc4Nz1zdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI5MjMtXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuZHJpdmVycy9uZXQvdHVuLmM6MjkyNDpcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTI5MjUtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjk5PXN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM3MjQtXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuZHJpdmVycy9uZXQvdHVuLmM6MzcyNTpcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MjYtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxODIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBjb2RlIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHR1bl9mb3JjZV93YWtlX3F1ZXVlYCoqCgpSaWdodCwgc28gYHR1bl9mb3JjZV93YWtlX3F1ZXVlYCBpcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLiBUaGUgY29tcGlsZXIgKm1pZ2h0KiBpbmxpbmUgaXQgaW4gZWFjaCBjYWxsIHNpdGUsIHdoaWNoIHdvdWxkIG1ha2UgdHJhY2luZyBpdHMgZXhlY3V0aW9uIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQuIEJ1dCwgc2luY2UgaXQmIzM5O3MgdXNlZCBpbiBhIGZldyBkaWZmZXJlbnQgcGxhY2VzIOKAkyBgdHVuX2F0dGFjaGAsIGB0dW5fc2V0X2lmZmAsIGFuZCBgdHVuX3F1ZXVlX3Jlc2l6ZWAg4oCTIGlubGluaW5nIGlzbiYjMzk7dCBndWFyYW50ZWVkLCBhbmQgaG9uZXN0bHksIHRoZSBjb21waWxlciBtaWdodCBub3QgZXZlbiBvcHRpbWl6ZSBpdCB0aGF0IHdheS4gSW4gYW55IGNhc2UsIGl0JiMzOTtzIHNhZmVyIGFuZCBjbGVhcmVyIHRvIGp1c3QgbGlzdCB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZGlyZWN0bHksIHNvIEkmIzM5O2xsIGtlZXAgdHJhY2sgb2YgdGhvc2U6IGB0dW5fYXR0YWNoYCwgYHR1bl9zZXRfaWZmYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYC4KCk5vdywgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdHVuX2F0dGFjaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTcwMT1zdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTcxNC1cbmRyaXZlcnMvbmV0L3R1bi5jOjcxNTpzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG5kcml2ZXJzL25ldC90dW4uYy03MTYtXHRcdCAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTkzNz1zdGF0aWMgaW50IHR1bl9uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTk2NS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnR1bi1cdTAwM2VkaXNhYmxlZCk7XG5kcml2ZXJzL25ldC90dW4uYzo5NjY6XHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgdHVuLVx1MDAzZWZpbGUsIGZhbHNlLCBpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTkFQSSxcbmRyaXZlcnMvbmV0L3R1bi5jLTk2Ny1cdFx0XHQgaWZyLVx1MDAzZWlmcl9mbGFncyBcdTAwMjYgSUZGX05BUElfRlJBR1MsIGZhbHNlKTtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yNzg3PXN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjgyNi1cbmRyaXZlcnMvbmV0L3R1bi5jOjI4Mjc6XHRcdGVyciA9IHR1bl9hdHRhY2godHVuLCBmaWxlLCBpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTk9GSUxURVIsXG5kcml2ZXJzL25ldC90dW4uYy0yODI4LVx0XHRcdFx0IGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9OQVBJLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTI5OTg9c3RhdGljIHZvaWQgdHVuX2RldGFjaF9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgaW50IG4pXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzAxMi1cbmRyaXZlcnMvbmV0L3R1bi5jOjMwMTM6c3RhdGljIGludCB0dW5fYXR0YWNoX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtMzAxNC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzA0ND1zdGF0aWMgaW50IHR1bl9zZXRfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMwNjAtXHRcdFx0Z290byB1bmxvY2s7XG5kcml2ZXJzL25ldC90dW4uYzozMDYxOlx0XHRyZXQgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSwgZmFsc2UsIHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX05BUEksXG5kcml2ZXJzL25ldC90dW4uYy0zMDYyLVx0XHRcdFx0IHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX05BUElfRlJBR1MsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTMxMzk9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzItXG5kcml2ZXJzL25ldC90dW4uYzozMzczOlx0XHRyZXQgPSB0dW5fYXR0YWNoX2ZpbHRlcih0dW4pO1xuZHJpdmVycy9uZXQvdHVuLmMtMzM3NC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTg4CgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDQyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGB0dW5fYXR0YWNoYCBzZWVtcyBsaWtlIGFub3RoZXIgZ29vZCBmdW5jdGlvbiB0byBrZWVwIGFuIGV5ZSBvbi4gTGV0JiMzOTtzIGxpc3QgdGhlIGtleSBmb2N1cyBzeW1ib2xzOiBgdHVuX3NldF9pZmZgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGB0dW5fYXR0YWNoYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBUaGUgcGF0Y2ggYWx0ZXJzIGBkcml2ZXJzL3Zob3N0L25ldC5jYCwgc28gYENPTkZJR19WSE9TVF9ORVRgIGlzIHJlbGV2YW50LiBBbHNvLCBzaW5jZSBpdCYjMzk7cyBhIFRVTi9UQVAgbW9kaWZpY2F0aW9uLCBgQ09ORklHX1RVTmAgaXMgZGVmaW5pdGVseSBpbnZvbHZlZC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBJZiBgQ09ORklHX1ZIT1NUX05FVGAgaXMgdGhlIG9ubHkgY29uZmlnIG5lZWRlZD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBkZXBlbmRlbmN5LiBgQ09ORklHX1ZIT1NUX05FVGAgZGVwZW5kcyBvbiBgTkVUICZhbXA7JmFtcDsgRVZFTlRGRCAmYW1wOyZhbXA7IChUVU4gfHwgIVRVTikgJmFtcDsmYW1wOyAoVEFQIHx8ICFUQVApYC4gU28sIHllcywgYm90aCBgQ09ORklHX1ZIT1NUX05FVGAgYW5kIGBDT05GSUdfVFVOYCBhcmUgcmVxdWlyZWQuCgpBbHJpZ2h0LCB0aW1lIHRvIHN5bnRoZXNpemUgbXkgY29uY2x1c2lvbnMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLiBXaGVuIGVuYWJsZWQsIGl0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgdGhlIHF1ZXVlcyBiZWhhdmUgaW4gYHR1bl9uZXRfeG1pdGAgYW5kIGB2aG9zdF9uZXRgIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwg4oCTIGl0IHN0b3BzIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMsIGVuYWJsaW5nIHRoZSBhdHRhY2hlZCBxZGlzYyB0byBhcHBseSBiYWNrcHJlc3N1cmUuIFRoaXMgYWZmZWN0cyBjb3JlIFRVTi9UQVAgbG9naWMgYW5kIHRoZSB2aG9zdF9uZXQgZHJpdmVyLiBCZWNhdXNlIHRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHVzZXItcmVhY2hhYmxlIHZpYSBpb2N0bHMgYW5kIG5ldHdvcmsgdHJhZmZpYywgaXQmIzM5O3MgYWJzb2x1dGVseSByaXBlIGZvciBmdXp6aW5nLgoKTXkgZmluYWwgZGV0ZXJtaW5hdGlvbiBpczoKCldvcnRoRnV6emluZzogdHJ1ZQpGb2N1c1N5bWJvbHM6IGB0dW5fc2V0X2lmZmAsIGB0dW5fcXVldWVfcmVzaXplYCwgYHR1bl9hdHRhY2hgLCBgdHVuX3dha2VfcXVldWVgCkVuYWJsZUNvbmZpZ3M6IGBUVU5gLCBgVkhPU1RfTkVUYApSZWFzb25pbmc6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBJRkZfQkFDS1BSRVNTVVJFYCBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMuIFdoZW4gZW5hYmxlZCwgdGhpcyBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gYHR1bl9uZXRfeG1pdGAgYW5kIGB2aG9zdF9uZXRgIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHZpcnR1YWxpemF0aW9uIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBgVFVOU0VUSUZGYCBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDssCiAgICAmIzM0O3R1bl9xdWV1ZV9yZXNpemUmIzM0OywKICAgICYjMzQ7dHVuX2F0dGFjaCYjMzQ7LAogICAgJiMzNDt0dW5fd2FrZV9xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCB3aGljaCBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gdHVuX25ldF94bWl0IGFuZCB2aG9zdF9uZXQgdG8gc3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdmlydHVhbGl6YXRpb24gZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRVTlNFVElGRiBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX3NldF9pZmYmIzM0OywKICAgICYjMzQ7dHVuX3F1ZXVlX3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDt0dW5fYXR0YWNoJiMzNDssCiAgICAmIzM0O3R1bl93YWtlX3F1ZXVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIHdoaWNoIG1vZGlmaWVzIHRoZSBxdWV1ZSBoYW5kbGluZyBsb2dpYyBpbiB0dW5fbmV0X3htaXQgYW5kIHZob3N0X25ldCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBkcml2ZXJzIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVFVOU0VUSUZGIGlvY3RsIGFuZCBuZXR3b3JrIHRyYWZmaWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NTo1MS44MTI4MzU4NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY0OTg2NzE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlZIT1NUX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fcXVldWVfcmVzaXplXCIsXG4gICAgXCJ0dW5fYXR0YWNoXCIsXG4gICAgXCJ0dW5fd2FrZV9xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIHdoaWNoIG1vZGlmaWVzIHRoZSBxdWV1ZSBoYW5kbGluZyBsb2dpYyBpbiB0dW5fbmV0X3htaXQgYW5kIHZob3N0X25ldCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBkcml2ZXJzIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVFVOU0VUSUZGIGlvY3RsIGFuZCBuZXR3b3JrIHRyYWZmaWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU1OjUxLjgxMjk4MzI0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3NDYyOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWQ1MjI5MzU1OGFiNTJkMjk5MjYxMDM5N2MyOWRkYmM4YTEyZDBjNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjU1OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG5pbmRleCA0ZDcwODdmNzI3YmU1Li4wNDE1NWVmOThlNWJiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG5AQCAtMjA2LDYgKzIwNiwyOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjpcXG4gICAgICAgcmV0dXJuIGlvY3RsKGZkLCBUVU5TRVRRVUVVRSwgKHZvaWQgKilcXHUwMDI2aWZyKTtcXG4gICB9XFxuIFxcbiszLjQgcWRpc2MgYmFja3ByZXNzdXJlXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK0lGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2MgYmFja3ByZXNzdXJlLiBXaXRob3V0IGl0LCBUWFxcbitkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLCBzbyBhbnkgYXR0YWNoZWQgcWRpc2NcXG4raXMgZWZmZWN0aXZlbHkgYnlwYXNzZWQgYW5kIGFwcGxpY2F0aW9ucyBvbmx5IGxlYXJuIGFib3V0IGNvbmdlc3Rpb25cXG4rdGhyb3VnaCB0aG9zZSBkcm9wcy5cXG4rXFxuK1dpdGggaXQsIHRoZSBrZXJuZWwgc3RvcHMgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MgaG9sZCBhbmQgc2NoZWR1bGVcXG4rcGFja2V0cywgc28gaXRzIEFRTSwgc2hhcGluZyBhbmQgZmFpcm5lc3MgYWN0dWFsbHkgYXBwbHkuIFRoaXMgaGVscHNcXG4rcHJvdG9jb2xzIGxpa2UgVENQLCB3aGljaCBjdXQgdGhyb3VnaHB1dCBpbiByZWFjdGlvbiB0byBwYWNrZXQgZHJvcHMuXFxuK1dpdGggSUZGX0JBQ0tQUkVTU1VSRSwgZHJvcHMgdGhlbiBvbmx5IG9jY3VyIGFzIGEgcmFyZSByYWNlLiBCYWNrcHJlc3N1cmVcXG4rcmVxdWlyZXMgYSBxZGlzYyB0byBiZSBhdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoIG5vcXVldWUuXFxuK1xcbitUaGUgdHhxdWV1ZWxlbiBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvIGZ1cnRoZXIgc2hpZnRcXG4rYnVmZmVyaW5nIGludG8gdGhlIHFkaXNjIGFuZCByZWR1Y2UgYnVmZmVyYmxvYXQsIGJ1dCBjb21lcyBhdCBwb3NzaWJsZVxcbitwZXJmb3JtYW5jZSBjb3N0LlxcbitcXG4rV2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCB0aHJvdWdoIGEgc2luZ2xlXFxuK1RVTi9UQVAgcXVldWUsIHRoZSBmbGFnIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZFxcbitvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS5cXG4rXFxuIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvblxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5pbmRleCA1MWU4MDAwMGJkMGVkLi41YTkyN2JiYmRhMmY3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXFxuKysrIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5AQCAtOTgsNyArOTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAjZGVmaW5lIFRVTl9GQVNZTkNcXHRJRkZfQVRUQUNIX1FVRVVFXFxuIFxcbiAjZGVmaW5lIFRVTl9GRUFUVVJFUyAoSUZGX05PX1BJIHwgSUZGX09ORV9RVUVVRSB8IElGRl9WTkVUX0hEUiB8IFxcXFxcXG4tXFx0XFx0ICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUylcXG4rXFx0XFx0ICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUyB8IFxcXFxcXG4rXFx0XFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcXG4gXFxuICNkZWZpbmUgR09PRENPUFlfTEVOIDEyOFxcbiBcXG5AQCAtMTQ1LDYgKzE0Niw4IEBAIHN0cnVjdCB0dW5fZmlsZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbmV4dDtcXG4gXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkO1xcbiBcXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcXG4rXFx0LyogUHJvdGVjdGVkIGJ5IHR4X3JpbmcuY29uc3VtZXJfbG9jayAqL1xcbitcXHRpbnQgY29uc19jbnQ7XFxuIFxcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcXG4gfTtcXG4gXFxuQEAgLTU4OCw4ICs1OTEsMTYgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXFx1MDAzZXRmaWxlc1tpbmRleF0sXFxuIFxcdFxcdFxcdFxcdCAgIHR1bi1cXHUwMDNldGZpbGVzW3R1bi1cXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xcbiBcXHRcXHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2luZGV4XSk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHRcXHRudGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4ID0gaW5kZXg7XFxuIFxcdFxcdG50ZmlsZS1cXHUwMDNleGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4O1xcbitcXHRcXHRudGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0XFx0LyogSWYgdGhlIHJpbmcgaXMgbm90IGVtcHR5LCB0aGUgY29uc3VtZXIgd2FrZXMgdGhlIHF1ZXVlXFxuK1xcdFxcdCAqIGFmdGVyIGNvbnN1bWluZyB0aGUgcmVtYWluaW5nIGVudHJpZXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoX19wdHJfcmluZ19lbXB0eShcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nKSlcXG4rXFx0XFx0XFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXFx1MDAzZWRldiwgaW5kZXgpO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVxcdTAwM2V0ZmlsZXNbdHVuLVxcdTAwM2VudW1xdWV1ZXMgLSAxXSxcXG4gXFx0XFx0XFx0XFx0ICAgTlVMTCk7XFxuIFxcbkBAIC02ODcsNiArNjk4LDIwIEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4re1xcbitcXHQvKiBFbnN1cmUgdGhhdCB0aGUgcHJvZHVjZXIgY2FuIG5vdCBzdG9wIHRoZVxcbitcXHQgKiBxdWV1ZSBjb25jdXJyZW50bHkgYnkgdGFraW5nIGxvY2tzLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXFx1MDAzZWRldiwgdGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4rXFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0ICAgICAgYm9vbCBza2lwX2ZpbHRlciwgYm9vbCBuYXBpLCBib29sIG5hcGlfZnJhZ3MsXFxuIFxcdFxcdCAgICAgIGJvb2wgcHVibGlzaF90dW4pXFxuQEAgLTczMiw2ICs3NTcsNyBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcbiBcXHR0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXggPSB0dW4tXFx1MDAzZW51bXF1ZXVlcztcXG4gXFx0dGZpbGUtXFx1MDAzZXNvY2tldC5zay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNj0gflJDVl9TSFVURE9XTjtcXG4rXFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuIFxcbiBcXHRpZiAodGZpbGUtXFx1MDAzZWRldGFjaGVkKSB7XFxuIFxcdFxcdC8qIFJlLWF0dGFjaCBkZXRhY2hlZCB0ZmlsZSwgdXBkYXRpbmcgWERQIHF1ZXVlX2luZGV4ICovXFxuQEAgLTEwMDgsNiArMTAzNCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7XFxuIFxcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XFxuIFxcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0dGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbdHhxXSk7XFxuQEAgLTEwNjIsMTMgKzEwODksMzQgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gXFxuLVxcdGlmIChwdHJfcmluZ19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZywgc2tiKSkge1xcbitcXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZywgc2tiKTtcXG4rXFx0aWYgKCh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xcbitcXHRcXHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcXG4rXFx0XFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXFxuK1xcdFxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuK1xcdFxcdGlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykpXFxuK1xcdFxcdFxcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0LyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgSUZGX0JBQ0tQUkVTU1VSRSBpcyBlbmFibGVkIGFuZFxcbitcXHRcXHQgKiBhIHFkaXNjIGlzIHByZXNlbnQsIGJ1dCBjYW4gaGFwcGVuIGR1ZSB0byBsbHR4LlxcbitcXHRcXHQgKiBTaW5jZSBza2JfdHhfdGltZXN0YW1wKCksIHNrYl9vcnBoYW4oKSxcXG4rXFx0XFx0ICogcnVuX2VicGZfZmlsdGVyKCkgYW5kIHBza2JfdHJpbSgpIGNvdWxkIGhhdmUgdGlua2VyZWRcXG4rXFx0XFx0ICogd2l0aCB0aGUgU0tCLCByZXR1cm5pbmcgTkVUREVWX1RYX0JVU1kgaXMgdW5zYWZlIGFuZFxcbitcXHRcXHQgKiB3ZSBtdXN0IGRyb3AgaW5zdGVhZC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZVTExfUklORztcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBkZXYtXFx1MDAzZWxsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi9cXG4tXFx0cXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTtcXG4gXFx0dHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTtcXG4gXFxuIFxcdC8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqL1xcbkBAIC0yMTE2LDEzICsyMTY0LDUwIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbiBcXHRyZXR1cm4gdG90YWw7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycilcXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXFxuK3N0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbitcXG4rXFx0aWYgKCEodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cXHUwMDNlZGV2LCB0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbitcXG4rXFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xcbitcXHRzbXBfbWIoKTtcXG4rXFx0aWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkge1xcbitcXHRcXHR0ZmlsZS1cXHUwMDNlY29uc19jbnQgKz0gY29uc3VtZWQ7XFxuK1xcdFxcdGlmICh0ZmlsZS1cXHUwMDNlY29uc19jbnQgXFx1MDAzZT0gdGZpbGUtXFx1MDAzZXR4X3Jpbmcuc2l6ZSAvIDIgfHxcXG4rXFx0XFx0ICAgIF9fcHRyX3JpbmdfZW1wdHkoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nKSkge1xcbitcXHRcXHRcXHRuZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7XFxuK1xcdFxcdFxcdHRmaWxlLVxcdTAwM2Vjb25zX2NudCA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxcbit7XFxuK1xcdHZvaWQgKnB0cjtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdHB0ciA9IF9fcHRyX3JpbmdfY29uc3VtZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpO1xcbitcXHRpZiAocHRyKVxcbitcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbitcXHRyZXR1cm4gcHRyO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbitcXHRcXHRcXHQgICBpbnQgbm9ibG9jaywgaW50ICplcnIpXFxuIHtcXG4gXFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XFxuIFxcdHZvaWQgKnB0ciA9IE5VTEw7XFxuIFxcdGludCBlcnJvciA9IDA7XFxuIFxcbi1cXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZyk7XFxuK1xcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XFxuIFxcdGlmIChwdHIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRpZiAobm9ibG9jaykge1xcbkBAIC0yMTM0LDcgKzIyMTksNyBAQCBzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXFxuIFxcbiBcXHR3aGlsZSAoMSkge1xcbiBcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbi1cXHRcXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZyk7XFxuK1xcdFxcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XFxuIFxcdFxcdGlmIChwdHIpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG5AQCAtMjE3MSw3ICsyMjU2LDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4gXFxuIFxcdGlmICghcHRyKSB7XFxuIFxcdFxcdC8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqL1xcbi1cXHRcXHRwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCBcXHUwMDI2ZXJyKTtcXG4rXFx0XFx0cHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCBcXHUwMDI2ZXJyKTtcXG4gXFx0XFx0aWYgKCFwdHIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5AQCAtMjcwNCw3ICsyNzg5LDcgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4gXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcXG4gXFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4tXFx0aW50IGVycjtcXG4rXFx0aW50IGVyciwgaTtcXG4gXFxuIFxcdGlmICh0ZmlsZS1cXHUwMDNlZGV0YWNoZWQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0yODMzLDggKzI5MTgsMTIgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4gXFx0LyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluXFxuIFxcdCAqIHhvZmYgc3RhdGUuXFxuIFxcdCAqL1xcbi1cXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXFx1MDAzZWRldikpXFxuLVxcdFxcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tXFx1MDAzZWRldik7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cXHUwMDNlZGV2KSkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHVuLVxcdTAwM2VudW1xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRcXHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbitcXHRcXHRcXHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRzdHJzY3B5KGlmci1cXHUwMDNlaWZyX25hbWUsIHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTM2MzAsNiArMzcxOSwxMyBAQCBzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG4gXFx0XFx0XFx0XFx0XFx0ICBkZXYtXFx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICB0dW5fcHRyX2ZyZWUpO1xcbiBcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0XFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG4rXFx0XFx0XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0a2ZyZWUocmluZ3MpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTM3MzgsNiArMzgzNCwyOSBAQCBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3R4X3JpbmcpO1xcbiBcXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXFxuK3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZClcXG4re1xcbitcXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xcbitcXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xcbitcXG4rXFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AgIT0gXFx1MDAyNnR1bl9mb3BzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0ZmlsZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0aWYgKCF0ZmlsZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0dHVuID0gcmN1X2RlcmVmZXJlbmNlKHRmaWxlLVxcdTAwM2V0dW4pO1xcbitcXHRpZiAodHVuKVxcbitcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcXG4rXFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcXG4rXFxuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcXG4gbW9kdWxlX2V4aXQodHVuX2NsZWFudXApO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG5pbmRleCA2OTQ5YjcwNDE2NmQ1Li4zZTcyYjljNmFmMGNhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jXFxuQEAgLTE3NiwxMyArMTc2LDIxIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4ge1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZpbGU7XFxuIFxcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcXHUwMDI2bnZxLVxcdTAwM2VyeHE7XFxuIFxcbiBcXHRyeHEtXFx1MDAzZWhlYWQgPSAwO1xcbi1cXHRyeHEtXFx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVxcdTAwM2VyeF9yaW5nLCByeHEtXFx1MDAzZXF1ZXVlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm52cS1cXHUwMDNlcnhfcmluZy1cXHUwMDNlY29uc3VtZXJfbG9jayk7XFxuK1xcdHJ4cS1cXHUwMDNldGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cXHUwMDNlcnhfcmluZywgcnhxLVxcdTAwM2VxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XFxuK1xcbitcXHRpZiAocnhxLVxcdTAwM2V0YWlsKVxcbitcXHRcXHR0dW5fd2FrZV9xdWV1ZShmaWxlLCByeHEtXFx1MDAzZXRhaWwpO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm52cS1cXHUwMDNlcnhfcmluZy1cXHUwMDNlY29uc3VtZXJfbG9jayk7XFxuIFxcdHJldHVybiByeHEtXFx1MDAzZXRhaWw7XFxuIH1cXG4gXFxuQEAgLTIwOSwxNCArMjE3LDE1IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXFxuIFxcdHJldHVybiBfX3NrYl9hcnJheV9sZW5fd2l0aF90YWcocHRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxcbiB7XFxuIFxcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcXHUwMDI2bnZxLVxcdTAwM2VyeHE7XFxuIFxcbiBcXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxcbitcXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBvdXQ6XFxuQEAgLTEwMDQsNyArMTAxMyw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAocnZxLVxcdTAwM2VyeF9yaW5nKVxcbi1cXHRcXHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7XFxuK1xcdFxcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsoc2ssIHJ2cSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jaywgZmxhZ3MpO1xcbiBcXHRoZWFkID0gc2tiX3BlZWsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcXG5pbmRleCA4MDE2NmViNjJmNDFjLi41ZjNlMjA2YzdhNzM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTIyLDYgKzIyLDcgQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcXG4gI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSlcXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XFxuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4rdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcXG4ge1xcbkBAIC01NSw2ICs1Niw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmYpXFxuIFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxcbmluZGV4IGQyYzM2MjliYmU0NTEuLmM5NWU4OTE5MDNmMDUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXFxuQEAgLTk2LDYgKzk2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsXFxuKyAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcilcXG4re1xcbitcXHRpZiAodW5saWtlbHkoIXItXFx1MDAzZXNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChkYXRhX3JhY2Uoci1cXHUwMDNlcXVldWVbci1cXHUwMDNlcHJvZHVjZXJdKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsXFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxcbiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZFxcbkBAIC0xMDMsOCArMTE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcXG4ge1xcbi1cXHRpZiAodW5saWtlbHkoIXItXFx1MDAzZXNpemUpIHx8IGRhdGFfcmFjZShyLVxcdTAwM2VxdWV1ZVtyLVxcdTAwM2Vwcm9kdWNlcl0pKVxcbi1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFx0aW50IHAgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XFxuK1xcbitcXHRpZiAocClcXG4rXFx0XFx0cmV0dXJuIHA7XFxuIFxcbiBcXHQvKiBNYWtlIHN1cmUgdGhlIHBvaW50ZXIgd2UgYXJlIHN0b3JpbmcgcG9pbnRzIHRvIGEgdmFsaWQgZGF0YS4gKi9cXG4gXFx0LyogUGFpcnMgd2l0aCB0aGUgZGVwZW5kZW5jeSBvcmRlcmluZyBpbiBfX3B0cl9yaW5nX2NvbnN1bWUuICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbmluZGV4IDc5ZDUzYzdhMWViZGMuLmEwZGRjNTBhNzUzNDIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTY5LDYgKzY5LDEwIEBAXFxuICNkZWZpbmUgSUZGX05BUElfRlJBR1NcXHQweDAwMjBcXG4gLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi9cXG4gI2RlZmluZSBJRkZfTk9fQ0FSUklFUlxcdDB4MDA0MFxcbisvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cXG4rICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cXG4rICovXFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVxcdDB4MDA4MFxcbiAjZGVmaW5lIElGRl9OT19QSVxcdDB4MTAwMFxcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXFxuICNkZWZpbmUgSUZGX09ORV9RVUVVRVxcdDB4MjAwMFxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5pbmRleCAyZWMwN2RlMWQ3M2JlLi4yYzg1NTI1NzA0YzE2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbkBAIC02Nyw2ICs2NywxMCBAQFxcbiAjZGVmaW5lIElGRl9UQVBcXHRcXHQweDAwMDJcXG4gI2RlZmluZSBJRkZfTkFQSVxcdDB4MDAxMFxcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXFx0MHgwMDIwXFxuKy8qIFN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBpcyBmdWxsLCBzbyBhblxcbisgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLlxcbisgKi9cXG4rI2RlZmluZSBJRkZfQkFDS1BSRVNTVVJFXFx0MHgwMDgwXFxuICNkZWZpbmUgSUZGX05PX1BJXFx0MHgxMDAwXFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXFx0MHgyMDAwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU1OjUyLjM2MTk0MzY5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4MTAwNzQ1MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVkhPU1RfTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9pZmZcIixcbiAgICBcInR1bl9xdWV1ZV9yZXNpemVcIixcbiAgICBcInR1bl9hdHRhY2hcIixcbiAgICBcInR1bl93YWtlX3F1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBJRkZfQkFDS1BSRVNTVVJFIGZsYWcgZm9yIFRVTi9UQVAgZGV2aWNlcywgd2hpY2ggbW9kaWZpZXMgdGhlIHF1ZXVlIGhhbmRsaW5nIGxvZ2ljIGluIHR1bl9uZXRfeG1pdCBhbmQgdmhvc3RfbmV0IHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHZpcnR1YWxpemF0aW9uIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUVU5TRVRJRkYgaW9jdGwgYW5kIG5ldHdvcmsgdHJhZmZpYywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQ1MjI5MzU1OGFiNTJkMjk5MjYxMDM5N2MyOWRkYmM4YTEyZDBjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDc6NTU6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG5pbmRleCA0ZDcwODdmNzI3YmU1Li4wNDE1NWVmOThlNWJiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG5AQCAtMjA2LDYgKzIwNiwyOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjpcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVx1MDAyNmlmcik7XG4gICB9XG4gXG4rMy40IHFkaXNjIGJhY2twcmVzc3VyZVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitJRkZfQkFDS1BSRVNTVVJFIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHFkaXNjIGJhY2twcmVzc3VyZS4gV2l0aG91dCBpdCwgVFhcbitkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLCBzbyBhbnkgYXR0YWNoZWQgcWRpc2NcbitpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvblxuK3Rocm91Z2ggdGhvc2UgZHJvcHMuXG4rXG4rV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyBpbnN0ZWFkLCBsZXR0aW5nIHRoZSBxZGlzYyBob2xkIGFuZCBzY2hlZHVsZVxuK3BhY2tldHMsIHNvIGl0cyBBUU0sIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGFjdHVhbGx5IGFwcGx5LiBUaGlzIGhlbHBzXG4rcHJvdG9jb2xzIGxpa2UgVENQLCB3aGljaCBjdXQgdGhyb3VnaHB1dCBpbiByZWFjdGlvbiB0byBwYWNrZXQgZHJvcHMuXG4rV2l0aCBJRkZfQkFDS1BSRVNTVVJFLCBkcm9wcyB0aGVuIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIEJhY2twcmVzc3VyZVxuK3JlcXVpcmVzIGEgcWRpc2MgdG8gYmUgYXR0YWNoZWQgYW5kIGhhcyBubyBlZmZlY3Qgd2l0aCBub3F1ZXVlLlxuK1xuK1RoZSB0eHF1ZXVlbGVuIGNhbiBiZSByZWR1Y2VkIGFsb25nc2lkZSB0aGlzIGZsYWcgdG8gZnVydGhlciBzaGlmdFxuK2J1ZmZlcmluZyBpbnRvIHRoZSBxZGlzYyBhbmQgcmVkdWNlIGJ1ZmZlcmJsb2F0LCBidXQgY29tZXMgYXQgcG9zc2libGVcbitwZXJmb3JtYW5jZSBjb3N0LlxuK1xuK1doZW4gcnVubmluZyBtdWx0aXBsZSBuZXR3b3JrIHN0cmVhbXMgaW4gcGFyYWxsZWwgdGhyb3VnaCBhIHNpbmdsZVxuK1RVTi9UQVAgcXVldWUsIHRoZSBmbGFnIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZFxuK29mIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtLlxuK1xuIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvblxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcbmluZGV4IDUxZTgwMDAwYmQwZWQuLjVhOTI3YmJiZGEyZjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuKysrIGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC05OCw3ICs5OCw4IEBAIHN0YXRpYyB2b2lkIHR1bl9kZWZhdWx0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gI2RlZmluZSBUVU5fRkFTWU5DXHRJRkZfQVRUQUNIX1FVRVVFXG4gXG4gI2RlZmluZSBUVU5fRkVBVFVSRVMgKElGRl9OT19QSSB8IElGRl9PTkVfUVVFVUUgfCBJRkZfVk5FVF9IRFIgfCBcXFxuLVx0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKVxuK1x0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcbitcdFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcbiBcbiAjZGVmaW5lIEdPT0RDT1BZX0xFTiAxMjhcbiBcbkBAIC0xNDUsNiArMTQ2LDggQEAgc3RydWN0IHR1bl9maWxlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbmV4dDtcbiBcdHN0cnVjdCB0dW5fc3RydWN0ICpkZXRhY2hlZDtcbiBcdHN0cnVjdCBwdHJfcmluZyB0eF9yaW5nO1xuK1x0LyogUHJvdGVjdGVkIGJ5IHR4X3JpbmcuY29uc3VtZXJfbG9jayAqL1xuK1x0aW50IGNvbnNfY250O1xuIFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xuIH07XG4gXG5AQCAtNTg4LDggKzU5MSwxNiBAQCBzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdLFxuIFx0XHRcdFx0ICAgdHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xuIFx0XHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRudGZpbGUtXHUwMDNlcXVldWVfaW5kZXggPSBpbmRleDtcbiBcdFx0bnRmaWxlLVx1MDAzZXhkcF9yeHEucXVldWVfaW5kZXggPSBpbmRleDtcbitcdFx0bnRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbitcdFx0LyogSWYgdGhlIHJpbmcgaXMgbm90IGVtcHR5LCB0aGUgY29uc3VtZXIgd2FrZXMgdGhlIHF1ZXVlXG4rXHRcdCAqIGFmdGVyIGNvbnN1bWluZyB0aGUgcmVtYWluaW5nIGVudHJpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoX19wdHJfcmluZ19lbXB0eShcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZykpXG4rXHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCBpbmRleCk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0sXG4gXHRcdFx0XHQgICBOVUxMKTtcbiBcbkBAIC02ODcsNiArNjk4LDIwIEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuK1x0XHRcdFx0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4re1xuK1x0LyogRW5zdXJlIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBub3Qgc3RvcCB0aGVcbitcdCAqIHF1ZXVlIGNvbmN1cnJlbnRseSBieSB0YWtpbmcgbG9ja3MuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4rXHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cdTAwM2VkZXYsIHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbitcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK31cbitcbiBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdCAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLFxuIFx0XHQgICAgICBib29sIHB1Ymxpc2hfdHVuKVxuQEAgLTczMiw2ICs3NTcsNyBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IHR1bi1cdTAwM2VudW1xdWV1ZXM7XG4gXHR0ZmlsZS1cdTAwM2Vzb2NrZXQuc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xuK1x0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG4gXG4gXHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpIHtcbiBcdFx0LyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi9cbkBAIC0xMDA4LDYgKzEwMzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZTtcbiBcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4gXHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdGludCByZXQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR0ZmlsZSA9IHJjdV9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW3R4cV0pO1xuQEAgLTEwNjIsMTMgKzEwODksMzQgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbi1cdGlmIChwdHJfcmluZ19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcsIHNrYikpIHtcbitcdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpO1xuK1x0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcdTAwMjZcdTAwMjZcbitcdCAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xuK1x0XHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcbitcdFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXG4rXHRcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4rXHRcdGlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpKVxuK1x0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcbitcdGlmIChyZXQpIHtcbitcdFx0LyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgSUZGX0JBQ0tQUkVTU1VSRSBpcyBlbmFibGVkIGFuZFxuK1x0XHQgKiBhIHFkaXNjIGlzIHByZXNlbnQsIGJ1dCBjYW4gaGFwcGVuIGR1ZSB0byBsbHR4LlxuK1x0XHQgKiBTaW5jZSBza2JfdHhfdGltZXN0YW1wKCksIHNrYl9vcnBoYW4oKSxcbitcdFx0ICogcnVuX2VicGZfZmlsdGVyKCkgYW5kIHBza2JfdHJpbSgpIGNvdWxkIGhhdmUgdGlua2VyZWRcbitcdFx0ICogd2l0aCB0aGUgU0tCLCByZXR1cm5pbmcgTkVUREVWX1RYX0JVU1kgaXMgdW5zYWZlIGFuZFxuK1x0XHQgKiB3ZSBtdXN0IGRyb3AgaW5zdGVhZC5cbitcdFx0ICovXG4gXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZVTExfUklORztcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuIFx0LyogZGV2LVx1MDAzZWxsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi9cbi1cdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XG4gXHR0eHFfdHJhbnNfY29uZF91cGRhdGUocXVldWUpO1xuIFxuIFx0LyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovXG5AQCAtMjExNiwxMyArMjE2NCw1MCBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbiBcdHJldHVybiB0b3RhbDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuKy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuK3N0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbitcdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZClcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4rXG4rXHRpZiAoISh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cdTAwM2VkZXYsIHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbitcbitcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbitcdHNtcF9tYigpO1xuK1x0aWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkge1xuK1x0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCArPSBjb25zdW1lZDtcbitcdFx0aWYgKHRmaWxlLVx1MDAzZWNvbnNfY250IFx1MDAzZT0gdGZpbGUtXHUwMDNldHhfcmluZy5zaXplIC8gMiB8fFxuK1x0XHQgICAgX19wdHJfcmluZ19lbXB0eShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSkge1xuK1x0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUodHhxKTtcbitcdFx0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbit7XG4rXHR2b2lkICpwdHI7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbitcdHB0ciA9IF9fcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbitcdGlmIChwdHIpXG4rXHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgMSk7XG4rXG4rXHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0cmV0dXJuIHB0cjtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbitcdFx0XHQgICBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4ge1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4gXHR2b2lkICpwdHIgPSBOVUxMO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4rXHRwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpO1xuIFx0aWYgKHB0cilcbiBcdFx0Z290byBvdXQ7XG4gXHRpZiAobm9ibG9jaykge1xuQEAgLTIxMzQsNyArMjIxOSw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycilcbiBcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4rXHRcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4gXHRcdGlmIChwdHIpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuQEAgLTIxNzEsNyArMjI1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4gXG4gXHRpZiAoIXB0cikge1xuIFx0XHQvKiBSZWFkIGZyYW1lcyBmcm9tIHJpbmcgKi9cbi1cdFx0cHRyID0gdHVuX3JpbmdfcmVjdih0ZmlsZSwgbm9ibG9jaywgXHUwMDI2ZXJyKTtcbitcdFx0cHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuIFx0XHRpZiAoIXB0cilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTI3MDQsNyArMjc4OSw3IEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuIFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cdGludCBlcnI7XG4rXHRpbnQgZXJyLCBpO1xuIFxuIFx0aWYgKHRmaWxlLVx1MDAzZWRldGFjaGVkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0yODMzLDggKzI5MTgsMTIgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbiBcdC8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpblxuIFx0ICogeG9mZiBzdGF0ZS5cbiBcdCAqL1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikpXG4tXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tXHUwMDNlZGV2KTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2ldKTtcbitcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0c3Ryc2NweShpZnItXHUwMDNlaWZyX25hbWUsIHR1bi1cdTAwM2VkZXYtXHUwMDNlbmFtZSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0zNjMwLDYgKzM3MTksMTMgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG4gXHRcdFx0XHRcdCAgZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRcdFx0ICB0dW5fcHRyX2ZyZWUpO1xuIFxuK1x0aWYgKCFyZXQpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XG4rXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuK1x0XHRcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRrZnJlZShyaW5ncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0zNzM4LDYgKzM4MzQsMjkgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4gXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4rdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuK3tcbitcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4rXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuK1xuK1x0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZ0dW5fZm9wcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0dGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGlmICghdGZpbGUpXG4rXHRcdHJldHVybjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbitcdHR1biA9IHJjdV9kZXJlZmVyZW5jZSh0ZmlsZS1cdTAwM2V0dW4pO1xuK1x0aWYgKHR1bilcbitcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodHVuX3dha2VfcXVldWUpO1xuK1xuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcbiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDY5NDliNzA0MTY2ZDUuLjNlNzJiOWM2YWYwY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5AQCAtMTc2LDEzICsxNzYsMjEgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbitzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcHJvZHVjZShzdHJ1Y3Qgc29jayAqc2ssXG4rXHRcdFx0XHQgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiB7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmaWxlO1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRyeHEtXHUwMDNlaGVhZCA9IDA7XG4tXHRyeHEtXHUwMDNldGFpbCA9IHB0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXHUwMDNlcnhfcmluZywgcnhxLVx1MDAzZXF1ZXVlLFxuLVx0XHRcdFx0XHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNm52cS1cdTAwM2VyeF9yaW5nLVx1MDAzZWNvbnN1bWVyX2xvY2spO1xuK1x0cnhxLVx1MDAzZXRhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXHUwMDNlcnhfcmluZywgcnhxLVx1MDAzZXF1ZXVlLFxuK1x0XHRcdFx0XHQgICAgICAgVkhPU1RfTkVUX0JBVENIKTtcbitcbitcdGlmIChyeHEtXHUwMDNldGFpbClcbitcdFx0dHVuX3dha2VfcXVldWUoZmlsZSwgcnhxLVx1MDAzZXRhaWwpO1xuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bnZxLVx1MDAzZXJ4X3JpbmctXHUwMDNlY29uc3VtZXJfbG9jayk7XG4gXHRyZXR1cm4gcnhxLVx1MDAzZXRhaWw7XG4gfVxuIFxuQEAgLTIwOSwxNCArMjE3LDE1IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXG4gXHRyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxuK1x0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc2ssIG52cSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIG91dDpcbkBAIC0xMDA0LDcgKzEwMTMsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmIChydnEtXHUwMDNlcnhfcmluZylcbi1cdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhydnEpO1xuK1x0XHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gXHRoZWFkID0gc2tiX3BlZWsoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbmluZGV4IDgwMTY2ZWI2MmY0MWMuLjVmM2UyMDZjN2E3MzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5AQCAtMjIsNiArMjIsNyBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwge1xuICNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XG4gc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpO1xuK3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxuIHtcbkBAIC01NSw2ICs1Niw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmYpXG4gXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbmluZGV4IGQyYzM2MjliYmU0NTEuLmM5NWU4OTE5MDNmMDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuQEAgLTk2LDYgKzk2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuKyAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4re1xuK1x0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuICAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBwb2ludGVyIHRoYXQgaXMgYmVpbmcgcXVldWVkXG5AQCAtMTAzLDggKzExNywxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRyX3JpbmdfZnVsbF9iaChzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKVxuIHtcbi1cdGlmICh1bmxpa2VseSghci1cdTAwM2VzaXplKSB8fCBkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0aW50IHAgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XG4rXG4rXHRpZiAocClcbitcdFx0cmV0dXJuIHA7XG4gXG4gXHQvKiBNYWtlIHN1cmUgdGhlIHBvaW50ZXIgd2UgYXJlIHN0b3JpbmcgcG9pbnRzIHRvIGEgdmFsaWQgZGF0YS4gKi9cbiBcdC8qIFBhaXJzIHdpdGggdGhlIGRlcGVuZGVuY3kgb3JkZXJpbmcgaW4gX19wdHJfcmluZ19jb25zdW1lLiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggNzlkNTNjN2ExZWJkYy4uYTBkZGM1MGE3NTM0MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjksNiArNjksMTAgQEBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcdDB4MDA0MFxuKy8qIFN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBpcyBmdWxsLCBzbyBhblxuKyAqIGF0dGFjaGVkIHFkaXNjIGFwcGxpZXMgYmFja3ByZXNzdXJlIGluc3RlYWQgb2YgYmVpbmcgYnlwYXNzZWQuXG4rICovXG4rI2RlZmluZSBJRkZfQkFDS1BSRVNTVVJFXHQweDAwODBcbiAjZGVmaW5lIElGRl9OT19QSVx0MHgxMDAwXG4gLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqL1xuICNkZWZpbmUgSUZGX09ORV9RVUVVRVx0MHgyMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5pbmRleCAyZWMwN2RlMWQ3M2JlLi4yYzg1NTI1NzA0YzE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbkBAIC02Nyw2ICs2NywxMCBAQFxuICNkZWZpbmUgSUZGX1RBUFx0XHQweDAwMDJcbiAjZGVmaW5lIElGRl9OQVBJXHQweDAwMTBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbisvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cbisgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLlxuKyAqL1xuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTU6NTIuMzYxOTQ2MTc5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk5MjE5ODM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgVFVOL1RBUCBhbmQgdmhvc3RfbmV0IEJhY2twcmVzc3VyZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgbmV3IHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIHRoZSBUVU4vVEFQIGFuZCB2aG9zdF9uZXQgZHJpdmVycy4gSXQncyBpbnRyb2R1Y2luZyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBzcGVjaWZpY2FsbHkgZm9yIFRVTi9UQVAgZGV2aWNlcy4gVGhlIGtleSB0aGluZyBpcyB0aGF0LCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBwYWNrZXQgZHJvcHBpbmcgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbCwgaXQnbGwgc3RvcCB0aGUgcXVldWUgYW5kIGFsbG93IHRoZSBhdHRhY2hlZCBxZGlzYyB0byBtYW5hZ2UgdGhlIGJhY2twcmVzc3VyZS4gVGhhdCdzIGEgcHJldHR5IGludGVyZXN0aW5nIGNoYW5nZSB0byBob3cgdGhlc2UgZHJpdmVycyBiZWhhdmUgdW5kZXIgbG9hZC5cblxuTG9va3MgbGlrZSB0aGUgY2hhbmdlcyB0b3VjaCBhIGZhaXIgbnVtYmVyIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHNvbWUgaGVhZGVyIGZpbGVzIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLCBhbmQgZXZlbiB0aGUgVUFQSSBkZWZpbml0aW9ucy4gSSBjYW4gY29uZmlybSB0aGlzIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIGV4cG9zZWQgdGhyb3VnaCB0aGUgVFVOU0VUSUZGIGlvY3RsIG9uIGAvZGV2L25ldC90dW5gIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZCBmb3IgYWNjZXNzaWJpbGl0eS4gVGhleSd2ZSBhbHNvIG1vZGlmaWVkIHRoZSB2aG9zdF9uZXQgZHJpdmVyIHRvIGhhbmRsZSBxdWV1ZSB3YWtpbmcgd2hlbiBjb25zdW1pbmcgcGFja2V0cyBmcm9tIHRoZSByaW5nLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIG92ZXJhbGwgZmxvdy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdlIHNob3VsZCBjb25zaWRlciBmdXp6aW5nPyBHaXZlbiB0aGF0IGl0IG1vZGlmaWVzIGNvcmUgVFVOL1RBUCBsb2dpYyBhbmQgdGhvc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgdGFyZ2V0cywgKmVzcGVjaWFsbHkqIGdpdmVuIGhvdyBoZWF2aWx5IHRoZXkncmUgZnV6emVkLCBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBmdXp6YWJsZS4gVGhlIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBpcyBhZGRlZCB0byBgVFVOX0ZFQVRVUkVTYCwgc28gaXQgbG9va3MgbGlrZSBpdCdzIGJlZW4gcHJvcGVybHkgaW50ZWdyYXRlZC4gSSBzZWUgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcyBgdHVuX25ldF94bWl0YCwgYHR1bl9yaW5nX3JlY3ZgLCBgdHVuX3NldF9pZmZgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgLCBhbmQgYHZob3N0X25ldF9idWZfcGVla2Agd2hpY2ggaXMgYSBzdWJzdGFudGlhbCBpbXBhY3Qgb24gdGhlIGNvcmUgbG9naWMgYW5kIGNyaXRpY2FsIGFyZWFzIGZvciB0ZXN0aW5nLiBJIGFsc28gc2VlIG5ldyBmdW5jdGlvbnMgbGlrZSBgdHVuX2ZvcmNlX3dha2VfcXVldWVgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGB0dW5fcmluZ19jb25zdW1lYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAgd2hpY2ggaXMgYSBnb29kIGluZGljYXRpb24gb2YgdGhlIGludGVybmFsIG1lY2hhbmljcyBiZWluZyBjaGFuZ2VkLlxuXG5UaW1lIHRvIGxvb2sgaW50byB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIHRvIHdvcmsuIE9idmlvdXNseSwgVFVOL1RBUCBpdHNlbGYgbmVlZHMgYENPTkZJR19UVU5gLCBhbmQgdmhvc3RfbmV0LCByZXF1aXJlcyBgQ09ORklHX1ZIT1NUX05FVGAuIExldCdzIGp1c3QgY29uZmlybSB0aG9zZSByZXF1aXJlbWVudHMgZXhpc3QgaW4gYGRyaXZlcnMvbmV0L3R1bi5jYCBhbmQgYGRyaXZlcnMvdmhvc3QvbmV0LmNgLCBzbyBJIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5BbHJpZ2h0LCBJJ2xsIHVzZSB0aGUgZGVmYXVsdCBncmVwcGVyIHRvIHZlcmlmeSBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MDAuMzU0MTQ3NzI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzYxMTM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zODY9Y29uZmlnIFJJT05FVF9SWF9TSVpFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MTpjb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDE1PWNvbmZpZyBUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDIwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDIxOmNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGNyb3NzLWVuZGlhbiB2bmV0IGhlYWRlcnMgb24gbGl0dGxlLWVuZGlhbiBrZXJuZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjowMC40NjE3NjQ0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDE5MjEyMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFZIT1NUX05FVCBJbnF1aXJ5KipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRob3VnaHQgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byBjaGVjayBpbnRvIGBWSE9TVF9ORVRgLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBzdGFydGluZyBwb2ludCB3aGVuIHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmcgbGlrZSB0aGlzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoYXQgc3Vic3lzdGVtLCBpdCB1c3VhbGx5IGhhcyBzb21lIHRlbGwgdGFsZSBsb2dzIGFuZCBpc3N1ZXMgaWYgbm90IGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpdHMgcHJlc2VuY2UsIGNvbmZpZ3VyYXRpb24sIGFuZCBzdGF0dXMgb2YgYW55IGFzc29jaWF0ZWQgbmV0d29ya2luZyBjb21wb25lbnRzLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGZvciBhbnkgb2J2aW91cyBlcnJvciBtZXNzYWdlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIGl0LiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1OTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjAzLjUwMzY5MDIzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU5MjIyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX05FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXFx0dHJpc3RhdGUgXFxcIkhvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjowMy42NDk2NTU1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDc0ODcyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGUgZmllbGQ6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IFZIT1NUX05FVCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFZIT1NUX05FVCBtb2R1bGUsIGluc2lkZSBhbmQgb3V0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogd2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSBjYW4ndCBqdXN0IGRpdmUgaW4gd2l0aG91dCBrbm93aW5nIHRoZSBmb3VuZGF0aW9uIGl0J3MgYnVpbHQgb24uIEkgaGF2ZSB0byB0cmFjZSBldmVyeXRoaW5nIGFuZCB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIHN5c3RlbSBjb21wb25lbnRzIHRoaXMgZGVwZW5kcyBvbi4gVGhpcyBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3RpbmcsIG9wdGltaXppbmcsIGFuZCBldmVuIGp1c3QgZm9yIGFyY2hpdGVjdGluZyBteSBhcHByb2FjaCB0byB3aGF0ZXZlciBJJ20gd29ya2luZyBvbi4gRGVwZW5kZW5jeSBkaXNjb3ZlcnkgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGdldHRpbmcgdGhlIGxheSBvZiB0aGUgbGFuZCwgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgZW5zdXJpbmcgcHJvcGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbm9uLW5lZ290aWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjowNi43OTcxNDU3NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzOTgzOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zND1jb25maWcgVkhPU1RfTkVUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzY6XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRCBcXHUwMDI2XFx1MDAyNiAoVFVOIHx8ICFUVU4pIFxcdTAwMjZcXHUwMDI2IChUQVAgfHwgIVRBUClcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzctXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjQ4OlxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00OS1cXHRzZWxlY3QgVkhPU1RcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjU4OlxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OS1cXHRzZWxlY3QgVkhPU1RcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz03MD1jb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcyOlxcdGRlcGVuZHMgb24gRVZFTlRGRFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03My1cXHRzZWxlY3QgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzQtXFx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3NTpcXHRkZXBlbmRzIG9uIFZEUEFcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjowNi45MzExMzQ5NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzM2Nzk4MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgVFVOYCBhbmQgYFZIT1NUX05FVGAgYXMgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gV2FpdCwgd2hhdCBhYm91dCBgRVZFTlRGRGA/IEl0J3MgdXN1YWxseSBlbmFibGVkLCBidXQganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgaW5jbHVkZSBpdCBpbiBteSB0aGlua2luZy4gTm93LCBhIHF1aWNrIGNoZWNr4oCmIHllcCwgYFZIT1NUX05FVGAgKmRvZXMqIGRlcGVuZCBvbiBib3RoIGBORVRgIGFuZCBgRVZFTlRGRGAuIEFuZCB3ZSBhbHJlYWR5IGtub3cgYE5FVGAgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQncyBnb29kLlxuXG5SaWdodCwgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdGhlIHBhdGNoIGlzIHRvdWNoaW5nLiBJIHNlZSBpdCdzIG1vZGlmeWluZzpcblxuKiAgIGB0dW5fbmV0X3htaXRgXG4qICAgYHR1bl9yaW5nX3JlY3ZgICh3aXRoIGEgY2hhbmdlIG5vdyB0YWtpbmcgYHR1bmAgYW5kIGB0ZmlsZWApIC0gYnV0IGl0IGlzIHN0YXRpY1xuKiAgIGB0dW5fc2V0X2lmZmAgLSB3aGljaCBpcyBzdGF0aWMsIGJ1dCByZWFjaGFibGUgdmlhIGB0dW5fY2hyX2lvY3RsYC5cbiogICBgdHVuX3F1ZXVlX3Jlc2l6ZWAgLSB0aGlzIGlzIGFsc28gc3RhdGljLCByZWFjaGFibGUgdmlhIGB0dW5fY2hyX2lvY3RsYC5cbiogICBgdHVuX3dha2VfcXVldWVgIC0gYWhhLCB0aGlzIG9uZSdzIGFuIGV4cG9ydGVkIHN5bWJvbCFcbiogICBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCAtIHdoaWNoIGlzIHN0YXRpY1xuKiAgIGB2aG9zdF9uZXRfYnVmX3BlZWtgIC0gYW5kIHRoaXMgb25lIGlzIGFsc28gc3RhdGljXG5cbk9rYXksIHNvIHRoZSBtb3N0IGltcG9ydGFudCBhcmVhcyB0byBmb2N1cyBvbiBzZWVtIHRvIGJlOlxuXG4qICAgYHR1bl9uZXRfeG1pdGAg4oCTIGFsd2F5cyBpbXBvcnRhbnQgaW4gbmV0d29yayBkcml2ZXJzXG4qICAgYHR1bl93YWtlX3F1ZXVlYCDigJMgY3JpdGljYWwgYmVjYXVzZSBpdCdzIGV4cG9ydGVkLCBhbmQgdGhlcmVmb3JlIGhhcyBleHRlcm5hbCBkZXBlbmRlbmNpZXMuXG4qICAgYHR1bl9jaHJfaW9jdGxgIOKAkyBiZWNhdXNlIGl0IHRvdWNoZXMgYm90aCBgdHVuX3NldF9pZmZgIGFuZCBgdHVuX3F1ZXVlX3Jlc2l6ZWBcbiogICBBbmQgZmluYWxseSwgSSBuZWVkIHRvIGxvb2sgaW50byBgdmhvc3QvbmV0LmNgLCBiZWNhdXNlIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIGNoYW5nZSB0byB0aGUgYHZob3N0X25ldGAgaW9jdGxzIGFuZCBvcGVuIG9yIHJlbGVhc2UgZnVuY3Rpb25zLiBXYWl0IC0gaXQgbG9va3MgbGlrZSBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBjYWxsZWQgYnkgYHZob3N0X25ldF9idWZfcGVla2AuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgY2FsbGVkIGJ5IGBwZWVrX2hlYWRfbGVuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgc29tZXRoaW5nIGxpa2UgYGhhbmRsZV9yeGAgaW4gYHZob3N0L25ldC5jYC5cblxuT2theSwgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIGBwZWVrX2hlYWRfbGVuYCBpcyB1c2VkLiBUaW1lIHRvIGRpdmUgaW50byBgdmhvc3QvbmV0LmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MTQuMjY3OTM3NjQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc2ODY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZWVrX2hlYWRfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz05ODM9c3RhdGljIHZvaWQgaGFuZGxlX3R4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAwOC1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDk6c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMTAte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDI5LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAzMDpzdGF0aWMgaW50IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzMS1cXHRcXHRcXHRcXHQgICAgICBib29sICpidXN5bG9vcF9pbnRyLCB1bnNpZ25lZCBpbnQgKmNvdW50KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM2LVxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR2cSA9IFxcdTAwMjZ0bnZxLVxcdTAwM2V2cTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMzc6XFx0aW50IGxlbiA9IHBlZWtfaGVhZF9sZW4ocm52cSwgc2spO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzOC1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTA0NS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwNDY6XFx0XFx0bGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDQ3LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTE0OT1zdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHZob3N0X25ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjAxLVxcdGRvIHtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEyMDI6XFx0XFx0c29ja19sZW4gPSB2aG9zdF9uZXRfcnhfcGVla19oZWFkX2xlbihuZXQsIHNvY2stXFx1MDAzZXNrLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTIwMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YnVzeWxvb3BfaW50ciwgXFx1MDAyNmNvdW50KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MTQuMzUzNzEzNzI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTcyNjQxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgVmhvc3QgUlggUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGluY29taW5nIHBhY2tldHMgaW4gdGhpcyB2aG9zdCBzZXR1cC4gSSdtIGZvY3VzaW5nIG9uIHRoZSByZWNlaXZlIHBhdGgsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGZyb20gdGhlIGd1ZXN0IFZNIGdldHMgaW50byB0aGUgaG9zdC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGBoYW5kbGVfcnhgIGluIGB2aG9zdC9uZXQuY2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuIFRoYXQncyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiBmb3IgdGhlIFJYIHNpZGUuIE5vdywgYSBzbGlnaHQgd3JpbmtsZS4uLiBgaGFuZGxlX3J4YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQsIGFuZCBsaWtlbHkgKm5vdCogZGlyZWN0bHkgZXhwb3NlZCB0bywgc2F5LCBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gSXQncyBwcm9iYWJseSBiZWluZyBpbnZva2VkIGJ5IHNvbWUgd29ya2VyIHRocmVhZCBvciBzaW1pbGFyIG1lY2hhbmlzbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogaXQncyBnZXR0aW5nIGNhbGxlZC5cblxuT2theSwgbGV0J3MgYmFja3RyYWNrIGEgYml0LiBUaGUgdHlwaWNhbCB2aG9zdCBzZXR1cCBpbnZvbHZlcyBpb2N0bHMgZm9yIGNvbmZpZ3VyYXRpb24uIENvdWxkIGl0IGJlIHRyaWdnZXJlZCBieSBgdmhvc3RfbmV0X2lvY3RsYCBvciBtYXliZSBgdmhvc3RfbmV0X2Nocl93cml0ZWA/IE5vLCBJJ20gcHJldHR5IHN1cmUgYHZob3N0X25ldF9pb2N0bGAgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIHNldHRpbmcgdXAgdGhlIGJhY2tlbmQsIGNvbmZpZ3VyaW5nIG1lbW9yeSByZWdpb25zLCBhbmQgdGhpbmdzIGxpa2UgdGhhdCwgbm90IG5lY2Vzc2FyaWx5IGZvciBkaXJlY3QgcGFja2V0IGluamVjdGlvbi4gU28sIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlIGd1ZXN0J3MgZGF0YSBpcyBwdXNoZWQgaW50byB0aGUgaG9zdC5cblxuQWxyaWdodCwgYSBsaWtlbHkgY2FuZGlkYXRlIGhlcmUgaXMgdGhlIFRVTiBkZXZpY2UuIExldCBtZSBjaGVjayB0aGUgYHR1bl9jaHJfaW9jdGxgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC90dW4uY2AuIEl0J3MgcG9zc2libGUgdGhlIHNldHVwIGludm9sdmVzIHNvbWUgc29ydCBvZiBpb2N0bCBjYWxsIHRvIHNlbmQgdGhlIGRhdGEgaW50byB0aGUgbmV0d29yayBzdGFjay4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MTkuMjUwOTgyMDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTA1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9jaHJfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MzEwMT1zdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTM4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMxMzk6c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxNDAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgaWZyZXFfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzIxNS1cXG5kcml2ZXJzL25ldC90dW4uYzozMjE2OlxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwidHVuX2Nocl9pb2N0bCBjbWQgJXVcXFxcblxcXCIsIGNtZCk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzIxNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0MzItXFxuZHJpdmVycy9uZXQvdHVuLmM6MzQzMzpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0MzQtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL25ldC90dW4uYy0zNDM1LXtcXG5kcml2ZXJzL25ldC90dW4uYzozNDM2OlxcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZiAoc3RydWN0IGlmcmVxKSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzQzNy19XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNDQwPXN0YXRpYyBsb25nIHR1bl9jaHJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ2My1cXHQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzozNDY0OlxcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ2NS19XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzU2Ni1cXHQucG9sbFxcdD0gdHVuX2Nocl9wb2xsLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM1Njc6XFx0LnVubG9ja2VkX2lvY3RsXFx0PSB0dW5fY2hyX2lvY3RsLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1NjgtI2lmZGVmIENPTkZJR19DT01QQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MTkuMzUwMDk2MjY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODA2OTkyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgVFVOL1ZIT1NUIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIG15IGZvY3VzIG5lZWRzIHRvIGJlIGxhc2VyLXNoYXJwIGhlcmUuIEl0IGxvb2tzIGxpa2UgYHR1bl9jaHJfaW9jdGxgIGlzIHRoZSBjZW50cmFsIElPQ1RMIGhhbmRsZXIgaW4gdGhpcyB3aG9sZSBUVU4gc2V0dXAuIEtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBmZXcgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OiBgdHVuX25ldF94bWl0YCwgd2hpY2ggaGFuZGxlcyB0aGUgbmV0d29yayB0cmFuc21pc3Npb247IGB0dW5fY2hyX2lvY3RsYCwgb2YgY291cnNlLCBpcyBhIGNvbnRyb2wgcGxhbmUgZW50cnlwb2ludC4gYHR1bl93YWtlX3F1ZXVlYCBhbmQgZmluYWxseSBgdmhvc3RfbmV0X2lvY3RsYCB3aGljaCBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaW5ncyBpbnRlZ3JhdGUgd2l0aCB2aG9zdC5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB2aG9zdF9uZXRfaW9jdGxgIGFuZCBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoZXJlIHRoYXQgaXMgZGVmaW5lZC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayB3b3VsZCBiZSBpbiB0aGUgYGRyaXZlcnMvdmhvc3QvbmV0LmNgIGZpbGUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjIzLjMzMDc5ODgxNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NDUwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTcyNj1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3NDYtXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxNzQ3OnN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTc0OC1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4ODAtXFx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfbmV0X2Nocl9wb2xsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg4MTpcXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgyLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjIzLjgzMDI1NzM1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc4OTE2MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUVU4gRGV2aWNlIEJhY2twcmVzc3VyZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZywgd2hpY2ggaXMgZW5hYmxlZCB1c2luZyB0aGUgYFRVTlNFVElGRmAgaW9jdGwuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgd2hlbiB0aGlzIGZsYWcgaXMgYWN0aXZlLCB0aGUgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24gd2lsbCBub3cgYWN0aXZlbHkgaGFsdCB0aGUgdHJhbnNtaXNzaW9uIHF1ZXVlIGlmIHRoZSByaW5nIGJ1ZmZlciBmaWxscyB1cC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyBob3cgdGhpcyBoYWx0ZWQgcXVldWUgZ2V0cyByZXN0YXJ0ZWQuIFRoZSBsb2dpYyBoaW5nZXMgb24gdHdvIGtleSBmdW5jdGlvbnMuIEZpcnN0LCBgdmhvc3RfbmV0YCwgd2hlbiBpdCBjb25zdW1lcyBwYWNrZXRzIGZyb20gdGhlIFRVTiBkZXZpY2UsIGlzIGdvaW5nIHRvIGNhbGwgYHR1bl93YWtlX3F1ZXVlYC4gIFNlY29uZCwgYHR1bl9kb19yZWFkYCwgd2hpY2ggYWxzbyBjb25zdW1lcyBwYWNrZXRzLCBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGB0dW5fd2FrZV9xdWV1ZWAuICBJIGtub3cgYHR1bl9kb19yZWFkYCBpcyBjYWxsZWQgZnJvbSBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBzbyB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGlzIGFjdHVhbGx5IHB1bGxlZCBmcm9tIHRoZSBkZXZpY2UuIExldCBtZSBkcmlsbCBkb3duIGludG8gYHR1bl9jaHJfcmVhZF9pdGVyYCBhbmQgaXRzIGNhbGwgdG8gYHR1bl9kb19yZWFkYCBhbmQgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MjguMjA5MTc3MTg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDcwODg2MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2Nocl9yZWFkX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MjI0NT1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjI4MS1cXG5kcml2ZXJzL25ldC90dW4uYzoyMjgyOnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5kcml2ZXJzL25ldC90dW4uYy0yMjgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM1NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzU2My1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM1NjQ6XFx0LnJlYWRfaXRlciAgPSB0dW5fY2hyX3JlYWRfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYy0zNTY1LVxcdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjoyOC40MTYyNzI1NDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgwODQzNTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVFVOL1ZIT1NUIEhvdCBQYXRocyBmb3IgU3ltYm9saWMgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcyBvZiB0aGUgVFVOL1ZIT1NUIGNvZGUuIGB0dW5fY2hyX3JlYWRfaXRlcmAgaXMgdGhlIHJlYWQgaGFuZGxlciwgc28gaXQncyBkZWZpbml0ZWx5IG9uIG15IGxpc3QuIFRoZSBpbnN0cnVjdGlvbnMgc3VnZ2VzdCBJIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGdldCBhIG1vcmUgZm9jdXNlZCBhbmFseXNpcy5cblxuVGhlIGxpc3QgSSBoYWQgaW5pdGlhbGx5IHdhczogYHR1bl9uZXRfeG1pdGAsIGB0dW5fY2hyX2lvY3RsYCwgYHR1bl9jaHJfcmVhZF9pdGVyYCwgYHR1bl93YWtlX3F1ZXVlYCwgYW5kIGB2aG9zdF9uZXRfaW9jdGxgLlxuXG5Ib2xkIG9uLCBgdHVuX25ldF94bWl0YCBpcyAqZGVmaW5pdGVseSogYSBob3QgcGF0aCBmdW5jdGlvbi4gSXTigJlzIGVzc2VudGlhbGx5IHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBUVU4gZGV2aWNlcy4gSSBuZWVkIHRvIGF2b2lkIHRob3NlLCByaWdodD8gQW5kIGB0dW5fY2hyX3JlYWRfaXRlcmAgaXMgYWxzbyBhIGhvdCBwYXRoIGJlY2F1c2UsIHdlbGwsIGl0J3MgdGhlIHJlYWQgaGFuZGxlci4gRCdvaCFcblxuTm93LCBgdHVuX3dha2VfcXVldWVgIGlzIGNhbGxlZCBldmVyeSB0aW1lIGEgcGFja2V0IGlzIGNvbnN1bWVkIGlmIHRoZSBxdWV1ZSB3YXMgc3RvcHBlZC4gSXQgKmlzKiBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gQnV0Li4uIGlzIGl0IGEgaG90IHBhdGg/IEl0J3MgY2FsbGVkIHdoZW4gY29uc3VtaW5nIHBhY2tldHMuIEkgbmVlZCB0byBmaWd1cmUgdGhhdCBvdXQuIEhhbmcgb24sIHdhaXQsIGB0dW5fd2FrZV9xdWV1ZWAgaXMgb25seSBjYWxsZWQgd2hlbiBgcnhxLVx1MDAzZXRhaWxgIGlzIG5vbi16ZXJvIGluIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgLiBUaGF0IG1ha2VzIGEgZGlmZmVyZW5jZS4gSXMgKnRoYXQqIGEgaG90IHBhdGg/IE1vcmUgaW52ZXN0aWdhdGlvbiBpcyByZXF1aXJlZC5cblxuTGV0J3MgbG9vayBhdCBgdHVuX3NldF9pZmZgIHRoZW4uIEl0J3Mgc3RhdGljLCB3aGljaCBpcyBnb29kLCBidXQgaXMgaXQgYSBob3QgcGF0aD8gTm8sIG5vdCByZWFsbHkuIEl0J3MgY2FsbGVkIGZyb20gYF9fdHVuX2Nocl9pb2N0bGAsIHdoaWNoIGlzIGFuIGlvY3RsIGhhbmRsZXIuIElzIGBfX3R1bl9jaHJfaW9jdGxgIGEgaG90IHBhdGg/IE5vLiBXaGF0IGFib3V0IGB0dW5fcXVldWVfcmVzaXplYD8gVGhhdCdzIGNhbGxlZCBmcm9tIGBfX3R1bl9jaHJfaW9jdGxgIHdoZW4gYFRVTlNFVFFVRVVFYCBpcyBjYWxsZWQuIFRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGEgaG90IHBhdGggZWl0aGVyLiBPa2F5LCBsZXQncyBrZWVwIGdvaW5nLiBgdmhvc3RfbmV0X2lvY3RsYCBpc24ndCBhIGhvdCBwYXRoIGVpdGhlci5cblxuTm93LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGB0dW5fc2V0X2lmZmAgaXMgaW5saW5lZC4gSXQncyBxdWl0ZSBsYXJnZSwgc28gaXQncyBwcm9iYWJseSAqbm90KiBpbmxpbmVkLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBzaXplIHRvIGJlIHN1cmUsIHRob3VnaC4gUmlnaHQsIEkgbmVlZCB0byBnZXQgc29tZSBtb3JlIGRhdGEgb24gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MzYuMjI0NzExNTAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjQ1NjAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fc2V0X2lmZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0yNzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHR1bl9hdHRyX2dyb3VwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjc4Ni1cXG5kcml2ZXJzL25ldC90dW4uYzoyNzg3OnN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuZHJpdmVycy9uZXQvdHVuLmMtMjc4OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zMTM5PXN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxODYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzE4NzpcXHRcXHRyZXQgPSB0dW5fc2V0X2lmZihuZXQsIGZpbGUsIFxcdTAwMjZpZnIpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMxODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjM2LjMyMTE3NTE2OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODk0NzgyNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXkgU3ltYm9scyBpbiB0aGUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBwYXRjaC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGB0dW5fc2V0X2lmZmAganVtcHMgb3V0LiBJdCdzIG5vdCBpbmxpbmVkLCBhbmQgaXQgc3BhbnMgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb2RlIChsaW5lcyAyNzg3IHRvIHJvdWdobHkgMzEwMCkuIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBpbmNsdXNpb24gaW4gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBgdHVuX3F1ZXVlX3Jlc2l6ZWAgYWxzbyBsb29rcyBwcm9taXNpbmcgZm9yIHNpbWlsYXIgcmVhc29ucy5cblxuTm93LCBgdHVuX3dha2VfcXVldWVgLi4uIGl0J3MgZXhwb3J0ZWQsIHNvIGRlZmluaXRlbHkgbm90IGlubGluZWQuIEl0J3MgY29yZSB0byB0aGUgZnVuY3Rpb25hbGl0eSBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmVhdHVyZSwgc28gaXQgc2VlbXMgbGlrZSBhIGdvb2QgY2hvaWNlIGRlc3BpdGUgdGhlIGluc3RydWN0aW9uIHRvIFwiQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy5cIiBUaGUgY2F2ZWF0IGJlaW5nIHRoYXQgYHR1bl93YWtlX3F1ZXVlYCBpcywgaW4gZmFjdCwgc3BlY2lmaWMgdG8gdGhpcyBuZXcgZmVhdHVyZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZmVhdHVyZSwgYW5kIG5vdCBzaW1wbHkgYW4gb3B0aW1pemF0aW9uLCBpdCBzZWVtcyBqdXN0aWZpYWJsZSB0byBpbmNsdWRlIGl0LlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCBgdmhvc3RfbmV0X2lvY3RsYCwgYnV0IHRoaXMgcGF0Y2ggZG9lc24ndCBhY3R1YWxseSB0b3VjaCBpdC4gSXQgZG9lcywgaG93ZXZlciwgbW9kaWZ5IGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGFuZCBgdmhvc3RfbmV0X2J1Zl9wZWVrYC4gSG1tLCBhcmUgdGhlc2UgaG90LXBhdGggZnVuY3Rpb25zPyBZZXMsIGFzIHRoZXkncmUgaW52b2x2ZWQgaW4gZXZlcnkgcGFja2V0IHdpdGhpbiBgaGFuZGxlX3J4YC4gU28sIEknbGwgYXZvaWQgbGlzdGluZyB0aG9zZSwgYXMgc3VnZ2VzdGVkLlxuXG5TbyBmYXIsIG15IGxpc3QgbG9va3MgbGlrZSB0aGlzOlxuXG4qICAgYHR1bl9zZXRfaWZmYFxuKiAgIGB0dW5fcXVldWVfcmVzaXplYFxuKiAgIGB0dW5fd2FrZV9xdWV1ZWBcblxuT2theSwgYmVmb3JlIEkgZmluYWxpemUsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHR1bl93YWtlX3F1ZXVlYC4gSXQncyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHZob3N0X25ldF9idWZfcGVla2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBwZWVrX2hlYWRfbGVuYCwgd2hpY2ggaXMgdWx0aW1hdGVseSBjYWxsZWQgZnJvbSBgaGFuZGxlX3J4YCBpbiBhIGxvb3AuIFllcCwgaXQncyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24uIEJ1dCwgd2FpdCwgSSBrZWVwIGNvbWluZyBiYWNrIHRvIHRoZSBmYWN0IHRoYXQgaXQncyB0aGUgcHJpbWFyeSBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24uIEl0J3MgcmVhc29uYWJsZSB0byBpbmNsdWRlIGl0LlxuXG5GaW5hbGx5LCBJIHNob3VsZCBpbmNsdWRlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSB1c2VyIGludGVyZmFjZS4gTGV0J3MgYWRkIGVpdGhlciBgX190dW5fY2hyX2lvY3RsYCBvciBgdHVuX2Nocl9pb2N0bGAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgdHVuX3F1ZXVlX3Jlc2l6ZWAgbWFrZXMgc2Vuc2UuIFJpZ2h0LCBhbGwgc2VlbXMgZ29vZC5cblxuKipGaW5hbCBMaXN0KipcblxuT2theSwgaGVyZSdzIG15IGZpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9sczpcblxuKiAgIGB0dW5fc2V0X2lmZmBcbiogICBgdHVuX3F1ZXVlX3Jlc2l6ZWBcbiogICBgdHVuX3dha2VfcXVldWVgXG4qICAgYHR1bl9jaHJfaW9jdGxgIChvciBgX190dW5fY2hyX2lvY3RsYClcblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6NDQuMjE1OTYxMjkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3ODg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0zNjg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY5OC1cXG5kcml2ZXJzL25ldC90dW4uYzozNjk5OnN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MDAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzczMz1zdGF0aWMgaW50IHR1bl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzQ0LVxcdGNhc2UgTkVUREVWX0NIQU5HRV9UWF9RVUVVRV9MRU46XFxuZHJpdmVycy9uZXQvdHVuLmM6Mzc0NTpcXHRcXHRpZiAodHVuX3F1ZXVlX3Jlc2l6ZSh0dW4pKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NDYtXFx0XFx0XFx0cmV0dXJuIE5PVElGWV9CQUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjQ0LjM4Mzc1NTk5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzcwOTYwNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB0dW5fcXVldWVfcmVzaXplYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYE5FVERFVl9DSEFOR0VfVFhfUVVFVUVfTEVOYCBldmVudCwgd2hpY2ggdHJpZ2dlcnMgYSBjYWxsIHRvIGB0dW5fcXVldWVfcmVzaXplYC4gVGhlIGdvb2QgbmV3cyBpcywgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgaXNuJ3QgaW4gYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoIOKAkyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExlc3MgcHJlc3N1cmUgb24gb3B0aW1pemF0aW9uIHRoZXJlLCB0aG91Z2ggd2Ugc3RpbGwgd2FudCB0byBlbnN1cmUgaXTigJlzIGRvbmUgY29ycmVjdGx5LlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IGB0dW5fZm9yY2Vfd2FrZV9xdWV1ZWAuIEl0J3MgYSBuZXcgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSBjdXJpb3VzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBxdWV1ZSBsZW5ndGggY2hhbmdlLiBXb25kZXJpbmcgaWYgdGhpcyBpcyBhYm91dCBlbnN1cmluZyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSByZWZsZWN0ZWQgb24gdGhlIGhhcmR3YXJlIGxheWVyLiBPciBpZiBpdCBpcyBzb21lIHNvcnQgb2YgYW4gb3B0aW1pemF0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjQ3Ljc1NDcxOTg4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzA3NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9mb3JjZV93YWtlX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTY1Nz1zdGF0aWMgdm9pZCB0dW5fZGV0YWNoX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNzAwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjcwMTpzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTcwMi1cXHRcXHRcXHRcXHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTcxNT1zdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy03NTktXFx0dGZpbGUtXFx1MDAzZXNvY2tldC5zay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNj0gflJDVl9TSFVURE9XTjtcXG5kcml2ZXJzL25ldC90dW4uYzo3NjA6XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtNzYxLVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9Mjc4Nz1zdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjkyMy1cXHRcXHRcXHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI5MjQ6XFx0XFx0XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjkyNS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNjk5PXN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzcyNC1cXHRcXHRcXHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjM3MjU6XFx0XFx0XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzcyNi1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjQ3Ljg4MjAzMzQxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcxNDgzMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgY29kZSBzbmlwcGV0LCBleHByZXNzZWQgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHR1bl9mb3JjZV93YWtlX3F1ZXVlYCoqXG5cblJpZ2h0LCBzbyBgdHVuX2ZvcmNlX3dha2VfcXVldWVgIGlzIGEgYHN0YXRpY2AgZnVuY3Rpb24uIFRoZSBjb21waWxlciAqbWlnaHQqIGlubGluZSBpdCBpbiBlYWNoIGNhbGwgc2l0ZSwgd2hpY2ggd291bGQgbWFrZSB0cmFjaW5nIGl0cyBleGVjdXRpb24gYSBiaXQgbW9yZSBjb21wbGljYXRlZC4gQnV0LCBzaW5jZSBpdCdzIHVzZWQgaW4gYSBmZXcgZGlmZmVyZW50IHBsYWNlcyDigJMgYHR1bl9hdHRhY2hgLCBgdHVuX3NldF9pZmZgLCBhbmQgYHR1bl9xdWV1ZV9yZXNpemVgIOKAkyBpbmxpbmluZyBpc24ndCBndWFyYW50ZWVkLCBhbmQgaG9uZXN0bHksIHRoZSBjb21waWxlciBtaWdodCBub3QgZXZlbiBvcHRpbWl6ZSBpdCB0aGF0IHdheS4gSW4gYW55IGNhc2UsIGl0J3Mgc2FmZXIgYW5kIGNsZWFyZXIgdG8ganVzdCBsaXN0IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBkaXJlY3RseSwgc28gSSdsbCBrZWVwIHRyYWNrIG9mIHRob3NlOiBgdHVuX2F0dGFjaGAsIGB0dW5fc2V0X2lmZmAsIGFuZCBgdHVuX3F1ZXVlX3Jlc2l6ZWAuXG5cbk5vdywgbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0dW5fYXR0YWNoYC4gVGhhdCdzIHdoZXJlIEknbGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxODIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1Njo1MS44NTM1MjAyODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTc4MDU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTcwMT1zdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNzE0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjcxNTpzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtNzE2LVxcdFxcdCAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9OTM3PXN0YXRpYyBpbnQgdHVuX25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy05NjUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnR1bi1cXHUwMDNlZGlzYWJsZWQpO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjk2NjpcXHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgdHVuLVxcdTAwM2VmaWxlLCBmYWxzZSwgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSSxcXG5kcml2ZXJzL25ldC90dW4uYy05NjctXFx0XFx0XFx0IGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgSUZGX05BUElfRlJBR1MsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI3ODc9c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI4MjYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjgyNzpcXHRcXHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSwgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTk9GSUxURVIsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjgyOC1cXHRcXHRcXHRcXHQgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI5OTg9c3RhdGljIHZvaWQgdHVuX2RldGFjaF9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgaW50IG4pXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMDEyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMwMTM6c3RhdGljIGludCB0dW5fYXR0YWNoX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwMTQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzA0ND1zdGF0aWMgaW50IHR1bl9zZXRfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA2MC1cXHRcXHRcXHRnb3RvIHVubG9jaztcXG5kcml2ZXJzL25ldC90dW4uYzozMDYxOlxcdFxcdHJldCA9IHR1bl9hdHRhY2godHVuLCBmaWxlLCBmYWxzZSwgdHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9OQVBJLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNjItXFx0XFx0XFx0XFx0IHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSV9GUkFHUywgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zMTM5PXN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzItXFxuZHJpdmVycy9uZXQvdHVuLmM6MzM3MzpcXHRcXHRyZXQgPSB0dW5fYXR0YWNoX2ZpbHRlcih0dW4pO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjUyLjA1NTMxMDA5OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTg1NTcwMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGB0dW5fYXR0YWNoYCBzZWVtcyBsaWtlIGFub3RoZXIgZ29vZCBmdW5jdGlvbiB0byBrZWVwIGFuIGV5ZSBvbi4gTGV0J3MgbGlzdCB0aGUga2V5IGZvY3VzIHN5bWJvbHM6IGB0dW5fc2V0X2lmZmAsIGB0dW5fcXVldWVfcmVzaXplYCwgYHR1bl9hdHRhY2hgLCBhbmQgYHR1bl93YWtlX3F1ZXVlYC4gQXJlIHRoZXJlIGFueSBvdGhlciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IFRoZSBwYXRjaCBhbHRlcnMgYGRyaXZlcnMvdmhvc3QvbmV0LmNgLCBzbyBgQ09ORklHX1ZIT1NUX05FVGAgaXMgcmVsZXZhbnQuIEFsc28sIHNpbmNlIGl0J3MgYSBUVU4vVEFQIG1vZGlmaWNhdGlvbiwgYENPTkZJR19UVU5gIGlzIGRlZmluaXRlbHkgaW52b2x2ZWQuXG5cbk5vdywgbGV0J3MganVzdCBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElmIGBDT05GSUdfVkhPU1RfTkVUYCBpcyB0aGUgb25seSBjb25maWcgbmVlZGVkPyBMZXQncyBjaGVjayB0aGUgZGVwZW5kZW5jeS4gYENPTkZJR19WSE9TVF9ORVRgIGRlcGVuZHMgb24gYE5FVCBcdTAwMjZcdTAwMjYgRVZFTlRGRCBcdTAwMjZcdTAwMjYgKFRVTiB8fCAhVFVOKSBcdTAwMjZcdTAwMjYgKFRBUCB8fCAhVEFQKWAuIFNvLCB5ZXMsIGJvdGggYENPTkZJR19WSE9TVF9ORVRgIGFuZCBgQ09ORklHX1RVTmAgYXJlIHJlcXVpcmVkLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHN5bnRoZXNpemUgbXkgY29uY2x1c2lvbnMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLiBXaGVuIGVuYWJsZWQsIGl0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgdGhlIHF1ZXVlcyBiZWhhdmUgaW4gYHR1bl9uZXRfeG1pdGAgYW5kIGB2aG9zdF9uZXRgIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwg4oCTIGl0IHN0b3BzIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMsIGVuYWJsaW5nIHRoZSBhdHRhY2hlZCBxZGlzYyB0byBhcHBseSBiYWNrcHJlc3N1cmUuIFRoaXMgYWZmZWN0cyBjb3JlIFRVTi9UQVAgbG9naWMgYW5kIHRoZSB2aG9zdF9uZXQgZHJpdmVyLiBCZWNhdXNlIHRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHVzZXItcmVhY2hhYmxlIHZpYSBpb2N0bHMgYW5kIG5ldHdvcmsgdHJhZmZpYywgaXQncyBhYnNvbHV0ZWx5IHJpcGUgZm9yIGZ1enppbmcuXG5cbk15IGZpbmFsIGRldGVybWluYXRpb24gaXM6XG5cbldvcnRoRnV6emluZzogdHJ1ZVxuRm9jdXNTeW1ib2xzOiBgdHVuX3NldF9pZmZgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGB0dW5fYXR0YWNoYCwgYHR1bl93YWtlX3F1ZXVlYFxuRW5hYmxlQ29uZmlnczogYFRVTmAsIGBWSE9TVF9ORVRgXG5SZWFzb25pbmc6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBJRkZfQkFDS1BSRVNTVVJFYCBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMuIFdoZW4gZW5hYmxlZCwgdGhpcyBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gYHR1bl9uZXRfeG1pdGAgYW5kIGB2aG9zdF9uZXRgIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHZpcnR1YWxpemF0aW9uIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBgVFVOU0VUSUZGYCBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4OCwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTc6MDAuMjQwODg0MDM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNzk5NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlZIT1NUX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fcXVldWVfcmVzaXplXCIsXG4gICAgXCJ0dW5fYXR0YWNoXCIsXG4gICAgXCJ0dW5fd2FrZV9xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIHdoaWNoIG1vZGlmaWVzIHRoZSBxdWV1ZSBoYW5kbGluZyBsb2dpYyBpbiB0dW5fbmV0X3htaXQgYW5kIHZob3N0X25ldCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBkcml2ZXJzIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVFVOU0VUSUZGIGlvY3RsIGFuZCBuZXR3b3JrIHRyYWZmaWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fc2V0X2lmZlwiLFxuICAgIFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICAgIFwidHVuX2F0dGFjaFwiLFxuICAgIFwidHVuX3dha2VfcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCB3aGljaCBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gdHVuX25ldF94bWl0IGFuZCB2aG9zdF9uZXQgdG8gc3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdmlydHVhbGl6YXRpb24gZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRVTlNFVElGRiBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 07:53:59 +0000 UTC FinishedAt: 2026-08-01 07:57:02 +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": "5c458073553f0ef74f5c8db1bd459c87c722a299", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "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": "5c458073553f0ef74f5c8db1bd459c87c722a299", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "tun_set_iff", "tun_queue_resize", "tun_attach", "tun_wake_queue" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fc2V0X2lmZiYjMzQ7LAogICAgJiMzNDt0dW5fcXVldWVfcmVzaXplJiMzNDssCiAgICAmIzM0O3R1bl9hdHRhY2gmIzM0OywKICAgICYjMzQ7dHVuX3dha2VfcXVldWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBJRkZfQkFDS1BSRVNTVVJFIGZsYWcgZm9yIFRVTi9UQVAgZGV2aWNlcywgd2hpY2ggbW9kaWZpZXMgdGhlIHF1ZXVlIGhhbmRsaW5nIGxvZ2ljIGluIHR1bl9uZXRfeG1pdCBhbmQgdmhvc3RfbmV0IHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHZpcnR1YWxpemF0aW9uIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUVU5TRVRJRkYgaW9jdGwgYW5kIG5ldHdvcmsgdHJhZmZpYywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFkNTIyOTM1NThhYjUyZDI5OTI2MTAzOTdjMjlkZGJjOGExMmQwYzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjU1OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbmluZGV4IDRkNzA4N2Y3MjdiZTUuLjA0MTU1ZWY5OGU1YmIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbkBAIC0yMDYsNiAmIzQzOzIwNiwyOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjpcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVx1MDAyNmlmcik7XG4gICB9XG4gXG4mIzQzOzMuNCBxZGlzYyBiYWNrcHJlc3N1cmVcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7SUZGX0JBQ0tQUkVTU1VSRSBjYW4gYmUgc2V0IHRvIGVuYWJsZSBxZGlzYyBiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYXG4mIzQzO2Ryb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwsIHNvIGFueSBhdHRhY2hlZCBxZGlzY1xuJiM0MztpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvblxuJiM0Mzt0aHJvdWdoIHRob3NlIGRyb3BzLlxuJiM0MztcbiYjNDM7V2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyBpbnN0ZWFkLCBsZXR0aW5nIHRoZSBxZGlzYyBob2xkIGFuZCBzY2hlZHVsZVxuJiM0MztwYWNrZXRzLCBzbyBpdHMgQVFNLCBzaGFwaW5nIGFuZCBmYWlybmVzcyBhY3R1YWxseSBhcHBseS4gVGhpcyBoZWxwc1xuJiM0Mztwcm90b2NvbHMgbGlrZSBUQ1AsIHdoaWNoIGN1dCB0aHJvdWdocHV0IGluIHJlYWN0aW9uIHRvIHBhY2tldCBkcm9wcy5cbiYjNDM7V2l0aCBJRkZfQkFDS1BSRVNTVVJFLCBkcm9wcyB0aGVuIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIEJhY2twcmVzc3VyZVxuJiM0MztyZXF1aXJlcyBhIHFkaXNjIHRvIGJlIGF0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGggbm9xdWV1ZS5cbiYjNDM7XG4mIzQzO1RoZSB0eHF1ZXVlbGVuIGNhbiBiZSByZWR1Y2VkIGFsb25nc2lkZSB0aGlzIGZsYWcgdG8gZnVydGhlciBzaGlmdFxuJiM0MztidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYnV0IGNvbWVzIGF0IHBvc3NpYmxlXG4mIzQzO3BlcmZvcm1hbmNlIGNvc3QuXG4mIzQzO1xuJiM0MztXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgbmV0d29yayBzdHJlYW1zIGluIHBhcmFsbGVsIHRocm91Z2ggYSBzaW5nbGVcbiYjNDM7VFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkXG4mIzQzO29mIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtLlxuJiM0MztcbiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCA1MWU4MDAwMGJkMGVkLi41YTkyN2JiYmRhMmY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5AQCAtOTgsNyAmIzQzOzk4LDggQEAgc3RhdGljIHZvaWQgdHVuX2RlZmF1bHRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAjZGVmaW5lIFRVTl9GQVNZTkNcdElGRl9BVFRBQ0hfUVVFVUVcbiBcbiAjZGVmaW5lIFRVTl9GRUFUVVJFUyAoSUZGX05PX1BJIHwgSUZGX09ORV9RVUVVRSB8IElGRl9WTkVUX0hEUiB8IFxcXG4tXHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MpXG4mIzQzO1x0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcbiYjNDM7XHRcdCAgICAgIElGRl9CQUNLUFJFU1NVUkUpXG4gXG4gI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4XG4gXG5AQCAtMTQ1LDYgJiM0MzsxNDYsOCBAQCBzdHJ1Y3QgdHVuX2ZpbGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBuZXh0O1xuIFx0c3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkO1xuIFx0c3RydWN0IHB0cl9yaW5nIHR4X3Jpbmc7XG4mIzQzO1x0LyogUHJvdGVjdGVkIGJ5IHR4X3JpbmcuY29uc3VtZXJfbG9jayAqL1xuJiM0MztcdGludCBjb25zX2NudDtcbiBcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcbiB9O1xuIFxuQEAgLTU4OCw4ICYjNDM7NTkxLDE2IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKVxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1tpbmRleF0sXG4gXHRcdFx0XHQgICB0dW4tXHUwMDNldGZpbGVzW3R1bi1cdTAwM2VudW1xdWV1ZXMgLSAxXSk7XG4gXHRcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpbmRleF0pO1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRudGZpbGUtXHUwMDNlcXVldWVfaW5kZXggPSBpbmRleDtcbiBcdFx0bnRmaWxlLVx1MDAzZXhkcF9yeHEucXVldWVfaW5kZXggPSBpbmRleDtcbiYjNDM7XHRcdG50ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4mIzQzO1x0XHQvKiBJZiB0aGUgcmluZyBpcyBub3QgZW1wdHksIHRoZSBjb25zdW1lciB3YWtlcyB0aGUgcXVldWVcbiYjNDM7XHRcdCAqIGFmdGVyIGNvbnN1bWluZyB0aGUgcmVtYWluaW5nIGVudHJpZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChfX3B0cl9yaW5nX2VtcHR5KFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nKSlcbiYjNDM7XHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCBpbmRleCk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbdHVuLVx1MDAzZW51bXF1ZXVlcyAtIDFdLFxuIFx0XHRcdFx0ICAgTlVMTCk7XG4gXG5AQCAtNjg3LDYgJiM0Mzs2OTgsMjAgQEAgc3RhdGljIHZvaWQgdHVuX2RldGFjaF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0LyogRW5zdXJlIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBub3Qgc3RvcCB0aGVcbiYjNDM7XHQgKiBxdWV1ZSBjb25jdXJyZW50bHkgYnkgdGFraW5nIGxvY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuJiM0MztcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgICAgICBib29sIHNraXBfZmlsdGVyLCBib29sIG5hcGksIGJvb2wgbmFwaV9mcmFncyxcbiBcdFx0ICAgICAgYm9vbCBwdWJsaXNoX3R1bilcbkBAIC03MzIsNiAmIzQzOzc1Nyw3IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4ID0gdHVuLVx1MDAzZW51bXF1ZXVlcztcbiBcdHRmaWxlLVx1MDAzZXNvY2tldC5zay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjY9IH5SQ1ZfU0hVVERPV047XG4mIzQzO1x0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG4gXG4gXHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpIHtcbiBcdFx0LyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi9cbkBAIC0xMDA4LDYgJiM0MzsxMDM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7XG4gXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuIFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHRmaWxlID0gcmN1X2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbdHhxXSk7XG5AQCAtMTA2MiwxMyAmIzQzOzEwODksMzQgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbi1cdGlmIChwdHJfcmluZ19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcsIHNrYikpIHtcbiYjNDM7XHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbiYjNDM7XHRpZiAoKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcbiYjNDM7XHRcdG5ldGlmX3R4X3N0b3BfcXVldWUocXVldWUpO1xuJiM0MztcdFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXG4mIzQzO1x0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuJiM0MztcdFx0aWYgKCFfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykpXG4mIzQzO1x0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHQvKiBUaGlzIHNob3VsZCBiZSBhIHJhcmUgY2FzZSBpZiBJRkZfQkFDS1BSRVNTVVJFIGlzIGVuYWJsZWQgYW5kXG4mIzQzO1x0XHQgKiBhIHFkaXNjIGlzIHByZXNlbnQsIGJ1dCBjYW4gaGFwcGVuIGR1ZSB0byBsbHR4LlxuJiM0MztcdFx0ICogU2luY2Ugc2tiX3R4X3RpbWVzdGFtcCgpLCBza2Jfb3JwaGFuKCksXG4mIzQzO1x0XHQgKiBydW5fZWJwZl9maWx0ZXIoKSBhbmQgcHNrYl90cmltKCkgY291bGQgaGF2ZSB0aW5rZXJlZFxuJiM0MztcdFx0ICogd2l0aCB0aGUgU0tCLCByZXR1cm5pbmcgTkVUREVWX1RYX0JVU1kgaXMgdW5zYWZlIGFuZFxuJiM0MztcdFx0ICogd2UgbXVzdCBkcm9wIGluc3RlYWQuXG4mIzQzO1x0XHQgKi9cbiBcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4gXHQvKiBkZXYtXHUwMDNlbGx0eCByZXF1aXJlcyB0byBkbyBvdXIgb3duIHVwZGF0ZSBvZiB0cmFuc19zdGFydCAqL1xuLVx0cXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTtcbiBcdHR4cV90cmFuc19jb25kX3VwZGF0ZShxdWV1ZSk7XG4gXG4gXHQvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi9cbkBAIC0yMTE2LDEzICYjNDM7MjE2NCw1MCBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbiBcdHJldHVybiB0b3RhbDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuJiM0MzsvKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cbiYjNDM7c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfQkFDS1BSRVNTVVJFKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXHUwMDNlZGV2LCB0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCk7XG4mIzQzO1xuJiM0MztcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbiYjNDM7XHRzbXBfbWIoKTtcbiYjNDM7XHRpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7XG4mIzQzO1x0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCAmIzQzOz0gY29uc3VtZWQ7XG4mIzQzO1x0XHRpZiAodGZpbGUtXHUwMDNlY29uc19jbnQgXHUwMDNlPSB0ZmlsZS1cdTAwM2V0eF9yaW5nLnNpemUgLyAyIHx8XG4mIzQzO1x0XHQgICAgX19wdHJfcmluZ19lbXB0eShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSkge1xuJiM0MztcdFx0XHRuZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7XG4mIzQzO1x0XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpwdHI7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuJiM0MztcdHB0ciA9IF9fcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbiYjNDM7XHRpZiAocHRyKVxuJiM0MztcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcHRyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuJiM0MztcdFx0XHQgICBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4ge1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4gXHR2b2lkICpwdHIgPSBOVUxMO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcbiBcdGlmIChwdHIpXG4gXHRcdGdvdG8gb3V0O1xuIFx0aWYgKG5vYmxvY2spIHtcbkBAIC0yMTM0LDcgJiM0MzsyMjE5LDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuIFxuIFx0d2hpbGUgKDEpIHtcbiBcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbi1cdFx0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbiYjNDM7XHRcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4gXHRcdGlmIChwdHIpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuQEAgLTIxNzEsNyAmIzQzOzIyNTYsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFxuIFx0aWYgKCFwdHIpIHtcbiBcdFx0LyogUmVhZCBmcmFtZXMgZnJvbSByaW5nICovXG4tXHRcdHB0ciA9IHR1bl9yaW5nX3JlY3YodGZpbGUsIG5vYmxvY2ssIFx1MDAyNmVycik7XG4mIzQzO1x0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssIFx1MDAyNmVycik7XG4gXHRcdGlmICghcHRyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMjcwNCw3ICYjNDM7Mjc4OSw3IEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuIFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IGVyciwgaTtcbiBcbiBcdGlmICh0ZmlsZS1cdTAwM2VkZXRhY2hlZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMjgzMyw4ICYjNDM7MjkxOCwxMiBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuIFx0LyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluXG4gXHQgKiB4b2ZmIHN0YXRlLlxuIFx0ICovXG4tXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSlcbi1cdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHR1bi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0dW4tXHUwMDNlbnVtcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4mIzQzO1x0XHRcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdHN0cnNjcHkoaWZyLVx1MDAzZWlmcl9uYW1lLCB0dW4tXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzYzMCw2ICYjNDM7MzcxOSwxMyBAQCBzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcbiBcdFx0XHRcdFx0ICBkZXYtXHUwMDNldHhfcXVldWVfbGVuLCBHRlBfS0VSTkVMLFxuIFx0XHRcdFx0XHQgIHR1bl9wdHJfZnJlZSk7XG4gXG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2ldKTtcbiYjNDM7XHRcdFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGtmcmVlKHJpbmdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM3MzgsNiAmIzQzOzM4MzQsMjkgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4gXG4mIzQzOy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuJiM0MztcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW47XG4mIzQzO1xuJiM0MztcdGlmIChmaWxlLVx1MDAzZWZfb3AgIT0gXHUwMDI2dHVuX2ZvcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHRmaWxlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0aWYgKCF0ZmlsZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcbiYjNDM7XHR0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtXHUwMDNldHVuKTtcbiYjNDM7XHRpZiAodHVuKVxuJiM0MztcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcbiYjNDM7XG4gbW9kdWxlX2luaXQodHVuX2luaXQpO1xuIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L25ldC5jIGIvZHJpdmVycy92aG9zdC9uZXQuY1xuaW5kZXggNjk0OWI3MDQxNjZkNS4uM2U3MmI5YzZhZjBjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbkBAIC0xNzYsMTMgJiM0MzsxNzYsMjEgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmaWxlO1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRyeHEtXHUwMDNlaGVhZCA9IDA7XG4tXHRyeHEtXHUwMDNldGFpbCA9IHB0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXHUwMDNlcnhfcmluZywgcnhxLVx1MDAzZXF1ZXVlLFxuLVx0XHRcdFx0XHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbiYjNDM7XHRyeHEtXHUwMDNldGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cdTAwM2VyeF9yaW5nLCByeHEtXHUwMDNlcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgVkhPU1RfTkVUX0JBVENIKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ4cS1cdTAwM2V0YWlsKVxuJiM0MztcdFx0dHVuX3dha2VfcXVldWUoZmlsZSwgcnhxLVx1MDAzZXRhaWwpO1xuJiM0MztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbiBcdHJldHVybiByeHEtXHUwMDNldGFpbDtcbiB9XG4gXG5AQCAtMjA5LDE0ICYjNDM7MjE3LDE1IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXG4gXHRyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gXHUwMDI2bnZxLVx1MDAzZXJ4cTtcbiBcbiBcdGlmICghdmhvc3RfbmV0X2J1Zl9pc19lbXB0eShyeHEpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKG52cSkpXG4mIzQzO1x0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc2ssIG52cSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIG91dDpcbkBAIC0xMDA0LDcgJiM0MzsxMDEzLDcgQEAgc3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAocnZxLVx1MDAzZXJ4X3JpbmcpXG4tXHRcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsocnZxKTtcbiYjNDM7XHRcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsoc2ssIHJ2cSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2ssIGZsYWdzKTtcbiBcdGhlYWQgPSBza2JfcGVlayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaFxuaW5kZXggODAxNjZlYjYyZjQxYy4uNWYzZTIwNmM3YTczNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwge1xuICNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XG4gc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpO1xuJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG5AQCAtNTUsNiAmIzQzOzU2LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG5pbmRleCBkMmMzNjI5YmJlNDUxLi5jOTVlODkxOTAzZjA1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbkBAIC05Niw2ICYjNDM7OTYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuJiM0MzsgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4mIzQzO3tcbiYjNDM7XHRpZiAodW5saWtlbHkoIXItXHUwMDNlc2l6ZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRhdGFfcmFjZShyLVx1MDAzZXF1ZXVlW3ItXHUwMDNlcHJvZHVjZXJdKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBOb3RlOiBjYWxsZXJzIGludm9raW5nIHRoaXMgaW4gYSBsb29wIG11c3QgdXNlIGEgY29tcGlsZXIgYmFycmllcixcbiAgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cbiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZFxuQEAgLTEwMyw4ICYjNDM7MTE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXG4ge1xuLVx0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpIHx8IGRhdGFfcmFjZShyLVx1MDAzZXF1ZXVlW3ItXHUwMDNlcHJvZHVjZXJdKSlcbi1cdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0aW50IHAgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XG4mIzQzO1xuJiM0MztcdGlmIChwKVxuJiM0MztcdFx0cmV0dXJuIHA7XG4gXG4gXHQvKiBNYWtlIHN1cmUgdGhlIHBvaW50ZXIgd2UgYXJlIHN0b3JpbmcgcG9pbnRzIHRvIGEgdmFsaWQgZGF0YS4gKi9cbiBcdC8qIFBhaXJzIHdpdGggdGhlIGRlcGVuZGVuY3kgb3JkZXJpbmcgaW4gX19wdHJfcmluZ19jb25zdW1lLiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggNzlkNTNjN2ExZWJkYy4uYTBkZGM1MGE3NTM0MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjksNiAmIzQzOzY5LDEwIEBAXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1x0MHgwMDIwXG4gLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi9cbiAjZGVmaW5lIElGRl9OT19DQVJSSUVSXHQweDAwNDBcbiYjNDM7LyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuXG4mIzQzOyAqIGF0dGFjaGVkIHFkaXNjIGFwcGxpZXMgYmFja3ByZXNzdXJlIGluc3RlYWQgb2YgYmVpbmcgYnlwYXNzZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcdDB4MDA4MFxuICNkZWZpbmUgSUZGX05PX1BJXHQweDEwMDBcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXHQweDIwMDBcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbmluZGV4IDJlYzA3ZGUxZDczYmUuLjJjODU1MjU3MDRjMTYgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuQEAgLTY3LDYgJiM0Mzs2NywxMCBAQFxuICNkZWZpbmUgSUZGX1RBUFx0XHQweDAwMDJcbiAjZGVmaW5lIElGRl9OQVBJXHQweDAwMTBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiYjNDM7LyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuXG4mIzQzOyAqIGF0dGFjaGVkIHFkaXNjIGFwcGxpZXMgYmFja3ByZXNzdXJlIGluc3RlYWQgb2YgYmVpbmcgYnlwYXNzZWQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcdDB4MDA4MFxuICNkZWZpbmUgSUZGX05PX1BJXHQweDEwMDBcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXHQweDIwMDBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDssCiAgICAmIzM0O3R1bl9xdWV1ZV9yZXNpemUmIzM0OywKICAgICYjMzQ7dHVuX2F0dGFjaCYjMzQ7LAogICAgJiMzNDt0dW5fd2FrZV9xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCB3aGljaCBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gdHVuX25ldF94bWl0IGFuZCB2aG9zdF9uZXQgdG8gc3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdmlydHVhbGl6YXRpb24gZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRVTlNFVElGRiBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWQ1MjI5MzU1OGFiNTJkMjk5MjYxMDM5N2MyOWRkYmM4YTEyZDBjNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDc6NTU6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0CmluZGV4IDRkNzA4N2Y3MjdiZTUuLjA0MTU1ZWY5OGU1YmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0CkBAIC0yMDYsNiAmIzQzOzIwNiwyOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjoKICAgICAgIHJldHVybiBpb2N0bChmZCwgVFVOU0VUUVVFVUUsICh2b2lkICopJmFtcDtpZnIpOwogICB9CiAKJiM0MzszLjQgcWRpc2MgYmFja3ByZXNzdXJlCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO0lGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2MgYmFja3ByZXNzdXJlLiBXaXRob3V0IGl0LCBUWAomIzQzO2Ryb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwsIHNvIGFueSBhdHRhY2hlZCBxZGlzYwomIzQzO2lzIGVmZmVjdGl2ZWx5IGJ5cGFzc2VkIGFuZCBhcHBsaWNhdGlvbnMgb25seSBsZWFybiBhYm91dCBjb25nZXN0aW9uCiYjNDM7dGhyb3VnaCB0aG9zZSBkcm9wcy4KJiM0MzsKJiM0MztXaXRoIGl0LCB0aGUga2VybmVsIHN0b3BzIGluc3RlYWQsIGxldHRpbmcgdGhlIHFkaXNjIGhvbGQgYW5kIHNjaGVkdWxlCiYjNDM7cGFja2V0cywgc28gaXRzIEFRTSwgc2hhcGluZyBhbmQgZmFpcm5lc3MgYWN0dWFsbHkgYXBwbHkuIFRoaXMgaGVscHMKJiM0Mztwcm90b2NvbHMgbGlrZSBUQ1AsIHdoaWNoIGN1dCB0aHJvdWdocHV0IGluIHJlYWN0aW9uIHRvIHBhY2tldCBkcm9wcy4KJiM0MztXaXRoIElGRl9CQUNLUFJFU1NVUkUsIGRyb3BzIHRoZW4gb25seSBvY2N1ciBhcyBhIHJhcmUgcmFjZS4gQmFja3ByZXNzdXJlCiYjNDM7cmVxdWlyZXMgYSBxZGlzYyB0byBiZSBhdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoIG5vcXVldWUuCiYjNDM7CiYjNDM7VGhlIHR4cXVldWVsZW4gY2FuIGJlIHJlZHVjZWQgYWxvbmdzaWRlIHRoaXMgZmxhZyB0byBmdXJ0aGVyIHNoaWZ0CiYjNDM7YnVmZmVyaW5nIGludG8gdGhlIHFkaXNjIGFuZCByZWR1Y2UgYnVmZmVyYmxvYXQsIGJ1dCBjb21lcyBhdCBwb3NzaWJsZQomIzQzO3BlcmZvcm1hbmNlIGNvc3QuCiYjNDM7CiYjNDM7V2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCB0aHJvdWdoIGEgc2luZ2xlCiYjNDM7VFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkCiYjNDM7b2YgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20uCiYjNDM7CiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDUxZTgwMDAwYmQwZWQuLjVhOTI3YmJiZGEyZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC05OCw3ICYjNDM7OTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogI2RlZmluZSBUVU5fRkFTWU5DCUlGRl9BVFRBQ0hfUVVFVUUKIAogI2RlZmluZSBUVU5fRkVBVFVSRVMgKElGRl9OT19QSSB8IElGRl9PTkVfUVVFVUUgfCBJRkZfVk5FVF9IRFIgfCBcCi0JCSAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MpCiYjNDM7CQkgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXAomIzQzOwkJICAgICAgSUZGX0JBQ0tQUkVTU1VSRSkKIAogI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4CiAKQEAgLTE0NSw2ICYjNDM7MTQ2LDggQEAgc3RydWN0IHR1bl9maWxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkOwogCXN0cnVjdCBwdHJfcmluZyB0eF9yaW5nOwomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovCiYjNDM7CWludCBjb25zX2NudDsKIAlzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7CiB9OwogCkBAIC01ODgsOCAmIzQzOzU5MSwxNiBAQCBzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbikKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHR1bi0mZ3Q7dGZpbGVzW2luZGV4XSwKIAkJCQkgICB0dW4tJmd0O3RmaWxlc1t0dW4tJmd0O251bXF1ZXVlcyAtIDFdKTsKIAkJbnRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tJmd0O3RmaWxlc1tpbmRleF0pOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCQludGZpbGUtJmd0O3F1ZXVlX2luZGV4ID0gaW5kZXg7CiAJCW50ZmlsZS0mZ3Q7eGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4OwomIzQzOwkJbnRmaWxlLSZndDtjb25zX2NudCA9IDA7CiYjNDM7CQkvKiBJZiB0aGUgcmluZyBpcyBub3QgZW1wdHksIHRoZSBjb25zdW1lciB3YWtlcyB0aGUgcXVldWUKJiM0MzsJCSAqIGFmdGVyIGNvbnN1bWluZyB0aGUgcmVtYWluaW5nIGVudHJpZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChfX3B0cl9yaW5nX2VtcHR5KCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nKSkKJiM0MzsJCQluZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi0mZ3Q7ZGV2LCBpbmRleCk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHR1bi0mZ3Q7dGZpbGVzW3R1bi0mZ3Q7bnVtcXVldWVzIC0gMV0sCiAJCQkJICAgTlVMTCk7CiAKQEAgLTY4Nyw2ICYjNDM7Njk4LDIwIEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdHVuX2ZvcmNlX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKJiM0MzsJCQkJIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpCiYjNDM7ewomIzQzOwkvKiBFbnN1cmUgdGhhdCB0aGUgcHJvZHVjZXIgY2FuIG5vdCBzdG9wIHRoZQomIzQzOwkgKiBxdWV1ZSBjb25jdXJyZW50bHkgYnkgdGFraW5nIGxvY2tzLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwomIzQzOwluZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi0mZ3Q7ZGV2LCB0ZmlsZS0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwl0ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgYm9vbCBza2lwX2ZpbHRlciwgYm9vbCBuYXBpLCBib29sIG5hcGlfZnJhZ3MsCiAJCSAgICAgIGJvb2wgcHVibGlzaF90dW4pCkBAIC03MzIsNiAmIzQzOzc1Nyw3IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCXRmaWxlLSZndDtxdWV1ZV9pbmRleCA9IHR1bi0mZ3Q7bnVtcXVldWVzOwogCXRmaWxlLSZndDtzb2NrZXQuc2stJmd0O3NrX3NodXRkb3duICZhbXA7PSB+UkNWX1NIVVRET1dOOwomIzQzOwl0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTsKIAogCWlmICh0ZmlsZS0mZ3Q7ZGV0YWNoZWQpIHsKIAkJLyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi8KQEAgLTEwMDgsNiAmIzQzOzEwMzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7CiAJc3RydWN0IHR1bl9maWxlICp0ZmlsZTsKIAlpbnQgbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWludCByZXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbdHhxXSk7CkBAIC0xMDYyLDEzICYjNDM7MTA4OSwzNCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZl9yZXNldF9jdChza2IpOwogCi0JaWYgKHB0cl9yaW5nX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZywgc2tiKSkgewomIzQzOwlxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJcmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcsIHNrYik7CiYjNDM7CWlmICgodHVuLSZndDtmbGFncyAmYW1wOyBJRkZfQkFDS1BSRVNTVVJFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpID09IC1FTk9TUEMpIHsKJiM0MzsJCW5ldGlmX3R4X3N0b3BfcXVldWUocXVldWUpOwomIzQzOwkJLyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovCiYjNDM7CQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwomIzQzOwkJaWYgKCFfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZykpCiYjNDM7CQkJbmV0aWZfdHhfd2FrZV9xdWV1ZShxdWV1ZSk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJLyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgSUZGX0JBQ0tQUkVTU1VSRSBpcyBlbmFibGVkIGFuZAomIzQzOwkJICogYSBxZGlzYyBpcyBwcmVzZW50LCBidXQgY2FuIGhhcHBlbiBkdWUgdG8gbGx0eC4KJiM0MzsJCSAqIFNpbmNlIHNrYl90eF90aW1lc3RhbXAoKSwgc2tiX29ycGhhbigpLAomIzQzOwkJICogcnVuX2VicGZfZmlsdGVyKCkgYW5kIHBza2JfdHJpbSgpIGNvdWxkIGhhdmUgdGlua2VyZWQKJiM0MzsJCSAqIHdpdGggdGhlIFNLQiwgcmV0dXJuaW5nIE5FVERFVl9UWF9CVVNZIGlzIHVuc2FmZSBhbmQKJiM0MzsJCSAqIHdlIG11c3QgZHJvcCBpbnN0ZWFkLgomIzQzOwkJICovCiAJCWRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZVTExfUklORzsKIAkJZ290byBkcm9wOwogCX0KIAogCS8qIGRldi0mZ3Q7bGx0eCByZXF1aXJlcyB0byBkbyBvdXIgb3duIHVwZGF0ZSBvZiB0cmFuc19zdGFydCAqLwotCXF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7CiAJdHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTsKIAogCS8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqLwpAQCAtMjExNiwxMyAmIzQzOzIxNjQsNTAgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCiAJcmV0dXJuIHRvdGFsOwogfQogCi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpCiYjNDM7LyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovCiYjNDM7c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAomIzQzOwkJCSAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwomIzQzOwomIzQzOwlpZiAoISh0dW4tJmd0O2ZsYWdzICZhbXA7IElGRl9CQUNLUFJFU1NVUkUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi0mZ3Q7ZGV2LCB0ZmlsZS0mZ3Q7cXVldWVfaW5kZXgpOwomIzQzOwomIzQzOwkvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovCiYjNDM7CXNtcF9tYigpOwomIzQzOwlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7CiYjNDM7CQl0ZmlsZS0mZ3Q7Y29uc19jbnQgJiM0Mzs9IGNvbnN1bWVkOwomIzQzOwkJaWYgKHRmaWxlLSZndDtjb25zX2NudCAmZ3Q7PSB0ZmlsZS0mZ3Q7dHhfcmluZy5zaXplIC8gMiB8fAomIzQzOwkJICAgIF9fcHRyX3JpbmdfZW1wdHkoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZykpIHsKJiM0MzsJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CiYjNDM7CQkJdGZpbGUtJmd0O2NvbnNfY250ID0gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKQomIzQzO3sKJiM0MzsJdm9pZCAqcHRyOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJcHRyID0gX19wdHJfcmluZ19jb25zdW1lKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpOwomIzQzOwlpZiAocHRyKQomIzQzOwkJX190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJcmV0dXJuIHB0cjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKJiM0MzsJCQkgICBpbnQgbm9ibG9jaywgaW50ICplcnIpCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJdm9pZCAqcHRyID0gTlVMTDsKIAlpbnQgZXJyb3IgPSAwOwogCi0JcHRyID0gcHRyX3JpbmdfY29uc3VtZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKTsKJiM0MzsJcHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTsKIAlpZiAocHRyKQogCQlnb3RvIG91dDsKIAlpZiAobm9ibG9jaykgewpAQCAtMjEzNCw3ICYjNDM7MjIxOSw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycikKIAogCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZyk7CiYjNDM7CQlwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpOwogCQlpZiAocHRyKQogCQkJYnJlYWs7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtMjE3MSw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsCiAKIAlpZiAoIXB0cikgewogCQkvKiBSZWFkIGZyYW1lcyBmcm9tIHJpbmcgKi8KLQkJcHRyID0gdHVuX3JpbmdfcmVjdih0ZmlsZSwgbm9ibG9jaywgJmFtcDtlcnIpOwomIzQzOwkJcHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCAmYW1wO2Vycik7CiAJCWlmICghcHRyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0yNzA0LDcgJiM0MzsyNzg5LDcgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgZXJyOwomIzQzOwlpbnQgZXJyLCBpOwogCiAJaWYgKHRmaWxlLSZndDtkZXRhY2hlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yODMzLDggJiM0MzsyOTE4LDEyIEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpCiAJLyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluCiAJICogeG9mZiBzdGF0ZS4KIAkgKi8KLQlpZiAobmV0aWZfcnVubmluZyh0dW4tJmd0O2RldikpCi0JCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tJmd0O2Rldik7CiYjNDM7CWlmIChuZXRpZl9ydW5uaW5nKHR1bi0mZ3Q7ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHR1bi0mZ3Q7bnVtcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tJmd0O3RmaWxlc1tpXSk7CiYjNDM7CQkJdHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXN0cnNjcHkoaWZyLSZndDtpZnJfbmFtZSwgdHVuLSZndDtkZXYtJmd0O25hbWUpOwogCXJldHVybiAwOwpAQCAtMzYzMCw2ICYjNDM7MzcxOSwxMyBAQCBzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bikKIAkJCQkJICBkZXYtJmd0O3R4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCwKIAkJCQkJICB0dW5fcHRyX2ZyZWUpOwogCiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgdHVuLSZndDtudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi0mZ3Q7dGZpbGVzW2ldKTsKJiM0MzsJCQl0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWtmcmVlKHJpbmdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzczOCw2ICYjNDM7MzgzNCwyOSBAQCBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7CiAKJiM0MzsvKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi8KJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlOwomIzQzOwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwomIzQzOwomIzQzOwlpZiAoZmlsZS0mZ3Q7Zl9vcCAhPSAmYW1wO3R1bl9mb3BzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0ZmlsZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJaWYgKCF0ZmlsZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwl0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtJmd0O3R1bik7CiYjNDM7CWlmICh0dW4pCiYjNDM7CQlfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTsKJiM0MzsKIG1vZHVsZV9pbml0KHR1bl9pbml0KTsKIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggNjk0OWI3MDQxNjZkNS4uM2U3MmI5YzZhZjBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xNzYsMTMgJiM0MzsxNzYsMjEgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSkKIHsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGUgPSBzay0mZ3Q7c2tfc29ja2V0LSZndDtmaWxlOwogCXN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSAmYW1wO252cS0mZ3Q7cnhxOwogCiAJcnhxLSZndDtoZWFkID0gMDsKLQlyeHEtJmd0O3RhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLSZndDtyeF9yaW5nLCByeHEtJmd0O3F1ZXVlLAotCQkJCQkgICAgICBWSE9TVF9ORVRfQkFUQ0gpOwomIzQzOwlzcGluX2xvY2soJmFtcDtudnEtJmd0O3J4X3JpbmctJmd0O2NvbnN1bWVyX2xvY2spOwomIzQzOwlyeHEtJmd0O3RhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtJmd0O3J4X3JpbmcsIHJ4cS0mZ3Q7cXVldWUsCiYjNDM7CQkJCQkgICAgICAgVkhPU1RfTkVUX0JBVENIKTsKJiM0MzsKJiM0MzsJaWYgKHJ4cS0mZ3Q7dGFpbCkKJiM0MzsJCXR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS0mZ3Q7dGFpbCk7CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bnZxLSZndDtyeF9yaW5nLSZndDtjb25zdW1lcl9sb2NrKTsKIAlyZXR1cm4gcnhxLSZndDt0YWlsOwogfQogCkBAIC0yMDksMTQgJiM0MzsyMTcsMTUgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZvaWQgKnB0cikKIAlyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCSAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiB7CiAJc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9ICZhbXA7bnZxLSZndDtyeHE7CiAKIAlpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKQomIzQzOwlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSkKIAkJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTEwMDQsNyAmIzQzOzEwMTMsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocnZxLSZndDtyeF9yaW5nKQotCQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7CiYjNDM7CQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7CiAJaGVhZCA9IHNrYl9wZWVrKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKaW5kZXggODAxNjZlYjYyZjQxYy4uNWYzZTIwNmM3YTczNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC0yMiw2ICYjNDM7MjIsNyBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwgewogI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSkKIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopOwogc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpOwomIzQzO3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cikKIHsKQEAgLTU1LDYgJiM0Mzs1Niw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmYpCiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cikKIHsKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgKaW5kZXggZDJjMzYyOWJiZTQ1MS4uYzk1ZTg5MTkwM2YwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaApAQCAtOTYsNiAmIzQzOzk2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcikKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsCiYjNDM7ICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcikKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseSghci0mZ3Q7c2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGRhdGFfcmFjZShyLSZndDtxdWV1ZVtyLSZndDtwcm9kdWNlcl0pKQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLAogICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZApAQCAtMTAzLDggJiM0MzsxMTcsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKQogICovCiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpCiB7Ci0JaWYgKHVubGlrZWx5KCFyLSZndDtzaXplKSB8fCBkYXRhX3JhY2Uoci0mZ3Q7cXVldWVbci0mZ3Q7cHJvZHVjZXJdKSkKLQkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWludCBwID0gX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHIpOwomIzQzOwomIzQzOwlpZiAocCkKJiM0MzsJCXJldHVybiBwOwogCiAJLyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovCiAJLyogUGFpcnMgd2l0aCB0aGUgZGVwZW5kZW5jeSBvcmRlcmluZyBpbiBfX3B0cl9yaW5nX2NvbnN1bWUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKaW5kZXggNzlkNTNjN2ExZWJkYy4uYTBkZGM1MGE3NTM0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaApAQCAtNjksNiAmIzQzOzY5LDEwIEBACiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTCTB4MDAyMAogLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi8KICNkZWZpbmUgSUZGX05PX0NBUlJJRVIJMHgwMDQwCiYjNDM7LyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuCiYjNDM7ICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkUJMHgwMDgwCiAjZGVmaW5lIElGRl9OT19QSQkweDEwMDAKIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi8KICNkZWZpbmUgSUZGX09ORV9RVUVVRQkweDIwMDAKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaAppbmRleCAyZWMwN2RlMWQ3M2JlLi4yYzg1NTI1NzA0YzE2IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCkBAIC02Nyw2ICYjNDM7NjcsMTAgQEAKICNkZWZpbmUgSUZGX1RBUAkJMHgwMDAyCiAjZGVmaW5lIElGRl9OQVBJCTB4MDAxMAogI2RlZmluZSBJRkZfTkFQSV9GUkFHUwkweDAwMjAKJiM0MzsvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW4KJiM0MzsgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRQkweDAwODAKICNkZWZpbmUgSUZGX05PX1BJCTB4MTAwMAogLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqLwogI2RlZmluZSBJRkZfT05FX1FVRVVFCTB4MjAwMAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDYwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBUVU4vVEFQIGFuZCB2aG9zdF9uZXQgQmFja3ByZXNzdXJlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIFRVTi9UQVAgYW5kIHZob3N0X25ldCBkcml2ZXJzLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBzcGVjaWZpY2FsbHkgZm9yIFRVTi9UQVAgZGV2aWNlcy4gVGhlIGtleSB0aGluZyBpcyB0aGF0LCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBwYWNrZXQgZHJvcHBpbmcgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbCwgaXQmIzM5O2xsIHN0b3AgdGhlIHF1ZXVlIGFuZCBhbGxvdyB0aGUgYXR0YWNoZWQgcWRpc2MgdG8gbWFuYWdlIHRoZSBiYWNrcHJlc3N1cmUuIFRoYXQmIzM5O3MgYSBwcmV0dHkgaW50ZXJlc3RpbmcgY2hhbmdlIHRvIGhvdyB0aGVzZSBkcml2ZXJzIGJlaGF2ZSB1bmRlciBsb2FkLgoKTG9va3MgbGlrZSB0aGUgY2hhbmdlcyB0b3VjaCBhIGZhaXIgbnVtYmVyIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHNvbWUgaGVhZGVyIGZpbGVzIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLCBhbmQgZXZlbiB0aGUgVUFQSSBkZWZpbml0aW9ucy4gSSBjYW4gY29uZmlybSB0aGlzIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIGV4cG9zZWQgdGhyb3VnaCB0aGUgVFVOU0VUSUZGIGlvY3RsIG9uIGAvZGV2L25ldC90dW5gIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZCBmb3IgYWNjZXNzaWJpbGl0eS4gVGhleSYjMzk7dmUgYWxzbyBtb2RpZmllZCB0aGUgdmhvc3RfbmV0IGRyaXZlciB0byBoYW5kbGUgcXVldWUgd2FraW5nIHdoZW4gY29uc3VtaW5nIHBhY2tldHMgZnJvbSB0aGUgcmluZywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBvdmVyYWxsIGZsb3cuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGNvbnNpZGVyIGZ1enppbmc/IEdpdmVuIHRoYXQgaXQgbW9kaWZpZXMgY29yZSBUVU4vVEFQIGxvZ2ljIGFuZCB0aG9zZSBhcmUgaGlnaGx5IHJlYWNoYWJsZSB0YXJnZXRzLCAqZXNwZWNpYWxseSogZ2l2ZW4gaG93IGhlYXZpbHkgdGhleSYjMzk7cmUgZnV6emVkLCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUuIFRoZSBuZXcgYElGRl9CQUNLUFJFU1NVUkVgIGZsYWcgaXMgYWRkZWQgdG8gYFRVTl9GRUFUVVJFU2AsIHNvIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVlbiBwcm9wZXJseSBpbnRlZ3JhdGVkLiBJIHNlZSB0aGUgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIGFzIGB0dW5fbmV0X3htaXRgLCBgdHVuX3JpbmdfcmVjdmAsIGB0dW5fc2V0X2lmZmAsIGB0dW5fcXVldWVfcmVzaXplYCwgYHZob3N0X25ldF9idWZfcHJvZHVjZWAsIGFuZCBgdmhvc3RfbmV0X2J1Zl9wZWVrYCB3aGljaCBpcyBhIHN1YnN0YW50aWFsIGltcGFjdCBvbiB0aGUgY29yZSBsb2dpYyBhbmQgY3JpdGljYWwgYXJlYXMgZm9yIHRlc3RpbmcuIEkgYWxzbyBzZWUgbmV3IGZ1bmN0aW9ucyBsaWtlIGB0dW5fZm9yY2Vfd2FrZV9xdWV1ZWAsIGBfX3R1bl93YWtlX3F1ZXVlYCwgYHR1bl9yaW5nX2NvbnN1bWVgLCBhbmQgYHR1bl93YWtlX3F1ZXVlYCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzIGJlaW5nIGNoYW5nZWQuCgpUaW1lIHRvIGxvb2sgaW50byB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIHRvIHdvcmsuIE9idmlvdXNseSwgVFVOL1RBUCBpdHNlbGYgbmVlZHMgYENPTkZJR19UVU5gLCBhbmQgdmhvc3RfbmV0LCByZXF1aXJlcyBgQ09ORklHX1ZIT1NUX05FVGAuIExldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhvc2UgcmVxdWlyZW1lbnRzIGV4aXN0IGluIGBkcml2ZXJzL25ldC90dW4uY2AgYW5kIGBkcml2ZXJzL3Zob3N0L25ldC5jYCwgc28gSSBzaG91bGQgYmUgZ29vZCB0byBnby4KCkFscmlnaHQsIEkmIzM5O2xsIHVzZSB0aGUgZGVmYXVsdCBncmVwcGVyIHRvIHZlcmlmeSBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1OTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFZIT1NUX05FVCBJbnF1aXJ5KioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aG91Z2h0IHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gY2hlY2sgaW50byBgVkhPU1RfTkVUYC4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IHdoZW4gdHJvdWJsZXNob290aW5nIHNvbWV0aGluZyBsaWtlIHRoaXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdGUgb2YgdGhhdCBzdWJzeXN0ZW0sIGl0IHVzdWFsbHkgaGFzIHNvbWUgdGVsbCB0YWxlIGxvZ3MgYW5kIGlzc3VlcyBpZiBub3QgY29uZmlndXJlZCBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpdHMgcHJlc2VuY2UsIGNvbmZpZ3VyYXRpb24sIGFuZCBzdGF0dXMgb2YgYW55IGFzc29jaWF0ZWQgbmV0d29ya2luZyBjb21wb25lbnRzLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGZvciBhbnkgb2J2aW91cyBlcnJvciBtZXNzYWdlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIGl0LiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9ORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGUgZmllbGQ6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlOiBWSE9TVF9ORVQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFZIT1NUX05FVCBtb2R1bGUsIGluc2lkZSBhbmQgb3V0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogd2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSBjYW4mIzM5O3QganVzdCBkaXZlIGluIHdpdGhvdXQga25vd2luZyB0aGUgZm91bmRhdGlvbiBpdCYjMzk7cyBidWlsdCBvbi4gSSBoYXZlIHRvIHRyYWNlIGV2ZXJ5dGhpbmcgYW5kIHVuZGVyc3RhbmQgdGhlIHdob2xlIHBpY3R1cmUuIEkgbmVlZCB0byBpZGVudGlmeSBhbnkgb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igc3lzdGVtIGNvbXBvbmVudHMgdGhpcyBkZXBlbmRzIG9uLiBUaGlzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZywgb3B0aW1pemluZywgYW5kIGV2ZW4ganVzdCBmb3IgYXJjaGl0ZWN0aW5nIG15IGFwcHJvYWNoIHRvIHdoYXRldmVyIEkmIzM5O20gd29ya2luZyBvbi4gRGVwZW5kZW5jeSBkaXNjb3ZlcnkgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGdldHRpbmcgdGhlIGxheSBvZiB0aGUgbGFuZCwgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgZW5zdXJpbmcgcHJvcGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbm9uLW5lZ290aWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDtcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNjpcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBFVkVOVEZEIFx1MDAyNlx1MDAyNiAoVFVOIHx8ICFUVU4pIFx1MDAyNlx1MDAyNiAoVEFQIHx8ICFUQVApXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzctXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00OS1cdHNlbGVjdCBWSE9TVFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01Ny1cdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1ODpcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OS1cdHNlbGVjdCBWSE9TVFxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz03MD1jb25maWcgVkhPU1RfVkRQQVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTcxLVx0dHJpc3RhdGUgXCYjMzQ7Vmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcJiMzNDtcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MjpcdGRlcGVuZHMgb24gRVZFTlRGRFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTczLVx0c2VsZWN0IFZIT1NUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzQtXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzU6XHRkZXBlbmRzIG9uIFZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03Ni1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBUVU5gIGFuZCBgVkhPU1RfTkVUYCBhcyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLiBXYWl0LCB3aGF0IGFib3V0IGBFVkVOVEZEYD8gSXQmIzM5O3MgdXN1YWxseSBlbmFibGVkLCBidXQganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgaW5jbHVkZSBpdCBpbiBteSB0aGlua2luZy4gTm93LCBhIHF1aWNrIGNoZWNr4oCmIHllcCwgYFZIT1NUX05FVGAgKmRvZXMqIGRlcGVuZCBvbiBib3RoIGBORVRgIGFuZCBgRVZFTlRGRGAuIEFuZCB3ZSBhbHJlYWR5IGtub3cgYE5FVGAgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQmIzM5O3MgZ29vZC4KClJpZ2h0LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdGhlIHBhdGNoIGlzIHRvdWNoaW5nLiBJIHNlZSBpdCYjMzk7cyBtb2RpZnlpbmc6CgoqICAgYHR1bl9uZXRfeG1pdGAKKiAgIGB0dW5fcmluZ19yZWN2YCAod2l0aCBhIGNoYW5nZSBub3cgdGFraW5nIGB0dW5gIGFuZCBgdGZpbGVgKSAtIGJ1dCBpdCBpcyBzdGF0aWMKKiAgIGB0dW5fc2V0X2lmZmAgLSB3aGljaCBpcyBzdGF0aWMsIGJ1dCByZWFjaGFibGUgdmlhIGB0dW5fY2hyX2lvY3RsYC4KKiAgIGB0dW5fcXVldWVfcmVzaXplYCAtIHRoaXMgaXMgYWxzbyBzdGF0aWMsIHJlYWNoYWJsZSB2aWEgYHR1bl9jaHJfaW9jdGxgLgoqICAgYHR1bl93YWtlX3F1ZXVlYCAtIGFoYSwgdGhpcyBvbmUmIzM5O3MgYW4gZXhwb3J0ZWQgc3ltYm9sIQoqICAgYHZob3N0X25ldF9idWZfcHJvZHVjZWAgLSB3aGljaCBpcyBzdGF0aWMKKiAgIGB2aG9zdF9uZXRfYnVmX3BlZWtgIC0gYW5kIHRoaXMgb25lIGlzIGFsc28gc3RhdGljCgpPa2F5LCBzbyB0aGUgbW9zdCBpbXBvcnRhbnQgYXJlYXMgdG8gZm9jdXMgb24gc2VlbSB0byBiZToKCiogICBgdHVuX25ldF94bWl0YCDigJMgYWx3YXlzIGltcG9ydGFudCBpbiBuZXR3b3JrIGRyaXZlcnMKKiAgIGB0dW5fd2FrZV9xdWV1ZWAg4oCTIGNyaXRpY2FsIGJlY2F1c2UgaXQmIzM5O3MgZXhwb3J0ZWQsIGFuZCB0aGVyZWZvcmUgaGFzIGV4dGVybmFsIGRlcGVuZGVuY2llcy4KKiAgIGB0dW5fY2hyX2lvY3RsYCDigJMgYmVjYXVzZSBpdCB0b3VjaGVzIGJvdGggYHR1bl9zZXRfaWZmYCBhbmQgYHR1bl9xdWV1ZV9yZXNpemVgCiogICBBbmQgZmluYWxseSwgSSBuZWVkIHRvIGxvb2sgaW50byBgdmhvc3QvbmV0LmNgLCBiZWNhdXNlIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIGNoYW5nZSB0byB0aGUgYHZob3N0X25ldGAgaW9jdGxzIGFuZCBvcGVuIG9yIHJlbGVhc2UgZnVuY3Rpb25zLiBXYWl0IC0gaXQgbG9va3MgbGlrZSBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBjYWxsZWQgYnkgYHZob3N0X25ldF9idWZfcGVla2AuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgY2FsbGVkIGJ5IGBwZWVrX2hlYWRfbGVuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgc29tZXRoaW5nIGxpa2UgYGhhbmRsZV9yeGAgaW4gYHZob3N0L25ldC5jYC4KCk9rYXksIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgcGVla19oZWFkX2xlbmAgaXMgdXNlZC4gVGltZSB0byBkaXZlIGludG8gYHZob3N0L25ldC5jYCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVla19oZWFkX2xlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz05ODM9c3RhdGljIHZvaWQgaGFuZGxlX3R4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMDgtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDk6c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAxMC17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDI5LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDMwOnN0YXRpYyBpbnQgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMzEtXHRcdFx0XHQgICAgICBib29sICpidXN5bG9vcF9pbnRyLCB1bnNpZ25lZCBpbnQgKmNvdW50KVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzNi1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR2cSA9IFx1MDAyNnRudnEtXHUwMDNldnE7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMzc6XHRpbnQgbGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMzgtXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDQ1LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDQ2Olx0XHRsZW4gPSBwZWVrX2hlYWRfbGVuKHJudnEsIHNrKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTA0Ny1cdH1cbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTExNDk9c3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEyMDEtXHRkbyB7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjEyMDI6XHRcdHNvY2tfbGVuID0gdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4obmV0LCBzb2NrLVx1MDAzZXNrLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjAzLVx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmJ1c3lsb29wX2ludHIsIFx1MDAyNmNvdW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBWaG9zdCBSWCBQcm9jZXNzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCBvZiBpbmNvbWluZyBwYWNrZXRzIGluIHRoaXMgdmhvc3Qgc2V0dXAuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJlY2VpdmUgcGF0aCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgZnJvbSB0aGUgZ3Vlc3QgVk0gZ2V0cyBpbnRvIHRoZSBob3N0LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYGhhbmRsZV9yeGAgaW4gYHZob3N0L25ldC5jYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiBmb3IgdGhlIFJYIHNpZGUuIE5vdywgYSBzbGlnaHQgd3JpbmtsZS4uLiBgaGFuZGxlX3J4YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0LCBhbmQgbGlrZWx5ICpub3QqIGRpcmVjdGx5IGV4cG9zZWQgdG8sIHNheSwgYW4gaW50ZXJydXB0IGhhbmRsZXIuIEl0JiMzOTtzIHByb2JhYmx5IGJlaW5nIGludm9rZWQgYnkgc29tZSB3b3JrZXIgdGhyZWFkIG9yIHNpbWlsYXIgbWVjaGFuaXNtLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiBpdCYjMzk7cyBnZXR0aW5nIGNhbGxlZC4KCk9rYXksIGxldCYjMzk7cyBiYWNrdHJhY2sgYSBiaXQuIFRoZSB0eXBpY2FsIHZob3N0IHNldHVwIGludm9sdmVzIGlvY3RscyBmb3IgY29uZmlndXJhdGlvbi4gQ291bGQgaXQgYmUgdHJpZ2dlcmVkIGJ5IGB2aG9zdF9uZXRfaW9jdGxgIG9yIG1heWJlIGB2aG9zdF9uZXRfY2hyX3dyaXRlYD8gTm8sIEkmIzM5O20gcHJldHR5IHN1cmUgYHZob3N0X25ldF9pb2N0bGAgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIHNldHRpbmcgdXAgdGhlIGJhY2tlbmQsIGNvbmZpZ3VyaW5nIG1lbW9yeSByZWdpb25zLCBhbmQgdGhpbmdzIGxpa2UgdGhhdCwgbm90IG5lY2Vzc2FyaWx5IGZvciBkaXJlY3QgcGFja2V0IGluamVjdGlvbi4gU28sIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlIGd1ZXN0JiMzOTtzIGRhdGEgaXMgcHVzaGVkIGludG8gdGhlIGhvc3QuCgpBbHJpZ2h0LCBhIGxpa2VseSBjYW5kaWRhdGUgaGVyZSBpcyB0aGUgVFVOIGRldmljZS4gTGV0IG1lIGNoZWNrIHRoZSBgdHVuX2Nocl9pb2N0bGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L3R1bi5jYC4gSXQmIzM5O3MgcG9zc2libGUgdGhlIHNldHVwIGludm9sdmVzIHNvbWUgc29ydCBvZiBpb2N0bCBjYWxsIHRvIHNlbmQgdGhlIGRhdGEgaW50byB0aGUgbmV0d29yayBzdGFjay4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0zMTAxPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTM4LVxuZHJpdmVycy9uZXQvdHVuLmM6MzEzOTpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25ldC90dW4uYy0zMTQwLVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMjE1LVxuZHJpdmVycy9uZXQvdHVuLmM6MzIxNjpcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O3R1bl9jaHJfaW9jdGwgY21kICV1XFxuXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzIxNy1cbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDMyLVxuZHJpdmVycy9uZXQvdHVuLmM6MzQzMzpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQzNC1cdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtMzQzNS17XG5kcml2ZXJzL25ldC90dW4uYzozNDM2Olx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM0MzctfVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0NDA9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ2My1cdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzQ2NDpcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XG5kcml2ZXJzL25ldC90dW4uYy0zNDY1LX1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM1NjYtXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG5kcml2ZXJzL25ldC90dW4uYzozNTY3Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHR1bl9jaHJfaW9jdGwsXG5kcml2ZXJzL25ldC90dW4uYy0zNTY4LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBUVU4vVkhPU1QgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIG15IGZvY3VzIG5lZWRzIHRvIGJlIGxhc2VyLXNoYXJwIGhlcmUuIEl0IGxvb2tzIGxpa2UgYHR1bl9jaHJfaW9jdGxgIGlzIHRoZSBjZW50cmFsIElPQ1RMIGhhbmRsZXIgaW4gdGhpcyB3aG9sZSBUVU4gc2V0dXAuIEtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBmZXcgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dDogYHR1bl9uZXRfeG1pdGAsIHdoaWNoIGhhbmRsZXMgdGhlIG5ldHdvcmsgdHJhbnNtaXNzaW9uOyBgdHVuX2Nocl9pb2N0bGAsIG9mIGNvdXJzZSwgaXMgYSBjb250cm9sIHBsYW5lIGVudHJ5cG9pbnQuIGB0dW5fd2FrZV9xdWV1ZWAgYW5kIGZpbmFsbHkgYHZob3N0X25ldF9pb2N0bGAgd2hpY2ggaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGluZ3MgaW50ZWdyYXRlIHdpdGggdmhvc3QuCgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB2aG9zdF9uZXRfaW9jdGxgIGFuZCBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoZXJlIHRoYXQgaXMgZGVmaW5lZC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayB3b3VsZCBiZSBpbiB0aGUgYGRyaXZlcnMvdmhvc3QvbmV0LmNgIGZpbGUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTcyNj1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNzQ2LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxNzQ3OnN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xNzQ4LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgwLVx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfbmV0X2Nocl9wb2xsLFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODgxOlx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3RfbmV0X2lvY3RsLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgyLVx0LmNvbXBhdF9pb2N0bCAgID0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRVTiBEZXZpY2UgQmFja3ByZXNzdXJlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZywgd2hpY2ggaXMgZW5hYmxlZCB1c2luZyB0aGUgYFRVTlNFVElGRmAgaW9jdGwuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgd2hlbiB0aGlzIGZsYWcgaXMgYWN0aXZlLCB0aGUgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24gd2lsbCBub3cgYWN0aXZlbHkgaGFsdCB0aGUgdHJhbnNtaXNzaW9uIHF1ZXVlIGlmIHRoZSByaW5nIGJ1ZmZlciBmaWxscyB1cC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS4KCk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgaG93IHRoaXMgaGFsdGVkIHF1ZXVlIGdldHMgcmVzdGFydGVkLiBUaGUgbG9naWMgaGluZ2VzIG9uIHR3byBrZXkgZnVuY3Rpb25zLiBGaXJzdCwgYHZob3N0X25ldGAsIHdoZW4gaXQgY29uc3VtZXMgcGFja2V0cyBmcm9tIHRoZSBUVU4gZGV2aWNlLCBpcyBnb2luZyB0byBjYWxsIGB0dW5fd2FrZV9xdWV1ZWAuICBTZWNvbmQsIGB0dW5fZG9fcmVhZGAsIHdoaWNoIGFsc28gY29uc3VtZXMgcGFja2V0cywgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBgdHVuX3dha2VfcXVldWVgLiAgSSBrbm93IGB0dW5fZG9fcmVhZGAgaXMgY2FsbGVkIGZyb20gYHR1bl9jaHJfcmVhZF9pdGVyYCwgc28gdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBhY3R1YWxseSBwdWxsZWQgZnJvbSB0aGUgZGV2aWNlLiBMZXQgbWUgZHJpbGwgZG93biBpbnRvIGB0dW5fY2hyX3JlYWRfaXRlcmAgYW5kIGl0cyBjYWxsIHRvIGB0dW5fZG9fcmVhZGAgYW5kIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfcmVhZF9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjI0NT1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIyODEtXG5kcml2ZXJzL25ldC90dW4uYzoyMjgyOnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmRyaXZlcnMvbmV0L3R1bi5jLTIyODMte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM1NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XG5kcml2ZXJzL25ldC90dW4uYy0zNTYzLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvdHVuLmM6MzU2NDpcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYy0zNTY1LVx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUVU4vVkhPU1QgSG90IFBhdGhzIGZvciBTeW1ib2xpYyBGb2N1cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHN5bWJvbHMgdG8gZm9jdXMgb24gZm9yIHRoaXMgYW5hbHlzaXMgb2YgdGhlIFRVTi9WSE9TVCBjb2RlLiBgdHVuX2Nocl9yZWFkX2l0ZXJgIGlzIHRoZSByZWFkIGhhbmRsZXIsIHNvIGl0JiMzOTtzIGRlZmluaXRlbHkgb24gbXkgbGlzdC4gVGhlIGluc3RydWN0aW9ucyBzdWdnZXN0IEkgYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gZ2V0IGEgbW9yZSBmb2N1c2VkIGFuYWx5c2lzLgoKVGhlIGxpc3QgSSBoYWQgaW5pdGlhbGx5IHdhczogYHR1bl9uZXRfeG1pdGAsIGB0dW5fY2hyX2lvY3RsYCwgYHR1bl9jaHJfcmVhZF9pdGVyYCwgYHR1bl93YWtlX3F1ZXVlYCwgYW5kIGB2aG9zdF9uZXRfaW9jdGxgLgoKSG9sZCBvbiwgYHR1bl9uZXRfeG1pdGAgaXMgKmRlZmluaXRlbHkqIGEgaG90IHBhdGggZnVuY3Rpb24uIEl04oCZcyBlc3NlbnRpYWxseSB0aGUgYG5kb19zdGFydF94bWl0YCBmb3IgVFVOIGRldmljZXMuIEkgbmVlZCB0byBhdm9pZCB0aG9zZSwgcmlnaHQ/IEFuZCBgdHVuX2Nocl9yZWFkX2l0ZXJgIGlzIGFsc28gYSBob3QgcGF0aCBiZWNhdXNlLCB3ZWxsLCBpdCYjMzk7cyB0aGUgcmVhZCBoYW5kbGVyLiBEJiMzOTtvaCEKCk5vdywgYHR1bl93YWtlX3F1ZXVlYCBpcyBjYWxsZWQgZXZlcnkgdGltZSBhIHBhY2tldCBpcyBjb25zdW1lZCBpZiB0aGUgcXVldWUgd2FzIHN0b3BwZWQuIEl0ICppcyogZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIEJ1dC4uLiBpcyBpdCBhIGhvdCBwYXRoPyBJdCYjMzk7cyBjYWxsZWQgd2hlbiBjb25zdW1pbmcgcGFja2V0cy4gSSBuZWVkIHRvIGZpZ3VyZSB0aGF0IG91dC4gSGFuZyBvbiwgd2FpdCwgYHR1bl93YWtlX3F1ZXVlYCBpcyBvbmx5IGNhbGxlZCB3aGVuIGByeHEtJmd0O3RhaWxgIGlzIG5vbi16ZXJvIGluIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgLiBUaGF0IG1ha2VzIGEgZGlmZmVyZW5jZS4gSXMgKnRoYXQqIGEgaG90IHBhdGg/IE1vcmUgaW52ZXN0aWdhdGlvbiBpcyByZXF1aXJlZC4KCkxldCYjMzk7cyBsb29rIGF0IGB0dW5fc2V0X2lmZmAgdGhlbi4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyBnb29kLCBidXQgaXMgaXQgYSBob3QgcGF0aD8gTm8sIG5vdCByZWFsbHkuIEl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX3R1bl9jaHJfaW9jdGxgLCB3aGljaCBpcyBhbiBpb2N0bCBoYW5kbGVyLiBJcyBgX190dW5fY2hyX2lvY3RsYCBhIGhvdCBwYXRoPyBOby4gV2hhdCBhYm91dCBgdHVuX3F1ZXVlX3Jlc2l6ZWA/IFRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fdHVuX2Nocl9pb2N0bGAgd2hlbiBgVFVOU0VUUVVFVUVgIGlzIGNhbGxlZC4gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgaG90IHBhdGggZWl0aGVyLiBPa2F5LCBsZXQmIzM5O3Mga2VlcCBnb2luZy4gYHZob3N0X25ldF9pb2N0bGAgaXNuJiMzOTt0IGEgaG90IHBhdGggZWl0aGVyLgoKTm93LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGB0dW5fc2V0X2lmZmAgaXMgaW5saW5lZC4gSXQmIzM5O3MgcXVpdGUgbGFyZ2UsIHNvIGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGlubGluZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHNpemUgdG8gYmUgc3VyZSwgdGhvdWdoLiBSaWdodCwgSSBuZWVkIHRvIGdldCBzb21lIG1vcmUgZGF0YSBvbiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fc2V0X2lmZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTI3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjc4Ni1cbmRyaXZlcnMvbmV0L3R1bi5jOjI3ODc6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbmRyaXZlcnMvbmV0L3R1bi5jLTI3ODgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTMxMzk9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMxODYtXG5kcml2ZXJzL25ldC90dW4uYzozMTg3Olx0XHRyZXQgPSB0dW5fc2V0X2lmZihuZXQsIGZpbGUsIFx1MDAyNmlmcik7XG5kcml2ZXJzL25ldC90dW4uYy0zMTg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2V5IFN5bWJvbHMgaW4gdGhlIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBwYXRjaC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGB0dW5fc2V0X2lmZmAganVtcHMgb3V0LiBJdCYjMzk7cyBub3QgaW5saW5lZCwgYW5kIGl0IHNwYW5zIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgY29kZSAobGluZXMgMjc4NyB0byByb3VnaGx5IDMxMDApLiBUaGF0IG1ha2VzIGl0IGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gYHR1bl9xdWV1ZV9yZXNpemVgIGFsc28gbG9va3MgcHJvbWlzaW5nIGZvciBzaW1pbGFyIHJlYXNvbnMuCgpOb3csIGB0dW5fd2FrZV9xdWV1ZWAuLi4gaXQmIzM5O3MgZXhwb3J0ZWQsIHNvIGRlZmluaXRlbHkgbm90IGlubGluZWQuIEl0JiMzOTtzIGNvcmUgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgaW50cm9kdWNlZCBieSB0aGUgbmV3IGZlYXR1cmUsIHNvIGl0IHNlZW1zIGxpa2UgYSBnb29kIGNob2ljZSBkZXNwaXRlIHRoZSBpbnN0cnVjdGlvbiB0byAmIzM0O0F2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuJiMzNDsgVGhlIGNhdmVhdCBiZWluZyB0aGF0IGB0dW5fd2FrZV9xdWV1ZWAgaXMsIGluIGZhY3QsIHNwZWNpZmljIHRvIHRoaXMgbmV3IGZlYXR1cmUuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGZlYXR1cmUsIGFuZCBub3Qgc2ltcGx5IGFuIG9wdGltaXphdGlvbiwgaXQgc2VlbXMganVzdGlmaWFibGUgdG8gaW5jbHVkZSBpdC4KCkluaXRpYWxseSwgSSBjb25zaWRlcmVkIGB2aG9zdF9uZXRfaW9jdGxgLCBidXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhY3R1YWxseSB0b3VjaCBpdC4gSXQgZG9lcywgaG93ZXZlciwgbW9kaWZ5IGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGFuZCBgdmhvc3RfbmV0X2J1Zl9wZWVrYC4gSG1tLCBhcmUgdGhlc2UgaG90LXBhdGggZnVuY3Rpb25zPyBZZXMsIGFzIHRoZXkmIzM5O3JlIGludm9sdmVkIGluIGV2ZXJ5IHBhY2tldCB3aXRoaW4gYGhhbmRsZV9yeGAuIFNvLCBJJiMzOTtsbCBhdm9pZCBsaXN0aW5nIHRob3NlLCBhcyBzdWdnZXN0ZWQuCgpTbyBmYXIsIG15IGxpc3QgbG9va3MgbGlrZSB0aGlzOgoKKiAgIGB0dW5fc2V0X2lmZmAKKiAgIGB0dW5fcXVldWVfcmVzaXplYAoqICAgYHR1bl93YWtlX3F1ZXVlYAoKT2theSwgYmVmb3JlIEkgZmluYWxpemUsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHR1bl93YWtlX3F1ZXVlYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHZob3N0X25ldF9idWZfcHJvZHVjZWAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB2aG9zdF9uZXRfYnVmX3BlZWtgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgcGVla19oZWFkX2xlbmAsIHdoaWNoIGlzIHVsdGltYXRlbHkgY2FsbGVkIGZyb20gYGhhbmRsZV9yeGAgaW4gYSBsb29wLiBZZXAsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBob3QtcGF0aCBmdW5jdGlvbi4gQnV0LCB3YWl0LCBJIGtlZXAgY29taW5nIGJhY2sgdG8gdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyB0aGUgcHJpbWFyeSBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24uIEl0JiMzOTtzIHJlYXNvbmFibGUgdG8gaW5jbHVkZSBpdC4KCkZpbmFsbHksIEkgc2hvdWxkIGluY2x1ZGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHVzZXIgaW50ZXJmYWNlLiBMZXQmIzM5O3MgYWRkIGVpdGhlciBgX190dW5fY2hyX2lvY3RsYCBvciBgdHVuX2Nocl9pb2N0bGAuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHR1bl9xdWV1ZV9yZXNpemVgIG1ha2VzIHNlbnNlLiBSaWdodCwgYWxsIHNlZW1zIGdvb2QuCgoqKkZpbmFsIExpc3QqKgoKT2theSwgaGVyZSYjMzk7cyBteSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHM6CgoqICAgYHR1bl9zZXRfaWZmYAoqICAgYHR1bl9xdWV1ZV9yZXNpemVgCiogICBgdHVuX3dha2VfcXVldWVgCiogICBgdHVuX2Nocl9pb2N0bGAgKG9yIGBfX3R1bl9jaHJfaW9jdGxgKQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fcXVldWVfcmVzaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MzY4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHR1bl9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNjk4LVxuZHJpdmVycy9uZXQvdHVuLmM6MzY5OTpzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MDAte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM3MzM9c3RhdGljIGludCB0dW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM3NDQtXHRjYXNlIE5FVERFVl9DSEFOR0VfVFhfUVVFVUVfTEVOOlxuZHJpdmVycy9uZXQvdHVuLmM6Mzc0NTpcdFx0aWYgKHR1bl9xdWV1ZV9yZXNpemUodHVuKSlcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NDYtXHRcdFx0cmV0dXJuIE5PVElGWV9CQUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgdHVuX3F1ZXVlX3Jlc2l6ZWAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYE5FVERFVl9DSEFOR0VfVFhfUVVFVUVfTEVOYCBldmVudCwgd2hpY2ggdHJpZ2dlcnMgYSBjYWxsIHRvIGB0dW5fcXVldWVfcmVzaXplYC4gVGhlIGdvb2QgbmV3cyBpcywgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgaXNuJiMzOTt0IGluIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aCDigJMgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbmQgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGVzcyBwcmVzc3VyZSBvbiBvcHRpbWl6YXRpb24gdGhlcmUsIHRob3VnaCB3ZSBzdGlsbCB3YW50IHRvIGVuc3VyZSBpdOKAmXMgZG9uZSBjb3JyZWN0bHkuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgdHVuX2ZvcmNlX3dha2VfcXVldWVgLiBJdCYjMzk7cyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIGN1cmlvdXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBxdWV1ZSBsZW5ndGggY2hhbmdlLiBXb25kZXJpbmcgaWYgdGhpcyBpcyBhYm91dCBlbnN1cmluZyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSByZWZsZWN0ZWQgb24gdGhlIGhhcmR3YXJlIGxheWVyLiBPciBpZiBpdCBpcyBzb21lIHNvcnQgb2YgYW4gb3B0aW1pemF0aW9uIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fZm9yY2Vfd2FrZV9xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTY1Nz1zdGF0aWMgdm9pZCB0dW5fZGV0YWNoX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTcwMC1cbmRyaXZlcnMvbmV0L3R1bi5jOjcwMTpzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuZHJpdmVycy9uZXQvdHVuLmMtNzAyLVx0XHRcdFx0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9NzE1PXN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy03NTktXHR0ZmlsZS1cdTAwM2Vzb2NrZXQuc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xuZHJpdmVycy9uZXQvdHVuLmM6NzYwOlx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG5kcml2ZXJzL25ldC90dW4uYy03NjEtXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9Mjc4Nz1zdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTI5MjMtXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuZHJpdmVycy9uZXQvdHVuLmM6MjkyNDpcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTI5MjUtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjk5PXN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM3MjQtXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuZHJpdmVycy9uZXQvdHVuLmM6MzcyNTpcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MjYtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxODIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2YgdGhpcyBjb2RlIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHR1bl9mb3JjZV93YWtlX3F1ZXVlYCoqCgpSaWdodCwgc28gYHR1bl9mb3JjZV93YWtlX3F1ZXVlYCBpcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLiBUaGUgY29tcGlsZXIgKm1pZ2h0KiBpbmxpbmUgaXQgaW4gZWFjaCBjYWxsIHNpdGUsIHdoaWNoIHdvdWxkIG1ha2UgdHJhY2luZyBpdHMgZXhlY3V0aW9uIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQuIEJ1dCwgc2luY2UgaXQmIzM5O3MgdXNlZCBpbiBhIGZldyBkaWZmZXJlbnQgcGxhY2VzIOKAkyBgdHVuX2F0dGFjaGAsIGB0dW5fc2V0X2lmZmAsIGFuZCBgdHVuX3F1ZXVlX3Jlc2l6ZWAg4oCTIGlubGluaW5nIGlzbiYjMzk7dCBndWFyYW50ZWVkLCBhbmQgaG9uZXN0bHksIHRoZSBjb21waWxlciBtaWdodCBub3QgZXZlbiBvcHRpbWl6ZSBpdCB0aGF0IHdheS4gSW4gYW55IGNhc2UsIGl0JiMzOTtzIHNhZmVyIGFuZCBjbGVhcmVyIHRvIGp1c3QgbGlzdCB0aGUgY2FsbGluZyBmdW5jdGlvbnMgZGlyZWN0bHksIHNvIEkmIzM5O2xsIGtlZXAgdHJhY2sgb2YgdGhvc2U6IGB0dW5fYXR0YWNoYCwgYHR1bl9zZXRfaWZmYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYC4KCk5vdywgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdHVuX2F0dGFjaGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTcwMT1zdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTcxNC1cbmRyaXZlcnMvbmV0L3R1bi5jOjcxNTpzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG5kcml2ZXJzL25ldC90dW4uYy03MTYtXHRcdCAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTkzNz1zdGF0aWMgaW50IHR1bl9uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTk2NS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnR1bi1cdTAwM2VkaXNhYmxlZCk7XG5kcml2ZXJzL25ldC90dW4uYzo5NjY6XHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgdHVuLVx1MDAzZWZpbGUsIGZhbHNlLCBpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTkFQSSxcbmRyaXZlcnMvbmV0L3R1bi5jLTk2Ny1cdFx0XHQgaWZyLVx1MDAzZWlmcl9mbGFncyBcdTAwMjYgSUZGX05BUElfRlJBR1MsIGZhbHNlKTtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yNzg3PXN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjgyNi1cbmRyaXZlcnMvbmV0L3R1bi5jOjI4Mjc6XHRcdGVyciA9IHR1bl9hdHRhY2godHVuLCBmaWxlLCBpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTk9GSUxURVIsXG5kcml2ZXJzL25ldC90dW4uYy0yODI4LVx0XHRcdFx0IGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9OQVBJLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTI5OTg9c3RhdGljIHZvaWQgdHVuX2RldGFjaF9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgaW50IG4pXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzAxMi1cbmRyaXZlcnMvbmV0L3R1bi5jOjMwMTM6c3RhdGljIGludCB0dW5fYXR0YWNoX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuZHJpdmVycy9uZXQvdHVuLmMtMzAxNC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzA0ND1zdGF0aWMgaW50IHR1bl9zZXRfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMwNjAtXHRcdFx0Z290byB1bmxvY2s7XG5kcml2ZXJzL25ldC90dW4uYzozMDYxOlx0XHRyZXQgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSwgZmFsc2UsIHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX05BUEksXG5kcml2ZXJzL25ldC90dW4uYy0zMDYyLVx0XHRcdFx0IHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX05BUElfRlJBR1MsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTMxMzk9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzItXG5kcml2ZXJzL25ldC90dW4uYzozMzczOlx0XHRyZXQgPSB0dW5fYXR0YWNoX2ZpbHRlcih0dW4pO1xuZHJpdmVycy9uZXQvdHVuLmMtMzM3NC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA3OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTg4CgkJCQkJCQlvdXRwdXQ6IDE1NAoJCQkJCQkJdGhvdWdodHM6IDQyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGB0dW5fYXR0YWNoYCBzZWVtcyBsaWtlIGFub3RoZXIgZ29vZCBmdW5jdGlvbiB0byBrZWVwIGFuIGV5ZSBvbi4gTGV0JiMzOTtzIGxpc3QgdGhlIGtleSBmb2N1cyBzeW1ib2xzOiBgdHVuX3NldF9pZmZgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGB0dW5fYXR0YWNoYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBUaGUgcGF0Y2ggYWx0ZXJzIGBkcml2ZXJzL3Zob3N0L25ldC5jYCwgc28gYENPTkZJR19WSE9TVF9ORVRgIGlzIHJlbGV2YW50LiBBbHNvLCBzaW5jZSBpdCYjMzk7cyBhIFRVTi9UQVAgbW9kaWZpY2F0aW9uLCBgQ09ORklHX1RVTmAgaXMgZGVmaW5pdGVseSBpbnZvbHZlZC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBJZiBgQ09ORklHX1ZIT1NUX05FVGAgaXMgdGhlIG9ubHkgY29uZmlnIG5lZWRlZD8gTGV0JiMzOTtzIGNoZWNrIHRoZSBkZXBlbmRlbmN5LiBgQ09ORklHX1ZIT1NUX05FVGAgZGVwZW5kcyBvbiBgTkVUICZhbXA7JmFtcDsgRVZFTlRGRCAmYW1wOyZhbXA7IChUVU4gfHwgIVRVTikgJmFtcDsmYW1wOyAoVEFQIHx8ICFUQVApYC4gU28sIHllcywgYm90aCBgQ09ORklHX1ZIT1NUX05FVGAgYW5kIGBDT05GSUdfVFVOYCBhcmUgcmVxdWlyZWQuCgpBbHJpZ2h0LCB0aW1lIHRvIHN5bnRoZXNpemUgbXkgY29uY2x1c2lvbnMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLiBXaGVuIGVuYWJsZWQsIGl0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgdGhlIHF1ZXVlcyBiZWhhdmUgaW4gYHR1bl9uZXRfeG1pdGAgYW5kIGB2aG9zdF9uZXRgIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwg4oCTIGl0IHN0b3BzIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMsIGVuYWJsaW5nIHRoZSBhdHRhY2hlZCBxZGlzYyB0byBhcHBseSBiYWNrcHJlc3N1cmUuIFRoaXMgYWZmZWN0cyBjb3JlIFRVTi9UQVAgbG9naWMgYW5kIHRoZSB2aG9zdF9uZXQgZHJpdmVyLiBCZWNhdXNlIHRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHVzZXItcmVhY2hhYmxlIHZpYSBpb2N0bHMgYW5kIG5ldHdvcmsgdHJhZmZpYywgaXQmIzM5O3MgYWJzb2x1dGVseSByaXBlIGZvciBmdXp6aW5nLgoKTXkgZmluYWwgZGV0ZXJtaW5hdGlvbiBpczoKCldvcnRoRnV6emluZzogdHJ1ZQpGb2N1c1N5bWJvbHM6IGB0dW5fc2V0X2lmZmAsIGB0dW5fcXVldWVfcmVzaXplYCwgYHR1bl9hdHRhY2hgLCBgdHVuX3dha2VfcXVldWVgCkVuYWJsZUNvbmZpZ3M6IGBUVU5gLCBgVkhPU1RfTkVUYApSZWFzb25pbmc6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBJRkZfQkFDS1BSRVNTVVJFYCBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMuIFdoZW4gZW5hYmxlZCwgdGhpcyBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gYHR1bl9uZXRfeG1pdGAgYW5kIGB2aG9zdF9uZXRgIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHZpcnR1YWxpemF0aW9uIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBgVFVOU0VUSUZGYCBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDssCiAgICAmIzM0O3R1bl9xdWV1ZV9yZXNpemUmIzM0OywKICAgICYjMzQ7dHVuX2F0dGFjaCYjMzQ7LAogICAgJiMzNDt0dW5fd2FrZV9xdWV1ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCB3aGljaCBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gdHVuX25ldF94bWl0IGFuZCB2aG9zdF9uZXQgdG8gc3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdmlydHVhbGl6YXRpb24gZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRVTlNFVElGRiBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX3NldF9pZmYmIzM0OywKICAgICYjMzQ7dHVuX3F1ZXVlX3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDt0dW5fYXR0YWNoJiMzNDssCiAgICAmIzM0O3R1bl93YWtlX3F1ZXVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIHdoaWNoIG1vZGlmaWVzIHRoZSBxdWV1ZSBoYW5kbGluZyBsb2dpYyBpbiB0dW5fbmV0X3htaXQgYW5kIHZob3N0X25ldCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBkcml2ZXJzIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVFVOU0VUSUZGIGlvY3RsIGFuZCBuZXR3b3JrIHRyYWZmaWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NTo1MS44MTI4MzU4NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY0OTg2NzE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlZIT1NUX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fcXVldWVfcmVzaXplXCIsXG4gICAgXCJ0dW5fYXR0YWNoXCIsXG4gICAgXCJ0dW5fd2FrZV9xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIHdoaWNoIG1vZGlmaWVzIHRoZSBxdWV1ZSBoYW5kbGluZyBsb2dpYyBpbiB0dW5fbmV0X3htaXQgYW5kIHZob3N0X25ldCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBkcml2ZXJzIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVFVOU0VUSUZGIGlvY3RsIGFuZCBuZXR3b3JrIHRyYWZmaWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU1OjUxLjgxMjk4MzI0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3NDYyOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWQ1MjI5MzU1OGFiNTJkMjk5MjYxMDM5N2MyOWRkYmM4YTEyZDBjNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA3OjU1OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG5pbmRleCA0ZDcwODdmNzI3YmU1Li4wNDE1NWVmOThlNWJiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG5AQCAtMjA2LDYgKzIwNiwyOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjpcXG4gICAgICAgcmV0dXJuIGlvY3RsKGZkLCBUVU5TRVRRVUVVRSwgKHZvaWQgKilcXHUwMDI2aWZyKTtcXG4gICB9XFxuIFxcbiszLjQgcWRpc2MgYmFja3ByZXNzdXJlXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK0lGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2MgYmFja3ByZXNzdXJlLiBXaXRob3V0IGl0LCBUWFxcbitkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLCBzbyBhbnkgYXR0YWNoZWQgcWRpc2NcXG4raXMgZWZmZWN0aXZlbHkgYnlwYXNzZWQgYW5kIGFwcGxpY2F0aW9ucyBvbmx5IGxlYXJuIGFib3V0IGNvbmdlc3Rpb25cXG4rdGhyb3VnaCB0aG9zZSBkcm9wcy5cXG4rXFxuK1dpdGggaXQsIHRoZSBrZXJuZWwgc3RvcHMgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MgaG9sZCBhbmQgc2NoZWR1bGVcXG4rcGFja2V0cywgc28gaXRzIEFRTSwgc2hhcGluZyBhbmQgZmFpcm5lc3MgYWN0dWFsbHkgYXBwbHkuIFRoaXMgaGVscHNcXG4rcHJvdG9jb2xzIGxpa2UgVENQLCB3aGljaCBjdXQgdGhyb3VnaHB1dCBpbiByZWFjdGlvbiB0byBwYWNrZXQgZHJvcHMuXFxuK1dpdGggSUZGX0JBQ0tQUkVTU1VSRSwgZHJvcHMgdGhlbiBvbmx5IG9jY3VyIGFzIGEgcmFyZSByYWNlLiBCYWNrcHJlc3N1cmVcXG4rcmVxdWlyZXMgYSBxZGlzYyB0byBiZSBhdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoIG5vcXVldWUuXFxuK1xcbitUaGUgdHhxdWV1ZWxlbiBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvIGZ1cnRoZXIgc2hpZnRcXG4rYnVmZmVyaW5nIGludG8gdGhlIHFkaXNjIGFuZCByZWR1Y2UgYnVmZmVyYmxvYXQsIGJ1dCBjb21lcyBhdCBwb3NzaWJsZVxcbitwZXJmb3JtYW5jZSBjb3N0LlxcbitcXG4rV2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCB0aHJvdWdoIGEgc2luZ2xlXFxuK1RVTi9UQVAgcXVldWUsIHRoZSBmbGFnIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZFxcbitvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS5cXG4rXFxuIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvblxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5pbmRleCA1MWU4MDAwMGJkMGVkLi41YTkyN2JiYmRhMmY3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXFxuKysrIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5AQCAtOTgsNyArOTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAjZGVmaW5lIFRVTl9GQVNZTkNcXHRJRkZfQVRUQUNIX1FVRVVFXFxuIFxcbiAjZGVmaW5lIFRVTl9GRUFUVVJFUyAoSUZGX05PX1BJIHwgSUZGX09ORV9RVUVVRSB8IElGRl9WTkVUX0hEUiB8IFxcXFxcXG4tXFx0XFx0ICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUylcXG4rXFx0XFx0ICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUyB8IFxcXFxcXG4rXFx0XFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcXG4gXFxuICNkZWZpbmUgR09PRENPUFlfTEVOIDEyOFxcbiBcXG5AQCAtMTQ1LDYgKzE0Niw4IEBAIHN0cnVjdCB0dW5fZmlsZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbmV4dDtcXG4gXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkO1xcbiBcXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcXG4rXFx0LyogUHJvdGVjdGVkIGJ5IHR4X3JpbmcuY29uc3VtZXJfbG9jayAqL1xcbitcXHRpbnQgY29uc19jbnQ7XFxuIFxcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcXG4gfTtcXG4gXFxuQEAgLTU4OCw4ICs1OTEsMTYgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXFx1MDAzZXRmaWxlc1tpbmRleF0sXFxuIFxcdFxcdFxcdFxcdCAgIHR1bi1cXHUwMDNldGZpbGVzW3R1bi1cXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xcbiBcXHRcXHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2luZGV4XSk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHRcXHRudGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4ID0gaW5kZXg7XFxuIFxcdFxcdG50ZmlsZS1cXHUwMDNleGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4O1xcbitcXHRcXHRudGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0XFx0LyogSWYgdGhlIHJpbmcgaXMgbm90IGVtcHR5LCB0aGUgY29uc3VtZXIgd2FrZXMgdGhlIHF1ZXVlXFxuK1xcdFxcdCAqIGFmdGVyIGNvbnN1bWluZyB0aGUgcmVtYWluaW5nIGVudHJpZXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoX19wdHJfcmluZ19lbXB0eShcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nKSlcXG4rXFx0XFx0XFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXFx1MDAzZWRldiwgaW5kZXgpO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVxcdTAwM2V0ZmlsZXNbdHVuLVxcdTAwM2VudW1xdWV1ZXMgLSAxXSxcXG4gXFx0XFx0XFx0XFx0ICAgTlVMTCk7XFxuIFxcbkBAIC02ODcsNiArNjk4LDIwIEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4re1xcbitcXHQvKiBFbnN1cmUgdGhhdCB0aGUgcHJvZHVjZXIgY2FuIG5vdCBzdG9wIHRoZVxcbitcXHQgKiBxdWV1ZSBjb25jdXJyZW50bHkgYnkgdGFraW5nIGxvY2tzLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXFx1MDAzZWRldiwgdGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4rXFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0ICAgICAgYm9vbCBza2lwX2ZpbHRlciwgYm9vbCBuYXBpLCBib29sIG5hcGlfZnJhZ3MsXFxuIFxcdFxcdCAgICAgIGJvb2wgcHVibGlzaF90dW4pXFxuQEAgLTczMiw2ICs3NTcsNyBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcbiBcXHR0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXggPSB0dW4tXFx1MDAzZW51bXF1ZXVlcztcXG4gXFx0dGZpbGUtXFx1MDAzZXNvY2tldC5zay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNj0gflJDVl9TSFVURE9XTjtcXG4rXFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuIFxcbiBcXHRpZiAodGZpbGUtXFx1MDAzZWRldGFjaGVkKSB7XFxuIFxcdFxcdC8qIFJlLWF0dGFjaCBkZXRhY2hlZCB0ZmlsZSwgdXBkYXRpbmcgWERQIHF1ZXVlX2luZGV4ICovXFxuQEAgLTEwMDgsNiArMTAzNCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7XFxuIFxcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XFxuIFxcdGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0dGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbdHhxXSk7XFxuQEAgLTEwNjIsMTMgKzEwODksMzQgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gXFxuLVxcdGlmIChwdHJfcmluZ19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZywgc2tiKSkge1xcbitcXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZywgc2tiKTtcXG4rXFx0aWYgKCh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xcbitcXHRcXHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcXG4rXFx0XFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXFxuK1xcdFxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuK1xcdFxcdGlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykpXFxuK1xcdFxcdFxcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0LyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgSUZGX0JBQ0tQUkVTU1VSRSBpcyBlbmFibGVkIGFuZFxcbitcXHRcXHQgKiBhIHFkaXNjIGlzIHByZXNlbnQsIGJ1dCBjYW4gaGFwcGVuIGR1ZSB0byBsbHR4LlxcbitcXHRcXHQgKiBTaW5jZSBza2JfdHhfdGltZXN0YW1wKCksIHNrYl9vcnBoYW4oKSxcXG4rXFx0XFx0ICogcnVuX2VicGZfZmlsdGVyKCkgYW5kIHBza2JfdHJpbSgpIGNvdWxkIGhhdmUgdGlua2VyZWRcXG4rXFx0XFx0ICogd2l0aCB0aGUgU0tCLCByZXR1cm5pbmcgTkVUREVWX1RYX0JVU1kgaXMgdW5zYWZlIGFuZFxcbitcXHRcXHQgKiB3ZSBtdXN0IGRyb3AgaW5zdGVhZC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZVTExfUklORztcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBkZXYtXFx1MDAzZWxsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi9cXG4tXFx0cXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTtcXG4gXFx0dHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTtcXG4gXFxuIFxcdC8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqL1xcbkBAIC0yMTE2LDEzICsyMTY0LDUwIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbiBcXHRyZXR1cm4gdG90YWw7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycilcXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXFxuK3N0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbitcXG4rXFx0aWYgKCEodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cXHUwMDNlZGV2LCB0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbitcXG4rXFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xcbitcXHRzbXBfbWIoKTtcXG4rXFx0aWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkge1xcbitcXHRcXHR0ZmlsZS1cXHUwMDNlY29uc19jbnQgKz0gY29uc3VtZWQ7XFxuK1xcdFxcdGlmICh0ZmlsZS1cXHUwMDNlY29uc19jbnQgXFx1MDAzZT0gdGZpbGUtXFx1MDAzZXR4X3Jpbmcuc2l6ZSAvIDIgfHxcXG4rXFx0XFx0ICAgIF9fcHRyX3JpbmdfZW1wdHkoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nKSkge1xcbitcXHRcXHRcXHRuZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7XFxuK1xcdFxcdFxcdHRmaWxlLVxcdTAwM2Vjb25zX2NudCA9IDA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxcbit7XFxuK1xcdHZvaWQgKnB0cjtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdHB0ciA9IF9fcHRyX3JpbmdfY29uc3VtZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpO1xcbitcXHRpZiAocHRyKVxcbitcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbitcXHRyZXR1cm4gcHRyO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbitcXHRcXHRcXHQgICBpbnQgbm9ibG9jaywgaW50ICplcnIpXFxuIHtcXG4gXFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XFxuIFxcdHZvaWQgKnB0ciA9IE5VTEw7XFxuIFxcdGludCBlcnJvciA9IDA7XFxuIFxcbi1cXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZyk7XFxuK1xcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XFxuIFxcdGlmIChwdHIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRpZiAobm9ibG9jaykge1xcbkBAIC0yMTM0LDcgKzIyMTksNyBAQCBzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXFxuIFxcbiBcXHR3aGlsZSAoMSkge1xcbiBcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbi1cXHRcXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZyk7XFxuK1xcdFxcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XFxuIFxcdFxcdGlmIChwdHIpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG5AQCAtMjE3MSw3ICsyMjU2LDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4gXFxuIFxcdGlmICghcHRyKSB7XFxuIFxcdFxcdC8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqL1xcbi1cXHRcXHRwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCBcXHUwMDI2ZXJyKTtcXG4rXFx0XFx0cHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCBcXHUwMDI2ZXJyKTtcXG4gXFx0XFx0aWYgKCFwdHIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5AQCAtMjcwNCw3ICsyNzg5LDcgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4gXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcXG4gXFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4tXFx0aW50IGVycjtcXG4rXFx0aW50IGVyciwgaTtcXG4gXFxuIFxcdGlmICh0ZmlsZS1cXHUwMDNlZGV0YWNoZWQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0yODMzLDggKzI5MTgsMTIgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4gXFx0LyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluXFxuIFxcdCAqIHhvZmYgc3RhdGUuXFxuIFxcdCAqL1xcbi1cXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXFx1MDAzZWRldikpXFxuLVxcdFxcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tXFx1MDAzZWRldik7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cXHUwMDNlZGV2KSkge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHVuLVxcdTAwM2VudW1xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRcXHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbitcXHRcXHRcXHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRzdHJzY3B5KGlmci1cXHUwMDNlaWZyX25hbWUsIHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTM2MzAsNiArMzcxOSwxMyBAQCBzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG4gXFx0XFx0XFx0XFx0XFx0ICBkZXYtXFx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICB0dW5fcHRyX2ZyZWUpO1xcbiBcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0XFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG4rXFx0XFx0XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0a2ZyZWUocmluZ3MpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTM3MzgsNiArMzgzNCwyOSBAQCBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3R4X3JpbmcpO1xcbiBcXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXFxuK3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZClcXG4re1xcbitcXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xcbitcXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xcbitcXG4rXFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AgIT0gXFx1MDAyNnR1bl9mb3BzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0ZmlsZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0aWYgKCF0ZmlsZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0dHVuID0gcmN1X2RlcmVmZXJlbmNlKHRmaWxlLVxcdTAwM2V0dW4pO1xcbitcXHRpZiAodHVuKVxcbitcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcXG4rXFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcXG4rXFxuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcXG4gbW9kdWxlX2V4aXQodHVuX2NsZWFudXApO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG5pbmRleCA2OTQ5YjcwNDE2NmQ1Li4zZTcyYjljNmFmMGNhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jXFxuQEAgLTE3NiwxMyArMTc2LDIxIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4ge1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZpbGU7XFxuIFxcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcXHUwMDI2bnZxLVxcdTAwM2VyeHE7XFxuIFxcbiBcXHRyeHEtXFx1MDAzZWhlYWQgPSAwO1xcbi1cXHRyeHEtXFx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVxcdTAwM2VyeF9yaW5nLCByeHEtXFx1MDAzZXF1ZXVlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm52cS1cXHUwMDNlcnhfcmluZy1cXHUwMDNlY29uc3VtZXJfbG9jayk7XFxuK1xcdHJ4cS1cXHUwMDNldGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cXHUwMDNlcnhfcmluZywgcnhxLVxcdTAwM2VxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XFxuK1xcbitcXHRpZiAocnhxLVxcdTAwM2V0YWlsKVxcbitcXHRcXHR0dW5fd2FrZV9xdWV1ZShmaWxlLCByeHEtXFx1MDAzZXRhaWwpO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm52cS1cXHUwMDNlcnhfcmluZy1cXHUwMDNlY29uc3VtZXJfbG9jayk7XFxuIFxcdHJldHVybiByeHEtXFx1MDAzZXRhaWw7XFxuIH1cXG4gXFxuQEAgLTIwOSwxNCArMjE3LDE1IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXFxuIFxcdHJldHVybiBfX3NrYl9hcnJheV9sZW5fd2l0aF90YWcocHRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxcbiB7XFxuIFxcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcXHUwMDI2bnZxLVxcdTAwM2VyeHE7XFxuIFxcbiBcXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxcbitcXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBvdXQ6XFxuQEAgLTEwMDQsNyArMTAxMyw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAocnZxLVxcdTAwM2VyeF9yaW5nKVxcbi1cXHRcXHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7XFxuK1xcdFxcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsoc2ssIHJ2cSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jaywgZmxhZ3MpO1xcbiBcXHRoZWFkID0gc2tiX3BlZWsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcXG5pbmRleCA4MDE2NmViNjJmNDFjLi41ZjNlMjA2YzdhNzM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTIyLDYgKzIyLDcgQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcXG4gI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSlcXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XFxuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4rdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcXG4ge1xcbkBAIC01NSw2ICs1Niw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmYpXFxuIFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxcbmluZGV4IGQyYzM2MjliYmU0NTEuLmM5NWU4OTE5MDNmMDUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXFxuQEAgLTk2LDYgKzk2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsXFxuKyAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcilcXG4re1xcbitcXHRpZiAodW5saWtlbHkoIXItXFx1MDAzZXNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChkYXRhX3JhY2Uoci1cXHUwMDNlcXVldWVbci1cXHUwMDNlcHJvZHVjZXJdKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsXFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxcbiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZFxcbkBAIC0xMDMsOCArMTE3LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcXG4ge1xcbi1cXHRpZiAodW5saWtlbHkoIXItXFx1MDAzZXNpemUpIHx8IGRhdGFfcmFjZShyLVxcdTAwM2VxdWV1ZVtyLVxcdTAwM2Vwcm9kdWNlcl0pKVxcbi1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4rXFx0aW50IHAgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XFxuK1xcbitcXHRpZiAocClcXG4rXFx0XFx0cmV0dXJuIHA7XFxuIFxcbiBcXHQvKiBNYWtlIHN1cmUgdGhlIHBvaW50ZXIgd2UgYXJlIHN0b3JpbmcgcG9pbnRzIHRvIGEgdmFsaWQgZGF0YS4gKi9cXG4gXFx0LyogUGFpcnMgd2l0aCB0aGUgZGVwZW5kZW5jeSBvcmRlcmluZyBpbiBfX3B0cl9yaW5nX2NvbnN1bWUuICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbmluZGV4IDc5ZDUzYzdhMWViZGMuLmEwZGRjNTBhNzUzNDIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTY5LDYgKzY5LDEwIEBAXFxuICNkZWZpbmUgSUZGX05BUElfRlJBR1NcXHQweDAwMjBcXG4gLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi9cXG4gI2RlZmluZSBJRkZfTk9fQ0FSUklFUlxcdDB4MDA0MFxcbisvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cXG4rICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cXG4rICovXFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVxcdDB4MDA4MFxcbiAjZGVmaW5lIElGRl9OT19QSVxcdDB4MTAwMFxcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXFxuICNkZWZpbmUgSUZGX09ORV9RVUVVRVxcdDB4MjAwMFxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5pbmRleCAyZWMwN2RlMWQ3M2JlLi4yYzg1NTI1NzA0YzE2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbisrKyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbkBAIC02Nyw2ICs2NywxMCBAQFxcbiAjZGVmaW5lIElGRl9UQVBcXHRcXHQweDAwMDJcXG4gI2RlZmluZSBJRkZfTkFQSVxcdDB4MDAxMFxcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXFx0MHgwMDIwXFxuKy8qIFN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBpcyBmdWxsLCBzbyBhblxcbisgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLlxcbisgKi9cXG4rI2RlZmluZSBJRkZfQkFDS1BSRVNTVVJFXFx0MHgwMDgwXFxuICNkZWZpbmUgSUZGX05PX1BJXFx0MHgxMDAwXFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXFx0MHgyMDAwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU1OjUyLjM2MTk0MzY5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4MTAwNzQ1MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVkhPU1RfTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9pZmZcIixcbiAgICBcInR1bl9xdWV1ZV9yZXNpemVcIixcbiAgICBcInR1bl9hdHRhY2hcIixcbiAgICBcInR1bl93YWtlX3F1ZXVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBJRkZfQkFDS1BSRVNTVVJFIGZsYWcgZm9yIFRVTi9UQVAgZGV2aWNlcywgd2hpY2ggbW9kaWZpZXMgdGhlIHF1ZXVlIGhhbmRsaW5nIGxvZ2ljIGluIHR1bl9uZXRfeG1pdCBhbmQgdmhvc3RfbmV0IHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHZpcnR1YWxpemF0aW9uIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUVU5TRVRJRkYgaW9jdGwgYW5kIG5ldHdvcmsgdHJhZmZpYywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWQ1MjI5MzU1OGFiNTJkMjk5MjYxMDM5N2MyOWRkYmM4YTEyZDBjNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDc6NTU6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG5pbmRleCA0ZDcwODdmNzI3YmU1Li4wNDE1NWVmOThlNWJiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG5AQCAtMjA2LDYgKzIwNiwyOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjpcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVx1MDAyNmlmcik7XG4gICB9XG4gXG4rMy40IHFkaXNjIGJhY2twcmVzc3VyZVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitJRkZfQkFDS1BSRVNTVVJFIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHFkaXNjIGJhY2twcmVzc3VyZS4gV2l0aG91dCBpdCwgVFhcbitkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLCBzbyBhbnkgYXR0YWNoZWQgcWRpc2NcbitpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvblxuK3Rocm91Z2ggdGhvc2UgZHJvcHMuXG4rXG4rV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyBpbnN0ZWFkLCBsZXR0aW5nIHRoZSBxZGlzYyBob2xkIGFuZCBzY2hlZHVsZVxuK3BhY2tldHMsIHNvIGl0cyBBUU0sIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGFjdHVhbGx5IGFwcGx5LiBUaGlzIGhlbHBzXG4rcHJvdG9jb2xzIGxpa2UgVENQLCB3aGljaCBjdXQgdGhyb3VnaHB1dCBpbiByZWFjdGlvbiB0byBwYWNrZXQgZHJvcHMuXG4rV2l0aCBJRkZfQkFDS1BSRVNTVVJFLCBkcm9wcyB0aGVuIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIEJhY2twcmVzc3VyZVxuK3JlcXVpcmVzIGEgcWRpc2MgdG8gYmUgYXR0YWNoZWQgYW5kIGhhcyBubyBlZmZlY3Qgd2l0aCBub3F1ZXVlLlxuK1xuK1RoZSB0eHF1ZXVlbGVuIGNhbiBiZSByZWR1Y2VkIGFsb25nc2lkZSB0aGlzIGZsYWcgdG8gZnVydGhlciBzaGlmdFxuK2J1ZmZlcmluZyBpbnRvIHRoZSBxZGlzYyBhbmQgcmVkdWNlIGJ1ZmZlcmJsb2F0LCBidXQgY29tZXMgYXQgcG9zc2libGVcbitwZXJmb3JtYW5jZSBjb3N0LlxuK1xuK1doZW4gcnVubmluZyBtdWx0aXBsZSBuZXR3b3JrIHN0cmVhbXMgaW4gcGFyYWxsZWwgdGhyb3VnaCBhIHNpbmdsZVxuK1RVTi9UQVAgcXVldWUsIHRoZSBmbGFnIG1heSByZWR1Y2UgcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZFxuK29mIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtLlxuK1xuIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvblxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcbmluZGV4IDUxZTgwMDAwYmQwZWQuLjVhOTI3YmJiZGEyZjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuKysrIGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC05OCw3ICs5OCw4IEBAIHN0YXRpYyB2b2lkIHR1bl9kZWZhdWx0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gI2RlZmluZSBUVU5fRkFTWU5DXHRJRkZfQVRUQUNIX1FVRVVFXG4gXG4gI2RlZmluZSBUVU5fRkVBVFVSRVMgKElGRl9OT19QSSB8IElGRl9PTkVfUVVFVUUgfCBJRkZfVk5FVF9IRFIgfCBcXFxuLVx0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKVxuK1x0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcbitcdFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcbiBcbiAjZGVmaW5lIEdPT0RDT1BZX0xFTiAxMjhcbiBcbkBAIC0xNDUsNiArMTQ2LDggQEAgc3RydWN0IHR1bl9maWxlIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbmV4dDtcbiBcdHN0cnVjdCB0dW5fc3RydWN0ICpkZXRhY2hlZDtcbiBcdHN0cnVjdCBwdHJfcmluZyB0eF9yaW5nO1xuK1x0LyogUHJvdGVjdGVkIGJ5IHR4X3JpbmcuY29uc3VtZXJfbG9jayAqL1xuK1x0aW50IGNvbnNfY250O1xuIFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xuIH07XG4gXG5AQCAtNTg4LDggKzU5MSwxNiBAQCBzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdLFxuIFx0XHRcdFx0ICAgdHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xuIFx0XHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRudGZpbGUtXHUwMDNlcXVldWVfaW5kZXggPSBpbmRleDtcbiBcdFx0bnRmaWxlLVx1MDAzZXhkcF9yeHEucXVldWVfaW5kZXggPSBpbmRleDtcbitcdFx0bnRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbitcdFx0LyogSWYgdGhlIHJpbmcgaXMgbm90IGVtcHR5LCB0aGUgY29uc3VtZXIgd2FrZXMgdGhlIHF1ZXVlXG4rXHRcdCAqIGFmdGVyIGNvbnN1bWluZyB0aGUgcmVtYWluaW5nIGVudHJpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoX19wdHJfcmluZ19lbXB0eShcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZykpXG4rXHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCBpbmRleCk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0sXG4gXHRcdFx0XHQgICBOVUxMKTtcbiBcbkBAIC02ODcsNiArNjk4LDIwIEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuK1x0XHRcdFx0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4re1xuK1x0LyogRW5zdXJlIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBub3Qgc3RvcCB0aGVcbitcdCAqIHF1ZXVlIGNvbmN1cnJlbnRseSBieSB0YWtpbmcgbG9ja3MuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4rXHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cdTAwM2VkZXYsIHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbitcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK31cbitcbiBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdCAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLFxuIFx0XHQgICAgICBib29sIHB1Ymxpc2hfdHVuKVxuQEAgLTczMiw2ICs3NTcsNyBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXG4gXHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IHR1bi1cdTAwM2VudW1xdWV1ZXM7XG4gXHR0ZmlsZS1cdTAwM2Vzb2NrZXQuc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xuK1x0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG4gXG4gXHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpIHtcbiBcdFx0LyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi9cbkBAIC0xMDA4LDYgKzEwMzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZTtcbiBcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4gXHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbitcdGludCByZXQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR0ZmlsZSA9IHJjdV9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW3R4cV0pO1xuQEAgLTEwNjIsMTMgKzEwODksMzQgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbi1cdGlmIChwdHJfcmluZ19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcsIHNrYikpIHtcbitcdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpO1xuK1x0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcdTAwMjZcdTAwMjZcbitcdCAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xuK1x0XHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcbitcdFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXG4rXHRcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4rXHRcdGlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpKVxuK1x0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcbitcdGlmIChyZXQpIHtcbitcdFx0LyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgSUZGX0JBQ0tQUkVTU1VSRSBpcyBlbmFibGVkIGFuZFxuK1x0XHQgKiBhIHFkaXNjIGlzIHByZXNlbnQsIGJ1dCBjYW4gaGFwcGVuIGR1ZSB0byBsbHR4LlxuK1x0XHQgKiBTaW5jZSBza2JfdHhfdGltZXN0YW1wKCksIHNrYl9vcnBoYW4oKSxcbitcdFx0ICogcnVuX2VicGZfZmlsdGVyKCkgYW5kIHBza2JfdHJpbSgpIGNvdWxkIGhhdmUgdGlua2VyZWRcbitcdFx0ICogd2l0aCB0aGUgU0tCLCByZXR1cm5pbmcgTkVUREVWX1RYX0JVU1kgaXMgdW5zYWZlIGFuZFxuK1x0XHQgKiB3ZSBtdXN0IGRyb3AgaW5zdGVhZC5cbitcdFx0ICovXG4gXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZVTExfUklORztcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuIFx0LyogZGV2LVx1MDAzZWxsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi9cbi1cdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XG4gXHR0eHFfdHJhbnNfY29uZF91cGRhdGUocXVldWUpO1xuIFxuIFx0LyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovXG5AQCAtMjExNiwxMyArMjE2NCw1MCBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbiBcdHJldHVybiB0b3RhbDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuKy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuK3N0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbitcdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZClcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4rXG4rXHRpZiAoISh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cdTAwM2VkZXYsIHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbitcbitcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbitcdHNtcF9tYigpO1xuK1x0aWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkge1xuK1x0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCArPSBjb25zdW1lZDtcbitcdFx0aWYgKHRmaWxlLVx1MDAzZWNvbnNfY250IFx1MDAzZT0gdGZpbGUtXHUwMDNldHhfcmluZy5zaXplIC8gMiB8fFxuK1x0XHQgICAgX19wdHJfcmluZ19lbXB0eShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSkge1xuK1x0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUodHhxKTtcbitcdFx0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbit7XG4rXHR2b2lkICpwdHI7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbitcdHB0ciA9IF9fcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbitcdGlmIChwdHIpXG4rXHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgMSk7XG4rXG4rXHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0cmV0dXJuIHB0cjtcbit9XG4rXG4rc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbitcdFx0XHQgICBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4ge1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4gXHR2b2lkICpwdHIgPSBOVUxMO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4rXHRwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpO1xuIFx0aWYgKHB0cilcbiBcdFx0Z290byBvdXQ7XG4gXHRpZiAobm9ibG9jaykge1xuQEAgLTIxMzQsNyArMjIxOSw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycilcbiBcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4rXHRcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4gXHRcdGlmIChwdHIpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuQEAgLTIxNzEsNyArMjI1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4gXG4gXHRpZiAoIXB0cikge1xuIFx0XHQvKiBSZWFkIGZyYW1lcyBmcm9tIHJpbmcgKi9cbi1cdFx0cHRyID0gdHVuX3JpbmdfcmVjdih0ZmlsZSwgbm9ibG9jaywgXHUwMDI2ZXJyKTtcbitcdFx0cHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuIFx0XHRpZiAoIXB0cilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTI3MDQsNyArMjc4OSw3IEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuIFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cdGludCBlcnI7XG4rXHRpbnQgZXJyLCBpO1xuIFxuIFx0aWYgKHRmaWxlLVx1MDAzZWRldGFjaGVkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0yODMzLDggKzI5MTgsMTIgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbiBcdC8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpblxuIFx0ICogeG9mZiBzdGF0ZS5cbiBcdCAqL1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikpXG4tXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tXHUwMDNlZGV2KTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2ldKTtcbitcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbitcdFx0fVxuK1x0fVxuIFxuIFx0c3Ryc2NweShpZnItXHUwMDNlaWZyX25hbWUsIHR1bi1cdTAwM2VkZXYtXHUwMDNlbmFtZSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0zNjMwLDYgKzM3MTksMTMgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG4gXHRcdFx0XHRcdCAgZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRcdFx0ICB0dW5fcHRyX2ZyZWUpO1xuIFxuK1x0aWYgKCFyZXQpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XG4rXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuK1x0XHRcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRrZnJlZShyaW5ncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0zNzM4LDYgKzM4MzQsMjkgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4gXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4rdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuK3tcbitcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4rXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuK1xuK1x0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZ0dW5fZm9wcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0dGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdGlmICghdGZpbGUpXG4rXHRcdHJldHVybjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbitcdHR1biA9IHJjdV9kZXJlZmVyZW5jZSh0ZmlsZS1cdTAwM2V0dW4pO1xuK1x0aWYgKHR1bilcbitcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodHVuX3dha2VfcXVldWUpO1xuK1xuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcbiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDY5NDliNzA0MTY2ZDUuLjNlNzJiOWM2YWYwY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5AQCAtMTc2LDEzICsxNzYsMjEgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbitzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcHJvZHVjZShzdHJ1Y3Qgc29jayAqc2ssXG4rXHRcdFx0XHQgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiB7XG4rXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmaWxlO1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRyeHEtXHUwMDNlaGVhZCA9IDA7XG4tXHRyeHEtXHUwMDNldGFpbCA9IHB0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXHUwMDNlcnhfcmluZywgcnhxLVx1MDAzZXF1ZXVlLFxuLVx0XHRcdFx0XHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNm52cS1cdTAwM2VyeF9yaW5nLVx1MDAzZWNvbnN1bWVyX2xvY2spO1xuK1x0cnhxLVx1MDAzZXRhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXHUwMDNlcnhfcmluZywgcnhxLVx1MDAzZXF1ZXVlLFxuK1x0XHRcdFx0XHQgICAgICAgVkhPU1RfTkVUX0JBVENIKTtcbitcbitcdGlmIChyeHEtXHUwMDNldGFpbClcbitcdFx0dHVuX3dha2VfcXVldWUoZmlsZSwgcnhxLVx1MDAzZXRhaWwpO1xuK1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2bnZxLVx1MDAzZXJ4X3JpbmctXHUwMDNlY29uc3VtZXJfbG9jayk7XG4gXHRyZXR1cm4gcnhxLVx1MDAzZXRhaWw7XG4gfVxuIFxuQEAgLTIwOSwxNCArMjE3LDE1IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXG4gXHRyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxuK1x0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc2ssIG52cSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIG91dDpcbkBAIC0xMDA0LDcgKzEwMTMsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmIChydnEtXHUwMDNlcnhfcmluZylcbi1cdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhydnEpO1xuK1x0XHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gXHRoZWFkID0gc2tiX3BlZWsoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbmluZGV4IDgwMTY2ZWI2MmY0MWMuLjVmM2UyMDZjN2E3MzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5AQCAtMjIsNiArMjIsNyBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwge1xuICNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XG4gc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpO1xuK3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxuIHtcbkBAIC01NSw2ICs1Niw4IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmYpXG4gXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbmluZGV4IGQyYzM2MjliYmU0NTEuLmM5NWU4OTE5MDNmMDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuQEAgLTk2LDYgKzk2LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuKyAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4re1xuK1x0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuICAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBwb2ludGVyIHRoYXQgaXMgYmVpbmcgcXVldWVkXG5AQCAtMTAzLDggKzExNywxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRyX3JpbmdfZnVsbF9iaChzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKVxuIHtcbi1cdGlmICh1bmxpa2VseSghci1cdTAwM2VzaXplKSB8fCBkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0aW50IHAgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XG4rXG4rXHRpZiAocClcbitcdFx0cmV0dXJuIHA7XG4gXG4gXHQvKiBNYWtlIHN1cmUgdGhlIHBvaW50ZXIgd2UgYXJlIHN0b3JpbmcgcG9pbnRzIHRvIGEgdmFsaWQgZGF0YS4gKi9cbiBcdC8qIFBhaXJzIHdpdGggdGhlIGRlcGVuZGVuY3kgb3JkZXJpbmcgaW4gX19wdHJfcmluZ19jb25zdW1lLiAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggNzlkNTNjN2ExZWJkYy4uYTBkZGM1MGE3NTM0MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjksNiArNjksMTAgQEBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcdDB4MDA0MFxuKy8qIFN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBpcyBmdWxsLCBzbyBhblxuKyAqIGF0dGFjaGVkIHFkaXNjIGFwcGxpZXMgYmFja3ByZXNzdXJlIGluc3RlYWQgb2YgYmVpbmcgYnlwYXNzZWQuXG4rICovXG4rI2RlZmluZSBJRkZfQkFDS1BSRVNTVVJFXHQweDAwODBcbiAjZGVmaW5lIElGRl9OT19QSVx0MHgxMDAwXG4gLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqL1xuICNkZWZpbmUgSUZGX09ORV9RVUVVRVx0MHgyMDAwXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5pbmRleCAyZWMwN2RlMWQ3M2JlLi4yYzg1NTI1NzA0YzE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbkBAIC02Nyw2ICs2NywxMCBAQFxuICNkZWZpbmUgSUZGX1RBUFx0XHQweDAwMDJcbiAjZGVmaW5lIElGRl9OQVBJXHQweDAwMTBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbisvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cbisgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLlxuKyAqL1xuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTU6NTIuMzYxOTQ2MTc5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk5MjE5ODM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgVFVOL1RBUCBhbmQgdmhvc3RfbmV0IEJhY2twcmVzc3VyZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgbmV3IHBhdGNoIGhlcmUgdGhhdCdzIHR3ZWFraW5nIHRoZSBUVU4vVEFQIGFuZCB2aG9zdF9uZXQgZHJpdmVycy4gSXQncyBpbnRyb2R1Y2luZyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBzcGVjaWZpY2FsbHkgZm9yIFRVTi9UQVAgZGV2aWNlcy4gVGhlIGtleSB0aGluZyBpcyB0aGF0LCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBwYWNrZXQgZHJvcHBpbmcgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbCwgaXQnbGwgc3RvcCB0aGUgcXVldWUgYW5kIGFsbG93IHRoZSBhdHRhY2hlZCBxZGlzYyB0byBtYW5hZ2UgdGhlIGJhY2twcmVzc3VyZS4gVGhhdCdzIGEgcHJldHR5IGludGVyZXN0aW5nIGNoYW5nZSB0byBob3cgdGhlc2UgZHJpdmVycyBiZWhhdmUgdW5kZXIgbG9hZC5cblxuTG9va3MgbGlrZSB0aGUgY2hhbmdlcyB0b3VjaCBhIGZhaXIgbnVtYmVyIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHNvbWUgaGVhZGVyIGZpbGVzIGluIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzLCBhbmQgZXZlbiB0aGUgVUFQSSBkZWZpbml0aW9ucy4gSSBjYW4gY29uZmlybSB0aGlzIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIGV4cG9zZWQgdGhyb3VnaCB0aGUgVFVOU0VUSUZGIGlvY3RsIG9uIGAvZGV2L25ldC90dW5gIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggaXMgZ29vZCBmb3IgYWNjZXNzaWJpbGl0eS4gVGhleSd2ZSBhbHNvIG1vZGlmaWVkIHRoZSB2aG9zdF9uZXQgZHJpdmVyIHRvIGhhbmRsZSBxdWV1ZSB3YWtpbmcgd2hlbiBjb25zdW1pbmcgcGFja2V0cyBmcm9tIHRoZSByaW5nLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgdGhlIG92ZXJhbGwgZmxvdy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdlIHNob3VsZCBjb25zaWRlciBmdXp6aW5nPyBHaXZlbiB0aGF0IGl0IG1vZGlmaWVzIGNvcmUgVFVOL1RBUCBsb2dpYyBhbmQgdGhvc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgdGFyZ2V0cywgKmVzcGVjaWFsbHkqIGdpdmVuIGhvdyBoZWF2aWx5IHRoZXkncmUgZnV6emVkLCBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBmdXp6YWJsZS4gVGhlIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBpcyBhZGRlZCB0byBgVFVOX0ZFQVRVUkVTYCwgc28gaXQgbG9va3MgbGlrZSBpdCdzIGJlZW4gcHJvcGVybHkgaW50ZWdyYXRlZC4gSSBzZWUgdGhlIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcyBgdHVuX25ldF94bWl0YCwgYHR1bl9yaW5nX3JlY3ZgLCBgdHVuX3NldF9pZmZgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgLCBhbmQgYHZob3N0X25ldF9idWZfcGVla2Agd2hpY2ggaXMgYSBzdWJzdGFudGlhbCBpbXBhY3Qgb24gdGhlIGNvcmUgbG9naWMgYW5kIGNyaXRpY2FsIGFyZWFzIGZvciB0ZXN0aW5nLiBJIGFsc28gc2VlIG5ldyBmdW5jdGlvbnMgbGlrZSBgdHVuX2ZvcmNlX3dha2VfcXVldWVgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGB0dW5fcmluZ19jb25zdW1lYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAgd2hpY2ggaXMgYSBnb29kIGluZGljYXRpb24gb2YgdGhlIGludGVybmFsIG1lY2hhbmljcyBiZWluZyBjaGFuZ2VkLlxuXG5UaW1lIHRvIGxvb2sgaW50byB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIHRvIHdvcmsuIE9idmlvdXNseSwgVFVOL1RBUCBpdHNlbGYgbmVlZHMgYENPTkZJR19UVU5gLCBhbmQgdmhvc3RfbmV0LCByZXF1aXJlcyBgQ09ORklHX1ZIT1NUX05FVGAuIExldCdzIGp1c3QgY29uZmlybSB0aG9zZSByZXF1aXJlbWVudHMgZXhpc3QgaW4gYGRyaXZlcnMvbmV0L3R1bi5jYCBhbmQgYGRyaXZlcnMvdmhvc3QvbmV0LmNgLCBzbyBJIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5BbHJpZ2h0LCBJJ2xsIHVzZSB0aGUgZGVmYXVsdCBncmVwcGVyIHRvIHZlcmlmeSBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDYwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MDAuMzU0MTQ3NzI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzYxMTM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVFVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zODY9Y29uZmlnIFJJT05FVF9SWF9TSVpFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MTpjb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDE1PWNvbmZpZyBUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDIwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDIxOmNvbmZpZyBUVU5fVk5FVF9DUk9TU19MRVxcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGNyb3NzLWVuZGlhbiB2bmV0IGhlYWRlcnMgb24gbGl0dGxlLWVuZGlhbiBrZXJuZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjowMC40NjE3NjQ0M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDE5MjEyMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IFZIT1NUX05FVCBJbnF1aXJ5KipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRob3VnaHQgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byBjaGVjayBpbnRvIGBWSE9TVF9ORVRgLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBzdGFydGluZyBwb2ludCB3aGVuIHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmcgbGlrZSB0aGlzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHN0YXRlIG9mIHRoYXQgc3Vic3lzdGVtLCBpdCB1c3VhbGx5IGhhcyBzb21lIHRlbGwgdGFsZSBsb2dzIGFuZCBpc3N1ZXMgaWYgbm90IGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpdHMgcHJlc2VuY2UsIGNvbmZpZ3VyYXRpb24sIGFuZCBzdGF0dXMgb2YgYW55IGFzc29jaWF0ZWQgbmV0d29ya2luZyBjb21wb25lbnRzLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGZvciBhbnkgb2J2aW91cyBlcnJvciBtZXNzYWdlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIGl0LiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1OTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjAzLjUwMzY5MDIzOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU5MjIyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX05FVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzMtXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXFx0dHJpc3RhdGUgXFxcIkhvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjowMy42NDk2NTU1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDc0ODcyMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUga25vd2xlZGdlYWJsZSBpbiB0aGUgZmllbGQ6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IFZIT1NUX05FVCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFZIT1NUX05FVCBtb2R1bGUsIGluc2lkZSBhbmQgb3V0LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZCBpczogd2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSSBjYW4ndCBqdXN0IGRpdmUgaW4gd2l0aG91dCBrbm93aW5nIHRoZSBmb3VuZGF0aW9uIGl0J3MgYnVpbHQgb24uIEkgaGF2ZSB0byB0cmFjZSBldmVyeXRoaW5nIGFuZCB1bmRlcnN0YW5kIHRoZSB3aG9sZSBwaWN0dXJlLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIHN5c3RlbSBjb21wb25lbnRzIHRoaXMgZGVwZW5kcyBvbi4gVGhpcyBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3RpbmcsIG9wdGltaXppbmcsIGFuZCBldmVuIGp1c3QgZm9yIGFyY2hpdGVjdGluZyBteSBhcHByb2FjaCB0byB3aGF0ZXZlciBJJ20gd29ya2luZyBvbi4gRGVwZW5kZW5jeSBkaXNjb3ZlcnkgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIGdldHRpbmcgdGhlIGxheSBvZiB0aGUgbGFuZCwgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgZW5zdXJpbmcgcHJvcGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgbm9uLW5lZ290aWFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjowNi43OTcxNDU3NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzOTgzOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zND1jb25maWcgVkhPU1RfTkVUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzY6XFx0ZGVwZW5kcyBvbiBORVQgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRCBcXHUwMDI2XFx1MDAyNiAoVFVOIHx8ICFUVU4pIFxcdTAwMjZcXHUwMDI2IChUQVAgfHwgIVRBUClcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzctXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIlZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjQ4OlxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00OS1cXHRzZWxlY3QgVkhPU1RcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjU4OlxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OS1cXHRzZWxlY3QgVkhPU1RcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZz03MD1jb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcyOlxcdGRlcGVuZHMgb24gRVZFTlRGRFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03My1cXHRzZWxlY3QgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzQtXFx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3NTpcXHRkZXBlbmRzIG9uIFZEUEFcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjowNi45MzExMzQ5NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzM2Nzk4MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgVFVOYCBhbmQgYFZIT1NUX05FVGAgYXMgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gV2FpdCwgd2hhdCBhYm91dCBgRVZFTlRGRGA/IEl0J3MgdXN1YWxseSBlbmFibGVkLCBidXQganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgaW5jbHVkZSBpdCBpbiBteSB0aGlua2luZy4gTm93LCBhIHF1aWNrIGNoZWNr4oCmIHllcCwgYFZIT1NUX05FVGAgKmRvZXMqIGRlcGVuZCBvbiBib3RoIGBORVRgIGFuZCBgRVZFTlRGRGAuIEFuZCB3ZSBhbHJlYWR5IGtub3cgYE5FVGAgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIHRoYXQncyBnb29kLlxuXG5SaWdodCwgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgdGhlIHBhdGNoIGlzIHRvdWNoaW5nLiBJIHNlZSBpdCdzIG1vZGlmeWluZzpcblxuKiAgIGB0dW5fbmV0X3htaXRgXG4qICAgYHR1bl9yaW5nX3JlY3ZgICh3aXRoIGEgY2hhbmdlIG5vdyB0YWtpbmcgYHR1bmAgYW5kIGB0ZmlsZWApIC0gYnV0IGl0IGlzIHN0YXRpY1xuKiAgIGB0dW5fc2V0X2lmZmAgLSB3aGljaCBpcyBzdGF0aWMsIGJ1dCByZWFjaGFibGUgdmlhIGB0dW5fY2hyX2lvY3RsYC5cbiogICBgdHVuX3F1ZXVlX3Jlc2l6ZWAgLSB0aGlzIGlzIGFsc28gc3RhdGljLCByZWFjaGFibGUgdmlhIGB0dW5fY2hyX2lvY3RsYC5cbiogICBgdHVuX3dha2VfcXVldWVgIC0gYWhhLCB0aGlzIG9uZSdzIGFuIGV4cG9ydGVkIHN5bWJvbCFcbiogICBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCAtIHdoaWNoIGlzIHN0YXRpY1xuKiAgIGB2aG9zdF9uZXRfYnVmX3BlZWtgIC0gYW5kIHRoaXMgb25lIGlzIGFsc28gc3RhdGljXG5cbk9rYXksIHNvIHRoZSBtb3N0IGltcG9ydGFudCBhcmVhcyB0byBmb2N1cyBvbiBzZWVtIHRvIGJlOlxuXG4qICAgYHR1bl9uZXRfeG1pdGAg4oCTIGFsd2F5cyBpbXBvcnRhbnQgaW4gbmV0d29yayBkcml2ZXJzXG4qICAgYHR1bl93YWtlX3F1ZXVlYCDigJMgY3JpdGljYWwgYmVjYXVzZSBpdCdzIGV4cG9ydGVkLCBhbmQgdGhlcmVmb3JlIGhhcyBleHRlcm5hbCBkZXBlbmRlbmNpZXMuXG4qICAgYHR1bl9jaHJfaW9jdGxgIOKAkyBiZWNhdXNlIGl0IHRvdWNoZXMgYm90aCBgdHVuX3NldF9pZmZgIGFuZCBgdHVuX3F1ZXVlX3Jlc2l6ZWBcbiogICBBbmQgZmluYWxseSwgSSBuZWVkIHRvIGxvb2sgaW50byBgdmhvc3QvbmV0LmNgLCBiZWNhdXNlIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIGNoYW5nZSB0byB0aGUgYHZob3N0X25ldGAgaW9jdGxzIGFuZCBvcGVuIG9yIHJlbGVhc2UgZnVuY3Rpb25zLiBXYWl0IC0gaXQgbG9va3MgbGlrZSBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBjYWxsZWQgYnkgYHZob3N0X25ldF9idWZfcGVla2AuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgY2FsbGVkIGJ5IGBwZWVrX2hlYWRfbGVuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgc29tZXRoaW5nIGxpa2UgYGhhbmRsZV9yeGAgaW4gYHZob3N0L25ldC5jYC5cblxuT2theSwgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIGBwZWVrX2hlYWRfbGVuYCBpcyB1c2VkLiBUaW1lIHRvIGRpdmUgaW50byBgdmhvc3QvbmV0LmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MTQuMjY3OTM3NjQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc2ODY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZWVrX2hlYWRfbGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz05ODM9c3RhdGljIHZvaWQgaGFuZGxlX3R4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAwOC1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDk6c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMTAte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDI5LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAzMDpzdGF0aWMgaW50IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzMS1cXHRcXHRcXHRcXHQgICAgICBib29sICpidXN5bG9vcF9pbnRyLCB1bnNpZ25lZCBpbnQgKmNvdW50KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM2LVxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR2cSA9IFxcdTAwMjZ0bnZxLVxcdTAwM2V2cTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMzc6XFx0aW50IGxlbiA9IHBlZWtfaGVhZF9sZW4ocm52cSwgc2spO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzOC1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTA0NS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwNDY6XFx0XFx0bGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDQ3LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTE0OT1zdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHZob3N0X25ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjAxLVxcdGRvIHtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEyMDI6XFx0XFx0c29ja19sZW4gPSB2aG9zdF9uZXRfcnhfcGVla19oZWFkX2xlbihuZXQsIHNvY2stXFx1MDAzZXNrLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTIwMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YnVzeWxvb3BfaW50ciwgXFx1MDAyNmNvdW50KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MTQuMzUzNzEzNzI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTcyNjQxOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgVmhvc3QgUlggUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGluY29taW5nIHBhY2tldHMgaW4gdGhpcyB2aG9zdCBzZXR1cC4gSSdtIGZvY3VzaW5nIG9uIHRoZSByZWNlaXZlIHBhdGgsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGZyb20gdGhlIGd1ZXN0IFZNIGdldHMgaW50byB0aGUgaG9zdC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGBoYW5kbGVfcnhgIGluIGB2aG9zdC9uZXQuY2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQuIFRoYXQncyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiBmb3IgdGhlIFJYIHNpZGUuIE5vdywgYSBzbGlnaHQgd3JpbmtsZS4uLiBgaGFuZGxlX3J4YCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQsIGFuZCBsaWtlbHkgKm5vdCogZGlyZWN0bHkgZXhwb3NlZCB0bywgc2F5LCBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gSXQncyBwcm9iYWJseSBiZWluZyBpbnZva2VkIGJ5IHNvbWUgd29ya2VyIHRocmVhZCBvciBzaW1pbGFyIG1lY2hhbmlzbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmhvdyogaXQncyBnZXR0aW5nIGNhbGxlZC5cblxuT2theSwgbGV0J3MgYmFja3RyYWNrIGEgYml0LiBUaGUgdHlwaWNhbCB2aG9zdCBzZXR1cCBpbnZvbHZlcyBpb2N0bHMgZm9yIGNvbmZpZ3VyYXRpb24uIENvdWxkIGl0IGJlIHRyaWdnZXJlZCBieSBgdmhvc3RfbmV0X2lvY3RsYCBvciBtYXliZSBgdmhvc3RfbmV0X2Nocl93cml0ZWA/IE5vLCBJJ20gcHJldHR5IHN1cmUgYHZob3N0X25ldF9pb2N0bGAgaXMgcHJpbWFyaWx5IHVzZWQgZm9yIHNldHRpbmcgdXAgdGhlIGJhY2tlbmQsIGNvbmZpZ3VyaW5nIG1lbW9yeSByZWdpb25zLCBhbmQgdGhpbmdzIGxpa2UgdGhhdCwgbm90IG5lY2Vzc2FyaWx5IGZvciBkaXJlY3QgcGFja2V0IGluamVjdGlvbi4gU28sIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlIGd1ZXN0J3MgZGF0YSBpcyBwdXNoZWQgaW50byB0aGUgaG9zdC5cblxuQWxyaWdodCwgYSBsaWtlbHkgY2FuZGlkYXRlIGhlcmUgaXMgdGhlIFRVTiBkZXZpY2UuIExldCBtZSBjaGVjayB0aGUgYHR1bl9jaHJfaW9jdGxgIGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC90dW4uY2AuIEl0J3MgcG9zc2libGUgdGhlIHNldHVwIGludm9sdmVzIHNvbWUgc29ydCBvZiBpb2N0bCBjYWxsIHRvIHNlbmQgdGhlIGRhdGEgaW50byB0aGUgbmV0d29yayBzdGFjay4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MTkuMjUwOTgyMDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTA1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9jaHJfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MzEwMT1zdGF0aWMgdW5zaWduZWQgY2hhciB0dW5fZ2V0X2FkZHJfbGVuKHVuc2lnbmVkIHNob3J0IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMTM4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMxMzk6c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxNDAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgaWZyZXFfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzIxNS1cXG5kcml2ZXJzL25ldC90dW4uYzozMjE2OlxcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cXHUwMDNlZGV2LCBcXFwidHVuX2Nocl9pb2N0bCBjbWQgJXVcXFxcblxcXCIsIGNtZCk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzIxNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0MzItXFxuZHJpdmVycy9uZXQvdHVuLmM6MzQzMzpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0MzQtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL25ldC90dW4uYy0zNDM1LXtcXG5kcml2ZXJzL25ldC90dW4uYzozNDM2OlxcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZiAoc3RydWN0IGlmcmVxKSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzQzNy19XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNDQwPXN0YXRpYyBsb25nIHR1bl9jaHJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ2My1cXHQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzozNDY0OlxcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ2NS19XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNTYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzU2Ni1cXHQucG9sbFxcdD0gdHVuX2Nocl9wb2xsLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM1Njc6XFx0LnVubG9ja2VkX2lvY3RsXFx0PSB0dW5fY2hyX2lvY3RsLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM1NjgtI2lmZGVmIENPTkZJR19DT01QQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MTkuMzUwMDk2MjY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODA2OTkyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgVFVOL1ZIT1NUIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIG15IGZvY3VzIG5lZWRzIHRvIGJlIGxhc2VyLXNoYXJwIGhlcmUuIEl0IGxvb2tzIGxpa2UgYHR1bl9jaHJfaW9jdGxgIGlzIHRoZSBjZW50cmFsIElPQ1RMIGhhbmRsZXIgaW4gdGhpcyB3aG9sZSBUVU4gc2V0dXAuIEtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBmZXcgY3J1Y2lhbCBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OiBgdHVuX25ldF94bWl0YCwgd2hpY2ggaGFuZGxlcyB0aGUgbmV0d29yayB0cmFuc21pc3Npb247IGB0dW5fY2hyX2lvY3RsYCwgb2YgY291cnNlLCBpcyBhIGNvbnRyb2wgcGxhbmUgZW50cnlwb2ludC4gYHR1bl93YWtlX3F1ZXVlYCBhbmQgZmluYWxseSBgdmhvc3RfbmV0X2lvY3RsYCB3aGljaCBpcyBrZXkgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaW5ncyBpbnRlZ3JhdGUgd2l0aCB2aG9zdC5cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB2aG9zdF9uZXRfaW9jdGxgIGFuZCBJIG5lZWQgdG8gY2hlY2sgb3V0IHdoZXJlIHRoYXQgaXMgZGVmaW5lZC4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayB3b3VsZCBiZSBpbiB0aGUgYGRyaXZlcnMvdmhvc3QvbmV0LmNgIGZpbGUuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjIzLjMzMDc5ODgxNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NDUwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTcyNj1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3NDYtXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxNzQ3OnN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTc0OC1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4ODAtXFx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfbmV0X2Nocl9wb2xsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg4MTpcXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgyLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjIzLjgzMDI1NzM1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc4OTE2MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUVU4gRGV2aWNlIEJhY2twcmVzc3VyZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZywgd2hpY2ggaXMgZW5hYmxlZCB1c2luZyB0aGUgYFRVTlNFVElGRmAgaW9jdGwuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgd2hlbiB0aGlzIGZsYWcgaXMgYWN0aXZlLCB0aGUgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24gd2lsbCBub3cgYWN0aXZlbHkgaGFsdCB0aGUgdHJhbnNtaXNzaW9uIHF1ZXVlIGlmIHRoZSByaW5nIGJ1ZmZlciBmaWxscyB1cC4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyBob3cgdGhpcyBoYWx0ZWQgcXVldWUgZ2V0cyByZXN0YXJ0ZWQuIFRoZSBsb2dpYyBoaW5nZXMgb24gdHdvIGtleSBmdW5jdGlvbnMuIEZpcnN0LCBgdmhvc3RfbmV0YCwgd2hlbiBpdCBjb25zdW1lcyBwYWNrZXRzIGZyb20gdGhlIFRVTiBkZXZpY2UsIGlzIGdvaW5nIHRvIGNhbGwgYHR1bl93YWtlX3F1ZXVlYC4gIFNlY29uZCwgYHR1bl9kb19yZWFkYCwgd2hpY2ggYWxzbyBjb25zdW1lcyBwYWNrZXRzLCBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGB0dW5fd2FrZV9xdWV1ZWAuICBJIGtub3cgYHR1bl9kb19yZWFkYCBpcyBjYWxsZWQgZnJvbSBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBzbyB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGlzIGFjdHVhbGx5IHB1bGxlZCBmcm9tIHRoZSBkZXZpY2UuIExldCBtZSBkcmlsbCBkb3duIGludG8gYHR1bl9jaHJfcmVhZF9pdGVyYCBhbmQgaXRzIGNhbGwgdG8gYHR1bl9kb19yZWFkYCBhbmQgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MjguMjA5MTc3MTg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDcwODg2MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2Nocl9yZWFkX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MjI0NT1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjI4MS1cXG5kcml2ZXJzL25ldC90dW4uYzoyMjgyOnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5kcml2ZXJzL25ldC90dW4uYy0yMjgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM1NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzU2My1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM1NjQ6XFx0LnJlYWRfaXRlciAgPSB0dW5fY2hyX3JlYWRfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYy0zNTY1LVxcdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1NjoyOC40MTYyNzI1NDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgwODQzNTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVFVOL1ZIT1NUIEhvdCBQYXRocyBmb3IgU3ltYm9saWMgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgc3ltYm9scyB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcyBvZiB0aGUgVFVOL1ZIT1NUIGNvZGUuIGB0dW5fY2hyX3JlYWRfaXRlcmAgaXMgdGhlIHJlYWQgaGFuZGxlciwgc28gaXQncyBkZWZpbml0ZWx5IG9uIG15IGxpc3QuIFRoZSBpbnN0cnVjdGlvbnMgc3VnZ2VzdCBJIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGdldCBhIG1vcmUgZm9jdXNlZCBhbmFseXNpcy5cblxuVGhlIGxpc3QgSSBoYWQgaW5pdGlhbGx5IHdhczogYHR1bl9uZXRfeG1pdGAsIGB0dW5fY2hyX2lvY3RsYCwgYHR1bl9jaHJfcmVhZF9pdGVyYCwgYHR1bl93YWtlX3F1ZXVlYCwgYW5kIGB2aG9zdF9uZXRfaW9jdGxgLlxuXG5Ib2xkIG9uLCBgdHVuX25ldF94bWl0YCBpcyAqZGVmaW5pdGVseSogYSBob3QgcGF0aCBmdW5jdGlvbi4gSXTigJlzIGVzc2VudGlhbGx5IHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZvciBUVU4gZGV2aWNlcy4gSSBuZWVkIHRvIGF2b2lkIHRob3NlLCByaWdodD8gQW5kIGB0dW5fY2hyX3JlYWRfaXRlcmAgaXMgYWxzbyBhIGhvdCBwYXRoIGJlY2F1c2UsIHdlbGwsIGl0J3MgdGhlIHJlYWQgaGFuZGxlci4gRCdvaCFcblxuTm93LCBgdHVuX3dha2VfcXVldWVgIGlzIGNhbGxlZCBldmVyeSB0aW1lIGEgcGFja2V0IGlzIGNvbnN1bWVkIGlmIHRoZSBxdWV1ZSB3YXMgc3RvcHBlZC4gSXQgKmlzKiBleHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gQnV0Li4uIGlzIGl0IGEgaG90IHBhdGg/IEl0J3MgY2FsbGVkIHdoZW4gY29uc3VtaW5nIHBhY2tldHMuIEkgbmVlZCB0byBmaWd1cmUgdGhhdCBvdXQuIEhhbmcgb24sIHdhaXQsIGB0dW5fd2FrZV9xdWV1ZWAgaXMgb25seSBjYWxsZWQgd2hlbiBgcnhxLVx1MDAzZXRhaWxgIGlzIG5vbi16ZXJvIGluIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgLiBUaGF0IG1ha2VzIGEgZGlmZmVyZW5jZS4gSXMgKnRoYXQqIGEgaG90IHBhdGg/IE1vcmUgaW52ZXN0aWdhdGlvbiBpcyByZXF1aXJlZC5cblxuTGV0J3MgbG9vayBhdCBgdHVuX3NldF9pZmZgIHRoZW4uIEl0J3Mgc3RhdGljLCB3aGljaCBpcyBnb29kLCBidXQgaXMgaXQgYSBob3QgcGF0aD8gTm8sIG5vdCByZWFsbHkuIEl0J3MgY2FsbGVkIGZyb20gYF9fdHVuX2Nocl9pb2N0bGAsIHdoaWNoIGlzIGFuIGlvY3RsIGhhbmRsZXIuIElzIGBfX3R1bl9jaHJfaW9jdGxgIGEgaG90IHBhdGg/IE5vLiBXaGF0IGFib3V0IGB0dW5fcXVldWVfcmVzaXplYD8gVGhhdCdzIGNhbGxlZCBmcm9tIGBfX3R1bl9jaHJfaW9jdGxgIHdoZW4gYFRVTlNFVFFVRVVFYCBpcyBjYWxsZWQuIFRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGEgaG90IHBhdGggZWl0aGVyLiBPa2F5LCBsZXQncyBrZWVwIGdvaW5nLiBgdmhvc3RfbmV0X2lvY3RsYCBpc24ndCBhIGhvdCBwYXRoIGVpdGhlci5cblxuTm93LCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGB0dW5fc2V0X2lmZmAgaXMgaW5saW5lZC4gSXQncyBxdWl0ZSBsYXJnZSwgc28gaXQncyBwcm9iYWJseSAqbm90KiBpbmxpbmVkLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBzaXplIHRvIGJlIHN1cmUsIHRob3VnaC4gUmlnaHQsIEkgbmVlZCB0byBnZXQgc29tZSBtb3JlIGRhdGEgb24gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6MzYuMjI0NzExNTAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjQ1NjAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fc2V0X2lmZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0yNzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHR1bl9hdHRyX2dyb3VwID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjc4Ni1cXG5kcml2ZXJzL25ldC90dW4uYzoyNzg3OnN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuZHJpdmVycy9uZXQvdHVuLmMtMjc4OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zMTM5PXN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxODYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MzE4NzpcXHRcXHRyZXQgPSB0dW5fc2V0X2lmZihuZXQsIGZpbGUsIFxcdTAwMjZpZnIpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMxODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjM2LjMyMTE3NTE2OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODk0NzgyNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXkgU3ltYm9scyBpbiB0aGUgQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBwYXRjaC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGB0dW5fc2V0X2lmZmAganVtcHMgb3V0LiBJdCdzIG5vdCBpbmxpbmVkLCBhbmQgaXQgc3BhbnMgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb2RlIChsaW5lcyAyNzg3IHRvIHJvdWdobHkgMzEwMCkuIFRoYXQgbWFrZXMgaXQgYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBpbmNsdXNpb24gaW4gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBgdHVuX3F1ZXVlX3Jlc2l6ZWAgYWxzbyBsb29rcyBwcm9taXNpbmcgZm9yIHNpbWlsYXIgcmVhc29ucy5cblxuTm93LCBgdHVuX3dha2VfcXVldWVgLi4uIGl0J3MgZXhwb3J0ZWQsIHNvIGRlZmluaXRlbHkgbm90IGlubGluZWQuIEl0J3MgY29yZSB0byB0aGUgZnVuY3Rpb25hbGl0eSBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmVhdHVyZSwgc28gaXQgc2VlbXMgbGlrZSBhIGdvb2QgY2hvaWNlIGRlc3BpdGUgdGhlIGluc3RydWN0aW9uIHRvIFwiQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy5cIiBUaGUgY2F2ZWF0IGJlaW5nIHRoYXQgYHR1bl93YWtlX3F1ZXVlYCBpcywgaW4gZmFjdCwgc3BlY2lmaWMgdG8gdGhpcyBuZXcgZmVhdHVyZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZmVhdHVyZSwgYW5kIG5vdCBzaW1wbHkgYW4gb3B0aW1pemF0aW9uLCBpdCBzZWVtcyBqdXN0aWZpYWJsZSB0byBpbmNsdWRlIGl0LlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCBgdmhvc3RfbmV0X2lvY3RsYCwgYnV0IHRoaXMgcGF0Y2ggZG9lc24ndCBhY3R1YWxseSB0b3VjaCBpdC4gSXQgZG9lcywgaG93ZXZlciwgbW9kaWZ5IGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGFuZCBgdmhvc3RfbmV0X2J1Zl9wZWVrYC4gSG1tLCBhcmUgdGhlc2UgaG90LXBhdGggZnVuY3Rpb25zPyBZZXMsIGFzIHRoZXkncmUgaW52b2x2ZWQgaW4gZXZlcnkgcGFja2V0IHdpdGhpbiBgaGFuZGxlX3J4YC4gU28sIEknbGwgYXZvaWQgbGlzdGluZyB0aG9zZSwgYXMgc3VnZ2VzdGVkLlxuXG5TbyBmYXIsIG15IGxpc3QgbG9va3MgbGlrZSB0aGlzOlxuXG4qICAgYHR1bl9zZXRfaWZmYFxuKiAgIGB0dW5fcXVldWVfcmVzaXplYFxuKiAgIGB0dW5fd2FrZV9xdWV1ZWBcblxuT2theSwgYmVmb3JlIEkgZmluYWxpemUsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHR1bl93YWtlX3F1ZXVlYC4gSXQncyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHZob3N0X25ldF9idWZfcGVla2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBwZWVrX2hlYWRfbGVuYCwgd2hpY2ggaXMgdWx0aW1hdGVseSBjYWxsZWQgZnJvbSBgaGFuZGxlX3J4YCBpbiBhIGxvb3AuIFllcCwgaXQncyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24uIEJ1dCwgd2FpdCwgSSBrZWVwIGNvbWluZyBiYWNrIHRvIHRoZSBmYWN0IHRoYXQgaXQncyB0aGUgcHJpbWFyeSBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24uIEl0J3MgcmVhc29uYWJsZSB0byBpbmNsdWRlIGl0LlxuXG5GaW5hbGx5LCBJIHNob3VsZCBpbmNsdWRlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSB1c2VyIGludGVyZmFjZS4gTGV0J3MgYWRkIGVpdGhlciBgX190dW5fY2hyX2lvY3RsYCBvciBgdHVuX2Nocl9pb2N0bGAuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgdHVuX3F1ZXVlX3Jlc2l6ZWAgbWFrZXMgc2Vuc2UuIFJpZ2h0LCBhbGwgc2VlbXMgZ29vZC5cblxuKipGaW5hbCBMaXN0KipcblxuT2theSwgaGVyZSdzIG15IGZpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9sczpcblxuKiAgIGB0dW5fc2V0X2lmZmBcbiogICBgdHVuX3F1ZXVlX3Jlc2l6ZWBcbiogICBgdHVuX3dha2VfcXVldWVgXG4qICAgYHR1bl9jaHJfaW9jdGxgIChvciBgX190dW5fY2hyX2lvY3RsYClcblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTY6NDQuMjE1OTYxMjkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3ODg5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0zNjg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzY5OC1cXG5kcml2ZXJzL25ldC90dW4uYzozNjk5OnN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3MDAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzczMz1zdGF0aWMgaW50IHR1bl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzQ0LVxcdGNhc2UgTkVUREVWX0NIQU5HRV9UWF9RVUVVRV9MRU46XFxuZHJpdmVycy9uZXQvdHVuLmM6Mzc0NTpcXHRcXHRpZiAodHVuX3F1ZXVlX3Jlc2l6ZSh0dW4pKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NDYtXFx0XFx0XFx0cmV0dXJuIE5PVElGWV9CQUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjQ0LjM4Mzc1NTk5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzcwOTYwNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGB0dW5fcXVldWVfcmVzaXplYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYE5FVERFVl9DSEFOR0VfVFhfUVVFVUVfTEVOYCBldmVudCwgd2hpY2ggdHJpZ2dlcnMgYSBjYWxsIHRvIGB0dW5fcXVldWVfcmVzaXplYC4gVGhlIGdvb2QgbmV3cyBpcywgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgaXNuJ3QgaW4gYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoIOKAkyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZCwgYW5kIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExlc3MgcHJlc3N1cmUgb24gb3B0aW1pemF0aW9uIHRoZXJlLCB0aG91Z2ggd2Ugc3RpbGwgd2FudCB0byBlbnN1cmUgaXTigJlzIGRvbmUgY29ycmVjdGx5LlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IGB0dW5fZm9yY2Vfd2FrZV9xdWV1ZWAuIEl0J3MgYSBuZXcgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSBjdXJpb3VzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBxdWV1ZSBsZW5ndGggY2hhbmdlLiBXb25kZXJpbmcgaWYgdGhpcyBpcyBhYm91dCBlbnN1cmluZyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSByZWZsZWN0ZWQgb24gdGhlIGhhcmR3YXJlIGxheWVyLiBPciBpZiBpdCBpcyBzb21lIHNvcnQgb2YgYW4gb3B0aW1pemF0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjQ3Ljc1NDcxOTg4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzA3NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9mb3JjZV93YWtlX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTY1Nz1zdGF0aWMgdm9pZCB0dW5fZGV0YWNoX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNzAwLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjcwMTpzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTcwMi1cXHRcXHRcXHRcXHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTcxNT1zdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy03NTktXFx0dGZpbGUtXFx1MDAzZXNvY2tldC5zay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNj0gflJDVl9TSFVURE9XTjtcXG5kcml2ZXJzL25ldC90dW4uYzo3NjA6XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtNzYxLVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9Mjc4Nz1zdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjkyMy1cXHRcXHRcXHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI5MjQ6XFx0XFx0XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMjkyNS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNjk5PXN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzcyNC1cXHRcXHRcXHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjM3MjU6XFx0XFx0XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzcyNi1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjQ3Ljg4MjAzMzQxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcxNDgzMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgY29kZSBzbmlwcGV0LCBleHByZXNzZWQgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHR1bl9mb3JjZV93YWtlX3F1ZXVlYCoqXG5cblJpZ2h0LCBzbyBgdHVuX2ZvcmNlX3dha2VfcXVldWVgIGlzIGEgYHN0YXRpY2AgZnVuY3Rpb24uIFRoZSBjb21waWxlciAqbWlnaHQqIGlubGluZSBpdCBpbiBlYWNoIGNhbGwgc2l0ZSwgd2hpY2ggd291bGQgbWFrZSB0cmFjaW5nIGl0cyBleGVjdXRpb24gYSBiaXQgbW9yZSBjb21wbGljYXRlZC4gQnV0LCBzaW5jZSBpdCdzIHVzZWQgaW4gYSBmZXcgZGlmZmVyZW50IHBsYWNlcyDigJMgYHR1bl9hdHRhY2hgLCBgdHVuX3NldF9pZmZgLCBhbmQgYHR1bl9xdWV1ZV9yZXNpemVgIOKAkyBpbmxpbmluZyBpc24ndCBndWFyYW50ZWVkLCBhbmQgaG9uZXN0bHksIHRoZSBjb21waWxlciBtaWdodCBub3QgZXZlbiBvcHRpbWl6ZSBpdCB0aGF0IHdheS4gSW4gYW55IGNhc2UsIGl0J3Mgc2FmZXIgYW5kIGNsZWFyZXIgdG8ganVzdCBsaXN0IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBkaXJlY3RseSwgc28gSSdsbCBrZWVwIHRyYWNrIG9mIHRob3NlOiBgdHVuX2F0dGFjaGAsIGB0dW5fc2V0X2lmZmAsIGFuZCBgdHVuX3F1ZXVlX3Jlc2l6ZWAuXG5cbk5vdywgbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0dW5fYXR0YWNoYC4gVGhhdCdzIHdoZXJlIEknbGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxODIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNzo1Njo1MS44NTM1MjAyODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTc4MDU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTcwMT1zdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtNzE0LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjcxNTpzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtNzE2LVxcdFxcdCAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9OTM3PXN0YXRpYyBpbnQgdHVuX25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy05NjUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnR1bi1cXHUwMDNlZGlzYWJsZWQpO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjk2NjpcXHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgdHVuLVxcdTAwM2VmaWxlLCBmYWxzZSwgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSSxcXG5kcml2ZXJzL25ldC90dW4uYy05NjctXFx0XFx0XFx0IGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgSUZGX05BUElfRlJBR1MsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI3ODc9c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTI4MjYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjgyNzpcXHRcXHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSwgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTk9GSUxURVIsXFxuZHJpdmVycy9uZXQvdHVuLmMtMjgyOC1cXHRcXHRcXHRcXHQgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTI5OTg9c3RhdGljIHZvaWQgdHVuX2RldGFjaF9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgaW50IG4pXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMDEyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMwMTM6c3RhdGljIGludCB0dW5fYXR0YWNoX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwMTQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzA0ND1zdGF0aWMgaW50IHR1bl9zZXRfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA2MC1cXHRcXHRcXHRnb3RvIHVubG9jaztcXG5kcml2ZXJzL25ldC90dW4uYzozMDYxOlxcdFxcdHJldCA9IHR1bl9hdHRhY2godHVuLCBmaWxlLCBmYWxzZSwgdHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9OQVBJLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTMwNjItXFx0XFx0XFx0XFx0IHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSV9GUkFHUywgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zMTM5PXN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzItXFxuZHJpdmVycy9uZXQvdHVuLmM6MzM3MzpcXHRcXHRyZXQgPSB0dW5fYXR0YWNoX2ZpbHRlcih0dW4pO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA3OjU2OjUyLjA1NTMxMDA5OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTg1NTcwMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGB0dW5fYXR0YWNoYCBzZWVtcyBsaWtlIGFub3RoZXIgZ29vZCBmdW5jdGlvbiB0byBrZWVwIGFuIGV5ZSBvbi4gTGV0J3MgbGlzdCB0aGUga2V5IGZvY3VzIHN5bWJvbHM6IGB0dW5fc2V0X2lmZmAsIGB0dW5fcXVldWVfcmVzaXplYCwgYHR1bl9hdHRhY2hgLCBhbmQgYHR1bl93YWtlX3F1ZXVlYC4gQXJlIHRoZXJlIGFueSBvdGhlciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IFRoZSBwYXRjaCBhbHRlcnMgYGRyaXZlcnMvdmhvc3QvbmV0LmNgLCBzbyBgQ09ORklHX1ZIT1NUX05FVGAgaXMgcmVsZXZhbnQuIEFsc28sIHNpbmNlIGl0J3MgYSBUVU4vVEFQIG1vZGlmaWNhdGlvbiwgYENPTkZJR19UVU5gIGlzIGRlZmluaXRlbHkgaW52b2x2ZWQuXG5cbk5vdywgbGV0J3MganVzdCBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElmIGBDT05GSUdfVkhPU1RfTkVUYCBpcyB0aGUgb25seSBjb25maWcgbmVlZGVkPyBMZXQncyBjaGVjayB0aGUgZGVwZW5kZW5jeS4gYENPTkZJR19WSE9TVF9ORVRgIGRlcGVuZHMgb24gYE5FVCBcdTAwMjZcdTAwMjYgRVZFTlRGRCBcdTAwMjZcdTAwMjYgKFRVTiB8fCAhVFVOKSBcdTAwMjZcdTAwMjYgKFRBUCB8fCAhVEFQKWAuIFNvLCB5ZXMsIGJvdGggYENPTkZJR19WSE9TVF9ORVRgIGFuZCBgQ09ORklHX1RVTmAgYXJlIHJlcXVpcmVkLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHN5bnRoZXNpemUgbXkgY29uY2x1c2lvbnMuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBgSUZGX0JBQ0tQUkVTU1VSRWAgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLiBXaGVuIGVuYWJsZWQsIGl0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgdGhlIHF1ZXVlcyBiZWhhdmUgaW4gYHR1bl9uZXRfeG1pdGAgYW5kIGB2aG9zdF9uZXRgIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwg4oCTIGl0IHN0b3BzIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMsIGVuYWJsaW5nIHRoZSBhdHRhY2hlZCBxZGlzYyB0byBhcHBseSBiYWNrcHJlc3N1cmUuIFRoaXMgYWZmZWN0cyBjb3JlIFRVTi9UQVAgbG9naWMgYW5kIHRoZSB2aG9zdF9uZXQgZHJpdmVyLiBCZWNhdXNlIHRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwgYW5kIHVzZXItcmVhY2hhYmxlIHZpYSBpb2N0bHMgYW5kIG5ldHdvcmsgdHJhZmZpYywgaXQncyBhYnNvbHV0ZWx5IHJpcGUgZm9yIGZ1enppbmcuXG5cbk15IGZpbmFsIGRldGVybWluYXRpb24gaXM6XG5cbldvcnRoRnV6emluZzogdHJ1ZVxuRm9jdXNTeW1ib2xzOiBgdHVuX3NldF9pZmZgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGB0dW5fYXR0YWNoYCwgYHR1bl93YWtlX3F1ZXVlYFxuRW5hYmxlQ29uZmlnczogYFRVTmAsIGBWSE9TVF9ORVRgXG5SZWFzb25pbmc6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBJRkZfQkFDS1BSRVNTVVJFYCBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMuIFdoZW4gZW5hYmxlZCwgdGhpcyBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gYHR1bl9uZXRfeG1pdGAgYW5kIGB2aG9zdF9uZXRgIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIHZpcnR1YWxpemF0aW9uIGRyaXZlcnMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBgVFVOU0VUSUZGYCBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE4OCwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDc6NTc6MDAuMjQwODg0MDM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNzk5NDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlZIT1NUX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fcXVldWVfcmVzaXplXCIsXG4gICAgXCJ0dW5fYXR0YWNoXCIsXG4gICAgXCJ0dW5fd2FrZV9xdWV1ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIHdoaWNoIG1vZGlmaWVzIHRoZSBxdWV1ZSBoYW5kbGluZyBsb2dpYyBpbiB0dW5fbmV0X3htaXQgYW5kIHZob3N0X25ldCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGFuZCB2aXJ0dWFsaXphdGlvbiBkcml2ZXJzIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgVFVOU0VUSUZGIGlvY3RsIGFuZCBuZXR3b3JrIHRyYWZmaWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fc2V0X2lmZlwiLFxuICAgIFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICAgIFwidHVuX2F0dGFjaFwiLFxuICAgIFwidHVuX3dha2VfcXVldWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCB3aGljaCBtb2RpZmllcyB0aGUgcXVldWUgaGFuZGxpbmcgbG9naWMgaW4gdHVuX25ldF94bWl0IGFuZCB2aG9zdF9uZXQgdG8gc3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgdmlydHVhbGl6YXRpb24gZHJpdmVycyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRVTlNFVElGRiBpb2N0bCBhbmQgbmV0d29yayB0cmFmZmljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[1] Phase: Succeeded StartedAt: 2026-08-01 07:57:12 +0000 UTC FinishedAt: 2026-08-01 07:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 07:57:12 +0000 UTC FinishedAt: 2026-08-01 07:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2] Phase: Succeeded StartedAt: 2026-08-01 07:57:12 +0000 UTC FinishedAt: 2026-08-01 11:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 07:57:12 +0000 UTC FinishedAt: 2026-08-01 11:44:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 07:57:12 +0000 UTC FinishedAt: 2026-08-01 07:57:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 07:57:12 +0000 UTC FinishedAt: 2026-08-01 07:57:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"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-workflowbn8b6/series-workflowbn8b6-convert-artifact-2414649817/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 07:57:22 +0000 UTC FinishedAt: 2026-08-01 08:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 07:57:22 +0000 UTC FinishedAt: 2026-08-01 08:18:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*48b18a6a-6d01-48ff-ae1e-3814fac623ef,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-workflowbn8b6/series-workflowbn8b6-convert-artifact-2414649817/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": "3da8d6e7-16e2-4db4-820c-7ee191bf72f1", "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-workflowbn8b6/series-workflowbn8b6-build-action-3412116087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 07:57:22 +0000 UTC FinishedAt: 2026-08-01 08:18:15 +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:*48b18a6a-6d01-48ff-ae1e-3814fac623ef,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-workflowbn8b6/series-workflowbn8b6-convert-artifact-2414649817/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": "3da8d6e7-16e2-4db4-820c-7ee191bf72f1", "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-workflowbn8b6/series-workflowbn8b6-build-action-3412116087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 08:18:49 +0000 UTC FinishedAt: 2026-08-01 08:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 08:18:49 +0000 UTC FinishedAt: 2026-08-01 08:18:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 08:18:49 +0000 UTC FinishedAt: 2026-08-01 08:19:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 08:18:49 +0000 UTC FinishedAt: 2026-08-01 08:18:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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-workflowbn8b6/series-workflowbn8b6-convert-artifact-4110262444/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 08:19:00 +0000 UTC FinishedAt: 2026-08-01 08:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 08:19:00 +0000 UTC FinishedAt: 2026-08-01 08:20:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3da8d6e7-16e2-4db4-820c-7ee191bf72f1,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-workflowbn8b6/series-workflowbn8b6-build-action-3412116087/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-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 08:21:01 +0000 UTC FinishedAt: 2026-08-01 08:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","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 08:21:01 +0000 UTC FinishedAt: 2026-08-01 08:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 08:21:01 +0000 UTC FinishedAt: 2026-08-01 08:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 08:21:01 +0000 UTC FinishedAt: 2026-08-01 08:40:59 +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:*48b18a6a-6d01-48ff-ae1e-3814fac623ef,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-workflowbn8b6/series-workflowbn8b6-convert-artifact-4110262444/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": "474eefcb-b55f-4e6f-b364-29a859f467ff", "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-workflowbn8b6/series-workflowbn8b6-build-action-1646208840/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 08:21:01 +0000 UTC FinishedAt: 2026-08-01 08:40:49 +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:*48b18a6a-6d01-48ff-ae1e-3814fac623ef,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-workflowbn8b6/series-workflowbn8b6-convert-artifact-4110262444/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": "474eefcb-b55f-4e6f-b364-29a859f467ff", "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-workflowbn8b6/series-workflowbn8b6-build-action-1646208840/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 08:40:59 +0000 UTC FinishedAt: 2026-08-01 08:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 08:40:59 +0000 UTC FinishedAt: 2026-08-01 08:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 08:40:59 +0000 UTC FinishedAt: 2026-08-01 08:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 08:40:59 +0000 UTC FinishedAt: 2026-08-01 08:42:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*474eefcb-b55f-4e6f-b364-29a859f467ff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbn8b6/series-workflowbn8b6-build-action-1646208840/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-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 08:43:02 +0000 UTC FinishedAt: 2026-08-01 11:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 08:43:02 +0000 UTC FinishedAt: 2026-08-01 11:44:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3da8d6e7-16e2-4db4-820c-7ee191bf72f1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*474eefcb-b55f-4e6f-b364-29a859f467ff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbn8b6/series-workflowbn8b6-build-action-3412116087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbn8b6/series-workflowbn8b6-build-action-1646208840/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 08:43:02 +0000 UTC FinishedAt: 2026-08-01 08:43:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 08:43:02 +0000 UTC FinishedAt: 2026-08-01 08:43:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},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-workflowbn8b6/series-workflowbn8b6-convert-artifact-3411196565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 08:43:02 +0000 UTC FinishedAt: 2026-08-01 08:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 08:43:02 +0000 UTC FinishedAt: 2026-08-01 08:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 08:43:02 +0000 UTC FinishedAt: 2026-08-01 08:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 08:43:22 +0000 UTC FinishedAt: 2026-08-01 11:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn8b6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_set_iff","tun_queue_resize","tun_attach","tun_wake_queue"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5c458073553f0ef74f5c8db1bd459c87c722a299","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"e1a0cbaf-7d72-4fd4-8f8c-a694cfe4cdf2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 08:43:22 +0000 UTC FinishedAt: 2026-08-01 11:44:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3da8d6e7-16e2-4db4-820c-7ee191bf72f1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*474eefcb-b55f-4e6f-b364-29a859f467ff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbn8b6/series-workflowbn8b6-build-action-3412116087/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbn8b6/series-workflowbn8b6-build-action-1646208840/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbn8b6/series-workflowbn8b6-convert-artifact-3411196565/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,}