Name: series-workflow6svg9 Phase: Succeeded StartedAt: 2026-09-07 14:18:41 +0000 UTC FinishedAt: 2026-09-07 18:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[0] Phase: Succeeded StartedAt: 2026-09-07 14:18:41 +0000 UTC FinishedAt: 2026-09-07 15:09:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 14:18:41 +0000 UTC FinishedAt: 2026-09-07 15:09:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_WRITEBACK", "ZSMALLOC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_WRITEBACK", "ZSMALLOC" ], "series_id": "44571f80-a9fd-4cc5-aa80-6b0695f9103b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zcomp_decompress", "decompress_bdev_page", "read_compressed_page", "read_incompressible_page", "read_from_zspool_raw" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7WlNNQUxMT0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9kZWNvbXByZXNzJiMzNDssCiAgICAmIzM0O2RlY29tcHJlc3NfYmRldl9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfY29tcHJlc3NlZF9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfaW5jb21wcmVzc2libGVfcGFnZSYjMzQ7LAogICAgJiMzNDtyZWFkX2Zyb21fenNwb29sX3JhdyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgenJhbSByZWFkIGFuZCBkZWNvbXByZXNzaW9uIHBhdGggdG8gdXNlIHNjYXR0ZXJsaXN0cyAoYHN0cnVjdCBzY2F0dGVybGlzdCAqc2dgKSB2aWEgYHpzX29ial9yZWFkX3NnX2JlZ2luKClgIC8gYHpzX29ial9yZWFkX3NnX2VuZCgpYCByYXRoZXIgdGhhbiByYXcgbWVtb3J5IHBvaW50ZXJzIGFuZCBgenNfb2JqX3JlYWRfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfZW5kKClgLiBcblxuS2V5IG9ic2VydmF0aW9uczpcbjEuIEFsbCBzdGFjay1hbGxvY2F0ZWQgc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0IHNnWy4uLl1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBzZ19pbml0X3RhYmxlKClgIHdpdGhpbiBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgb3IgY2FsbGVycyBwcmlvciB0byBiZWluZyBwYXNzZWQgb3IgaXRlcmF0ZWQgb3Zlci5cbjIuIFRoZSBgc3RydWN0IHpjb21wX3JlcSByZXFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRlY29tcHJlc3Npb24gY2FsbGJhY2suXG4zLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJ1ZmZlciBsZW5ndGhzLCBvdXQtb2YtYm91bmRzIHBhZ2UgYWNjZXNzLCBvciBpbmNvcnJlY3Qgc2NhdHRlcmxpc3QgbWFwcGluZy91bm1hcHBpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4sIHBhZ2UgdGFibGUgZGVidWdnaW5nLCBsb2NrZGVwKS5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB6Y29tcCBkZWNvbXByZXNzaW9uIGFuZCB6cmFtIHJlYWQgcGF0aHMgdG8gdXNlIHNjYXR0ZXJsaXN0cyByYXRoZXIgdGhhbiBjb250aWd1b3VzIG1lbW9yeSBwb2ludGVycywgaGFuZGxpbmcgYm90aCBzaW5nbGUtcGFnZSBvYmplY3RzIHZpYSBrbWFwX2xvY2FsX3BhZ2UgYW5kIGNyb3NzLXBhZ2Ugb2JqZWN0cyB2aWEgc2dfY29weV90b19idWZmZXIuIFRoaXMgbW9kaWZpZXMgZGF0YSBidWZmZXIgaGFuZGxpbmcgYW5kIGRlY29tcHJlc3Npb24gZmxvd3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIG1hcHBpbmcgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY2MTk5YjIxYWEzNDI3ZGQzZDhkZTk0ZDY0ZWJlNzM5MjkxYjAzNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE1OjA3OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbmluZGV4IDk3NGM0NjkxODg3ZTYuLjAyOGUyZjBmNTg3ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbkBAIC03LDYgJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZ2htZW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2F0dGVybGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzZnMuaFx1MDAzZVxuIFxuQEAgLTE1OCwxNyAmIzQzOzE2MCwzMiBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4gfVxuIFxuIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbiYjNDM7XHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfcmVxIHJlcSA9IHtcbi1cdFx0LnNyYyA9IHNyYyxcbiBcdFx0LmRzdCA9IGRzdCxcbiBcdFx0LnNyY19sZW4gPSBzcmNfbGVuLFxuIFx0XHQuZHN0X2xlbiA9IFBBR0VfU0laRSxcbiBcdH07XG4mIzQzO1x0dm9pZCAqc3JjID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0bWlnaHRfc2xlZXAoKTtcbi1cdHJldHVybiBjb21wLVx1MDAzZW9wcy1cdTAwM2VkZWNvbXByZXNzKGNvbXAtXHUwMDNlcGFyYW1zLCBcdTAwMjZ6c3RybS1cdTAwM2VjdHgsIFx1MDAyNnJlcSk7XG4mIzQzO1xuJiM0MztcdGlmIChzZ19pc19sYXN0KHNnKSkge1xuJiM0MztcdFx0LyogdGhlIG9iamVjdCBpcyBjb250YWluZWQgd2l0aGluIG9uZSBwYWdlLCByZWFkIGl0IGluLXBsYWNlICovXG4mIzQzO1x0XHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpO1xuJiM0MztcdFx0cmVxLnNyYyA9IHNyYyAmIzQzOyBzZy1cdTAwM2VvZmZzZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIHRoZSBvYmplY3Qgc3BhbnMgdHdvIHBhZ2VzLCBsaW5lYXJpemUgaXQgaW50byBsb2NhbCBjb3B5ICovXG4mIzQzO1x0XHRzZ19jb3B5X3RvX2J1ZmZlcihzZywgMiwgenN0cm0tXHUwMDNlbG9jYWxfY29weSwgc3JjX2xlbik7XG4mIzQzO1x0XHRyZXEuc3JjID0genN0cm0tXHUwMDNlbG9jYWxfY29weTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZWRlY29tcHJlc3MoY29tcC1cdTAwM2VwYXJhbXMsIFx1MDAyNnpzdHJtLVx1MDAzZWN0eCwgXHUwMDI2cmVxKTtcbiYjNDM7XHRpZiAoc3JjKVxuJiM0MztcdFx0a3VubWFwX2xvY2FsKHNyYyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gaW50IHpjb21wX2NwdV91cF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLmYzOGZkMzFmOWU0ZTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbkBAIC01LDYgJiM0Mzs1LDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gXG4mIzQzO3N0cnVjdCBzY2F0dGVybGlzdDtcbiYjNDM7XG4gI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUXHRJTlRfTUlOXG4gXG4gc3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcbkBAIC05MSw2ICYjNDM7OTMsNiBAQCB2b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKTtcbiBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4gXHRcdCAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKTtcbiBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi1cdFx0ICAgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpO1xuJiM0MztcdFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcbiBcbiAjZW5kaWYgLyogX1pDT01QX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuaW5kZXggYTliM2JiMWQzYmVmMy4uNTQzMWIxNmYyZjQ1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuQEAgLTMyLDYgJiM0MzszMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFydF9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbF9yZWFkX2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiBcbkBAIC0xMzQyLDkgJiM0MzsxMzQzLDkgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbiYjNDM7XHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcdGludCByZXQsIHByaW87XG4tXHR2b2lkICpzcmM7XG4gXG4gXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xuIFx0LyogU2luY2Ugc2xvdCB3YXMgdW5sb2NrZWQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgc3RpbGwgWlJBTV9XQiAqL1xuQEAgLTEzNjMsMTMgJiM0MzsxMzY0LDE4IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0c2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpO1xuIFx0cHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpO1xuIFxuJiM0MztcdHNnX2luaXRfdGFibGUoc2csIDEpO1xuJiM0MztcdHNnX3NldF9wYWdlKHNnLCBwYWdlLCBzaXplLCAwKTtcbiYjNDM7XG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4tXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4tXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsXG4mIzQzO1x0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsXG4gXHRcdFx0ICAgICAgIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdGNvcHlfcGFnZShzcmMsIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0a3VubWFwX2xvY2FsKHNyYyk7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdHZvaWQgKmRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiYjNDM7XG4mIzQzO1x0XHRjb3B5X3BhZ2UoZHN0LCB6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbChkc3QpO1xuJiM0MztcdH1cbiBcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuIFx0c2xvdF91bmxvY2soenJhbSwgaW5kZXgpO1xuIFxuQEAgLTIwODYsMTUgJiM0MzsyMDkyLDE5IEBAIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4mIzQzO1x0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR2b2lkICpzcmMsICpkc3Q7XG4gXG4gXHRoYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xuLVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIE5VTEwpO1xuJiM0MztcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIFBBR0VfU0laRSk7XG4mIzQzO1x0LyogYW4gaW5jb21wcmVzc2libGUgb2JqZWN0IG5ldmVyIHNwYW5zIHR3byBwYWdlcyAqL1xuJiM0MztcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7XG4gXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjb3B5X3BhZ2UoZHN0LCBzcmMpO1xuIFx0a3VubWFwX2xvY2FsKGRzdCk7XG4tXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIHNyYyk7XG4mIzQzO1x0a3VubWFwX2xvY2FsKHNyYyk7XG4mIzQzO1x0enNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjEwMyw5ICYjNDM7MjExMywxMCBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuJiM0MztcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4tXHR2b2lkICpzcmMsICpkc3Q7XG4mIzQzO1x0dm9pZCAqZHN0O1xuIFx0aW50IHJldCwgcHJpbztcbiBcbiBcdGhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XG5AQCAtMjExMywxMiAmIzQzOzIxMjQsMTEgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRwcmlvID0gZ2V0X3Nsb3RfY29tcF9wcmlvcml0eSh6cmFtLCBpbmRleCk7XG4gXG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4tXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsXG4tXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiYjNDM7XHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcbiBcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbi1cdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwgZHN0KTtcbiYjNDM7XHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSwgZHN0KTtcbiBcdGt1bm1hcF9sb2NhbChkc3QpO1xuLVx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTtcbiYjNDM7XHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0yMTI4LDI1ICYjNDM7MjEzOCwyMyBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuLVx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuJiM0MztcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4tXHR2b2lkICpzcmM7XG4mIzQzO1x0dm9pZCAqZHN0O1xuIFxuIFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbiBcdHNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTtcbiBcbiBcdC8qXG4tXHQgKiBXZSBuZWVkIHRvIGdldCBzdHJlYW0ganVzdCBmb3IgLVx1MDAzZWxvY2FsX2NvcHkgYnVmZmVyLCBpblxuLVx0ICogY2FzZSBpZiBvYmplY3Qgc3BhbnMgdHdvIHBoeXNpY2FsIHBhZ2VzLiBObyBkZWNvbXByZXNzaW9uXG4tXHQgKiB0YWtlcyBwbGFjZSBoZXJlLCBhcyB3ZSByZWFkIHJhdyBjb21wcmVzc2VkIGRhdGEuXG4mIzQzO1x0ICogTm8gZGVjb21wcmVzc2lvbiB0YWtlcyBwbGFjZSBoZXJlLCB3ZSBjb3B5IG91dCByYXcgY29tcHJlc3NlZFxuJiM0MztcdCAqIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgZGVzdGluYXRpb24gcGFnZS5cbiBcdCAqL1xuLVx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbi1cdHNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSxcbi1cdFx0XHRcdHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0bWVtY3B5X3RvX3BhZ2UocGFnZSwgMCwgc3JjLCBzaXplKTtcbi1cdHpzX29ial9yZWFkX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7XG4tXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbiYjNDM7XHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcbiYjNDM7XHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4mIzQzO1x0c2dfY29weV90b19idWZmZXIoc2csIHNnX25lbnRzKHNnKSwgZHN0LCBzaXplKTtcbiYjNDM7XHRrdW5tYXBfbG9jYWwoZHN0KTtcbiYjNDM7XHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcbiBcdG1lbXplcm9fcGFnZShwYWdlLCBzaXplLCBQQUdFX1NJWkUgLSBzaXplKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcbmluZGV4IDQ3ODQxMGM4ODBiMWYuLjViNzI5OGE1MDI2YjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxuQEAgLTQwLDEwICYjNDM7NDAsNiBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG4gXG4gdm9pZCB6c19wb29sX3N0YXRzKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3QgenNfcG9vbF9zdGF0cyAqc3RhdHMpO1xuIFxuLXZvaWQgKnpzX29ial9yZWFkX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbi1cdFx0XHRzaXplX3QgbWVtX2xlbiwgdm9pZCAqbG9jYWxfY29weSk7XG4tdm9pZCB6c19vYmpfcmVhZF9lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHQgICAgIHNpemVfdCBtZW1fbGVuLCB2b2lkICpoYW5kbGVfbWVtKTtcbiB2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbiBcdFx0XHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKTtcbiB2b2lkIHpzX29ial9yZWFkX3NnX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpO1xuZGlmZiAtLWdpdCBhL21tL3pzbWFsbG9jLmMgYi9tbS96c21hbGxvYy5jXG5pbmRleCA4MjUwMjJhN2EzMjhmLi4xMWJlMzdjNDMxNzE4IDEwMDY0NFxuLS0tIGEvbW0venNtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venNtYWxsb2MuY1xuQEAgLTExMzQsODMgJiM0MzsxMTM0LDYgQEAgdW5zaWduZWQgbG9uZyB6c19nZXRfdG90YWxfcGFnZXMoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHpzX2dldF90b3RhbF9wYWdlcyk7XG4gXG4tdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHRcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KVxuLXtcbi1cdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbi1cdHN0cnVjdCB6cGRlc2MgKnpwZGVzYztcbi1cdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XG4tXHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcbi1cdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbi1cdHZvaWQgKmFkZHI7XG4tXG4tXHQvKiBHdWFyYW50ZWUgd2UgY2FuIGdldCB6c3BhZ2UgZnJvbSBoYW5kbGUgc2FmZWx5ICovXG4tXHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbi1cdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbi1cdG9ial90b19sb2NhdGlvbihvYmosIFx1MDAyNnpwZGVzYywgXHUwMDI2b2JqX2lkeCk7XG4tXHR6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7XG4tXG4tXHQvKiBNYWtlIHN1cmUgbWlncmF0aW9uIGRvZXNuJiMzOTt0IG1vdmUgYW55IHBhZ2VzIGluIHRoaXMgenNwYWdlICovXG4tXHR6c3BhZ2VfcmVhZF9sb2NrKHpzcGFnZSk7XG4tXHRyZWFkX3VubG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuLVxuLVx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcbi1cdG9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLVx1MDAzZXNpemUgKiBvYmpfaWR4KTtcbi1cbi1cdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxuLVx0XHRvZmYgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFO1xuLVxuLVx0aWYgKG9mZiAmIzQzOyBtZW1fbGVuIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4tXHRcdC8qIHRoaXMgb2JqZWN0IGlzIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW4gYSBwYWdlICovXG4tXHRcdGFkZHIgPSBrbWFwX2xvY2FsX3pwZGVzYyh6cGRlc2MpO1xuLVx0XHRhZGRyICYjNDM7PSBvZmY7XG4tXHR9IGVsc2Uge1xuLVx0XHRzaXplX3Qgc2l6ZXNbMl07XG4tXG4tXHRcdC8qIHRoaXMgb2JqZWN0IHNwYW5zIHR3byBwYWdlcyAqL1xuLVx0XHRzaXplc1swXSA9IFBBR0VfU0laRSAtIG9mZjtcbi1cdFx0c2l6ZXNbMV0gPSBtZW1fbGVuIC0gc2l6ZXNbMF07XG4tXHRcdGFkZHIgPSBsb2NhbF9jb3B5O1xuLVxuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGFkZHIsIHpwZGVzY19wYWdlKHpwZGVzYyksXG4tXHRcdFx0XHQgb2ZmLCBzaXplc1swXSk7XG4tXHRcdHpwZGVzYyA9IGdldF9uZXh0X3pwZGVzYyh6cGRlc2MpO1xuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGFkZHIgJiM0Mzsgc2l6ZXNbMF0sXG4tXHRcdFx0XHQgenBkZXNjX3BhZ2UoenBkZXNjKSxcbi1cdFx0XHRcdCAwLCBzaXplc1sxXSk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gYWRkcjtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfYmVnaW4pO1xuLVxuLXZvaWQgenNfb2JqX3JlYWRfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbi1cdFx0ICAgICBzaXplX3QgbWVtX2xlbiwgdm9pZCAqaGFuZGxlX21lbSlcbi17XG4tXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XG4tXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2M7XG4tXHR1bnNpZ25lZCBsb25nIG9iaiwgb2ZmO1xuLVx0dW5zaWduZWQgaW50IG9ial9pZHg7XG4tXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4tXG4tXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4tXHRvYmpfdG9fbG9jYXRpb24ob2JqLCBcdTAwMjZ6cGRlc2MsIFx1MDAyNm9ial9pZHgpO1xuLVx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xuLVx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcbi1cdG9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLVx1MDAzZXNpemUgKiBvYmpfaWR4KTtcbi1cbi1cdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxuLVx0XHRvZmYgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFO1xuLVxuLVx0aWYgKG9mZiAmIzQzOyBtZW1fbGVuIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4tXHRcdGhhbmRsZV9tZW0gLT0gb2ZmO1xuLVx0XHRrdW5tYXBfbG9jYWwoaGFuZGxlX21lbSk7XG4tXHR9XG4tXG4tXHR6c3BhZ2VfcmVhZF91bmxvY2soenNwYWdlKTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfZW5kKTtcbi1cbiB2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbiBcdFx0XHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fV1JJVEVCQUNLJiMzNDssCiAgICAmIzM0O1pTTUFMTE9DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emNvbXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDtkZWNvbXByZXNzX2JkZXZfcGFnZSYjMzQ7LAogICAgJiMzNDtyZWFkX2NvbXByZXNzZWRfcGFnZSYjMzQ7LAogICAgJiMzNDtyZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UmIzM0OywKICAgICYjMzQ7cmVhZF9mcm9tX3pzcG9vbF9yYXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB6Y29tcCBkZWNvbXByZXNzaW9uIGFuZCB6cmFtIHJlYWQgcGF0aHMgdG8gdXNlIHNjYXR0ZXJsaXN0cyByYXRoZXIgdGhhbiBjb250aWd1b3VzIG1lbW9yeSBwb2ludGVycywgaGFuZGxpbmcgYm90aCBzaW5nbGUtcGFnZSBvYmplY3RzIHZpYSBrbWFwX2xvY2FsX3BhZ2UgYW5kIGNyb3NzLXBhZ2Ugb2JqZWN0cyB2aWEgc2dfY29weV90b19idWZmZXIuIFRoaXMgbW9kaWZpZXMgZGF0YSBidWZmZXIgaGFuZGxpbmcgYW5kIGRlY29tcHJlc3Npb24gZmxvd3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIG1hcHBpbmcgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY2MTk5YjIxYWEzNDI3ZGQzZDhkZTk0ZDY0ZWJlNzM5MjkxYjAzNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE1OjA3OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwppbmRleCA5NzRjNDY5MTg4N2U2Li4wMjhlMmYwZjU4N2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwpAQCAtNyw2ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1aG90cGx1Zy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oaWdobWVtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjYXR0ZXJsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2ZzLmgmZ3Q7CiAKQEAgLTE1OCwxNyAmIzQzOzE2MCwzMiBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sCiB9CiAKIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLAotCQkgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCkKJiM0MzsJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCkKIHsKIAlzdHJ1Y3QgemNvbXBfcmVxIHJlcSA9IHsKLQkJLnNyYyA9IHNyYywKIAkJLmRzdCA9IGRzdCwKIAkJLnNyY19sZW4gPSBzcmNfbGVuLAogCQkuZHN0X2xlbiA9IFBBR0VfU0laRSwKIAl9OwomIzQzOwl2b2lkICpzcmMgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwogCiAJbWlnaHRfc2xlZXAoKTsKLQlyZXR1cm4gY29tcC0mZ3Q7b3BzLSZndDtkZWNvbXByZXNzKGNvbXAtJmd0O3BhcmFtcywgJmFtcDt6c3RybS0mZ3Q7Y3R4LCAmYW1wO3JlcSk7CiYjNDM7CiYjNDM7CWlmIChzZ19pc19sYXN0KHNnKSkgewomIzQzOwkJLyogdGhlIG9iamVjdCBpcyBjb250YWluZWQgd2l0aGluIG9uZSBwYWdlLCByZWFkIGl0IGluLXBsYWNlICovCiYjNDM7CQlzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpOwomIzQzOwkJcmVxLnNyYyA9IHNyYyAmIzQzOyBzZy0mZ3Q7b2Zmc2V0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogdGhlIG9iamVjdCBzcGFucyB0d28gcGFnZXMsIGxpbmVhcml6ZSBpdCBpbnRvIGxvY2FsIGNvcHkgKi8KJiM0MzsJCXNnX2NvcHlfdG9fYnVmZmVyKHNnLCAyLCB6c3RybS0mZ3Q7bG9jYWxfY29weSwgc3JjX2xlbik7CiYjNDM7CQlyZXEuc3JjID0genN0cm0tJmd0O2xvY2FsX2NvcHk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gY29tcC0mZ3Q7b3BzLSZndDtkZWNvbXByZXNzKGNvbXAtJmd0O3BhcmFtcywgJmFtcDt6c3RybS0mZ3Q7Y3R4LCAmYW1wO3JlcSk7CiYjNDM7CWlmIChzcmMpCiYjNDM7CQlrdW5tYXBfbG9jYWwoc3JjKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogaW50IHpjb21wX2NwdV91cF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaAppbmRleCA4MWEwZjNmNmZmNDg3Li5mMzhmZDMxZjllNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaApAQCAtNSw2ICYjNDM7NSw4IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogCiYjNDM7c3RydWN0IHNjYXR0ZXJsaXN0OwomIzQzOwogI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUCUlOVF9NSU4KIAogc3RydWN0IGRlZmxhdGVfcGFyYW1zIHsKQEAgLTkxLDYgJiM0Mzs5Myw2IEBAIHZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pOwogaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLAogCQkgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCAqZHN0X2xlbik7CiBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKLQkJICAgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpOwomIzQzOwkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTsKIAogI2VuZGlmIC8qIF9aQ09NUF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBhOWIzYmIxZDNiZWYzLi41NDMxYjE2ZjJmNDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtMzIsNiAmIzQzOzMyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1aG90cGx1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhcnRfc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2F0dGVybGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbF9yZWFkX2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogCkBAIC0xMzQyLDkgJiM0MzsxMzQzLDkgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAlpbnQgcmV0LCBwcmlvOwotCXZvaWQgKnNyYzsKIAogCXNsb3RfbG9jayh6cmFtLCBpbmRleCk7CiAJLyogU2luY2Ugc2xvdCB3YXMgdW5sb2NrZWQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgc3RpbGwgWlJBTV9XQiAqLwpAQCAtMTM2MywxMyAmIzQzOzEzNjQsMTggQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJc2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpOwogCXByaW8gPSBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHpyYW0sIGluZGV4KTsKIAomIzQzOwlzZ19pbml0X3RhYmxlKHNnLCAxKTsKJiM0MzsJc2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIHNpemUsIDApOwomIzQzOwogCXpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLSZndDtjb21wc1twcmlvXSk7Ci0Jc3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwotCXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsCiYjNDM7CXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSwKIAkJCSAgICAgICB6c3RybS0mZ3Q7bG9jYWxfY29weSk7Ci0JaWYgKCFyZXQpCi0JCWNvcHlfcGFnZShzcmMsIHpzdHJtLSZndDtsb2NhbF9jb3B5KTsKLQlrdW5tYXBfbG9jYWwoc3JjKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCXZvaWQgKmRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKJiM0MzsKJiM0MzsJCWNvcHlfcGFnZShkc3QsIHpzdHJtLSZndDtsb2NhbF9jb3B5KTsKJiM0MzsJCWt1bm1hcF9sb2NhbChkc3QpOwomIzQzOwl9CiAJemNvbXBfc3RyZWFtX3B1dCh6c3RybSk7CiAJc2xvdF91bmxvY2soenJhbSwgaW5kZXgpOwogCkBAIC0yMDg2LDE1ICYjNDM7MjA5MiwxOSBAQCBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAl2b2lkICpzcmMsICpkc3Q7CiAKIAloYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpOwotCXNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIFBBR0VfU0laRSwgTlVMTCk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNnLCBQQUdFX1NJWkUpOwomIzQzOwkvKiBhbiBpbmNvbXByZXNzaWJsZSBvYmplY3QgbmV2ZXIgc3BhbnMgdHdvIHBhZ2VzICovCiYjNDM7CXNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7CiAJZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCWNvcHlfcGFnZShkc3QsIHNyYyk7CiAJa3VubWFwX2xvY2FsKGRzdCk7Ci0JenNfb2JqX3JlYWRfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIFBBR0VfU0laRSwgc3JjKTsKJiM0MzsJa3VubWFwX2xvY2FsKHNyYyk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjEwMyw5ICYjNDM7MjExMywxMCBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQl1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwogCXVuc2lnbmVkIGludCBzaXplOwotCXZvaWQgKnNyYywgKmRzdDsKJiM0MzsJdm9pZCAqZHN0OwogCWludCByZXQsIHByaW87CiAKIAloYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpOwpAQCAtMjExMywxMiAmIzQzOzIxMjQsMTEgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJcHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpOwogCiAJenN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tJmd0O2NvbXBzW3ByaW9dKTsKLQlzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzaXplLAotCQkJCXpzdHJtLSZndDtsb2NhbF9jb3B5KTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpOwogCWRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKLQlyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tJmd0O2NvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBzaXplLCBkc3QpOwomIzQzOwlyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tJmd0O2NvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsIGRzdCk7CiAJa3VubWFwX2xvY2FsKGRzdCk7Ci0JenNfb2JqX3JlYWRfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlKTsKIAl6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTsKIAogCXJldHVybiByZXQ7CkBAIC0yMTI4LDI1ICYjNDM7MjEzOCwyMyBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7Ci0Jc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtOwomIzQzOwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJdW5zaWduZWQgaW50IHNpemU7Ci0Jdm9pZCAqc3JjOwomIzQzOwl2b2lkICpkc3Q7CiAKIAloYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpOwogCXNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTsKIAogCS8qCi0JICogV2UgbmVlZCB0byBnZXQgc3RyZWFtIGp1c3QgZm9yIC0mZ3Q7bG9jYWxfY29weSBidWZmZXIsIGluCi0JICogY2FzZSBpZiBvYmplY3Qgc3BhbnMgdHdvIHBoeXNpY2FsIHBhZ2VzLiBObyBkZWNvbXByZXNzaW9uCi0JICogdGFrZXMgcGxhY2UgaGVyZSwgYXMgd2UgcmVhZCByYXcgY29tcHJlc3NlZCBkYXRhLgomIzQzOwkgKiBObyBkZWNvbXByZXNzaW9uIHRha2VzIHBsYWNlIGhlcmUsIHdlIGNvcHkgb3V0IHJhdyBjb21wcmVzc2VkCiYjNDM7CSAqIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgZGVzdGluYXRpb24gcGFnZS4KIAkgKi8KLQl6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS0mZ3Q7Y29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTsKLQlzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzaXplLAotCQkJCXpzdHJtLSZndDtsb2NhbF9jb3B5KTsKLQltZW1jcHlfdG9fcGFnZShwYWdlLCAwLCBzcmMsIHNpemUpOwotCXpzX29ial9yZWFkX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpOwotCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwl6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7CiYjNDM7CWRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKJiM0MzsJc2dfY29weV90b19idWZmZXIoc2csIHNnX25lbnRzKHNnKSwgZHN0LCBzaXplKTsKJiM0MzsJa3VubWFwX2xvY2FsKGRzdCk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlKTsKIAogCW1lbXplcm9fcGFnZShwYWdlLCBzaXplLCBQQUdFX1NJWkUgLSBzaXplKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c21hbGxvYy5oIGIvaW5jbHVkZS9saW51eC96c21hbGxvYy5oCmluZGV4IDQ3ODQxMGM4ODBiMWYuLjViNzI5OGE1MDI2YjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgKQEAgLTQwLDEwICYjNDM7NDAsNiBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiAKIHZvaWQgenNfcG9vbF9zdGF0cyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHpzX3Bvb2xfc3RhdHMgKnN0YXRzKTsKIAotdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmxvY2FsX2NvcHkpOwotdm9pZCB6c19vYmpfcmVhZF9lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkgICAgIHNpemVfdCBtZW1fbGVuLCB2b2lkICpoYW5kbGVfbWVtKTsKIHZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAogCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzaXplX3QgbWVtX2xlbik7CiB2b2lkIHpzX29ial9yZWFkX3NnX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmMKaW5kZXggODI1MDIyYTdhMzI4Zi4uMTFiZTM3YzQzMTcxOCAxMDA2NDQKLS0tIGEvbW0venNtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c21hbGxvYy5jCkBAIC0xMTM0LDgzICYjNDM7MTEzNCw2IEBAIHVuc2lnbmVkIGxvbmcgenNfZ2V0X3RvdGFsX3BhZ2VzKHN0cnVjdCB6c19wb29sICpwb29sKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoenNfZ2V0X3RvdGFsX3BhZ2VzKTsKIAotdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmxvY2FsX2NvcHkpCi17Ci0Jc3RydWN0IHpzcGFnZSAqenNwYWdlOwotCXN0cnVjdCB6cGRlc2MgKnpwZGVzYzsKLQl1bnNpZ25lZCBsb25nIG9iaiwgb2ZmOwotCXVuc2lnbmVkIGludCBvYmpfaWR4OwotCXN0cnVjdCBzaXplX2NsYXNzICpjbGFzczsKLQl2b2lkICphZGRyOwotCi0JLyogR3VhcmFudGVlIHdlIGNhbiBnZXQgenNwYWdlIGZyb20gaGFuZGxlIHNhZmVseSAqLwotCXJlYWRfbG9jaygmYW1wO3Bvb2wtJmd0O2xvY2spOwotCW9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTsKLQlvYmpfdG9fbG9jYXRpb24ob2JqLCAmYW1wO3pwZGVzYywgJmFtcDtvYmpfaWR4KTsKLQl6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7Ci0KLQkvKiBNYWtlIHN1cmUgbWlncmF0aW9uIGRvZXNuJiMzOTt0IG1vdmUgYW55IHBhZ2VzIGluIHRoaXMgenNwYWdlICovCi0JenNwYWdlX3JlYWRfbG9jayh6c3BhZ2UpOwotCXJlYWRfdW5sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7Ci0KLQljbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpOwotCW9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLSZndDtzaXplICogb2JqX2lkeCk7Ci0KLQlpZiAoIVpzSHVnZVBhZ2UoenNwYWdlKSkKLQkJb2ZmICYjNDM7PSBaU19IQU5ETEVfU0laRTsKLQotCWlmIChvZmYgJiM0MzsgbWVtX2xlbiAmbHQ7PSBQQUdFX1NJWkUpIHsKLQkJLyogdGhpcyBvYmplY3QgaXMgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiBhIHBhZ2UgKi8KLQkJYWRkciA9IGttYXBfbG9jYWxfenBkZXNjKHpwZGVzYyk7Ci0JCWFkZHIgJiM0Mzs9IG9mZjsKLQl9IGVsc2UgewotCQlzaXplX3Qgc2l6ZXNbMl07Ci0KLQkJLyogdGhpcyBvYmplY3Qgc3BhbnMgdHdvIHBhZ2VzICovCi0JCXNpemVzWzBdID0gUEFHRV9TSVpFIC0gb2ZmOwotCQlzaXplc1sxXSA9IG1lbV9sZW4gLSBzaXplc1swXTsKLQkJYWRkciA9IGxvY2FsX2NvcHk7Ci0KLQkJbWVtY3B5X2Zyb21fcGFnZShhZGRyLCB6cGRlc2NfcGFnZSh6cGRlc2MpLAotCQkJCSBvZmYsIHNpemVzWzBdKTsKLQkJenBkZXNjID0gZ2V0X25leHRfenBkZXNjKHpwZGVzYyk7Ci0JCW1lbWNweV9mcm9tX3BhZ2UoYWRkciAmIzQzOyBzaXplc1swXSwKLQkJCQkgenBkZXNjX3BhZ2UoenBkZXNjKSwKLQkJCQkgMCwgc2l6ZXNbMV0pOwotCX0KLQotCXJldHVybiBhZGRyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfYmVnaW4pOwotCi12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCSAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pCi17Ci0Jc3RydWN0IHpzcGFnZSAqenNwYWdlOwotCXN0cnVjdCB6cGRlc2MgKnpwZGVzYzsKLQl1bnNpZ25lZCBsb25nIG9iaiwgb2ZmOwotCXVuc2lnbmVkIGludCBvYmpfaWR4OwotCXN0cnVjdCBzaXplX2NsYXNzICpjbGFzczsKLQotCW9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTsKLQlvYmpfdG9fbG9jYXRpb24ob2JqLCAmYW1wO3pwZGVzYywgJmFtcDtvYmpfaWR4KTsKLQl6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7Ci0JY2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTsKLQlvZmYgPSBvZmZzZXRfaW5fcGFnZShjbGFzcy0mZ3Q7c2l6ZSAqIG9ial9pZHgpOwotCi0JaWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpCi0JCW9mZiAmIzQzOz0gWlNfSEFORExFX1NJWkU7Ci0KLQlpZiAob2ZmICYjNDM7IG1lbV9sZW4gJmx0Oz0gUEFHRV9TSVpFKSB7Ci0JCWhhbmRsZV9tZW0gLT0gb2ZmOwotCQlrdW5tYXBfbG9jYWwoaGFuZGxlX21lbSk7Ci0JfQotCi0JenNwYWdlX3JlYWRfdW5sb2NrKHpzcGFnZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9lbmQpOwotCiB2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSwKIAkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUkFNIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGV5IGltcGFjdCBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiBmdXp6aW5nIGlzIGV2ZW4gd2FycmFudGVkLCBhbmQgaWYgc28sIHdoYXQgc3ltYm9scyB0byB0YXJnZXQgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBtb3N0IHJlbGV2YW50LgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgc2VlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IFpSQU0gaGFuZGxlcyBkZWNvbXByZXNzaW9uIGFuZCBkYXRhIHJlYWRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB1c2Ugb2YgYHNjYXR0ZXJsaXN0YCBzdHJ1Y3R1cmVzLiBUaGUgc2lnbmF0dXJlIGNoYW5nZSBpbiBgemNvbXBfZGVjb21wcmVzc2AgaXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBJbnN0ZWFkIG9mIGEgZGlyZWN0IHBvaW50ZXIsIGl0IG5vdyBhY2NlcHRzIGEgYHN0cnVjdCBzY2F0dGVybGlzdCAqc2dgLiBUaGlzIGltcGxpZXMgYSBzaGlmdCB0b3dhcmRzIGhhbmRsaW5nIGRhdGEgaW4gbm9uLWNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBvZnRlbiBleHBvc2UgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGJvdW5kYXJpZXMgYW5kIGRhdGEgYWxpZ25tZW50LiBUaGUgY29uZGl0aW9uYWwgY2hlY2ssIGBpZiAoc2dfaXNfbGFzdChzZykpYCwgYW5kIHRoZSB1c2Ugb2YgYHNnX2NvcHlfdG9fYnVmZmVyYCBhcmUga2V5LiBXZSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGhvdyB0aGlzIHNjYXR0ZXJsaXN0IGlzIHBvcHVsYXRlZCBhbmQgaG93IHRoZSBgc3JjX2xlbmAgaXMgdXNlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZm9jYWwgcG9pbnQuCgpUaGUgcmlwcGxlIGVmZmVjdCBpcyBldmlkZW50IGluIGB6cmFtX2Rydi5jYCwgd2hlcmUgc2V2ZXJhbCBmdW5jdGlvbnMgbGlrZSBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AgYXJlIHVwZGF0ZWQgdG8gdXRpbGl6ZSB0aGVzZSBgc2NhdHRlcmxpc3RgIG9wZXJhdGlvbnMuIFRoZSByZW1vdmFsIG9mIHRoZSBgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYCBmdW5jdGlvbnMgYW5kIHRoZSByZXBsYWNlbWVudHMgd2l0aCBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfc2dfZW5kYCBpbiBgenJhbV9kcnYuY2AgYW5kIGB6c21hbGxvYy5jYCBpbmRpY2F0ZSBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBmdW5jdGlvbnMgaGFuZGxlIGVycm9ycyBhbmQgZWRnZSBjYXNlcy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBzY2F0dGVybGlzdCBpcyBtYWxmb3JtZWQsIGhhcyBpbmNvcnJlY3QgbGVuZ3Rocywgb3IgcG9pbnRzIHRvIGludmFsaWQgbWVtb3J5IHJlZ2lvbnM/IFRoZXNlIGFyZSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0cy4KCkJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSB3aXRoaW4gYHpzbWFsbG9jLmNgIGFuZCBgenJhbV9kcnYuY2AsIHRvIGRvIHNvbWUgc3RhdGljIGFuYWx5c2lzIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyB0aGF0IG1heSBiZSByZXZlYWxlZCB0aHJvdWdoIHRvb2xzLiBUaGUgY2hhbmdlcyBpbiBkYXRhIGhhbmRsaW5nLCBpbiBwYXJ0aWN1bGFyLCB3aWxsIHJlcXVpcmUgY2FyZWZ1bCBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c19vYmpfcmVhZF9zZ19iZWdpbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDkyPXN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMDk5LVx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxMDA6XHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBQQUdFX1NJWkUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEwMS1cdC8qIGFuIGluY29tcHJlc3NpYmxlIG9iamVjdCBuZXZlciBzcGFucyB0d28gcGFnZXMgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTEyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjYtXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTI3Olx0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTI4LVx0ZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMzg9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE1Mi1cdCAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE1MzpcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE1NC1cdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg9NDE9dm9pZCB6c19wb29sX3N0YXRzKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3QgenNfcG9vbF9zdGF0cyAqc3RhdHMpO1xuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTQyLVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjQzOnZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTQ0LVx0XHRcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pO1xuLS1cbm1tL3pzbWFsbG9jLmM9MTEzNT1FWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpO1xubW0venNtYWxsb2MuYy0xMTM2LVxubW0venNtYWxsb2MuYzoxMTM3OnZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxubW0venNtYWxsb2MuYy0xMTM4LVx0XHRcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXG4tLVxubW0venNtYWxsb2MuYy0xMTgxLX1cbm1tL3pzbWFsbG9jLmM6MTE4MjpFWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9zZ19iZWdpbik7XG5tbS96c21hbGxvYy5jLTExODMtXG4tLVxubW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtOTMzLVx0bXV0ZXhfbG9jayhcdTAwMjZhY29tcF9jdHgtXHUwMDNlbXV0ZXgpO1xubW0venN3YXAuYzo5MzQ6XHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG5tbS96c3dhcC5jLTkzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTM5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gWnJhbSBDb21wcmVzc2lvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBacmFtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcHJvY2VzcywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGB6Y29tcF9kZWNvbXByZXNzYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBwb2ludCB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvbXByZXNzZWQgZGF0YSBpcyBhY3R1YWxseSBicm91Z2h0IGJhY2sgdG8gbGlmZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGdvcml0aG1zIHdvcmtzLCBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkLCBhbmQgd2hhdCBlcnJvciBjb25kaXRpb25zIGNvdWxkIGFyaXNlLgoKQmV5b25kIHRoYXQgY29yZSBmdW5jdGlvbiwgdGhvdWdoLCBJIGtub3cgSSBjYW4mIzM5O3QgbG9vayBhdCB0aGluZ3MgaW4gYSB2YWN1dW0uIFRvIGZ1bGx5IGdyYXNwIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcywgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnYC4gVGhpcyB3aWxsIHNob3cgbWUgd2hhdCBidWlsZC10aW1lIG9wdGlvbnMgY29udHJvbCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyB0aGF0IGFyZSBhdmFpbGFibGUsIGFzIHdlbGwgYXMgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgY29kZS4gS25vd2luZyB0aGlzIGhlbHBzIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjpjb25maWcgWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7bHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjk6Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7enN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7ODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cdGRlcGVuZHMgb24gWlJBTVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU0LVx0Ym9vbCBcJiMzNDtsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0OyBpZiAhWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7bHpvLXJsZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Njk6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7bHo0aGNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgxOmNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cdHN0cmluZ1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEwNzpjb25maWcgWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcJiMzNDtXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMTpjb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cdGJvb2wgXCYjMzQ7VHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXHRib29sIFwmIzM0O0VuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgWlJBTSYjMzk7cyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBaUkFNJiMzOTtzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYEtjb25maWdgIGVudHJ5IGZvciBaUkFNIGFuZCB0cmFjZSBpdCBiYWNrIHRocm91Z2ggYW55IG90aGVyIHJlbGV2YW50IG9wdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGVuYWJsZWQsIHdoYXQgb3RoZXIgZmVhdHVyZXMgbWlnaHQgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGN1c3RvbWl6YXRpb25zIEkgbWlnaHQgd2FudCB0byBwZXJmb3JtLiBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCBibG9jayBsYXllciBjb21wb25lbnRzLCBvciBldmVuIHNwZWNpZmljIENQVSBmZWF0dXJlcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIHdob2xlIGtlcm5lbC4gTGV04oCZcyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgWlJBTVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVcbiAgIDU6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBDcmVhdGVzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcyBjYWxsZWQgL2Rldi96cmFtWCAoWCA9IDAsIDEsIC4uLikuXG4gICA4Olx0XHQgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnlcbiAgIDk6XHRcdCAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlc1xuICAxMDpcdFx0ICBnb29kIGFtb3VudHMgb2YgbWVtb3J5IHNhdmluZ3MuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0IGhhcyBzZXZlcmFsIHVzZSBjYXNlcywgZm9yIGV4YW1wbGU6IC90bXAgc3RvcmFnZSwgdXNlIGFzIHN3YXBcbiAgMTM6XHRcdCAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAyMDpcdFx0c2VsZWN0IExaNF9DT01QUkVTU1xuICAyMTpcdFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuICAyNDpcdFx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgMjY6XHRcdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xuICAyNzpcdFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG4gIDMwOlx0XHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBaUkFNXG4gIDMyOlx0XHRzZWxlY3QgWlNURF9DT01QUkVTU1xuICAzMzpcdFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxuICAzNjpcdFx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAzODpcdFx0c2VsZWN0IFpMSUJfREVGTEFURVxuICAzOTpcdFx0c2VsZWN0IFpMSUJfSU5GTEFURVxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG4gIDQyOlx0XHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgNDQ6XHRcdHNlbGVjdCA4NDJfQ09NUFJFU1NcbiAgNDU6XHRcdHNlbGVjdCA4NDJfREVDT01QUkVTU1xuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgNDk6XHRcdGRlZl9ib29sICFaUkFNX0JBQ0tFTkRfTFo0IFx1MDAyNlx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFx1MDAyNlx1MDAyNiBcXFxuICA1MDpcdFx0XHQhWlJBTV9CQUNLRU5EX1pTVEQgXHUwMDI2XHUwMDI2ICFaUkFNX0JBQ0tFTkRfREVGTEFURSBcdTAwMjZcdTAwMjYgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgdGhlIFpTTUFMTE9DIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBaU01BTExPQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgc2V0dGluZ3MgYXJlIGRlZmluZWQuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIFpTTUFMTE9DIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSAoYXJjaGl0ZWN0dXJlLCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcywgZXRjLiksIGFuZCB3aGF0IHRoZSB2YXJpb3VzIGtub2JzIEkgaGF2ZSB0byB0dW5lIGFyZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCBiZWZvcmUgSSBtb3ZlIG9uIHRvIG1vcmUgZGV0YWlsZWQgY29kZSBhbmFseXNpcy4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU01BTExPQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy0xMjQtXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0Ncbm1tL0tjb25maWctMTI2LVx0dHJpc3RhdGVcbi0tXG5tbS9LY29uZmlnPTEzMT1jb21tZW50IFwmIzM0O1pzbWFsbG9jIGlzIGEgY29tbW9uIGJhY2tlbmQgYWxsb2NhdG9yIGZvciB6c3dhcCBcdTAwMjYgenJhbVwmIzM0O1xubW0vS2NvbmZpZy0xMzItXG5tbS9LY29uZmlnOjEzMzpjb25maWcgWlNNQUxMT0NfU1RBVFxubW0vS2NvbmZpZy0xMzQtXHRib29sIFwmIzM0O0V4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEtXG5tbS9LY29uZmlnOjE0Mjpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxubW0vS2NvbmZpZy0xNDMtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ0MwoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpSQU0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW4uIEFscmlnaHQsIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYCBhbmQgc3BlY2lmaWNhbGx5IGB6Y29tcF9kZWNvbXByZXNzYC4gVGhlbiwgb3ZlciBpbiBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLCB3ZSYjMzk7cmUgdG91Y2hpbmcgYGRlY29tcHJlc3NfYmRldl9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGByZWFkX2NvbXByZXNzZWRfcGFnZWAsIGFuZCBgcmVhZF9mcm9tX3pzcG9vbF9yYXdgLiBBbmQsIG5vdCBzdXJwcmlzaW5nbHksIGBtbS96c21hbGxvYy5jYCBpcyBiZWluZyBtb2RpZmllZCwgc3BlY2lmaWNhbGx5IHRoZSByZW1vdmFsIG9mIGB6c19vYmpfcmVhZF9iZWdpbmAgYW5kIGB6c19vYmpfcmVhZF9lbmRgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIOKAkyBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSAqcmVhY2hhYmxlKj8gWWVzISBUaGlzIGlzIFpSQU0sIGAvZGV2L3pyYW1YYC4gSXQmIzM5O3MgYSBjb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2UsIGFuZCBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJiMzOTt2ZSB3b3JrZWQgd2l0aC4gRWFzeSB0byBzZXQgdXAgaW4gUUVNVSwgcGVyZmVjdCBmb3Igc3l6a2FsbGVyLgoKU28sIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IFpSQU0gZGVjb21wcmVzc2VzIHBhZ2VzIGFuZCByZWFkcyBmcm9tIHpzbWFsbG9jLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gZGVhbGluZyB3aXRoIHNjYXR0ZXJsaXN0cywgYHN0cnVjdCBzY2F0dGVybGlzdCAqc2dgLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgb2JqZWN0cyB0aGF0IGVpdGhlciBzcGFuIG11bHRpcGxlIHBhZ2VzIG9yIGFyZSBmdWxseSBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIHBhZ2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gYHpjb21wX2RlY29tcHJlc3NgLCBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AuCgpBbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY2FsbCBoaWVyYXJjaHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGFuZCB0aGUgb3RoZXJzIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY2AuIE5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX2NvbXByZXNzZWRfcGFnZXxyZWFkX2luY29tcHJlc3NpYmxlX3BhZ2V8cmVhZF9mcm9tX3pzcG9vbF9yYXd8ZGVjb21wcmVzc19iZGV2X3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDg4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDkwLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTAzMD1zdGF0aWMgaW50IHpyYW1fd3JpdGViYWNrX3Nsb3RzKHN0cnVjdCB6cmFtICp6cmFtLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODUtXHRcdGlmICh6cmFtLVx1MDAzZWNvbXByZXNzZWRfd2IpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMDg2Olx0XHRcdGVyciA9IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHpyYW0sIHJlcS1cdTAwM2VwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMDg3LVx0XHRlbHNlXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTIzNj1zdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNDEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMzQyOnN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM0My1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTM4NT1zdGF0aWMgdm9pZCB6cmFtX2RlZmVycmVkX2RlY29tcHJlc3Moc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMzkzOlx0cmV0ID0gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM5NC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTQ5MT1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDctXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTA4Olx0cmV0dXJuIGRlY29tcHJlc3NfYmRldl9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIwODE9c3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIwOTEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMDkyOnN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIwOTMtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTExLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjExMjpzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMTMtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzctI2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTM4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzOS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjE2OT1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNzYtXHRpZiAoIXRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX0hVR0UpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE3NzpcdFx0cmV0dXJuIHJlYWRfY29tcHJlc3NlZF9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNzgtXHRlbHNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTc5Olx0XHRyZXR1cm4gcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxODAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIERlZXAgaW50byBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZHMgYXJlIGJlaW5nIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFpTUG9vbCByZWFkIG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCBmdW5jdGlvbjsgSSYjMzk7bSBnb2luZyB0byBzY3J1dGluaXplIGl0cyB1c2Ugb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHBhcnRpY3VsYXJseSBsaW5lIDIxMzcuIEkmIzM5O20gbG9va2luZyBmb3IgYCNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS2AuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUuCgpOZXh0LCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGluIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBzZXQgY2hhbmdlcyB3aXRoIHJlc3BlY3QgdG8gZGlmZmVyZW50IGNvbXBpbGF0aW9uIG9wdGlvbnMuIEkga25vdyB0aGVzZSBndWFyZHMgcmVwcmVzZW50IGRpc3RpbmN0LCBvcHRpb25hbCBwYXRocyB0aGUgY29kZSBjYW4gdGFrZS4gTXkgZXhwZXJ0aXNlIGFsbG93cyBtZSB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgZ3VhcmRzIGFyZSBwcm9wZXJseSBpbXBsZW1lbnRlZCBiYXNlZCBvbiB0aGUgYnJvYWRlciBzeXN0ZW0gc2V0dXAuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIGNvbXBpbGVkIGludG8gdGhlIGltYWdlIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmLipDT05GSUdfWlJBTV9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjU6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI2LXN0cnVjdCB6cmFtX3BwX3Nsb3Qge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDg1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg2OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ4Ny0jZGVmaW5lIElOVkFMSURfQkRFVl9CTE9DS1x0XHQofjBVTClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTEyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTM3OiNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzOC1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDA4PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wX2FsZ29yaXRobSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA5OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMTAtc3RhdGljIERFVklDRV9BVFRSX1JPKGJkX3N0YXQpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMzItXHRcdTAwMjZkZXZfYXR0cl9jb21wX2FsZ29yaXRobS5hdHRyLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAzMzojaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDM0LVx0XHUwMDI2ZGV2X2F0dHJfYmRfc3RhdC5hdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwNTk9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwOTctXHRpbml0X3J3c2VtKFx1MDAyNnpyYW0tXHUwMDNlZGV2X2xvY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzA5ODojaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDk5LVx0enJhbS1cdTAwM2V3Yl9iYXRjaF9zaXplID0gMzI7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9OTM9c3RydWN0IHpyYW1fc3RhdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTEwMy1cdGF0b21pYzY0X3QgbWlzc19mcmVlO1x0XHQvKiBuby4gb2YgbWlzc2VkIGZyZWUgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjEwNDojaWZkZWZcdENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTA1LVx0YXRvbWljNjRfdCBiZF9jb3VudDtcdFx0Lyogbm8uIG9mIHBhZ2VzIGluIGJhY2tpbmcgZGV2aWNlICovXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9MTIxPXN0cnVjdCB6cmFtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xNDYtXHRib29sIGNsYWltOyAvKiBQcm90ZWN0ZWQgYnkgZGlzay1cdTAwM2VvcGVuX211dGV4ICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxNDc6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTQ4LVx0c3RydWN0IGZpbGUgKmJhY2tpbmdfZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyBaUkFNJiMzOTtzIERlY29tcHJlc3Npb24gUGF0aCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBkZWNvbXByZXNzX2JkZXZfcGFnZWAgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIGJvdGgga2V5IGNvbXBvbmVudHMgb2YgdGhlIHdyaXRlYmFjayBtZWNoYW5pc20sIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfWlJBTV9XUklURUJBQ0tgLiBUaGUgY29yZSBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucywgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCBhbmQgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGFyZSB1bmNvbmRpdGlvbmFsbHkgcHJlc2VudCBpbiBgenJhbV9kcnYuY2AsIGFuZCB0aGUgYWN0dWFsIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtLCBgemNvbXBfZGVjb21wcmVzc2AsIGxpdmVzIGluIGB6Y29tcC5jYC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIGBaUkFNYCBpdHNlbGYgc2VsZWN0cyBgWlNNQUxMT0NgLCB3aGljaCBpcyBleHBlY3RlZC4gQW5kLCBhcyBhbnRpY2lwYXRlZCwgYFpSQU1fV1JJVEVCQUNLYCBoaW5nZXMgb24gYFpSQU1gIGJlaW5nIGVuYWJsZWQuIERpZ2dpbmcgZGVlcGVyIGludG8gYGRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnYCwgSSBzZWUgdGhhdCBgWlJBTWAgcmVxdWlyZXMgYEJMT0NLYCwgYFNZU0ZTYCwgYW5kIGBNTVVgLiBgWlJBTV9XUklURUJBQ0tgIHRoZW4gZGVwZW5kcyBvbiBgWlJBTWAuIEFsbCBtYWtlcyBzZW5zZS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHN5bWJvbCB2aXNpYmlsaXR5LiAgYHpjb21wX2RlY29tcHJlc3NgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuICBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AgYXJlIGFsbCBzdGF0aWMuIFRoaXMgdHJpZ2dlcnMgYSBzcGVjaWZpYyB0aG91Z2h0OyBjYW4gSSBzdGlsbCBsZXZlcmFnZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBteSBwdXJwb3Nlcz8gQWgsIHllcywgdGhleSBzaG91bGQgYmUgYWRkcmVzc2FibGUuIFN0YXRpYyBmdW5jdGlvbnMgaW4gQyBmaWxlcyBhcmUgZmluZSBmb3Igc3l6a2FsbGVyIHN5bWJvbCBjb3ZlcmFnZSBhbmQgZm9jdXMgc3ltYm9scywgYmVjYXVzZSB0aGV5IHN0aWxsIGhhdmUgc3ltYm9scyBpbiB2bWxpbnV4LCB1bmxlc3MgdGhleSYjMzk7cmUgY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGRlY2xhcmVkIGluIGhlYWRlciBmaWxlcywgYnV0IEkgZG9uJiMzOTt0IHNlZSB0aGF0IGhlcmUuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBgcmVhZF9mcm9tX3pzcG9vbGAgYW5kIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIG9yIGxvb2sgZm9yIGFueSBvdGhlciBkaXJlY3QgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZWNvbXByZXNzaW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfZnJvbV96c3Bvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDg4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDkwLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0OTE6c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ5Mi1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTAzMD1zdGF0aWMgaW50IHpyYW1fd3JpdGViYWNrX3Nsb3RzKHN0cnVjdCB6cmFtICp6cmFtLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODUtXHRcdGlmICh6cmFtLVx1MDAzZWNvbXByZXNzZWRfd2IpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMDg2Olx0XHRcdGVyciA9IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHpyYW0sIHJlcS1cdTAwM2VwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMDg3LVx0XHRlbHNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMDg4Olx0XHRcdGVyciA9IHJlYWRfZnJvbV96c3Bvb2woenJhbSwgcmVxLVx1MDAzZXBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODktXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjExMj1zdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTM3LSNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjEzODpzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzktXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNjgtICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTY5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTcwLVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxODI9c3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE4OS1cdFx0LyogU2xvdCBzaG91bGQgYmUgbG9ja2VkIHRocm91Z2ggb3V0IHRoZSBmdW5jdGlvbiBjYWxsICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTkwOlx0XHRyZXQgPSByZWFkX2Zyb21fenNwb29sKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxOTEtXHRcdHNsb3RfdW5sb2NrKHpyYW0sIGluZGV4KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDQ3PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDcyOlx0cmV0ID0gcmVhZF9mcm9tX3pzcG9vbCh6cmFtLCBwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDczLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBoZXJlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoaXMgYHpjb21wX2RlY29tcHJlc3NgIGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5ICp3aGVyZSogaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGZ1bmN0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBpbnZvY2F0aW9uLiBTbywgSSBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgYGRlY29tcHJlc3NfYmRldl9wYWdlYCBhbmQgYHJlYWRfY29tcHJlc3NlZF9wYWdlYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLiBBcmUgdGhvc2UgdGhlICpvbmx5KiB0d28gZnVuY3Rpb25zIHRoYXQgY2FsbCBgemNvbXBfZGVjb21wcmVzc2A/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBoaWRkZW4gcGF0aHMgb3IgbGVzcyBvYnZpb3VzIGNhbGwgc2l0ZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNvbnRleHQgb2YgaXRzIG9wZXJhdGlvbiBhbmQgdGhlIGRlcGVuZGVuY2llcyBpbnZvbHZlZCBpbiB0aGUgZGVjb21wcmVzc2lvbiBwcm9jZXNzLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBjYWxsZXJzIGJlZm9yZSBJIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX2RlY29tcHJlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTQ0PWludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNjI6aW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjMtXHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD05Mz1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC05NC1cdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6OTU6aW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC05Ni1cdFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzQyPXN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNzAtXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMzcxOlx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzcyLVx0XHRcdCAgICAgICB6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTEyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjgtXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTI5Olx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsIGRzdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTMwLVx0a3VubWFwX2xvY2FsKGRzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzUyCgkJCQkJCQlvdXRwdXQ6IDE3NgoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENhbmRpZGF0ZSBBc3Nlc3NtZW50OiBaUkFNIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHdpdGhpbiB0aGUgYHpyYW1gIGFuZCBgenNtYWxsb2NgIHN1YnN5c3RlbXMuIEkgc2VlIHRoYXQgaXQgdG91Y2hlcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB6Y29tcF9kZWNvbXByZXNzYCBpbiBgemNvbXAuY2AsIHdoaWNoIGlzIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljLCBhbmQgYSBjbHVzdGVyIG9mIGZ1bmN0aW9ucyB3aXRoaW4gYHpyYW1fZHJ2LmNgOiBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AuICBBZGRpdGlvbmFsbHksIGl0JiMzOTtzIHJlbW92aW5nIHNvbWUgbG93LWxldmVsIHJlYWQgZnVuY3Rpb25zIChgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYCkgZnJvbSBgenNtYWxsb2NgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4KClRoaXMgaW1tZWRpYXRlbHkgZmxhZ3Mgc2V2ZXJhbCBzeW1ib2xzIGFzIGNyaXRpY2FsIGZvciBteSBmdXp6aW5nIGNhbXBhaWduOiBgemNvbXBfZGVjb21wcmVzc2AsIHRoZSB2YXJpb3VzIGByZWFkXypgIGZ1bmN0aW9ucywgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLgoKTm93LCBjb25maWd1cmF0aW9uLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGFuZCBgWlNNQUxMT0NgIGFyZSBhbGwgZW5hYmxlZCBkdXJpbmcgbXkgZnV6emluZyBydW5zLiAgVGhlIGRlcGVuZGVuY2llcyBjaGVjayBvdXQ7IGBaUkFNYCBzZWxlY3RzIGBaU01BTExPQ2AgYW5kIGBaUkFNX1dSSVRFQkFDS2AgZGVwZW5kcyBvbiBgWlJBTWAuICBObyBzdXJwcmlzZXMgdGhlcmUuCgpUaGUgYmlnIHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enphYmxlPyAgQWJzb2x1dGVseSwgYW5kIGl0JiMzOTtzIGEganVpY3kgdGFyZ2V0LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgbWVtb3J5IGlzIGhhbmRsZWQgd2l0aGluIGB6cmFtYCBhbmQgYHpzbWFsbG9jYC4gSXQmIzM5O3MgbWVzc2luZyB3aXRoIG1lbW9yeSBjb3B5aW5nLCB3aGljaCBpcyBhbHdheXMgYSByZWQgZmxhZywgYXMgd2VsbCBhcyBtYXBwaW5nICh1c2luZyBga21hcF9sb2NhbF9wYWdlYCksIHNjYXR0ZXJsaXN0IGhhbmRsaW5nLCBidWZmZXIgbGVuZ3RocywgYW5kIGhvdyBkZWNvbXByZXNzaW9uIGlucHV0IGlzIHByb2Nlc3NlZCwgKmFjcm9zcyBwYWdlIGJvdW5kYXJpZXMqLiAgQWxsIG9mIHRoaXMgaXMgdmVyeSBzaWduaWZpY2FudCBhbmQgY291bGQgaW50cm9kdWNlIHNvbWUgc2VyaW91cyBidWdzLiBBIGJ1ZmZlciBvdmVyZmxvdyBpcyBtb3JlIHRoYW4gbGlrZWx5IHdpdGggY3Jvc3MgcGFnZSBvYmplY3RzLCBwYWdlIHVubWFwcGluZyBjb3VsZCBiZSBhIHByb2JsZW0sIGNvcnJ1cHRpb24sIGFuZCB0aGUgc3lzdGVtIGNvdWxkIHBhbmljIGlmIHRoZXJlIGlzIGEgcHJvYmxlbS4gR2l2ZW4gdGhpcywgYW5kIHRoZSBjaGFuZ2VzIEkgc2VlLCB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgYW5hbHlzaXMgYWxzbyBhbGlnbnMgd2l0aCB0aGUgcHJlZGVmaW5lZCBndWlkZWxpbmVzLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBsaXN0ZWQgKGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpTTUFMTE9DYCkuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGVyZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZCAtIHN3aXRjaGluZyB0byBzY2F0dGVybGlzdCBBUElzIGluc3RlYWQgb2YgdXNpbmcgY29udGlndW91cyBwb2ludGVycyBpcyBjb21wbGV4LiAgVGhlcmUmIzM5O3MgYWxzbyB0aGUgY2hhbGxlbmdlIG9mIGhhbmRsaW5nIGJvdGggc2luZ2xlLXBhZ2UgYW5kIGNyb3NzLXBhZ2Ugb2JqZWN0cy4gSXQgYWxsIGFkZHMgdXAgdG8gYSBjbGVhciBqdXN0aWZpY2F0aW9uLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhpcyBjYW1wYWlnbiBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtaU01BTExPQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7ZGVjb21wcmVzc19iZGV2X3BhZ2UmIzM0OywKICAgICYjMzQ7cmVhZF9jb21wcmVzc2VkX3BhZ2UmIzM0OywKICAgICYjMzQ7cmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfZnJvbV96c3Bvb2xfcmF3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgemNvbXAgZGVjb21wcmVzc2lvbiBhbmQgenJhbSByZWFkIHBhdGhzIHRvIHVzZSBzY2F0dGVybGlzdHMgcmF0aGVyIHRoYW4gY29udGlndW91cyBtZW1vcnkgcG9pbnRlcnMsIGhhbmRsaW5nIGJvdGggc2luZ2xlLXBhZ2Ugb2JqZWN0cyB2aWEga21hcF9sb2NhbF9wYWdlIGFuZCBjcm9zcy1wYWdlIG9iamVjdHMgdmlhIHNnX2NvcHlfdG9fYnVmZmVyLiBUaGlzIG1vZGlmaWVzIGRhdGEgYnVmZmVyIGhhbmRsaW5nIGFuZCBkZWNvbXByZXNzaW9uIGZsb3dzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBtYXBwaW5nIGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7WlNNQUxMT0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9kZWNvbXByZXNzJiMzNDssCiAgICAmIzM0O2RlY29tcHJlc3NfYmRldl9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfY29tcHJlc3NlZF9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfaW5jb21wcmVzc2libGVfcGFnZSYjMzQ7LAogICAgJiMzNDtyZWFkX2Zyb21fenNwb29sX3JhdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHpjb21wIGRlY29tcHJlc3Npb24gYW5kIHpyYW0gcmVhZCBwYXRocyB0byB1c2Ugc2NhdHRlcmxpc3RzIHJhdGhlciB0aGFuIGNvbnRpZ3VvdXMgbWVtb3J5IHBvaW50ZXJzLCBoYW5kbGluZyBib3RoIHNpbmdsZS1wYWdlIG9iamVjdHMgdmlhIGttYXBfbG9jYWxfcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzIHZpYSBzZ19jb3B5X3RvX2J1ZmZlci4gVGhpcyBtb2RpZmllcyBkYXRhIGJ1ZmZlciBoYW5kbGluZyBhbmQgZGVjb21wcmVzc2lvbiBmbG93cyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbWFwcGluZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxuXG5LZXkgb2JzZXJ2YXRpb25zOlxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxuMi4gVGhlIGBzdHJ1Y3QgemNvbXBfcmVxIHJlcWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBiZWZvcmUgcGFzc2luZyB0byB0aGUgZGVjb21wcmVzc2lvbiBjYWxsYmFjay5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcy5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjYxOTliMjFhYTM0MjdkZDNkOGRlOTRkNjRlYmU3MzkyOTFiMDM1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTU6MDc6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jCmluZGV4IDk3NGM0NjkxODg3ZTYuLjAyOGUyZjBmNTg3ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jCkBAIC03LDYgJiM0Mzs3LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVob3RwbHVnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2hpZ2htZW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NhdHRlcmxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzZnMuaCZndDsKIApAQCAtMTU4LDE3ICYjNDM7MTYwLDMyIEBAIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIH0KIAogaW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sCi0JCSAgICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KQomIzQzOwkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KQogewogCXN0cnVjdCB6Y29tcF9yZXEgcmVxID0gewotCQkuc3JjID0gc3JjLAogCQkuZHN0ID0gZHN0LAogCQkuc3JjX2xlbiA9IHNyY19sZW4sCiAJCS5kc3RfbGVuID0gUEFHRV9TSVpFLAogCX07CiYjNDM7CXZvaWQgKnNyYyA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiAKIAltaWdodF9zbGVlcCgpOwotCXJldHVybiBjb21wLSZndDtvcHMtJmd0O2RlY29tcHJlc3MoY29tcC0mZ3Q7cGFyYW1zLCAmYW1wO3pzdHJtLSZndDtjdHgsICZhbXA7cmVxKTsKJiM0MzsKJiM0MzsJaWYgKHNnX2lzX2xhc3Qoc2cpKSB7CiYjNDM7CQkvKiB0aGUgb2JqZWN0IGlzIGNvbnRhaW5lZCB3aXRoaW4gb25lIHBhZ2UsIHJlYWQgaXQgaW4tcGxhY2UgKi8KJiM0MzsJCXNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7CiYjNDM7CQlyZXEuc3JjID0gc3JjICYjNDM7IHNnLSZndDtvZmZzZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiB0aGUgb2JqZWN0IHNwYW5zIHR3byBwYWdlcywgbGluZWFyaXplIGl0IGludG8gbG9jYWwgY29weSAqLwomIzQzOwkJc2dfY29weV90b19idWZmZXIoc2csIDIsIHpzdHJtLSZndDtsb2NhbF9jb3B5LCBzcmNfbGVuKTsKJiM0MzsJCXJlcS5zcmMgPSB6c3RybS0mZ3Q7bG9jYWxfY29weTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjb21wLSZndDtvcHMtJmd0O2RlY29tcHJlc3MoY29tcC0mZ3Q7cGFyYW1zLCAmYW1wO3pzdHJtLSZndDtjdHgsICZhbXA7cmVxKTsKJiM0MzsJaWYgKHNyYykKJiM0MzsJCWt1bm1hcF9sb2NhbChzcmMpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaCBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oCmluZGV4IDgxYTBmM2Y2ZmY0ODcuLmYzOGZkMzFmOWU0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oCkBAIC01LDYgJiM0Mzs1LDggQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAKJiM0MztzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CiYjNDM7CiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVQJSU5UX01JTgogCiBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgewpAQCAtOTEsNiAmIzQzOzkzLDYgQEAgdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7CiBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sCiAJCSAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKTsKIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLAotCQkgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCk7CiYjNDM7CQkgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpOwogCiAjZW5kaWYgLyogX1pDT01QX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCmluZGV4IGE5YjNiYjFkM2JlZjMuLjU0MzFiMTZmMmY0NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCkBAIC0zMiw2ICYjNDM7MzIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVob3RwbHVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFydF9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjYXR0ZXJsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsX3JlYWRfZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CiAKQEAgLTEzNDIsOSAmIzQzOzEzNDMsOSBAQCBzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQl1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOwogCXVuc2lnbmVkIGludCBzaXplOwogCWludCByZXQsIHByaW87Ci0Jdm9pZCAqc3JjOwogCiAJc2xvdF9sb2NrKHpyYW0sIGluZGV4KTsKIAkvKiBTaW5jZSBzbG90IHdhcyB1bmxvY2tlZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBzdGlsbCBaUkFNX1dCICovCkBAIC0xMzYzLDEzICYjNDM7MTM2NCwxOCBAQCBzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlzaXplID0gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCk7CiAJcHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpOwogCiYjNDM7CXNnX2luaXRfdGFibGUoc2csIDEpOwomIzQzOwlzZ19zZXRfcGFnZShzZywgcGFnZSwgc2l6ZSwgMCk7CiYjNDM7CiAJenN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tJmd0O2NvbXBzW3ByaW9dKTsKLQlzcmMgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7Ci0JcmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLSZndDtjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwKJiM0MzsJcmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLSZndDtjb21wc1twcmlvXSwgenN0cm0sIHNnLCBzaXplLAogCQkJICAgICAgIHpzdHJtLSZndDtsb2NhbF9jb3B5KTsKLQlpZiAoIXJldCkKLQkJY29weV9wYWdlKHNyYywgenN0cm0tJmd0O2xvY2FsX2NvcHkpOwotCWt1bm1hcF9sb2NhbChzcmMpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJdm9pZCAqZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwomIzQzOwomIzQzOwkJY29weV9wYWdlKGRzdCwgenN0cm0tJmd0O2xvY2FsX2NvcHkpOwomIzQzOwkJa3VubWFwX2xvY2FsKGRzdCk7CiYjNDM7CX0KIAl6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTsKIAlzbG90X3VubG9jayh6cmFtLCBpbmRleCk7CiAKQEAgLTIwODYsMTUgJiM0MzsyMDkyLDE5IEBAIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwogCXZvaWQgKnNyYywgKmRzdDsKIAogCWhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7Ci0Jc3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBOVUxMKTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgc2csIFBBR0VfU0laRSk7CiYjNDM7CS8qIGFuIGluY29tcHJlc3NpYmxlIG9iamVjdCBuZXZlciBzcGFucyB0d28gcGFnZXMgKi8KJiM0MzsJc3JjID0ga21hcF9sb2NhbF9wYWdlKHNnX3BhZ2Uoc2cpKTsKIAlkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY29weV9wYWdlKGRzdCwgc3JjKTsKIAlrdW5tYXBfbG9jYWwoZHN0KTsKLQl6c19vYmpfcmVhZF9lbmQoenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBzcmMpOwomIzQzOwlrdW5tYXBfbG9jYWwoc3JjKTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTAzLDkgJiM0MzsyMTEzLDEwIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7CiAJc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtOwomIzQzOwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJdW5zaWduZWQgaW50IHNpemU7Ci0Jdm9pZCAqc3JjLCAqZHN0OwomIzQzOwl2b2lkICpkc3Q7CiAJaW50IHJldCwgcHJpbzsKIAogCWhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7CkBAIC0yMTEzLDEyICYjNDM7MjEyNCwxMSBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlwcmlvID0gZ2V0X3Nsb3RfY29tcF9wcmlvcml0eSh6cmFtLCBpbmRleCk7CiAKIAl6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS0mZ3Q7Y29tcHNbcHJpb10pOwotCXNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsCi0JCQkJenN0cm0tJmd0O2xvY2FsX2NvcHkpOwomIzQzOwl6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7CiAJZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwotCXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsIGRzdCk7CiYjNDM7CXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSwgZHN0KTsKIAlrdW5tYXBfbG9jYWwoZHN0KTsKLQl6c19vYmpfcmVhZF9lbmQoenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUpOwogCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwogCiAJcmV0dXJuIHJldDsKQEAgLTIxMjgsMjUgJiM0MzsyMTM4LDIzIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAogc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLQlzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKLQl2b2lkICpzcmM7CiYjNDM7CXZvaWQgKmRzdDsKIAogCWhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7CiAJc2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpOwogCiAJLyoKLQkgKiBXZSBuZWVkIHRvIGdldCBzdHJlYW0ganVzdCBmb3IgLSZndDtsb2NhbF9jb3B5IGJ1ZmZlciwgaW4KLQkgKiBjYXNlIGlmIG9iamVjdCBzcGFucyB0d28gcGh5c2ljYWwgcGFnZXMuIE5vIGRlY29tcHJlc3Npb24KLQkgKiB0YWtlcyBwbGFjZSBoZXJlLCBhcyB3ZSByZWFkIHJhdyBjb21wcmVzc2VkIGRhdGEuCiYjNDM7CSAqIE5vIGRlY29tcHJlc3Npb24gdGFrZXMgcGxhY2UgaGVyZSwgd2UgY29weSBvdXQgcmF3IGNvbXByZXNzZWQKJiM0MzsJICogZGF0YSBkaXJlY3RseSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLgogCSAqLwotCXpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwotCXNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsCi0JCQkJenN0cm0tJmd0O2xvY2FsX2NvcHkpOwotCW1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7Ci0JenNfb2JqX3JlYWRfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7Ci0JemNvbXBfc3RyZWFtX3B1dCh6c3RybSk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTsKJiM0MzsJZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwomIzQzOwlzZ19jb3B5X3RvX2J1ZmZlcihzZywgc2dfbmVudHMoc2cpLCBkc3QsIHNpemUpOwomIzQzOwlrdW5tYXBfbG9jYWwoZHN0KTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUpOwogCiAJbWVtemVyb19wYWdlKHBhZ2UsIHNpemUsIFBBR0VfU0laRSAtIHNpemUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgKaW5kZXggNDc4NDEwYzg4MGIxZi4uNWI3Mjk4YTUwMjZiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c21hbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaApAQCAtNDAsMTAgJiM0Mzs0MCw2IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTsKIAogdm9pZCB6c19wb29sX3N0YXRzKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3QgenNfcG9vbF9zdGF0cyAqc3RhdHMpOwogCi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQlzaXplX3QgbWVtX2xlbiwgdm9pZCAqbG9jYWxfY29weSk7Ci12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCSAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pOwogdm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCiAJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKTsKIHZvaWQgenNfb2JqX3JlYWRfc2dfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSk7CmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuYwppbmRleCA4MjUwMjJhN2EzMjhmLi4xMWJlMzdjNDMxNzE4IDEwMDY0NAotLS0gYS9tbS96c21hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzbWFsbG9jLmMKQEAgLTExMzQsODMgJiM0MzsxMTM0LDYgQEAgdW5zaWduZWQgbG9uZyB6c19nZXRfdG90YWxfcGFnZXMoc3RydWN0IHpzX3Bvb2wgKnBvb2wpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpOwogCi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQlzaXplX3QgbWVtX2xlbiwgdm9pZCAqbG9jYWxfY29weSkKLXsKLQlzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7Ci0Jc3RydWN0IHpwZGVzYyAqenBkZXNjOwotCXVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7Ci0JdW5zaWduZWQgaW50IG9ial9pZHg7Ci0Jc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzOwotCXZvaWQgKmFkZHI7Ci0KLQkvKiBHdWFyYW50ZWUgd2UgY2FuIGdldCB6c3BhZ2UgZnJvbSBoYW5kbGUgc2FmZWx5ICovCi0JcmVhZF9sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7Ci0Jb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpOwotCW9ial90b19sb2NhdGlvbihvYmosICZhbXA7enBkZXNjLCAmYW1wO29ial9pZHgpOwotCXpzcGFnZSA9IGdldF96c3BhZ2UoenBkZXNjKTsKLQotCS8qIE1ha2Ugc3VyZSBtaWdyYXRpb24gZG9lc24mIzM5O3QgbW92ZSBhbnkgcGFnZXMgaW4gdGhpcyB6c3BhZ2UgKi8KLQl6c3BhZ2VfcmVhZF9sb2NrKHpzcGFnZSk7Ci0JcmVhZF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKLQotCWNsYXNzID0genNwYWdlX2NsYXNzKHBvb2wsIHpzcGFnZSk7Ci0Jb2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtJmd0O3NpemUgKiBvYmpfaWR4KTsKLQotCWlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKQotCQlvZmYgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFOwotCi0JaWYgKG9mZiAmIzQzOyBtZW1fbGVuICZsdDs9IFBBR0VfU0laRSkgewotCQkvKiB0aGlzIG9iamVjdCBpcyBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIGEgcGFnZSAqLwotCQlhZGRyID0ga21hcF9sb2NhbF96cGRlc2MoenBkZXNjKTsKLQkJYWRkciAmIzQzOz0gb2ZmOwotCX0gZWxzZSB7Ci0JCXNpemVfdCBzaXplc1syXTsKLQotCQkvKiB0aGlzIG9iamVjdCBzcGFucyB0d28gcGFnZXMgKi8KLQkJc2l6ZXNbMF0gPSBQQUdFX1NJWkUgLSBvZmY7Ci0JCXNpemVzWzFdID0gbWVtX2xlbiAtIHNpemVzWzBdOwotCQlhZGRyID0gbG9jYWxfY29weTsKLQotCQltZW1jcHlfZnJvbV9wYWdlKGFkZHIsIHpwZGVzY19wYWdlKHpwZGVzYyksCi0JCQkJIG9mZiwgc2l6ZXNbMF0pOwotCQl6cGRlc2MgPSBnZXRfbmV4dF96cGRlc2MoenBkZXNjKTsKLQkJbWVtY3B5X2Zyb21fcGFnZShhZGRyICYjNDM7IHNpemVzWzBdLAotCQkJCSB6cGRlc2NfcGFnZSh6cGRlc2MpLAotCQkJCSAwLCBzaXplc1sxXSk7Ci0JfQotCi0JcmV0dXJuIGFkZHI7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9iZWdpbik7Ci0KLXZvaWQgenNfb2JqX3JlYWRfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJICAgICBzaXplX3QgbWVtX2xlbiwgdm9pZCAqaGFuZGxlX21lbSkKLXsKLQlzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7Ci0Jc3RydWN0IHpwZGVzYyAqenBkZXNjOwotCXVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7Ci0JdW5zaWduZWQgaW50IG9ial9pZHg7Ci0Jc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzOwotCi0Jb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpOwotCW9ial90b19sb2NhdGlvbihvYmosICZhbXA7enBkZXNjLCAmYW1wO29ial9pZHgpOwotCXpzcGFnZSA9IGdldF96c3BhZ2UoenBkZXNjKTsKLQljbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpOwotCW9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLSZndDtzaXplICogb2JqX2lkeCk7Ci0KLQlpZiAoIVpzSHVnZVBhZ2UoenNwYWdlKSkKLQkJb2ZmICYjNDM7PSBaU19IQU5ETEVfU0laRTsKLQotCWlmIChvZmYgJiM0MzsgbWVtX2xlbiAmbHQ7PSBQQUdFX1NJWkUpIHsKLQkJaGFuZGxlX21lbSAtPSBvZmY7Ci0JCWt1bm1hcF9sb2NhbChoYW5kbGVfbWVtKTsKLQl9Ci0KLQl6c3BhZ2VfcmVhZF91bmxvY2soenNwYWdlKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHpzX29ial9yZWFkX2VuZCk7Ci0KIHZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAogCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzaXplX3QgbWVtX2xlbikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUkFNIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZSBzaWduYXR1cmUgY2hhbmdlIGluIGB6Y29tcF9kZWNvbXByZXNzYCBpcyB0aGUga2V5IHRoaW5nIHRvIGxvb2sgYXQ6IGdvaW5nIGZyb20gYSBzaW1wbGUgYHZvaWQgKmAgc291cmNlIHRvIGEgYHN0cnVjdCBzY2F0dGVybGlzdCAqYC4gVGhhdCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhpbmdzLgoKRmlyc3QsIEkmIzM5O2xsIHdhbGsgdGhyb3VnaCB0aGUgYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYCBjaGFuZ2VzLiBJdCBzZWVtcyBsaWtlIHdlIG5vdyBoYXZlIGEgc2NhdHRlcmxpc3QgYXMgaW5wdXQuIEluIGB6Y29tcF9kZWNvbXByZXNzYCwgdGhlIGxvZ2ljIGJyYW5jaGVzIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNjYXR0ZXJsaXN0IHNwYW5zIG9uZSBvciB0d28gcGFnZXMuIElmIGl0JiMzOTtzIGEgc2luZ2xlIHBhZ2UgYW5kIGBzZ19pc19sYXN0KHNnKWAgaXMgdHJ1ZSwgaXQgdXNlcyBga21hcF9sb2NhbF9wYWdlYCB0byBtYXAgdGhlIHNvdXJjZS4gSWYgaXQgc3BhbnMgdHdvIHBhZ2VzLCBgc2dfY29weV90b19idWZmZXJgIGlzIHVzZWQsIHB1dHRpbmcgdGhlIGRhdGEgaW50byBhIGxvY2FsIGJ1ZmZlci4gQWZ0ZXIgY2FsbGluZyB0aGUgYGRlY29tcHJlc3NgIGZ1bmN0aW9uLCBpdCB1bm1hcHMgYHNyY2AgaWYgaXQmIzM5O3MgYmVlbiBtYXBwZWQuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBmcmFnbWVudGVkIG1lbW9yeSBhbmQgdGhlIHNjYXR0ZXJsaXN0IGlzIHRoZSBtZXRob2QgdG8gbWFuYWdlIGl0LgoKTmV4dCwgSSYjMzk7bGwgbG9vayBhdCB0aGUgYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYCBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgaG93IGB6Y29tcF9kZWNvbXByZXNzYCBpcyBhY3R1YWxseSB1c2VkLiBgZGVjb21wcmVzc19iZGV2X3BhZ2VgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgaW5pdGlhbGl6aW5nIGEgc2luZ2xlLWVudHJ5IHNjYXR0ZXJsaXN0LiBIb3dldmVyLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCB1c2VzIGEgMi1lbnRyeSBzY2F0dGVybGlzdCwgbWFwcyBvbmUgZW50cnkgdXNpbmcgYGttYXBfbG9jYWxfcGFnZWAsIGNvcGllcyBkYXRhLCBhbmQgdW5tYXBzLiBTbywgdGhlcmUmIzM5O3MgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGdvaW5nIG9uLCB3aGljaCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gYHJlYWRfY29tcHJlc3NlZF9wYWdlYCBhbHNvIHVzZXMgYSAyLWVudHJ5IHNjYXR0ZXJsaXN0IGFuZCBjYWxscyBgemNvbXBfZGVjb21wcmVzc2AuIEZpbmFsbHksIGByZWFkX2Zyb21fenNwb29sX3Jhd2AgdXNlcyBhIDItZW50cnkgc2NhdHRlcmxpc3QgYW5kIGRpcmVjdGx5IGNvcGllcyB0aGUgZGF0YSBmcm9tIHRoZSBzY2F0dGVybGlzdCB0byB0aGUgZGVzdGluYXRpb24gd2l0aCBgc2dfY29weV90b19idWZmZXJgIGFuZCB6ZXJvcyBvdXQgdGhlIHJlbWFpbmluZyBvZiB0aGUgcGFnZS4KCkNydWNpYWxseSwgdGhlIGZ1bmN0aW9ucyBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfc2dfZW5kYCB1c2VkIGluIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCBzZWVtIHRvIGJlIHJlbGV2YW50LiBUaGUgb2xkIGB6c19vYmpfcmVhZF9iZWdpbmAgYW5kIGB6c19vYmpfcmVhZF9lbmRgIGNhbGxzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gYG1tL3pzbWFsbG9jLmNgIGFuZCBgaW5jbHVkZS9saW51eC96c21hbGxvYy5oYC4gTGV0JiMzOTtzIG5vdyBjaGVjayB0aGUgY29kZSBvZiBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGluIGBtbS96c21hbGxvYy5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGluaXRpYWxpemluZyBgc2dgLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgdGhhdCBmdW5jdGlvbiBhbmQgZW5zdXJlIHRoZXJlJiMzOTtzIG5vIHdheSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBleHBvc2VkIGluIHRoZSBwcm9jZXNzIG9mIHNjYXR0ZXItZ2F0aGVyaW5nLCBtYXBwaW5nLCBvciBjb3B5aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c19vYmpfcmVhZF9zZ19iZWdpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venNtYWxsb2MuYz0xMTM1PUVYUE9SVF9TWU1CT0xfR1BMKHpzX2dldF90b3RhbF9wYWdlcyk7XG5tbS96c21hbGxvYy5jLTExMzYtXG5tbS96c21hbGxvYy5jOjExMzc6dm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG5tbS96c21hbGxvYy5jLTExMzgtXHRcdFx0ICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzaXplX3QgbWVtX2xlbilcbi0tXG5tbS96c21hbGxvYy5jLTExODEtfVxubW0venNtYWxsb2MuYzoxMTgyOkVYUE9SVF9TWU1CT0xfR1BMKHpzX29ial9yZWFkX3NnX2JlZ2luKTtcbm1tL3pzbWFsbG9jLmMtMTE4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB6c19vYmpfcmVhZF9zZ19iZWdpbmAgaW4gYG1tL3pzbWFsbG9jLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgenNtYWxsb2MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzY2F0dGVyLWdhdGhlciByZWFkcyBhcmUgaW5pdGlhdGVkLiBUaGUgZnVuY3Rpb24gYHpzX29ial9yZWFkX3NnX2JlZ2luYCBpbiBgbW0venNtYWxsb2MuY2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHNldHRpbmcgdXAgYSBzY2F0dGVyLWdhdGhlciByZWFkIG9wZXJhdGlvbiB3aXRoaW4gdGhlIHpzbWFsbG9jIHN5c3RlbSBpcy4gSeKAmW0gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgaW5pdGlhbCBzZXR1cDogcGVyaGFwcyBhbGxvY2F0aW5nIHN0cnVjdHVyZXMsIHByZXBhcmluZyB0aGUgc2NhdHRlcmxpc3QsIGRldGVybWluaW5nIHBhZ2UgbG9jYXRpb25zLCBhbmQgbWF5YmUgZXZlbiBpbml0aWF0aW5nIHNvbWUga2luZCBvZiBJL08gcmVxdWVzdCBpZiBpdCYjMzk7cyBhc3luY2hyb25vdXMuIEtub3dpbmcgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgdHJhbnNmZXIgcGF0aCBhbmQgaG93IHpzbWFsbG9jIGludGVncmF0ZXMgd2l0aCB0aGUga2VybmVsJiMzOTtzIEkvTyBpbmZyYXN0cnVjdHVyZSBmb3IgZWZmaWNpZW50IHJlYWRzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdCBhbmQgbWFuYWdlIHRob3NlIHBhZ2UgcG9pbnRlcnMuIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzc6XHR2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbjExMzg6XHRcdFx0XHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKVxuMTEzOTpcdHtcbjExNDA6XHRcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbjExNDE6XHRcdHN0cnVjdCB6cGRlc2MgKnpwZGVzYztcbjExNDI6XHRcdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XG4xMTQzOlx0XHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcbjExNDQ6XHRcdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbjExNDU6XHRcbjExNDY6XHRcdC8qIEd1YXJhbnRlZSB3ZSBjYW4gZ2V0IHpzcGFnZSBmcm9tIGhhbmRsZSBzYWZlbHkgKi9cbjExNDc6XHRcdHJlYWRfbG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuMTE0ODpcdFx0b2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuMTE0OTpcdFx0b2JqX3RvX2xvY2F0aW9uKG9iaiwgXHUwMDI2enBkZXNjLCBcdTAwMjZvYmpfaWR4KTtcbjExNTA6XHRcdHpzcGFnZSA9IGdldF96c3BhZ2UoenBkZXNjKTtcbjExNTE6XHRcbjExNTI6XHRcdC8qIE1ha2Ugc3VyZSBtaWdyYXRpb24gZG9lc24mIzM5O3QgbW92ZSBhbnkgcGFnZXMgaW4gdGhpcyB6c3BhZ2UgKi9cbjExNTM6XHRcdHpzcGFnZV9yZWFkX2xvY2soenNwYWdlKTtcbjExNTQ6XHRcdHJlYWRfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4xMTU1Olx0XG4xMTU2Olx0XHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xuMTE1NzpcdFx0b2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtXHUwMDNlc2l6ZSAqIG9ial9pZHgpO1xuMTE1ODpcdFxuMTE1OTpcdFx0aWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpXG4xMTYwOlx0XHRcdG9mZiAmIzQzOz0gWlNfSEFORExFX1NJWkU7XG4xMTYxOlx0XG4xMTYyOlx0XHRpZiAob2ZmICYjNDM7IG1lbV9sZW4gXHUwMDNjPSBQQUdFX1NJWkUpIHtcbjExNjM6XHRcdFx0LyogdGhpcyBvYmplY3QgaXMgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiBhIHBhZ2UgKi9cbjExNjQ6XHRcdFx0c2dfaW5pdF90YWJsZShzZywgMSk7XG4xMTY1Olx0XHRcdHNnX3NldF9wYWdlKHNnLCB6cGRlc2NfcGFnZSh6cGRlc2MpLCBtZW1fbGVuLCBvZmYpO1xuMTE2NjpcdFx0fSBlbHNlIHtcbjExNjc6XHRcdFx0c2l6ZV90IHNpemVzWzJdO1xuMTE2ODpcdFxuMTE2OTpcdFx0XHQvKiB0aGlzIG9iamVjdCBzcGFucyB0d28gcGFnZXMgKi9cbjExNzA6XHRcdFx0c2l6ZXNbMF0gPSBQQUdFX1NJWkUgLSBvZmY7XG4xMTcxOlx0XHRcdHNpemVzWzFdID0gbWVtX2xlbiAtIHNpemVzWzBdO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRzZ19pbml0X3RhYmxlKHNnLCAyKTtcbjExNzQ6XHRcdFx0c2dfc2V0X3BhZ2Uoc2csIHpwZGVzY19wYWdlKHpwZGVzYyksIHNpemVzWzBdLCBvZmYpO1xuMTE3NTpcdFxuMTE3NjpcdFx0XHR6cGRlc2MgPSBnZXRfbmV4dF96cGRlc2MoenBkZXNjKTtcbjExNzc6XHRcdFx0c2cgPSBzZ19uZXh0KHNnKTtcbjExNzg6XHRcbjExNzk6XHRcdFx0c2dfc2V0X3BhZ2Uoc2csIHpwZGVzY19wYWdlKHpwZGVzYyksIHNpemVzWzFdLCAwKTtcbjExODA6XHRcdH1cbjExODE6XHR9XG4xMTgyOlx0RVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfc2dfYmVnaW4pO1xuMTE4MzpcdFxuMTE4NDpcdHZvaWQgenNfb2JqX3JlYWRfc2dfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcbjExODU6XHR7XG4xMTg2Olx0XHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjgKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogMTM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBacmFtL1pzbWFsbG9jIERlY29tcHJlc3Npb24gYW5kIFJlYWQgUGF0aHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhbmFseXNpcyBmb2N1c2VzIG9uIHRoZSBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgenJhbSBkZWNvbXByZXNzaW9uIGFuZCByZWFkIHBhdGhzLiBJIHNlZSB0aGF0IGB6c19vYmpfcmVhZF9zZ19iZWdpbmAgZXNzZW50aWFsbHkgd3JhcHMgYHNnX2luaXRfdGFibGVgLCBpbml0aWFsaXppbmcgc2NhdHRlcmxpc3QgYXJyYXlzLiBJIGV4YW1pbmVkIHRoZSByZWxldmFudCBjb2RlIGluIGB6cmFtX2Rydi5jYCBhbmQgYHpjb21wLmNgLCBzcGVjaWZpY2FsbHkgZnVuY3Rpb25zIGxpa2UgYGRlY29tcHJlc3NfYmRldl9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGByZWFkX2NvbXByZXNzZWRfcGFnZWAsIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AuIE15IHByaW1hcnkgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaG93IGl0IG1pZ2h0IGJlIGV4cG9zZWQgb3IgbGVhZCB0byBpc3N1ZXMgdGhhdCAqb25seSogS01TQU4gd291bGQgY2F0Y2guCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgYHNnYCBzY2F0dGVybGlzdCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCAqYWx3YXlzKiBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiAgYHNnX2luaXRfdGFibGVgIHplcm9lcyB0aGUgc2NhdHRlcmxpc3QgYXJyYXkgYW5kIGluaXRpYWxpemVzIGl0cyBlbnRyaWVzIHdpdGhpbiBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIG9yIGRpcmVjdGx5IGJ5IHRoZSBjYWxsZXJzLiAgSSBsb29rZWQgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgcmVxYCBzdHJ1Y3QgaW4gYHpjb21wX2RlY29tcHJlc3NgIGFuZCBpdCYjMzk7cyBhbHNvIHByb3Blcmx5IGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLiBGdXJ0aGVybW9yZSwgaW4gYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCwgdGhlIHJlbWFpbmluZyBwb3J0aW9uIG9mIHRoZSBwYWdlIGFmdGVyIGRhdGEgY29weSBpcyBjbGVhcmVkIHVzaW5nIGBtZW16ZXJvX3BhZ2VgLiAgVGhlIGRhdGEgYnVmZmVycyBpbnZvbHZlZCBhcmUgZWl0aGVyIHBvcHVsYXRlZCB0aHJvdWdoIGRlY29tcHJlc3Npb24gZnJvbSBjb21wcmVzc2VkIGRhdGEsIG9yIGFyZSBjb3BpZWQgZnJvbSB6c21hbGxvYyBwYWdlcy4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHJlZmFjdG9yaW5nIHRvIHVzZSBzY2F0dGVybGlzdHMgZWxpbWluYXRlcyBhbnkgaW5oZXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4KCkxldCYjMzk7cyBkcmlsbCBkb3duOgoKKiAgICoqU2NhdHRlcmxpc3RzOioqIFRoZXkgYXJlIGluaXRpYWxpemVkIHZpYSBgc2dfaW5pdF90YWJsZSgpYC4KKiAgICoqRGF0YSBTb3VyY2VzOioqIERhdGEgY29tZXMgZWl0aGVyIGZyb20gZGVjb21wcmVzc2luZywgb3IgY29waWVkIGZyb20genNtYWxsb2MgcGFnZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdGhlIHJlYWQgcGF0aHMuCiogICAqKktNU0FOIENvbmNlcm5zOioqICBLTVNBTiBsb29rcyBmb3Igc3BlY2lmaWMgdHlwZXMgb2YgcHJvYmxlbXMuCiAgICAqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHRoYXQgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcy4KICAgICogICBObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgogICAgKiAgIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aXRoIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCiAgICAqICAgTm8gYm91bmRzIGNoZWNraW5nIGxvZ2ljIHRoYXQgY291bGQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlc2UgYXJlIHRoZSBjb3JlIEtNU0FOIGZhaWx1cmUgc2NlbmFyaW9zLCBhbmQgSSBzZWUgbm9uZSBvZiB0aGVtIGhlcmUuIE1lbW9yeSBzYWZldHkgYnVncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBzY2F0dGVybGlzdCB0cmF2ZXJzYWwgcHJvYmxlbXMsIGFuZCBpbnZhbGlkIHVubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIFVCc2FuLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIGFuYWx5c2lzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTiB0byBiZSBlbmFibGVkIGluIHRoaXMgY29udGV4dC4gV2UgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC4gVGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IHRvb2xzIGhhdmUgdXMgY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxuXG5LZXkgb2JzZXJ2YXRpb25zOlxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxuMi4gVGhlIGBzdHJ1Y3QgemNvbXBfcmVxIHJlcWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBiZWZvcmUgcGFzc2luZyB0byB0aGUgZGVjb21wcmVzc2lvbiBjYWxsYmFjay5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcy5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxuXG5LZXkgb2JzZXJ2YXRpb25zOlxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxuMi4gVGhlIGBzdHJ1Y3QgemNvbXBfcmVxIHJlcWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBiZWZvcmUgcGFzc2luZyB0byB0aGUgZGVjb21wcmVzc2lvbiBjYWxsYmFjay5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcy5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowNzozMS45ODc1NzkxNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA3Nzk3NjExMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9XUklURUJBQ0tcIixcbiAgICBcIlpTTUFMTE9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemNvbXBfZGVjb21wcmVzc1wiLFxuICAgIFwiZGVjb21wcmVzc19iZGV2X3BhZ2VcIixcbiAgICBcInJlYWRfY29tcHJlc3NlZF9wYWdlXCIsXG4gICAgXCJyZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VcIixcbiAgICBcInJlYWRfZnJvbV96c3Bvb2xfcmF3XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHpyYW0gcmVhZCBhbmQgZGVjb21wcmVzc2lvbiBwYXRoIHRvIHVzZSBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnYCkgdmlhIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9zZ19lbmQoKWAgcmF0aGVyIHRoYW4gcmF3IG1lbW9yeSBwb2ludGVycyBhbmQgYHpzX29ial9yZWFkX2JlZ2luKClgIC8gYHpzX29ial9yZWFkX2VuZCgpYC4gXFxuXFxuS2V5IG9ic2VydmF0aW9uczpcXG4xLiBBbGwgc3RhY2stYWxsb2NhdGVkIHNjYXR0ZXJsaXN0cyAoYHN0cnVjdCBzY2F0dGVybGlzdCBzZ1suLi5dYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBgc2dfaW5pdF90YWJsZSgpYCB3aXRoaW4gYHpzX29ial9yZWFkX3NnX2JlZ2luKClgIG9yIGNhbGxlcnMgcHJpb3IgdG8gYmVpbmcgcGFzc2VkIG9yIGl0ZXJhdGVkIG92ZXIuXFxuMi4gVGhlIGBzdHJ1Y3QgemNvbXBfcmVxIHJlcWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBiZWZvcmUgcGFzc2luZyB0byB0aGUgZGVjb21wcmVzc2lvbiBjYWxsYmFjay5cXG4zLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBidWZmZXIgbGVuZ3Rocywgb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2Vzcywgb3IgaW5jb3JyZWN0IHNjYXR0ZXJsaXN0IG1hcHBpbmcvdW5tYXBwaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOLCBwYWdlIHRhYmxlIGRlYnVnZ2luZywgbG9ja2RlcCkuXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHpjb21wIGRlY29tcHJlc3Npb24gYW5kIHpyYW0gcmVhZCBwYXRocyB0byB1c2Ugc2NhdHRlcmxpc3RzIHJhdGhlciB0aGFuIGNvbnRpZ3VvdXMgbWVtb3J5IHBvaW50ZXJzLCBoYW5kbGluZyBib3RoIHNpbmdsZS1wYWdlIG9iamVjdHMgdmlhIGttYXBfbG9jYWxfcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzIHZpYSBzZ19jb3B5X3RvX2J1ZmZlci4gVGhpcyBtb2RpZmllcyBkYXRhIGJ1ZmZlciBoYW5kbGluZyBhbmQgZGVjb21wcmVzc2lvbiBmbG93cyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbWFwcGluZyBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowNzozMS45ODc1ODU0MzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTU2ODMxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNjE5OWIyMWFhMzQyN2RkM2Q4ZGU5NGQ2NGViZTczOTI5MWIwMzU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTU6MDc6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xcbmluZGV4IDk3NGM0NjkxODg3ZTYuLjAyOGUyZjBmNTg3ZTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xcbkBAIC03LDYgKzcsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdWhvdHBsdWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hpZ2htZW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNmcy5oXFx1MDAzZVxcbiBcXG5AQCAtMTU4LDE3ICsxNjAsMzIgQEAgaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbiB9XFxuIFxcbiBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4tXFx0XFx0ICAgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpXFxuK1xcdFxcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgemNvbXBfcmVxIHJlcSA9IHtcXG4tXFx0XFx0LnNyYyA9IHNyYyxcXG4gXFx0XFx0LmRzdCA9IGRzdCxcXG4gXFx0XFx0LnNyY19sZW4gPSBzcmNfbGVuLFxcbiBcXHRcXHQuZHN0X2xlbiA9IFBBR0VfU0laRSxcXG4gXFx0fTtcXG4rXFx0dm9pZCAqc3JjID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdG1pZ2h0X3NsZWVwKCk7XFxuLVxcdHJldHVybiBjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWRlY29tcHJlc3MoY29tcC1cXHUwMDNlcGFyYW1zLCBcXHUwMDI2enN0cm0tXFx1MDAzZWN0eCwgXFx1MDAyNnJlcSk7XFxuK1xcbitcXHRpZiAoc2dfaXNfbGFzdChzZykpIHtcXG4rXFx0XFx0LyogdGhlIG9iamVjdCBpcyBjb250YWluZWQgd2l0aGluIG9uZSBwYWdlLCByZWFkIGl0IGluLXBsYWNlICovXFxuK1xcdFxcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7XFxuK1xcdFxcdHJlcS5zcmMgPSBzcmMgKyBzZy1cXHUwMDNlb2Zmc2V0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiB0aGUgb2JqZWN0IHNwYW5zIHR3byBwYWdlcywgbGluZWFyaXplIGl0IGludG8gbG9jYWwgY29weSAqL1xcbitcXHRcXHRzZ19jb3B5X3RvX2J1ZmZlcihzZywgMiwgenN0cm0tXFx1MDAzZWxvY2FsX2NvcHksIHNyY19sZW4pO1xcbitcXHRcXHRyZXEuc3JjID0genN0cm0tXFx1MDAzZWxvY2FsX2NvcHk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGNvbXAtXFx1MDAzZW9wcy1cXHUwMDNlZGVjb21wcmVzcyhjb21wLVxcdTAwM2VwYXJhbXMsIFxcdTAwMjZ6c3RybS1cXHUwMDNlY3R4LCBcXHUwMDI2cmVxKTtcXG4rXFx0aWYgKHNyYylcXG4rXFx0XFx0a3VubWFwX2xvY2FsKHNyYyk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIGludCB6Y29tcF9jcHVfdXBfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLmYzOGZkMzFmOWU0ZTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbkBAIC01LDYgKzUsOCBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuIFxcbitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7XFxuK1xcbiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVRcXHRJTlRfTUlOXFxuIFxcbiBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMge1xcbkBAIC05MSw2ICs5Myw2IEBAIHZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pO1xcbiBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuIFxcdFxcdCAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKTtcXG4gaW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuLVxcdFxcdCAgICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcXG4rXFx0XFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcXG4gXFxuICNlbmRpZiAvKiBfWkNPTVBfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbmluZGV4IGE5YjNiYjFkM2JlZjMuLjU0MzFiMTZmMmY0NWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbkBAIC0zMiw2ICszMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVob3RwbHVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWxfcmVhZF9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiBcXG5AQCAtMTM0Miw5ICsxMzQzLDkgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbiBcXHRpbnQgcmV0LCBwcmlvO1xcbi1cXHR2b2lkICpzcmM7XFxuIFxcbiBcXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xcbiBcXHQvKiBTaW5jZSBzbG90IHdhcyB1bmxvY2tlZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIHN0aWxsIFpSQU1fV0IgKi9cXG5AQCAtMTM2MywxMyArMTM2NCwxOCBAQCBzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0c2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpO1xcbiBcXHRwcmlvID0gZ2V0X3Nsb3RfY29tcF9wcmlvcml0eSh6cmFtLCBpbmRleCk7XFxuIFxcbitcXHRzZ19pbml0X3RhYmxlKHNnLCAxKTtcXG4rXFx0c2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIHNpemUsIDApO1xcbitcXG4gXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4tXFx0c3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbi1cXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBzaXplLFxcbitcXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsXFxuIFxcdFxcdFxcdCAgICAgICB6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuLVxcdGlmICghcmV0KVxcbi1cXHRcXHRjb3B5X3BhZ2Uoc3JjLCB6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuLVxcdGt1bm1hcF9sb2NhbChzcmMpO1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHR2b2lkICpkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuK1xcbitcXHRcXHRjb3B5X3BhZ2UoZHN0LCB6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuK1xcdFxcdGt1bm1hcF9sb2NhbChkc3QpO1xcbitcXHR9XFxuIFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbiBcXHRzbG90X3VubG9jayh6cmFtLCBpbmRleCk7XFxuIFxcbkBAIC0yMDg2LDE1ICsyMDkyLDE5IEBAIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gc3RhdGljIGludCByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiBcXHR2b2lkICpzcmMsICpkc3Q7XFxuIFxcbiBcXHRoYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xcbi1cXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIE5VTEwpO1xcbitcXHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgUEFHRV9TSVpFKTtcXG4rXFx0LyogYW4gaW5jb21wcmVzc2libGUgb2JqZWN0IG5ldmVyIHNwYW5zIHR3byBwYWdlcyAqL1xcbitcXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpO1xcbiBcXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuIFxcdGNvcHlfcGFnZShkc3QsIHNyYyk7XFxuIFxcdGt1bm1hcF9sb2NhbChkc3QpO1xcbi1cXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBzcmMpO1xcbitcXHRrdW5tYXBfbG9jYWwoc3JjKTtcXG4rXFx0enNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjEwMyw5ICsyMTEzLDEwIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4rXFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuLVxcdHZvaWQgKnNyYywgKmRzdDtcXG4rXFx0dm9pZCAqZHN0O1xcbiBcXHRpbnQgcmV0LCBwcmlvO1xcbiBcXG4gXFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcXG5AQCAtMjExMywxMiArMjEyNCwxMSBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0cHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpO1xcbiBcXG4gXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4tXFx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSxcXG4tXFx0XFx0XFx0XFx0enN0cm0tXFx1MDAzZWxvY2FsX2NvcHkpO1xcbitcXHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7XFxuIFxcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4tXFx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwgZHN0KTtcXG4rXFx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNnLCBzaXplLCBkc3QpO1xcbiBcXHRrdW5tYXBfbG9jYWwoZHN0KTtcXG4tXFx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7XFxuK1xcdHpzX29ial9yZWFkX3NnX2VuZCh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcXG4gXFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0yMTI4LDI1ICsyMTM4LDIzIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbi1cXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XFxuK1xcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbi1cXHR2b2lkICpzcmM7XFxuK1xcdHZvaWQgKmRzdDtcXG4gXFxuIFxcdGhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XFxuIFxcdHNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFdlIG5lZWQgdG8gZ2V0IHN0cmVhbSBqdXN0IGZvciAtXFx1MDAzZWxvY2FsX2NvcHkgYnVmZmVyLCBpblxcbi1cXHQgKiBjYXNlIGlmIG9iamVjdCBzcGFucyB0d28gcGh5c2ljYWwgcGFnZXMuIE5vIGRlY29tcHJlc3Npb25cXG4tXFx0ICogdGFrZXMgcGxhY2UgaGVyZSwgYXMgd2UgcmVhZCByYXcgY29tcHJlc3NlZCBkYXRhLlxcbitcXHQgKiBObyBkZWNvbXByZXNzaW9uIHRha2VzIHBsYWNlIGhlcmUsIHdlIGNvcHkgb3V0IHJhdyBjb21wcmVzc2VkXFxuK1xcdCAqIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgZGVzdGluYXRpb24gcGFnZS5cXG4gXFx0ICovXFxuLVxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbi1cXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxcbi1cXHRcXHRcXHRcXHR6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuLVxcdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XFxuLVxcdHpzX29ial9yZWFkX2VuZCh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xcbi1cXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG4rXFx0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpO1xcbitcXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuK1xcdHNnX2NvcHlfdG9fYnVmZmVyKHNnLCBzZ19uZW50cyhzZyksIGRzdCwgc2l6ZSk7XFxuK1xcdGt1bm1hcF9sb2NhbChkc3QpO1xcbitcXHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XFxuIFxcbiBcXHRtZW16ZXJvX3BhZ2UocGFnZSwgc2l6ZSwgUEFHRV9TSVpFIC0gc2l6ZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcXG5pbmRleCA0Nzg0MTBjODgwYjFmLi41YjcyOThhNTAyNmI4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxcbkBAIC00MCwxMCArNDAsNiBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XFxuIFxcbiB2b2lkIHpzX3Bvb2xfc3RhdHMoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCB6c19wb29sX3N0YXRzICpzdGF0cyk7XFxuIFxcbi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuLVxcdFxcdFxcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KTtcXG4tdm9pZCB6c19vYmpfcmVhZF9lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxcbi1cXHRcXHQgICAgIHNpemVfdCBtZW1fbGVuLCB2b2lkICpoYW5kbGVfbWVtKTtcXG4gdm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pO1xcbiB2b2lkIHpzX29ial9yZWFkX3NnX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpO1xcbmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuY1xcbmluZGV4IDgyNTAyMmE3YTMyOGYuLjExYmUzN2M0MzE3MTggMTAwNjQ0XFxuLS0tIGEvbW0venNtYWxsb2MuY1xcbisrKyBiL21tL3pzbWFsbG9jLmNcXG5AQCAtMTEzNCw4MyArMTEzNCw2IEBAIHVuc2lnbmVkIGxvbmcgenNfZ2V0X3RvdGFsX3BhZ2VzKHN0cnVjdCB6c19wb29sICpwb29sKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHpzX2dldF90b3RhbF9wYWdlcyk7XFxuIFxcbi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuLVxcdFxcdFxcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KVxcbi17XFxuLVxcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcXG4tXFx0c3RydWN0IHpwZGVzYyAqenBkZXNjO1xcbi1cXHR1bnNpZ25lZCBsb25nIG9iaiwgb2ZmO1xcbi1cXHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcXG4tXFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xcbi1cXHR2b2lkICphZGRyO1xcbi1cXG4tXFx0LyogR3VhcmFudGVlIHdlIGNhbiBnZXQgenNwYWdlIGZyb20gaGFuZGxlIHNhZmVseSAqL1xcbi1cXHRyZWFkX2xvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbi1cXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XFxuLVxcdG9ial90b19sb2NhdGlvbihvYmosIFxcdTAwMjZ6cGRlc2MsIFxcdTAwMjZvYmpfaWR4KTtcXG4tXFx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xcbi1cXG4tXFx0LyogTWFrZSBzdXJlIG1pZ3JhdGlvbiBkb2Vzbid0IG1vdmUgYW55IHBhZ2VzIGluIHRoaXMgenNwYWdlICovXFxuLVxcdHpzcGFnZV9yZWFkX2xvY2soenNwYWdlKTtcXG4tXFx0cmVhZF91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbi1cXG4tXFx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcXG4tXFx0b2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtXFx1MDAzZXNpemUgKiBvYmpfaWR4KTtcXG4tXFxuLVxcdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxcbi1cXHRcXHRvZmYgKz0gWlNfSEFORExFX1NJWkU7XFxuLVxcbi1cXHRpZiAob2ZmICsgbWVtX2xlbiBcXHUwMDNjPSBQQUdFX1NJWkUpIHtcXG4tXFx0XFx0LyogdGhpcyBvYmplY3QgaXMgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiBhIHBhZ2UgKi9cXG4tXFx0XFx0YWRkciA9IGttYXBfbG9jYWxfenBkZXNjKHpwZGVzYyk7XFxuLVxcdFxcdGFkZHIgKz0gb2ZmO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRzaXplX3Qgc2l6ZXNbMl07XFxuLVxcbi1cXHRcXHQvKiB0aGlzIG9iamVjdCBzcGFucyB0d28gcGFnZXMgKi9cXG4tXFx0XFx0c2l6ZXNbMF0gPSBQQUdFX1NJWkUgLSBvZmY7XFxuLVxcdFxcdHNpemVzWzFdID0gbWVtX2xlbiAtIHNpemVzWzBdO1xcbi1cXHRcXHRhZGRyID0gbG9jYWxfY29weTtcXG4tXFxuLVxcdFxcdG1lbWNweV9mcm9tX3BhZ2UoYWRkciwgenBkZXNjX3BhZ2UoenBkZXNjKSxcXG4tXFx0XFx0XFx0XFx0IG9mZiwgc2l6ZXNbMF0pO1xcbi1cXHRcXHR6cGRlc2MgPSBnZXRfbmV4dF96cGRlc2MoenBkZXNjKTtcXG4tXFx0XFx0bWVtY3B5X2Zyb21fcGFnZShhZGRyICsgc2l6ZXNbMF0sXFxuLVxcdFxcdFxcdFxcdCB6cGRlc2NfcGFnZSh6cGRlc2MpLFxcbi1cXHRcXHRcXHRcXHQgMCwgc2l6ZXNbMV0pO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gYWRkcjtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9iZWdpbik7XFxuLVxcbi12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuLVxcdFxcdCAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pXFxuLXtcXG4tXFx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xcbi1cXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2M7XFxuLVxcdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XFxuLVxcdHVuc2lnbmVkIGludCBvYmpfaWR4O1xcbi1cXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XFxuLVxcbi1cXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XFxuLVxcdG9ial90b19sb2NhdGlvbihvYmosIFxcdTAwMjZ6cGRlc2MsIFxcdTAwMjZvYmpfaWR4KTtcXG4tXFx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xcbi1cXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xcbi1cXHRvZmYgPSBvZmZzZXRfaW5fcGFnZShjbGFzcy1cXHUwMDNlc2l6ZSAqIG9ial9pZHgpO1xcbi1cXG4tXFx0aWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpXFxuLVxcdFxcdG9mZiArPSBaU19IQU5ETEVfU0laRTtcXG4tXFxuLVxcdGlmIChvZmYgKyBtZW1fbGVuIFxcdTAwM2M9IFBBR0VfU0laRSkge1xcbi1cXHRcXHRoYW5kbGVfbWVtIC09IG9mZjtcXG4tXFx0XFx0a3VubWFwX2xvY2FsKGhhbmRsZV9tZW0pO1xcbi1cXHR9XFxuLVxcbi1cXHR6c3BhZ2VfcmVhZF91bmxvY2soenNwYWdlKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9lbmQpO1xcbi1cXG4gdm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXFxuIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDc6MzMuNDQ0MzQxMTYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NzQ2MDgxMzA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX1dSSVRFQkFDS1wiLFxuICAgIFwiWlNNQUxMT0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF9kZWNvbXByZXNzXCIsXG4gICAgXCJkZWNvbXByZXNzX2JkZXZfcGFnZVwiLFxuICAgIFwicmVhZF9jb21wcmVzc2VkX3BhZ2VcIixcbiAgICBcInJlYWRfaW5jb21wcmVzc2libGVfcGFnZVwiLFxuICAgIFwicmVhZF9mcm9tX3pzcG9vbF9yYXdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHpjb21wIGRlY29tcHJlc3Npb24gYW5kIHpyYW0gcmVhZCBwYXRocyB0byB1c2Ugc2NhdHRlcmxpc3RzIHJhdGhlciB0aGFuIGNvbnRpZ3VvdXMgbWVtb3J5IHBvaW50ZXJzLCBoYW5kbGluZyBib3RoIHNpbmdsZS1wYWdlIG9iamVjdHMgdmlhIGttYXBfbG9jYWxfcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzIHZpYSBzZ19jb3B5X3RvX2J1ZmZlci4gVGhpcyBtb2RpZmllcyBkYXRhIGJ1ZmZlciBoYW5kbGluZyBhbmQgZGVjb21wcmVzc2lvbiBmbG93cyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbWFwcGluZyBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY2MTk5YjIxYWEzNDI3ZGQzZDhkZTk0ZDY0ZWJlNzM5MjkxYjAzNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE1OjA3OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuaW5kZXggOTc0YzQ2OTE4ODdlNi4uMDI4ZTJmMGY1ODdlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuQEAgLTcsNiArNyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdWhvdHBsdWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZ2htZW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNmcy5oXHUwMDNlXG4gXG5AQCAtMTU4LDE3ICsxNjAsMzIgQEAgaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIH1cbiBcbiBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi1cdFx0ICAgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpXG4rXHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfcmVxIHJlcSA9IHtcbi1cdFx0LnNyYyA9IHNyYyxcbiBcdFx0LmRzdCA9IGRzdCxcbiBcdFx0LnNyY19sZW4gPSBzcmNfbGVuLFxuIFx0XHQuZHN0X2xlbiA9IFBBR0VfU0laRSxcbiBcdH07XG4rXHR2b2lkICpzcmMgPSBOVUxMO1xuK1x0aW50IHJldDtcbiBcbiBcdG1pZ2h0X3NsZWVwKCk7XG4tXHRyZXR1cm4gY29tcC1cdTAwM2VvcHMtXHUwMDNlZGVjb21wcmVzcyhjb21wLVx1MDAzZXBhcmFtcywgXHUwMDI2enN0cm0tXHUwMDNlY3R4LCBcdTAwMjZyZXEpO1xuK1xuK1x0aWYgKHNnX2lzX2xhc3Qoc2cpKSB7XG4rXHRcdC8qIHRoZSBvYmplY3QgaXMgY29udGFpbmVkIHdpdGhpbiBvbmUgcGFnZSwgcmVhZCBpdCBpbi1wbGFjZSAqL1xuK1x0XHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpO1xuK1x0XHRyZXEuc3JjID0gc3JjICsgc2ctXHUwMDNlb2Zmc2V0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogdGhlIG9iamVjdCBzcGFucyB0d28gcGFnZXMsIGxpbmVhcml6ZSBpdCBpbnRvIGxvY2FsIGNvcHkgKi9cbitcdFx0c2dfY29weV90b19idWZmZXIoc2csIDIsIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHksIHNyY19sZW4pO1xuK1x0XHRyZXEuc3JjID0genN0cm0tXHUwMDNlbG9jYWxfY29weTtcbitcdH1cbitcbitcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZWRlY29tcHJlc3MoY29tcC1cdTAwM2VwYXJhbXMsIFx1MDAyNnpzdHJtLVx1MDAzZWN0eCwgXHUwMDI2cmVxKTtcbitcdGlmIChzcmMpXG4rXHRcdGt1bm1hcF9sb2NhbChzcmMpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gaW50IHpjb21wX2NwdV91cF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLmYzOGZkMzFmOWU0ZTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbkBAIC01LDYgKzUsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiBcbitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7XG4rXG4gI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUXHRJTlRfTUlOXG4gXG4gc3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcbkBAIC05MSw2ICs5Myw2IEBAIHZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pO1xuIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiBcdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xuIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCk7XG4rXHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCk7XG4gXG4gI2VuZGlmIC8qIF9aQ09NUF9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IGE5YjNiYjFkM2JlZjMuLjU0MzFiMTZmMmY0NWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC0zMiw2ICszMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFydF9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2F0dGVybGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsX3JlYWRfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuIFxuQEAgLTEzNDIsOSArMTM0Myw5IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4rXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcdGludCByZXQsIHByaW87XG4tXHR2b2lkICpzcmM7XG4gXG4gXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xuIFx0LyogU2luY2Ugc2xvdCB3YXMgdW5sb2NrZWQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBzdGlsbCBaUkFNX1dCICovXG5AQCAtMTM2MywxMyArMTM2NCwxOCBAQCBzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdHNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTtcbiBcdHByaW8gPSBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHpyYW0sIGluZGV4KTtcbiBcbitcdHNnX2luaXRfdGFibGUoc2csIDEpO1xuK1x0c2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIHNpemUsIDApO1xuK1xuIFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuLVx0c3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuLVx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBzaXplLFxuK1x0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsXG4gXHRcdFx0ICAgICAgIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdGNvcHlfcGFnZShzcmMsIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0a3VubWFwX2xvY2FsKHNyYyk7XG4rXHRpZiAoIXJldCkge1xuK1x0XHR2b2lkICpkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4rXG4rXHRcdGNvcHlfcGFnZShkc3QsIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuK1x0XHRrdW5tYXBfbG9jYWwoZHN0KTtcbitcdH1cbiBcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuIFx0c2xvdF91bmxvY2soenJhbSwgaW5kZXgpO1xuIFxuQEAgLTIwODYsMTUgKzIwOTIsMTkgQEAgc3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbitcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dm9pZCAqc3JjLCAqZHN0O1xuIFxuIFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbi1cdHNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBOVUxMKTtcbitcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIFBBR0VfU0laRSk7XG4rXHQvKiBhbiBpbmNvbXByZXNzaWJsZSBvYmplY3QgbmV2ZXIgc3BhbnMgdHdvIHBhZ2VzICovXG4rXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpO1xuIFx0ZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0Y29weV9wYWdlKGRzdCwgc3JjKTtcbiBcdGt1bm1hcF9sb2NhbChkc3QpO1xuLVx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBzcmMpO1xuK1x0a3VubWFwX2xvY2FsKHNyYyk7XG4rXHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yMTAzLDkgKzIxMTMsMTAgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbitcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4tXHR2b2lkICpzcmMsICpkc3Q7XG4rXHR2b2lkICpkc3Q7XG4gXHRpbnQgcmV0LCBwcmlvO1xuIFxuIFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbkBAIC0yMTEzLDEyICsyMTI0LDExIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpO1xuIFxuIFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuLVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxuLVx0XHRcdFx0enN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4rXHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcbiBcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbi1cdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwgZHN0KTtcbitcdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNnLCBzaXplLCBkc3QpO1xuIFx0a3VubWFwX2xvY2FsKGRzdCk7XG4tXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xuK1x0enNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XG4gXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjEyOCwyNSArMjEzOCwyMyBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuLVx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi1cdHZvaWQgKnNyYztcbitcdHZvaWQgKmRzdDtcbiBcbiBcdGhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XG4gXHRzaXplID0gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCk7XG4gXG4gXHQvKlxuLVx0ICogV2UgbmVlZCB0byBnZXQgc3RyZWFtIGp1c3QgZm9yIC1cdTAwM2Vsb2NhbF9jb3B5IGJ1ZmZlciwgaW5cbi1cdCAqIGNhc2UgaWYgb2JqZWN0IHNwYW5zIHR3byBwaHlzaWNhbCBwYWdlcy4gTm8gZGVjb21wcmVzc2lvblxuLVx0ICogdGFrZXMgcGxhY2UgaGVyZSwgYXMgd2UgcmVhZCByYXcgY29tcHJlc3NlZCBkYXRhLlxuK1x0ICogTm8gZGVjb21wcmVzc2lvbiB0YWtlcyBwbGFjZSBoZXJlLCB3ZSBjb3B5IG91dCByYXcgY29tcHJlc3NlZFxuK1x0ICogZGF0YSBkaXJlY3RseSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuIFx0ICovXG4tXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xuLVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxuLVx0XHRcdFx0enN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4tXHRtZW1jcHlfdG9fcGFnZShwYWdlLCAwLCBzcmMsIHNpemUpO1xuLVx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7XG4rXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4rXHRzZ19jb3B5X3RvX2J1ZmZlcihzZywgc2dfbmVudHMoc2cpLCBkc3QsIHNpemUpO1xuK1x0a3VubWFwX2xvY2FsKGRzdCk7XG4rXHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcbiBcdG1lbXplcm9fcGFnZShwYWdlLCBzaXplLCBQQUdFX1NJWkUgLSBzaXplKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcbmluZGV4IDQ3ODQxMGM4ODBiMWYuLjViNzI5OGE1MDI2YjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcbisrKyBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxuQEAgLTQwLDEwICs0MCw2IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTtcbiBcbiB2b2lkIHpzX3Bvb2xfc3RhdHMoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCB6c19wb29sX3N0YXRzICpzdGF0cyk7XG4gXG4tdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHRcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KTtcbi12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4tXHRcdCAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pO1xuIHZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuIFx0XHRcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pO1xuIHZvaWQgenNfb2JqX3JlYWRfc2dfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmNcbmluZGV4IDgyNTAyMmE3YTMyOGYuLjExYmUzN2M0MzE3MTggMTAwNjQ0XG4tLS0gYS9tbS96c21hbGxvYy5jXG4rKysgYi9tbS96c21hbGxvYy5jXG5AQCAtMTEzNCw4MyArMTEzNCw2IEBAIHVuc2lnbmVkIGxvbmcgenNfZ2V0X3RvdGFsX3BhZ2VzKHN0cnVjdCB6c19wb29sICpwb29sKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpO1xuIFxuLXZvaWQgKnpzX29ial9yZWFkX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbi1cdFx0XHRzaXplX3QgbWVtX2xlbiwgdm9pZCAqbG9jYWxfY29weSlcbi17XG4tXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XG4tXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2M7XG4tXHR1bnNpZ25lZCBsb25nIG9iaiwgb2ZmO1xuLVx0dW5zaWduZWQgaW50IG9ial9pZHg7XG4tXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4tXHR2b2lkICphZGRyO1xuLVxuLVx0LyogR3VhcmFudGVlIHdlIGNhbiBnZXQgenNwYWdlIGZyb20gaGFuZGxlIHNhZmVseSAqL1xuLVx0cmVhZF9sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4tXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4tXHRvYmpfdG9fbG9jYXRpb24ob2JqLCBcdTAwMjZ6cGRlc2MsIFx1MDAyNm9ial9pZHgpO1xuLVx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xuLVxuLVx0LyogTWFrZSBzdXJlIG1pZ3JhdGlvbiBkb2Vzbid0IG1vdmUgYW55IHBhZ2VzIGluIHRoaXMgenNwYWdlICovXG4tXHR6c3BhZ2VfcmVhZF9sb2NrKHpzcGFnZSk7XG4tXHRyZWFkX3VubG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuLVxuLVx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcbi1cdG9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLVx1MDAzZXNpemUgKiBvYmpfaWR4KTtcbi1cbi1cdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxuLVx0XHRvZmYgKz0gWlNfSEFORExFX1NJWkU7XG4tXG4tXHRpZiAob2ZmICsgbWVtX2xlbiBcdTAwM2M9IFBBR0VfU0laRSkge1xuLVx0XHQvKiB0aGlzIG9iamVjdCBpcyBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIGEgcGFnZSAqL1xuLVx0XHRhZGRyID0ga21hcF9sb2NhbF96cGRlc2MoenBkZXNjKTtcbi1cdFx0YWRkciArPSBvZmY7XG4tXHR9IGVsc2Uge1xuLVx0XHRzaXplX3Qgc2l6ZXNbMl07XG4tXG4tXHRcdC8qIHRoaXMgb2JqZWN0IHNwYW5zIHR3byBwYWdlcyAqL1xuLVx0XHRzaXplc1swXSA9IFBBR0VfU0laRSAtIG9mZjtcbi1cdFx0c2l6ZXNbMV0gPSBtZW1fbGVuIC0gc2l6ZXNbMF07XG4tXHRcdGFkZHIgPSBsb2NhbF9jb3B5O1xuLVxuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGFkZHIsIHpwZGVzY19wYWdlKHpwZGVzYyksXG4tXHRcdFx0XHQgb2ZmLCBzaXplc1swXSk7XG4tXHRcdHpwZGVzYyA9IGdldF9uZXh0X3pwZGVzYyh6cGRlc2MpO1xuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGFkZHIgKyBzaXplc1swXSxcbi1cdFx0XHRcdCB6cGRlc2NfcGFnZSh6cGRlc2MpLFxuLVx0XHRcdFx0IDAsIHNpemVzWzFdKTtcbi1cdH1cbi1cbi1cdHJldHVybiBhZGRyO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9iZWdpbik7XG4tXG4tdm9pZCB6c19vYmpfcmVhZF9lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHQgICAgIHNpemVfdCBtZW1fbGVuLCB2b2lkICpoYW5kbGVfbWVtKVxuLXtcbi1cdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbi1cdHN0cnVjdCB6cGRlc2MgKnpwZGVzYztcbi1cdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XG4tXHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcbi1cdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbi1cbi1cdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbi1cdG9ial90b19sb2NhdGlvbihvYmosIFx1MDAyNnpwZGVzYywgXHUwMDI2b2JqX2lkeCk7XG4tXHR6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7XG4tXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xuLVx0b2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtXHUwMDNlc2l6ZSAqIG9ial9pZHgpO1xuLVxuLVx0aWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpXG4tXHRcdG9mZiArPSBaU19IQU5ETEVfU0laRTtcbi1cbi1cdGlmIChvZmYgKyBtZW1fbGVuIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4tXHRcdGhhbmRsZV9tZW0gLT0gb2ZmO1xuLVx0XHRrdW5tYXBfbG9jYWwoaGFuZGxlX21lbSk7XG4tXHR9XG4tXG4tXHR6c3BhZ2VfcmVhZF91bmxvY2soenNwYWdlKTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfZW5kKTtcbi1cbiB2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbiBcdFx0XHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA3OjMzLjQ0NDM0MzQwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2OTU3NDM5NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGNoYW5nZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW1wYWN0IGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGZ1enppbmcgaXMgZXZlbiB3YXJyYW50ZWQsIGFuZCBpZiBzbywgd2hhdCBzeW1ib2xzIHRvIHRhcmdldCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIG1vc3QgcmVsZXZhbnQuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoLCBJIHNlZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBaUkFNIGhhbmRsZXMgZGVjb21wcmVzc2lvbiBhbmQgZGF0YSByZWFkcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgdXNlIG9mIGBzY2F0dGVybGlzdGAgc3RydWN0dXJlcy4gVGhlIHNpZ25hdHVyZSBjaGFuZ2UgaW4gYHpjb21wX2RlY29tcHJlc3NgIGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gSW5zdGVhZCBvZiBhIGRpcmVjdCBwb2ludGVyLCBpdCBub3cgYWNjZXB0cyBhIGBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnYC4gVGhpcyBpbXBsaWVzIGEgc2hpZnQgdG93YXJkcyBoYW5kbGluZyBkYXRhIGluIG5vbi1jb250aWd1b3VzIG1lbW9yeSByZWdpb25zLCB3aGljaCBjYW4gb2Z0ZW4gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGJ1ZmZlciBib3VuZGFyaWVzIGFuZCBkYXRhIGFsaWdubWVudC4gVGhlIGNvbmRpdGlvbmFsIGNoZWNrLCBgaWYgKHNnX2lzX2xhc3Qoc2cpKWAsIGFuZCB0aGUgdXNlIG9mIGBzZ19jb3B5X3RvX2J1ZmZlcmAgYXJlIGtleS4gV2UnbGwgbmVlZCB0byBleHBsb3JlIGhvdyB0aGlzIHNjYXR0ZXJsaXN0IGlzIHBvcHVsYXRlZCBhbmQgaG93IHRoZSBgc3JjX2xlbmAgaXMgdXNlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZm9jYWwgcG9pbnQuXG5cblRoZSByaXBwbGUgZWZmZWN0IGlzIGV2aWRlbnQgaW4gYHpyYW1fZHJ2LmNgLCB3aGVyZSBzZXZlcmFsIGZ1bmN0aW9ucyBsaWtlIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCBhcmUgdXBkYXRlZCB0byB1dGlsaXplIHRoZXNlIGBzY2F0dGVybGlzdGAgb3BlcmF0aW9ucy4gVGhlIHJlbW92YWwgb2YgdGhlIGB6c19vYmpfcmVhZF9iZWdpbmAgYW5kIGB6c19vYmpfcmVhZF9lbmRgIGZ1bmN0aW9ucyBhbmQgdGhlIHJlcGxhY2VtZW50cyB3aXRoIGB6c19vYmpfcmVhZF9zZ19iZWdpbmAgYW5kIGB6c19vYmpfcmVhZF9zZ19lbmRgIGluIGB6cmFtX2Rydi5jYCBhbmQgYHpzbWFsbG9jLmNgIGluZGljYXRlIGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGZ1bmN0aW9ucyBoYW5kbGUgZXJyb3JzIGFuZCBlZGdlIGNhc2VzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHNjYXR0ZXJsaXN0IGlzIG1hbGZvcm1lZCwgaGFzIGluY29ycmVjdCBsZW5ndGhzLCBvciBwb2ludHMgdG8gaW52YWxpZCBtZW1vcnkgcmVnaW9ucz8gVGhlc2UgYXJlIGNsYXNzaWMgZnV6emluZyB0YXJnZXRzLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvZGUgd2l0aGluIGB6c21hbGxvYy5jYCBhbmQgYHpyYW1fZHJ2LmNgLCB0byBkbyBzb21lIHN0YXRpYyBhbmFseXNpcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBtYXkgYmUgcmV2ZWFsZWQgdGhyb3VnaCB0b29scy4gVGhlIGNoYW5nZXMgaW4gZGF0YSBoYW5kbGluZywgaW4gcGFydGljdWxhciwgd2lsbCByZXF1aXJlIGNhcmVmdWwgc2NydXRpbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyMC40MDE3ODU4MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MDMxNzA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c19vYmpfcmVhZF9zZ19iZWdpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDkyPXN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIwOTktXFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTAwOlxcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBQQUdFX1NJWkUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMDEtXFx0LyogYW4gaW5jb21wcmVzc2libGUgb2JqZWN0IG5ldmVyIHNwYW5zIHR3byBwYWdlcyAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjExMj1zdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjYtXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTI3OlxcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTI4LVxcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMzg9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTUyLVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxNTM6XFx0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNTQtXFx0ZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oPTQxPXZvaWQgenNfcG9vbF9zdGF0cyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHpzX3Bvb2xfc3RhdHMgKnN0YXRzKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtNDItXFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjQzOnZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaC00NC1cXHRcXHRcXHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTEzNT1FWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpO1xcbm1tL3pzbWFsbG9jLmMtMTEzNi1cXG5tbS96c21hbGxvYy5jOjExMzc6dm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxubW0venNtYWxsb2MuYy0xMTM4LVxcdFxcdFxcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXFxuLS1cXG5tbS96c21hbGxvYy5jLTExODEtfVxcbm1tL3pzbWFsbG9jLmM6MTE4MjpFWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9zZ19iZWdpbik7XFxubW0venNtYWxsb2MuYy0xMTgzLVxcbi0tXFxubW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05MzMtXFx0bXV0ZXhfbG9jayhcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2VtdXRleCk7XFxubW0venN3YXAuYzo5MzQ6XFx0enNfb2JqX3JlYWRfc2dfYmVnaW4ocG9vbC1cXHUwMDNlenNfcG9vbCwgZW50cnktXFx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbm1tL3pzd2FwLmMtOTM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyMi45OTIxMzMxNzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcxNzIzNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBacmFtIENvbXByZXNzaW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgWnJhbSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHByb2Nlc3MsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYC4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGB6Y29tcF9kZWNvbXByZXNzYCBmdW5jdGlvbiDigJMgdGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29tcHJlc3NlZCBkYXRhIGlzIGFjdHVhbGx5IGJyb3VnaHQgYmFjayB0byBsaWZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsZ29yaXRobXMgd29ya3MsIGhvdyB0aGUgbWVtb3J5IGlzIGhhbmRsZWQsIGFuZCB3aGF0IGVycm9yIGNvbmRpdGlvbnMgY291bGQgYXJpc2UuXG5cbkJleW9uZCB0aGF0IGNvcmUgZnVuY3Rpb24sIHRob3VnaCwgSSBrbm93IEkgY2FuJ3QgbG9vayBhdCB0aGluZ3MgaW4gYSB2YWN1dW0uIFRvIGZ1bGx5IGdyYXNwIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcywgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9ibG9jay96cmFtL0tjb25maWdgLiBUaGlzIHdpbGwgc2hvdyBtZSB3aGF0IGJ1aWxkLXRpbWUgb3B0aW9ucyBjb250cm9sIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIHRoYXQgYXJlIGF2YWlsYWJsZSwgYXMgd2VsbCBhcyB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBjb2RlLiBLbm93aW5nIHRoaXMgaGVscHMgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyNS4yNjM4NTkyMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MzY1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpSQU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyNS4zNDE0MDM2NzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc4NDEyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgWlJBTSdzIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgWlJBTSdzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBgS2NvbmZpZ2AgZW50cnkgZm9yIFpSQU0gYW5kIHRyYWNlIGl0IGJhY2sgdGhyb3VnaCBhbnkgb3RoZXIgcmVsZXZhbnQgb3B0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBlbmFibGVkLCB3aGF0IG90aGVyIGZlYXR1cmVzIG1pZ2h0IG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBjdXN0b21pemF0aW9ucyBJIG1pZ2h0IHdhbnQgdG8gcGVyZm9ybS4gSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgY29tcHJlc3Npb24gYWxnb3JpdGhtcywgYmxvY2sgbGF5ZXIgY29tcG9uZW50cywgb3IgZXZlbiBzcGVjaWZpYyBDUFUgZmVhdHVyZXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSB3aG9sZSBrZXJuZWwuIExldOKAmXMgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjI3LjYxOTgyMTMwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBaUkFNXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgIDU6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIGNhbGxlZCAvZGV2L3pyYW1YIChYID0gMCwgMSwgLi4uKS5cXG4gICA4OlxcdFxcdCAgUGFnZXMgd3JpdHRlbiB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluIG1lbW9yeVxcbiAgIDk6XFx0XFx0ICBpdHNlbGYuIFRoZXNlIGRpc2tzIGFsbG93IHZlcnkgZmFzdCBJL08gYW5kIGNvbXByZXNzaW9uIHByb3ZpZGVzXFxuICAxMDpcXHRcXHQgIGdvb2QgYW1vdW50cyBvZiBtZW1vcnkgc2F2aW5ncy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJdCBoYXMgc2V2ZXJhbCB1c2UgY2FzZXMsIGZvciBleGFtcGxlOiAvdG1wIHN0b3JhZ2UsIHVzZSBhcyBzd2FwXFxuICAxMzpcXHRcXHQgIGRpc2tzIGFuZCBtYXliZSBtYW55IG1vcmUuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuICAxODpcXHRcXHRib29sIFxcXCJsejQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAgMjA6XFx0XFx0c2VsZWN0IExaNF9DT01QUkVTU1xcbiAgMjE6XFx0XFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcXG4gIDI0OlxcdFxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDI2OlxcdFxcdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xcbiAgMjc6XFx0XFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwienN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICAzMjpcXHRcXHRzZWxlY3QgWlNURF9DT01QUkVTU1xcbiAgMzM6XFx0XFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG4gIDM2OlxcdFxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAgMzg6XFx0XFx0c2VsZWN0IFpMSUJfREVGTEFURVxcbiAgMzk6XFx0XFx0c2VsZWN0IFpMSUJfSU5GTEFURVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbiAgNDI6XFx0XFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDQ0OlxcdFxcdHNlbGVjdCA4NDJfQ09NUFJFU1NcXG4gIDQ1OlxcdFxcdHNlbGVjdCA4NDJfREVDT01QUkVTU1xcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICA0OTpcXHRcXHRkZWZfYm9vbCAhWlJBTV9CQUNLRU5EX0xaNCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDUwOlxcdFxcdFxcdCFaUkFNX0JBQ0tFTkRfWlNURCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0RFRkxBVEUgXFx1MDAyNlxcdTAwMjYgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyNy42MTk5OTU1MDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjY2MDk4MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIHRoZSBaU01BTExPQyBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBaU01BTExPQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBzZXR0aW5ncyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSByZWxldmFudCBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgWlNNQUxMT0MgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlIChhcmNoaXRlY3R1cmUsIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBldGMuKSwgYW5kIHdoYXQgdGhlIHZhcmlvdXMga25vYnMgSSBoYXZlIHRvIHR1bmUgYXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIGJlZm9yZSBJIG1vdmUgb24gdG8gbW9yZSBkZXRhaWxlZCBjb2RlIGFuYWx5c2lzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjMwLjI4NjA5NjUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc2OTE3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTTUFMTE9DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxuLS1cXG5tbS9LY29uZmlnLTEyNC1cXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0NcXG5tbS9LY29uZmlnLTEyNi1cXHR0cmlzdGF0ZVxcbi0tXFxubW0vS2NvbmZpZz0xMzE9Y29tbWVudCBcXFwiWnNtYWxsb2MgaXMgYSBjb21tb24gYmFja2VuZCBhbGxvY2F0b3IgZm9yIHpzd2FwIFxcdTAwMjYgenJhbVxcXCJcXG5tbS9LY29uZmlnLTEzMi1cXG5tbS9LY29uZmlnOjEzMzpjb25maWcgWlNNQUxMT0NfU1RBVFxcbm1tL0tjb25maWctMTM0LVxcdGJvb2wgXFxcIkV4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEtXFxubW0vS2NvbmZpZzoxNDI6Y29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcXG5tbS9LY29uZmlnLTE0My1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIHBlci16c3BhZ2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjMwLjQwMzc5NzQ0MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODgyMDY0Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW4uIEFscmlnaHQsIGl0IGxvb2tzIGxpa2Ugd2UncmUgbG9va2luZyBhdCBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgIGFuZCBzcGVjaWZpY2FsbHkgYHpjb21wX2RlY29tcHJlc3NgLiBUaGVuLCBvdmVyIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY2AsIHdlJ3JlIHRvdWNoaW5nIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YC4gQW5kLCBub3Qgc3VycHJpc2luZ2x5LCBgbW0venNtYWxsb2MuY2AgaXMgYmVpbmcgbW9kaWZpZWQsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiBgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIOKAkyBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSAqcmVhY2hhYmxlKj8gWWVzISBUaGlzIGlzIFpSQU0sIGAvZGV2L3pyYW1YYC4gSXQncyBhIGNvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSwgYW5kIGRlZmluaXRlbHkgc29tZXRoaW5nIEkndmUgd29ya2VkIHdpdGguIEVhc3kgdG8gc2V0IHVwIGluIFFFTVUsIHBlcmZlY3QgZm9yIHN5emthbGxlci5cblxuU28sIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IFpSQU0gZGVjb21wcmVzc2VzIHBhZ2VzIGFuZCByZWFkcyBmcm9tIHpzbWFsbG9jLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gZGVhbGluZyB3aXRoIHNjYXR0ZXJsaXN0cywgYHN0cnVjdCBzY2F0dGVybGlzdCAqc2dgLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgb2JqZWN0cyB0aGF0IGVpdGhlciBzcGFuIG11bHRpcGxlIHBhZ2VzIG9yIGFyZSBmdWxseSBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIHBhZ2UuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBgemNvbXBfZGVjb21wcmVzc2AsIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YC5cblxuQWxyaWdodCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNhbGwgaGllcmFyY2h5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGFuZCB0aGUgb3RoZXJzIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY2AuIE5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MywiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODozOC4yODU4NjQ4NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MjM4MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfY29tcHJlc3NlZF9wYWdlfHJlYWRfaW5jb21wcmVzc2libGVfcGFnZXxyZWFkX2Zyb21fenNwb29sX3Jhd3xkZWNvbXByZXNzX2JkZXZfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ5MC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEwMzA9c3RhdGljIGludCB6cmFtX3dyaXRlYmFja19zbG90cyhzdHJ1Y3QgenJhbSAqenJhbSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODUtXFx0XFx0aWYgKHpyYW0tXFx1MDAzZWNvbXByZXNzZWRfd2IpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTA4NjpcXHRcXHRcXHRlcnIgPSByZWFkX2Zyb21fenNwb29sX3Jhdyh6cmFtLCByZXEtXFx1MDAzZXBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMDg3LVxcdFxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEyMzY9c3RhdGljIHNzaXplX3Qgd3JpdGViYWNrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNDEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTM0MjpzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzQzLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzg1PXN0YXRpYyB2b2lkIHpyYW1fZGVmZXJyZWRfZGVjb21wcmVzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzkyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEzOTM6XFx0cmV0ID0gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE0OTE9c3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDctXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTUwODpcXHRyZXR1cm4gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjA4MT1zdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMDkxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIwOTI6c3RhdGljIGludCByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIwOTMtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTExLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxMTI6c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjExMy1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzNy0jaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTM4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxNjk9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNzYtXFx0aWYgKCF0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9IVUdFKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTc3OlxcdFxcdHJldHVybiByZWFkX2NvbXByZXNzZWRfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE3OC1cXHRlbHNlXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE3OTpcXHRcXHRyZXR1cm4gcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTgwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDg6MzguMzczMTI5NTA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NDUwMTgzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIERlZXAgaW50byBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkcyBhcmUgYmVpbmcgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgWlNQb29sIHJlYWQgb3BlcmF0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgcmVhZF9mcm9tX3pzcG9vbF9yYXdgIGZ1bmN0aW9uOyBJJ20gZ29pbmcgdG8gc2NydXRpbml6ZSBpdHMgdXNlIG9mIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBwYXJ0aWN1bGFybHkgbGluZSAyMTM3LiBJJ20gbG9va2luZyBmb3IgYCNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS2AuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUuXG5cbk5leHQsIEknbGwgbW92ZSBvbiB0byBleGFtaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbiBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZlYXR1cmUgc2V0IGNoYW5nZXMgd2l0aCByZXNwZWN0IHRvIGRpZmZlcmVudCBjb21waWxhdGlvbiBvcHRpb25zLiBJIGtub3cgdGhlc2UgZ3VhcmRzIHJlcHJlc2VudCBkaXN0aW5jdCwgb3B0aW9uYWwgcGF0aHMgdGhlIGNvZGUgY2FuIHRha2UuIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGd1YXJkcyBhcmUgcHJvcGVybHkgaW1wbGVtZW50ZWQgYmFzZWQgb24gdGhlIGJyb2FkZXIgc3lzdGVtIHNldHVwLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBpcyBjb21waWxlZCBpbnRvIHRoZSBpbWFnZSBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDg6NDMuMDE4MTUxMjU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM3ODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWYuKkNPTkZJR19aUkFNX1dSSVRFQkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjU6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNi1zdHJ1Y3QgenJhbV9wcF9zbG90IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODUtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg2OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODctI2RlZmluZSBJTlZBTElEX0JERVZfQkxPQ0tcXHRcXHQofjBVTClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMTI9c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTM2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxMzc6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzOC1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMDg9c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA5OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDEwLXN0YXRpYyBERVZJQ0VfQVRUUl9STyhiZF9zdGF0KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAzMi1cXHRcXHUwMDI2ZGV2X2F0dHJfY29tcF9hbGdvcml0aG0uYXR0cixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDMzOiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDM0LVxcdFxcdTAwMjZkZXZfYXR0cl9iZF9zdGF0LmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDU5PXN0YXRpYyBpbnQgenJhbV9hZGQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwOTctXFx0aW5pdF9yd3NlbShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwOTg6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwOTktXFx0enJhbS1cXHUwMDNld2JfYmF0Y2hfc2l6ZSA9IDMyO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9OTM9c3RydWN0IHpyYW1fc3RhdHMge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTAzLVxcdGF0b21pYzY0X3QgbWlzc19mcmVlO1xcdFxcdC8qIG5vLiBvZiBtaXNzZWQgZnJlZSAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjEwNDojaWZkZWZcXHRDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xMDUtXFx0YXRvbWljNjRfdCBiZF9jb3VudDtcXHRcXHQvKiBuby4gb2YgcGFnZXMgaW4gYmFja2luZyBkZXZpY2UgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oPTEyMT1zdHJ1Y3QgenJhbSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xNDYtXFx0Ym9vbCBjbGFpbTsgLyogUHJvdGVjdGVkIGJ5IGRpc2stXFx1MDAzZW9wZW5fbXV0ZXggKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxNDc6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTE0OC1cXHRzdHJ1Y3QgZmlsZSAqYmFja2luZ19kZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjQzLjEwNzUzNDI5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjY3MzI1MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIFpSQU0ncyBEZWNvbXByZXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgYGRlY29tcHJlc3NfYmRldl9wYWdlYCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCwgYm90aCBrZXkgY29tcG9uZW50cyBvZiB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbSwgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19aUkFNX1dSSVRFQkFDS2AuIFRoZSBjb3JlIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgIGFuZCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYXJlIHVuY29uZGl0aW9uYWxseSBwcmVzZW50IGluIGB6cmFtX2Rydi5jYCwgYW5kIHRoZSBhY3R1YWwgZGVjb21wcmVzc2lvbiBhbGdvcml0aG0sIGB6Y29tcF9kZWNvbXByZXNzYCwgbGl2ZXMgaW4gYHpjb21wLmNgLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgWlJBTWAgaXRzZWxmIHNlbGVjdHMgYFpTTUFMTE9DYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEFuZCwgYXMgYW50aWNpcGF0ZWQsIGBaUkFNX1dSSVRFQkFDS2AgaGluZ2VzIG9uIGBaUkFNYCBiZWluZyBlbmFibGVkLiBEaWdnaW5nIGRlZXBlciBpbnRvIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2AsIEkgc2VlIHRoYXQgYFpSQU1gIHJlcXVpcmVzIGBCTE9DS2AsIGBTWVNGU2AsIGFuZCBgTU1VYC4gYFpSQU1fV1JJVEVCQUNLYCB0aGVuIGRlcGVuZHMgb24gYFpSQU1gLiBBbGwgbWFrZXMgc2Vuc2UuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHN5bWJvbCB2aXNpYmlsaXR5LiAgYHpjb21wX2RlY29tcHJlc3NgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuICBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AgYXJlIGFsbCBzdGF0aWMuIFRoaXMgdHJpZ2dlcnMgYSBzcGVjaWZpYyB0aG91Z2h0OyBjYW4gSSBzdGlsbCBsZXZlcmFnZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBteSBwdXJwb3Nlcz8gQWgsIHllcywgdGhleSBzaG91bGQgYmUgYWRkcmVzc2FibGUuIFN0YXRpYyBmdW5jdGlvbnMgaW4gQyBmaWxlcyBhcmUgZmluZSBmb3Igc3l6a2FsbGVyIHN5bWJvbCBjb3ZlcmFnZSBhbmQgZm9jdXMgc3ltYm9scywgYmVjYXVzZSB0aGV5IHN0aWxsIGhhdmUgc3ltYm9scyBpbiB2bWxpbnV4LCB1bmxlc3MgdGhleSdyZSBjb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gaGVhZGVyIGZpbGVzLCBidXQgSSBkb24ndCBzZWUgdGhhdCBoZXJlLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBgcmVhZF9mcm9tX3pzcG9vbGAgYW5kIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIG9yIGxvb2sgZm9yIGFueSBvdGhlciBkaXJlY3QgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZWNvbXByZXNzaW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjUwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjQ4LjM3NDg2Mzk0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MzI0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9mcm9tX3pzcG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ5MC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0OTE6c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00OTItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTAzMD1zdGF0aWMgaW50IHpyYW1fd3JpdGViYWNrX3Nsb3RzKHN0cnVjdCB6cmFtICp6cmFtLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTA4NS1cXHRcXHRpZiAoenJhbS1cXHUwMDNlY29tcHJlc3NlZF93YilcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMDg2OlxcdFxcdFxcdGVyciA9IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHpyYW0sIHJlcS1cXHUwMDNlcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODctXFx0XFx0ZWxzZVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEwODg6XFx0XFx0XFx0ZXJyID0gcmVhZF9mcm9tX3pzcG9vbCh6cmFtLCByZXEtXFx1MDAzZXBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMDg5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTEyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzNy0jaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTM4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNjgtICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE2OTpzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNzAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTgyPXN0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE4OS1cXHRcXHQvKiBTbG90IHNob3VsZCBiZSBsb2NrZWQgdGhyb3VnaCBvdXQgdGhlIGZ1bmN0aW9uIGNhbGwgKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTkwOlxcdFxcdHJldCA9IHJlYWRfZnJvbV96c3Bvb2woenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxOTEtXFx0XFx0c2xvdF91bmxvY2soenJhbSwgaW5kZXgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQ0Nz1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3MjpcXHRyZXQgPSByZWFkX2Zyb21fenNwb29sKHpyYW0sIHBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDczLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjQ4LjQyOTMwMjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMzg2Mjg0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBoZXJlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoaXMgYHpjb21wX2RlY29tcHJlc3NgIGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgKndoZXJlKiBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBpdHMgaW52b2NhdGlvbi4gU28sIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgYnkgYGRlY29tcHJlc3NfYmRldl9wYWdlYCBhbmQgYHJlYWRfY29tcHJlc3NlZF9wYWdlYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuIEFyZSB0aG9zZSB0aGUgKm9ubHkqIHR3byBmdW5jdGlvbnMgdGhhdCBjYWxsIGB6Y29tcF9kZWNvbXByZXNzYD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIHBhdGhzIG9yIGxlc3Mgb2J2aW91cyBjYWxsIHNpdGVzLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb250ZXh0IG9mIGl0cyBvcGVyYXRpb24gYW5kIHRoZSBkZXBlbmRlbmNpZXMgaW52b2x2ZWQgaW4gdGhlIGRlY29tcHJlc3Npb24gcHJvY2Vzcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgY2FsbGVycyBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ3OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjUyLjU2NzkzNTA4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2ODM0Mjk5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9kZWNvbXByZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0ND1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTYyOmludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE2My1cXHRcXHQgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD05Mz1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtOTQtXFx0XFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oOjk1OmludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTk2LVxcdFxcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzQyPXN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM3MC1cXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEzNzE6XFx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNnLCBzaXplLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNzItXFx0XFx0XFx0ICAgICAgIHpzdHJtLVxcdTAwM2Vsb2NhbF9jb3B5KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMTI9c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTI4LVxcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTI5OlxcdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSwgZHN0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTMwLVxcdGt1bm1hcF9sb2NhbChkc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODo1NS4wMzYyODY2NzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0NjYwNjYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBBc3Nlc3NtZW50OiBaUkFNIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB3aXRoaW4gdGhlIGB6cmFtYCBhbmQgYHpzbWFsbG9jYCBzdWJzeXN0ZW1zLiBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgemNvbXBfZGVjb21wcmVzc2AgaW4gYHpjb21wLmNgLCB3aGljaCBpcyB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsb2dpYywgYW5kIGEgY2x1c3RlciBvZiBmdW5jdGlvbnMgd2l0aGluIGB6cmFtX2Rydi5jYDogYGRlY29tcHJlc3NfYmRldl9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGByZWFkX2NvbXByZXNzZWRfcGFnZWAsIGFuZCBgcmVhZF9mcm9tX3pzcG9vbF9yYXdgLiAgQWRkaXRpb25hbGx5LCBpdCdzIHJlbW92aW5nIHNvbWUgbG93LWxldmVsIHJlYWQgZnVuY3Rpb25zIChgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYCkgZnJvbSBgenNtYWxsb2NgLCB3aGljaCBpcyBpbnRlcmVzdGluZy5cblxuVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzZXZlcmFsIHN5bWJvbHMgYXMgY3JpdGljYWwgZm9yIG15IGZ1enppbmcgY2FtcGFpZ246IGB6Y29tcF9kZWNvbXByZXNzYCwgdGhlIHZhcmlvdXMgYHJlYWRfKmAgZnVuY3Rpb25zLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byB0aG9zZSBmdW5jdGlvbnMuXG5cbk5vdywgY29uZmlndXJhdGlvbi4gIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBhbmQgYFpTTUFMTE9DYCBhcmUgYWxsIGVuYWJsZWQgZHVyaW5nIG15IGZ1enppbmcgcnVucy4gIFRoZSBkZXBlbmRlbmNpZXMgY2hlY2sgb3V0OyBgWlJBTWAgc2VsZWN0cyBgWlNNQUxMT0NgIGFuZCBgWlJBTV9XUklURUJBQ0tgIGRlcGVuZHMgb24gYFpSQU1gLiAgTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5UaGUgYmlnIHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enphYmxlPyAgQWJzb2x1dGVseSwgYW5kIGl0J3MgYSBqdWljeSB0YXJnZXQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoaW4gYHpyYW1gIGFuZCBgenNtYWxsb2NgLiBJdCdzIG1lc3Npbmcgd2l0aCBtZW1vcnkgY29weWluZywgd2hpY2ggaXMgYWx3YXlzIGEgcmVkIGZsYWcsIGFzIHdlbGwgYXMgbWFwcGluZyAodXNpbmcgYGttYXBfbG9jYWxfcGFnZWApLCBzY2F0dGVybGlzdCBoYW5kbGluZywgYnVmZmVyIGxlbmd0aHMsIGFuZCBob3cgZGVjb21wcmVzc2lvbiBpbnB1dCBpcyBwcm9jZXNzZWQsICphY3Jvc3MgcGFnZSBib3VuZGFyaWVzKi4gIEFsbCBvZiB0aGlzIGlzIHZlcnkgc2lnbmlmaWNhbnQgYW5kIGNvdWxkIGludHJvZHVjZSBzb21lIHNlcmlvdXMgYnVncy4gQSBidWZmZXIgb3ZlcmZsb3cgaXMgbW9yZSB0aGFuIGxpa2VseSB3aXRoIGNyb3NzIHBhZ2Ugb2JqZWN0cywgcGFnZSB1bm1hcHBpbmcgY291bGQgYmUgYSBwcm9ibGVtLCBjb3JydXB0aW9uLCBhbmQgdGhlIHN5c3RlbSBjb3VsZCBwYW5pYyBpZiB0aGVyZSBpcyBhIHByb2JsZW0uIEdpdmVuIHRoaXMsIGFuZCB0aGUgY2hhbmdlcyBJIHNlZSwgdGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgYW5hbHlzaXMgYWxzbyBhbGlnbnMgd2l0aCB0aGUgcHJlZGVmaW5lZCBndWlkZWxpbmVzLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBsaXN0ZWQgKGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpTTUFMTE9DYCkuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGVyZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZCAtIHN3aXRjaGluZyB0byBzY2F0dGVybGlzdCBBUElzIGluc3RlYWQgb2YgdXNpbmcgY29udGlndW91cyBwb2ludGVycyBpcyBjb21wbGV4LiAgVGhlcmUncyBhbHNvIHRoZSBjaGFsbGVuZ2Ugb2YgaGFuZGxpbmcgYm90aCBzaW5nbGUtcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzLiBJdCBhbGwgYWRkcyB1cCB0byBhIGNsZWFyIGp1c3RpZmljYXRpb24uXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMZXQncyBnZXQgdGhpcyBjYW1wYWlnbiBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM1MiwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDk6MDAuNzgyODk2MTg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMjU0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX1dSSVRFQkFDS1wiLFxuICAgIFwiWlNNQUxMT0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF9kZWNvbXByZXNzXCIsXG4gICAgXCJkZWNvbXByZXNzX2JkZXZfcGFnZVwiLFxuICAgIFwicmVhZF9jb21wcmVzc2VkX3BhZ2VcIixcbiAgICBcInJlYWRfaW5jb21wcmVzc2libGVfcGFnZVwiLFxuICAgIFwicmVhZF9mcm9tX3pzcG9vbF9yYXdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHpjb21wIGRlY29tcHJlc3Npb24gYW5kIHpyYW0gcmVhZCBwYXRocyB0byB1c2Ugc2NhdHRlcmxpc3RzIHJhdGhlciB0aGFuIGNvbnRpZ3VvdXMgbWVtb3J5IHBvaW50ZXJzLCBoYW5kbGluZyBib3RoIHNpbmdsZS1wYWdlIG9iamVjdHMgdmlhIGttYXBfbG9jYWxfcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzIHZpYSBzZ19jb3B5X3RvX2J1ZmZlci4gVGhpcyBtb2RpZmllcyBkYXRhIGJ1ZmZlciBoYW5kbGluZyBhbmQgZGVjb21wcmVzc2lvbiBmbG93cyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbWFwcGluZyBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fV1JJVEVCQUNLXCIsXG4gICAgXCJaU01BTExPQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX2RlY29tcHJlc3NcIixcbiAgICBcImRlY29tcHJlc3NfYmRldl9wYWdlXCIsXG4gICAgXCJyZWFkX2NvbXByZXNzZWRfcGFnZVwiLFxuICAgIFwicmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlXCIsXG4gICAgXCJyZWFkX2Zyb21fenNwb29sX3Jhd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgemNvbXAgZGVjb21wcmVzc2lvbiBhbmQgenJhbSByZWFkIHBhdGhzIHRvIHVzZSBzY2F0dGVybGlzdHMgcmF0aGVyIHRoYW4gY29udGlndW91cyBtZW1vcnkgcG9pbnRlcnMsIGhhbmRsaW5nIGJvdGggc2luZ2xlLXBhZ2Ugb2JqZWN0cyB2aWEga21hcF9sb2NhbF9wYWdlIGFuZCBjcm9zcy1wYWdlIG9iamVjdHMgdmlhIHNnX2NvcHlfdG9fYnVmZmVyLiBUaGlzIG1vZGlmaWVzIGRhdGEgYnVmZmVyIGhhbmRsaW5nIGFuZCBkZWNvbXByZXNzaW9uIGZsb3dzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBtYXBwaW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA5OjAwLjkwNTE1ODk0NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NjIxNjc5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowOTowMC45MDU3NDkwNTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTg2MTU3MTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxcblxcbktleSBvYnNlcnZhdGlvbnM6XFxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxcbjIuIFRoZSBgc3RydWN0IHpjb21wX3JlcSByZXFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRlY29tcHJlc3Npb24gY2FsbGJhY2suXFxuMy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjYxOTliMjFhYTM0MjdkZDNkOGRlOTRkNjRlYmU3MzkyOTFiMDM1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTU6MDc6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG5pbmRleCA5NzRjNDY5MTg4N2U2Li4wMjhlMmYwZjU4N2UzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2ZzLmhcdTAwM2VcbiBcbkBAIC0xNTgsMTcgKzE2MCwzMiBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4gfVxuIFxuIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbitcdFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9yZXEgcmVxID0ge1xuLVx0XHQuc3JjID0gc3JjLFxuIFx0XHQuZHN0ID0gZHN0LFxuIFx0XHQuc3JjX2xlbiA9IHNyY19sZW4sXG4gXHRcdC5kc3RfbGVuID0gUEFHRV9TSVpFLFxuIFx0fTtcbitcdHZvaWQgKnNyYyA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuIFxuIFx0bWlnaHRfc2xlZXAoKTtcbi1cdHJldHVybiBjb21wLVx1MDAzZW9wcy1cdTAwM2VkZWNvbXByZXNzKGNvbXAtXHUwMDNlcGFyYW1zLCBcdTAwMjZ6c3RybS1cdTAwM2VjdHgsIFx1MDAyNnJlcSk7XG4rXG4rXHRpZiAoc2dfaXNfbGFzdChzZykpIHtcbitcdFx0LyogdGhlIG9iamVjdCBpcyBjb250YWluZWQgd2l0aGluIG9uZSBwYWdlLCByZWFkIGl0IGluLXBsYWNlICovXG4rXHRcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7XG4rXHRcdHJlcS5zcmMgPSBzcmMgKyBzZy1cdTAwM2VvZmZzZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiB0aGUgb2JqZWN0IHNwYW5zIHR3byBwYWdlcywgbGluZWFyaXplIGl0IGludG8gbG9jYWwgY29weSAqL1xuK1x0XHRzZ19jb3B5X3RvX2J1ZmZlcihzZywgMiwgenN0cm0tXHUwMDNlbG9jYWxfY29weSwgc3JjX2xlbik7XG4rXHRcdHJlcS5zcmMgPSB6c3RybS1cdTAwM2Vsb2NhbF9jb3B5O1xuK1x0fVxuK1xuK1x0cmV0ID0gY29tcC1cdTAwM2VvcHMtXHUwMDNlZGVjb21wcmVzcyhjb21wLVx1MDAzZXBhcmFtcywgXHUwMDI2enN0cm0tXHUwMDNlY3R4LCBcdTAwMjZyZXEpO1xuK1x0aWYgKHNyYylcbitcdFx0a3VubWFwX2xvY2FsKHNyYyk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuaW5kZXggODFhMGYzZjZmZjQ4Ny4uZjM4ZmQzMWY5ZTRlMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuQEAgLTUsNiArNSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuIFxuK3N0cnVjdCBzY2F0dGVybGlzdDtcbitcbiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVRcdElOVF9NSU5cbiBcbiBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMge1xuQEAgLTkxLDYgKzkzLDYgQEAgdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7XG4gaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIFx0XHQgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCAqZHN0X2xlbik7XG4gaW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4tXHRcdCAgICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcbitcdFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcbiBcbiAjZW5kaWYgLyogX1pDT01QX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuaW5kZXggYTliM2JiMWQzYmVmMy4uNTQzMWIxNmYyZjQ1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVob3RwbHVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWxfcmVhZF9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gXG5AQCAtMTM0Miw5ICsxMzQzLDkgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbitcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuIFx0aW50IHJldCwgcHJpbztcbi1cdHZvaWQgKnNyYztcbiBcbiBcdHNsb3RfbG9jayh6cmFtLCBpbmRleCk7XG4gXHQvKiBTaW5jZSBzbG90IHdhcyB1bmxvY2tlZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIHN0aWxsIFpSQU1fV0IgKi9cbkBAIC0xMzYzLDEzICsxMzY0LDE4IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0c2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpO1xuIFx0cHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpO1xuIFxuK1x0c2dfaW5pdF90YWJsZShzZywgMSk7XG4rXHRzZ19zZXRfcGFnZShzZywgcGFnZSwgc2l6ZSwgMCk7XG4rXG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4tXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4tXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsXG4rXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSxcbiBcdFx0XHQgICAgICAgenN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4tXHRpZiAoIXJldClcbi1cdFx0Y29weV9wYWdlKHNyYywgenN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4tXHRrdW5tYXBfbG9jYWwoc3JjKTtcbitcdGlmICghcmV0KSB7XG4rXHRcdHZvaWQgKmRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbitcbitcdFx0Y29weV9wYWdlKGRzdCwgenN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4rXHRcdGt1bm1hcF9sb2NhbChkc3QpO1xuK1x0fVxuIFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4gXHRzbG90X3VubG9jayh6cmFtLCBpbmRleCk7XG4gXG5AQCAtMjA4NiwxNSArMjA5MiwxOSBAQCBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gc3RhdGljIGludCByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR2b2lkICpzcmMsICpkc3Q7XG4gXG4gXHRoYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xuLVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIE5VTEwpO1xuK1x0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgUEFHRV9TSVpFKTtcbitcdC8qIGFuIGluY29tcHJlc3NpYmxlIG9iamVjdCBuZXZlciBzcGFucyB0d28gcGFnZXMgKi9cbitcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7XG4gXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjb3B5X3BhZ2UoZHN0LCBzcmMpO1xuIFx0a3VubWFwX2xvY2FsKGRzdCk7XG4tXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIHNyYyk7XG4rXHRrdW5tYXBfbG9jYWwoc3JjKTtcbitcdHpzX29ial9yZWFkX3NnX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIxMDMsOSArMjExMywxMCBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi1cdHZvaWQgKnNyYywgKmRzdDtcbitcdHZvaWQgKmRzdDtcbiBcdGludCByZXQsIHByaW87XG4gXG4gXHRoYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xuQEAgLTIxMTMsMTIgKzIxMjQsMTEgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRwcmlvID0gZ2V0X3Nsb3RfY29tcF9wcmlvcml0eSh6cmFtLCBpbmRleCk7XG4gXG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4tXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsXG4tXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbitcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpO1xuIFx0ZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuLVx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBzaXplLCBkc3QpO1xuK1x0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsIGRzdCk7XG4gXHRrdW5tYXBfbG9jYWwoZHN0KTtcbi1cdHpzX29ial9yZWFkX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7XG4rXHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0yMTI4LDI1ICsyMTM4LDIzIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4tXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4rXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuLVx0dm9pZCAqc3JjO1xuK1x0dm9pZCAqZHN0O1xuIFxuIFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbiBcdHNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTtcbiBcbiBcdC8qXG4tXHQgKiBXZSBuZWVkIHRvIGdldCBzdHJlYW0ganVzdCBmb3IgLVx1MDAzZWxvY2FsX2NvcHkgYnVmZmVyLCBpblxuLVx0ICogY2FzZSBpZiBvYmplY3Qgc3BhbnMgdHdvIHBoeXNpY2FsIHBhZ2VzLiBObyBkZWNvbXByZXNzaW9uXG4tXHQgKiB0YWtlcyBwbGFjZSBoZXJlLCBhcyB3ZSByZWFkIHJhdyBjb21wcmVzc2VkIGRhdGEuXG4rXHQgKiBObyBkZWNvbXByZXNzaW9uIHRha2VzIHBsYWNlIGhlcmUsIHdlIGNvcHkgb3V0IHJhdyBjb21wcmVzc2VkXG4rXHQgKiBkYXRhIGRpcmVjdGx5IGludG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXG4gXHQgKi9cbi1cdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4tXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsXG4tXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbi1cdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XG4tXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xuLVx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4rXHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcbitcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbitcdHNnX2NvcHlfdG9fYnVmZmVyKHNnLCBzZ19uZW50cyhzZyksIGRzdCwgc2l6ZSk7XG4rXHRrdW5tYXBfbG9jYWwoZHN0KTtcbitcdHpzX29ial9yZWFkX3NnX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xuIFxuIFx0bWVtemVyb19wYWdlKHBhZ2UsIHNpemUsIFBBR0VfU0laRSAtIHNpemUpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxuaW5kZXggNDc4NDEwYzg4MGIxZi4uNWI3Mjk4YTUwMjZiOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c21hbGxvYy5oXG5AQCAtNDAsMTAgKzQwLDYgQEAgdW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpO1xuIFxuIHZvaWQgenNfcG9vbF9zdGF0cyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHpzX3Bvb2xfc3RhdHMgKnN0YXRzKTtcbiBcbi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4tXHRcdFx0c2l6ZV90IG1lbV9sZW4sIHZvaWQgKmxvY2FsX2NvcHkpO1xuLXZvaWQgenNfb2JqX3JlYWRfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbi1cdFx0ICAgICBzaXplX3QgbWVtX2xlbiwgdm9pZCAqaGFuZGxlX21lbSk7XG4gdm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4gXHRcdFx0ICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzaXplX3QgbWVtX2xlbik7XG4gdm9pZCB6c19vYmpfcmVhZF9zZ19lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuY1xuaW5kZXggODI1MDIyYTdhMzI4Zi4uMTFiZTM3YzQzMTcxOCAxMDA2NDRcbi0tLSBhL21tL3pzbWFsbG9jLmNcbisrKyBiL21tL3pzbWFsbG9jLmNcbkBAIC0xMTM0LDgzICsxMTM0LDYgQEAgdW5zaWduZWQgbG9uZyB6c19nZXRfdG90YWxfcGFnZXMoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHpzX2dldF90b3RhbF9wYWdlcyk7XG4gXG4tdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHRcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KVxuLXtcbi1cdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbi1cdHN0cnVjdCB6cGRlc2MgKnpwZGVzYztcbi1cdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XG4tXHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcbi1cdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbi1cdHZvaWQgKmFkZHI7XG4tXG4tXHQvKiBHdWFyYW50ZWUgd2UgY2FuIGdldCB6c3BhZ2UgZnJvbSBoYW5kbGUgc2FmZWx5ICovXG4tXHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbi1cdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbi1cdG9ial90b19sb2NhdGlvbihvYmosIFx1MDAyNnpwZGVzYywgXHUwMDI2b2JqX2lkeCk7XG4tXHR6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7XG4tXG4tXHQvKiBNYWtlIHN1cmUgbWlncmF0aW9uIGRvZXNuJ3QgbW92ZSBhbnkgcGFnZXMgaW4gdGhpcyB6c3BhZ2UgKi9cbi1cdHpzcGFnZV9yZWFkX2xvY2soenNwYWdlKTtcbi1cdHJlYWRfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4tXG4tXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xuLVx0b2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtXHUwMDNlc2l6ZSAqIG9ial9pZHgpO1xuLVxuLVx0aWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpXG4tXHRcdG9mZiArPSBaU19IQU5ETEVfU0laRTtcbi1cbi1cdGlmIChvZmYgKyBtZW1fbGVuIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4tXHRcdC8qIHRoaXMgb2JqZWN0IGlzIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW4gYSBwYWdlICovXG4tXHRcdGFkZHIgPSBrbWFwX2xvY2FsX3pwZGVzYyh6cGRlc2MpO1xuLVx0XHRhZGRyICs9IG9mZjtcbi1cdH0gZWxzZSB7XG4tXHRcdHNpemVfdCBzaXplc1syXTtcbi1cbi1cdFx0LyogdGhpcyBvYmplY3Qgc3BhbnMgdHdvIHBhZ2VzICovXG4tXHRcdHNpemVzWzBdID0gUEFHRV9TSVpFIC0gb2ZmO1xuLVx0XHRzaXplc1sxXSA9IG1lbV9sZW4gLSBzaXplc1swXTtcbi1cdFx0YWRkciA9IGxvY2FsX2NvcHk7XG4tXG4tXHRcdG1lbWNweV9mcm9tX3BhZ2UoYWRkciwgenBkZXNjX3BhZ2UoenBkZXNjKSxcbi1cdFx0XHRcdCBvZmYsIHNpemVzWzBdKTtcbi1cdFx0enBkZXNjID0gZ2V0X25leHRfenBkZXNjKHpwZGVzYyk7XG4tXHRcdG1lbWNweV9mcm9tX3BhZ2UoYWRkciArIHNpemVzWzBdLFxuLVx0XHRcdFx0IHpwZGVzY19wYWdlKHpwZGVzYyksXG4tXHRcdFx0XHQgMCwgc2l6ZXNbMV0pO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGFkZHI7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKHpzX29ial9yZWFkX2JlZ2luKTtcbi1cbi12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4tXHRcdCAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pXG4te1xuLVx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xuLVx0c3RydWN0IHpwZGVzYyAqenBkZXNjO1xuLVx0dW5zaWduZWQgbG9uZyBvYmosIG9mZjtcbi1cdHVuc2lnbmVkIGludCBvYmpfaWR4O1xuLVx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xuLVxuLVx0b2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuLVx0b2JqX3RvX2xvY2F0aW9uKG9iaiwgXHUwMDI2enBkZXNjLCBcdTAwMjZvYmpfaWR4KTtcbi1cdHpzcGFnZSA9IGdldF96c3BhZ2UoenBkZXNjKTtcbi1cdGNsYXNzID0genNwYWdlX2NsYXNzKHBvb2wsIHpzcGFnZSk7XG4tXHRvZmYgPSBvZmZzZXRfaW5fcGFnZShjbGFzcy1cdTAwM2VzaXplICogb2JqX2lkeCk7XG4tXG4tXHRpZiAoIVpzSHVnZVBhZ2UoenNwYWdlKSlcbi1cdFx0b2ZmICs9IFpTX0hBTkRMRV9TSVpFO1xuLVxuLVx0aWYgKG9mZiArIG1lbV9sZW4gXHUwMDNjPSBQQUdFX1NJWkUpIHtcbi1cdFx0aGFuZGxlX21lbSAtPSBvZmY7XG4tXHRcdGt1bm1hcF9sb2NhbChoYW5kbGVfbWVtKTtcbi1cdH1cbi1cbi1cdHpzcGFnZV9yZWFkX3VubG9jayh6c3BhZ2UpO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9lbmQpO1xuLVxuIHZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuIFx0XHRcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDk6MDAuOTA1NzUwMDg0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4OTQ3MTE3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaUkFNIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOLCBvciBpZiBzdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiBUaGUgc2lnbmF0dXJlIGNoYW5nZSBpbiBgemNvbXBfZGVjb21wcmVzc2AgaXMgdGhlIGtleSB0aGluZyB0byBsb29rIGF0OiBnb2luZyBmcm9tIGEgc2ltcGxlIGB2b2lkICpgIHNvdXJjZSB0byBhIGBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmAuIFRoYXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoaW5ncy5cblxuRmlyc3QsIEknbGwgd2FsayB0aHJvdWdoIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgIGNoYW5nZXMuIEl0IHNlZW1zIGxpa2Ugd2Ugbm93IGhhdmUgYSBzY2F0dGVybGlzdCBhcyBpbnB1dC4gSW4gYHpjb21wX2RlY29tcHJlc3NgLCB0aGUgbG9naWMgYnJhbmNoZXMgYmFzZWQgb24gd2hldGhlciB0aGUgc2NhdHRlcmxpc3Qgc3BhbnMgb25lIG9yIHR3byBwYWdlcy4gSWYgaXQncyBhIHNpbmdsZSBwYWdlIGFuZCBgc2dfaXNfbGFzdChzZylgIGlzIHRydWUsIGl0IHVzZXMgYGttYXBfbG9jYWxfcGFnZWAgdG8gbWFwIHRoZSBzb3VyY2UuIElmIGl0IHNwYW5zIHR3byBwYWdlcywgYHNnX2NvcHlfdG9fYnVmZmVyYCBpcyB1c2VkLCBwdXR0aW5nIHRoZSBkYXRhIGludG8gYSBsb2NhbCBidWZmZXIuIEFmdGVyIGNhbGxpbmcgdGhlIGBkZWNvbXByZXNzYCBmdW5jdGlvbiwgaXQgdW5tYXBzIGBzcmNgIGlmIGl0J3MgYmVlbiBtYXBwZWQuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGZyYWdtZW50ZWQgbWVtb3J5IGFuZCB0aGUgc2NhdHRlcmxpc3QgaXMgdGhlIG1ldGhvZCB0byBtYW5hZ2UgaXQuXG5cbk5leHQsIEknbGwgbG9vayBhdCB0aGUgYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYCBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgaG93IGB6Y29tcF9kZWNvbXByZXNzYCBpcyBhY3R1YWxseSB1c2VkLiBgZGVjb21wcmVzc19iZGV2X3BhZ2VgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgaW5pdGlhbGl6aW5nIGEgc2luZ2xlLWVudHJ5IHNjYXR0ZXJsaXN0LiBIb3dldmVyLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCB1c2VzIGEgMi1lbnRyeSBzY2F0dGVybGlzdCwgbWFwcyBvbmUgZW50cnkgdXNpbmcgYGttYXBfbG9jYWxfcGFnZWAsIGNvcGllcyBkYXRhLCBhbmQgdW5tYXBzLiBTbywgdGhlcmUncyBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgZ29pbmcgb24sIHdoaWNoIGNvdWxkIGJlIGludGVyZXN0aW5nLiBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgIGFsc28gdXNlcyBhIDItZW50cnkgc2NhdHRlcmxpc3QgYW5kIGNhbGxzIGB6Y29tcF9kZWNvbXByZXNzYC4gRmluYWxseSwgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCB1c2VzIGEgMi1lbnRyeSBzY2F0dGVybGlzdCBhbmQgZGlyZWN0bHkgY29waWVzIHRoZSBkYXRhIGZyb20gdGhlIHNjYXR0ZXJsaXN0IHRvIHRoZSBkZXN0aW5hdGlvbiB3aXRoIGBzZ19jb3B5X3RvX2J1ZmZlcmAgYW5kIHplcm9zIG91dCB0aGUgcmVtYWluaW5nIG9mIHRoZSBwYWdlLlxuXG5DcnVjaWFsbHksIHRoZSBmdW5jdGlvbnMgYHpzX29ial9yZWFkX3NnX2JlZ2luYCBhbmQgYHpzX29ial9yZWFkX3NnX2VuZGAgdXNlZCBpbiBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2Agc2VlbSB0byBiZSByZWxldmFudC4gVGhlIG9sZCBgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYCBjYWxscyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIGBtbS96c21hbGxvYy5jYCBhbmQgYGluY2x1ZGUvbGludXgvenNtYWxsb2MuaGAuIExldCdzIG5vdyBjaGVjayB0aGUgY29kZSBvZiBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGluIGBtbS96c21hbGxvYy5jYCB0byBzZWUgaG93IGl0J3MgaW5pdGlhbGl6aW5nIGBzZ2AuIEknbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBwdWxsIHVwIHRoYXQgZnVuY3Rpb24gYW5kIGVuc3VyZSB0aGVyZSdzIG5vIHdheSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBleHBvc2VkIGluIHRoZSBwcm9jZXNzIG9mIHNjYXR0ZXItZ2F0aGVyaW5nLCBtYXBwaW5nLCBvciBjb3B5aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDk6MDkuODAwNDY0NjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTI1NjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c19vYmpfcmVhZF9zZ19iZWdpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c21hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzbWFsbG9jLmM9MTEzNT1FWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpO1xcbm1tL3pzbWFsbG9jLmMtMTEzNi1cXG5tbS96c21hbGxvYy5jOjExMzc6dm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxubW0venNtYWxsb2MuYy0xMTM4LVxcdFxcdFxcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXFxuLS1cXG5tbS96c21hbGxvYy5jLTExODEtfVxcbm1tL3pzbWFsbG9jLmM6MTE4MjpFWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9zZ19iZWdpbik7XFxubW0venNtYWxsb2MuYy0xMTgzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowOTowOS44ODU3MjY1MTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxNDgyMTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHpzX29ial9yZWFkX3NnX2JlZ2luYCBpbiBgbW0venNtYWxsb2MuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgenNtYWxsb2MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzY2F0dGVyLWdhdGhlciByZWFkcyBhcmUgaW5pdGlhdGVkLiBUaGUgZnVuY3Rpb24gYHpzX29ial9yZWFkX3NnX2JlZ2luYCBpbiBgbW0venNtYWxsb2MuY2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHNldHRpbmcgdXAgYSBzY2F0dGVyLWdhdGhlciByZWFkIG9wZXJhdGlvbiB3aXRoaW4gdGhlIHpzbWFsbG9jIHN5c3RlbSBpcy4gSeKAmW0gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgaW5pdGlhbCBzZXR1cDogcGVyaGFwcyBhbGxvY2F0aW5nIHN0cnVjdHVyZXMsIHByZXBhcmluZyB0aGUgc2NhdHRlcmxpc3QsIGRldGVybWluaW5nIHBhZ2UgbG9jYXRpb25zLCBhbmQgbWF5YmUgZXZlbiBpbml0aWF0aW5nIHNvbWUga2luZCBvZiBJL08gcmVxdWVzdCBpZiBpdCdzIGFzeW5jaHJvbm91cy4gS25vd2luZyBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSB0cmFuc2ZlciBwYXRoIGFuZCBob3cgenNtYWxsb2MgaW50ZWdyYXRlcyB3aXRoIHRoZSBrZXJuZWwncyBJL08gaW5mcmFzdHJ1Y3R1cmUgZm9yIGVmZmljaWVudCByZWFkcy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdCBhbmQgbWFuYWdlIHRob3NlIHBhZ2UgcG9pbnRlcnMuIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDk6MTIuMzAwNTUwODM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c21hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzc6XFx0dm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuMTEzODpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKVxcbjExMzk6XFx0e1xcbjExNDA6XFx0XFx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xcbjExNDE6XFx0XFx0c3RydWN0IHpwZGVzYyAqenBkZXNjO1xcbjExNDI6XFx0XFx0dW5zaWduZWQgbG9uZyBvYmosIG9mZjtcXG4xMTQzOlxcdFxcdHVuc2lnbmVkIGludCBvYmpfaWR4O1xcbjExNDQ6XFx0XFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHQvKiBHdWFyYW50ZWUgd2UgY2FuIGdldCB6c3BhZ2UgZnJvbSBoYW5kbGUgc2FmZWx5ICovXFxuMTE0NzpcXHRcXHRyZWFkX2xvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbjExNDg6XFx0XFx0b2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xcbjExNDk6XFx0XFx0b2JqX3RvX2xvY2F0aW9uKG9iaiwgXFx1MDAyNnpwZGVzYywgXFx1MDAyNm9ial9pZHgpO1xcbjExNTA6XFx0XFx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xcbjExNTE6XFx0XFxuMTE1MjpcXHRcXHQvKiBNYWtlIHN1cmUgbWlncmF0aW9uIGRvZXNuJ3QgbW92ZSBhbnkgcGFnZXMgaW4gdGhpcyB6c3BhZ2UgKi9cXG4xMTUzOlxcdFxcdHpzcGFnZV9yZWFkX2xvY2soenNwYWdlKTtcXG4xMTU0OlxcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrKTtcXG4xMTU1OlxcdFxcbjExNTY6XFx0XFx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcXG4xMTU3OlxcdFxcdG9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLVxcdTAwM2VzaXplICogb2JqX2lkeCk7XFxuMTE1ODpcXHRcXG4xMTU5OlxcdFxcdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxcbjExNjA6XFx0XFx0XFx0b2ZmICs9IFpTX0hBTkRMRV9TSVpFO1xcbjExNjE6XFx0XFxuMTE2MjpcXHRcXHRpZiAob2ZmICsgbWVtX2xlbiBcXHUwMDNjPSBQQUdFX1NJWkUpIHtcXG4xMTYzOlxcdFxcdFxcdC8qIHRoaXMgb2JqZWN0IGlzIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW4gYSBwYWdlICovXFxuMTE2NDpcXHRcXHRcXHRzZ19pbml0X3RhYmxlKHNnLCAxKTtcXG4xMTY1OlxcdFxcdFxcdHNnX3NldF9wYWdlKHNnLCB6cGRlc2NfcGFnZSh6cGRlc2MpLCBtZW1fbGVuLCBvZmYpO1xcbjExNjY6XFx0XFx0fSBlbHNlIHtcXG4xMTY3OlxcdFxcdFxcdHNpemVfdCBzaXplc1syXTtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0XFx0LyogdGhpcyBvYmplY3Qgc3BhbnMgdHdvIHBhZ2VzICovXFxuMTE3MDpcXHRcXHRcXHRzaXplc1swXSA9IFBBR0VfU0laRSAtIG9mZjtcXG4xMTcxOlxcdFxcdFxcdHNpemVzWzFdID0gbWVtX2xlbiAtIHNpemVzWzBdO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRcXHRzZ19pbml0X3RhYmxlKHNnLCAyKTtcXG4xMTc0OlxcdFxcdFxcdHNnX3NldF9wYWdlKHNnLCB6cGRlc2NfcGFnZSh6cGRlc2MpLCBzaXplc1swXSwgb2ZmKTtcXG4xMTc1OlxcdFxcbjExNzY6XFx0XFx0XFx0enBkZXNjID0gZ2V0X25leHRfenBkZXNjKHpwZGVzYyk7XFxuMTE3NzpcXHRcXHRcXHRzZyA9IHNnX25leHQoc2cpO1xcbjExNzg6XFx0XFxuMTE3OTpcXHRcXHRcXHRzZ19zZXRfcGFnZShzZywgenBkZXNjX3BhZ2UoenBkZXNjKSwgc2l6ZXNbMV0sIDApO1xcbjExODA6XFx0XFx0fVxcbjExODE6XFx0fVxcbjExODI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfc2dfYmVnaW4pO1xcbjExODM6XFx0XFxuMTE4NDpcXHR2b2lkIHpzX29ial9yZWFkX3NnX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpXFxuMTE4NTpcXHR7XFxuMTE4NjpcXHRcXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA5OjEyLjMwMDcxNjQwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ2NjU2NzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBacmFtL1pzbWFsbG9jIERlY29tcHJlc3Npb24gYW5kIFJlYWQgUGF0aHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYW5hbHlzaXMgZm9jdXNlcyBvbiB0aGUgYHpzX29ial9yZWFkX3NnX2JlZ2luYCBmdW5jdGlvbiBhbmQgaXRzIGludGVncmF0aW9uIGludG8gdGhlIHpyYW0gZGVjb21wcmVzc2lvbiBhbmQgcmVhZCBwYXRocy4gSSBzZWUgdGhhdCBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGVzc2VudGlhbGx5IHdyYXBzIGBzZ19pbml0X3RhYmxlYCwgaW5pdGlhbGl6aW5nIHNjYXR0ZXJsaXN0IGFycmF5cy4gSSBleGFtaW5lZCB0aGUgcmVsZXZhbnQgY29kZSBpbiBgenJhbV9kcnYuY2AgYW5kIGB6Y29tcC5jYCwgc3BlY2lmaWNhbGx5IGZ1bmN0aW9ucyBsaWtlIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBgcmVhZF9mcm9tX3pzcG9vbF9yYXdgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGhvdyBpdCBtaWdodCBiZSBleHBvc2VkIG9yIGxlYWQgdG8gaXNzdWVzIHRoYXQgKm9ubHkqIEtNU0FOIHdvdWxkIGNhdGNoLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgc2dgIHNjYXR0ZXJsaXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuICBgc2dfaW5pdF90YWJsZWAgemVyb2VzIHRoZSBzY2F0dGVybGlzdCBhcnJheSBhbmQgaW5pdGlhbGl6ZXMgaXRzIGVudHJpZXMgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbmAgb3IgZGlyZWN0bHkgYnkgdGhlIGNhbGxlcnMuICBJIGxvb2tlZCBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGByZXFgIHN0cnVjdCBpbiBgemNvbXBfZGVjb21wcmVzc2AgYW5kIGl0J3MgYWxzbyBwcm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gRnVydGhlcm1vcmUsIGluIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiB0aGUgcGFnZSBhZnRlciBkYXRhIGNvcHkgaXMgY2xlYXJlZCB1c2luZyBgbWVtemVyb19wYWdlYC4gIFRoZSBkYXRhIGJ1ZmZlcnMgaW52b2x2ZWQgYXJlIGVpdGhlciBwb3B1bGF0ZWQgdGhyb3VnaCBkZWNvbXByZXNzaW9uIGZyb20gY29tcHJlc3NlZCBkYXRhLCBvciBhcmUgY29waWVkIGZyb20genNtYWxsb2MgcGFnZXMuXG5cbk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHJlZmFjdG9yaW5nIHRvIHVzZSBzY2F0dGVybGlzdHMgZWxpbWluYXRlcyBhbnkgaW5oZXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy5cblxuTGV0J3MgZHJpbGwgZG93bjpcblxuKiAgICoqU2NhdHRlcmxpc3RzOioqIFRoZXkgYXJlIGluaXRpYWxpemVkIHZpYSBgc2dfaW5pdF90YWJsZSgpYC5cbiogICAqKkRhdGEgU291cmNlczoqKiBEYXRhIGNvbWVzIGVpdGhlciBmcm9tIGRlY29tcHJlc3NpbmcsIG9yIGNvcGllZCBmcm9tIHpzbWFsbG9jIHBhZ2VzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHRoZSByZWFkIHBhdGhzLlxuKiAgICoqS01TQU4gQ29uY2VybnM6KiogIEtNU0FOIGxvb2tzIGZvciBzcGVjaWZpYyB0eXBlcyBvZiBwcm9ibGVtcy5cbiAgICAqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHRoYXQgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cbiAgICAqICAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbiAgICAqICAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcy5cbiAgICAqICAgTm8gYm91bmRzIGNoZWNraW5nIGxvZ2ljIHRoYXQgY291bGQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVzZSBhcmUgdGhlIGNvcmUgS01TQU4gZmFpbHVyZSBzY2VuYXJpb3MsIGFuZCBJIHNlZSBub25lIG9mIHRoZW0gaGVyZS4gTWVtb3J5IHNhZmV0eSBidWdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHNjYXR0ZXJsaXN0IHRyYXZlcnNhbCBwcm9ibGVtcywgYW5kIGludmFsaWQgdW5tYXBwaW5nIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgVUJzYW4uXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCBhbmFseXNpcywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgZW5hYmxlZCBpbiB0aGlzIGNvbnRleHQuIFdlIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIFRoaXMgaXMgYSBjbGVhbiByZWZhY3RvcmluZywgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IHNhZmV0eSB0b29scyBoYXZlIHVzIGNvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NjgsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA5OjIyLjc2NzI4NzU1M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxcblxcbktleSBvYnNlcnZhdGlvbnM6XFxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxcbjIuIFRoZSBgc3RydWN0IHpjb21wX3JlcSByZXFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRlY29tcHJlc3Npb24gY2FsbGJhY2suXFxuMy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxcblxcbktleSBvYnNlcnZhdGlvbnM6XFxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxcbjIuIFRoZSBgc3RydWN0IHpjb21wX3JlcSByZXFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRlY29tcHJlc3Npb24gY2FsbGJhY2suXFxuMy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 14:18:41 +0000 UTC FinishedAt: 2026-09-07 15:09:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_WRITEBACK", "ZSMALLOC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_WRITEBACK", "ZSMALLOC" ], "series_id": "44571f80-a9fd-4cc5-aa80-6b0695f9103b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zcomp_decompress", "decompress_bdev_page", "read_compressed_page", "read_incompressible_page", "read_from_zspool_raw" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7WlNNQUxMT0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9kZWNvbXByZXNzJiMzNDssCiAgICAmIzM0O2RlY29tcHJlc3NfYmRldl9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfY29tcHJlc3NlZF9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfaW5jb21wcmVzc2libGVfcGFnZSYjMzQ7LAogICAgJiMzNDtyZWFkX2Zyb21fenNwb29sX3JhdyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgenJhbSByZWFkIGFuZCBkZWNvbXByZXNzaW9uIHBhdGggdG8gdXNlIHNjYXR0ZXJsaXN0cyAoYHN0cnVjdCBzY2F0dGVybGlzdCAqc2dgKSB2aWEgYHpzX29ial9yZWFkX3NnX2JlZ2luKClgIC8gYHpzX29ial9yZWFkX3NnX2VuZCgpYCByYXRoZXIgdGhhbiByYXcgbWVtb3J5IHBvaW50ZXJzIGFuZCBgenNfb2JqX3JlYWRfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfZW5kKClgLiBcblxuS2V5IG9ic2VydmF0aW9uczpcbjEuIEFsbCBzdGFjay1hbGxvY2F0ZWQgc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0IHNnWy4uLl1gKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdmlhIGBzZ19pbml0X3RhYmxlKClgIHdpdGhpbiBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgb3IgY2FsbGVycyBwcmlvciB0byBiZWluZyBwYXNzZWQgb3IgaXRlcmF0ZWQgb3Zlci5cbjIuIFRoZSBgc3RydWN0IHpjb21wX3JlcSByZXFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRlY29tcHJlc3Npb24gY2FsbGJhY2suXG4zLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJ1ZmZlciBsZW5ndGhzLCBvdXQtb2YtYm91bmRzIHBhZ2UgYWNjZXNzLCBvciBpbmNvcnJlY3Qgc2NhdHRlcmxpc3QgbWFwcGluZy91bm1hcHBpbmcgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAoS0FTQU4sIHBhZ2UgdGFibGUgZGVidWdnaW5nLCBsb2NrZGVwKS5cblxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB6Y29tcCBkZWNvbXByZXNzaW9uIGFuZCB6cmFtIHJlYWQgcGF0aHMgdG8gdXNlIHNjYXR0ZXJsaXN0cyByYXRoZXIgdGhhbiBjb250aWd1b3VzIG1lbW9yeSBwb2ludGVycywgaGFuZGxpbmcgYm90aCBzaW5nbGUtcGFnZSBvYmplY3RzIHZpYSBrbWFwX2xvY2FsX3BhZ2UgYW5kIGNyb3NzLXBhZ2Ugb2JqZWN0cyB2aWEgc2dfY29weV90b19idWZmZXIuIFRoaXMgbW9kaWZpZXMgZGF0YSBidWZmZXIgaGFuZGxpbmcgYW5kIGRlY29tcHJlc3Npb24gZmxvd3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIG1hcHBpbmcgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY2MTk5YjIxYWEzNDI3ZGQzZDhkZTk0ZDY0ZWJlNzM5MjkxYjAzNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE1OjA3OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbmluZGV4IDk3NGM0NjkxODg3ZTYuLjAyOGUyZjBmNTg3ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbkBAIC03LDYgJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZ2htZW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2F0dGVybGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzZnMuaFx1MDAzZVxuIFxuQEAgLTE1OCwxNyAmIzQzOzE2MCwzMiBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4gfVxuIFxuIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbiYjNDM7XHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfcmVxIHJlcSA9IHtcbi1cdFx0LnNyYyA9IHNyYyxcbiBcdFx0LmRzdCA9IGRzdCxcbiBcdFx0LnNyY19sZW4gPSBzcmNfbGVuLFxuIFx0XHQuZHN0X2xlbiA9IFBBR0VfU0laRSxcbiBcdH07XG4mIzQzO1x0dm9pZCAqc3JjID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0bWlnaHRfc2xlZXAoKTtcbi1cdHJldHVybiBjb21wLVx1MDAzZW9wcy1cdTAwM2VkZWNvbXByZXNzKGNvbXAtXHUwMDNlcGFyYW1zLCBcdTAwMjZ6c3RybS1cdTAwM2VjdHgsIFx1MDAyNnJlcSk7XG4mIzQzO1xuJiM0MztcdGlmIChzZ19pc19sYXN0KHNnKSkge1xuJiM0MztcdFx0LyogdGhlIG9iamVjdCBpcyBjb250YWluZWQgd2l0aGluIG9uZSBwYWdlLCByZWFkIGl0IGluLXBsYWNlICovXG4mIzQzO1x0XHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpO1xuJiM0MztcdFx0cmVxLnNyYyA9IHNyYyAmIzQzOyBzZy1cdTAwM2VvZmZzZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIHRoZSBvYmplY3Qgc3BhbnMgdHdvIHBhZ2VzLCBsaW5lYXJpemUgaXQgaW50byBsb2NhbCBjb3B5ICovXG4mIzQzO1x0XHRzZ19jb3B5X3RvX2J1ZmZlcihzZywgMiwgenN0cm0tXHUwMDNlbG9jYWxfY29weSwgc3JjX2xlbik7XG4mIzQzO1x0XHRyZXEuc3JjID0genN0cm0tXHUwMDNlbG9jYWxfY29weTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZWRlY29tcHJlc3MoY29tcC1cdTAwM2VwYXJhbXMsIFx1MDAyNnpzdHJtLVx1MDAzZWN0eCwgXHUwMDI2cmVxKTtcbiYjNDM7XHRpZiAoc3JjKVxuJiM0MztcdFx0a3VubWFwX2xvY2FsKHNyYyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gaW50IHpjb21wX2NwdV91cF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLmYzOGZkMzFmOWU0ZTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbkBAIC01LDYgJiM0Mzs1LDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gXG4mIzQzO3N0cnVjdCBzY2F0dGVybGlzdDtcbiYjNDM7XG4gI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUXHRJTlRfTUlOXG4gXG4gc3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcbkBAIC05MSw2ICYjNDM7OTMsNiBAQCB2b2lkIHpjb21wX3N0cmVhbV9wdXQoc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtKTtcbiBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4gXHRcdCAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKTtcbiBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi1cdFx0ICAgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpO1xuJiM0MztcdFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcbiBcbiAjZW5kaWYgLyogX1pDT01QX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuaW5kZXggYTliM2JiMWQzYmVmMy4uNTQzMWIxNmYyZjQ1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuQEAgLTMyLDYgJiM0MzszMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFydF9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbF9yZWFkX2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiBcbkBAIC0xMzQyLDkgJiM0MzsxMzQzLDkgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbiYjNDM7XHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcdGludCByZXQsIHByaW87XG4tXHR2b2lkICpzcmM7XG4gXG4gXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xuIFx0LyogU2luY2Ugc2xvdCB3YXMgdW5sb2NrZWQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgc3RpbGwgWlJBTV9XQiAqL1xuQEAgLTEzNjMsMTMgJiM0MzsxMzY0LDE4IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0c2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpO1xuIFx0cHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpO1xuIFxuJiM0MztcdHNnX2luaXRfdGFibGUoc2csIDEpO1xuJiM0MztcdHNnX3NldF9wYWdlKHNnLCBwYWdlLCBzaXplLCAwKTtcbiYjNDM7XG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4tXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4tXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsXG4mIzQzO1x0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsXG4gXHRcdFx0ICAgICAgIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdGNvcHlfcGFnZShzcmMsIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0a3VubWFwX2xvY2FsKHNyYyk7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdHZvaWQgKmRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiYjNDM7XG4mIzQzO1x0XHRjb3B5X3BhZ2UoZHN0LCB6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbChkc3QpO1xuJiM0MztcdH1cbiBcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuIFx0c2xvdF91bmxvY2soenJhbSwgaW5kZXgpO1xuIFxuQEAgLTIwODYsMTUgJiM0MzsyMDkyLDE5IEBAIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4mIzQzO1x0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR2b2lkICpzcmMsICpkc3Q7XG4gXG4gXHRoYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xuLVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIE5VTEwpO1xuJiM0MztcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIFBBR0VfU0laRSk7XG4mIzQzO1x0LyogYW4gaW5jb21wcmVzc2libGUgb2JqZWN0IG5ldmVyIHNwYW5zIHR3byBwYWdlcyAqL1xuJiM0MztcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7XG4gXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjb3B5X3BhZ2UoZHN0LCBzcmMpO1xuIFx0a3VubWFwX2xvY2FsKGRzdCk7XG4tXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIHNyYyk7XG4mIzQzO1x0a3VubWFwX2xvY2FsKHNyYyk7XG4mIzQzO1x0enNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjEwMyw5ICYjNDM7MjExMywxMCBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuJiM0MztcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4tXHR2b2lkICpzcmMsICpkc3Q7XG4mIzQzO1x0dm9pZCAqZHN0O1xuIFx0aW50IHJldCwgcHJpbztcbiBcbiBcdGhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XG5AQCAtMjExMywxMiAmIzQzOzIxMjQsMTEgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRwcmlvID0gZ2V0X3Nsb3RfY29tcF9wcmlvcml0eSh6cmFtLCBpbmRleCk7XG4gXG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4tXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsXG4tXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbiYjNDM7XHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcbiBcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbi1cdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwgZHN0KTtcbiYjNDM7XHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSwgZHN0KTtcbiBcdGt1bm1hcF9sb2NhbChkc3QpO1xuLVx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTtcbiYjNDM7XHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0yMTI4LDI1ICYjNDM7MjEzOCwyMyBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuLVx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuJiM0MztcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4tXHR2b2lkICpzcmM7XG4mIzQzO1x0dm9pZCAqZHN0O1xuIFxuIFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbiBcdHNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTtcbiBcbiBcdC8qXG4tXHQgKiBXZSBuZWVkIHRvIGdldCBzdHJlYW0ganVzdCBmb3IgLVx1MDAzZWxvY2FsX2NvcHkgYnVmZmVyLCBpblxuLVx0ICogY2FzZSBpZiBvYmplY3Qgc3BhbnMgdHdvIHBoeXNpY2FsIHBhZ2VzLiBObyBkZWNvbXByZXNzaW9uXG4tXHQgKiB0YWtlcyBwbGFjZSBoZXJlLCBhcyB3ZSByZWFkIHJhdyBjb21wcmVzc2VkIGRhdGEuXG4mIzQzO1x0ICogTm8gZGVjb21wcmVzc2lvbiB0YWtlcyBwbGFjZSBoZXJlLCB3ZSBjb3B5IG91dCByYXcgY29tcHJlc3NlZFxuJiM0MztcdCAqIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgZGVzdGluYXRpb24gcGFnZS5cbiBcdCAqL1xuLVx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTtcbi1cdHNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSxcbi1cdFx0XHRcdHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0bWVtY3B5X3RvX3BhZ2UocGFnZSwgMCwgc3JjLCBzaXplKTtcbi1cdHpzX29ial9yZWFkX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7XG4tXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbiYjNDM7XHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcbiYjNDM7XHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4mIzQzO1x0c2dfY29weV90b19idWZmZXIoc2csIHNnX25lbnRzKHNnKSwgZHN0LCBzaXplKTtcbiYjNDM7XHRrdW5tYXBfbG9jYWwoZHN0KTtcbiYjNDM7XHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcbiBcdG1lbXplcm9fcGFnZShwYWdlLCBzaXplLCBQQUdFX1NJWkUgLSBzaXplKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcbmluZGV4IDQ3ODQxMGM4ODBiMWYuLjViNzI5OGE1MDI2YjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxuQEAgLTQwLDEwICYjNDM7NDAsNiBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG4gXG4gdm9pZCB6c19wb29sX3N0YXRzKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3QgenNfcG9vbF9zdGF0cyAqc3RhdHMpO1xuIFxuLXZvaWQgKnpzX29ial9yZWFkX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbi1cdFx0XHRzaXplX3QgbWVtX2xlbiwgdm9pZCAqbG9jYWxfY29weSk7XG4tdm9pZCB6c19vYmpfcmVhZF9lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHQgICAgIHNpemVfdCBtZW1fbGVuLCB2b2lkICpoYW5kbGVfbWVtKTtcbiB2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbiBcdFx0XHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKTtcbiB2b2lkIHpzX29ial9yZWFkX3NnX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpO1xuZGlmZiAtLWdpdCBhL21tL3pzbWFsbG9jLmMgYi9tbS96c21hbGxvYy5jXG5pbmRleCA4MjUwMjJhN2EzMjhmLi4xMWJlMzdjNDMxNzE4IDEwMDY0NFxuLS0tIGEvbW0venNtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venNtYWxsb2MuY1xuQEAgLTExMzQsODMgJiM0MzsxMTM0LDYgQEAgdW5zaWduZWQgbG9uZyB6c19nZXRfdG90YWxfcGFnZXMoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHpzX2dldF90b3RhbF9wYWdlcyk7XG4gXG4tdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHRcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KVxuLXtcbi1cdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbi1cdHN0cnVjdCB6cGRlc2MgKnpwZGVzYztcbi1cdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XG4tXHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcbi1cdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbi1cdHZvaWQgKmFkZHI7XG4tXG4tXHQvKiBHdWFyYW50ZWUgd2UgY2FuIGdldCB6c3BhZ2UgZnJvbSBoYW5kbGUgc2FmZWx5ICovXG4tXHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbi1cdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbi1cdG9ial90b19sb2NhdGlvbihvYmosIFx1MDAyNnpwZGVzYywgXHUwMDI2b2JqX2lkeCk7XG4tXHR6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7XG4tXG4tXHQvKiBNYWtlIHN1cmUgbWlncmF0aW9uIGRvZXNuJiMzOTt0IG1vdmUgYW55IHBhZ2VzIGluIHRoaXMgenNwYWdlICovXG4tXHR6c3BhZ2VfcmVhZF9sb2NrKHpzcGFnZSk7XG4tXHRyZWFkX3VubG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuLVxuLVx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcbi1cdG9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLVx1MDAzZXNpemUgKiBvYmpfaWR4KTtcbi1cbi1cdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxuLVx0XHRvZmYgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFO1xuLVxuLVx0aWYgKG9mZiAmIzQzOyBtZW1fbGVuIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4tXHRcdC8qIHRoaXMgb2JqZWN0IGlzIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW4gYSBwYWdlICovXG4tXHRcdGFkZHIgPSBrbWFwX2xvY2FsX3pwZGVzYyh6cGRlc2MpO1xuLVx0XHRhZGRyICYjNDM7PSBvZmY7XG4tXHR9IGVsc2Uge1xuLVx0XHRzaXplX3Qgc2l6ZXNbMl07XG4tXG4tXHRcdC8qIHRoaXMgb2JqZWN0IHNwYW5zIHR3byBwYWdlcyAqL1xuLVx0XHRzaXplc1swXSA9IFBBR0VfU0laRSAtIG9mZjtcbi1cdFx0c2l6ZXNbMV0gPSBtZW1fbGVuIC0gc2l6ZXNbMF07XG4tXHRcdGFkZHIgPSBsb2NhbF9jb3B5O1xuLVxuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGFkZHIsIHpwZGVzY19wYWdlKHpwZGVzYyksXG4tXHRcdFx0XHQgb2ZmLCBzaXplc1swXSk7XG4tXHRcdHpwZGVzYyA9IGdldF9uZXh0X3pwZGVzYyh6cGRlc2MpO1xuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGFkZHIgJiM0Mzsgc2l6ZXNbMF0sXG4tXHRcdFx0XHQgenBkZXNjX3BhZ2UoenBkZXNjKSxcbi1cdFx0XHRcdCAwLCBzaXplc1sxXSk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gYWRkcjtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfYmVnaW4pO1xuLVxuLXZvaWQgenNfb2JqX3JlYWRfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbi1cdFx0ICAgICBzaXplX3QgbWVtX2xlbiwgdm9pZCAqaGFuZGxlX21lbSlcbi17XG4tXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XG4tXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2M7XG4tXHR1bnNpZ25lZCBsb25nIG9iaiwgb2ZmO1xuLVx0dW5zaWduZWQgaW50IG9ial9pZHg7XG4tXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4tXG4tXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4tXHRvYmpfdG9fbG9jYXRpb24ob2JqLCBcdTAwMjZ6cGRlc2MsIFx1MDAyNm9ial9pZHgpO1xuLVx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xuLVx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcbi1cdG9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLVx1MDAzZXNpemUgKiBvYmpfaWR4KTtcbi1cbi1cdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxuLVx0XHRvZmYgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFO1xuLVxuLVx0aWYgKG9mZiAmIzQzOyBtZW1fbGVuIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4tXHRcdGhhbmRsZV9tZW0gLT0gb2ZmO1xuLVx0XHRrdW5tYXBfbG9jYWwoaGFuZGxlX21lbSk7XG4tXHR9XG4tXG4tXHR6c3BhZ2VfcmVhZF91bmxvY2soenNwYWdlKTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfZW5kKTtcbi1cbiB2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbiBcdFx0XHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pSQU1fV1JJVEVCQUNLJiMzNDssCiAgICAmIzM0O1pTTUFMTE9DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emNvbXBfZGVjb21wcmVzcyYjMzQ7LAogICAgJiMzNDtkZWNvbXByZXNzX2JkZXZfcGFnZSYjMzQ7LAogICAgJiMzNDtyZWFkX2NvbXByZXNzZWRfcGFnZSYjMzQ7LAogICAgJiMzNDtyZWFkX2luY29tcHJlc3NpYmxlX3BhZ2UmIzM0OywKICAgICYjMzQ7cmVhZF9mcm9tX3pzcG9vbF9yYXcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB6Y29tcCBkZWNvbXByZXNzaW9uIGFuZCB6cmFtIHJlYWQgcGF0aHMgdG8gdXNlIHNjYXR0ZXJsaXN0cyByYXRoZXIgdGhhbiBjb250aWd1b3VzIG1lbW9yeSBwb2ludGVycywgaGFuZGxpbmcgYm90aCBzaW5nbGUtcGFnZSBvYmplY3RzIHZpYSBrbWFwX2xvY2FsX3BhZ2UgYW5kIGNyb3NzLXBhZ2Ugb2JqZWN0cyB2aWEgc2dfY29weV90b19idWZmZXIuIFRoaXMgbW9kaWZpZXMgZGF0YSBidWZmZXIgaGFuZGxpbmcgYW5kIGRlY29tcHJlc3Npb24gZmxvd3MgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIHdhcnJhbnRpbmcgZnV6emluZyBmb3IgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIG1hcHBpbmcgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY2MTk5YjIxYWEzNDI3ZGQzZDhkZTk0ZDY0ZWJlNzM5MjkxYjAzNTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE1OjA3OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwppbmRleCA5NzRjNDY5MTg4N2U2Li4wMjhlMmYwZjU4N2UzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYwpAQCAtNyw2ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1aG90cGx1Zy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oaWdobWVtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjYXR0ZXJsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2ZzLmgmZ3Q7CiAKQEAgLTE1OCwxNyAmIzQzOzE2MCwzMiBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sCiB9CiAKIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLAotCQkgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCkKJiM0MzsJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCkKIHsKIAlzdHJ1Y3QgemNvbXBfcmVxIHJlcSA9IHsKLQkJLnNyYyA9IHNyYywKIAkJLmRzdCA9IGRzdCwKIAkJLnNyY19sZW4gPSBzcmNfbGVuLAogCQkuZHN0X2xlbiA9IFBBR0VfU0laRSwKIAl9OwomIzQzOwl2b2lkICpzcmMgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwogCiAJbWlnaHRfc2xlZXAoKTsKLQlyZXR1cm4gY29tcC0mZ3Q7b3BzLSZndDtkZWNvbXByZXNzKGNvbXAtJmd0O3BhcmFtcywgJmFtcDt6c3RybS0mZ3Q7Y3R4LCAmYW1wO3JlcSk7CiYjNDM7CiYjNDM7CWlmIChzZ19pc19sYXN0KHNnKSkgewomIzQzOwkJLyogdGhlIG9iamVjdCBpcyBjb250YWluZWQgd2l0aGluIG9uZSBwYWdlLCByZWFkIGl0IGluLXBsYWNlICovCiYjNDM7CQlzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpOwomIzQzOwkJcmVxLnNyYyA9IHNyYyAmIzQzOyBzZy0mZ3Q7b2Zmc2V0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogdGhlIG9iamVjdCBzcGFucyB0d28gcGFnZXMsIGxpbmVhcml6ZSBpdCBpbnRvIGxvY2FsIGNvcHkgKi8KJiM0MzsJCXNnX2NvcHlfdG9fYnVmZmVyKHNnLCAyLCB6c3RybS0mZ3Q7bG9jYWxfY29weSwgc3JjX2xlbik7CiYjNDM7CQlyZXEuc3JjID0genN0cm0tJmd0O2xvY2FsX2NvcHk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gY29tcC0mZ3Q7b3BzLSZndDtkZWNvbXByZXNzKGNvbXAtJmd0O3BhcmFtcywgJmFtcDt6c3RybS0mZ3Q7Y3R4LCAmYW1wO3JlcSk7CiYjNDM7CWlmIChzcmMpCiYjNDM7CQlrdW5tYXBfbG9jYWwoc3JjKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogaW50IHpjb21wX2NwdV91cF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaAppbmRleCA4MWEwZjNmNmZmNDg3Li5mMzhmZDMxZjllNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaApAQCAtNSw2ICYjNDM7NSw4IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogCiYjNDM7c3RydWN0IHNjYXR0ZXJsaXN0OwomIzQzOwogI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUCUlOVF9NSU4KIAogc3RydWN0IGRlZmxhdGVfcGFyYW1zIHsKQEAgLTkxLDYgJiM0Mzs5Myw2IEBAIHZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pOwogaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLAogCQkgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCAqZHN0X2xlbik7CiBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKLQkJICAgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpOwomIzQzOwkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTsKIAogI2VuZGlmIC8qIF9aQ09NUF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBhOWIzYmIxZDNiZWYzLi41NDMxYjE2ZjJmNDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtMzIsNiAmIzQzOzMyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1aG90cGx1Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhcnRfc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2F0dGVybGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbF9yZWFkX2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogCkBAIC0xMzQyLDkgJiM0MzsxMzQzLDkgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAlpbnQgcmV0LCBwcmlvOwotCXZvaWQgKnNyYzsKIAogCXNsb3RfbG9jayh6cmFtLCBpbmRleCk7CiAJLyogU2luY2Ugc2xvdCB3YXMgdW5sb2NrZWQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQmIzM5O3Mgc3RpbGwgWlJBTV9XQiAqLwpAQCAtMTM2MywxMyAmIzQzOzEzNjQsMTggQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJc2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpOwogCXByaW8gPSBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHpyYW0sIGluZGV4KTsKIAomIzQzOwlzZ19pbml0X3RhYmxlKHNnLCAxKTsKJiM0MzsJc2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIHNpemUsIDApOwomIzQzOwogCXpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLSZndDtjb21wc1twcmlvXSk7Ci0Jc3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwotCXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsCiYjNDM7CXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSwKIAkJCSAgICAgICB6c3RybS0mZ3Q7bG9jYWxfY29weSk7Ci0JaWYgKCFyZXQpCi0JCWNvcHlfcGFnZShzcmMsIHpzdHJtLSZndDtsb2NhbF9jb3B5KTsKLQlrdW5tYXBfbG9jYWwoc3JjKTsKJiM0MzsJaWYgKCFyZXQpIHsKJiM0MzsJCXZvaWQgKmRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKJiM0MzsKJiM0MzsJCWNvcHlfcGFnZShkc3QsIHpzdHJtLSZndDtsb2NhbF9jb3B5KTsKJiM0MzsJCWt1bm1hcF9sb2NhbChkc3QpOwomIzQzOwl9CiAJemNvbXBfc3RyZWFtX3B1dCh6c3RybSk7CiAJc2xvdF91bmxvY2soenJhbSwgaW5kZXgpOwogCkBAIC0yMDg2LDE1ICYjNDM7MjA5MiwxOSBAQCBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiBzdGF0aWMgaW50IHJlYWRfaW5jb21wcmVzc2libGVfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAl2b2lkICpzcmMsICpkc3Q7CiAKIAloYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpOwotCXNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIFBBR0VfU0laRSwgTlVMTCk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNnLCBQQUdFX1NJWkUpOwomIzQzOwkvKiBhbiBpbmNvbXByZXNzaWJsZSBvYmplY3QgbmV2ZXIgc3BhbnMgdHdvIHBhZ2VzICovCiYjNDM7CXNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7CiAJZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCWNvcHlfcGFnZShkc3QsIHNyYyk7CiAJa3VubWFwX2xvY2FsKGRzdCk7Ci0JenNfb2JqX3JlYWRfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIFBBR0VfU0laRSwgc3JjKTsKJiM0MzsJa3VubWFwX2xvY2FsKHNyYyk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjEwMyw5ICYjNDM7MjExMywxMCBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQl1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwogCXVuc2lnbmVkIGludCBzaXplOwotCXZvaWQgKnNyYywgKmRzdDsKJiM0MzsJdm9pZCAqZHN0OwogCWludCByZXQsIHByaW87CiAKIAloYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpOwpAQCAtMjExMywxMiAmIzQzOzIxMjQsMTEgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJcHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpOwogCiAJenN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tJmd0O2NvbXBzW3ByaW9dKTsKLQlzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzaXplLAotCQkJCXpzdHJtLSZndDtsb2NhbF9jb3B5KTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpOwogCWRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKLQlyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tJmd0O2NvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBzaXplLCBkc3QpOwomIzQzOwlyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tJmd0O2NvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsIGRzdCk7CiAJa3VubWFwX2xvY2FsKGRzdCk7Ci0JenNfb2JqX3JlYWRfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlKTsKIAl6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTsKIAogCXJldHVybiByZXQ7CkBAIC0yMTI4LDI1ICYjNDM7MjEzOCwyMyBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7Ci0Jc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtOwomIzQzOwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJdW5zaWduZWQgaW50IHNpemU7Ci0Jdm9pZCAqc3JjOwomIzQzOwl2b2lkICpkc3Q7CiAKIAloYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpOwogCXNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTsKIAogCS8qCi0JICogV2UgbmVlZCB0byBnZXQgc3RyZWFtIGp1c3QgZm9yIC0mZ3Q7bG9jYWxfY29weSBidWZmZXIsIGluCi0JICogY2FzZSBpZiBvYmplY3Qgc3BhbnMgdHdvIHBoeXNpY2FsIHBhZ2VzLiBObyBkZWNvbXByZXNzaW9uCi0JICogdGFrZXMgcGxhY2UgaGVyZSwgYXMgd2UgcmVhZCByYXcgY29tcHJlc3NlZCBkYXRhLgomIzQzOwkgKiBObyBkZWNvbXByZXNzaW9uIHRha2VzIHBsYWNlIGhlcmUsIHdlIGNvcHkgb3V0IHJhdyBjb21wcmVzc2VkCiYjNDM7CSAqIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgZGVzdGluYXRpb24gcGFnZS4KIAkgKi8KLQl6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS0mZ3Q7Y29tcHNbWlJBTV9QUklNQVJZX0NPTVBdKTsKLQlzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzaXplLAotCQkJCXpzdHJtLSZndDtsb2NhbF9jb3B5KTsKLQltZW1jcHlfdG9fcGFnZShwYWdlLCAwLCBzcmMsIHNpemUpOwotCXpzX29ial9yZWFkX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpOwotCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwomIzQzOwl6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7CiYjNDM7CWRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKJiM0MzsJc2dfY29weV90b19idWZmZXIoc2csIHNnX25lbnRzKHNnKSwgZHN0LCBzaXplKTsKJiM0MzsJa3VubWFwX2xvY2FsKGRzdCk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2VuZCh6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlKTsKIAogCW1lbXplcm9fcGFnZShwYWdlLCBzaXplLCBQQUdFX1NJWkUgLSBzaXplKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c21hbGxvYy5oIGIvaW5jbHVkZS9saW51eC96c21hbGxvYy5oCmluZGV4IDQ3ODQxMGM4ODBiMWYuLjViNzI5OGE1MDI2YjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgKQEAgLTQwLDEwICYjNDM7NDAsNiBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiAKIHZvaWQgenNfcG9vbF9zdGF0cyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHpzX3Bvb2xfc3RhdHMgKnN0YXRzKTsKIAotdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmxvY2FsX2NvcHkpOwotdm9pZCB6c19vYmpfcmVhZF9lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkgICAgIHNpemVfdCBtZW1fbGVuLCB2b2lkICpoYW5kbGVfbWVtKTsKIHZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAogCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzaXplX3QgbWVtX2xlbik7CiB2b2lkIHpzX29ial9yZWFkX3NnX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmMKaW5kZXggODI1MDIyYTdhMzI4Zi4uMTFiZTM3YzQzMTcxOCAxMDA2NDQKLS0tIGEvbW0venNtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c21hbGxvYy5jCkBAIC0xMTM0LDgzICYjNDM7MTEzNCw2IEBAIHVuc2lnbmVkIGxvbmcgenNfZ2V0X3RvdGFsX3BhZ2VzKHN0cnVjdCB6c19wb29sICpwb29sKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoenNfZ2V0X3RvdGFsX3BhZ2VzKTsKIAotdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAotCQkJc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmxvY2FsX2NvcHkpCi17Ci0Jc3RydWN0IHpzcGFnZSAqenNwYWdlOwotCXN0cnVjdCB6cGRlc2MgKnpwZGVzYzsKLQl1bnNpZ25lZCBsb25nIG9iaiwgb2ZmOwotCXVuc2lnbmVkIGludCBvYmpfaWR4OwotCXN0cnVjdCBzaXplX2NsYXNzICpjbGFzczsKLQl2b2lkICphZGRyOwotCi0JLyogR3VhcmFudGVlIHdlIGNhbiBnZXQgenNwYWdlIGZyb20gaGFuZGxlIHNhZmVseSAqLwotCXJlYWRfbG9jaygmYW1wO3Bvb2wtJmd0O2xvY2spOwotCW9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTsKLQlvYmpfdG9fbG9jYXRpb24ob2JqLCAmYW1wO3pwZGVzYywgJmFtcDtvYmpfaWR4KTsKLQl6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7Ci0KLQkvKiBNYWtlIHN1cmUgbWlncmF0aW9uIGRvZXNuJiMzOTt0IG1vdmUgYW55IHBhZ2VzIGluIHRoaXMgenNwYWdlICovCi0JenNwYWdlX3JlYWRfbG9jayh6c3BhZ2UpOwotCXJlYWRfdW5sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7Ci0KLQljbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpOwotCW9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLSZndDtzaXplICogb2JqX2lkeCk7Ci0KLQlpZiAoIVpzSHVnZVBhZ2UoenNwYWdlKSkKLQkJb2ZmICYjNDM7PSBaU19IQU5ETEVfU0laRTsKLQotCWlmIChvZmYgJiM0MzsgbWVtX2xlbiAmbHQ7PSBQQUdFX1NJWkUpIHsKLQkJLyogdGhpcyBvYmplY3QgaXMgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiBhIHBhZ2UgKi8KLQkJYWRkciA9IGttYXBfbG9jYWxfenBkZXNjKHpwZGVzYyk7Ci0JCWFkZHIgJiM0Mzs9IG9mZjsKLQl9IGVsc2UgewotCQlzaXplX3Qgc2l6ZXNbMl07Ci0KLQkJLyogdGhpcyBvYmplY3Qgc3BhbnMgdHdvIHBhZ2VzICovCi0JCXNpemVzWzBdID0gUEFHRV9TSVpFIC0gb2ZmOwotCQlzaXplc1sxXSA9IG1lbV9sZW4gLSBzaXplc1swXTsKLQkJYWRkciA9IGxvY2FsX2NvcHk7Ci0KLQkJbWVtY3B5X2Zyb21fcGFnZShhZGRyLCB6cGRlc2NfcGFnZSh6cGRlc2MpLAotCQkJCSBvZmYsIHNpemVzWzBdKTsKLQkJenBkZXNjID0gZ2V0X25leHRfenBkZXNjKHpwZGVzYyk7Ci0JCW1lbWNweV9mcm9tX3BhZ2UoYWRkciAmIzQzOyBzaXplc1swXSwKLQkJCQkgenBkZXNjX3BhZ2UoenBkZXNjKSwKLQkJCQkgMCwgc2l6ZXNbMV0pOwotCX0KLQotCXJldHVybiBhZGRyOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfYmVnaW4pOwotCi12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCSAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pCi17Ci0Jc3RydWN0IHpzcGFnZSAqenNwYWdlOwotCXN0cnVjdCB6cGRlc2MgKnpwZGVzYzsKLQl1bnNpZ25lZCBsb25nIG9iaiwgb2ZmOwotCXVuc2lnbmVkIGludCBvYmpfaWR4OwotCXN0cnVjdCBzaXplX2NsYXNzICpjbGFzczsKLQotCW9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTsKLQlvYmpfdG9fbG9jYXRpb24ob2JqLCAmYW1wO3pwZGVzYywgJmFtcDtvYmpfaWR4KTsKLQl6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7Ci0JY2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTsKLQlvZmYgPSBvZmZzZXRfaW5fcGFnZShjbGFzcy0mZ3Q7c2l6ZSAqIG9ial9pZHgpOwotCi0JaWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpCi0JCW9mZiAmIzQzOz0gWlNfSEFORExFX1NJWkU7Ci0KLQlpZiAob2ZmICYjNDM7IG1lbV9sZW4gJmx0Oz0gUEFHRV9TSVpFKSB7Ci0JCWhhbmRsZV9tZW0gLT0gb2ZmOwotCQlrdW5tYXBfbG9jYWwoaGFuZGxlX21lbSk7Ci0JfQotCi0JenNwYWdlX3JlYWRfdW5sb2NrKHpzcGFnZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9lbmQpOwotCiB2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSwKIAkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUkFNIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBjaGFuZ2VzIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGV5IGltcGFjdCBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBXZSBuZWVkIHRvIGRldGVybWluZSBpZiBmdXp6aW5nIGlzIGV2ZW4gd2FycmFudGVkLCBhbmQgaWYgc28sIHdoYXQgc3ltYm9scyB0byB0YXJnZXQgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBtb3N0IHJlbGV2YW50LgoKTG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgc2VlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IFpSQU0gaGFuZGxlcyBkZWNvbXByZXNzaW9uIGFuZCBkYXRhIHJlYWRzLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSB1c2Ugb2YgYHNjYXR0ZXJsaXN0YCBzdHJ1Y3R1cmVzLiBUaGUgc2lnbmF0dXJlIGNoYW5nZSBpbiBgemNvbXBfZGVjb21wcmVzc2AgaXMgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0LiBJbnN0ZWFkIG9mIGEgZGlyZWN0IHBvaW50ZXIsIGl0IG5vdyBhY2NlcHRzIGEgYHN0cnVjdCBzY2F0dGVybGlzdCAqc2dgLiBUaGlzIGltcGxpZXMgYSBzaGlmdCB0b3dhcmRzIGhhbmRsaW5nIGRhdGEgaW4gbm9uLWNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBvZnRlbiBleHBvc2UgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIGJvdW5kYXJpZXMgYW5kIGRhdGEgYWxpZ25tZW50LiBUaGUgY29uZGl0aW9uYWwgY2hlY2ssIGBpZiAoc2dfaXNfbGFzdChzZykpYCwgYW5kIHRoZSB1c2Ugb2YgYHNnX2NvcHlfdG9fYnVmZmVyYCBhcmUga2V5LiBXZSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGhvdyB0aGlzIHNjYXR0ZXJsaXN0IGlzIHBvcHVsYXRlZCBhbmQgaG93IHRoZSBgc3JjX2xlbmAgaXMgdXNlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZm9jYWwgcG9pbnQuCgpUaGUgcmlwcGxlIGVmZmVjdCBpcyBldmlkZW50IGluIGB6cmFtX2Rydi5jYCwgd2hlcmUgc2V2ZXJhbCBmdW5jdGlvbnMgbGlrZSBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AgYXJlIHVwZGF0ZWQgdG8gdXRpbGl6ZSB0aGVzZSBgc2NhdHRlcmxpc3RgIG9wZXJhdGlvbnMuIFRoZSByZW1vdmFsIG9mIHRoZSBgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYCBmdW5jdGlvbnMgYW5kIHRoZSByZXBsYWNlbWVudHMgd2l0aCBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfc2dfZW5kYCBpbiBgenJhbV9kcnYuY2AgYW5kIGB6c21hbGxvYy5jYCBpbmRpY2F0ZSBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBmdW5jdGlvbnMgaGFuZGxlIGVycm9ycyBhbmQgZWRnZSBjYXNlcy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBzY2F0dGVybGlzdCBpcyBtYWxmb3JtZWQsIGhhcyBpbmNvcnJlY3QgbGVuZ3Rocywgb3IgcG9pbnRzIHRvIGludmFsaWQgbWVtb3J5IHJlZ2lvbnM/IFRoZXNlIGFyZSBjbGFzc2ljIGZ1enppbmcgdGFyZ2V0cy4KCkJlZm9yZSBJIGNvbW1pdCB0byBhbnl0aGluZywgSSB3YW50IHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSB3aXRoaW4gYHpzbWFsbG9jLmNgIGFuZCBgenJhbV9kcnYuY2AsIHRvIGRvIHNvbWUgc3RhdGljIGFuYWx5c2lzIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyB0aGF0IG1heSBiZSByZXZlYWxlZCB0aHJvdWdoIHRvb2xzLiBUaGUgY2hhbmdlcyBpbiBkYXRhIGhhbmRsaW5nLCBpbiBwYXJ0aWN1bGFyLCB3aWxsIHJlcXVpcmUgY2FyZWZ1bCBzY3J1dGlueS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c19vYmpfcmVhZF9zZ19iZWdpbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDkyPXN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMDk5LVx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxMDA6XHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBQQUdFX1NJWkUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEwMS1cdC8qIGFuIGluY29tcHJlc3NpYmxlIG9iamVjdCBuZXZlciBzcGFucyB0d28gcGFnZXMgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTEyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjYtXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTI3Olx0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTI4LVx0ZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMzg9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE1Mi1cdCAqL1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE1MzpcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE1NC1cdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg9NDE9dm9pZCB6c19wb29sX3N0YXRzKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3QgenNfcG9vbF9zdGF0cyAqc3RhdHMpO1xuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTQyLVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjQzOnZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTQ0LVx0XHRcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pO1xuLS1cbm1tL3pzbWFsbG9jLmM9MTEzNT1FWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpO1xubW0venNtYWxsb2MuYy0xMTM2LVxubW0venNtYWxsb2MuYzoxMTM3OnZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxubW0venNtYWxsb2MuYy0xMTM4LVx0XHRcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXG4tLVxubW0venNtYWxsb2MuYy0xMTgxLX1cbm1tL3pzbWFsbG9jLmM6MTE4MjpFWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9zZ19iZWdpbik7XG5tbS96c21hbGxvYy5jLTExODMtXG4tLVxubW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtOTMzLVx0bXV0ZXhfbG9jayhcdTAwMjZhY29tcF9jdHgtXHUwMDNlbXV0ZXgpO1xubW0venN3YXAuYzo5MzQ6XHR6c19vYmpfcmVhZF9zZ19iZWdpbihwb29sLVx1MDAzZXpzX3Bvb2wsIGVudHJ5LVx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG5tbS96c3dhcC5jLTkzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTM5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gWnJhbSBDb21wcmVzc2lvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBacmFtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcHJvY2VzcywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGB6Y29tcF9kZWNvbXByZXNzYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBwb2ludCB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNvbXByZXNzZWQgZGF0YSBpcyBhY3R1YWxseSBicm91Z2h0IGJhY2sgdG8gbGlmZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGdvcml0aG1zIHdvcmtzLCBob3cgdGhlIG1lbW9yeSBpcyBoYW5kbGVkLCBhbmQgd2hhdCBlcnJvciBjb25kaXRpb25zIGNvdWxkIGFyaXNlLgoKQmV5b25kIHRoYXQgY29yZSBmdW5jdGlvbiwgdGhvdWdoLCBJIGtub3cgSSBjYW4mIzM5O3QgbG9vayBhdCB0aGluZ3MgaW4gYSB2YWN1dW0uIFRvIGZ1bGx5IGdyYXNwIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcywgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnYC4gVGhpcyB3aWxsIHNob3cgbWUgd2hhdCBidWlsZC10aW1lIG9wdGlvbnMgY29udHJvbCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtcyB0aGF0IGFyZSBhdmFpbGFibGUsIGFzIHdlbGwgYXMgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgY29kZS4gS25vd2luZyB0aGlzIGhlbHBzIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb25kaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjpjb25maWcgWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7bHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjk6Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7enN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7ODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cdGRlcGVuZHMgb24gWlJBTVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU0LVx0Ym9vbCBcJiMzNDtsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0OyBpZiAhWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7bHpvLXJsZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Njk6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7bHo0aGNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgxOmNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cdHN0cmluZ1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEwNzpjb25maWcgWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcJiMzNDtXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMTpjb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cdGJvb2wgXCYjMzQ7VHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXHRib29sIFwmIzM0O0VuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgWlJBTSYjMzk7cyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBaUkFNJiMzOTtzIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgc3BlY2lmaWMgYEtjb25maWdgIGVudHJ5IGZvciBaUkFNIGFuZCB0cmFjZSBpdCBiYWNrIHRocm91Z2ggYW55IG90aGVyIHJlbGV2YW50IG9wdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGVuYWJsZWQsIHdoYXQgb3RoZXIgZmVhdHVyZXMgbWlnaHQgbmVlZCB0byBiZSBpbiBwbGFjZSBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIGN1c3RvbWl6YXRpb25zIEkgbWlnaHQgd2FudCB0byBwZXJmb3JtLiBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zLCBibG9jayBsYXllciBjb21wb25lbnRzLCBvciBldmVuIHNwZWNpZmljIENQVSBmZWF0dXJlcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIHdob2xlIGtlcm5lbC4gTGV04oCZcyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgWlJBTVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQkxPQ0sgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBNTVVcbiAgIDU6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBDcmVhdGVzIHZpcnR1YWwgYmxvY2sgZGV2aWNlcyBjYWxsZWQgL2Rldi96cmFtWCAoWCA9IDAsIDEsIC4uLikuXG4gICA4Olx0XHQgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnlcbiAgIDk6XHRcdCAgaXRzZWxmLiBUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlc1xuICAxMDpcdFx0ICBnb29kIGFtb3VudHMgb2YgbWVtb3J5IHNhdmluZ3MuXG4gIDExOlx0XG4gIDEyOlx0XHQgIEl0IGhhcyBzZXZlcmFsIHVzZSBjYXNlcywgZm9yIGV4YW1wbGU6IC90bXAgc3RvcmFnZSwgdXNlIGFzIHN3YXBcbiAgMTM6XHRcdCAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAyMDpcdFx0c2VsZWN0IExaNF9DT01QUkVTU1xuICAyMTpcdFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuICAyNDpcdFx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDI1Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgMjY6XHRcdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xuICAyNzpcdFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG4gIDMwOlx0XHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBaUkFNXG4gIDMyOlx0XHRzZWxlY3QgWlNURF9DT01QUkVTU1xuICAzMzpcdFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxuICAzNjpcdFx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlJBTVxuICAzODpcdFx0c2VsZWN0IFpMSUJfREVGTEFURVxuICAzOTpcdFx0c2VsZWN0IFpMSUJfSU5GTEFURVxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG4gIDQyOlx0XHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgNDQ6XHRcdHNlbGVjdCA4NDJfQ09NUFJFU1NcbiAgNDU6XHRcdHNlbGVjdCA4NDJfREVDT01QUkVTU1xuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgNDk6XHRcdGRlZl9ib29sICFaUkFNX0JBQ0tFTkRfTFo0IFx1MDAyNlx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFx1MDAyNlx1MDAyNiBcXFxuICA1MDpcdFx0XHQhWlJBTV9CQUNLRU5EX1pTVEQgXHUwMDI2XHUwMDI2ICFaUkFNX0JBQ0tFTkRfREVGTEFURSBcdTAwMjZcdTAwMjYgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgdGhlIFpTTUFMTE9DIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBaU01BTExPQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgc2V0dGluZ3MgYXJlIGRlZmluZWQuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIFpTTUFMTE9DIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIGFyZSAoYXJjaGl0ZWN0dXJlLCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcywgZXRjLiksIGFuZCB3aGF0IHRoZSB2YXJpb3VzIGtub2JzIEkgaGF2ZSB0byB0dW5lIGFyZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCBiZWZvcmUgSSBtb3ZlIG9uIHRvIG1vcmUgZGV0YWlsZWQgY29kZSBhbmFseXNpcy4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU01BTExPQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy0xMjQtXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0Ncbm1tL0tjb25maWctMTI2LVx0dHJpc3RhdGVcbi0tXG5tbS9LY29uZmlnPTEzMT1jb21tZW50IFwmIzM0O1pzbWFsbG9jIGlzIGEgY29tbW9uIGJhY2tlbmQgYWxsb2NhdG9yIGZvciB6c3dhcCBcdTAwMjYgenJhbVwmIzM0O1xubW0vS2NvbmZpZy0xMzItXG5tbS9LY29uZmlnOjEzMzpjb25maWcgWlNNQUxMT0NfU1RBVFxubW0vS2NvbmZpZy0xMzQtXHRib29sIFwmIzM0O0V4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEtXG5tbS9LY29uZmlnOjE0Mjpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxubW0vS2NvbmZpZy0xNDMtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ0MwoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpSQU0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW4uIEFscmlnaHQsIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYCBhbmQgc3BlY2lmaWNhbGx5IGB6Y29tcF9kZWNvbXByZXNzYC4gVGhlbiwgb3ZlciBpbiBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLCB3ZSYjMzk7cmUgdG91Y2hpbmcgYGRlY29tcHJlc3NfYmRldl9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGByZWFkX2NvbXByZXNzZWRfcGFnZWAsIGFuZCBgcmVhZF9mcm9tX3pzcG9vbF9yYXdgLiBBbmQsIG5vdCBzdXJwcmlzaW5nbHksIGBtbS96c21hbGxvYy5jYCBpcyBiZWluZyBtb2RpZmllZCwgc3BlY2lmaWNhbGx5IHRoZSByZW1vdmFsIG9mIGB6c19vYmpfcmVhZF9iZWdpbmAgYW5kIGB6c19vYmpfcmVhZF9lbmRgLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIOKAkyBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSAqcmVhY2hhYmxlKj8gWWVzISBUaGlzIGlzIFpSQU0sIGAvZGV2L3pyYW1YYC4gSXQmIzM5O3MgYSBjb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2UsIGFuZCBkZWZpbml0ZWx5IHNvbWV0aGluZyBJJiMzOTt2ZSB3b3JrZWQgd2l0aC4gRWFzeSB0byBzZXQgdXAgaW4gUUVNVSwgcGVyZmVjdCBmb3Igc3l6a2FsbGVyLgoKU28sIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IFpSQU0gZGVjb21wcmVzc2VzIHBhZ2VzIGFuZCByZWFkcyBmcm9tIHpzbWFsbG9jLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gZGVhbGluZyB3aXRoIHNjYXR0ZXJsaXN0cywgYHN0cnVjdCBzY2F0dGVybGlzdCAqc2dgLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgb2JqZWN0cyB0aGF0IGVpdGhlciBzcGFuIG11bHRpcGxlIHBhZ2VzIG9yIGFyZSBmdWxseSBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIHBhZ2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gYHpjb21wX2RlY29tcHJlc3NgLCBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AuCgpBbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY2FsbCBoaWVyYXJjaHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGFuZCB0aGUgb3RoZXJzIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY2AuIE5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX2NvbXByZXNzZWRfcGFnZXxyZWFkX2luY29tcHJlc3NpYmxlX3BhZ2V8cmVhZF9mcm9tX3pzcG9vbF9yYXd8ZGVjb21wcmVzc19iZGV2X3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDg4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDkwLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTAzMD1zdGF0aWMgaW50IHpyYW1fd3JpdGViYWNrX3Nsb3RzKHN0cnVjdCB6cmFtICp6cmFtLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODUtXHRcdGlmICh6cmFtLVx1MDAzZWNvbXByZXNzZWRfd2IpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMDg2Olx0XHRcdGVyciA9IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHpyYW0sIHJlcS1cdTAwM2VwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMDg3LVx0XHRlbHNlXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTIzNj1zdGF0aWMgc3NpemVfdCB3cml0ZWJhY2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNDEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMzQyOnN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM0My1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTM4NT1zdGF0aWMgdm9pZCB6cmFtX2RlZmVycmVkX2RlY29tcHJlc3Moc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMzkzOlx0cmV0ID0gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM5NC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTQ5MT1zdGF0aWMgaW50IHJlYWRfZnJvbV9iZGV2X3N5bmMoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDctXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxNTA4Olx0cmV0dXJuIGRlY29tcHJlc3NfYmRldl9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktfVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIwODE9c3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIwOTEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMDkyOnN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIwOTMtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTExLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjExMjpzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMTMtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzctI2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTM4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzOS1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjE2OT1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNzYtXHRpZiAoIXRlc3Rfc2xvdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX0hVR0UpKVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE3NzpcdFx0cmV0dXJuIHJlYWRfY29tcHJlc3NlZF9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNzgtXHRlbHNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTc5Olx0XHRyZXR1cm4gcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxODAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIERlZXAgaW50byBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZHMgYXJlIGJlaW5nIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFpTUG9vbCByZWFkIG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCBmdW5jdGlvbjsgSSYjMzk7bSBnb2luZyB0byBzY3J1dGluaXplIGl0cyB1c2Ugb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHBhcnRpY3VsYXJseSBsaW5lIDIxMzcuIEkmIzM5O20gbG9va2luZyBmb3IgYCNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS2AuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUuCgpOZXh0LCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGluIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmVhdHVyZSBzZXQgY2hhbmdlcyB3aXRoIHJlc3BlY3QgdG8gZGlmZmVyZW50IGNvbXBpbGF0aW9uIG9wdGlvbnMuIEkga25vdyB0aGVzZSBndWFyZHMgcmVwcmVzZW50IGRpc3RpbmN0LCBvcHRpb25hbCBwYXRocyB0aGUgY29kZSBjYW4gdGFrZS4gTXkgZXhwZXJ0aXNlIGFsbG93cyBtZSB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgZ3VhcmRzIGFyZSBwcm9wZXJseSBpbXBsZW1lbnRlZCBiYXNlZCBvbiB0aGUgYnJvYWRlciBzeXN0ZW0gc2V0dXAuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5IGlzIGNvbXBpbGVkIGludG8gdGhlIGltYWdlIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmLipDT05GSUdfWlJBTV9XUklURUJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjU6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjI2LXN0cnVjdCB6cmFtX3BwX3Nsb3Qge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDg1LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg2OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ4Ny0jZGVmaW5lIElOVkFMSURfQkRFVl9CTE9DS1x0XHQofjBVTClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTEyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTM3OiNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzOC1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDA4PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wX2FsZ29yaXRobSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA5OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMTAtc3RhdGljIERFVklDRV9BVFRSX1JPKGJkX3N0YXQpO1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMzItXHRcdTAwMjZkZXZfYXR0cl9jb21wX2FsZ29yaXRobS5hdHRyLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzAzMzojaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDM0LVx0XHUwMDI2ZGV2X2F0dHJfYmRfc3RhdC5hdHRyLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwNTk9c3RhdGljIGludCB6cmFtX2FkZCh2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwOTctXHRpbml0X3J3c2VtKFx1MDAyNnpyYW0tXHUwMDNlZGV2X2xvY2spO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MzA5ODojaWZkZWYgQ09ORklHX1pSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDk5LVx0enJhbS1cdTAwM2V3Yl9iYXRjaF9zaXplID0gMzI7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9OTM9c3RydWN0IHpyYW1fc3RhdHMge1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTEwMy1cdGF0b21pYzY0X3QgbWlzc19mcmVlO1x0XHQvKiBuby4gb2YgbWlzc2VkIGZyZWUgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjEwNDojaWZkZWZcdENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTA1LVx0YXRvbWljNjRfdCBiZF9jb3VudDtcdFx0Lyogbm8uIG9mIHBhZ2VzIGluIGJhY2tpbmcgZGV2aWNlICovXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9MTIxPXN0cnVjdCB6cmFtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xNDYtXHRib29sIGNsYWltOyAvKiBQcm90ZWN0ZWQgYnkgZGlzay1cdTAwM2VvcGVuX211dGV4ICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxNDc6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTQ4LVx0c3RydWN0IGZpbGUgKmJhY2tpbmdfZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbnN0cnVjdGluZyBaUkFNJiMzOTtzIERlY29tcHJlc3Npb24gUGF0aCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBkZWNvbXByZXNzX2JkZXZfcGFnZWAgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIGJvdGgga2V5IGNvbXBvbmVudHMgb2YgdGhlIHdyaXRlYmFjayBtZWNoYW5pc20sIGFyZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfWlJBTV9XUklURUJBQ0tgLiBUaGUgY29yZSBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucywgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCBhbmQgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGFyZSB1bmNvbmRpdGlvbmFsbHkgcHJlc2VudCBpbiBgenJhbV9kcnYuY2AsIGFuZCB0aGUgYWN0dWFsIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtLCBgemNvbXBfZGVjb21wcmVzc2AsIGxpdmVzIGluIGB6Y29tcC5jYC4KCk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIGBaUkFNYCBpdHNlbGYgc2VsZWN0cyBgWlNNQUxMT0NgLCB3aGljaCBpcyBleHBlY3RlZC4gQW5kLCBhcyBhbnRpY2lwYXRlZCwgYFpSQU1fV1JJVEVCQUNLYCBoaW5nZXMgb24gYFpSQU1gIGJlaW5nIGVuYWJsZWQuIERpZ2dpbmcgZGVlcGVyIGludG8gYGRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnYCwgSSBzZWUgdGhhdCBgWlJBTWAgcmVxdWlyZXMgYEJMT0NLYCwgYFNZU0ZTYCwgYW5kIGBNTVVgLiBgWlJBTV9XUklURUJBQ0tgIHRoZW4gZGVwZW5kcyBvbiBgWlJBTWAuIEFsbCBtYWtlcyBzZW5zZS4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHN5bWJvbCB2aXNpYmlsaXR5LiAgYHpjb21wX2RlY29tcHJlc3NgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuICBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AgYXJlIGFsbCBzdGF0aWMuIFRoaXMgdHJpZ2dlcnMgYSBzcGVjaWZpYyB0aG91Z2h0OyBjYW4gSSBzdGlsbCBsZXZlcmFnZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBteSBwdXJwb3Nlcz8gQWgsIHllcywgdGhleSBzaG91bGQgYmUgYWRkcmVzc2FibGUuIFN0YXRpYyBmdW5jdGlvbnMgaW4gQyBmaWxlcyBhcmUgZmluZSBmb3Igc3l6a2FsbGVyIHN5bWJvbCBjb3ZlcmFnZSBhbmQgZm9jdXMgc3ltYm9scywgYmVjYXVzZSB0aGV5IHN0aWxsIGhhdmUgc3ltYm9scyBpbiB2bWxpbnV4LCB1bmxlc3MgdGhleSYjMzk7cmUgY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGRlY2xhcmVkIGluIGhlYWRlciBmaWxlcywgYnV0IEkgZG9uJiMzOTt0IHNlZSB0aGF0IGhlcmUuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBgcmVhZF9mcm9tX3pzcG9vbGAgYW5kIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIG9yIGxvb2sgZm9yIGFueSBvdGhlciBkaXJlY3QgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZWNvbXByZXNzaW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfZnJvbV96c3Bvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDg4LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDkwLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0OTE6c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ5Mi1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBpbmRleCk7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTAzMD1zdGF0aWMgaW50IHpyYW1fd3JpdGViYWNrX3Nsb3RzKHN0cnVjdCB6cmFtICp6cmFtLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODUtXHRcdGlmICh6cmFtLVx1MDAzZWNvbXByZXNzZWRfd2IpXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMDg2Olx0XHRcdGVyciA9IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHpyYW0sIHJlcS1cdTAwM2VwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMDg3LVx0XHRlbHNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMDg4Olx0XHRcdGVyciA9IHJlYWRfZnJvbV96c3Bvb2woenJhbSwgcmVxLVx1MDAzZXBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODktXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjExMj1zdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTM3LSNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjEzODpzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzktXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNjgtICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTY5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbChzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTcwLVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxODI9c3RhdGljIGludCB6cmFtX3JlYWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE4OS1cdFx0LyogU2xvdCBzaG91bGQgYmUgbG9ja2VkIHRocm91Z2ggb3V0IHRoZSBmdW5jdGlvbiBjYWxsICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTkwOlx0XHRyZXQgPSByZWFkX2Zyb21fenNwb29sKHpyYW0sIHBhZ2UsIGluZGV4KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxOTEtXHRcdHNsb3RfdW5sb2NrKHpyYW0sIGluZGV4KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDQ3PXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDcyOlx0cmV0ID0gcmVhZF9mcm9tX3pzcG9vbCh6cmFtLCBwYWdlLCBpbmRleCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDczLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBoZXJlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoaXMgYHpjb21wX2RlY29tcHJlc3NgIGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5ICp3aGVyZSogaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGZ1bmN0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIGl0cyBpbnZvY2F0aW9uLiBTbywgSSBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgYGRlY29tcHJlc3NfYmRldl9wYWdlYCBhbmQgYHJlYWRfY29tcHJlc3NlZF9wYWdlYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLiBBcmUgdGhvc2UgdGhlICpvbmx5KiB0d28gZnVuY3Rpb25zIHRoYXQgY2FsbCBgemNvbXBfZGVjb21wcmVzc2A/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBoaWRkZW4gcGF0aHMgb3IgbGVzcyBvYnZpb3VzIGNhbGwgc2l0ZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNvbnRleHQgb2YgaXRzIG9wZXJhdGlvbiBhbmQgdGhlIGRlcGVuZGVuY2llcyBpbnZvbHZlZCBpbiB0aGUgZGVjb21wcmVzc2lvbiBwcm9jZXNzLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBjYWxsZXJzIGJlZm9yZSBJIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pjb21wX2RlY29tcHJlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM9MTQ0PWludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYzoxNjI6aW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjMtXHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD05Mz1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC05NC1cdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmg6OTU6aW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaC05Ni1cdFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzQyPXN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNzAtXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMzcxOlx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzcyLVx0XHRcdCAgICAgICB6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTEyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjgtXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTI5Olx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsIGRzdCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTMwLVx0a3VubWFwX2xvY2FsKGRzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzUyCgkJCQkJCQlvdXRwdXQ6IDE3NgoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIENhbmRpZGF0ZSBBc3Nlc3NtZW50OiBaUkFNIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHdpdGhpbiB0aGUgYHpyYW1gIGFuZCBgenNtYWxsb2NgIHN1YnN5c3RlbXMuIEkgc2VlIHRoYXQgaXQgdG91Y2hlcyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB6Y29tcF9kZWNvbXByZXNzYCBpbiBgemNvbXAuY2AsIHdoaWNoIGlzIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxvZ2ljLCBhbmQgYSBjbHVzdGVyIG9mIGZ1bmN0aW9ucyB3aXRoaW4gYHpyYW1fZHJ2LmNgOiBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AuICBBZGRpdGlvbmFsbHksIGl0JiMzOTtzIHJlbW92aW5nIHNvbWUgbG93LWxldmVsIHJlYWQgZnVuY3Rpb25zIChgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYCkgZnJvbSBgenNtYWxsb2NgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4KClRoaXMgaW1tZWRpYXRlbHkgZmxhZ3Mgc2V2ZXJhbCBzeW1ib2xzIGFzIGNyaXRpY2FsIGZvciBteSBmdXp6aW5nIGNhbXBhaWduOiBgemNvbXBfZGVjb21wcmVzc2AsIHRoZSB2YXJpb3VzIGByZWFkXypgIGZ1bmN0aW9ucywgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhvc2UgZnVuY3Rpb25zLgoKTm93LCBjb25maWd1cmF0aW9uLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWlJBTWAsIGBaUkFNX1dSSVRFQkFDS2AsIGFuZCBgWlNNQUxMT0NgIGFyZSBhbGwgZW5hYmxlZCBkdXJpbmcgbXkgZnV6emluZyBydW5zLiAgVGhlIGRlcGVuZGVuY2llcyBjaGVjayBvdXQ7IGBaUkFNYCBzZWxlY3RzIGBaU01BTExPQ2AgYW5kIGBaUkFNX1dSSVRFQkFDS2AgZGVwZW5kcyBvbiBgWlJBTWAuICBObyBzdXJwcmlzZXMgdGhlcmUuCgpUaGUgYmlnIHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enphYmxlPyAgQWJzb2x1dGVseSwgYW5kIGl0JiMzOTtzIGEganVpY3kgdGFyZ2V0LiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgbWVtb3J5IGlzIGhhbmRsZWQgd2l0aGluIGB6cmFtYCBhbmQgYHpzbWFsbG9jYC4gSXQmIzM5O3MgbWVzc2luZyB3aXRoIG1lbW9yeSBjb3B5aW5nLCB3aGljaCBpcyBhbHdheXMgYSByZWQgZmxhZywgYXMgd2VsbCBhcyBtYXBwaW5nICh1c2luZyBga21hcF9sb2NhbF9wYWdlYCksIHNjYXR0ZXJsaXN0IGhhbmRsaW5nLCBidWZmZXIgbGVuZ3RocywgYW5kIGhvdyBkZWNvbXByZXNzaW9uIGlucHV0IGlzIHByb2Nlc3NlZCwgKmFjcm9zcyBwYWdlIGJvdW5kYXJpZXMqLiAgQWxsIG9mIHRoaXMgaXMgdmVyeSBzaWduaWZpY2FudCBhbmQgY291bGQgaW50cm9kdWNlIHNvbWUgc2VyaW91cyBidWdzLiBBIGJ1ZmZlciBvdmVyZmxvdyBpcyBtb3JlIHRoYW4gbGlrZWx5IHdpdGggY3Jvc3MgcGFnZSBvYmplY3RzLCBwYWdlIHVubWFwcGluZyBjb3VsZCBiZSBhIHByb2JsZW0sIGNvcnJ1cHRpb24sIGFuZCB0aGUgc3lzdGVtIGNvdWxkIHBhbmljIGlmIHRoZXJlIGlzIGEgcHJvYmxlbS4gR2l2ZW4gdGhpcywgYW5kIHRoZSBjaGFuZ2VzIEkgc2VlLCB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgYW5hbHlzaXMgYWxzbyBhbGlnbnMgd2l0aCB0aGUgcHJlZGVmaW5lZCBndWlkZWxpbmVzLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBsaXN0ZWQgKGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpTTUFMTE9DYCkuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGVyZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZCAtIHN3aXRjaGluZyB0byBzY2F0dGVybGlzdCBBUElzIGluc3RlYWQgb2YgdXNpbmcgY29udGlndW91cyBwb2ludGVycyBpcyBjb21wbGV4LiAgVGhlcmUmIzM5O3MgYWxzbyB0aGUgY2hhbGxlbmdlIG9mIGhhbmRsaW5nIGJvdGggc2luZ2xlLXBhZ2UgYW5kIGNyb3NzLXBhZ2Ugb2JqZWN0cy4gSXQgYWxsIGFkZHMgdXAgdG8gYSBjbGVhciBqdXN0aWZpY2F0aW9uLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhpcyBjYW1wYWlnbiBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1dSSVRFQkFDSyYjMzQ7LAogICAgJiMzNDtaU01BTExPQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pjb21wX2RlY29tcHJlc3MmIzM0OywKICAgICYjMzQ7ZGVjb21wcmVzc19iZGV2X3BhZ2UmIzM0OywKICAgICYjMzQ7cmVhZF9jb21wcmVzc2VkX3BhZ2UmIzM0OywKICAgICYjMzQ7cmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfZnJvbV96c3Bvb2xfcmF3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgemNvbXAgZGVjb21wcmVzc2lvbiBhbmQgenJhbSByZWFkIHBhdGhzIHRvIHVzZSBzY2F0dGVybGlzdHMgcmF0aGVyIHRoYW4gY29udGlndW91cyBtZW1vcnkgcG9pbnRlcnMsIGhhbmRsaW5nIGJvdGggc2luZ2xlLXBhZ2Ugb2JqZWN0cyB2aWEga21hcF9sb2NhbF9wYWdlIGFuZCBjcm9zcy1wYWdlIG9iamVjdHMgdmlhIHNnX2NvcHlfdG9fYnVmZmVyLiBUaGlzIG1vZGlmaWVzIGRhdGEgYnVmZmVyIGhhbmRsaW5nIGFuZCBkZWNvbXByZXNzaW9uIGZsb3dzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBtYXBwaW5nIGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9XUklURUJBQ0smIzM0OywKICAgICYjMzQ7WlNNQUxMT0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6Y29tcF9kZWNvbXByZXNzJiMzNDssCiAgICAmIzM0O2RlY29tcHJlc3NfYmRldl9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfY29tcHJlc3NlZF9wYWdlJiMzNDssCiAgICAmIzM0O3JlYWRfaW5jb21wcmVzc2libGVfcGFnZSYjMzQ7LAogICAgJiMzNDtyZWFkX2Zyb21fenNwb29sX3JhdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHpjb21wIGRlY29tcHJlc3Npb24gYW5kIHpyYW0gcmVhZCBwYXRocyB0byB1c2Ugc2NhdHRlcmxpc3RzIHJhdGhlciB0aGFuIGNvbnRpZ3VvdXMgbWVtb3J5IHBvaW50ZXJzLCBoYW5kbGluZyBib3RoIHNpbmdsZS1wYWdlIG9iamVjdHMgdmlhIGttYXBfbG9jYWxfcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzIHZpYSBzZ19jb3B5X3RvX2J1ZmZlci4gVGhpcyBtb2RpZmllcyBkYXRhIGJ1ZmZlciBoYW5kbGluZyBhbmQgZGVjb21wcmVzc2lvbiBmbG93cyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbWFwcGluZyBidWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxuXG5LZXkgb2JzZXJ2YXRpb25zOlxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxuMi4gVGhlIGBzdHJ1Y3QgemNvbXBfcmVxIHJlcWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBiZWZvcmUgcGFzc2luZyB0byB0aGUgZGVjb21wcmVzc2lvbiBjYWxsYmFjay5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcy5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjYxOTliMjFhYTM0MjdkZDNkOGRlOTRkNjRlYmU3MzkyOTFiMDM1NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTU6MDc6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jCmluZGV4IDk3NGM0NjkxODg3ZTYuLjAyOGUyZjBmNTg3ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jCkBAIC03LDYgJiM0Mzs3LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVob3RwbHVnLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2hpZ2htZW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NhdHRlcmxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzZnMuaCZndDsKIApAQCAtMTU4LDE3ICYjNDM7MTYwLDMyIEBAIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSwKIH0KIAogaW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sCi0JCSAgICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KQomIzQzOwkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KQogewogCXN0cnVjdCB6Y29tcF9yZXEgcmVxID0gewotCQkuc3JjID0gc3JjLAogCQkuZHN0ID0gZHN0LAogCQkuc3JjX2xlbiA9IHNyY19sZW4sCiAJCS5kc3RfbGVuID0gUEFHRV9TSVpFLAogCX07CiYjNDM7CXZvaWQgKnNyYyA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiAKIAltaWdodF9zbGVlcCgpOwotCXJldHVybiBjb21wLSZndDtvcHMtJmd0O2RlY29tcHJlc3MoY29tcC0mZ3Q7cGFyYW1zLCAmYW1wO3pzdHJtLSZndDtjdHgsICZhbXA7cmVxKTsKJiM0MzsKJiM0MzsJaWYgKHNnX2lzX2xhc3Qoc2cpKSB7CiYjNDM7CQkvKiB0aGUgb2JqZWN0IGlzIGNvbnRhaW5lZCB3aXRoaW4gb25lIHBhZ2UsIHJlYWQgaXQgaW4tcGxhY2UgKi8KJiM0MzsJCXNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7CiYjNDM7CQlyZXEuc3JjID0gc3JjICYjNDM7IHNnLSZndDtvZmZzZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiB0aGUgb2JqZWN0IHNwYW5zIHR3byBwYWdlcywgbGluZWFyaXplIGl0IGludG8gbG9jYWwgY29weSAqLwomIzQzOwkJc2dfY29weV90b19idWZmZXIoc2csIDIsIHpzdHJtLSZndDtsb2NhbF9jb3B5LCBzcmNfbGVuKTsKJiM0MzsJCXJlcS5zcmMgPSB6c3RybS0mZ3Q7bG9jYWxfY29weTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjb21wLSZndDtvcHMtJmd0O2RlY29tcHJlc3MoY29tcC0mZ3Q7cGFyYW1zLCAmYW1wO3pzdHJtLSZndDtjdHgsICZhbXA7cmVxKTsKJiM0MzsJaWYgKHNyYykKJiM0MzsJCWt1bm1hcF9sb2NhbChzcmMpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaCBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oCmluZGV4IDgxYTBmM2Y2ZmY0ODcuLmYzOGZkMzFmOWU0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oCkBAIC01LDYgJiM0Mzs1LDggQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAKJiM0MztzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CiYjNDM7CiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVQJSU5UX01JTgogCiBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMgewpAQCAtOTEsNiAmIzQzOzkzLDYgQEAgdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7CiBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sCiAJCSAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKTsKIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLAotCQkgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCk7CiYjNDM7CQkgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpOwogCiAjZW5kaWYgLyogX1pDT01QX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCmluZGV4IGE5YjNiYjFkM2JlZjMuLjU0MzFiMTZmMmY0NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCkBAIC0zMiw2ICYjNDM7MzIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVob3RwbHVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFydF9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjYXR0ZXJsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsX3JlYWRfZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CiAKQEAgLTEzNDIsOSAmIzQzOzEzNDMsOSBAQCBzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQl1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOwogCXVuc2lnbmVkIGludCBzaXplOwogCWludCByZXQsIHByaW87Ci0Jdm9pZCAqc3JjOwogCiAJc2xvdF9sb2NrKHpyYW0sIGluZGV4KTsKIAkvKiBTaW5jZSBzbG90IHdhcyB1bmxvY2tlZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBzdGlsbCBaUkFNX1dCICovCkBAIC0xMzYzLDEzICYjNDM7MTM2NCwxOCBAQCBzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlzaXplID0gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCk7CiAJcHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpOwogCiYjNDM7CXNnX2luaXRfdGFibGUoc2csIDEpOwomIzQzOwlzZ19zZXRfcGFnZShzZywgcGFnZSwgc2l6ZSwgMCk7CiYjNDM7CiAJenN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tJmd0O2NvbXBzW3ByaW9dKTsKLQlzcmMgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7Ci0JcmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLSZndDtjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwKJiM0MzsJcmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLSZndDtjb21wc1twcmlvXSwgenN0cm0sIHNnLCBzaXplLAogCQkJICAgICAgIHpzdHJtLSZndDtsb2NhbF9jb3B5KTsKLQlpZiAoIXJldCkKLQkJY29weV9wYWdlKHNyYywgenN0cm0tJmd0O2xvY2FsX2NvcHkpOwotCWt1bm1hcF9sb2NhbChzcmMpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJdm9pZCAqZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwomIzQzOwomIzQzOwkJY29weV9wYWdlKGRzdCwgenN0cm0tJmd0O2xvY2FsX2NvcHkpOwomIzQzOwkJa3VubWFwX2xvY2FsKGRzdCk7CiYjNDM7CX0KIAl6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTsKIAlzbG90X3VubG9jayh6cmFtLCBpbmRleCk7CiAKQEAgLTIwODYsMTUgJiM0MzsyMDkyLDE5IEBAIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwogCXVuc2lnbmVkIGxvbmcgaGFuZGxlOwogCXZvaWQgKnNyYywgKmRzdDsKIAogCWhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7Ci0Jc3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBOVUxMKTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgc2csIFBBR0VfU0laRSk7CiYjNDM7CS8qIGFuIGluY29tcHJlc3NpYmxlIG9iamVjdCBuZXZlciBzcGFucyB0d28gcGFnZXMgKi8KJiM0MzsJc3JjID0ga21hcF9sb2NhbF9wYWdlKHNnX3BhZ2Uoc2cpKTsKIAlkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY29weV9wYWdlKGRzdCwgc3JjKTsKIAlrdW5tYXBfbG9jYWwoZHN0KTsKLQl6c19vYmpfcmVhZF9lbmQoenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBzcmMpOwomIzQzOwlrdW5tYXBfbG9jYWwoc3JjKTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTAzLDkgJiM0MzsyMTEzLDEwIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7CiAJc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtOwomIzQzOwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CiAJdW5zaWduZWQgbG9uZyBoYW5kbGU7CiAJdW5zaWduZWQgaW50IHNpemU7Ci0Jdm9pZCAqc3JjLCAqZHN0OwomIzQzOwl2b2lkICpkc3Q7CiAJaW50IHJldCwgcHJpbzsKIAogCWhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7CkBAIC0yMTEzLDEyICYjNDM7MjEyNCwxMSBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlwcmlvID0gZ2V0X3Nsb3RfY29tcF9wcmlvcml0eSh6cmFtLCBpbmRleCk7CiAKIAl6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS0mZ3Q7Y29tcHNbcHJpb10pOwotCXNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsCi0JCQkJenN0cm0tJmd0O2xvY2FsX2NvcHkpOwomIzQzOwl6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLSZndDttZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7CiAJZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwotCXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsIGRzdCk7CiYjNDM7CXJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS0mZ3Q7Y29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSwgZHN0KTsKIAlrdW5tYXBfbG9jYWwoZHN0KTsKLQl6c19vYmpfcmVhZF9lbmQoenJhbS0mZ3Q7bWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUpOwogCXpjb21wX3N0cmVhbV9wdXQoenN0cm0pOwogCiAJcmV0dXJuIHJldDsKQEAgLTIxMjgsMjUgJiM0MzsyMTM4LDIzIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLAogc3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLQlzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZTsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKLQl2b2lkICpzcmM7CiYjNDM7CXZvaWQgKmRzdDsKIAogCWhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7CiAJc2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpOwogCiAJLyoKLQkgKiBXZSBuZWVkIHRvIGdldCBzdHJlYW0ganVzdCBmb3IgLSZndDtsb2NhbF9jb3B5IGJ1ZmZlciwgaW4KLQkgKiBjYXNlIGlmIG9iamVjdCBzcGFucyB0d28gcGh5c2ljYWwgcGFnZXMuIE5vIGRlY29tcHJlc3Npb24KLQkgKiB0YWtlcyBwbGFjZSBoZXJlLCBhcyB3ZSByZWFkIHJhdyBjb21wcmVzc2VkIGRhdGEuCiYjNDM7CSAqIE5vIGRlY29tcHJlc3Npb24gdGFrZXMgcGxhY2UgaGVyZSwgd2UgY29weSBvdXQgcmF3IGNvbXByZXNzZWQKJiM0MzsJICogZGF0YSBkaXJlY3RseSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLgogCSAqLwotCXpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLSZndDtjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pOwotCXNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsCi0JCQkJenN0cm0tJmd0O2xvY2FsX2NvcHkpOwotCW1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7Ci0JenNfb2JqX3JlYWRfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7Ci0JemNvbXBfc3RyZWFtX3B1dCh6c3RybSk7CiYjNDM7CXpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTsKJiM0MzsJZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwomIzQzOwlzZ19jb3B5X3RvX2J1ZmZlcihzZywgc2dfbmVudHMoc2cpLCBkc3QsIHNpemUpOwomIzQzOwlrdW5tYXBfbG9jYWwoZHN0KTsKJiM0MzsJenNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tJmd0O21lbV9wb29sLCBoYW5kbGUpOwogCiAJbWVtemVyb19wYWdlKHBhZ2UsIHNpemUsIFBBR0VfU0laRSAtIHNpemUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgKaW5kZXggNDc4NDEwYzg4MGIxZi4uNWI3Mjk4YTUwMjZiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c21hbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaApAQCAtNDAsMTAgJiM0Mzs0MCw2IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTsKIAogdm9pZCB6c19wb29sX3N0YXRzKHN0cnVjdCB6c19wb29sICpwb29sLCBzdHJ1Y3QgenNfcG9vbF9zdGF0cyAqc3RhdHMpOwogCi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQlzaXplX3QgbWVtX2xlbiwgdm9pZCAqbG9jYWxfY29weSk7Ci12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCSAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pOwogdm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCiAJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKTsKIHZvaWQgenNfb2JqX3JlYWRfc2dfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSk7CmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuYwppbmRleCA4MjUwMjJhN2EzMjhmLi4xMWJlMzdjNDMxNzE4IDEwMDY0NAotLS0gYS9tbS96c21hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzbWFsbG9jLmMKQEAgLTExMzQsODMgJiM0MzsxMTM0LDYgQEAgdW5zaWduZWQgbG9uZyB6c19nZXRfdG90YWxfcGFnZXMoc3RydWN0IHpzX3Bvb2wgKnBvb2wpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpOwogCi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsCi0JCQlzaXplX3QgbWVtX2xlbiwgdm9pZCAqbG9jYWxfY29weSkKLXsKLQlzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7Ci0Jc3RydWN0IHpwZGVzYyAqenBkZXNjOwotCXVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7Ci0JdW5zaWduZWQgaW50IG9ial9pZHg7Ci0Jc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzOwotCXZvaWQgKmFkZHI7Ci0KLQkvKiBHdWFyYW50ZWUgd2UgY2FuIGdldCB6c3BhZ2UgZnJvbSBoYW5kbGUgc2FmZWx5ICovCi0JcmVhZF9sb2NrKCZhbXA7cG9vbC0mZ3Q7bG9jayk7Ci0Jb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpOwotCW9ial90b19sb2NhdGlvbihvYmosICZhbXA7enBkZXNjLCAmYW1wO29ial9pZHgpOwotCXpzcGFnZSA9IGdldF96c3BhZ2UoenBkZXNjKTsKLQotCS8qIE1ha2Ugc3VyZSBtaWdyYXRpb24gZG9lc24mIzM5O3QgbW92ZSBhbnkgcGFnZXMgaW4gdGhpcyB6c3BhZ2UgKi8KLQl6c3BhZ2VfcmVhZF9sb2NrKHpzcGFnZSk7Ci0JcmVhZF91bmxvY2soJmFtcDtwb29sLSZndDtsb2NrKTsKLQotCWNsYXNzID0genNwYWdlX2NsYXNzKHBvb2wsIHpzcGFnZSk7Ci0Jb2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtJmd0O3NpemUgKiBvYmpfaWR4KTsKLQotCWlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKQotCQlvZmYgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFOwotCi0JaWYgKG9mZiAmIzQzOyBtZW1fbGVuICZsdDs9IFBBR0VfU0laRSkgewotCQkvKiB0aGlzIG9iamVjdCBpcyBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIGEgcGFnZSAqLwotCQlhZGRyID0ga21hcF9sb2NhbF96cGRlc2MoenBkZXNjKTsKLQkJYWRkciAmIzQzOz0gb2ZmOwotCX0gZWxzZSB7Ci0JCXNpemVfdCBzaXplc1syXTsKLQotCQkvKiB0aGlzIG9iamVjdCBzcGFucyB0d28gcGFnZXMgKi8KLQkJc2l6ZXNbMF0gPSBQQUdFX1NJWkUgLSBvZmY7Ci0JCXNpemVzWzFdID0gbWVtX2xlbiAtIHNpemVzWzBdOwotCQlhZGRyID0gbG9jYWxfY29weTsKLQotCQltZW1jcHlfZnJvbV9wYWdlKGFkZHIsIHpwZGVzY19wYWdlKHpwZGVzYyksCi0JCQkJIG9mZiwgc2l6ZXNbMF0pOwotCQl6cGRlc2MgPSBnZXRfbmV4dF96cGRlc2MoenBkZXNjKTsKLQkJbWVtY3B5X2Zyb21fcGFnZShhZGRyICYjNDM7IHNpemVzWzBdLAotCQkJCSB6cGRlc2NfcGFnZSh6cGRlc2MpLAotCQkJCSAwLCBzaXplc1sxXSk7Ci0JfQotCi0JcmV0dXJuIGFkZHI7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9iZWdpbik7Ci0KLXZvaWQgenNfb2JqX3JlYWRfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSwKLQkJICAgICBzaXplX3QgbWVtX2xlbiwgdm9pZCAqaGFuZGxlX21lbSkKLXsKLQlzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7Ci0Jc3RydWN0IHpwZGVzYyAqenBkZXNjOwotCXVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7Ci0JdW5zaWduZWQgaW50IG9ial9pZHg7Ci0Jc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzOwotCi0Jb2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpOwotCW9ial90b19sb2NhdGlvbihvYmosICZhbXA7enBkZXNjLCAmYW1wO29ial9pZHgpOwotCXpzcGFnZSA9IGdldF96c3BhZ2UoenBkZXNjKTsKLQljbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpOwotCW9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLSZndDtzaXplICogb2JqX2lkeCk7Ci0KLQlpZiAoIVpzSHVnZVBhZ2UoenNwYWdlKSkKLQkJb2ZmICYjNDM7PSBaU19IQU5ETEVfU0laRTsKLQotCWlmIChvZmYgJiM0MzsgbWVtX2xlbiAmbHQ7PSBQQUdFX1NJWkUpIHsKLQkJaGFuZGxlX21lbSAtPSBvZmY7Ci0JCWt1bm1hcF9sb2NhbChoYW5kbGVfbWVtKTsKLQl9Ci0KLQl6c3BhZ2VfcmVhZF91bmxvY2soenNwYWdlKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHpzX29ial9yZWFkX2VuZCk7Ci0KIHZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLAogCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzaXplX3QgbWVtX2xlbikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBaUkFNIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZSBzaWduYXR1cmUgY2hhbmdlIGluIGB6Y29tcF9kZWNvbXByZXNzYCBpcyB0aGUga2V5IHRoaW5nIHRvIGxvb2sgYXQ6IGdvaW5nIGZyb20gYSBzaW1wbGUgYHZvaWQgKmAgc291cmNlIHRvIGEgYHN0cnVjdCBzY2F0dGVybGlzdCAqYC4gVGhhdCBkZWZpbml0ZWx5IGNoYW5nZXMgdGhpbmdzLgoKRmlyc3QsIEkmIzM5O2xsIHdhbGsgdGhyb3VnaCB0aGUgYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYCBjaGFuZ2VzLiBJdCBzZWVtcyBsaWtlIHdlIG5vdyBoYXZlIGEgc2NhdHRlcmxpc3QgYXMgaW5wdXQuIEluIGB6Y29tcF9kZWNvbXByZXNzYCwgdGhlIGxvZ2ljIGJyYW5jaGVzIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNjYXR0ZXJsaXN0IHNwYW5zIG9uZSBvciB0d28gcGFnZXMuIElmIGl0JiMzOTtzIGEgc2luZ2xlIHBhZ2UgYW5kIGBzZ19pc19sYXN0KHNnKWAgaXMgdHJ1ZSwgaXQgdXNlcyBga21hcF9sb2NhbF9wYWdlYCB0byBtYXAgdGhlIHNvdXJjZS4gSWYgaXQgc3BhbnMgdHdvIHBhZ2VzLCBgc2dfY29weV90b19idWZmZXJgIGlzIHVzZWQsIHB1dHRpbmcgdGhlIGRhdGEgaW50byBhIGxvY2FsIGJ1ZmZlci4gQWZ0ZXIgY2FsbGluZyB0aGUgYGRlY29tcHJlc3NgIGZ1bmN0aW9uLCBpdCB1bm1hcHMgYHNyY2AgaWYgaXQmIzM5O3MgYmVlbiBtYXBwZWQuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBmcmFnbWVudGVkIG1lbW9yeSBhbmQgdGhlIHNjYXR0ZXJsaXN0IGlzIHRoZSBtZXRob2QgdG8gbWFuYWdlIGl0LgoKTmV4dCwgSSYjMzk7bGwgbG9vayBhdCB0aGUgYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYCBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgaG93IGB6Y29tcF9kZWNvbXByZXNzYCBpcyBhY3R1YWxseSB1c2VkLiBgZGVjb21wcmVzc19iZGV2X3BhZ2VgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgaW5pdGlhbGl6aW5nIGEgc2luZ2xlLWVudHJ5IHNjYXR0ZXJsaXN0LiBIb3dldmVyLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCB1c2VzIGEgMi1lbnRyeSBzY2F0dGVybGlzdCwgbWFwcyBvbmUgZW50cnkgdXNpbmcgYGttYXBfbG9jYWxfcGFnZWAsIGNvcGllcyBkYXRhLCBhbmQgdW5tYXBzLiBTbywgdGhlcmUmIzM5O3MgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGdvaW5nIG9uLCB3aGljaCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gYHJlYWRfY29tcHJlc3NlZF9wYWdlYCBhbHNvIHVzZXMgYSAyLWVudHJ5IHNjYXR0ZXJsaXN0IGFuZCBjYWxscyBgemNvbXBfZGVjb21wcmVzc2AuIEZpbmFsbHksIGByZWFkX2Zyb21fenNwb29sX3Jhd2AgdXNlcyBhIDItZW50cnkgc2NhdHRlcmxpc3QgYW5kIGRpcmVjdGx5IGNvcGllcyB0aGUgZGF0YSBmcm9tIHRoZSBzY2F0dGVybGlzdCB0byB0aGUgZGVzdGluYXRpb24gd2l0aCBgc2dfY29weV90b19idWZmZXJgIGFuZCB6ZXJvcyBvdXQgdGhlIHJlbWFpbmluZyBvZiB0aGUgcGFnZS4KCkNydWNpYWxseSwgdGhlIGZ1bmN0aW9ucyBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfc2dfZW5kYCB1c2VkIGluIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCBzZWVtIHRvIGJlIHJlbGV2YW50LiBUaGUgb2xkIGB6c19vYmpfcmVhZF9iZWdpbmAgYW5kIGB6c19vYmpfcmVhZF9lbmRgIGNhbGxzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gYG1tL3pzbWFsbG9jLmNgIGFuZCBgaW5jbHVkZS9saW51eC96c21hbGxvYy5oYC4gTGV0JiMzOTtzIG5vdyBjaGVjayB0aGUgY29kZSBvZiBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGluIGBtbS96c21hbGxvYy5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGluaXRpYWxpemluZyBgc2dgLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgdGhhdCBmdW5jdGlvbiBhbmQgZW5zdXJlIHRoZXJlJiMzOTtzIG5vIHdheSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBleHBvc2VkIGluIHRoZSBwcm9jZXNzIG9mIHNjYXR0ZXItZ2F0aGVyaW5nLCBtYXBwaW5nLCBvciBjb3B5aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c19vYmpfcmVhZF9zZ19iZWdpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venNtYWxsb2MuYz0xMTM1PUVYUE9SVF9TWU1CT0xfR1BMKHpzX2dldF90b3RhbF9wYWdlcyk7XG5tbS96c21hbGxvYy5jLTExMzYtXG5tbS96c21hbGxvYy5jOjExMzc6dm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG5tbS96c21hbGxvYy5jLTExMzgtXHRcdFx0ICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzaXplX3QgbWVtX2xlbilcbi0tXG5tbS96c21hbGxvYy5jLTExODEtfVxubW0venNtYWxsb2MuYzoxMTgyOkVYUE9SVF9TWU1CT0xfR1BMKHpzX29ial9yZWFkX3NnX2JlZ2luKTtcbm1tL3pzbWFsbG9jLmMtMTE4My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB6c19vYmpfcmVhZF9zZ19iZWdpbmAgaW4gYG1tL3pzbWFsbG9jLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgenNtYWxsb2MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzY2F0dGVyLWdhdGhlciByZWFkcyBhcmUgaW5pdGlhdGVkLiBUaGUgZnVuY3Rpb24gYHpzX29ial9yZWFkX3NnX2JlZ2luYCBpbiBgbW0venNtYWxsb2MuY2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHNldHRpbmcgdXAgYSBzY2F0dGVyLWdhdGhlciByZWFkIG9wZXJhdGlvbiB3aXRoaW4gdGhlIHpzbWFsbG9jIHN5c3RlbSBpcy4gSeKAmW0gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgaW5pdGlhbCBzZXR1cDogcGVyaGFwcyBhbGxvY2F0aW5nIHN0cnVjdHVyZXMsIHByZXBhcmluZyB0aGUgc2NhdHRlcmxpc3QsIGRldGVybWluaW5nIHBhZ2UgbG9jYXRpb25zLCBhbmQgbWF5YmUgZXZlbiBpbml0aWF0aW5nIHNvbWUga2luZCBvZiBJL08gcmVxdWVzdCBpZiBpdCYjMzk7cyBhc3luY2hyb25vdXMuIEtub3dpbmcgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgdHJhbnNmZXIgcGF0aCBhbmQgaG93IHpzbWFsbG9jIGludGVncmF0ZXMgd2l0aCB0aGUga2VybmVsJiMzOTtzIEkvTyBpbmZyYXN0cnVjdHVyZSBmb3IgZWZmaWNpZW50IHJlYWRzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdCBhbmQgbWFuYWdlIHRob3NlIHBhZ2UgcG9pbnRlcnMuIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzc6XHR2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbjExMzg6XHRcdFx0XHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKVxuMTEzOTpcdHtcbjExNDA6XHRcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbjExNDE6XHRcdHN0cnVjdCB6cGRlc2MgKnpwZGVzYztcbjExNDI6XHRcdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XG4xMTQzOlx0XHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcbjExNDQ6XHRcdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbjExNDU6XHRcbjExNDY6XHRcdC8qIEd1YXJhbnRlZSB3ZSBjYW4gZ2V0IHpzcGFnZSBmcm9tIGhhbmRsZSBzYWZlbHkgKi9cbjExNDc6XHRcdHJlYWRfbG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuMTE0ODpcdFx0b2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuMTE0OTpcdFx0b2JqX3RvX2xvY2F0aW9uKG9iaiwgXHUwMDI2enBkZXNjLCBcdTAwMjZvYmpfaWR4KTtcbjExNTA6XHRcdHpzcGFnZSA9IGdldF96c3BhZ2UoenBkZXNjKTtcbjExNTE6XHRcbjExNTI6XHRcdC8qIE1ha2Ugc3VyZSBtaWdyYXRpb24gZG9lc24mIzM5O3QgbW92ZSBhbnkgcGFnZXMgaW4gdGhpcyB6c3BhZ2UgKi9cbjExNTM6XHRcdHpzcGFnZV9yZWFkX2xvY2soenNwYWdlKTtcbjExNTQ6XHRcdHJlYWRfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4xMTU1Olx0XG4xMTU2Olx0XHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xuMTE1NzpcdFx0b2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtXHUwMDNlc2l6ZSAqIG9ial9pZHgpO1xuMTE1ODpcdFxuMTE1OTpcdFx0aWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpXG4xMTYwOlx0XHRcdG9mZiAmIzQzOz0gWlNfSEFORExFX1NJWkU7XG4xMTYxOlx0XG4xMTYyOlx0XHRpZiAob2ZmICYjNDM7IG1lbV9sZW4gXHUwMDNjPSBQQUdFX1NJWkUpIHtcbjExNjM6XHRcdFx0LyogdGhpcyBvYmplY3QgaXMgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiBhIHBhZ2UgKi9cbjExNjQ6XHRcdFx0c2dfaW5pdF90YWJsZShzZywgMSk7XG4xMTY1Olx0XHRcdHNnX3NldF9wYWdlKHNnLCB6cGRlc2NfcGFnZSh6cGRlc2MpLCBtZW1fbGVuLCBvZmYpO1xuMTE2NjpcdFx0fSBlbHNlIHtcbjExNjc6XHRcdFx0c2l6ZV90IHNpemVzWzJdO1xuMTE2ODpcdFxuMTE2OTpcdFx0XHQvKiB0aGlzIG9iamVjdCBzcGFucyB0d28gcGFnZXMgKi9cbjExNzA6XHRcdFx0c2l6ZXNbMF0gPSBQQUdFX1NJWkUgLSBvZmY7XG4xMTcxOlx0XHRcdHNpemVzWzFdID0gbWVtX2xlbiAtIHNpemVzWzBdO1xuMTE3MjpcdFxuMTE3MzpcdFx0XHRzZ19pbml0X3RhYmxlKHNnLCAyKTtcbjExNzQ6XHRcdFx0c2dfc2V0X3BhZ2Uoc2csIHpwZGVzY19wYWdlKHpwZGVzYyksIHNpemVzWzBdLCBvZmYpO1xuMTE3NTpcdFxuMTE3NjpcdFx0XHR6cGRlc2MgPSBnZXRfbmV4dF96cGRlc2MoenBkZXNjKTtcbjExNzc6XHRcdFx0c2cgPSBzZ19uZXh0KHNnKTtcbjExNzg6XHRcbjExNzk6XHRcdFx0c2dfc2V0X3BhZ2Uoc2csIHpwZGVzY19wYWdlKHpwZGVzYyksIHNpemVzWzFdLCAwKTtcbjExODA6XHRcdH1cbjExODE6XHR9XG4xMTgyOlx0RVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfc2dfYmVnaW4pO1xuMTE4MzpcdFxuMTE4NDpcdHZvaWQgenNfb2JqX3JlYWRfc2dfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSlcbjExODU6XHR7XG4xMTg2Olx0XHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjgKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogMTM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBacmFtL1pzbWFsbG9jIERlY29tcHJlc3Npb24gYW5kIFJlYWQgUGF0aHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhbmFseXNpcyBmb2N1c2VzIG9uIHRoZSBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGZ1bmN0aW9uIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgenJhbSBkZWNvbXByZXNzaW9uIGFuZCByZWFkIHBhdGhzLiBJIHNlZSB0aGF0IGB6c19vYmpfcmVhZF9zZ19iZWdpbmAgZXNzZW50aWFsbHkgd3JhcHMgYHNnX2luaXRfdGFibGVgLCBpbml0aWFsaXppbmcgc2NhdHRlcmxpc3QgYXJyYXlzLiBJIGV4YW1pbmVkIHRoZSByZWxldmFudCBjb2RlIGluIGB6cmFtX2Rydi5jYCBhbmQgYHpjb21wLmNgLCBzcGVjaWZpY2FsbHkgZnVuY3Rpb25zIGxpa2UgYGRlY29tcHJlc3NfYmRldl9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGByZWFkX2NvbXByZXNzZWRfcGFnZWAsIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIGFuZCBgemNvbXBfZGVjb21wcmVzc2AuIE15IHByaW1hcnkgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaG93IGl0IG1pZ2h0IGJlIGV4cG9zZWQgb3IgbGVhZCB0byBpc3N1ZXMgdGhhdCAqb25seSogS01TQU4gd291bGQgY2F0Y2guCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgYHNnYCBzY2F0dGVybGlzdCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCAqYWx3YXlzKiBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiAgYHNnX2luaXRfdGFibGVgIHplcm9lcyB0aGUgc2NhdHRlcmxpc3QgYXJyYXkgYW5kIGluaXRpYWxpemVzIGl0cyBlbnRyaWVzIHdpdGhpbiBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIG9yIGRpcmVjdGx5IGJ5IHRoZSBjYWxsZXJzLiAgSSBsb29rZWQgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgcmVxYCBzdHJ1Y3QgaW4gYHpjb21wX2RlY29tcHJlc3NgIGFuZCBpdCYjMzk7cyBhbHNvIHByb3Blcmx5IGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLiBGdXJ0aGVybW9yZSwgaW4gYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCwgdGhlIHJlbWFpbmluZyBwb3J0aW9uIG9mIHRoZSBwYWdlIGFmdGVyIGRhdGEgY29weSBpcyBjbGVhcmVkIHVzaW5nIGBtZW16ZXJvX3BhZ2VgLiAgVGhlIGRhdGEgYnVmZmVycyBpbnZvbHZlZCBhcmUgZWl0aGVyIHBvcHVsYXRlZCB0aHJvdWdoIGRlY29tcHJlc3Npb24gZnJvbSBjb21wcmVzc2VkIGRhdGEsIG9yIGFyZSBjb3BpZWQgZnJvbSB6c21hbGxvYyBwYWdlcy4KCk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHJlZmFjdG9yaW5nIHRvIHVzZSBzY2F0dGVybGlzdHMgZWxpbWluYXRlcyBhbnkgaW5oZXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4KCkxldCYjMzk7cyBkcmlsbCBkb3duOgoKKiAgICoqU2NhdHRlcmxpc3RzOioqIFRoZXkgYXJlIGluaXRpYWxpemVkIHZpYSBgc2dfaW5pdF90YWJsZSgpYC4KKiAgICoqRGF0YSBTb3VyY2VzOioqIERhdGEgY29tZXMgZWl0aGVyIGZyb20gZGVjb21wcmVzc2luZywgb3IgY29waWVkIGZyb20genNtYWxsb2MgcGFnZXMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdGhlIHJlYWQgcGF0aHMuCiogICAqKktNU0FOIENvbmNlcm5zOioqICBLTVNBTiBsb29rcyBmb3Igc3BlY2lmaWMgdHlwZXMgb2YgcHJvYmxlbXMuCiAgICAqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHRoYXQgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcy4KICAgICogICBObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgogICAgKiAgIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aXRoIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuCiAgICAqICAgTm8gYm91bmRzIGNoZWNraW5nIGxvZ2ljIHRoYXQgY291bGQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlc2UgYXJlIHRoZSBjb3JlIEtNU0FOIGZhaWx1cmUgc2NlbmFyaW9zLCBhbmQgSSBzZWUgbm9uZSBvZiB0aGVtIGhlcmUuIE1lbW9yeSBzYWZldHkgYnVncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBzY2F0dGVybGlzdCB0cmF2ZXJzYWwgcHJvYmxlbXMsIGFuZCBpbnZhbGlkIHVubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIFVCc2FuLgoKVGhlcmVmb3JlLCBhZnRlciBhIHRob3JvdWdoIGFuYWx5c2lzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTiB0byBiZSBlbmFibGVkIGluIHRoaXMgY29udGV4dC4gV2UgY2FuIGNvbmZpZGVudGx5IHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC4gVGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yaW5nLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IHRvb2xzIGhhdmUgdXMgY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxuXG5LZXkgb2JzZXJ2YXRpb25zOlxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxuMi4gVGhlIGBzdHJ1Y3QgemNvbXBfcmVxIHJlcWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBiZWZvcmUgcGFzc2luZyB0byB0aGUgZGVjb21wcmVzc2lvbiBjYWxsYmFjay5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcy5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxuXG5LZXkgb2JzZXJ2YXRpb25zOlxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxuMi4gVGhlIGBzdHJ1Y3QgemNvbXBfcmVxIHJlcWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBiZWZvcmUgcGFzc2luZyB0byB0aGUgZGVjb21wcmVzc2lvbiBjYWxsYmFjay5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGJyYW5jaGVkIG9uLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcy5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxuXG5UaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgdGhhdCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowNzozMS45ODc1NzkxNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA3Nzk3NjExMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9XUklURUJBQ0tcIixcbiAgICBcIlpTTUFMTE9DXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemNvbXBfZGVjb21wcmVzc1wiLFxuICAgIFwiZGVjb21wcmVzc19iZGV2X3BhZ2VcIixcbiAgICBcInJlYWRfY29tcHJlc3NlZF9wYWdlXCIsXG4gICAgXCJyZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VcIixcbiAgICBcInJlYWRfZnJvbV96c3Bvb2xfcmF3XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHpyYW0gcmVhZCBhbmQgZGVjb21wcmVzc2lvbiBwYXRoIHRvIHVzZSBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnYCkgdmlhIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9zZ19lbmQoKWAgcmF0aGVyIHRoYW4gcmF3IG1lbW9yeSBwb2ludGVycyBhbmQgYHpzX29ial9yZWFkX2JlZ2luKClgIC8gYHpzX29ial9yZWFkX2VuZCgpYC4gXFxuXFxuS2V5IG9ic2VydmF0aW9uczpcXG4xLiBBbGwgc3RhY2stYWxsb2NhdGVkIHNjYXR0ZXJsaXN0cyAoYHN0cnVjdCBzY2F0dGVybGlzdCBzZ1suLi5dYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHZpYSBgc2dfaW5pdF90YWJsZSgpYCB3aXRoaW4gYHpzX29ial9yZWFkX3NnX2JlZ2luKClgIG9yIGNhbGxlcnMgcHJpb3IgdG8gYmVpbmcgcGFzc2VkIG9yIGl0ZXJhdGVkIG92ZXIuXFxuMi4gVGhlIGBzdHJ1Y3QgemNvbXBfcmVxIHJlcWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyBiZWZvcmUgcGFzc2luZyB0byB0aGUgZGVjb21wcmVzc2lvbiBjYWxsYmFjay5cXG4zLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBicmFuY2hlZCBvbiwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBidWZmZXIgbGVuZ3Rocywgb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2Vzcywgb3IgaW5jb3JyZWN0IHNjYXR0ZXJsaXN0IG1hcHBpbmcvdW5tYXBwaW5nIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOLCBwYWdlIHRhYmxlIGRlYnVnZ2luZywgbG9ja2RlcCkuXFxuXFxuVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIHRoYXQgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHpjb21wIGRlY29tcHJlc3Npb24gYW5kIHpyYW0gcmVhZCBwYXRocyB0byB1c2Ugc2NhdHRlcmxpc3RzIHJhdGhlciB0aGFuIGNvbnRpZ3VvdXMgbWVtb3J5IHBvaW50ZXJzLCBoYW5kbGluZyBib3RoIHNpbmdsZS1wYWdlIG9iamVjdHMgdmlhIGttYXBfbG9jYWxfcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzIHZpYSBzZ19jb3B5X3RvX2J1ZmZlci4gVGhpcyBtb2RpZmllcyBkYXRhIGJ1ZmZlciBoYW5kbGluZyBhbmQgZGVjb21wcmVzc2lvbiBmbG93cyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbWFwcGluZyBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowNzozMS45ODc1ODU0MzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTU2ODMxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNjE5OWIyMWFhMzQyN2RkM2Q4ZGU5NGQ2NGViZTczOTI5MWIwMzU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTU6MDc6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xcbmluZGV4IDk3NGM0NjkxODg3ZTYuLjAyOGUyZjBmNTg3ZTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xcbkBAIC03LDYgKzcsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdWhvdHBsdWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hpZ2htZW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNmcy5oXFx1MDAzZVxcbiBcXG5AQCAtMTU4LDE3ICsxNjAsMzIgQEAgaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbiB9XFxuIFxcbiBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcXG4tXFx0XFx0ICAgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpXFxuK1xcdFxcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgemNvbXBfcmVxIHJlcSA9IHtcXG4tXFx0XFx0LnNyYyA9IHNyYyxcXG4gXFx0XFx0LmRzdCA9IGRzdCxcXG4gXFx0XFx0LnNyY19sZW4gPSBzcmNfbGVuLFxcbiBcXHRcXHQuZHN0X2xlbiA9IFBBR0VfU0laRSxcXG4gXFx0fTtcXG4rXFx0dm9pZCAqc3JjID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdG1pZ2h0X3NsZWVwKCk7XFxuLVxcdHJldHVybiBjb21wLVxcdTAwM2VvcHMtXFx1MDAzZWRlY29tcHJlc3MoY29tcC1cXHUwMDNlcGFyYW1zLCBcXHUwMDI2enN0cm0tXFx1MDAzZWN0eCwgXFx1MDAyNnJlcSk7XFxuK1xcbitcXHRpZiAoc2dfaXNfbGFzdChzZykpIHtcXG4rXFx0XFx0LyogdGhlIG9iamVjdCBpcyBjb250YWluZWQgd2l0aGluIG9uZSBwYWdlLCByZWFkIGl0IGluLXBsYWNlICovXFxuK1xcdFxcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7XFxuK1xcdFxcdHJlcS5zcmMgPSBzcmMgKyBzZy1cXHUwMDNlb2Zmc2V0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiB0aGUgb2JqZWN0IHNwYW5zIHR3byBwYWdlcywgbGluZWFyaXplIGl0IGludG8gbG9jYWwgY29weSAqL1xcbitcXHRcXHRzZ19jb3B5X3RvX2J1ZmZlcihzZywgMiwgenN0cm0tXFx1MDAzZWxvY2FsX2NvcHksIHNyY19sZW4pO1xcbitcXHRcXHRyZXEuc3JjID0genN0cm0tXFx1MDAzZWxvY2FsX2NvcHk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGNvbXAtXFx1MDAzZW9wcy1cXHUwMDNlZGVjb21wcmVzcyhjb21wLVxcdTAwM2VwYXJhbXMsIFxcdTAwMjZ6c3RybS1cXHUwMDNlY3R4LCBcXHUwMDI2cmVxKTtcXG4rXFx0aWYgKHNyYylcXG4rXFx0XFx0a3VubWFwX2xvY2FsKHNyYyk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIGludCB6Y29tcF9jcHVfdXBfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLmYzOGZkMzFmOWU0ZTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxcbkBAIC01LDYgKzUsOCBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuIFxcbitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7XFxuK1xcbiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVRcXHRJTlRfTUlOXFxuIFxcbiBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMge1xcbkBAIC05MSw2ICs5Myw2IEBAIHZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pO1xcbiBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuIFxcdFxcdCAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50ICpkc3RfbGVuKTtcXG4gaW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuLVxcdFxcdCAgICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcXG4rXFx0XFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcXG4gXFxuICNlbmRpZiAvKiBfWkNPTVBfSF8gKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbmluZGV4IGE5YjNiYjFkM2JlZjMuLjU0MzFiMTZmMmY0NWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xcbkBAIC0zMiw2ICszMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVob3RwbHVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWxfcmVhZF9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiBcXG5AQCAtMTM0Miw5ICsxMzQzLDkgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbiBcXHRpbnQgcmV0LCBwcmlvO1xcbi1cXHR2b2lkICpzcmM7XFxuIFxcbiBcXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xcbiBcXHQvKiBTaW5jZSBzbG90IHdhcyB1bmxvY2tlZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIHN0aWxsIFpSQU1fV0IgKi9cXG5AQCAtMTM2MywxMyArMTM2NCwxOCBAQCBzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0c2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpO1xcbiBcXHRwcmlvID0gZ2V0X3Nsb3RfY29tcF9wcmlvcml0eSh6cmFtLCBpbmRleCk7XFxuIFxcbitcXHRzZ19pbml0X3RhYmxlKHNnLCAxKTtcXG4rXFx0c2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIHNpemUsIDApO1xcbitcXG4gXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4tXFx0c3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbi1cXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBzaXplLFxcbitcXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsXFxuIFxcdFxcdFxcdCAgICAgICB6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuLVxcdGlmICghcmV0KVxcbi1cXHRcXHRjb3B5X3BhZ2Uoc3JjLCB6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuLVxcdGt1bm1hcF9sb2NhbChzcmMpO1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHR2b2lkICpkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuK1xcbitcXHRcXHRjb3B5X3BhZ2UoZHN0LCB6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuK1xcdFxcdGt1bm1hcF9sb2NhbChkc3QpO1xcbitcXHR9XFxuIFxcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xcbiBcXHRzbG90X3VubG9jayh6cmFtLCBpbmRleCk7XFxuIFxcbkBAIC0yMDg2LDE1ICsyMDkyLDE5IEBAIHN0YXRpYyBpbnQgcmVhZF9zYW1lX2ZpbGxlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gc3RhdGljIGludCByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07XFxuIFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbiBcXHR2b2lkICpzcmMsICpkc3Q7XFxuIFxcbiBcXHRoYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xcbi1cXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIE5VTEwpO1xcbitcXHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgUEFHRV9TSVpFKTtcXG4rXFx0LyogYW4gaW5jb21wcmVzc2libGUgb2JqZWN0IG5ldmVyIHNwYW5zIHR3byBwYWdlcyAqL1xcbitcXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpO1xcbiBcXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuIFxcdGNvcHlfcGFnZShkc3QsIHNyYyk7XFxuIFxcdGt1bm1hcF9sb2NhbChkc3QpO1xcbi1cXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBzcmMpO1xcbitcXHRrdW5tYXBfbG9jYWwoc3JjKTtcXG4rXFx0enNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjEwMyw5ICsyMTEzLDEwIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcXG4rXFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xcbiBcXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuLVxcdHZvaWQgKnNyYywgKmRzdDtcXG4rXFx0dm9pZCAqZHN0O1xcbiBcXHRpbnQgcmV0LCBwcmlvO1xcbiBcXG4gXFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcXG5AQCAtMjExMywxMiArMjEyNCwxMSBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0cHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpO1xcbiBcXG4gXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG4tXFx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSxcXG4tXFx0XFx0XFx0XFx0enN0cm0tXFx1MDAzZWxvY2FsX2NvcHkpO1xcbitcXHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7XFxuIFxcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4tXFx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwgZHN0KTtcXG4rXFx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNnLCBzaXplLCBkc3QpO1xcbiBcXHRrdW5tYXBfbG9jYWwoZHN0KTtcXG4tXFx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7XFxuK1xcdHpzX29ial9yZWFkX3NnX2VuZCh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcXG4gXFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0yMTI4LDI1ICsyMTM4LDIzIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleClcXG4ge1xcbi1cXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XFxuK1xcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcXG4gXFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbi1cXHR2b2lkICpzcmM7XFxuK1xcdHZvaWQgKmRzdDtcXG4gXFxuIFxcdGhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XFxuIFxcdHNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFdlIG5lZWQgdG8gZ2V0IHN0cmVhbSBqdXN0IGZvciAtXFx1MDAzZWxvY2FsX2NvcHkgYnVmZmVyLCBpblxcbi1cXHQgKiBjYXNlIGlmIG9iamVjdCBzcGFucyB0d28gcGh5c2ljYWwgcGFnZXMuIE5vIGRlY29tcHJlc3Npb25cXG4tXFx0ICogdGFrZXMgcGxhY2UgaGVyZSwgYXMgd2UgcmVhZCByYXcgY29tcHJlc3NlZCBkYXRhLlxcbitcXHQgKiBObyBkZWNvbXByZXNzaW9uIHRha2VzIHBsYWNlIGhlcmUsIHdlIGNvcHkgb3V0IHJhdyBjb21wcmVzc2VkXFxuK1xcdCAqIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgZGVzdGluYXRpb24gcGFnZS5cXG4gXFx0ICovXFxuLVxcdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVxcdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xcbi1cXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxcbi1cXHRcXHRcXHRcXHR6c3RybS1cXHUwMDNlbG9jYWxfY29weSk7XFxuLVxcdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XFxuLVxcdHpzX29ial9yZWFkX2VuZCh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xcbi1cXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcXG4rXFx0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpO1xcbitcXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuK1xcdHNnX2NvcHlfdG9fYnVmZmVyKHNnLCBzZ19uZW50cyhzZyksIGRzdCwgc2l6ZSk7XFxuK1xcdGt1bm1hcF9sb2NhbChkc3QpO1xcbitcXHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XFxuIFxcbiBcXHRtZW16ZXJvX3BhZ2UocGFnZSwgc2l6ZSwgUEFHRV9TSVpFIC0gc2l6ZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcXG5pbmRleCA0Nzg0MTBjODgwYjFmLi41YjcyOThhNTAyNmI4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxcbkBAIC00MCwxMCArNDAsNiBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XFxuIFxcbiB2b2lkIHpzX3Bvb2xfc3RhdHMoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCB6c19wb29sX3N0YXRzICpzdGF0cyk7XFxuIFxcbi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuLVxcdFxcdFxcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KTtcXG4tdm9pZCB6c19vYmpfcmVhZF9lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxcbi1cXHRcXHQgICAgIHNpemVfdCBtZW1fbGVuLCB2b2lkICpoYW5kbGVfbWVtKTtcXG4gdm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pO1xcbiB2b2lkIHpzX29ial9yZWFkX3NnX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpO1xcbmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuY1xcbmluZGV4IDgyNTAyMmE3YTMyOGYuLjExYmUzN2M0MzE3MTggMTAwNjQ0XFxuLS0tIGEvbW0venNtYWxsb2MuY1xcbisrKyBiL21tL3pzbWFsbG9jLmNcXG5AQCAtMTEzNCw4MyArMTEzNCw2IEBAIHVuc2lnbmVkIGxvbmcgenNfZ2V0X3RvdGFsX3BhZ2VzKHN0cnVjdCB6c19wb29sICpwb29sKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHpzX2dldF90b3RhbF9wYWdlcyk7XFxuIFxcbi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuLVxcdFxcdFxcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KVxcbi17XFxuLVxcdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcXG4tXFx0c3RydWN0IHpwZGVzYyAqenBkZXNjO1xcbi1cXHR1bnNpZ25lZCBsb25nIG9iaiwgb2ZmO1xcbi1cXHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcXG4tXFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xcbi1cXHR2b2lkICphZGRyO1xcbi1cXG4tXFx0LyogR3VhcmFudGVlIHdlIGNhbiBnZXQgenNwYWdlIGZyb20gaGFuZGxlIHNhZmVseSAqL1xcbi1cXHRyZWFkX2xvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbi1cXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XFxuLVxcdG9ial90b19sb2NhdGlvbihvYmosIFxcdTAwMjZ6cGRlc2MsIFxcdTAwMjZvYmpfaWR4KTtcXG4tXFx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xcbi1cXG4tXFx0LyogTWFrZSBzdXJlIG1pZ3JhdGlvbiBkb2Vzbid0IG1vdmUgYW55IHBhZ2VzIGluIHRoaXMgenNwYWdlICovXFxuLVxcdHpzcGFnZV9yZWFkX2xvY2soenNwYWdlKTtcXG4tXFx0cmVhZF91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbi1cXG4tXFx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcXG4tXFx0b2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtXFx1MDAzZXNpemUgKiBvYmpfaWR4KTtcXG4tXFxuLVxcdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxcbi1cXHRcXHRvZmYgKz0gWlNfSEFORExFX1NJWkU7XFxuLVxcbi1cXHRpZiAob2ZmICsgbWVtX2xlbiBcXHUwMDNjPSBQQUdFX1NJWkUpIHtcXG4tXFx0XFx0LyogdGhpcyBvYmplY3QgaXMgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiBhIHBhZ2UgKi9cXG4tXFx0XFx0YWRkciA9IGttYXBfbG9jYWxfenBkZXNjKHpwZGVzYyk7XFxuLVxcdFxcdGFkZHIgKz0gb2ZmO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRzaXplX3Qgc2l6ZXNbMl07XFxuLVxcbi1cXHRcXHQvKiB0aGlzIG9iamVjdCBzcGFucyB0d28gcGFnZXMgKi9cXG4tXFx0XFx0c2l6ZXNbMF0gPSBQQUdFX1NJWkUgLSBvZmY7XFxuLVxcdFxcdHNpemVzWzFdID0gbWVtX2xlbiAtIHNpemVzWzBdO1xcbi1cXHRcXHRhZGRyID0gbG9jYWxfY29weTtcXG4tXFxuLVxcdFxcdG1lbWNweV9mcm9tX3BhZ2UoYWRkciwgenBkZXNjX3BhZ2UoenBkZXNjKSxcXG4tXFx0XFx0XFx0XFx0IG9mZiwgc2l6ZXNbMF0pO1xcbi1cXHRcXHR6cGRlc2MgPSBnZXRfbmV4dF96cGRlc2MoenBkZXNjKTtcXG4tXFx0XFx0bWVtY3B5X2Zyb21fcGFnZShhZGRyICsgc2l6ZXNbMF0sXFxuLVxcdFxcdFxcdFxcdCB6cGRlc2NfcGFnZSh6cGRlc2MpLFxcbi1cXHRcXHRcXHRcXHQgMCwgc2l6ZXNbMV0pO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gYWRkcjtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9iZWdpbik7XFxuLVxcbi12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuLVxcdFxcdCAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pXFxuLXtcXG4tXFx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xcbi1cXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2M7XFxuLVxcdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XFxuLVxcdHVuc2lnbmVkIGludCBvYmpfaWR4O1xcbi1cXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XFxuLVxcbi1cXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XFxuLVxcdG9ial90b19sb2NhdGlvbihvYmosIFxcdTAwMjZ6cGRlc2MsIFxcdTAwMjZvYmpfaWR4KTtcXG4tXFx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xcbi1cXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xcbi1cXHRvZmYgPSBvZmZzZXRfaW5fcGFnZShjbGFzcy1cXHUwMDNlc2l6ZSAqIG9ial9pZHgpO1xcbi1cXG4tXFx0aWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpXFxuLVxcdFxcdG9mZiArPSBaU19IQU5ETEVfU0laRTtcXG4tXFxuLVxcdGlmIChvZmYgKyBtZW1fbGVuIFxcdTAwM2M9IFBBR0VfU0laRSkge1xcbi1cXHRcXHRoYW5kbGVfbWVtIC09IG9mZjtcXG4tXFx0XFx0a3VubWFwX2xvY2FsKGhhbmRsZV9tZW0pO1xcbi1cXHR9XFxuLVxcbi1cXHR6c3BhZ2VfcmVhZF91bmxvY2soenNwYWdlKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9lbmQpO1xcbi1cXG4gdm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXFxuIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDc6MzMuNDQ0MzQxMTYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4NzQ2MDgxMzA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX1dSSVRFQkFDS1wiLFxuICAgIFwiWlNNQUxMT0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF9kZWNvbXByZXNzXCIsXG4gICAgXCJkZWNvbXByZXNzX2JkZXZfcGFnZVwiLFxuICAgIFwicmVhZF9jb21wcmVzc2VkX3BhZ2VcIixcbiAgICBcInJlYWRfaW5jb21wcmVzc2libGVfcGFnZVwiLFxuICAgIFwicmVhZF9mcm9tX3pzcG9vbF9yYXdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHpjb21wIGRlY29tcHJlc3Npb24gYW5kIHpyYW0gcmVhZCBwYXRocyB0byB1c2Ugc2NhdHRlcmxpc3RzIHJhdGhlciB0aGFuIGNvbnRpZ3VvdXMgbWVtb3J5IHBvaW50ZXJzLCBoYW5kbGluZyBib3RoIHNpbmdsZS1wYWdlIG9iamVjdHMgdmlhIGttYXBfbG9jYWxfcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzIHZpYSBzZ19jb3B5X3RvX2J1ZmZlci4gVGhpcyBtb2RpZmllcyBkYXRhIGJ1ZmZlciBoYW5kbGluZyBhbmQgZGVjb21wcmVzc2lvbiBmbG93cyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbWFwcGluZyBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY2MTk5YjIxYWEzNDI3ZGQzZDhkZTk0ZDY0ZWJlNzM5MjkxYjAzNTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE1OjA3OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuaW5kZXggOTc0YzQ2OTE4ODdlNi4uMDI4ZTJmMGY1ODdlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuY1xuQEAgLTcsNiArNyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdWhvdHBsdWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZ2htZW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNmcy5oXHUwMDNlXG4gXG5AQCAtMTU4LDE3ICsxNjAsMzIgQEAgaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIH1cbiBcbiBpbnQgemNvbXBfZGVjb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbi1cdFx0ICAgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpXG4rXHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfcmVxIHJlcSA9IHtcbi1cdFx0LnNyYyA9IHNyYyxcbiBcdFx0LmRzdCA9IGRzdCxcbiBcdFx0LnNyY19sZW4gPSBzcmNfbGVuLFxuIFx0XHQuZHN0X2xlbiA9IFBBR0VfU0laRSxcbiBcdH07XG4rXHR2b2lkICpzcmMgPSBOVUxMO1xuK1x0aW50IHJldDtcbiBcbiBcdG1pZ2h0X3NsZWVwKCk7XG4tXHRyZXR1cm4gY29tcC1cdTAwM2VvcHMtXHUwMDNlZGVjb21wcmVzcyhjb21wLVx1MDAzZXBhcmFtcywgXHUwMDI2enN0cm0tXHUwMDNlY3R4LCBcdTAwMjZyZXEpO1xuK1xuK1x0aWYgKHNnX2lzX2xhc3Qoc2cpKSB7XG4rXHRcdC8qIHRoZSBvYmplY3QgaXMgY29udGFpbmVkIHdpdGhpbiBvbmUgcGFnZSwgcmVhZCBpdCBpbi1wbGFjZSAqL1xuK1x0XHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpO1xuK1x0XHRyZXEuc3JjID0gc3JjICsgc2ctXHUwMDNlb2Zmc2V0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogdGhlIG9iamVjdCBzcGFucyB0d28gcGFnZXMsIGxpbmVhcml6ZSBpdCBpbnRvIGxvY2FsIGNvcHkgKi9cbitcdFx0c2dfY29weV90b19idWZmZXIoc2csIDIsIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHksIHNyY19sZW4pO1xuK1x0XHRyZXEuc3JjID0genN0cm0tXHUwMDNlbG9jYWxfY29weTtcbitcdH1cbitcbitcdHJldCA9IGNvbXAtXHUwMDNlb3BzLVx1MDAzZWRlY29tcHJlc3MoY29tcC1cdTAwM2VwYXJhbXMsIFx1MDAyNnpzdHJtLVx1MDAzZWN0eCwgXHUwMDI2cmVxKTtcbitcdGlmIChzcmMpXG4rXHRcdGt1bm1hcF9sb2NhbChzcmMpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gaW50IHpjb21wX2NwdV91cF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbmluZGV4IDgxYTBmM2Y2ZmY0ODcuLmYzOGZkMzFmOWU0ZTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmhcbkBAIC01LDYgKzUsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiBcbitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7XG4rXG4gI2RlZmluZSBaQ09NUF9QQVJBTV9OT1RfU0VUXHRJTlRfTUlOXG4gXG4gc3RydWN0IGRlZmxhdGVfcGFyYW1zIHtcbkBAIC05MSw2ICs5Myw2IEBAIHZvaWQgemNvbXBfc3RyZWFtX3B1dChzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0pO1xuIGludCB6Y29tcF9jb21wcmVzcyhzdHJ1Y3QgemNvbXAgKmNvbXAsIHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSxcbiBcdFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xuIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCk7XG4rXHRcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCk7XG4gXG4gI2VuZGlmIC8qIF9aQ09NUF9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbmluZGV4IGE5YjNiYjFkM2JlZjMuLjU0MzFiMTZmMmY0NWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbkBAIC0zMiw2ICszMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFydF9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2F0dGVybGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsX3JlYWRfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuIFxuQEAgLTEzNDIsOSArMTM0Myw5IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4gXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4rXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbiBcdGludCByZXQsIHByaW87XG4tXHR2b2lkICpzcmM7XG4gXG4gXHRzbG90X2xvY2soenJhbSwgaW5kZXgpO1xuIFx0LyogU2luY2Ugc2xvdCB3YXMgdW5sb2NrZWQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBzdGlsbCBaUkFNX1dCICovXG5AQCAtMTM2MywxMyArMTM2NCwxOCBAQCBzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdHNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTtcbiBcdHByaW8gPSBnZXRfc2xvdF9jb21wX3ByaW9yaXR5KHpyYW0sIGluZGV4KTtcbiBcbitcdHNnX2luaXRfdGFibGUoc2csIDEpO1xuK1x0c2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIHNpemUsIDApO1xuK1xuIFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuLVx0c3JjID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuLVx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBzaXplLFxuK1x0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsXG4gXHRcdFx0ICAgICAgIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0aWYgKCFyZXQpXG4tXHRcdGNvcHlfcGFnZShzcmMsIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuLVx0a3VubWFwX2xvY2FsKHNyYyk7XG4rXHRpZiAoIXJldCkge1xuK1x0XHR2b2lkICpkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4rXG4rXHRcdGNvcHlfcGFnZShkc3QsIHpzdHJtLVx1MDAzZWxvY2FsX2NvcHkpO1xuK1x0XHRrdW5tYXBfbG9jYWwoZHN0KTtcbitcdH1cbiBcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuIFx0c2xvdF91bmxvY2soenJhbSwgaW5kZXgpO1xuIFxuQEAgLTIwODYsMTUgKzIwOTIsMTkgQEAgc3RhdGljIGludCByZWFkX3NhbWVfZmlsbGVkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIHN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbitcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dm9pZCAqc3JjLCAqZHN0O1xuIFxuIFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbi1cdHNyYyA9IHpzX29ial9yZWFkX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBOVUxMKTtcbitcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIFBBR0VfU0laRSk7XG4rXHQvKiBhbiBpbmNvbXByZXNzaWJsZSBvYmplY3QgbmV2ZXIgc3BhbnMgdHdvIHBhZ2VzICovXG4rXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2Uoc2dfcGFnZShzZykpO1xuIFx0ZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0Y29weV9wYWdlKGRzdCwgc3JjKTtcbiBcdGt1bm1hcF9sb2NhbChkc3QpO1xuLVx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgUEFHRV9TSVpFLCBzcmMpO1xuK1x0a3VubWFwX2xvY2FsKHNyYyk7XG4rXHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yMTAzLDkgKzIxMTMsMTAgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbitcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTtcbiBcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG4tXHR2b2lkICpzcmMsICpkc3Q7XG4rXHR2b2lkICpkc3Q7XG4gXHRpbnQgcmV0LCBwcmlvO1xuIFxuIFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbkBAIC0yMTEzLDEyICsyMTI0LDExIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpO1xuIFxuIFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXHUwMDNlY29tcHNbcHJpb10pO1xuLVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxuLVx0XHRcdFx0enN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4rXHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcbiBcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbi1cdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNyYywgc2l6ZSwgZHN0KTtcbitcdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNnLCBzaXplLCBkc3QpO1xuIFx0a3VubWFwX2xvY2FsKGRzdCk7XG4tXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xuK1x0enNfb2JqX3JlYWRfc2dfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSk7XG4gXHR6Y29tcF9zdHJlYW1fcHV0KHpzdHJtKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMjEyOCwyNSArMjEzOCwyMyBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuLVx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi1cdHZvaWQgKnNyYztcbitcdHZvaWQgKmRzdDtcbiBcbiBcdGhhbmRsZSA9IGdldF9zbG90X2hhbmRsZSh6cmFtLCBpbmRleCk7XG4gXHRzaXplID0gZ2V0X3Nsb3Rfc2l6ZSh6cmFtLCBpbmRleCk7XG4gXG4gXHQvKlxuLVx0ICogV2UgbmVlZCB0byBnZXQgc3RyZWFtIGp1c3QgZm9yIC1cdTAwM2Vsb2NhbF9jb3B5IGJ1ZmZlciwgaW5cbi1cdCAqIGNhc2UgaWYgb2JqZWN0IHNwYW5zIHR3byBwaHlzaWNhbCBwYWdlcy4gTm8gZGVjb21wcmVzc2lvblxuLVx0ICogdGFrZXMgcGxhY2UgaGVyZSwgYXMgd2UgcmVhZCByYXcgY29tcHJlc3NlZCBkYXRhLlxuK1x0ICogTm8gZGVjb21wcmVzc2lvbiB0YWtlcyBwbGFjZSBoZXJlLCB3ZSBjb3B5IG91dCByYXcgY29tcHJlc3NlZFxuK1x0ICogZGF0YSBkaXJlY3RseSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuIFx0ICovXG4tXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1taUkFNX1BSSU1BUllfQ09NUF0pO1xuLVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLFxuLVx0XHRcdFx0enN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4tXHRtZW1jcHlfdG9fcGFnZShwYWdlLCAwLCBzcmMsIHNpemUpO1xuLVx0enNfb2JqX3JlYWRfZW5kKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2l6ZSwgc3JjKTtcbi1cdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuK1x0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgc2l6ZSk7XG4rXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4rXHRzZ19jb3B5X3RvX2J1ZmZlcihzZywgc2dfbmVudHMoc2cpLCBkc3QsIHNpemUpO1xuK1x0a3VubWFwX2xvY2FsKGRzdCk7XG4rXHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcbiBcdG1lbXplcm9fcGFnZShwYWdlLCBzaXplLCBQQUdFX1NJWkUgLSBzaXplKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcbmluZGV4IDQ3ODQxMGM4ODBiMWYuLjViNzI5OGE1MDI2YjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmhcbisrKyBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxuQEAgLTQwLDEwICs0MCw2IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTtcbiBcbiB2b2lkIHpzX3Bvb2xfc3RhdHMoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHN0cnVjdCB6c19wb29sX3N0YXRzICpzdGF0cyk7XG4gXG4tdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHRcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KTtcbi12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4tXHRcdCAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pO1xuIHZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuIFx0XHRcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pO1xuIHZvaWQgenNfb2JqX3JlYWRfc2dfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmNcbmluZGV4IDgyNTAyMmE3YTMyOGYuLjExYmUzN2M0MzE3MTggMTAwNjQ0XG4tLS0gYS9tbS96c21hbGxvYy5jXG4rKysgYi9tbS96c21hbGxvYy5jXG5AQCAtMTEzNCw4MyArMTEzNCw2IEBAIHVuc2lnbmVkIGxvbmcgenNfZ2V0X3RvdGFsX3BhZ2VzKHN0cnVjdCB6c19wb29sICpwb29sKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpO1xuIFxuLXZvaWQgKnpzX29ial9yZWFkX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbi1cdFx0XHRzaXplX3QgbWVtX2xlbiwgdm9pZCAqbG9jYWxfY29weSlcbi17XG4tXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XG4tXHRzdHJ1Y3QgenBkZXNjICp6cGRlc2M7XG4tXHR1bnNpZ25lZCBsb25nIG9iaiwgb2ZmO1xuLVx0dW5zaWduZWQgaW50IG9ial9pZHg7XG4tXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4tXHR2b2lkICphZGRyO1xuLVxuLVx0LyogR3VhcmFudGVlIHdlIGNhbiBnZXQgenNwYWdlIGZyb20gaGFuZGxlIHNhZmVseSAqL1xuLVx0cmVhZF9sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4tXHRvYmogPSBoYW5kbGVfdG9fb2JqKGhhbmRsZSk7XG4tXHRvYmpfdG9fbG9jYXRpb24ob2JqLCBcdTAwMjZ6cGRlc2MsIFx1MDAyNm9ial9pZHgpO1xuLVx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xuLVxuLVx0LyogTWFrZSBzdXJlIG1pZ3JhdGlvbiBkb2Vzbid0IG1vdmUgYW55IHBhZ2VzIGluIHRoaXMgenNwYWdlICovXG4tXHR6c3BhZ2VfcmVhZF9sb2NrKHpzcGFnZSk7XG4tXHRyZWFkX3VubG9jayhcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuLVxuLVx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcbi1cdG9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLVx1MDAzZXNpemUgKiBvYmpfaWR4KTtcbi1cbi1cdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxuLVx0XHRvZmYgKz0gWlNfSEFORExFX1NJWkU7XG4tXG4tXHRpZiAob2ZmICsgbWVtX2xlbiBcdTAwM2M9IFBBR0VfU0laRSkge1xuLVx0XHQvKiB0aGlzIG9iamVjdCBpcyBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIGEgcGFnZSAqL1xuLVx0XHRhZGRyID0ga21hcF9sb2NhbF96cGRlc2MoenBkZXNjKTtcbi1cdFx0YWRkciArPSBvZmY7XG4tXHR9IGVsc2Uge1xuLVx0XHRzaXplX3Qgc2l6ZXNbMl07XG4tXG4tXHRcdC8qIHRoaXMgb2JqZWN0IHNwYW5zIHR3byBwYWdlcyAqL1xuLVx0XHRzaXplc1swXSA9IFBBR0VfU0laRSAtIG9mZjtcbi1cdFx0c2l6ZXNbMV0gPSBtZW1fbGVuIC0gc2l6ZXNbMF07XG4tXHRcdGFkZHIgPSBsb2NhbF9jb3B5O1xuLVxuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGFkZHIsIHpwZGVzY19wYWdlKHpwZGVzYyksXG4tXHRcdFx0XHQgb2ZmLCBzaXplc1swXSk7XG4tXHRcdHpwZGVzYyA9IGdldF9uZXh0X3pwZGVzYyh6cGRlc2MpO1xuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGFkZHIgKyBzaXplc1swXSxcbi1cdFx0XHRcdCB6cGRlc2NfcGFnZSh6cGRlc2MpLFxuLVx0XHRcdFx0IDAsIHNpemVzWzFdKTtcbi1cdH1cbi1cbi1cdHJldHVybiBhZGRyO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9iZWdpbik7XG4tXG4tdm9pZCB6c19vYmpfcmVhZF9lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHQgICAgIHNpemVfdCBtZW1fbGVuLCB2b2lkICpoYW5kbGVfbWVtKVxuLXtcbi1cdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbi1cdHN0cnVjdCB6cGRlc2MgKnpwZGVzYztcbi1cdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XG4tXHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcbi1cdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbi1cbi1cdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbi1cdG9ial90b19sb2NhdGlvbihvYmosIFx1MDAyNnpwZGVzYywgXHUwMDI2b2JqX2lkeCk7XG4tXHR6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7XG4tXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xuLVx0b2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtXHUwMDNlc2l6ZSAqIG9ial9pZHgpO1xuLVxuLVx0aWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpXG4tXHRcdG9mZiArPSBaU19IQU5ETEVfU0laRTtcbi1cbi1cdGlmIChvZmYgKyBtZW1fbGVuIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4tXHRcdGhhbmRsZV9tZW0gLT0gb2ZmO1xuLVx0XHRrdW5tYXBfbG9jYWwoaGFuZGxlX21lbSk7XG4tXHR9XG4tXG4tXHR6c3BhZ2VfcmVhZF91bmxvY2soenNwYWdlKTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfZW5kKTtcbi1cbiB2b2lkIHpzX29ial9yZWFkX3NnX2JlZ2luKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbiBcdFx0XHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA3OjMzLjQ0NDM0MzQwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2OTU3NDM5NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGNoYW5nZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW1wYWN0IGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMuIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGZ1enppbmcgaXMgZXZlbiB3YXJyYW50ZWQsIGFuZCBpZiBzbywgd2hhdCBzeW1ib2xzIHRvIHRhcmdldCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIG1vc3QgcmVsZXZhbnQuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoLCBJIHNlZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBaUkFNIGhhbmRsZXMgZGVjb21wcmVzc2lvbiBhbmQgZGF0YSByZWFkcywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgdXNlIG9mIGBzY2F0dGVybGlzdGAgc3RydWN0dXJlcy4gVGhlIHNpZ25hdHVyZSBjaGFuZ2UgaW4gYHpjb21wX2RlY29tcHJlc3NgIGlzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dC4gSW5zdGVhZCBvZiBhIGRpcmVjdCBwb2ludGVyLCBpdCBub3cgYWNjZXB0cyBhIGBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnYC4gVGhpcyBpbXBsaWVzIGEgc2hpZnQgdG93YXJkcyBoYW5kbGluZyBkYXRhIGluIG5vbi1jb250aWd1b3VzIG1lbW9yeSByZWdpb25zLCB3aGljaCBjYW4gb2Z0ZW4gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGJ1ZmZlciBib3VuZGFyaWVzIGFuZCBkYXRhIGFsaWdubWVudC4gVGhlIGNvbmRpdGlvbmFsIGNoZWNrLCBgaWYgKHNnX2lzX2xhc3Qoc2cpKWAsIGFuZCB0aGUgdXNlIG9mIGBzZ19jb3B5X3RvX2J1ZmZlcmAgYXJlIGtleS4gV2UnbGwgbmVlZCB0byBleHBsb3JlIGhvdyB0aGlzIHNjYXR0ZXJsaXN0IGlzIHBvcHVsYXRlZCBhbmQgaG93IHRoZSBgc3JjX2xlbmAgaXMgdXNlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZm9jYWwgcG9pbnQuXG5cblRoZSByaXBwbGUgZWZmZWN0IGlzIGV2aWRlbnQgaW4gYHpyYW1fZHJ2LmNgLCB3aGVyZSBzZXZlcmFsIGZ1bmN0aW9ucyBsaWtlIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCBhcmUgdXBkYXRlZCB0byB1dGlsaXplIHRoZXNlIGBzY2F0dGVybGlzdGAgb3BlcmF0aW9ucy4gVGhlIHJlbW92YWwgb2YgdGhlIGB6c19vYmpfcmVhZF9iZWdpbmAgYW5kIGB6c19vYmpfcmVhZF9lbmRgIGZ1bmN0aW9ucyBhbmQgdGhlIHJlcGxhY2VtZW50cyB3aXRoIGB6c19vYmpfcmVhZF9zZ19iZWdpbmAgYW5kIGB6c19vYmpfcmVhZF9zZ19lbmRgIGluIGB6cmFtX2Rydi5jYCBhbmQgYHpzbWFsbG9jLmNgIGluZGljYXRlIGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmV3IGZ1bmN0aW9ucyBoYW5kbGUgZXJyb3JzIGFuZCBlZGdlIGNhc2VzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHNjYXR0ZXJsaXN0IGlzIG1hbGZvcm1lZCwgaGFzIGluY29ycmVjdCBsZW5ndGhzLCBvciBwb2ludHMgdG8gaW52YWxpZCBtZW1vcnkgcmVnaW9ucz8gVGhlc2UgYXJlIGNsYXNzaWMgZnV6emluZyB0YXJnZXRzLlxuXG5CZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvZGUgd2l0aGluIGB6c21hbGxvYy5jYCBhbmQgYHpyYW1fZHJ2LmNgLCB0byBkbyBzb21lIHN0YXRpYyBhbmFseXNpcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBtYXkgYmUgcmV2ZWFsZWQgdGhyb3VnaCB0b29scy4gVGhlIGNoYW5nZXMgaW4gZGF0YSBoYW5kbGluZywgaW4gcGFydGljdWxhciwgd2lsbCByZXF1aXJlIGNhcmVmdWwgc2NydXRpbnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyMC40MDE3ODU4MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MDMxNzA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c19vYmpfcmVhZF9zZ19iZWdpblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMDkyPXN0YXRpYyBpbnQgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIwOTktXFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTAwOlxcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBQQUdFX1NJWkUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMDEtXFx0LyogYW4gaW5jb21wcmVzc2libGUgb2JqZWN0IG5ldmVyIHNwYW5zIHR3byBwYWdlcyAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjExMj1zdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMjYtXFx0enN0cm0gPSB6Y29tcF9zdHJlYW1fZ2V0KHpyYW0tXFx1MDAzZWNvbXBzW3ByaW9dKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTI3OlxcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTI4LVxcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMzg9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sX3JhdyhzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTUyLVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxNTM6XFx0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNTQtXFx0ZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oPTQxPXZvaWQgenNfcG9vbF9zdGF0cyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHpzX3Bvb2xfc3RhdHMgKnN0YXRzKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtNDItXFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjQzOnZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaC00NC1cXHRcXHRcXHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTEzNT1FWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpO1xcbm1tL3pzbWFsbG9jLmMtMTEzNi1cXG5tbS96c21hbGxvYy5jOjExMzc6dm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxubW0venNtYWxsb2MuYy0xMTM4LVxcdFxcdFxcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXFxuLS1cXG5tbS96c21hbGxvYy5jLTExODEtfVxcbm1tL3pzbWFsbG9jLmM6MTE4MjpFWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9zZ19iZWdpbik7XFxubW0venNtYWxsb2MuYy0xMTgzLVxcbi0tXFxubW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05MzMtXFx0bXV0ZXhfbG9jayhcXHUwMDI2YWNvbXBfY3R4LVxcdTAwM2VtdXRleCk7XFxubW0venN3YXAuYzo5MzQ6XFx0enNfb2JqX3JlYWRfc2dfYmVnaW4ocG9vbC1cXHUwMDNlenNfcG9vbCwgZW50cnktXFx1MDAzZWhhbmRsZSwgaW5wdXQsIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbm1tL3pzd2FwLmMtOTM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyMi45OTIxMzMxNzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcxNzIzNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBacmFtIENvbXByZXNzaW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgWnJhbSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIHByb2Nlc3MsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jYC4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGB6Y29tcF9kZWNvbXByZXNzYCBmdW5jdGlvbiDigJMgdGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29tcHJlc3NlZCBkYXRhIGlzIGFjdHVhbGx5IGJyb3VnaHQgYmFjayB0byBsaWZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFsZ29yaXRobXMgd29ya3MsIGhvdyB0aGUgbWVtb3J5IGlzIGhhbmRsZWQsIGFuZCB3aGF0IGVycm9yIGNvbmRpdGlvbnMgY291bGQgYXJpc2UuXG5cbkJleW9uZCB0aGF0IGNvcmUgZnVuY3Rpb24sIHRob3VnaCwgSSBrbm93IEkgY2FuJ3QgbG9vayBhdCB0aGluZ3MgaW4gYSB2YWN1dW0uIFRvIGZ1bGx5IGdyYXNwIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcywgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9ibG9jay96cmFtL0tjb25maWdgLiBUaGlzIHdpbGwgc2hvdyBtZSB3aGF0IGJ1aWxkLXRpbWUgb3B0aW9ucyBjb250cm9sIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG1zIHRoYXQgYXJlIGF2YWlsYWJsZSwgYXMgd2VsbCBhcyB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBwcm92aWRlIGNvbnRleHQgZm9yIHRoZSBjb2RlLiBLbm93aW5nIHRoaXMgaGVscHMgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyNS4yNjM4NTkyMjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MzY1NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpSQU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyNS4zNDE0MDM2NzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc4NDEyNjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgWlJBTSdzIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgWlJBTSdzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBgS2NvbmZpZ2AgZW50cnkgZm9yIFpSQU0gYW5kIHRyYWNlIGl0IGJhY2sgdGhyb3VnaCBhbnkgb3RoZXIgcmVsZXZhbnQgb3B0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBlbmFibGVkLCB3aGF0IG90aGVyIGZlYXR1cmVzIG1pZ2h0IG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBjdXN0b21pemF0aW9ucyBJIG1pZ2h0IHdhbnQgdG8gcGVyZm9ybS4gSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgY29tcHJlc3Npb24gYWxnb3JpdGhtcywgYmxvY2sgbGF5ZXIgY29tcG9uZW50cywgb3IgZXZlbiBzcGVjaWZpYyBDUFUgZmVhdHVyZXMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSB3aG9sZSBrZXJuZWwuIExldOKAmXMgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEyOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjI3LjYxOTgyMTMwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBaUkFNXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgIDU6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIGNhbGxlZCAvZGV2L3pyYW1YIChYID0gMCwgMSwgLi4uKS5cXG4gICA4OlxcdFxcdCAgUGFnZXMgd3JpdHRlbiB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluIG1lbW9yeVxcbiAgIDk6XFx0XFx0ICBpdHNlbGYuIFRoZXNlIGRpc2tzIGFsbG93IHZlcnkgZmFzdCBJL08gYW5kIGNvbXByZXNzaW9uIHByb3ZpZGVzXFxuICAxMDpcXHRcXHQgIGdvb2QgYW1vdW50cyBvZiBtZW1vcnkgc2F2aW5ncy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJdCBoYXMgc2V2ZXJhbCB1c2UgY2FzZXMsIGZvciBleGFtcGxlOiAvdG1wIHN0b3JhZ2UsIHVzZSBhcyBzd2FwXFxuICAxMzpcXHRcXHQgIGRpc2tzIGFuZCBtYXliZSBtYW55IG1vcmUuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvenJhbS5yc3QgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuICAxODpcXHRcXHRib29sIFxcXCJsejQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAgMjA6XFx0XFx0c2VsZWN0IExaNF9DT01QUkVTU1xcbiAgMjE6XFx0XFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcXG4gIDI0OlxcdFxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDI2OlxcdFxcdHNlbGVjdCBMWjRIQ19DT01QUkVTU1xcbiAgMjc6XFx0XFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwienN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICAzMjpcXHRcXHRzZWxlY3QgWlNURF9DT01QUkVTU1xcbiAgMzM6XFx0XFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG4gIDM2OlxcdFxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlJBTVxcbiAgMzg6XFx0XFx0c2VsZWN0IFpMSUJfREVGTEFURVxcbiAgMzk6XFx0XFx0c2VsZWN0IFpMSUJfSU5GTEFURVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbiAgNDI6XFx0XFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFpSQU1cXG4gIDQ0OlxcdFxcdHNlbGVjdCA4NDJfQ09NUFJFU1NcXG4gIDQ1OlxcdFxcdHNlbGVjdCA4NDJfREVDT01QUkVTU1xcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICA0OTpcXHRcXHRkZWZfYm9vbCAhWlJBTV9CQUNLRU5EX0xaNCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDUwOlxcdFxcdFxcdCFaUkFNX0JBQ0tFTkRfWlNURCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0RFRkxBVEUgXFx1MDAyNlxcdTAwMjYgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODoyNy42MTk5OTU1MDFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjY2MDk4MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIHRoZSBaU01BTExPQyBLY29uZmlnKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBaU01BTExPQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBzZXR0aW5ncyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSByZWxldmFudCBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgWlNNQUxMT0MgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlIChhcmNoaXRlY3R1cmUsIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBldGMuKSwgYW5kIHdoYXQgdGhlIHZhcmlvdXMga25vYnMgSSBoYXZlIHRvIHR1bmUgYXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIGJlZm9yZSBJIG1vdmUgb24gdG8gbW9yZSBkZXRhaWxlZCBjb2RlIGFuYWx5c2lzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNTAsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjMwLjI4NjA5NjUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc2OTE3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTTUFMTE9DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxuLS1cXG5tbS9LY29uZmlnLTEyNC1cXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0NcXG5tbS9LY29uZmlnLTEyNi1cXHR0cmlzdGF0ZVxcbi0tXFxubW0vS2NvbmZpZz0xMzE9Y29tbWVudCBcXFwiWnNtYWxsb2MgaXMgYSBjb21tb24gYmFja2VuZCBhbGxvY2F0b3IgZm9yIHpzd2FwIFxcdTAwMjYgenJhbVxcXCJcXG5tbS9LY29uZmlnLTEzMi1cXG5tbS9LY29uZmlnOjEzMzpjb25maWcgWlNNQUxMT0NfU1RBVFxcbm1tL0tjb25maWctMTM0LVxcdGJvb2wgXFxcIkV4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEtXFxubW0vS2NvbmZpZzoxNDI6Y29uZmlnIFpTTUFMTE9DX0NIQUlOX1NJWkVcXG5tbS9LY29uZmlnLTE0My1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHBoeXNpY2FsIHBhZ2VzIHBlci16c3BhZ2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjMwLjQwMzc5NzQ0MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODgyMDY0Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWlJBTSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW4uIEFscmlnaHQsIGl0IGxvb2tzIGxpa2Ugd2UncmUgbG9va2luZyBhdCBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgIGFuZCBzcGVjaWZpY2FsbHkgYHpjb21wX2RlY29tcHJlc3NgLiBUaGVuLCBvdmVyIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY2AsIHdlJ3JlIHRvdWNoaW5nIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YC4gQW5kLCBub3Qgc3VycHJpc2luZ2x5LCBgbW0venNtYWxsb2MuY2AgaXMgYmVpbmcgbW9kaWZpZWQsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiBgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIOKAkyBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSAqcmVhY2hhYmxlKj8gWWVzISBUaGlzIGlzIFpSQU0sIGAvZGV2L3pyYW1YYC4gSXQncyBhIGNvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSwgYW5kIGRlZmluaXRlbHkgc29tZXRoaW5nIEkndmUgd29ya2VkIHdpdGguIEVhc3kgdG8gc2V0IHVwIGluIFFFTVUsIHBlcmZlY3QgZm9yIHN5emthbGxlci5cblxuU28sIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgaG93IFpSQU0gZGVjb21wcmVzc2VzIHBhZ2VzIGFuZCByZWFkcyBmcm9tIHpzbWFsbG9jLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gZGVhbGluZyB3aXRoIHNjYXR0ZXJsaXN0cywgYHN0cnVjdCBzY2F0dGVybGlzdCAqc2dgLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgb2JqZWN0cyB0aGF0IGVpdGhlciBzcGFuIG11bHRpcGxlIHBhZ2VzIG9yIGFyZSBmdWxseSBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIHBhZ2UuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBgemNvbXBfZGVjb21wcmVzc2AsIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YC5cblxuQWxyaWdodCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNhbGwgaGllcmFyY2h5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGFuZCB0aGUgb3RoZXJzIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY2AuIE5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MywiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODozOC4yODU4NjQ4NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MjM4MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfY29tcHJlc3NlZF9wYWdlfHJlYWRfaW5jb21wcmVzc2libGVfcGFnZXxyZWFkX2Zyb21fenNwb29sX3Jhd3xkZWNvbXByZXNzX2JkZXZfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ5MC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEwMzA9c3RhdGljIGludCB6cmFtX3dyaXRlYmFja19zbG90cyhzdHJ1Y3QgenJhbSAqenJhbSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODUtXFx0XFx0aWYgKHpyYW0tXFx1MDAzZWNvbXByZXNzZWRfd2IpXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTA4NjpcXHRcXHRcXHRlcnIgPSByZWFkX2Zyb21fenNwb29sX3Jhdyh6cmFtLCByZXEtXFx1MDAzZXBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMDg3LVxcdFxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTEyMzY9c3RhdGljIHNzaXplX3Qgd3JpdGViYWNrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNDEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTM0MjpzdGF0aWMgaW50IGRlY29tcHJlc3NfYmRldl9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzQzLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzg1PXN0YXRpYyB2b2lkIHpyYW1fZGVmZXJyZWRfZGVjb21wcmVzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMzkyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEzOTM6XFx0cmV0ID0gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzOTQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTE0OTE9c3RhdGljIGludCByZWFkX2Zyb21fYmRldl9zeW5jKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDctXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MTUwODpcXHRyZXR1cm4gZGVjb21wcmVzc19iZGV2X3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTE1MDktfVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjA4MT1zdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMDkxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIwOTI6c3RhdGljIGludCByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIwOTMtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTExLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxMTI6c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjExMy1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzNy0jaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTM4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxNjk9c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNzYtXFx0aWYgKCF0ZXN0X3Nsb3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9IVUdFKSlcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTc3OlxcdFxcdHJldHVybiByZWFkX2NvbXByZXNzZWRfcGFnZSh6cmFtLCBwYWdlLCBpbmRleCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE3OC1cXHRlbHNlXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE3OTpcXHRcXHRyZXR1cm4gcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTgwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDg6MzguMzczMTI5NTA0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NDUwMTgzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqRGl2aW5nIERlZXAgaW50byBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoZXNlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkcyBhcmUgYmVpbmcgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgWlNQb29sIHJlYWQgb3BlcmF0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgcmVhZF9mcm9tX3pzcG9vbF9yYXdgIGZ1bmN0aW9uOyBJJ20gZ29pbmcgdG8gc2NydXRpbml6ZSBpdHMgdXNlIG9mIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBwYXJ0aWN1bGFybHkgbGluZSAyMTM3LiBJJ20gbG9va2luZyBmb3IgYCNpZiBkZWZpbmVkIENPTkZJR19aUkFNX1dSSVRFQkFDS2AuIFRoaXMgaXMgY3JpdGljYWwuIFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUuXG5cbk5leHQsIEknbGwgbW92ZSBvbiB0byBleGFtaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbiBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZlYXR1cmUgc2V0IGNoYW5nZXMgd2l0aCByZXNwZWN0IHRvIGRpZmZlcmVudCBjb21waWxhdGlvbiBvcHRpb25zLiBJIGtub3cgdGhlc2UgZ3VhcmRzIHJlcHJlc2VudCBkaXN0aW5jdCwgb3B0aW9uYWwgcGF0aHMgdGhlIGNvZGUgY2FuIHRha2UuIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGd1YXJkcyBhcmUgcHJvcGVybHkgaW1wbGVtZW50ZWQgYmFzZWQgb24gdGhlIGJyb2FkZXIgc3lzdGVtIHNldHVwLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eSBpcyBjb21waWxlZCBpbnRvIHRoZSBpbWFnZSBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzYyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDg6NDMuMDE4MTUxMjU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTM3ODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWYuKkNPTkZJR19aUkFNX1dSSVRFQkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFydGlhbF9pbyhzdHJ1Y3QgYmlvX3ZlYyAqYnZlYylcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjU6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLIHx8IGRlZmluZWQgQ09ORklHX1pSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNi1zdHJ1Y3QgenJhbV9wcF9zbG90IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODUtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg2OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODctI2RlZmluZSBJTlZBTElEX0JERVZfQkxPQ0tcXHRcXHQofjBVTClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMTI9c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTM2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIxMzc6I2lmIGRlZmluZWQgQ09ORklHX1pSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzOC1zdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMDg9c3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDA5OiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDEwLXN0YXRpYyBERVZJQ0VfQVRUUl9STyhiZF9zdGF0KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTMwMjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnpyYW1fZGlza19hdHRyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMzAzMi1cXHRcXHUwMDI2ZGV2X2F0dHJfY29tcF9hbGdvcml0aG0uYXR0cixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzozMDMzOiNpZmRlZiBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDM0LVxcdFxcdTAwMjZkZXZfYXR0cl9iZF9zdGF0LmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0zMDU5PXN0YXRpYyBpbnQgenJhbV9hZGQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwOTctXFx0aW5pdF9yd3NlbShcXHUwMDI2enJhbS1cXHUwMDNlZGV2X2xvY2spO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjMwOTg6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwOTktXFx0enJhbS1cXHUwMDNld2JfYmF0Y2hfc2l6ZSA9IDMyO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2Lmg9OTM9c3RydWN0IHpyYW1fc3RhdHMge1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmgtMTAzLVxcdGF0b21pYzY0X3QgbWlzc19mcmVlO1xcdFxcdC8qIG5vLiBvZiBtaXNzZWQgZnJlZSAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oOjEwNDojaWZkZWZcXHRDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xMDUtXFx0YXRvbWljNjRfdCBiZF9jb3VudDtcXHRcXHQvKiBuby4gb2YgcGFnZXMgaW4gYmFja2luZyBkZXZpY2UgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oPTEyMT1zdHJ1Y3QgenJhbSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaC0xNDYtXFx0Ym9vbCBjbGFpbTsgLyogUHJvdGVjdGVkIGJ5IGRpc2stXFx1MDAzZW9wZW5fbXV0ZXggKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuaDoxNDc6I2lmZGVmIENPTkZJR19aUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5oLTE0OC1cXHRzdHJ1Y3QgZmlsZSAqYmFja2luZ19kZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjQzLjEwNzUzNDI5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjY3MzI1MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIFpSQU0ncyBEZWNvbXByZXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgYGRlY29tcHJlc3NfYmRldl9wYWdlYCBhbmQgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCwgYm90aCBrZXkgY29tcG9uZW50cyBvZiB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbSwgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19aUkFNX1dSSVRFQkFDS2AuIFRoZSBjb3JlIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgIGFuZCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYXJlIHVuY29uZGl0aW9uYWxseSBwcmVzZW50IGluIGB6cmFtX2Rydi5jYCwgYW5kIHRoZSBhY3R1YWwgZGVjb21wcmVzc2lvbiBhbGdvcml0aG0sIGB6Y29tcF9kZWNvbXByZXNzYCwgbGl2ZXMgaW4gYHpjb21wLmNgLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBgWlJBTWAgaXRzZWxmIHNlbGVjdHMgYFpTTUFMTE9DYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEFuZCwgYXMgYW50aWNpcGF0ZWQsIGBaUkFNX1dSSVRFQkFDS2AgaGluZ2VzIG9uIGBaUkFNYCBiZWluZyBlbmFibGVkLiBEaWdnaW5nIGRlZXBlciBpbnRvIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2AsIEkgc2VlIHRoYXQgYFpSQU1gIHJlcXVpcmVzIGBCTE9DS2AsIGBTWVNGU2AsIGFuZCBgTU1VYC4gYFpSQU1fV1JJVEVCQUNLYCB0aGVuIGRlcGVuZHMgb24gYFpSQU1gLiBBbGwgbWFrZXMgc2Vuc2UuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHN5bWJvbCB2aXNpYmlsaXR5LiAgYHpjb21wX2RlY29tcHJlc3NgIGlzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGdvb2QuICBgZGVjb21wcmVzc19iZGV2X3BhZ2VgLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2AgYXJlIGFsbCBzdGF0aWMuIFRoaXMgdHJpZ2dlcnMgYSBzcGVjaWZpYyB0aG91Z2h0OyBjYW4gSSBzdGlsbCBsZXZlcmFnZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGZvciBteSBwdXJwb3Nlcz8gQWgsIHllcywgdGhleSBzaG91bGQgYmUgYWRkcmVzc2FibGUuIFN0YXRpYyBmdW5jdGlvbnMgaW4gQyBmaWxlcyBhcmUgZmluZSBmb3Igc3l6a2FsbGVyIHN5bWJvbCBjb3ZlcmFnZSBhbmQgZm9jdXMgc3ltYm9scywgYmVjYXVzZSB0aGV5IHN0aWxsIGhhdmUgc3ltYm9scyBpbiB2bWxpbnV4LCB1bmxlc3MgdGhleSdyZSBjb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gaGVhZGVyIGZpbGVzLCBidXQgSSBkb24ndCBzZWUgdGhhdCBoZXJlLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBgcmVhZF9mcm9tX3pzcG9vbGAgYW5kIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIG9yIGxvb2sgZm9yIGFueSBvdGhlciBkaXJlY3QgZW50cnkgcG9pbnRzIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZWNvbXByZXNzaW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjUwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjQ4LjM3NDg2Mzk0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MzI0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9mcm9tX3pzcG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQ1Mz1zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00ODgtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDg5OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ5MC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0OTE6c3RhdGljIGludCByZWFkX2Zyb21fenNwb29sKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00OTItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MTAzMD1zdGF0aWMgaW50IHpyYW1fd3JpdGViYWNrX3Nsb3RzKHN0cnVjdCB6cmFtICp6cmFtLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTA4NS1cXHRcXHRpZiAoenJhbS1cXHUwMDNlY29tcHJlc3NlZF93YilcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoxMDg2OlxcdFxcdFxcdGVyciA9IHJlYWRfZnJvbV96c3Bvb2xfcmF3KHpyYW0sIHJlcS1cXHUwMDNlcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEwODctXFx0XFx0ZWxzZVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEwODg6XFx0XFx0XFx0ZXJyID0gcmVhZF9mcm9tX3pzcG9vbCh6cmFtLCByZXEtXFx1MDAzZXBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0xMDg5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTEyPXN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjEzNy0jaWYgZGVmaW5lZCBDT05GSUdfWlJBTV9XUklURUJBQ0tcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTM4OnN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxMzktXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleClcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNjgtICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjE2OTpzdGF0aWMgaW50IHJlYWRfZnJvbV96c3Bvb2woc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxNzAtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMTgyPXN0YXRpYyBpbnQgenJhbV9yZWFkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjE4OS1cXHRcXHQvKiBTbG90IHNob3VsZCBiZSBsb2NrZWQgdGhyb3VnaCBvdXQgdGhlIGZ1bmN0aW9uIGNhbGwgKi9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTkwOlxcdFxcdHJldCA9IHJlYWRfZnJvbV96c3Bvb2woenJhbSwgcGFnZSwgaW5kZXgpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIxOTEtXFx0XFx0c2xvdF91bmxvY2soenJhbSwgaW5kZXgpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9MjQ0Nz1zdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdW5zaWduZWQgbG9uZyBpbmRleCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3MjpcXHRyZXQgPSByZWFkX2Zyb21fenNwb29sKHpyYW0sIHBhZ2UsIGluZGV4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDczLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjQ4LjQyOTMwMjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMzg2Mjg0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBoZXJlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoaXMgYHpjb21wX2RlY29tcHJlc3NgIGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgKndoZXJlKiBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBpdHMgaW52b2NhdGlvbi4gU28sIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgYnkgYGRlY29tcHJlc3NfYmRldl9wYWdlYCBhbmQgYHJlYWRfY29tcHJlc3NlZF9wYWdlYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuIEFyZSB0aG9zZSB0aGUgKm9ubHkqIHR3byBmdW5jdGlvbnMgdGhhdCBjYWxsIGB6Y29tcF9kZWNvbXByZXNzYD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIHBhdGhzIG9yIGxlc3Mgb2J2aW91cyBjYWxsIHNpdGVzLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb250ZXh0IG9mIGl0cyBvcGVyYXRpb24gYW5kIHRoZSBkZXBlbmRlbmNpZXMgaW52b2x2ZWQgaW4gdGhlIGRlY29tcHJlc3Npb24gcHJvY2Vzcy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGZvciBhbnkgb3RoZXIgY2FsbGVycyBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ3OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA4OjUyLjU2NzkzNTA4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2ODM0Mjk5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6Y29tcF9kZWNvbXByZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jPTE0ND1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYy0xNjEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmM6MTYyOmludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jLTE2My1cXHRcXHQgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBzcmNfbGVuLCB2b2lkICpkc3QpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaD05Mz1pbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXFxuZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmgtOTQtXFx0XFx0ICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgKmRzdF9sZW4pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oOjk1OmludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxcbmRyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oLTk2LVxcdFxcdCAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0xMzQyPXN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMTM3MC1cXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cXHUwMDNlY29tcHNbcHJpb10pO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjEzNzE6XFx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVxcdTAwM2Vjb21wc1twcmlvXSwgenN0cm0sIHNnLCBzaXplLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTEzNzItXFx0XFx0XFx0ICAgICAgIHpzdHJtLVxcdTAwM2Vsb2NhbF9jb3B5KTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIxMTI9c3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTI4LVxcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMTI5OlxcdHJldCA9IHpjb21wX2RlY29tcHJlc3MoenJhbS1cXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSwgZHN0KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMTMwLVxcdGt1bm1hcF9sb2NhbChkc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowODo1NS4wMzYyODY2NzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0NjYwNjYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBBc3Nlc3NtZW50OiBaUkFNIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB3aXRoaW4gdGhlIGB6cmFtYCBhbmQgYHpzbWFsbG9jYCBzdWJzeXN0ZW1zLiBJIHNlZSB0aGF0IGl0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgemNvbXBfZGVjb21wcmVzc2AgaW4gYHpjb21wLmNgLCB3aGljaCBpcyB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsb2dpYywgYW5kIGEgY2x1c3RlciBvZiBmdW5jdGlvbnMgd2l0aGluIGB6cmFtX2Rydi5jYDogYGRlY29tcHJlc3NfYmRldl9wYWdlYCwgYHJlYWRfaW5jb21wcmVzc2libGVfcGFnZWAsIGByZWFkX2NvbXByZXNzZWRfcGFnZWAsIGFuZCBgcmVhZF9mcm9tX3pzcG9vbF9yYXdgLiAgQWRkaXRpb25hbGx5LCBpdCdzIHJlbW92aW5nIHNvbWUgbG93LWxldmVsIHJlYWQgZnVuY3Rpb25zIChgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYCkgZnJvbSBgenNtYWxsb2NgLCB3aGljaCBpcyBpbnRlcmVzdGluZy5cblxuVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzZXZlcmFsIHN5bWJvbHMgYXMgY3JpdGljYWwgZm9yIG15IGZ1enppbmcgY2FtcGFpZ246IGB6Y29tcF9kZWNvbXByZXNzYCwgdGhlIHZhcmlvdXMgYHJlYWRfKmAgZnVuY3Rpb25zLCBhbmQgYW55dGhpbmcgcmVsYXRlZCB0byB0aG9zZSBmdW5jdGlvbnMuXG5cbk5vdywgY29uZmlndXJhdGlvbi4gIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpSQU1gLCBgWlJBTV9XUklURUJBQ0tgLCBhbmQgYFpTTUFMTE9DYCBhcmUgYWxsIGVuYWJsZWQgZHVyaW5nIG15IGZ1enppbmcgcnVucy4gIFRoZSBkZXBlbmRlbmNpZXMgY2hlY2sgb3V0OyBgWlJBTWAgc2VsZWN0cyBgWlNNQUxMT0NgIGFuZCBgWlJBTV9XUklURUJBQ0tgIGRlcGVuZHMgb24gYFpSQU1gLiAgTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5UaGUgYmlnIHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enphYmxlPyAgQWJzb2x1dGVseSwgYW5kIGl0J3MgYSBqdWljeSB0YXJnZXQuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyBtZW1vcnkgaXMgaGFuZGxlZCB3aXRoaW4gYHpyYW1gIGFuZCBgenNtYWxsb2NgLiBJdCdzIG1lc3Npbmcgd2l0aCBtZW1vcnkgY29weWluZywgd2hpY2ggaXMgYWx3YXlzIGEgcmVkIGZsYWcsIGFzIHdlbGwgYXMgbWFwcGluZyAodXNpbmcgYGttYXBfbG9jYWxfcGFnZWApLCBzY2F0dGVybGlzdCBoYW5kbGluZywgYnVmZmVyIGxlbmd0aHMsIGFuZCBob3cgZGVjb21wcmVzc2lvbiBpbnB1dCBpcyBwcm9jZXNzZWQsICphY3Jvc3MgcGFnZSBib3VuZGFyaWVzKi4gIEFsbCBvZiB0aGlzIGlzIHZlcnkgc2lnbmlmaWNhbnQgYW5kIGNvdWxkIGludHJvZHVjZSBzb21lIHNlcmlvdXMgYnVncy4gQSBidWZmZXIgb3ZlcmZsb3cgaXMgbW9yZSB0aGFuIGxpa2VseSB3aXRoIGNyb3NzIHBhZ2Ugb2JqZWN0cywgcGFnZSB1bm1hcHBpbmcgY291bGQgYmUgYSBwcm9ibGVtLCBjb3JydXB0aW9uLCBhbmQgdGhlIHN5c3RlbSBjb3VsZCBwYW5pYyBpZiB0aGVyZSBpcyBhIHByb2JsZW0uIEdpdmVuIHRoaXMsIGFuZCB0aGUgY2hhbmdlcyBJIHNlZSwgdGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgYW5hbHlzaXMgYWxzbyBhbGlnbnMgd2l0aCB0aGUgcHJlZGVmaW5lZCBndWlkZWxpbmVzLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZS4gVGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBsaXN0ZWQgKGBaUkFNYCwgYFpSQU1fV1JJVEVCQUNLYCwgYFpTTUFMTE9DYCkuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGVyZS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZCAtIHN3aXRjaGluZyB0byBzY2F0dGVybGlzdCBBUElzIGluc3RlYWQgb2YgdXNpbmcgY29udGlndW91cyBwb2ludGVycyBpcyBjb21wbGV4LiAgVGhlcmUncyBhbHNvIHRoZSBjaGFsbGVuZ2Ugb2YgaGFuZGxpbmcgYm90aCBzaW5nbGUtcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzLiBJdCBhbGwgYWRkcyB1cCB0byBhIGNsZWFyIGp1c3RpZmljYXRpb24uXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMZXQncyBnZXQgdGhpcyBjYW1wYWlnbiBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM1MiwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDk6MDAuNzgyODk2MTg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMjU0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX1dSSVRFQkFDS1wiLFxuICAgIFwiWlNNQUxMT0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6Y29tcF9kZWNvbXByZXNzXCIsXG4gICAgXCJkZWNvbXByZXNzX2JkZXZfcGFnZVwiLFxuICAgIFwicmVhZF9jb21wcmVzc2VkX3BhZ2VcIixcbiAgICBcInJlYWRfaW5jb21wcmVzc2libGVfcGFnZVwiLFxuICAgIFwicmVhZF9mcm9tX3pzcG9vbF9yYXdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHpjb21wIGRlY29tcHJlc3Npb24gYW5kIHpyYW0gcmVhZCBwYXRocyB0byB1c2Ugc2NhdHRlcmxpc3RzIHJhdGhlciB0aGFuIGNvbnRpZ3VvdXMgbWVtb3J5IHBvaW50ZXJzLCBoYW5kbGluZyBib3RoIHNpbmdsZS1wYWdlIG9iamVjdHMgdmlhIGttYXBfbG9jYWxfcGFnZSBhbmQgY3Jvc3MtcGFnZSBvYmplY3RzIHZpYSBzZ19jb3B5X3RvX2J1ZmZlci4gVGhpcyBtb2RpZmllcyBkYXRhIGJ1ZmZlciBoYW5kbGluZyBhbmQgZGVjb21wcmVzc2lvbiBmbG93cyBpbiByZWFjaGFibGUgY29kZSBwYXRocywgd2FycmFudGluZyBmdXp6aW5nIGZvciBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgbWFwcGluZyBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fV1JJVEVCQUNLXCIsXG4gICAgXCJaU01BTExPQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpjb21wX2RlY29tcHJlc3NcIixcbiAgICBcImRlY29tcHJlc3NfYmRldl9wYWdlXCIsXG4gICAgXCJyZWFkX2NvbXByZXNzZWRfcGFnZVwiLFxuICAgIFwicmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlXCIsXG4gICAgXCJyZWFkX2Zyb21fenNwb29sX3Jhd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgemNvbXAgZGVjb21wcmVzc2lvbiBhbmQgenJhbSByZWFkIHBhdGhzIHRvIHVzZSBzY2F0dGVybGlzdHMgcmF0aGVyIHRoYW4gY29udGlndW91cyBtZW1vcnkgcG9pbnRlcnMsIGhhbmRsaW5nIGJvdGggc2luZ2xlLXBhZ2Ugb2JqZWN0cyB2aWEga21hcF9sb2NhbF9wYWdlIGFuZCBjcm9zcy1wYWdlIG9iamVjdHMgdmlhIHNnX2NvcHlfdG9fYnVmZmVyLiBUaGlzIG1vZGlmaWVzIGRhdGEgYnVmZmVyIGhhbmRsaW5nIGFuZCBkZWNvbXByZXNzaW9uIGZsb3dzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCB3YXJyYW50aW5nIGZ1enppbmcgZm9yIHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBtYXBwaW5nIGJ1Z3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA5OjAwLjkwNTE1ODk0NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NjIxNjc5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowOTowMC45MDU3NDkwNTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMTg2MTU3MTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxcblxcbktleSBvYnNlcnZhdGlvbnM6XFxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxcbjIuIFRoZSBgc3RydWN0IHpjb21wX3JlcSByZXFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRlY29tcHJlc3Npb24gY2FsbGJhY2suXFxuMy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjYxOTliMjFhYTM0MjdkZDNkOGRlOTRkNjRlYmU3MzkyOTFiMDM1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTU6MDc6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG5pbmRleCA5NzRjNDY5MTg4N2U2Li4wMjhlMmYwZjU4N2UzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5jXG5AQCAtNyw2ICs3LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1aG90cGx1Zy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2ZzLmhcdTAwM2VcbiBcbkBAIC0xNTgsMTcgKzE2MCwzMiBAQCBpbnQgemNvbXBfY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4gfVxuIFxuIGludCB6Y29tcF9kZWNvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuLVx0XHQgICAgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IHNyY19sZW4sIHZvaWQgKmRzdClcbitcdFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9yZXEgcmVxID0ge1xuLVx0XHQuc3JjID0gc3JjLFxuIFx0XHQuZHN0ID0gZHN0LFxuIFx0XHQuc3JjX2xlbiA9IHNyY19sZW4sXG4gXHRcdC5kc3RfbGVuID0gUEFHRV9TSVpFLFxuIFx0fTtcbitcdHZvaWQgKnNyYyA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuIFxuIFx0bWlnaHRfc2xlZXAoKTtcbi1cdHJldHVybiBjb21wLVx1MDAzZW9wcy1cdTAwM2VkZWNvbXByZXNzKGNvbXAtXHUwMDNlcGFyYW1zLCBcdTAwMjZ6c3RybS1cdTAwM2VjdHgsIFx1MDAyNnJlcSk7XG4rXG4rXHRpZiAoc2dfaXNfbGFzdChzZykpIHtcbitcdFx0LyogdGhlIG9iamVjdCBpcyBjb250YWluZWQgd2l0aGluIG9uZSBwYWdlLCByZWFkIGl0IGluLXBsYWNlICovXG4rXHRcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7XG4rXHRcdHJlcS5zcmMgPSBzcmMgKyBzZy1cdTAwM2VvZmZzZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiB0aGUgb2JqZWN0IHNwYW5zIHR3byBwYWdlcywgbGluZWFyaXplIGl0IGludG8gbG9jYWwgY29weSAqL1xuK1x0XHRzZ19jb3B5X3RvX2J1ZmZlcihzZywgMiwgenN0cm0tXHUwMDNlbG9jYWxfY29weSwgc3JjX2xlbik7XG4rXHRcdHJlcS5zcmMgPSB6c3RybS1cdTAwM2Vsb2NhbF9jb3B5O1xuK1x0fVxuK1xuK1x0cmV0ID0gY29tcC1cdTAwM2VvcHMtXHUwMDNlZGVjb21wcmVzcyhjb21wLVx1MDAzZXBhcmFtcywgXHUwMDI2enN0cm0tXHUwMDNlY3R4LCBcdTAwMjZyZXEpO1xuK1x0aWYgKHNyYylcbitcdFx0a3VubWFwX2xvY2FsKHNyYyk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgemNvbXBfY3B1X3VwX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmggYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuaW5kZXggODFhMGYzZjZmZjQ4Ny4uZjM4ZmQzMWY5ZTRlMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96Y29tcC5oXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0vemNvbXAuaFxuQEAgLTUsNiArNSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuIFxuK3N0cnVjdCBzY2F0dGVybGlzdDtcbitcbiAjZGVmaW5lIFpDT01QX1BBUkFNX05PVF9TRVRcdElOVF9NSU5cbiBcbiBzdHJ1Y3QgZGVmbGF0ZV9wYXJhbXMge1xuQEAgLTkxLDYgKzkzLDYgQEAgdm9pZCB6Y29tcF9zdHJlYW1fcHV0KHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybSk7XG4gaW50IHpjb21wX2NvbXByZXNzKHN0cnVjdCB6Y29tcCAqY29tcCwgc3RydWN0IHpjb21wX3N0cm0gKnpzdHJtLFxuIFx0XHQgICBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCAqZHN0X2xlbik7XG4gaW50IHpjb21wX2RlY29tcHJlc3Moc3RydWN0IHpjb21wICpjb21wLCBzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm0sXG4tXHRcdCAgICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcbitcdFx0ICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgc3JjX2xlbiwgdm9pZCAqZHN0KTtcbiBcbiAjZW5kaWYgLyogX1pDT01QX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuaW5kZXggYTliM2JiMWQzYmVmMy4uNTQzMWIxNmYyZjQ1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcHVob3RwbHVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJ0X3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWxfcmVhZF9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gXG5AQCAtMTM0Miw5ICsxMzQzLDkgQEAgc3RhdGljIGludCBkZWNvbXByZXNzX2JkZXZfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGluZGV4KVxuIHtcbiBcdHN0cnVjdCB6Y29tcF9zdHJtICp6c3RybTtcbitcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuIFx0aW50IHJldCwgcHJpbztcbi1cdHZvaWQgKnNyYztcbiBcbiBcdHNsb3RfbG9jayh6cmFtLCBpbmRleCk7XG4gXHQvKiBTaW5jZSBzbG90IHdhcyB1bmxvY2tlZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIHN0aWxsIFpSQU1fV0IgKi9cbkBAIC0xMzYzLDEzICsxMzY0LDE4IEBAIHN0YXRpYyBpbnQgZGVjb21wcmVzc19iZGV2X3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0c2l6ZSA9IGdldF9zbG90X3NpemUoenJhbSwgaW5kZXgpO1xuIFx0cHJpbyA9IGdldF9zbG90X2NvbXBfcHJpb3JpdHkoenJhbSwgaW5kZXgpO1xuIFxuK1x0c2dfaW5pdF90YWJsZShzZywgMSk7XG4rXHRzZ19zZXRfcGFnZShzZywgcGFnZSwgc2l6ZSwgMCk7XG4rXG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4tXHRzcmMgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4tXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzcmMsIHNpemUsXG4rXHRyZXQgPSB6Y29tcF9kZWNvbXByZXNzKHpyYW0tXHUwMDNlY29tcHNbcHJpb10sIHpzdHJtLCBzZywgc2l6ZSxcbiBcdFx0XHQgICAgICAgenN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4tXHRpZiAoIXJldClcbi1cdFx0Y29weV9wYWdlKHNyYywgenN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4tXHRrdW5tYXBfbG9jYWwoc3JjKTtcbitcdGlmICghcmV0KSB7XG4rXHRcdHZvaWQgKmRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbitcbitcdFx0Y29weV9wYWdlKGRzdCwgenN0cm0tXHUwMDNlbG9jYWxfY29weSk7XG4rXHRcdGt1bm1hcF9sb2NhbChkc3QpO1xuK1x0fVxuIFx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4gXHRzbG90X3VubG9jayh6cmFtLCBpbmRleCk7XG4gXG5AQCAtMjA4NiwxNSArMjA5MiwxOSBAQCBzdGF0aWMgaW50IHJlYWRfc2FtZV9maWxsZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gc3RhdGljIGludCByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR2b2lkICpzcmMsICpkc3Q7XG4gXG4gXHRoYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xuLVx0c3JjID0genNfb2JqX3JlYWRfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIE5VTEwpO1xuK1x0enNfb2JqX3JlYWRfc2dfYmVnaW4oenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzZywgUEFHRV9TSVpFKTtcbitcdC8qIGFuIGluY29tcHJlc3NpYmxlIG9iamVjdCBuZXZlciBzcGFucyB0d28gcGFnZXMgKi9cbitcdHNyYyA9IGttYXBfbG9jYWxfcGFnZShzZ19wYWdlKHNnKSk7XG4gXHRkc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjb3B5X3BhZ2UoZHN0LCBzcmMpO1xuIFx0a3VubWFwX2xvY2FsKGRzdCk7XG4tXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBQQUdFX1NJWkUsIHNyYyk7XG4rXHRrdW5tYXBfbG9jYWwoc3JjKTtcbitcdHpzX29ial9yZWFkX3NnX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIxMDMsOSArMjExMywxMCBAQCBzdGF0aWMgaW50IHJlYWRfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXgpXG4ge1xuIFx0c3RydWN0IHpjb21wX3N0cm0gKnpzdHJtO1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdO1xuIFx0dW5zaWduZWQgbG9uZyBoYW5kbGU7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi1cdHZvaWQgKnNyYywgKmRzdDtcbitcdHZvaWQgKmRzdDtcbiBcdGludCByZXQsIHByaW87XG4gXG4gXHRoYW5kbGUgPSBnZXRfc2xvdF9oYW5kbGUoenJhbSwgaW5kZXgpO1xuQEAgLTIxMTMsMTIgKzIxMjQsMTEgQEAgc3RhdGljIGludCByZWFkX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRwcmlvID0gZ2V0X3Nsb3RfY29tcF9wcmlvcml0eSh6cmFtLCBpbmRleCk7XG4gXG4gXHR6c3RybSA9IHpjb21wX3N0cmVhbV9nZXQoenJhbS1cdTAwM2Vjb21wc1twcmlvXSk7XG4tXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsXG4tXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbitcdHpzX29ial9yZWFkX3NnX2JlZ2luKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGhhbmRsZSwgc2csIHNpemUpO1xuIFx0ZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuLVx0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc3JjLCBzaXplLCBkc3QpO1xuK1x0cmV0ID0gemNvbXBfZGVjb21wcmVzcyh6cmFtLVx1MDAzZWNvbXBzW3ByaW9dLCB6c3RybSwgc2csIHNpemUsIGRzdCk7XG4gXHRrdW5tYXBfbG9jYWwoZHN0KTtcbi1cdHpzX29ial9yZWFkX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsIHNyYyk7XG4rXHR6c19vYmpfcmVhZF9zZ19lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlKTtcbiBcdHpjb21wX3N0cmVhbV9wdXQoenN0cm0pO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0yMTI4LDI1ICsyMTM4LDIzIEBAIHN0YXRpYyBpbnQgcmVhZF9jb21wcmVzc2VkX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIHN0YXRpYyBpbnQgcmVhZF9mcm9tX3pzcG9vbF9yYXcoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBpbmRleClcbiB7XG4tXHRzdHJ1Y3QgemNvbXBfc3RybSAqenN0cm07XG4rXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07XG4gXHR1bnNpZ25lZCBsb25nIGhhbmRsZTtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuLVx0dm9pZCAqc3JjO1xuK1x0dm9pZCAqZHN0O1xuIFxuIFx0aGFuZGxlID0gZ2V0X3Nsb3RfaGFuZGxlKHpyYW0sIGluZGV4KTtcbiBcdHNpemUgPSBnZXRfc2xvdF9zaXplKHpyYW0sIGluZGV4KTtcbiBcbiBcdC8qXG4tXHQgKiBXZSBuZWVkIHRvIGdldCBzdHJlYW0ganVzdCBmb3IgLVx1MDAzZWxvY2FsX2NvcHkgYnVmZmVyLCBpblxuLVx0ICogY2FzZSBpZiBvYmplY3Qgc3BhbnMgdHdvIHBoeXNpY2FsIHBhZ2VzLiBObyBkZWNvbXByZXNzaW9uXG4tXHQgKiB0YWtlcyBwbGFjZSBoZXJlLCBhcyB3ZSByZWFkIHJhdyBjb21wcmVzc2VkIGRhdGEuXG4rXHQgKiBObyBkZWNvbXByZXNzaW9uIHRha2VzIHBsYWNlIGhlcmUsIHdlIGNvcHkgb3V0IHJhdyBjb21wcmVzc2VkXG4rXHQgKiBkYXRhIGRpcmVjdGx5IGludG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXG4gXHQgKi9cbi1cdHpzdHJtID0gemNvbXBfc3RyZWFtX2dldCh6cmFtLVx1MDAzZWNvbXBzW1pSQU1fUFJJTUFSWV9DT01QXSk7XG4tXHRzcmMgPSB6c19vYmpfcmVhZF9iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNpemUsXG4tXHRcdFx0XHR6c3RybS1cdTAwM2Vsb2NhbF9jb3B5KTtcbi1cdG1lbWNweV90b19wYWdlKHBhZ2UsIDAsIHNyYywgc2l6ZSk7XG4tXHR6c19vYmpfcmVhZF9lbmQoenJhbS1cdTAwM2VtZW1fcG9vbCwgaGFuZGxlLCBzaXplLCBzcmMpO1xuLVx0emNvbXBfc3RyZWFtX3B1dCh6c3RybSk7XG4rXHR6c19vYmpfcmVhZF9zZ19iZWdpbih6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUsIHNnLCBzaXplKTtcbitcdGRzdCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbitcdHNnX2NvcHlfdG9fYnVmZmVyKHNnLCBzZ19uZW50cyhzZyksIGRzdCwgc2l6ZSk7XG4rXHRrdW5tYXBfbG9jYWwoZHN0KTtcbitcdHpzX29ial9yZWFkX3NnX2VuZCh6cmFtLVx1MDAzZW1lbV9wb29sLCBoYW5kbGUpO1xuIFxuIFx0bWVtemVyb19wYWdlKHBhZ2UsIHNpemUsIFBBR0VfU0laRSAtIHNpemUpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxuaW5kZXggNDc4NDEwYzg4MGIxZi4uNWI3Mjk4YTUwMjZiOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenNtYWxsb2MuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c21hbGxvYy5oXG5AQCAtNDAsMTAgKzQwLDYgQEAgdW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpO1xuIFxuIHZvaWQgenNfcG9vbF9zdGF0cyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc3RydWN0IHpzX3Bvb2xfc3RhdHMgKnN0YXRzKTtcbiBcbi12b2lkICp6c19vYmpfcmVhZF9iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4tXHRcdFx0c2l6ZV90IG1lbV9sZW4sIHZvaWQgKmxvY2FsX2NvcHkpO1xuLXZvaWQgenNfb2JqX3JlYWRfZW5kKHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBsb25nIGhhbmRsZSxcbi1cdFx0ICAgICBzaXplX3QgbWVtX2xlbiwgdm9pZCAqaGFuZGxlX21lbSk7XG4gdm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4gXHRcdFx0ICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzaXplX3QgbWVtX2xlbik7XG4gdm9pZCB6c19vYmpfcmVhZF9zZ19lbmQoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKTtcbmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuY1xuaW5kZXggODI1MDIyYTdhMzI4Zi4uMTFiZTM3YzQzMTcxOCAxMDA2NDRcbi0tLSBhL21tL3pzbWFsbG9jLmNcbisrKyBiL21tL3pzbWFsbG9jLmNcbkBAIC0xMTM0LDgzICsxMTM0LDYgQEAgdW5zaWduZWQgbG9uZyB6c19nZXRfdG90YWxfcGFnZXMoc3RydWN0IHpzX3Bvb2wgKnBvb2wpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHpzX2dldF90b3RhbF9wYWdlcyk7XG4gXG4tdm9pZCAqenNfb2JqX3JlYWRfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuLVx0XHRcdHNpemVfdCBtZW1fbGVuLCB2b2lkICpsb2NhbF9jb3B5KVxuLXtcbi1cdHN0cnVjdCB6c3BhZ2UgKnpzcGFnZTtcbi1cdHN0cnVjdCB6cGRlc2MgKnpwZGVzYztcbi1cdHVuc2lnbmVkIGxvbmcgb2JqLCBvZmY7XG4tXHR1bnNpZ25lZCBpbnQgb2JqX2lkeDtcbi1cdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbi1cdHZvaWQgKmFkZHI7XG4tXG4tXHQvKiBHdWFyYW50ZWUgd2UgY2FuIGdldCB6c3BhZ2UgZnJvbSBoYW5kbGUgc2FmZWx5ICovXG4tXHRyZWFkX2xvY2soXHUwMDI2cG9vbC1cdTAwM2Vsb2NrKTtcbi1cdG9iaiA9IGhhbmRsZV90b19vYmooaGFuZGxlKTtcbi1cdG9ial90b19sb2NhdGlvbihvYmosIFx1MDAyNnpwZGVzYywgXHUwMDI2b2JqX2lkeCk7XG4tXHR6c3BhZ2UgPSBnZXRfenNwYWdlKHpwZGVzYyk7XG4tXG4tXHQvKiBNYWtlIHN1cmUgbWlncmF0aW9uIGRvZXNuJ3QgbW92ZSBhbnkgcGFnZXMgaW4gdGhpcyB6c3BhZ2UgKi9cbi1cdHpzcGFnZV9yZWFkX2xvY2soenNwYWdlKTtcbi1cdHJlYWRfdW5sb2NrKFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4tXG4tXHRjbGFzcyA9IHpzcGFnZV9jbGFzcyhwb29sLCB6c3BhZ2UpO1xuLVx0b2ZmID0gb2Zmc2V0X2luX3BhZ2UoY2xhc3MtXHUwMDNlc2l6ZSAqIG9ial9pZHgpO1xuLVxuLVx0aWYgKCFac0h1Z2VQYWdlKHpzcGFnZSkpXG4tXHRcdG9mZiArPSBaU19IQU5ETEVfU0laRTtcbi1cbi1cdGlmIChvZmYgKyBtZW1fbGVuIFx1MDAzYz0gUEFHRV9TSVpFKSB7XG4tXHRcdC8qIHRoaXMgb2JqZWN0IGlzIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW4gYSBwYWdlICovXG4tXHRcdGFkZHIgPSBrbWFwX2xvY2FsX3pwZGVzYyh6cGRlc2MpO1xuLVx0XHRhZGRyICs9IG9mZjtcbi1cdH0gZWxzZSB7XG4tXHRcdHNpemVfdCBzaXplc1syXTtcbi1cbi1cdFx0LyogdGhpcyBvYmplY3Qgc3BhbnMgdHdvIHBhZ2VzICovXG4tXHRcdHNpemVzWzBdID0gUEFHRV9TSVpFIC0gb2ZmO1xuLVx0XHRzaXplc1sxXSA9IG1lbV9sZW4gLSBzaXplc1swXTtcbi1cdFx0YWRkciA9IGxvY2FsX2NvcHk7XG4tXG4tXHRcdG1lbWNweV9mcm9tX3BhZ2UoYWRkciwgenBkZXNjX3BhZ2UoenBkZXNjKSxcbi1cdFx0XHRcdCBvZmYsIHNpemVzWzBdKTtcbi1cdFx0enBkZXNjID0gZ2V0X25leHRfenBkZXNjKHpwZGVzYyk7XG4tXHRcdG1lbWNweV9mcm9tX3BhZ2UoYWRkciArIHNpemVzWzBdLFxuLVx0XHRcdFx0IHpwZGVzY19wYWdlKHpwZGVzYyksXG4tXHRcdFx0XHQgMCwgc2l6ZXNbMV0pO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGFkZHI7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKHpzX29ial9yZWFkX2JlZ2luKTtcbi1cbi12b2lkIHpzX29ial9yZWFkX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXG4tXHRcdCAgICAgc2l6ZV90IG1lbV9sZW4sIHZvaWQgKmhhbmRsZV9tZW0pXG4te1xuLVx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xuLVx0c3RydWN0IHpwZGVzYyAqenBkZXNjO1xuLVx0dW5zaWduZWQgbG9uZyBvYmosIG9mZjtcbi1cdHVuc2lnbmVkIGludCBvYmpfaWR4O1xuLVx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xuLVxuLVx0b2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xuLVx0b2JqX3RvX2xvY2F0aW9uKG9iaiwgXHUwMDI2enBkZXNjLCBcdTAwMjZvYmpfaWR4KTtcbi1cdHpzcGFnZSA9IGdldF96c3BhZ2UoenBkZXNjKTtcbi1cdGNsYXNzID0genNwYWdlX2NsYXNzKHBvb2wsIHpzcGFnZSk7XG4tXHRvZmYgPSBvZmZzZXRfaW5fcGFnZShjbGFzcy1cdTAwM2VzaXplICogb2JqX2lkeCk7XG4tXG4tXHRpZiAoIVpzSHVnZVBhZ2UoenNwYWdlKSlcbi1cdFx0b2ZmICs9IFpTX0hBTkRMRV9TSVpFO1xuLVxuLVx0aWYgKG9mZiArIG1lbV9sZW4gXHUwMDNjPSBQQUdFX1NJWkUpIHtcbi1cdFx0aGFuZGxlX21lbSAtPSBvZmY7XG4tXHRcdGt1bm1hcF9sb2NhbChoYW5kbGVfbWVtKTtcbi1cdH1cbi1cbi1cdHpzcGFnZV9yZWFkX3VubG9jayh6c3BhZ2UpO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9lbmQpO1xuLVxuIHZvaWQgenNfb2JqX3JlYWRfc2dfYmVnaW4oc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLFxuIFx0XHRcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDk6MDAuOTA1NzUwMDg0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg4OTQ3MTE3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBaUkFNIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOLCBvciBpZiBzdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiBUaGUgc2lnbmF0dXJlIGNoYW5nZSBpbiBgemNvbXBfZGVjb21wcmVzc2AgaXMgdGhlIGtleSB0aGluZyB0byBsb29rIGF0OiBnb2luZyBmcm9tIGEgc2ltcGxlIGB2b2lkICpgIHNvdXJjZSB0byBhIGBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmAuIFRoYXQgZGVmaW5pdGVseSBjaGFuZ2VzIHRoaW5ncy5cblxuRmlyc3QsIEknbGwgd2FsayB0aHJvdWdoIHRoZSBgZHJpdmVycy9ibG9jay96cmFtL3pjb21wLmNgIGNoYW5nZXMuIEl0IHNlZW1zIGxpa2Ugd2Ugbm93IGhhdmUgYSBzY2F0dGVybGlzdCBhcyBpbnB1dC4gSW4gYHpjb21wX2RlY29tcHJlc3NgLCB0aGUgbG9naWMgYnJhbmNoZXMgYmFzZWQgb24gd2hldGhlciB0aGUgc2NhdHRlcmxpc3Qgc3BhbnMgb25lIG9yIHR3byBwYWdlcy4gSWYgaXQncyBhIHNpbmdsZSBwYWdlIGFuZCBgc2dfaXNfbGFzdChzZylgIGlzIHRydWUsIGl0IHVzZXMgYGttYXBfbG9jYWxfcGFnZWAgdG8gbWFwIHRoZSBzb3VyY2UuIElmIGl0IHNwYW5zIHR3byBwYWdlcywgYHNnX2NvcHlfdG9fYnVmZmVyYCBpcyB1c2VkLCBwdXR0aW5nIHRoZSBkYXRhIGludG8gYSBsb2NhbCBidWZmZXIuIEFmdGVyIGNhbGxpbmcgdGhlIGBkZWNvbXByZXNzYCBmdW5jdGlvbiwgaXQgdW5tYXBzIGBzcmNgIGlmIGl0J3MgYmVlbiBtYXBwZWQuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGZyYWdtZW50ZWQgbWVtb3J5IGFuZCB0aGUgc2NhdHRlcmxpc3QgaXMgdGhlIG1ldGhvZCB0byBtYW5hZ2UgaXQuXG5cbk5leHQsIEknbGwgbG9vayBhdCB0aGUgYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYCBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgaG93IGB6Y29tcF9kZWNvbXByZXNzYCBpcyBhY3R1YWxseSB1c2VkLiBgZGVjb21wcmVzc19iZGV2X3BhZ2VgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgaW5pdGlhbGl6aW5nIGEgc2luZ2xlLWVudHJ5IHNjYXR0ZXJsaXN0LiBIb3dldmVyLCBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCB1c2VzIGEgMi1lbnRyeSBzY2F0dGVybGlzdCwgbWFwcyBvbmUgZW50cnkgdXNpbmcgYGttYXBfbG9jYWxfcGFnZWAsIGNvcGllcyBkYXRhLCBhbmQgdW5tYXBzLiBTbywgdGhlcmUncyBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgZ29pbmcgb24sIHdoaWNoIGNvdWxkIGJlIGludGVyZXN0aW5nLiBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgIGFsc28gdXNlcyBhIDItZW50cnkgc2NhdHRlcmxpc3QgYW5kIGNhbGxzIGB6Y29tcF9kZWNvbXByZXNzYC4gRmluYWxseSwgYHJlYWRfZnJvbV96c3Bvb2xfcmF3YCB1c2VzIGEgMi1lbnRyeSBzY2F0dGVybGlzdCBhbmQgZGlyZWN0bHkgY29waWVzIHRoZSBkYXRhIGZyb20gdGhlIHNjYXR0ZXJsaXN0IHRvIHRoZSBkZXN0aW5hdGlvbiB3aXRoIGBzZ19jb3B5X3RvX2J1ZmZlcmAgYW5kIHplcm9zIG91dCB0aGUgcmVtYWluaW5nIG9mIHRoZSBwYWdlLlxuXG5DcnVjaWFsbHksIHRoZSBmdW5jdGlvbnMgYHpzX29ial9yZWFkX3NnX2JlZ2luYCBhbmQgYHpzX29ial9yZWFkX3NnX2VuZGAgdXNlZCBpbiBgcmVhZF9pbmNvbXByZXNzaWJsZV9wYWdlYCwgYHJlYWRfY29tcHJlc3NlZF9wYWdlYCwgYW5kIGByZWFkX2Zyb21fenNwb29sX3Jhd2Agc2VlbSB0byBiZSByZWxldmFudC4gVGhlIG9sZCBgenNfb2JqX3JlYWRfYmVnaW5gIGFuZCBgenNfb2JqX3JlYWRfZW5kYCBjYWxscyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIGBtbS96c21hbGxvYy5jYCBhbmQgYGluY2x1ZGUvbGludXgvenNtYWxsb2MuaGAuIExldCdzIG5vdyBjaGVjayB0aGUgY29kZSBvZiBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGluIGBtbS96c21hbGxvYy5jYCB0byBzZWUgaG93IGl0J3MgaW5pdGlhbGl6aW5nIGBzZ2AuIEknbGwgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBwdWxsIHVwIHRoYXQgZnVuY3Rpb24gYW5kIGVuc3VyZSB0aGVyZSdzIG5vIHdheSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyBleHBvc2VkIGluIHRoZSBwcm9jZXNzIG9mIHNjYXR0ZXItZ2F0aGVyaW5nLCBtYXBwaW5nLCBvciBjb3B5aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDk6MDkuODAwNDY0NjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTI1NjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c19vYmpfcmVhZF9zZ19iZWdpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c21hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzbWFsbG9jLmM9MTEzNT1FWFBPUlRfU1lNQk9MX0dQTCh6c19nZXRfdG90YWxfcGFnZXMpO1xcbm1tL3pzbWFsbG9jLmMtMTEzNi1cXG5tbS96c21hbGxvYy5jOjExMzc6dm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxubW0venNtYWxsb2MuYy0xMTM4LVxcdFxcdFxcdCAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc2l6ZV90IG1lbV9sZW4pXFxuLS1cXG5tbS96c21hbGxvYy5jLTExODEtfVxcbm1tL3pzbWFsbG9jLmM6MTE4MjpFWFBPUlRfU1lNQk9MX0dQTCh6c19vYmpfcmVhZF9zZ19iZWdpbik7XFxubW0venNtYWxsb2MuYy0xMTgzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNTowOTowOS44ODU3MjY1MTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxNDgyMTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHpzX29ial9yZWFkX3NnX2JlZ2luYCBpbiBgbW0venNtYWxsb2MuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgenNtYWxsb2MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzY2F0dGVyLWdhdGhlciByZWFkcyBhcmUgaW5pdGlhdGVkLiBUaGUgZnVuY3Rpb24gYHpzX29ial9yZWFkX3NnX2JlZ2luYCBpbiBgbW0venNtYWxsb2MuY2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIHNldHRpbmcgdXAgYSBzY2F0dGVyLWdhdGhlciByZWFkIG9wZXJhdGlvbiB3aXRoaW4gdGhlIHpzbWFsbG9jIHN5c3RlbSBpcy4gSeKAmW0gdGhpbmtpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgaW5pdGlhbCBzZXR1cDogcGVyaGFwcyBhbGxvY2F0aW5nIHN0cnVjdHVyZXMsIHByZXBhcmluZyB0aGUgc2NhdHRlcmxpc3QsIGRldGVybWluaW5nIHBhZ2UgbG9jYXRpb25zLCBhbmQgbWF5YmUgZXZlbiBpbml0aWF0aW5nIHNvbWUga2luZCBvZiBJL08gcmVxdWVzdCBpZiBpdCdzIGFzeW5jaHJvbm91cy4gS25vd2luZyBob3cgdGhpcyBmdW5jdGlvbiB3b3JrcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSB0cmFuc2ZlciBwYXRoIGFuZCBob3cgenNtYWxsb2MgaW50ZWdyYXRlcyB3aXRoIHRoZSBrZXJuZWwncyBJL08gaW5mcmFzdHJ1Y3R1cmUgZm9yIGVmZmljaWVudCByZWFkcy4gTGV0J3Mgc2VlIGhvdyB0aGV5IGhhbmRsZSB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdCBhbmQgbWFuYWdlIHRob3NlIHBhZ2UgcG9pbnRlcnMuIFRoaXMgc2hvdWxkIGJlIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTU6MDk6MTIuMzAwNTUwODM0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS96c21hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzc6XFx0dm9pZCB6c19vYmpfcmVhZF9zZ19iZWdpbihzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUsXFxuMTEzODpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHNpemVfdCBtZW1fbGVuKVxcbjExMzk6XFx0e1xcbjExNDA6XFx0XFx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xcbjExNDE6XFx0XFx0c3RydWN0IHpwZGVzYyAqenBkZXNjO1xcbjExNDI6XFx0XFx0dW5zaWduZWQgbG9uZyBvYmosIG9mZjtcXG4xMTQzOlxcdFxcdHVuc2lnbmVkIGludCBvYmpfaWR4O1xcbjExNDQ6XFx0XFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHQvKiBHdWFyYW50ZWUgd2UgY2FuIGdldCB6c3BhZ2UgZnJvbSBoYW5kbGUgc2FmZWx5ICovXFxuMTE0NzpcXHRcXHRyZWFkX2xvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2spO1xcbjExNDg6XFx0XFx0b2JqID0gaGFuZGxlX3RvX29iaihoYW5kbGUpO1xcbjExNDk6XFx0XFx0b2JqX3RvX2xvY2F0aW9uKG9iaiwgXFx1MDAyNnpwZGVzYywgXFx1MDAyNm9ial9pZHgpO1xcbjExNTA6XFx0XFx0enNwYWdlID0gZ2V0X3pzcGFnZSh6cGRlc2MpO1xcbjExNTE6XFx0XFxuMTE1MjpcXHRcXHQvKiBNYWtlIHN1cmUgbWlncmF0aW9uIGRvZXNuJ3QgbW92ZSBhbnkgcGFnZXMgaW4gdGhpcyB6c3BhZ2UgKi9cXG4xMTUzOlxcdFxcdHpzcGFnZV9yZWFkX2xvY2soenNwYWdlKTtcXG4xMTU0OlxcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrKTtcXG4xMTU1OlxcdFxcbjExNTY6XFx0XFx0Y2xhc3MgPSB6c3BhZ2VfY2xhc3MocG9vbCwgenNwYWdlKTtcXG4xMTU3OlxcdFxcdG9mZiA9IG9mZnNldF9pbl9wYWdlKGNsYXNzLVxcdTAwM2VzaXplICogb2JqX2lkeCk7XFxuMTE1ODpcXHRcXG4xMTU5OlxcdFxcdGlmICghWnNIdWdlUGFnZSh6c3BhZ2UpKVxcbjExNjA6XFx0XFx0XFx0b2ZmICs9IFpTX0hBTkRMRV9TSVpFO1xcbjExNjE6XFx0XFxuMTE2MjpcXHRcXHRpZiAob2ZmICsgbWVtX2xlbiBcXHUwMDNjPSBQQUdFX1NJWkUpIHtcXG4xMTYzOlxcdFxcdFxcdC8qIHRoaXMgb2JqZWN0IGlzIGNvbnRhaW5lZCBlbnRpcmVseSB3aXRoaW4gYSBwYWdlICovXFxuMTE2NDpcXHRcXHRcXHRzZ19pbml0X3RhYmxlKHNnLCAxKTtcXG4xMTY1OlxcdFxcdFxcdHNnX3NldF9wYWdlKHNnLCB6cGRlc2NfcGFnZSh6cGRlc2MpLCBtZW1fbGVuLCBvZmYpO1xcbjExNjY6XFx0XFx0fSBlbHNlIHtcXG4xMTY3OlxcdFxcdFxcdHNpemVfdCBzaXplc1syXTtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0XFx0LyogdGhpcyBvYmplY3Qgc3BhbnMgdHdvIHBhZ2VzICovXFxuMTE3MDpcXHRcXHRcXHRzaXplc1swXSA9IFBBR0VfU0laRSAtIG9mZjtcXG4xMTcxOlxcdFxcdFxcdHNpemVzWzFdID0gbWVtX2xlbiAtIHNpemVzWzBdO1xcbjExNzI6XFx0XFxuMTE3MzpcXHRcXHRcXHRzZ19pbml0X3RhYmxlKHNnLCAyKTtcXG4xMTc0OlxcdFxcdFxcdHNnX3NldF9wYWdlKHNnLCB6cGRlc2NfcGFnZSh6cGRlc2MpLCBzaXplc1swXSwgb2ZmKTtcXG4xMTc1OlxcdFxcbjExNzY6XFx0XFx0XFx0enBkZXNjID0gZ2V0X25leHRfenBkZXNjKHpwZGVzYyk7XFxuMTE3NzpcXHRcXHRcXHRzZyA9IHNnX25leHQoc2cpO1xcbjExNzg6XFx0XFxuMTE3OTpcXHRcXHRcXHRzZ19zZXRfcGFnZShzZywgenBkZXNjX3BhZ2UoenBkZXNjKSwgc2l6ZXNbMV0sIDApO1xcbjExODA6XFx0XFx0fVxcbjExODE6XFx0fVxcbjExODI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoenNfb2JqX3JlYWRfc2dfYmVnaW4pO1xcbjExODM6XFx0XFxuMTE4NDpcXHR2b2lkIHpzX29ial9yZWFkX3NnX2VuZChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpXFxuMTE4NTpcXHR7XFxuMTE4NjpcXHRcXHRzdHJ1Y3QgenNwYWdlICp6c3BhZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA5OjEyLjMwMDcxNjQwM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ2NjU2NzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBacmFtL1pzbWFsbG9jIERlY29tcHJlc3Npb24gYW5kIFJlYWQgUGF0aHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYW5hbHlzaXMgZm9jdXNlcyBvbiB0aGUgYHpzX29ial9yZWFkX3NnX2JlZ2luYCBmdW5jdGlvbiBhbmQgaXRzIGludGVncmF0aW9uIGludG8gdGhlIHpyYW0gZGVjb21wcmVzc2lvbiBhbmQgcmVhZCBwYXRocy4gSSBzZWUgdGhhdCBgenNfb2JqX3JlYWRfc2dfYmVnaW5gIGVzc2VudGlhbGx5IHdyYXBzIGBzZ19pbml0X3RhYmxlYCwgaW5pdGlhbGl6aW5nIHNjYXR0ZXJsaXN0IGFycmF5cy4gSSBleGFtaW5lZCB0aGUgcmVsZXZhbnQgY29kZSBpbiBgenJhbV9kcnYuY2AgYW5kIGB6Y29tcC5jYCwgc3BlY2lmaWNhbGx5IGZ1bmN0aW9ucyBsaWtlIGBkZWNvbXByZXNzX2JkZXZfcGFnZWAsIGByZWFkX2luY29tcHJlc3NpYmxlX3BhZ2VgLCBgcmVhZF9jb21wcmVzc2VkX3BhZ2VgLCBgcmVhZF9mcm9tX3pzcG9vbF9yYXdgLCBhbmQgYHpjb21wX2RlY29tcHJlc3NgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGhvdyBpdCBtaWdodCBiZSBleHBvc2VkIG9yIGxlYWQgdG8gaXNzdWVzIHRoYXQgKm9ubHkqIEtNU0FOIHdvdWxkIGNhdGNoLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgc2dgIHNjYXR0ZXJsaXN0IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kICphbHdheXMqIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuICBgc2dfaW5pdF90YWJsZWAgemVyb2VzIHRoZSBzY2F0dGVybGlzdCBhcnJheSBhbmQgaW5pdGlhbGl6ZXMgaXRzIGVudHJpZXMgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbmAgb3IgZGlyZWN0bHkgYnkgdGhlIGNhbGxlcnMuICBJIGxvb2tlZCBhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGByZXFgIHN0cnVjdCBpbiBgemNvbXBfZGVjb21wcmVzc2AgYW5kIGl0J3MgYWxzbyBwcm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4gRnVydGhlcm1vcmUsIGluIGByZWFkX2Zyb21fenNwb29sX3Jhd2AsIHRoZSByZW1haW5pbmcgcG9ydGlvbiBvZiB0aGUgcGFnZSBhZnRlciBkYXRhIGNvcHkgaXMgY2xlYXJlZCB1c2luZyBgbWVtemVyb19wYWdlYC4gIFRoZSBkYXRhIGJ1ZmZlcnMgaW52b2x2ZWQgYXJlIGVpdGhlciBwb3B1bGF0ZWQgdGhyb3VnaCBkZWNvbXByZXNzaW9uIGZyb20gY29tcHJlc3NlZCBkYXRhLCBvciBhcmUgY29waWVkIGZyb20genNtYWxsb2MgcGFnZXMuXG5cbk15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHJlZmFjdG9yaW5nIHRvIHVzZSBzY2F0dGVybGlzdHMgZWxpbWluYXRlcyBhbnkgaW5oZXJlbnQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy5cblxuTGV0J3MgZHJpbGwgZG93bjpcblxuKiAgICoqU2NhdHRlcmxpc3RzOioqIFRoZXkgYXJlIGluaXRpYWxpemVkIHZpYSBgc2dfaW5pdF90YWJsZSgpYC5cbiogICAqKkRhdGEgU291cmNlczoqKiBEYXRhIGNvbWVzIGVpdGhlciBmcm9tIGRlY29tcHJlc3NpbmcsIG9yIGNvcGllZCBmcm9tIHpzbWFsbG9jIHBhZ2VzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHRoZSByZWFkIHBhdGhzLlxuKiAgICoqS01TQU4gQ29uY2VybnM6KiogIEtNU0FOIGxvb2tzIGZvciBzcGVjaWZpYyB0eXBlcyBvZiBwcm9ibGVtcy5cbiAgICAqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHRoYXQgbWlnaHQgY29udGFpbiB1bmluaXRpYWxpemVkIGZpZWxkcy5cbiAgICAqICAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbiAgICAqICAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIHdpdGggbGF0ZXIgdW5pbml0aWFsaXplZCByZWFkcy5cbiAgICAqICAgTm8gYm91bmRzIGNoZWNraW5nIGxvZ2ljIHRoYXQgY291bGQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVzZSBhcmUgdGhlIGNvcmUgS01TQU4gZmFpbHVyZSBzY2VuYXJpb3MsIGFuZCBJIHNlZSBub25lIG9mIHRoZW0gaGVyZS4gTWVtb3J5IHNhZmV0eSBidWdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHNjYXR0ZXJsaXN0IHRyYXZlcnNhbCBwcm9ibGVtcywgYW5kIGludmFsaWQgdW5tYXBwaW5nIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgVUJzYW4uXG5cblRoZXJlZm9yZSwgYWZ0ZXIgYSB0aG9yb3VnaCBhbmFseXNpcywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gdG8gYmUgZW5hYmxlZCBpbiB0aGlzIGNvbnRleHQuIFdlIGNhbiBjb25maWRlbnRseSBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuIFRoaXMgaXMgYSBjbGVhbiByZWZhY3RvcmluZywgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IHNhZmV0eSB0b29scyBoYXZlIHVzIGNvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NjgsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE1OjA5OjIyLjc2NzI4NzU1M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxcblxcbktleSBvYnNlcnZhdGlvbnM6XFxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxcbjIuIFRoZSBgc3RydWN0IHpjb21wX3JlcSByZXFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRlY29tcHJlc3Npb24gY2FsbGJhY2suXFxuMy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB6cmFtIHJlYWQgYW5kIGRlY29tcHJlc3Npb24gcGF0aCB0byB1c2Ugc2NhdHRlcmxpc3RzIChgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2ApIHZpYSBgenNfb2JqX3JlYWRfc2dfYmVnaW4oKWAgLyBgenNfb2JqX3JlYWRfc2dfZW5kKClgIHJhdGhlciB0aGFuIHJhdyBtZW1vcnkgcG9pbnRlcnMgYW5kIGB6c19vYmpfcmVhZF9iZWdpbigpYCAvIGB6c19vYmpfcmVhZF9lbmQoKWAuIFxcblxcbktleSBvYnNlcnZhdGlvbnM6XFxuMS4gQWxsIHN0YWNrLWFsbG9jYXRlZCBzY2F0dGVybGlzdHMgKGBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbLi4uXWApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB2aWEgYHNnX2luaXRfdGFibGUoKWAgd2l0aGluIGB6c19vYmpfcmVhZF9zZ19iZWdpbigpYCBvciBjYWxsZXJzIHByaW9yIHRvIGJlaW5nIHBhc3NlZCBvciBpdGVyYXRlZCBvdmVyLlxcbjIuIFRoZSBgc3RydWN0IHpjb21wX3JlcSByZXFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgYmVmb3JlIHBhc3NpbmcgdG8gdGhlIGRlY29tcHJlc3Npb24gY2FsbGJhY2suXFxuMy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgYnJhbmNoZWQgb24sIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYnVmZmVyIGxlbmd0aHMsIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MsIG9yIGluY29ycmVjdCBzY2F0dGVybGlzdCBtYXBwaW5nL3VubWFwcGluZyB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTiwgcGFnZSB0YWJsZSBkZWJ1Z2dpbmcsIGxvY2tkZXApLlxcblxcblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayB0aGF0IG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[1] Phase: Succeeded StartedAt: 2026-09-07 15:09:33 +0000 UTC FinishedAt: 2026-09-07 15:09:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 15:09:33 +0000 UTC FinishedAt: 2026-09-07 15:09:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2] Phase: Succeeded StartedAt: 2026-09-07 15:09:33 +0000 UTC FinishedAt: 2026-09-07 18:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 15:09:33 +0000 UTC FinishedAt: 2026-09-07 18:51:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 15:09:33 +0000 UTC FinishedAt: 2026-09-07 15:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 15:09:33 +0000 UTC FinishedAt: 2026-09-07 15:09:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6svg9/series-workflow6svg9-convert-artifact-1625638949/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 15:09:44 +0000 UTC FinishedAt: 2026-09-07 15:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 15:09:44 +0000 UTC FinishedAt: 2026-09-07 15:27:19 +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:*6c5b9166-a6a2-4823-98c8-4a0cc29a61cc,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-workflow6svg9/series-workflow6svg9-convert-artifact-1625638949/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": "82744616-5801-40df-8abf-5f4fbee1a54c", "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-workflow6svg9/series-workflow6svg9-build-action-1358505035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 15:09:44 +0000 UTC FinishedAt: 2026-09-07 15:27:09 +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:*6c5b9166-a6a2-4823-98c8-4a0cc29a61cc,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-workflow6svg9/series-workflow6svg9-convert-artifact-1625638949/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": "82744616-5801-40df-8abf-5f4fbee1a54c", "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-workflow6svg9/series-workflow6svg9-build-action-1358505035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 15:27:19 +0000 UTC FinishedAt: 2026-09-07 15:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 15:27:19 +0000 UTC FinishedAt: 2026-09-07 15:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 15:27:19 +0000 UTC FinishedAt: 2026-09-07 15:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 15:27:19 +0000 UTC FinishedAt: 2026-09-07 15:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6svg9/series-workflow6svg9-convert-artifact-2392070400/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 15:27:30 +0000 UTC FinishedAt: 2026-09-07 15:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 15:27:30 +0000 UTC FinishedAt: 2026-09-07 15:29:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82744616-5801-40df-8abf-5f4fbee1a54c,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-workflow6svg9/series-workflow6svg9-build-action-1358505035/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-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 15:29:26 +0000 UTC FinishedAt: 2026-09-07 15:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:29:26 +0000 UTC FinishedAt: 2026-09-07 15:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 15:29:26 +0000 UTC FinishedAt: 2026-09-07 15:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 15:29:26 +0000 UTC FinishedAt: 2026-09-07 15:45:47 +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:*6c5b9166-a6a2-4823-98c8-4a0cc29a61cc,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-workflow6svg9/series-workflow6svg9-convert-artifact-2392070400/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": "5af19f12-1392-4a10-8800-e22a85bfce19", "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-workflow6svg9/series-workflow6svg9-build-action-142739132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 15:29:26 +0000 UTC FinishedAt: 2026-09-07 15:45:37 +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:*6c5b9166-a6a2-4823-98c8-4a0cc29a61cc,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-workflow6svg9/series-workflow6svg9-convert-artifact-2392070400/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": "5af19f12-1392-4a10-8800-e22a85bfce19", "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-workflow6svg9/series-workflow6svg9-build-action-142739132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 15:45:47 +0000 UTC FinishedAt: 2026-09-07 15:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 15:45:47 +0000 UTC FinishedAt: 2026-09-07 15:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 15:45:47 +0000 UTC FinishedAt: 2026-09-07 15:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 15:45:47 +0000 UTC FinishedAt: 2026-09-07 15:47:52 +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:*5af19f12-1392-4a10-8800-e22a85bfce19,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-workflow6svg9/series-workflow6svg9-build-action-142739132/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-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 15:48:01 +0000 UTC FinishedAt: 2026-09-07 18:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 15:48:01 +0000 UTC FinishedAt: 2026-09-07 18:51:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*82744616-5801-40df-8abf-5f4fbee1a54c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5af19f12-1392-4a10-8800-e22a85bfce19,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-workflow6svg9/series-workflow6svg9-build-action-1358505035/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-workflow6svg9/series-workflow6svg9-build-action-142739132/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 15:48:01 +0000 UTC FinishedAt: 2026-09-07 15:48:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 15:48:01 +0000 UTC FinishedAt: 2026-09-07 15:48:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6svg9/series-workflow6svg9-convert-artifact-1760007257/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 15:48:01 +0000 UTC FinishedAt: 2026-09-07 15:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 15:48:01 +0000 UTC FinishedAt: 2026-09-07 15:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:48:01 +0000 UTC FinishedAt: 2026-09-07 15:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 15:48:11 +0000 UTC FinishedAt: 2026-09-07 18:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6svg9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["zcomp_decompress","decompress_bdev_page","read_compressed_page","read_incompressible_page","read_from_zspool_raw"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1d89d7fe708c1bd18a45ccff06b774bbf3f13ba2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_WRITEBACK","ZSMALLOC"],"series_id":"44571f80-a9fd-4cc5-aa80-6b0695f9103b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 15:48:11 +0000 UTC FinishedAt: 2026-09-07 18:51:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82744616-5801-40df-8abf-5f4fbee1a54c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5af19f12-1392-4a10-8800-e22a85bfce19,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-workflow6svg9/series-workflow6svg9-build-action-1358505035/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-workflow6svg9/series-workflow6svg9-build-action-142739132/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-workflow6svg9/series-workflow6svg9-convert-artifact-1760007257/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,}