Name: series-workflowz5v54 Phase: Succeeded StartedAt: 2026-09-04 18:52:13 +0000 UTC FinishedAt: 2026-09-04 23:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[0] Phase: Succeeded StartedAt: 2026-09-04 18:52:13 +0000 UTC FinishedAt: 2026-09-04 19:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 18:52:13 +0000 UTC FinishedAt: 2026-09-04 19:38:44 +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": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "F2FS_FS" ], "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": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "F2FS_FS" ], "series_id": "cbb9ded8-1388-4a7b-bfa7-44082b04025b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "f2fs_merge_page_bio", "f2fs_submit_page_write", "f2fs_write_begin" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0YyRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmMmZzX21lcmdlX3BhZ2VfYmlvJiMzNDssCiAgICAmIzM0O2YyZnNfc3VibWl0X3BhZ2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7ZjJmc193cml0ZV9iZWdpbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgSU9DQl9ET05UQ0FDSEUgKFJXRl9ET05UQ0FDSEUgLyBkcm9wLWJlaGluZCBjYWNoaW5nKSBpbiBGMkZTIGJ1ZmZlcmVkIHdyaXRlcyBieSBzZXR0aW5nIEZHUF9ET05UQ0FDSEUgaW4gZjJmc193cml0ZV9iZWdpbiwgQklPX0NPTVBMRVRFX0lOX1RBU0sgaW4gX19iaW9fYWxsb2MsIGNoZWNraW5nIGJpbyBtZXJnZWFiaWxpdHkgYmFzZWQgb24gdGhlIGZvbGlvIGRyb3BiZWhpbmQgZmxhZywgYW5kIGRlY2xhcmluZyBGT1BfRE9OVENBQ0hFIGluIGYyZnNfZmlsZV9vcGVyYXRpb25zLlxuXG5ObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIGNvbmN1cnJlbmN5LCBvciBiaW8gbWFuYWdlbWVudCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEZPUF9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSBpbiBGMkZTLCBhbGxvd2luZyBkcm9wYmVoaW5kIGZvbGlvcyB0byBiZSB0YWdnZWQgYW5kIGNvbXBsZXRlZCBpbiB0YXNrIGNvbnRleHQuIEl0IHVwZGF0ZXMgZjJmc193cml0ZV9iZWdpbiB0byBzZXQgRkdQX0RPTlRDQUNIRSBhbmQgbW9kaWZpZXMgZjJmc19tZXJnZV9wYWdlX2JpbyBhbmQgZjJmc19zdWJtaXRfcGFnZV93cml0ZSB0byBhdm9pZCBtZXJnaW5nIGRyb3BiZWhpbmQgZm9saW9zIHdpdGggcmVndWxhciBmb2xpb3MuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBmaWxlc3lzdGVtIHdyaXRlIGFuZCBJL08gc3VibWlzc2lvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ODk2ZTdiMjNlODU4MGYwZGMwMWNlNWYyZjk2ZTFmZDQ3NjYwYTEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTozNzozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mMmZzL2RhdGEuYyBiL2ZzL2YyZnMvZGF0YS5jXG5pbmRleCAyMWYzOTZlYmUyMmNhLi42ZTgxNmM5MzQ5YWJjIDEwMDY0NFxuLS0tIGEvZnMvZjJmcy9kYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvZGF0YS5jXG5AQCAtNTAzLDYgJiM0Mzs1MDMsOCBAQCBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fYWxsb2Moc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvLCBpbnQgbnBhZ2VzKVxuIFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsXG4gXHRcdFx0XHRmaW8tXHUwMDNlb3AgfCBmaW8tXHUwMDNlb3BfZmxhZ3MgfCBmMmZzX2lvX2ZsYWdzKGZpbyksXG4gXHRcdFx0XHRHRlBfTk9JTywgXHUwMDI2ZjJmc19iaW9zZXQpO1xuJiM0MztcdGlmICghaXNfcmVhZF9pbyhmaW8tXHUwMDNlb3ApIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLVx1MDAzZWZvbGlvKSlcbiYjNDM7XHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHNlY3RvcjtcbiBcdGlmIChpc19yZWFkX2lvKGZpby1cdTAwM2VvcCkpIHtcbiBcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGYyZnNfcmVhZF9lbmRfaW87XG5AQCAtNzkzLDYgJiM0Mzs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRyZXR1cm4gYmlvLVx1MDAzZWJpX2JkZXYgPT0gZjJmc190YXJnZXRfZGV2aWNlKHNiaSwgY3VyX2Jsa2FkZHIsIE5VTEwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoc3RydWN0IGJpbyAqYmlvLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSykgPT1cbiYjNDM7XHRcdGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmaW8tXHUwMDNlZm9saW8pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlvX3R5cGVfaXNfbWVyZ2VhYmxlKHN0cnVjdCBmMmZzX2Jpb19pbmZvICppbyxcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4ge1xuQEAgLTk4NSw4ICYjNDM7OTk0LDEwIEBAIGludCBmMmZzX21lcmdlX3BhZ2VfYmlvKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiBcbiBcdHRyYWNlX2YyZnNfc3VibWl0X2ZvbGlvX2JpbyhkYXRhX2ZvbGlvLCBmaW8pO1xuIFxuLVx0aWYgKGJpbyBcdTAwMjZcdTAwMjYgIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby1cdTAwM2VzYmksIGJpbywgKmZpby1cdTAwM2VsYXN0X2Jsb2NrLFxuLVx0XHRcdFx0XHRcdGZpby1cdTAwM2VuZXdfYmxrYWRkcikpXG4mIzQzO1x0aWYgKGJpbyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFwYWdlX2lzX21lcmdlYWJsZShmaW8tXHUwMDNlc2JpLCBiaW8sICpmaW8tXHUwMDNlbGFzdF9ibG9jayxcbiYjNDM7XHRcdFx0XHRmaW8tXHUwMDNlbmV3X2Jsa2FkZHIpIHx8XG4mIzQzO1x0ICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoYmlvLCBmaW8pKSlcbiBcdFx0ZjJmc19zdWJtaXRfbWVyZ2VkX2lwdV93cml0ZShmaW8tXHUwMDNlc2JpLCBcdTAwMjZiaW8sIE5VTEwpO1xuIGFsbG9jX25ldzpcbiBcdGlmICghYmlvKSB7XG5AQCAtMTA4Niw3ICYjNDM7MTA5Nyw4IEBAIHZvaWQgZjJmc19zdWJtaXRfcGFnZV93cml0ZShzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4gXHQgICAgKCFpb19pc19tZXJnZWFibGUoc2JpLCBpby1cdTAwM2ViaW8sIGlvLCBmaW8sIGlvLVx1MDAzZWxhc3RfYmxvY2tfaW5fYmlvLFxuIFx0XHRcdCAgICAgIGZpby1cdTAwM2VuZXdfYmxrYWRkcikgfHxcbiBcdCAgICAgIWYyZnNfY3J5cHRfbWVyZ2VhYmxlX2Jpbyhpby1cdTAwM2ViaW8sIGZpb19pbm9kZShmaW8pLFxuLVx0XHRcdFx0YmlvX2ZvbGlvLVx1MDAzZWluZGV4LCBmaW8pKSlcbiYjNDM7XHRcdFx0XHRiaW9fZm9saW8tXHUwMDNlaW5kZXgsIGZpbykgfHxcbiYjNDM7XHQgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShpby1cdTAwM2ViaW8sIGZpbykpKVxuIFx0XHRfX3N1Ym1pdF9tZXJnZWRfYmlvKGlvKTtcbiBhbGxvY19uZXc6XG4gXHRpZiAoaW8tXHUwMDNlYmlvID09IE5VTEwpIHtcbkBAIC0zODcyLDExICYjNDM7Mzg4NCwxNSBAQCBzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiBcdHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfSV9TQihpbm9kZSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdGZnZl90IGZncF9mbGFncyA9IEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUO1xuIFx0cGdvZmZfdCBpbmRleCA9IHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdGJvb2wgbmVlZF9iYWxhbmNlID0gZmFsc2U7XG4gXHRibG9ja190IGJsa2FkZHIgPSBOVUxMX0FERFI7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG4mIzQzO1x0XHRmZ3BfZmxhZ3MgfD0gRkdQX0RPTlRDQUNIRTtcbiYjNDM7XG4gXHR0cmFjZV9mMmZzX3dyaXRlX2JlZ2luKGlub2RlLCBwb3MsIGxlbik7XG4gXG4gXHRpZiAoIWYyZnNfaXNfY2hlY2twb2ludF9yZWFkeShzYmkpKSB7XG5AQCAtMzkyMiw5ICYjNDM7MzkzOCw4IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHQgKiBEbyBub3QgdXNlIEZHUF9TVEFCTEUgdG8gYXZvaWQgZGVhZGxvY2suXG4gXHQgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLlxuIFx0ICovXG4tXHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG4tXHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCxcbi1cdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuJiM0MztcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwgZmdwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xuIFx0XHRnb3RvIGZhaWw7XG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9maWxlLmMgYi9mcy9mMmZzL2ZpbGUuY1xuaW5kZXggZWRjMzUyNTY5ZTg3ZS4uNTcwMjQ0YWU0ZmM4YSAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL2ZpbGUuY1xuQEAgLTU5MDksNiAmIzQzOzU5MDksNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGYyZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0LnNwbGljZV9yZWFkXHQ9IGYyZnNfZmlsZV9zcGxpY2VfcmVhZCxcbiBcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5mYWR2aXNlXHQ9IGYyZnNfZmlsZV9mYWR2aXNlLFxuLVx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyxcbiYjNDM7XHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcbiBcdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuIH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RjJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2YyZnNfbWVyZ2VfcGFnZV9iaW8mIzM0OywKICAgICYjMzQ7ZjJmc19zdWJtaXRfcGFnZV93cml0ZSYjMzQ7LAogICAgJiMzNDtmMmZzX3dyaXRlX2JlZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4OTZlN2IyM2U4NTgwZjBkYzAxY2U1ZjJmOTZlMWZkNDc2NjBhMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE5OjM3OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRhLmMgYi9mcy9mMmZzL2RhdGEuYwppbmRleCAyMWYzOTZlYmUyMmNhLi42ZTgxNmM5MzQ5YWJjIDEwMDY0NAotLS0gYS9mcy9mMmZzL2RhdGEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL2RhdGEuYwpAQCAtNTAzLDYgJiM0Mzs1MDMsOCBAQCBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fYWxsb2Moc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvLCBpbnQgbnBhZ2VzKQogCWJpbyA9IGJpb19hbGxvY19iaW9zZXQoYmRldiwgbnBhZ2VzLAogCQkJCWZpby0mZ3Q7b3AgfCBmaW8tJmd0O29wX2ZsYWdzIHwgZjJmc19pb19mbGFncyhmaW8pLAogCQkJCUdGUF9OT0lPLCAmYW1wO2YyZnNfYmlvc2V0KTsKJiM0MzsJaWYgKCFpc19yZWFkX2lvKGZpby0mZ3Q7b3ApICZhbXA7JmFtcDsgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZpby0mZ3Q7Zm9saW8pKQomIzQzOwkJYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBzZWN0b3I7CiAJaWYgKGlzX3JlYWRfaW8oZmlvLSZndDtvcCkpIHsKIAkJYmlvLSZndDtiaV9lbmRfaW8gPSBmMmZzX3JlYWRfZW5kX2lvOwpAQCAtNzkzLDYgJiM0Mzs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sCiAJcmV0dXJuIGJpby0mZ3Q7YmlfYmRldiA9PSBmMmZzX3RhcmdldF9kZXZpY2Uoc2JpLCBjdXJfYmxrYWRkciwgTlVMTCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShzdHJ1Y3QgYmlvICpiaW8sCiYjNDM7CQkJCQkgIHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSA9PQomIzQzOwkJZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZpby0mZ3Q7Zm9saW8pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlvX3R5cGVfaXNfbWVyZ2VhYmxlKHN0cnVjdCBmMmZzX2Jpb19pbmZvICppbywKIAkJCQkJCXN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbykKIHsKQEAgLTk4NSw4ICYjNDM7OTk0LDEwIEBAIGludCBmMmZzX21lcmdlX3BhZ2VfYmlvKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbykKIAogCXRyYWNlX2YyZnNfc3VibWl0X2ZvbGlvX2JpbyhkYXRhX2ZvbGlvLCBmaW8pOwogCi0JaWYgKGJpbyAmYW1wOyZhbXA7ICFwYWdlX2lzX21lcmdlYWJsZShmaW8tJmd0O3NiaSwgYmlvLCAqZmlvLSZndDtsYXN0X2Jsb2NrLAotCQkJCQkJZmlvLSZndDtuZXdfYmxrYWRkcikpCiYjNDM7CWlmIChiaW8gJmFtcDsmYW1wOwomIzQzOwkgICAgKCFwYWdlX2lzX21lcmdlYWJsZShmaW8tJmd0O3NiaSwgYmlvLCAqZmlvLSZndDtsYXN0X2Jsb2NrLAomIzQzOwkJCQlmaW8tJmd0O25ld19ibGthZGRyKSB8fAomIzQzOwkgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShiaW8sIGZpbykpKQogCQlmMmZzX3N1Ym1pdF9tZXJnZWRfaXB1X3dyaXRlKGZpby0mZ3Q7c2JpLCAmYW1wO2JpbywgTlVMTCk7CiBhbGxvY19uZXc6CiAJaWYgKCFiaW8pIHsKQEAgLTEwODYsNyAmIzQzOzEwOTcsOCBAQCB2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKQogCSAgICAoIWlvX2lzX21lcmdlYWJsZShzYmksIGlvLSZndDtiaW8sIGlvLCBmaW8sIGlvLSZndDtsYXN0X2Jsb2NrX2luX2JpbywKIAkJCSAgICAgIGZpby0mZ3Q7bmV3X2Jsa2FkZHIpIHx8CiAJICAgICAhZjJmc19jcnlwdF9tZXJnZWFibGVfYmlvKGlvLSZndDtiaW8sIGZpb19pbm9kZShmaW8pLAotCQkJCWJpb19mb2xpby0mZ3Q7aW5kZXgsIGZpbykpKQomIzQzOwkJCQliaW9fZm9saW8tJmd0O2luZGV4LCBmaW8pIHx8CiYjNDM7CSAgICAgIWYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlKGlvLSZndDtiaW8sIGZpbykpKQogCQlfX3N1Ym1pdF9tZXJnZWRfYmlvKGlvKTsKIGFsbG9jX25ldzoKIAlpZiAoaW8tJmd0O2JpbyA9PSBOVUxMKSB7CkBAIC0zODcyLDExICYjNDM7Mzg4NCwxNSBAQCBzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwogCXN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfSV9TQihpbm9kZSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJZmdmX3QgZmdwX2ZsYWdzID0gRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQ7CiAJcGdvZmZfdCBpbmRleCA9IHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCWJvb2wgbmVlZF9iYWxhbmNlID0gZmFsc2U7CiAJYmxvY2tfdCBibGthZGRyID0gTlVMTF9BRERSOwogCWludCBlcnIgPSAwOwogCiYjNDM7CWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RPTlRDQUNIRSkKJiM0MzsJCWZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFOwomIzQzOwogCXRyYWNlX2YyZnNfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuKTsKIAogCWlmICghZjJmc19pc19jaGVja3BvaW50X3JlYWR5KHNiaSkpIHsKQEAgLTM5MjIsOSAmIzQzOzM5MzgsOCBAQCBzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCSAqIERvIG5vdCB1c2UgRkdQX1NUQUJMRSB0byBhdm9pZCBkZWFkbG9jay4KIAkgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLgogCSAqLwotCWZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwKLQkJCQlGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCwKLQkJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKJiM0MzsJZm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsCiYjNDM7CQkJCSAgICAgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAlpZiAoSVNfRVJSKGZvbGlvKSkgewogCQllcnIgPSBQVFJfRVJSKGZvbGlvKTsKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZnMvZjJmcy9maWxlLmMgYi9mcy9mMmZzL2ZpbGUuYwppbmRleCBlZGMzNTI1NjllODdlLi41NzAyNDRhZTRmYzhhIDEwMDY0NAotLS0gYS9mcy9mMmZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL2ZpbGUuYwpAQCAtNTkwOSw2ICYjNDM7NTkwOSw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZjJmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLnNwbGljZV9yZWFkCT0gZjJmc19maWxlX3NwbGljZV9yZWFkLAogCS5zcGxpY2Vfd3JpdGUJPSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLAogCS5mYWR2aXNlCT0gZjJmc19maWxlX2ZhZHZpc2UsCi0JLmZvcF9mbGFncwk9IEZPUF9CVUZGRVJfUkFTWU5DLAomIzQzOwkuZm9wX2ZsYWdzCT0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLAogCS5zZXRsZWFzZQk9IGdlbmVyaWNfc2V0bGVhc2UsCiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTkzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRjJGUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgRjJGUyBpbiB0aGUgTGludXgga2VybmVsLiBUaGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSBpdCwgc28gbGV0JiMzOTtzIGRpZyBpbi4gSSBzZWUgY2hhbmdlcyB0byBgZnMvZjJmcy9kYXRhLmNgIGFuZCBgZnMvZjJmcy9maWxlLmNgIOKAkyBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGNvcmUgYXJlYXMuCgpGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBfX2Jpb19hbGxvY2AgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBhIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZyB0byB0aGUgYmlvIGlmIGl0JiMzOTtzIG5vdCBhIHJlYWQgb3BlcmF0aW9uIGFuZCB0aGUgZm9saW8gaGFzIGBkcm9wYmVoaW5kYCBzZXQuIFRoaXMgc3VnZ2VzdHMgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIGNvbnRyb2wgd2hlbiB0aGUgSS9PIGNvbXBsZXRlcywgcG9zc2libHkgcmVsYXRlZCB0byBjYWNoaW5nIGJlaGF2aW9yLgoKTmV4dCwgdGhlcmUmIzM5O3MgdGhlIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgaW50cm9kdWNlZCB0byBjaGVjayBpZiBhbiBleGlzdGluZyBiaW8gY2FuIGJlIG1lcmdlZCB3aXRoIGEgbmV3IG9uZSBiYXNlZCBvbiB0aGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnLCBhbmQgdGhlIGBkcm9wYmVoaW5kYCBzdGF0ZSBvZiB0aGUgZm9saW8uIElmIHRoZSBkcm9wYmVoaW5kIHN0YXRlIGRpZmZlcnMgYmV0d2VlbiBiaW8gYW5kIGZvbGlvLCB0aGUgbWVyZ2luZyBpcyBwcmV2ZW50ZWQuIFRoaXMgbWVyZ2VhYmlsaXR5IGNoZWNrIGluIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgIGlzIGEgY3JpdGljYWwgb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBvcHRpbWl6ZSB0aGUgSS9PIG1lcmdpbmcgd2hlbiB3cml0ZXMgYXJlIHN1Ym1pdHRlZC4KCk5vdywgcmVnYXJkaW5nIGBmMmZzX3dyaXRlX2JlZ2luYCwgdGhlIGFkZGl0aW9uIG9mIGBJT0NCX0RPTlRDQUNIRWAgaXMgdGVsbGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBkaXJlY3RseSBwYXNzaW5nIHRoaXMgZmxhZyBkb3duIHRvIHRoZSBmb2xpbyBhbGxvY2F0aW9uIHVzaW5nIGBGR1BfRE9OVENBQ0hFYC4gVGhpcyBpcyBhIGRpcmVjdCBtZXRob2Qgb2YgY29udHJvbGxpbmcgdGhlIGNhY2hpbmcgYmVoYXZpb3Igb2YgdGhlIHVuZGVybHlpbmcgZmlsZS4KCkZpbmFsbHksIGluIGBmcy9mMmZzL2ZpbGUuY2AsIHRoZSBgZm9wX2ZsYWdzYCBmb3IgdGhlIGZpbGUgb3BlcmF0aW9ucyBhcmUgc2V0IHRvIGBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEVgLiBUaGlzIGlzIGludGVyZXN0aW5nIGFzIGl0IGluZGljYXRlcyB3ZSBzaG91bGQgY2FjaGUgYXN5bmMgcmVhZHMgYW5kIGhhdmUgYERPTlRDQUNIRWAgZW5hYmxlZCBhdCB0aGUgZmlsZSBsZXZlbC4gVGhpcyBzZXR0aW5nIGlzIGxpa2VseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGNoYW5nZXMgaW4gYGYyZnNfd3JpdGVfYmVnaW5gIHRvIHByb3ZpZGUgYSB3YXkgdG8gc2VsZWN0aXZlbHkgZGlzYWJsZSBjYWNoaW5nIGZvciB3cml0ZXMuCgpOb3csIGJlZm9yZSBJIGdvIGRlZXBlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgc2hvdWxkIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIGBmcy9mMmZzL0tjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgc2V0dGluZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBvdGhlciBGMkZTIGZlYXR1cmVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHJlcXVpcmVkIGluIHRoZSB1c2VyJiMzOTtzIGVudmlyb25tZW50IHRvIHVzZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZjJmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEYyRlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0YyRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA1Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDY6XHRcdHNlbGVjdCBOTFNcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEYyRlNfRlNfWEFUVFIgaWYgRlNfRU5DUllQVElPTlxuICAgOTpcdFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG4gIDEwOlx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgMTE6XHRcdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcbiAgMTI6XHRcdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuICAxMzpcdFx0c2VsZWN0IExaNEhDX0NPTVBSRVNTIGlmIEYyRlNfRlNfTFo0SENcbiAgMTQ6XHRcdHNlbGVjdCBMWk9fQ09NUFJFU1MgaWYgRjJGU19GU19MWk9cbiAgMTU6XHRcdHNlbGVjdCBMWk9fREVDT01QUkVTUyBpZiBGMkZTX0ZTX0xaT1xuICAxNjpcdFx0c2VsZWN0IFpTVERfQ09NUFJFU1MgaWYgRjJGU19GU19aU1REXG4gIDE3Olx0XHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTIGlmIEYyRlNfRlNfWlNURFxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBGMkZTIGlzIGJhc2VkIG9uIExvZy1zdHJ1Y3R1cmVkIEZpbGUgU3lzdGVtIChMRlMpLCB3aGljaCBzdXBwb3J0c1xuICAyMDpcdFx0ICB2ZXJzYXRpbGUgXCYjMzQ7Zmxhc2gtZnJpZW5kbHlcJiMzNDsgZmVhdHVyZXMuIFRoZSBkZXNpZ24gaGFzIGJlZW4gZm9jdXNlZCBvblxuICAyMTpcdFx0ICBhZGRyZXNzaW5nIHRoZSBmdW5kYW1lbnRhbCBpc3N1ZXMgaW4gTEZTLCB3aGljaCBhcmUgc25vd2JhbGwgZWZmZWN0XG4gIDIyOlx0XHQgIG9mIHdhbmRlcmluZyB0cmVlIGFuZCBoaWdoIGNsZWFuaW5nIG92ZXJoZWFkLlxuICAyMzpcdFxuICAyNDpcdFx0ICBTaW5jZSBmbGFzaC1iYXNlZCBzdG9yYWdlcyBzaG93IGRpZmZlcmVudCBjaGFyYWN0ZXJpc3RpY3MgYWNjb3JkaW5nIHRvXG4gIDI1Olx0XHQgIHRoZSBpbnRlcm5hbCBnZW9tZXRyeSBvciBmbGFzaCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWVzIGFrYSBGVEwsIEYyRlNcbiAgMjY6XHRcdCAgYW5kIHRvb2xzIHN1cHBvcnQgdmFyaW91cyBwYXJhbWV0ZXJzIG5vdCBvbmx5IGZvciBjb25maWd1cmluZyBvbi1kaXNrXG4gIDI3Olx0XHQgIGxheW91dCwgYnV0IGFsc28gZm9yIHNlbGVjdGluZyBhbGxvY2F0aW9uIGFuZCBjbGVhbmluZyBhbGdvcml0aG1zLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBGMkZTX1NUQVRfRlNcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7RjJGUyBTdGF0dXMgSW5mb3JtYXRpb25cJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gRjJGU19GU1xuICAzNDpcdFx0ZGVmYXVsdCB5XG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIC9zeXMva2VybmVsL2RlYnVnL2YyZnMvIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgcGFydGl0aW9uc1xuICAzNzpcdFx0ICBtb3VudGVkIGFzIGYyZnMuIEVhY2ggZmlsZSBzaG93cyB0aGUgd2hvbGUgZjJmcyBpbmZvcm1hdGlvbi5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgL3N5cy9rZXJuZWwvZGVidWcvZjJmcy9zdGF0dXMgaW5jbHVkZXM6XG4gIDQwOlx0XHQgICAgLSBtYWpvciBmaWxlc3lzdGVtIGluZm9ybWF0aW9uIG1hbmFnZWQgYnkgZjJmcyBjdXJyZW50bHlcbiAgNDE6XHRcdCAgICAtIGF2ZXJhZ2UgU0lUIGluZm9ybWF0aW9uIGFib3V0IHdob2xlIHNlZ21lbnRzXG4gIDQyOlx0XHQgICAgLSBjdXJyZW50IG1lbW9yeSBmb290cHJpbnQgY29uc3VtZWQgYnkgZjJmcy5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgRjJGU19GU19YQVRUUlxuICA0NTpcdFx0Ym9vbCBcJiMzNDtGMkZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbiAgNDY6XHRcdGRlcGVuZHMgb24gRjJGU19GU1xuICA0NzpcdFx0ZGVmYXVsdCB5XG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieVxuICA1MDpcdFx0ICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRjJGUyBBbmFseXNpcyBmb3IgU3l6a2FsbGVyIENvdmVyYWdlKioKCk9rYXksIGxldCYjMzk7cyBzZWUgd2hlcmUgd2Ugc3RhbmQgd2l0aCBGMkZTIGFuZCBzeXprYWxsZXIuIEZpcnN0LCBpcyBGMkZTIGEgc3RhbmRhcmQgdGFyZ2V0IGZvciBmdXp6aW5nPyBZZXAsIGdvb2QgdG8gc2VlIHRoYXQgaXQmIzM5O3MgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCBieSBzeXprYWxsZXIuIFRoYXQmIzM5O3MgYSBncmVhdCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBkaWZmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBGMkZTIGNvZGUgYXJlIGJlaW5nIHRvdWNoZWQuCgpSaWdodCwgdGhlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmU6IGBfX2Jpb19hbGxvY2AsIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAsIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCwgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgLCBgZjJmc193cml0ZV9iZWdpbmAsIGFuZCBgZjJmc19maWxlX29wZXJhdGlvbnNgLiBHb3QgaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgd2FudCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYGYyZnNfbWVyZ2VfcGFnZV9iaW9gIGFuZCBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAsIGFuZCBob3cgYGYyZnNfd3JpdGVfYmVnaW5gIGZpdHMgaW50byB0aGUgcGljdHVyZS4gQSBxdWljayBgZ3JlcGAgZm9yIGBmMmZzX3dyaXRlX2JlZ2luYCBzaG91bGQgZG8gdGhlIHRyaWNrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSB1c2FnZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2YyZnNfd3JpdGVfYmVnaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mMmZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2YyZnMvZGF0YS5jPTM4MzA9c3RhdGljIGludCBwcmVwYXJlX2F0b21pY193cml0ZV9iZWdpbihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZjJmcy9kYXRhLmMtMzg3OC1cbmZzL2YyZnMvZGF0YS5jOjM4Nzk6c3RhdGljIGludCBmMmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbmZzL2YyZnMvZGF0YS5jLTM4ODAtXHRcdFx0ICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2YyZnMvZGF0YS5jLTM4OTUtXG5mcy9mMmZzL2RhdGEuYzozODk2Olx0dHJhY2VfZjJmc193cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pO1xuZnMvZjJmcy9kYXRhLmMtMzg5Ny1cbi0tXG5mcy9mMmZzL2RhdGEuYz00NDQ1PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZjJmc19kYmxvY2tfYW9wcyA9IHtcbi0tXG5mcy9mMmZzL2RhdGEuYy00NDQ4LVx0LndyaXRlcGFnZXNcdD0gZjJmc193cml0ZV9kYXRhX3BhZ2VzLFxuZnMvZjJmcy9kYXRhLmM6NDQ0OTpcdC53cml0ZV9iZWdpblx0PSBmMmZzX3dyaXRlX2JlZ2luLFxuZnMvZjJmcy9kYXRhLmMtNDQ1MC1cdC53cml0ZV9lbmRcdD0gZjJmc193cml0ZV9lbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDoKCioqRGl2aW5nIGludG8gZjJmc19zdWJtaXRfcGFnZV93cml0ZSBhbmQgZjJmc19tZXJnZV9wYWdlX2JpbyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IEYyRlMgaGFuZGxlcyBwYWdlIHdyaXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgIGFuZCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIGhlcmUsIHRoZSBudXRzIGFuZCBib2x0cyBvZiBnZXR0aW5nIGRhdGEgZnJvbSB0aGUgcGFnZSBjYWNoZSBkb3duIHRvIHRoZSBmbGFzaC4KCmBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlYCwgdGhhdCYjMzk7cyB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIGZvciBhIHdyaXRlLCByaWdodD8gSXQmIzM5O3Mgd2hlcmUgd2UgdGFrZSBhIG1vZGlmaWVkIHBhZ2UgYW5kIHByZXBhcmUgdG8gc2VuZCBpdCBvdXQgdG8gdGhlIGZsYXNoLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgaW50ZXJmYWNlPyBXaGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gSXMgaXQgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzPyBEb2VzIGl0IGhhbmRsZSBhbnkgcHJlLWZsdXNoaW5nIG9yIGludmFsaWRhdGlvbiBzdGVwcyBiZWZvcmUgdGhlIElPIGlzIGFjdHVhbGx5IGRpc3BhdGNoZWQ/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1ldGFkYXRhIHVwZGF0ZXMsIG9yIGhvdyBpdCBiYXRjaGVzIElPIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZmlsZSBkYXRhLiBBbnkgaW50ZXJuYWwgcXVldWluZz8gQW55IGRpcmVjdCBjYWxscyB0byB0aGUgYmxvY2sgbGF5ZXIgZm9yIHN1Ym1pdHRpbmcgdGhlIGJpbz8gV2hhdCBoYXBwZW5zIGlmIHRoZXJlJiMzOTtzIGFuIGVycm9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9naWMuIEFyZSB0aGVyZSBhbnkgY29udGV4dC1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGRhdGEgb3IgdGhlIGN1cnJlbnQgRjJGUyBzdGF0ZT8KClRoZW4gd2UgaGF2ZSBgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIHdoaWNoIHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBCSU8gbWVyZ2luZyBvciBhZ2dyZWdhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZS4gU28sIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggbXVsdGlwbGUgY29udGlndW91cyBvciBuZWFyYnkgcGFnZXMsIGFyZSB3ZSB0cnlpbmcgdG8gY29hbGVzY2UgdGhlbSBpbnRvIGEgc2luZ2xlIEJJTyB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIG1hbnkgc21hbGxlciByZXF1ZXN0cz8gV2hhdCBhcmUgdGhlIGNyaXRlcmlhIGZvciBtZXJnaW5nPyBIb3cgZG9lcyBpdCBkZWNpZGUgaWYgYSBtZXJnZSBpcyBiZW5lZmljaWFsIHZlcnN1cyBkZXRyaW1lbnRhbD8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBwYXJ0aWFsIHBhZ2Ugd3JpdGVzIGR1cmluZyBhIG1lcmdlLCBlc3BlY2lhbGx5IHdpdGggd2Vhci1sZXZlbGluZyBjb25zaWRlcmF0aW9ucyBpbiBtaW5kPyBBbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSB1bmRlcmx5aW5nIGZsYXNoIGNvbnRyb2xsZXImIzM5O3MgY2FwYWJpbGl0aWVzPyBEb2VzIEYyRlMgaGF2ZSBhbnkgaW50ZWxsaWdlbnQgaGV1cmlzdGljcyBmb3IgQklPIG1lcmdpbmc/IEZvciBleGFtcGxlLCBhcmUgd2UgdHJ5aW5nIHRvIG1heGltaXplIHRoZSBzaXplIG9mIHdyaXRlcyBiYXNlZCBvbiB0aGUgZmxhc2gmIzM5O3MgZXJhc2UgYmxvY2sgc2l6ZT8gRG9lcyBpdCBwcmlvcml0aXplIHNvbWUgd3JpdGVzIG92ZXIgb3RoZXJzIHRvIG1heGltaXplIHRoZSBtZXJnZSBwb3RlbnRpYWw/CkFyZSB0aGVyZSBhbnkgbG9ja2luZyBjb25jZXJucyBpbiBtZXJnaW5nLCBwYXJ0aWN1bGFybHkgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgcGFnZSBjYWNoZT8KClVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbWJpbmVkIHJvbGUuIEhvdyBkbyBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAgYW5kIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCB3b3JrIHRvZ2V0aGVyIHRvIHByb3ZpZGUgb3B0aW1hbCBJTyBwZXJmb3JtYW5jZSB3aGlsZSBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgY29uc2lzdGVuY3kgZm9yIHRoaXMgZmlsZXN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmMmZzX21lcmdlX3BhZ2VfYmlvfGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mMmZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2YyZnMvZGF0YS5jPTk1NT12b2lkIGYyZnNfc3VibWl0X2FsbF9tZXJnZWRfaXB1X3dyaXRlcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpXG4tLVxuZnMvZjJmcy9kYXRhLmMtOTgzLVxuZnMvZjJmcy9kYXRhLmM6OTg0OmludCBmMmZzX21lcmdlX3BhZ2VfYmlvKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbmZzL2YyZnMvZGF0YS5jLTk4NS17XG4tLVxuZnMvZjJmcy9kYXRhLmM9MTAyNj1zdGF0aWMgYm9vbCBpc19lbmRfem9uZV9ibGthZGRyKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgYmxvY2tfdCBibGthZGRyKVxuLS1cbmZzL2YyZnMvZGF0YS5jLTEwNDYtXG5mcy9mMmZzL2RhdGEuYzoxMDQ3OnZvaWQgZjJmc19zdWJtaXRfcGFnZV93cml0ZShzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG5mcy9mMmZzL2RhdGEuYy0xMDQ4LXtcbi0tXG5mcy9mMmZzL2YyZnMuaD00MjQ3PWludCBmMmZzX3N1Ym1pdF9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pO1xuZnMvZjJmcy9mMmZzLmg6NDI0ODppbnQgZjJmc19tZXJnZV9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pO1xuZnMvZjJmcy9mMmZzLmg6NDI0OTp2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKTtcbmZzL2YyZnMvZjJmcy5oLTQyNTAtc3RydWN0IGJsb2NrX2RldmljZSAqZjJmc190YXJnZXRfZGV2aWNlKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSxcbi0tXG5mcy9mMmZzL2djLmM9MTMyNj1zdGF0aWMgaW50IG1vdmVfZGF0YV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBibG9ja190IGJpZHgsXG4tLVxuZnMvZjJmcy9nYy5jLTE0NzctXHRmaW8ubmV3X2Jsa2FkZHIgPSBuZXdhZGRyO1xuZnMvZjJmcy9nYy5jOjE0Nzg6XHRmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKFx1MDAyNmZpbyk7XG5mcy9mMmZzL2djLmMtMTQ3OS1cbi0tXG5mcy9mMmZzL3NlZ21lbnQuYz00MDg3PXN0YXRpYyB2b2lkIGRvX3dyaXRlX3BhZ2Uoc3RydWN0IGYyZnNfc3VtbWFyeSAqc3VtLCBzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4tLVxuZnMvZjJmcy9zZWdtZW50LmMtNDEyMC1cdC8qIHdyaXRlb3V0IGRpcnR5IHBhZ2UgaW50byBiZGV2ICovXG5mcy9mMmZzL3NlZ21lbnQuYzo0MTIxOlx0ZjJmc19zdWJtaXRfcGFnZV93cml0ZShmaW8pO1xuZnMvZjJmcy9zZWdtZW50LmMtNDEyMi1cbi0tXG5mcy9mMmZzL3NlZ21lbnQuYz00MTI5PXZvaWQgZjJmc19kb193cml0ZV9tZXRhX3BhZ2Uoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2YyZnMvc2VnbWVudC5jLTQxNDgtXHRmb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8pO1xuZnMvZjJmcy9zZWdtZW50LmM6NDE0OTpcdGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoXHUwMDI2ZmlvKTtcbmZzL2YyZnMvc2VnbWVudC5jLTQxNTAtXG4tLVxuZnMvZjJmcy9zZWdtZW50LmM9NDE4MT1pbnQgZjJmc19pbnBsYWNlX3dyaXRlX2RhdGEoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxuLS1cbmZzL2YyZnMvc2VnbWVudC5jLTQyMTItXHRpZiAoZmlvLVx1MDAzZWJpbyBcdTAwMjZcdTAwMjYgIUlTX0YyRlNfSVBVX05PQ0FDSEUoc2JpKSlcbmZzL2YyZnMvc2VnbWVudC5jOjQyMTM6XHRcdGVyciA9IGYyZnNfbWVyZ2VfcGFnZV9iaW8oZmlvKTtcbmZzL2YyZnMvc2VnbWVudC5jLTQyMTQtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3MwoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA2NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRjJGUyBEcm9wYmVoaW5kIFdyaXRlb3V0IFN1cHBvcnQgLSBGdXp6aW5nIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgRk9QX0RPTlRDQUNIRWAgYW5kIGBJT0NCX0RPTlRDQUNIRWAgKGRyb3BiZWhpbmQgd3JpdGVvdXQpIHdpdGhpbiBGMkZTLiBFc3NlbnRpYWxseSwgaXQmIzM5O3Mgc2V0dGluZyB0aGUgYGRyb3BiZWhpbmRgIGZsYWcgb24gZm9saW9zIGR1cmluZyB3cml0ZSBvcGVyYXRpb25zLCB3aGljaCB0aGVuIGNhc2NhZGVzIGRvd24gdG8gQklPIGFsbG9jYXRpb24gYW5kIG1lcmdpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgYGYyZnNfd3JpdGVfYmVnaW5gIG5vdyB1c2VzIGBGR1BfRE9OVENBQ0hFYCwgYWZmZWN0aW5nIGhvdyBmb2xpb3MgYXJlIGhhbmRsZWQuIFRoaXMgdGhlbiBmbG93cyBpbnRvIGBfX2Jpb19hbGxvY2AsIHNldHRpbmcgYEJJT19DT01QTEVURV9JTl9UQVNLYCB3aGVuIGEgZHJvcGJlaGluZCBmb2xpbyBpcyBpbnZvbHZlZCBpbiBhIHdyaXRlIElPLiBJbXBvcnRhbnRseSwgdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYmlvIG1lcmdpbmcgZnVuY3Rpb25zIChgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIGBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlYCkgdG8gcHJldmVudCB0aGUgbWVyZ2luZyBvZiBkcm9wYmVoaW5kIGFuZCBub24tZHJvcGJlaGluZCBiaW9zIHVzaW5nIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAuCgpHaXZlbiB0aGF0IEYyRlMgaXMgYSBmaWxlc3lzdGVtIHRoYXQmIzM5O3MgYWN0aXZlbHkgZnV6emVkLCB0aGVzZSBjaGFuZ2VzIHdpdGhpbiB0aGUgSS9PIHBhdGggYXJlIHNpZ25pZmljYW50LiBNb2RpZnlpbmcgd3JpdGVfYmVnaW4sIGJpbyBtZXJnaW5nLCBhbmQgc3VibWlzc2lvbiBpcyBnb2luZyB0byBleHBvc2UgdGhlIGZpbGVzeXN0ZW0gdG8gbmV3IGV4ZWN1dGlvbiBwYXRocyBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBpc3N1ZXMsIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBpbmNvbXBsZXRlIGJpbyBzdWJtaXNzaW9uLCBtZW1vcnkgbGVha3MsIGFuZCBCSU8gY29tcGxldGlvbiBwcm9ibGVtcy4gVGhlcmVmb3JlLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KClRvIGJlIHNwZWNpZmljLCB0aGUgcmVxdWlyZWQgY29uZmlnIGZvciB0aGlzIGlzIGBGMkZTX0ZTYC4KCk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLiBXZSBoYXZlIGBmMmZzX3dyaXRlX2JlZ2luYCwgYGYyZnNfbWVyZ2VfcGFnZV9iaW9gLCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgIGFzIHRoZSBtYWluIHRvdWNocG9pbnRzLiBMb29raW5nIGF0IGBfX2Jpb19hbGxvY2AgYW5kIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAsIHRoZXkgYXJlIHN0YXRpYywgc28gd2UgZG9uJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlbSBkaXJlY3RseSBiZWluZyBleHBvcnRlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRvIHdvcnJ5IGFib3V0IG90aGVyIGlzc3Vlcy4gVGhlcmVmb3JlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseTogYGYyZnNfd3JpdGVfYmVnaW5gLCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIGFuZCBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAuCgpBbHJpZ2h0LCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY2xlYXI6CgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtGMkZTX0ZTJiMzNDtdYAoqICAgKipGb2N1c1N5bWJvbHM6KiogYFsmIzM0O2YyZnNfd3JpdGVfYmVnaW4mIzM0OywgJiMzNDtmMmZzX21lcmdlX3BhZ2VfYmlvJiMzNDssICYjMzQ7ZjJmc19zdWJtaXRfcGFnZV93cml0ZSYjMzQ7XWAKKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGtleSBGMkZTIEkvTyBwYXRocyAod3JpdGVfYmVnaW4sIGJpbyBtZXJnaW5nLCBzdWJtaXNzaW9uKSB3aXRoIGRyb3BiZWhpbmQgd3JpdGVvdXQsIHBvdGVudGlhbGx5IGV4cG9zaW5nIHJhY2UgY29uZGl0aW9ucywgYmlvIHN1Ym1pc3Npb24gaXNzdWVzLCBtZW1vcnkgbGVha3MsIG9yIEJJTyBjb21wbGV0aW9uIGlzc3VlcyBpbiBhIGZpbGVzeXN0ZW0gdGhhdCBpcyBhY3RpdmVseSBmdXp6ZWQuCgpOb3csIGxldCYjMzk7cyBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RjJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2YyZnNfbWVyZ2VfcGFnZV9iaW8mIzM0OywKICAgICYjMzQ7ZjJmc19zdWJtaXRfcGFnZV93cml0ZSYjMzQ7LAogICAgJiMzNDtmMmZzX3dyaXRlX2JlZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RjJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2YyZnNfbWVyZ2VfcGFnZV9iaW8mIzM0OywKICAgICYjMzQ7ZjJmc19zdWJtaXRfcGFnZV93cml0ZSYjMzQ7LAogICAgJiMzNDtmMmZzX3dyaXRlX2JlZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgSU9DQl9ET05UQ0FDSEUgKFJXRl9ET05UQ0FDSEUgLyBkcm9wLWJlaGluZCBjYWNoaW5nKSBpbiBGMkZTIGJ1ZmZlcmVkIHdyaXRlcyBieSBzZXR0aW5nIEZHUF9ET05UQ0FDSEUgaW4gZjJmc193cml0ZV9iZWdpbiwgQklPX0NPTVBMRVRFX0lOX1RBU0sgaW4gX19iaW9fYWxsb2MsIGNoZWNraW5nIGJpbyBtZXJnZWFiaWxpdHkgYmFzZWQgb24gdGhlIGZvbGlvIGRyb3BiZWhpbmQgZmxhZywgYW5kIGRlY2xhcmluZyBGT1BfRE9OVENBQ0hFIGluIGYyZnNfZmlsZV9vcGVyYXRpb25zLlxuXG5ObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIGNvbmN1cnJlbmN5LCBvciBiaW8gbWFuYWdlbWVudCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzg5NmU3YjIzZTg1ODBmMGRjMDFjZTVmMmY5NmUxZmQ0NzY2MGExMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTk6Mzc6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9mMmZzL2RhdGEuYyBiL2ZzL2YyZnMvZGF0YS5jCmluZGV4IDIxZjM5NmViZTIyY2EuLjZlODE2YzkzNDlhYmMgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvZGF0YS5jCkBAIC01MDMsNiAmIzQzOzUwMyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYmlvICpfX2Jpb19hbGxvYyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8sIGludCBucGFnZXMpCiAJYmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsCiAJCQkJZmlvLSZndDtvcCB8IGZpby0mZ3Q7b3BfZmxhZ3MgfCBmMmZzX2lvX2ZsYWdzKGZpbyksCiAJCQkJR0ZQX05PSU8sICZhbXA7ZjJmc19iaW9zZXQpOwomIzQzOwlpZiAoIWlzX3JlYWRfaW8oZmlvLSZndDtvcCkgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLSZndDtmb2xpbykpCiYjNDM7CQliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NlY3RvciA9IHNlY3RvcjsKIAlpZiAoaXNfcmVhZF9pbyhmaW8tJmd0O29wKSkgewogCQliaW8tJmd0O2JpX2VuZF9pbyA9IGYyZnNfcmVhZF9lbmRfaW87CkBAIC03OTMsNiAmIzQzOzc5NSwxMyBAQCBzdGF0aWMgYm9vbCBwYWdlX2lzX21lcmdlYWJsZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVjdCBiaW8gKmJpbywKIAlyZXR1cm4gYmlvLSZndDtiaV9iZGV2ID09IGYyZnNfdGFyZ2V0X2RldmljZShzYmksIGN1cl9ibGthZGRyLCBOVUxMKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlKHN0cnVjdCBiaW8gKmJpbywKJiM0MzsJCQkJCSAgc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpb19mbGFnZ2VkKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spID09CiYjNDM7CQlmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLSZndDtmb2xpbyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgaW9fdHlwZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfYmlvX2luZm8gKmlvLAogCQkJCQkJc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKQogewpAQCAtOTg1LDggJiM0Mzs5OTQsMTAgQEAgaW50IGYyZnNfbWVyZ2VfcGFnZV9iaW8oc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKQogCiAJdHJhY2VfZjJmc19zdWJtaXRfZm9saW9fYmlvKGRhdGFfZm9saW8sIGZpbyk7CiAKLQlpZiAoYmlvICZhbXA7JmFtcDsgIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby0mZ3Q7c2JpLCBiaW8sICpmaW8tJmd0O2xhc3RfYmxvY2ssCi0JCQkJCQlmaW8tJmd0O25ld19ibGthZGRyKSkKJiM0MzsJaWYgKGJpbyAmYW1wOyZhbXA7CiYjNDM7CSAgICAoIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby0mZ3Q7c2JpLCBiaW8sICpmaW8tJmd0O2xhc3RfYmxvY2ssCiYjNDM7CQkJCWZpby0mZ3Q7bmV3X2Jsa2FkZHIpIHx8CiYjNDM7CSAgICAgIWYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlKGJpbywgZmlvKSkpCiAJCWYyZnNfc3VibWl0X21lcmdlZF9pcHVfd3JpdGUoZmlvLSZndDtzYmksICZhbXA7YmlvLCBOVUxMKTsKIGFsbG9jX25ldzoKIAlpZiAoIWJpbykgewpAQCAtMTA4Niw3ICYjNDM7MTA5Nyw4IEBAIHZvaWQgZjJmc19zdWJtaXRfcGFnZV93cml0ZShzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pCiAJICAgICghaW9faXNfbWVyZ2VhYmxlKHNiaSwgaW8tJmd0O2JpbywgaW8sIGZpbywgaW8tJmd0O2xhc3RfYmxvY2tfaW5fYmlvLAogCQkJICAgICAgZmlvLSZndDtuZXdfYmxrYWRkcikgfHwKIAkgICAgICFmMmZzX2NyeXB0X21lcmdlYWJsZV9iaW8oaW8tJmd0O2JpbywgZmlvX2lub2RlKGZpbyksCi0JCQkJYmlvX2ZvbGlvLSZndDtpbmRleCwgZmlvKSkpCiYjNDM7CQkJCWJpb19mb2xpby0mZ3Q7aW5kZXgsIGZpbykgfHwKJiM0MzsJICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoaW8tJmd0O2JpbywgZmlvKSkpCiAJCV9fc3VibWl0X21lcmdlZF9iaW8oaW8pOwogYWxsb2NfbmV3OgogCWlmIChpby0mZ3Q7YmlvID09IE5VTEwpIHsKQEAgLTM4NzIsMTEgJiM0MzszODg0LDE1IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctJmd0O2hvc3Q7CiAJc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGlub2RlKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlmZ2ZfdCBmZ3BfZmxhZ3MgPSBGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVDsKIAlwZ29mZl90IGluZGV4ID0gcG9zICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJYm9vbCBuZWVkX2JhbGFuY2UgPSBmYWxzZTsKIAlibG9ja190IGJsa2FkZHIgPSBOVUxMX0FERFI7CiAJaW50IGVyciA9IDA7CiAKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRE9OVENBQ0hFKQomIzQzOwkJZmdwX2ZsYWdzIHw9IEZHUF9ET05UQ0FDSEU7CiYjNDM7CiAJdHJhY2VfZjJmc193cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pOwogCiAJaWYgKCFmMmZzX2lzX2NoZWNrcG9pbnRfcmVhZHkoc2JpKSkgewpAQCAtMzkyMiw5ICYjNDM7MzkzOCw4IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJICogRG8gbm90IHVzZSBGR1BfU1RBQkxFIHRvIGF2b2lkIGRlYWRsb2NrLgogCSAqIFdpbGwgd2FpdCB0aGF0IGJlbG93IHdpdGggb3VyIElPIGNvbnRyb2wuCiAJICovCi0JZm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LAotCQkJCUZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFULAotCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwomIzQzOwlmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsIGZncF9mbGFncywKJiM0MzsJCQkJICAgICAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCWlmIChJU19FUlIoZm9saW8pKSB7CiAJCWVyciA9IFBUUl9FUlIoZm9saW8pOwogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9mcy9mMmZzL2ZpbGUuYyBiL2ZzL2YyZnMvZmlsZS5jCmluZGV4IGVkYzM1MjU2OWU4N2UuLjU3MDI0NGFlNGZjOGEgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvZmlsZS5jCkBAIC01OTA5LDYgJiM0Mzs1OTA5LDYgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmMmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkuc3BsaWNlX3JlYWQJPSBmMmZzX2ZpbGVfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiAJLmZhZHZpc2UJPSBmMmZzX2ZpbGVfZmFkdmlzZSwKLQkuZm9wX2ZsYWdzCT0gRk9QX0JVRkZFUl9SQVNZTkMsCiYjNDM7CS5mb3BfZmxhZ3MJPSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsCiAJLnNldGxlYXNlCT0gZ2VuZXJpY19zZXRsZWFzZSwKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBBZGRpbmcgUldGX0RPTlRDQUNIRSBTdXBwb3J0IHRvIEYyRlMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgaW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgYFJXRl9ET05UQ0FDSEVgIGFuZCBgSU9DQl9ET05UQ0FDSEVgIGZsYWdzIHdpdGhpbiB0aGUgRjJGUyBmaWxlc3lzdGVtLCBlZmZlY3RpdmVseSBlbmFibGluZyBhICYjMzQ7ZHJvcC1iZWhpbmQmIzM0OyBiZWhhdmlvciBmb3Igd3JpdGVzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFnZSBjYWNoZSBtYW5hZ2VtZW50LCBhbmQgc3BlY2lmaWNhbGx5LCBjb250cm9sbGluZyB3aGV0aGVyIHBhZ2VzIHdyaXR0ZW4gdG8gZGlzayBhcmUgcmV0YWluZWQgaW4gdGhlIHBhZ2UgY2FjaGUgYWZ0ZXJ3YXJkLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZToKCiogICBJbiBgZnMvZjJmcy9kYXRhLmNgLCB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiBob3cgYmlvcyBhcmUgaGFuZGxlZCB3aGVuIGBJT0NCX0RPTlRDQUNIRWAgaXMgcmVxdWVzdGVkLiBJZiB0aGUgZmxhZyBpcyBzZXQsIHRoZW4gd2hlbiB0aGUgZm9saW8gaXMgYWxsb2NhdGVkLCBpdCYjMzk7cyB0YWdnZWQgd2l0aCBgRkdQX0RPTlRDQUNIRWAsIHdoaWNoIEkga25vdywgc2V0cyB0aGUgZHJvcGJlaGluZCBmbGFnLgoqICAgVGhlIGBfX2Jpb19hbGxvY2AgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gc2V0IGBCSU9fQ09NUExFVEVfSU5fVEFTS2Agb24gdGhlIGJpbyBpZiB0aGUgZm9saW8gaGFzIGRyb3BiZWhpbmQuCiogICBUaGVuIHdlIGhhdmUgYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYCwgd2hpY2ggc2VlbXMgdG8gYmUgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBpbiBgZjJmc19tZXJnZV9wYWdlX2Jpb2AgYW5kIGBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlYC4gVGhpcyBwcmV2ZW50cyB0aGUgbWVyZ2luZyBvZiBiaW9zIHRoYXQgbWl4IHBhZ2VzIHdpdGggYW5kIHdpdGhvdXQgdGhlIGRyb3BiZWhpbmQgZmxhZy4gVGhpcyBpcyBjcnVjaWFsOyB3ZSAqbXVzdCogbWFpbnRhaW4gdGhlIGRyb3AtYmVoaW5kIHNlbWFudGljcywgZW5zdXJpbmcgdGhhdCB3ZSBkb24mIzM5O3QgYWNjaWRlbnRhbGx5IGNhY2hlIHBhZ2VzIHdlJiMzOTtyZSBzdXBwb3NlZCB0byBkcm9wLgoqICAgVGhlIHBhdGNoIHVwZGF0ZXMgYGYyZnNfd3JpdGVfYmVnaW5gIHRvIHBhc3MgYEZHUF9ET05UQ0FDSEVgIHRvIHRoZSBgZjJmc19maWxlbWFwX2dldF9mb2xpb2AgY2FsbC4KCkFuZCBmaW5hbGx5LCBgZnMvZjJmcy9maWxlLmNgIGFkZHMgYEZPUF9ET05UQ0FDSEVgIHRvIHRoZSBgZjJmc19maWxlX29wZXJhdGlvbnMuZm9wX2ZsYWdzYC4KClRoZSBwcmltYXJ5IG9iamVjdGl2ZSBpcyBub3cgY2xlYXI6IFdoZW4gYElPQ0JfRE9OVENBQ0hFYCBpcyB1c2VkLCB0aGUgc3lzdGVtIGVuc3VyZXMgdGhhdCB0aGUgd3JpdHRlbiBwYWdlcyBhcmUgbm90IGtlcHQgaW4gdGhlIHBhZ2UgY2FjaGUgYWZ0ZXIgdGhlIHdyaXRlIGNvbXBsZXRlcy4gVGhlIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZyBhbmQgdGhlIHN1YnNlcXVlbnQgbWVyZ2luZyBsb2dpYyBhcmUgdGhlIGtleSB0byB0aGlzIGJlaGF2aW9yLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpc2tzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIGNhY2hlIG9wZXJhdGlvbnMgYW5kIGJsb2NrIEkvTywgc28gbGV0JiMzOTtzIHJ1bGUgb3V0IGFueSByaXNrLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgdG8gdXNlcnNwYWNlLCBvciBjaGFuZ2VzIGFueSBtZW1vcnkgY29waWVzLCBib3VuZHMgY2hlY2tzLCBldGMuIFNvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzbiYjMzk7dCBhbiBpc3N1ZS4KClRoZSBtb3JlIGxpa2VseSBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBmb3VuZCBmcm9tIHRoaXMgcGF0Y2ggYXJlOgoKKiAgIFBhZ2UgY2FjaGUgcmFjZSBjb25kaXRpb25zOiBUaGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgcGFnZSBjYWNoZSBsaWZldGltZSwgcmVmY291bnRpbmcsIGRyb3AtYmVoaW5kLCBvciBkZWFkbG9ja3MgaW4gdGhlIHBhZ2UgY2FjaGUuIFRob3VnaCwgdGhlc2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLgoqICAgTWVyZ2luZyBsb2dpYyBidWdzOiBUaGVyZSBjb3VsZCBiZSBwcm9ibGVtcyB3aXRoIHRoZSBtZXJnaW5nIGxvZ2ljLCBvciB3aXRoIHdyaXRlYmFjay4KClNvIHRoZSBtYWluIHRoaW5nIHRvIHdhdGNoIG91dCBmb3IgaXMgY29ycmVjdG5lc3MgaW4gaG93IHdlIG1hbmFnZSB0aGUgZHJvcC1iZWhpbmQgc3RhdGUuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHRob3JvdWdobHkgdGVzdCBzY2VuYXJpb3Mgd2hlcmUgZHJvcC1iZWhpbmQgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNvbmN1cnJlbnQgd3JpdGVzLCByZWFkcywgYW5kIGV2aWN0aW9ucyB0byBlbnN1cmUgd2UgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24uIEFuZCBvZiBjb3Vyc2UsIG1ha2luZyBzdXJlIHdlIGhhdmVuJiMzOTt0IGJyb2tlbiBleGlzdGluZyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkdQX0RPTlRDQUNIRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mMmZzL2RhdGEuYz0zODc5PXN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZjJmcy9kYXRhLmMtMzg5My1cdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcbmZzL2YyZnMvZGF0YS5jOjM4OTQ6XHRcdGZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFO1xuZnMvZjJmcy9kYXRhLmMtMzg5NS1cbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTc5OT1zdHJ1Y3QgZm9saW8gKmlvbWFwX2dldF9mb2xpbyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90IHBvcywgc2l6ZV90IGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTgwNS1cdGlmIChpdGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9ET05UQ0FDSEUpXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjgwNjpcdFx0ZmdwIHw9IEZHUF9ET05UQ0FDSEU7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTgwNy1cdGZncCB8PSBmZ2Zfc2V0X29yZGVyKGxlbik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9Njc5PXBnb2ZmX3QgcGFnZV9jYWNoZV9wcmV2X21pc3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNzAyLSAqICogJUZHUF9TVEFCTEUgLSBXYWl0IGZvciB0aGUgZm9saW8gdG8gYmUgc3RhYmxlIChmaW5pc2hlZCB3cml0ZWJhY2spXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo3MDM6ICogKiAlRkdQX0RPTlRDQUNIRSAtIFVuY2FjaGVkIGJ1ZmZlcmVkIElPXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC03MDQtICogKiAlRkdQX1dSSVRFQkVHSU4gLSBUaGUgZmxhZ3MgdG8gdXNlIGluIGEgZmlsZXN5c3RlbSB3cml0ZV9iZWdpbigpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NzA3PXR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmZ2ZfdDtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC03MTYtI2RlZmluZSBGR1BfU1RBQkxFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NzE3OiNkZWZpbmUgRkdQX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMClcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTcxOC0jZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKVx0KCgoX19mb3JjZSB1bnNpZ25lZClmZ2YpIFx1MDAzZVx1MDAzZSAyNilcdC8qIHRvcCA2IGJpdHMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD03Nzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKndyaXRlX2JlZ2luX2dldF9mb2xpbyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNzg0LSAgICAgICAgaWYgKGlvY2IgXHUwMDI2XHUwMDI2IGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6Nzg1OiAgICAgICAgICAgICAgICBmZ3BfZmxhZ3MgfD0gRkdQX0RPTlRDQUNIRTtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTc4Ni1cbi0tXG5tbS9maWxlbWFwLmM9MTk0Nz1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtMjAyNC1cdFx0XHRcdF9fZm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xubW0vZmlsZW1hcC5jOjIwMjU6XHRcdFx0aWYgKGZncF9mbGFncyBcdTAwMjYgRkdQX0RPTlRDQUNIRSlcbm1tL2ZpbGVtYXAuYy0yMDI2LVx0XHRcdFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG4tLVxubW0vZmlsZW1hcC5jLTIwNjAtXHQvKiBub3QgYW4gdW5jYWNoZWQgbG9va3VwLCBjbGVhciB1bmNhY2hlZCBpZiBzZXQgKi9cbm1tL2ZpbGVtYXAuYzoyMDYxOlx0aWYgKCEoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfRE9OVENBQ0hFKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkge1xubW0vZmlsZW1hcC5jLTIwNjItXHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgxMgoJCQkJCQkJb3V0cHV0OiAxNzcKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRjJGUyBCdWZmZXJlZCBXcml0ZSBQYXRoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaCBmb3IgdGhlIEYyRlMgYnVmZmVyZWQgd3JpdGUgcGF0aCwgYW5kIGl0IGxvb2tzIHByZXR0eSBjbGVhbi4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byBlbmFibGluZyBgRk9QX0RPTlRDQUNIRWAgYW5kIGBJT0NCX0RPTlRDQUNIRWAgc3VwcG9ydC4gTGV0IG1lIGJyZWFrIGl0IGRvd24gaW4gbXkgaGVhZDoKCkZpcnN0LCBpbiBgZjJmc193cml0ZV9iZWdpbmAsIGl04oCZcyBjb3JyZWN0bHkgc2V0dGluZyB0aGUgYEZHUF9ET05UQ0FDSEVgIGZsYWcgaWYgdGhlIGBJT0NCX0RPTlRDQUNIRWAgZmxhZyBpcyBwcmVzZW50LiBUaGF0JiMzOTtzIGV4YWN0bHkgdGhlIHJpZ2h0IG1lY2hhbmlzbSB0byBzaWduYWwgdGhlIGNhY2hpbmcgYmVoYXZpb3IuIFRoZW4sIGZvciBhbGxvY2F0aW9uLCBpbiBgX19iaW9fYWxsb2NgLCBzZXR0aW5nIGBCSU9fQ09NUExFVEVfSU5fVEFTS2Agb24gd3JpdGUgYmlvcyB3aGVuIHRoZSBmb2xpbyBpcyBtYXJrZWQgYXMgYGRyb3BiZWhpbmRgIHNlZW1zIHNlbnNpYmxlLiBJdOKAmXMgY2xlYXJseSBhaW1pbmcgZm9yIGEgbW9yZSBpbW1lZGlhdGUgY29tcGxldGlvbiBvbiB3cml0ZXMgdGhhdCBhcmVuJiMzOTt0IGNhY2hlZC4KClRoZSBiaW8gbWVyZ2luZyBmdW5jdGlvbnMgaGF2ZSBhIHZpdGFsIGNoZWNrIHdpdGggYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYCwgd2hpY2ggaXMgbmVjZXNzYXJ5LiBJdOKAmXMgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBmb2xpb3MgbWFya2VkIGZvciBkcm9wLWJlaGluZCB3aXRoIHRoZSBvbmVzIHRoYXQgYXJlbiYjMzk7dC4gVGhpcyBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyB0aGUgaW50ZW5kZWQgJiMzNDtkb24mIzM5O3QgY2FjaGUmIzM0OyBiZWhhdmlvci4gRmluYWxseSwgYWR2ZXJ0aXNpbmcgYEZPUF9ET05UQ0FDSEVgIGluIGBmMmZzX2ZpbGVfb3BlcmF0aW9uc2AgaXMgdGhlIGZpbmFsIHN0ZXAsIG1ha2luZyB0aGUgZnVuY3Rpb25hbGl0eSBjbGVhciB0byB0aGUgdXNlcnNwYWNlLgoKVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0LCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhhdCB0aGlzIGludHJvZHVjZXMgYW55IG5hc3R5IHN1cnByaXNlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgYWNjZXNzZXMsIGFuZCBubyBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGZpZWxkcyB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljLgoKSSB0aGluayBhbnkgcG90ZW50aWFsIGlzc3VlcyDigJMgYW5kIHRoZXNlIGFyZSBhbHdheXMgcG9zc2libGUg4oCTIHdpbGwgYmUgY2F1Z2h0IGJ5IHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXnigJlyZSB0aGUgcmlnaHQgdG9vbHMgdG8gZmluZCBsaWZlY3ljbGUgcHJvYmxlbXMgb3IgYmlvLXJlbGF0ZWQgY29uY3VycmVuY3kgaXNzdWVzLgoKR2l2ZW4gdGhhdCwgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlza3MgcmVsYXRlZCB0byBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBTbywgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGZhbHNlLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgZ2l2ZSB0aGlzIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBJT0NCX0RPTlRDQUNIRSAoUldGX0RPTlRDQUNIRSAvIGRyb3AtYmVoaW5kIGNhY2hpbmcpIGluIEYyRlMgYnVmZmVyZWQgd3JpdGVzIGJ5IHNldHRpbmcgRkdQX0RPTlRDQUNIRSBpbiBmMmZzX3dyaXRlX2JlZ2luLCBCSU9fQ09NUExFVEVfSU5fVEFTSyBpbiBfX2Jpb19hbGxvYywgY2hlY2tpbmcgYmlvIG1lcmdlYWJpbGl0eSBiYXNlZCBvbiB0aGUgZm9saW8gZHJvcGJlaGluZCBmbGFnLCBhbmQgZGVjbGFyaW5nIEZPUF9ET05UQ0FDSEUgaW4gZjJmc19maWxlX29wZXJhdGlvbnMuXG5cbk5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycyBhcmUgYWxsb2NhdGVkLCBubyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGZvbGlvIGxpZmVjeWNsZSwgY29uY3VycmVuY3ksIG9yIGJpbyBtYW5hZ2VtZW50IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIElPQ0JfRE9OVENBQ0hFIChSV0ZfRE9OVENBQ0hFIC8gZHJvcC1iZWhpbmQgY2FjaGluZykgaW4gRjJGUyBidWZmZXJlZCB3cml0ZXMgYnkgc2V0dGluZyBGR1BfRE9OVENBQ0hFIGluIGYyZnNfd3JpdGVfYmVnaW4sIEJJT19DT01QTEVURV9JTl9UQVNLIGluIF9fYmlvX2FsbG9jLCBjaGVja2luZyBiaW8gbWVyZ2VhYmlsaXR5IGJhc2VkIG9uIHRoZSBmb2xpbyBkcm9wYmVoaW5kIGZsYWcsIGFuZCBkZWNsYXJpbmcgRk9QX0RPTlRDQUNIRSBpbiBmMmZzX2ZpbGVfb3BlcmF0aW9ucy5cblxuTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQsIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBpbiBjb25kaXRpb25hbCBicmFuY2hlcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCBjb25jdXJyZW5jeSwgb3IgYmlvIG1hbmFnZW1lbnQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6Mzc6MzkuMjk4NTkwOTU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4OTY1MjQ4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRjJGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImYyZnNfbWVyZ2VfcGFnZV9iaW9cIixcbiAgICBcImYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVcIixcbiAgICBcImYyZnNfd3JpdGVfYmVnaW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgSU9DQl9ET05UQ0FDSEUgKFJXRl9ET05UQ0FDSEUgLyBkcm9wLWJlaGluZCBjYWNoaW5nKSBpbiBGMkZTIGJ1ZmZlcmVkIHdyaXRlcyBieSBzZXR0aW5nIEZHUF9ET05UQ0FDSEUgaW4gZjJmc193cml0ZV9iZWdpbiwgQklPX0NPTVBMRVRFX0lOX1RBU0sgaW4gX19iaW9fYWxsb2MsIGNoZWNraW5nIGJpbyBtZXJnZWFiaWxpdHkgYmFzZWQgb24gdGhlIGZvbGlvIGRyb3BiZWhpbmQgZmxhZywgYW5kIGRlY2xhcmluZyBGT1BfRE9OVENBQ0hFIGluIGYyZnNfZmlsZV9vcGVyYXRpb25zLlxcblxcbk5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycyBhcmUgYWxsb2NhdGVkLCBubyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGZvbGlvIGxpZmVjeWNsZSwgY29uY3VycmVuY3ksIG9yIGJpbyBtYW5hZ2VtZW50IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBGT1BfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUgaW4gRjJGUywgYWxsb3dpbmcgZHJvcGJlaGluZCBmb2xpb3MgdG8gYmUgdGFnZ2VkIGFuZCBjb21wbGV0ZWQgaW4gdGFzayBjb250ZXh0LiBJdCB1cGRhdGVzIGYyZnNfd3JpdGVfYmVnaW4gdG8gc2V0IEZHUF9ET05UQ0FDSEUgYW5kIG1vZGlmaWVzIGYyZnNfbWVyZ2VfcGFnZV9iaW8gYW5kIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUgdG8gYXZvaWQgbWVyZ2luZyBkcm9wYmVoaW5kIGZvbGlvcyB3aXRoIHJlZ3VsYXIgZm9saW9zLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgZmlsZXN5c3RlbSB3cml0ZSBhbmQgSS9PIHN1Ym1pc3Npb24gcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozNzozOS4yOTg1OTU3MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYxMjgwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ODk2ZTdiMjNlODU4MGYwZGMwMWNlNWYyZjk2ZTFmZDQ3NjYwYTEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTk6Mzc6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRhLmMgYi9mcy9mMmZzL2RhdGEuY1xcbmluZGV4IDIxZjM5NmViZTIyY2EuLjZlODE2YzkzNDlhYmMgMTAwNjQ0XFxuLS0tIGEvZnMvZjJmcy9kYXRhLmNcXG4rKysgYi9mcy9mMmZzL2RhdGEuY1xcbkBAIC01MDMsNiArNTAzLDggQEAgc3RhdGljIHN0cnVjdCBiaW8gKl9fYmlvX2FsbG9jKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbywgaW50IG5wYWdlcylcXG4gXFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsXFxuIFxcdFxcdFxcdFxcdGZpby1cXHUwMDNlb3AgfCBmaW8tXFx1MDAzZW9wX2ZsYWdzIHwgZjJmc19pb19mbGFncyhmaW8pLFxcbiBcXHRcXHRcXHRcXHRHRlBfTk9JTywgXFx1MDAyNmYyZnNfYmlvc2V0KTtcXG4rXFx0aWYgKCFpc19yZWFkX2lvKGZpby1cXHUwMDNlb3ApIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmaW8tXFx1MDAzZWZvbGlvKSlcXG4rXFx0XFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc2VjdG9yO1xcbiBcXHRpZiAoaXNfcmVhZF9pbyhmaW8tXFx1MDAzZW9wKSkge1xcbiBcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyA9IGYyZnNfcmVhZF9lbmRfaW87XFxuQEAgLTc5Myw2ICs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdHJldHVybiBiaW8tXFx1MDAzZWJpX2JkZXYgPT0gZjJmc190YXJnZXRfZGV2aWNlKHNiaSwgY3VyX2Jsa2FkZHIsIE5VTEwpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShzdHJ1Y3QgYmlvICpiaW8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbit7XFxuK1xcdHJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSA9PVxcbitcXHRcXHRmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLVxcdTAwM2Vmb2xpbyk7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGlvX3R5cGVfaXNfbWVyZ2VhYmxlKHN0cnVjdCBmMmZzX2Jpb19pbmZvICppbyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbiB7XFxuQEAgLTk4NSw4ICs5OTQsMTAgQEAgaW50IGYyZnNfbWVyZ2VfcGFnZV9iaW8oc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbiBcXG4gXFx0dHJhY2VfZjJmc19zdWJtaXRfZm9saW9fYmlvKGRhdGFfZm9saW8sIGZpbyk7XFxuIFxcbi1cXHRpZiAoYmlvIFxcdTAwMjZcXHUwMDI2ICFwYWdlX2lzX21lcmdlYWJsZShmaW8tXFx1MDAzZXNiaSwgYmlvLCAqZmlvLVxcdTAwM2VsYXN0X2Jsb2NrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRmaW8tXFx1MDAzZW5ld19ibGthZGRyKSlcXG4rXFx0aWYgKGJpbyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKCFwYWdlX2lzX21lcmdlYWJsZShmaW8tXFx1MDAzZXNiaSwgYmlvLCAqZmlvLVxcdTAwM2VsYXN0X2Jsb2NrLFxcbitcXHRcXHRcXHRcXHRmaW8tXFx1MDAzZW5ld19ibGthZGRyKSB8fFxcbitcXHQgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShiaW8sIGZpbykpKVxcbiBcXHRcXHRmMmZzX3N1Ym1pdF9tZXJnZWRfaXB1X3dyaXRlKGZpby1cXHUwMDNlc2JpLCBcXHUwMDI2YmlvLCBOVUxMKTtcXG4gYWxsb2NfbmV3OlxcbiBcXHRpZiAoIWJpbykge1xcbkBAIC0xMDg2LDcgKzEwOTcsOCBAQCB2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbiBcXHQgICAgKCFpb19pc19tZXJnZWFibGUoc2JpLCBpby1cXHUwMDNlYmlvLCBpbywgZmlvLCBpby1cXHUwMDNlbGFzdF9ibG9ja19pbl9iaW8sXFxuIFxcdFxcdFxcdCAgICAgIGZpby1cXHUwMDNlbmV3X2Jsa2FkZHIpIHx8XFxuIFxcdCAgICAgIWYyZnNfY3J5cHRfbWVyZ2VhYmxlX2Jpbyhpby1cXHUwMDNlYmlvLCBmaW9faW5vZGUoZmlvKSxcXG4tXFx0XFx0XFx0XFx0YmlvX2ZvbGlvLVxcdTAwM2VpbmRleCwgZmlvKSkpXFxuK1xcdFxcdFxcdFxcdGJpb19mb2xpby1cXHUwMDNlaW5kZXgsIGZpbykgfHxcXG4rXFx0ICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoaW8tXFx1MDAzZWJpbywgZmlvKSkpXFxuIFxcdFxcdF9fc3VibWl0X21lcmdlZF9iaW8oaW8pO1xcbiBhbGxvY19uZXc6XFxuIFxcdGlmIChpby1cXHUwMDNlYmlvID09IE5VTEwpIHtcXG5AQCAtMzg3MiwxMSArMzg4NCwxNSBAQCBzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4gXFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGlub2RlKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0ZmdmX3QgZmdwX2ZsYWdzID0gRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQ7XFxuIFxcdHBnb2ZmX3QgaW5kZXggPSBwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0Ym9vbCBuZWVkX2JhbGFuY2UgPSBmYWxzZTtcXG4gXFx0YmxvY2tfdCBibGthZGRyID0gTlVMTF9BRERSO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxcbitcXHRcXHRmZ3BfZmxhZ3MgfD0gRkdQX0RPTlRDQUNIRTtcXG4rXFxuIFxcdHRyYWNlX2YyZnNfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuKTtcXG4gXFxuIFxcdGlmICghZjJmc19pc19jaGVja3BvaW50X3JlYWR5KHNiaSkpIHtcXG5AQCAtMzkyMiw5ICszOTM4LDggQEAgc3RhdGljIGludCBmMmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0ICogRG8gbm90IHVzZSBGR1BfU1RBQkxFIHRvIGF2b2lkIGRlYWRsb2NrLlxcbiBcXHQgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLlxcbiBcXHQgKi9cXG4tXFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCxcXG4tXFx0XFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuK1xcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwgZmdwX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuIFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuIFxcdFxcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xcbiBcXHRcXHRnb3RvIGZhaWw7XFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcXG5pbmRleCBlZGMzNTI1NjllODdlLi41NzAyNDRhZTRmYzhhIDEwMDY0NFxcbi0tLSBhL2ZzL2YyZnMvZmlsZS5jXFxuKysrIGIvZnMvZjJmcy9maWxlLmNcXG5AQCAtNTkwOSw2ICs1OTA5LDYgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmMmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmMmZzX2ZpbGVfc3BsaWNlX3JlYWQsXFxuIFxcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuIFxcdC5mYWR2aXNlXFx0PSBmMmZzX2ZpbGVfZmFkdmlzZSxcXG4tXFx0LmZvcF9mbGFnc1xcdD0gRk9QX0JVRkZFUl9SQVNZTkMsXFxuK1xcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcXG4gXFx0LnNldGxlYXNlXFx0PSBnZW5lcmljX3NldGxlYXNlLFxcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozNzo0MC42NDU1MzI0MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI3MDA2NzU1ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkYyRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmMmZzX21lcmdlX3BhZ2VfYmlvXCIsXG4gICAgXCJmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlXCIsXG4gICAgXCJmMmZzX3dyaXRlX2JlZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBGT1BfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUgaW4gRjJGUywgYWxsb3dpbmcgZHJvcGJlaGluZCBmb2xpb3MgdG8gYmUgdGFnZ2VkIGFuZCBjb21wbGV0ZWQgaW4gdGFzayBjb250ZXh0LiBJdCB1cGRhdGVzIGYyZnNfd3JpdGVfYmVnaW4gdG8gc2V0IEZHUF9ET05UQ0FDSEUgYW5kIG1vZGlmaWVzIGYyZnNfbWVyZ2VfcGFnZV9iaW8gYW5kIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUgdG8gYXZvaWQgbWVyZ2luZyBkcm9wYmVoaW5kIGZvbGlvcyB3aXRoIHJlZ3VsYXIgZm9saW9zLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgZmlsZXN5c3RlbSB3cml0ZSBhbmQgSS9PIHN1Ym1pc3Npb24gcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4OTZlN2IyM2U4NTgwZjBkYzAxY2U1ZjJmOTZlMWZkNDc2NjBhMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE5OjM3OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRhLmMgYi9mcy9mMmZzL2RhdGEuY1xuaW5kZXggMjFmMzk2ZWJlMjJjYS4uNmU4MTZjOTM0OWFiYyAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZGF0YS5jXG4rKysgYi9mcy9mMmZzL2RhdGEuY1xuQEAgLTUwMyw2ICs1MDMsOCBAQCBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fYWxsb2Moc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvLCBpbnQgbnBhZ2VzKVxuIFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsXG4gXHRcdFx0XHRmaW8tXHUwMDNlb3AgfCBmaW8tXHUwMDNlb3BfZmxhZ3MgfCBmMmZzX2lvX2ZsYWdzKGZpbyksXG4gXHRcdFx0XHRHRlBfTk9JTywgXHUwMDI2ZjJmc19iaW9zZXQpO1xuK1x0aWYgKCFpc19yZWFkX2lvKGZpby1cdTAwM2VvcCkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmaW8tXHUwMDNlZm9saW8pKVxuK1x0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzZWN0b3I7XG4gXHRpZiAoaXNfcmVhZF9pbyhmaW8tXHUwMDNlb3ApKSB7XG4gXHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBmMmZzX3JlYWRfZW5kX2lvO1xuQEAgLTc5Myw2ICs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRyZXR1cm4gYmlvLVx1MDAzZWJpX2JkZXYgPT0gZjJmc190YXJnZXRfZGV2aWNlKHNiaSwgY3VyX2Jsa2FkZHIsIE5VTEwpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdFx0XHRcdCAgc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxuK3tcbitcdHJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSA9PVxuK1x0XHRmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLVx1MDAzZWZvbGlvKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaW9fdHlwZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfYmlvX2luZm8gKmlvLFxuIFx0XHRcdFx0XHRcdHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiB7XG5AQCAtOTg1LDggKzk5NCwxMCBAQCBpbnQgZjJmc19tZXJnZV9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4gXG4gXHR0cmFjZV9mMmZzX3N1Ym1pdF9mb2xpb19iaW8oZGF0YV9mb2xpbywgZmlvKTtcbiBcbi1cdGlmIChiaW8gXHUwMDI2XHUwMDI2ICFwYWdlX2lzX21lcmdlYWJsZShmaW8tXHUwMDNlc2JpLCBiaW8sICpmaW8tXHUwMDNlbGFzdF9ibG9jayxcbi1cdFx0XHRcdFx0XHRmaW8tXHUwMDNlbmV3X2Jsa2FkZHIpKVxuK1x0aWYgKGJpbyBcdTAwMjZcdTAwMjZcbitcdCAgICAoIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby1cdTAwM2VzYmksIGJpbywgKmZpby1cdTAwM2VsYXN0X2Jsb2NrLFxuK1x0XHRcdFx0ZmlvLVx1MDAzZW5ld19ibGthZGRyKSB8fFxuK1x0ICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoYmlvLCBmaW8pKSlcbiBcdFx0ZjJmc19zdWJtaXRfbWVyZ2VkX2lwdV93cml0ZShmaW8tXHUwMDNlc2JpLCBcdTAwMjZiaW8sIE5VTEwpO1xuIGFsbG9jX25ldzpcbiBcdGlmICghYmlvKSB7XG5AQCAtMTA4Niw3ICsxMDk3LDggQEAgdm9pZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiBcdCAgICAoIWlvX2lzX21lcmdlYWJsZShzYmksIGlvLVx1MDAzZWJpbywgaW8sIGZpbywgaW8tXHUwMDNlbGFzdF9ibG9ja19pbl9iaW8sXG4gXHRcdFx0ICAgICAgZmlvLVx1MDAzZW5ld19ibGthZGRyKSB8fFxuIFx0ICAgICAhZjJmc19jcnlwdF9tZXJnZWFibGVfYmlvKGlvLVx1MDAzZWJpbywgZmlvX2lub2RlKGZpbyksXG4tXHRcdFx0XHRiaW9fZm9saW8tXHUwMDNlaW5kZXgsIGZpbykpKVxuK1x0XHRcdFx0YmlvX2ZvbGlvLVx1MDAzZWluZGV4LCBmaW8pIHx8XG4rXHQgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShpby1cdTAwM2ViaW8sIGZpbykpKVxuIFx0XHRfX3N1Ym1pdF9tZXJnZWRfYmlvKGlvKTtcbiBhbGxvY19uZXc6XG4gXHRpZiAoaW8tXHUwMDNlYmlvID09IE5VTEwpIHtcbkBAIC0zODcyLDExICszODg0LDE1IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGlub2RlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRmZ2ZfdCBmZ3BfZmxhZ3MgPSBGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVDtcbiBcdHBnb2ZmX3QgaW5kZXggPSBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRib29sIG5lZWRfYmFsYW5jZSA9IGZhbHNlO1xuIFx0YmxvY2tfdCBibGthZGRyID0gTlVMTF9BRERSO1xuIFx0aW50IGVyciA9IDA7XG4gXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG4rXHRcdGZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFO1xuK1xuIFx0dHJhY2VfZjJmc193cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pO1xuIFxuIFx0aWYgKCFmMmZzX2lzX2NoZWNrcG9pbnRfcmVhZHkoc2JpKSkge1xuQEAgLTM5MjIsOSArMzkzOCw4IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHQgKiBEbyBub3QgdXNlIEZHUF9TVEFCTEUgdG8gYXZvaWQgZGVhZGxvY2suXG4gXHQgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLlxuIFx0ICovXG4tXHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG4tXHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCxcbi1cdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuK1x0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsXG4rXHRcdFx0XHQgICAgICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0Z290byBmYWlsO1xuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcbmluZGV4IGVkYzM1MjU2OWU4N2UuLjU3MDI0NGFlNGZjOGEgMTAwNjQ0XG4tLS0gYS9mcy9mMmZzL2ZpbGUuY1xuKysrIGIvZnMvZjJmcy9maWxlLmNcbkBAIC01OTA5LDYgKzU5MDksNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGYyZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0LnNwbGljZV9yZWFkXHQ9IGYyZnNfZmlsZV9zcGxpY2VfcmVhZCxcbiBcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5mYWR2aXNlXHQ9IGYyZnNfZmlsZV9mYWR2aXNlLFxuLVx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyxcbitcdC5mb3BfZmxhZ3NcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxuIFx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM3OjQwLjY0NTUzNDA0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTM2MjI3MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRjJGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEYyRlMgaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgaXQsIHNvIGxldCdzIGRpZyBpbi4gSSBzZWUgY2hhbmdlcyB0byBgZnMvZjJmcy9kYXRhLmNgIGFuZCBgZnMvZjJmcy9maWxlLmNgIOKAkyBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGNvcmUgYXJlYXMuXG5cbkZpcnN0LCBsZXQncyBsb29rIGF0IHRoZSBgX19iaW9fYWxsb2NgIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZyB0byB0aGUgYmlvIGlmIGl0J3Mgbm90IGEgcmVhZCBvcGVyYXRpb24gYW5kIHRoZSBmb2xpbyBoYXMgYGRyb3BiZWhpbmRgIHNldC4gVGhpcyBzdWdnZXN0cyB0aGV5J3JlIHRyeWluZyB0byBjb250cm9sIHdoZW4gdGhlIEkvTyBjb21wbGV0ZXMsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gY2FjaGluZyBiZWhhdmlvci5cblxuTmV4dCwgdGhlcmUncyB0aGUgYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBpbnRyb2R1Y2VkIHRvIGNoZWNrIGlmIGFuIGV4aXN0aW5nIGJpbyBjYW4gYmUgbWVyZ2VkIHdpdGggYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcsIGFuZCB0aGUgYGRyb3BiZWhpbmRgIHN0YXRlIG9mIHRoZSBmb2xpby4gSWYgdGhlIGRyb3BiZWhpbmQgc3RhdGUgZGlmZmVycyBiZXR3ZWVuIGJpbyBhbmQgZm9saW8sIHRoZSBtZXJnaW5nIGlzIHByZXZlbnRlZC4gVGhpcyBtZXJnZWFiaWxpdHkgY2hlY2sgaW4gYGYyZnNfbWVyZ2VfcGFnZV9iaW9gIGFuZCBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAgaXMgYSBjcml0aWNhbCBvcHRpbWl6YXRpb24uIEl0J3MgZGVzaWduZWQgdG8gb3B0aW1pemUgdGhlIEkvTyBtZXJnaW5nIHdoZW4gd3JpdGVzIGFyZSBzdWJtaXR0ZWQuXG5cbk5vdywgcmVnYXJkaW5nIGBmMmZzX3dyaXRlX2JlZ2luYCwgdGhlIGFkZGl0aW9uIG9mIGBJT0NCX0RPTlRDQUNIRWAgaXMgdGVsbGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGRpcmVjdGx5IHBhc3NpbmcgdGhpcyBmbGFnIGRvd24gdG8gdGhlIGZvbGlvIGFsbG9jYXRpb24gdXNpbmcgYEZHUF9ET05UQ0FDSEVgLiBUaGlzIGlzIGEgZGlyZWN0IG1ldGhvZCBvZiBjb250cm9sbGluZyB0aGUgY2FjaGluZyBiZWhhdmlvciBvZiB0aGUgdW5kZXJseWluZyBmaWxlLlxuXG5GaW5hbGx5LCBpbiBgZnMvZjJmcy9maWxlLmNgLCB0aGUgYGZvcF9mbGFnc2AgZm9yIHRoZSBmaWxlIG9wZXJhdGlvbnMgYXJlIHNldCB0byBgRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBhcyBpdCBpbmRpY2F0ZXMgd2Ugc2hvdWxkIGNhY2hlIGFzeW5jIHJlYWRzIGFuZCBoYXZlIGBET05UQ0FDSEVgIGVuYWJsZWQgYXQgdGhlIGZpbGUgbGV2ZWwuIFRoaXMgc2V0dGluZyBpcyBsaWtlbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjaGFuZ2VzIGluIGBmMmZzX3dyaXRlX2JlZ2luYCB0byBwcm92aWRlIGEgd2F5IHRvIHNlbGVjdGl2ZWx5IGRpc2FibGUgY2FjaGluZyBmb3Igd3JpdGVzLlxuXG5Ob3csIGJlZm9yZSBJIGdvIGRlZXBlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgc2hvdWxkIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIGBmcy9mMmZzL0tjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgc2V0dGluZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG90aGVyIEYyRlMgZmVhdHVyZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyByZXF1aXJlZCBpbiB0aGUgdXNlcidzIGVudmlyb25tZW50IHRvIHVzZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6Mzc6NTEuMTgxNzYzNDE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZjJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRjJGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkYyRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBGMkZTX0ZTX1hBVFRSIGlmIEZTX0VOQ1JZUFRJT05cXG4gICA5OlxcdFxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbiAgMTA6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAxMTpcXHRcXHRzZWxlY3QgTFo0X0NPTVBSRVNTIGlmIEYyRlNfRlNfTFo0XFxuICAxMjpcXHRcXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcXG4gIDEzOlxcdFxcdHNlbGVjdCBMWjRIQ19DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNEhDXFxuICAxNDpcXHRcXHRzZWxlY3QgTFpPX0NPTVBSRVNTIGlmIEYyRlNfRlNfTFpPXFxuICAxNTpcXHRcXHRzZWxlY3QgTFpPX0RFQ09NUFJFU1MgaWYgRjJGU19GU19MWk9cXG4gIDE2OlxcdFxcdHNlbGVjdCBaU1REX0NPTVBSRVNTIGlmIEYyRlNfRlNfWlNURFxcbiAgMTc6XFx0XFx0c2VsZWN0IFpTVERfREVDT01QUkVTUyBpZiBGMkZTX0ZTX1pTVERcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgRjJGUyBpcyBiYXNlZCBvbiBMb2ctc3RydWN0dXJlZCBGaWxlIFN5c3RlbSAoTEZTKSwgd2hpY2ggc3VwcG9ydHNcXG4gIDIwOlxcdFxcdCAgdmVyc2F0aWxlIFxcXCJmbGFzaC1mcmllbmRseVxcXCIgZmVhdHVyZXMuIFRoZSBkZXNpZ24gaGFzIGJlZW4gZm9jdXNlZCBvblxcbiAgMjE6XFx0XFx0ICBhZGRyZXNzaW5nIHRoZSBmdW5kYW1lbnRhbCBpc3N1ZXMgaW4gTEZTLCB3aGljaCBhcmUgc25vd2JhbGwgZWZmZWN0XFxuICAyMjpcXHRcXHQgIG9mIHdhbmRlcmluZyB0cmVlIGFuZCBoaWdoIGNsZWFuaW5nIG92ZXJoZWFkLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIFNpbmNlIGZsYXNoLWJhc2VkIHN0b3JhZ2VzIHNob3cgZGlmZmVyZW50IGNoYXJhY3RlcmlzdGljcyBhY2NvcmRpbmcgdG9cXG4gIDI1OlxcdFxcdCAgdGhlIGludGVybmFsIGdlb21ldHJ5IG9yIGZsYXNoIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZXMgYWthIEZUTCwgRjJGU1xcbiAgMjY6XFx0XFx0ICBhbmQgdG9vbHMgc3VwcG9ydCB2YXJpb3VzIHBhcmFtZXRlcnMgbm90IG9ubHkgZm9yIGNvbmZpZ3VyaW5nIG9uLWRpc2tcXG4gIDI3OlxcdFxcdCAgbGF5b3V0LCBidXQgYWxzbyBmb3Igc2VsZWN0aW5nIGFsbG9jYXRpb24gYW5kIGNsZWFuaW5nIGFsZ29yaXRobXMuXFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEYyRlNfU1RBVF9GU1xcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRjJGUyBTdGF0dXMgSW5mb3JtYXRpb25cXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIEYyRlNfRlNcXG4gIDM0OlxcdFxcdGRlZmF1bHQgeVxcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICAvc3lzL2tlcm5lbC9kZWJ1Zy9mMmZzLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIHBhcnRpdGlvbnNcXG4gIDM3OlxcdFxcdCAgbW91bnRlZCBhcyBmMmZzLiBFYWNoIGZpbGUgc2hvd3MgdGhlIHdob2xlIGYyZnMgaW5mb3JtYXRpb24uXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgL3N5cy9rZXJuZWwvZGVidWcvZjJmcy9zdGF0dXMgaW5jbHVkZXM6XFxuICA0MDpcXHRcXHQgICAgLSBtYWpvciBmaWxlc3lzdGVtIGluZm9ybWF0aW9uIG1hbmFnZWQgYnkgZjJmcyBjdXJyZW50bHlcXG4gIDQxOlxcdFxcdCAgICAtIGF2ZXJhZ2UgU0lUIGluZm9ybWF0aW9uIGFib3V0IHdob2xlIHNlZ21lbnRzXFxuICA0MjpcXHRcXHQgICAgLSBjdXJyZW50IG1lbW9yeSBmb290cHJpbnQgY29uc3VtZWQgYnkgZjJmcy5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIEYyRlNfRlNfWEFUVFJcXG4gIDQ1OlxcdFxcdGJvb2wgXFxcIkYyRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gRjJGU19GU1xcbiAgNDc6XFx0XFx0ZGVmYXVsdCB5XFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieVxcbiAgNTA6XFx0XFx0ICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozNzo1MS4xODE4NTgwNDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODkyODM5OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkYyRlMgQW5hbHlzaXMgZm9yIFN5emthbGxlciBDb3ZlcmFnZSoqXG5cbk9rYXksIGxldCdzIHNlZSB3aGVyZSB3ZSBzdGFuZCB3aXRoIEYyRlMgYW5kIHN5emthbGxlci4gRmlyc3QsIGlzIEYyRlMgYSBzdGFuZGFyZCB0YXJnZXQgZm9yIGZ1enppbmc/IFllcCwgZ29vZCB0byBzZWUgdGhhdCBpdCdzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiBUaGF0J3MgYSBncmVhdCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGFydHMgb2YgdGhlIEYyRlMgY29kZSBhcmUgYmVpbmcgdG91Y2hlZC5cblxuUmlnaHQsIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlOiBgX19iaW9fYWxsb2NgLCBgZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGVgLCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIGBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlYCwgYGYyZnNfd3JpdGVfYmVnaW5gLCBhbmQgYGYyZnNfZmlsZV9vcGVyYXRpb25zYC4gR290IGl0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgLCBhbmQgaG93IGBmMmZzX3dyaXRlX2JlZ2luYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEEgcXVpY2sgYGdyZXBgIGZvciBgZjJmc193cml0ZV9iZWdpbmAgc2hvdWxkIGRvIHRoZSB0cmljay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgdXNhZ2UgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM3OjU0LjA3NDcwMDM5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY0OTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmMmZzX3dyaXRlX2JlZ2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2YyZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZjJmcy9kYXRhLmM9MzgzMD1zdGF0aWMgaW50IHByZXBhcmVfYXRvbWljX3dyaXRlX2JlZ2luKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2YyZnMvZGF0YS5jLTM4NzgtXFxuZnMvZjJmcy9kYXRhLmM6Mzg3OTpzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2YyZnMvZGF0YS5jLTM4ODAtXFx0XFx0XFx0ICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZjJmcy9kYXRhLmMtMzg5NS1cXG5mcy9mMmZzL2RhdGEuYzozODk2OlxcdHRyYWNlX2YyZnNfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuKTtcXG5mcy9mMmZzL2RhdGEuYy0zODk3LVxcbi0tXFxuZnMvZjJmcy9kYXRhLmM9NDQ0NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGYyZnNfZGJsb2NrX2FvcHMgPSB7XFxuLS1cXG5mcy9mMmZzL2RhdGEuYy00NDQ4LVxcdC53cml0ZXBhZ2VzXFx0PSBmMmZzX3dyaXRlX2RhdGFfcGFnZXMsXFxuZnMvZjJmcy9kYXRhLmM6NDQ0OTpcXHQud3JpdGVfYmVnaW5cXHQ9IGYyZnNfd3JpdGVfYmVnaW4sXFxuZnMvZjJmcy9kYXRhLmMtNDQ1MC1cXHQud3JpdGVfZW5kXFx0PSBmMmZzX3dyaXRlX2VuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6Mzc6NTQuMTMwMzUzNjc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3OTY4MzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDpcblxuKipEaXZpbmcgaW50byBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIGFuZCBmMmZzX21lcmdlX3BhZ2VfYmlvKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IEYyRlMgaGFuZGxlcyBwYWdlIHdyaXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgIGFuZCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AuIEVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBtZWNoYW5pY3MgaGVyZSwgdGhlIG51dHMgYW5kIGJvbHRzIG9mIGdldHRpbmcgZGF0YSBmcm9tIHRoZSBwYWdlIGNhY2hlIGRvd24gdG8gdGhlIGZsYXNoLlxuXG5gZjJmc19zdWJtaXRfcGFnZV93cml0ZWAsIHRoYXQncyB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIGZvciBhIHdyaXRlLCByaWdodD8gSXQncyB3aGVyZSB3ZSB0YWtlIGEgbW9kaWZpZWQgcGFnZSBhbmQgcHJlcGFyZSB0byBzZW5kIGl0IG91dCB0byB0aGUgZmxhc2guIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0J3MgdGhlIGludGVyZmFjZT8gV2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQ/IElzIGl0IHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cz8gRG9lcyBpdCBoYW5kbGUgYW55IHByZS1mbHVzaGluZyBvciBpbnZhbGlkYXRpb24gc3RlcHMgYmVmb3JlIHRoZSBJTyBpcyBhY3R1YWxseSBkaXNwYXRjaGVkPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggbWV0YWRhdGEgdXBkYXRlcywgb3IgaG93IGl0IGJhdGNoZXMgSU8gaWYgd2UncmUgZGVhbGluZyB3aXRoIGZpbGUgZGF0YS4gQW55IGludGVybmFsIHF1ZXVpbmc/IEFueSBkaXJlY3QgY2FsbHMgdG8gdGhlIGJsb2NrIGxheWVyIGZvciBzdWJtaXR0aW5nIHRoZSBiaW8/IFdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIGFuIGVycm9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9naWMuIEFyZSB0aGVyZSBhbnkgY29udGV4dC1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGRhdGEgb3IgdGhlIGN1cnJlbnQgRjJGUyBzdGF0ZT9cblxuVGhlbiB3ZSBoYXZlIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBmb3JtIG9mIEJJTyBtZXJnaW5nIG9yIGFnZ3JlZ2F0aW9uLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLiBTbywgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBjb250aWd1b3VzIG9yIG5lYXJieSBwYWdlcywgYXJlIHdlIHRyeWluZyB0byBjb2FsZXNjZSB0aGVtIGludG8gYSBzaW5nbGUgQklPIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2YgbWFueSBzbWFsbGVyIHJlcXVlc3RzPyBXaGF0IGFyZSB0aGUgY3JpdGVyaWEgZm9yIG1lcmdpbmc/IEhvdyBkb2VzIGl0IGRlY2lkZSBpZiBhIG1lcmdlIGlzIGJlbmVmaWNpYWwgdmVyc3VzIGRldHJpbWVudGFsPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHBhcnRpYWwgcGFnZSB3cml0ZXMgZHVyaW5nIGEgbWVyZ2UsIGVzcGVjaWFsbHkgd2l0aCB3ZWFyLWxldmVsaW5nIGNvbnNpZGVyYXRpb25zIGluIG1pbmQ/IEFueSBkZXBlbmRlbmNpZXMgb24gdGhlIHVuZGVybHlpbmcgZmxhc2ggY29udHJvbGxlcidzIGNhcGFiaWxpdGllcz8gRG9lcyBGMkZTIGhhdmUgYW55IGludGVsbGlnZW50IGhldXJpc3RpY3MgZm9yIEJJTyBtZXJnaW5nPyBGb3IgZXhhbXBsZSwgYXJlIHdlIHRyeWluZyB0byBtYXhpbWl6ZSB0aGUgc2l6ZSBvZiB3cml0ZXMgYmFzZWQgb24gdGhlIGZsYXNoJ3MgZXJhc2UgYmxvY2sgc2l6ZT8gRG9lcyBpdCBwcmlvcml0aXplIHNvbWUgd3JpdGVzIG92ZXIgb3RoZXJzIHRvIG1heGltaXplIHRoZSBtZXJnZSBwb3RlbnRpYWw/XG5BcmUgdGhlcmUgYW55IGxvY2tpbmcgY29uY2VybnMgaW4gbWVyZ2luZywgcGFydGljdWxhcmx5IHdpdGggY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHBhZ2UgY2FjaGU/XG5cblVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbWJpbmVkIHJvbGUuIEhvdyBkbyBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAgYW5kIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCB3b3JrIHRvZ2V0aGVyIHRvIHByb3ZpZGUgb3B0aW1hbCBJTyBwZXJmb3JtYW5jZSB3aGlsZSBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgY29uc2lzdGVuY3kgZm9yIHRoaXMgZmlsZXN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjAwLjcxMDA0MDQwOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMzNjE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmMmZzX21lcmdlX3BhZ2VfYmlvfGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZjJmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mMmZzL2RhdGEuYz05NTU9dm9pZCBmMmZzX3N1Ym1pdF9hbGxfbWVyZ2VkX2lwdV93cml0ZXMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKVxcbi0tXFxuZnMvZjJmcy9kYXRhLmMtOTgzLVxcbmZzL2YyZnMvZGF0YS5jOjk4NDppbnQgZjJmc19tZXJnZV9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXFxuZnMvZjJmcy9kYXRhLmMtOTg1LXtcXG4tLVxcbmZzL2YyZnMvZGF0YS5jPTEwMjY9c3RhdGljIGJvb2wgaXNfZW5kX3pvbmVfYmxrYWRkcihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIGJsb2NrX3QgYmxrYWRkcilcXG4tLVxcbmZzL2YyZnMvZGF0YS5jLTEwNDYtXFxuZnMvZjJmcy9kYXRhLmM6MTA0Nzp2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbmZzL2YyZnMvZGF0YS5jLTEwNDgte1xcbi0tXFxuZnMvZjJmcy9mMmZzLmg9NDI0Nz1pbnQgZjJmc19zdWJtaXRfcGFnZV9iaW8oc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKTtcXG5mcy9mMmZzL2YyZnMuaDo0MjQ4OmludCBmMmZzX21lcmdlX3BhZ2VfYmlvKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbyk7XFxuZnMvZjJmcy9mMmZzLmg6NDI0OTp2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKTtcXG5mcy9mMmZzL2YyZnMuaC00MjUwLXN0cnVjdCBibG9ja19kZXZpY2UgKmYyZnNfdGFyZ2V0X2RldmljZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXFxuLS1cXG5mcy9mMmZzL2djLmM9MTMyNj1zdGF0aWMgaW50IG1vdmVfZGF0YV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBibG9ja190IGJpZHgsXFxuLS1cXG5mcy9mMmZzL2djLmMtMTQ3Ny1cXHRmaW8ubmV3X2Jsa2FkZHIgPSBuZXdhZGRyO1xcbmZzL2YyZnMvZ2MuYzoxNDc4OlxcdGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoXFx1MDAyNmZpbyk7XFxuZnMvZjJmcy9nYy5jLTE0NzktXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYz00MDg3PXN0YXRpYyB2b2lkIGRvX3dyaXRlX3BhZ2Uoc3RydWN0IGYyZnNfc3VtbWFyeSAqc3VtLCBzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MTIwLVxcdC8qIHdyaXRlb3V0IGRpcnR5IHBhZ2UgaW50byBiZGV2ICovXFxuZnMvZjJmcy9zZWdtZW50LmM6NDEyMTpcXHRmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKGZpbyk7XFxuZnMvZjJmcy9zZWdtZW50LmMtNDEyMi1cXG4tLVxcbmZzL2YyZnMvc2VnbWVudC5jPTQxMjk9dm9pZCBmMmZzX2RvX3dyaXRlX21ldGFfcGFnZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MTQ4LVxcdGZvbGlvX3N0YXJ0X3dyaXRlYmFjayhmb2xpbyk7XFxuZnMvZjJmcy9zZWdtZW50LmM6NDE0OTpcXHRmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKFxcdTAwMjZmaW8pO1xcbmZzL2YyZnMvc2VnbWVudC5jLTQxNTAtXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYz00MTgxPWludCBmMmZzX2lucGxhY2Vfd3JpdGVfZGF0YShzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MjEyLVxcdGlmIChmaW8tXFx1MDAzZWJpbyBcXHUwMDI2XFx1MDAyNiAhSVNfRjJGU19JUFVfTk9DQUNIRShzYmkpKVxcbmZzL2YyZnMvc2VnbWVudC5jOjQyMTM6XFx0XFx0ZXJyID0gZjJmc19tZXJnZV9wYWdlX2JpbyhmaW8pO1xcbmZzL2YyZnMvc2VnbWVudC5jLTQyMTQtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozODowMC43NTgzODUyODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODE3MDc3ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkYyRlMgRHJvcGJlaGluZCBXcml0ZW91dCBTdXBwb3J0IC0gRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgRk9QX0RPTlRDQUNIRWAgYW5kIGBJT0NCX0RPTlRDQUNIRWAgKGRyb3BiZWhpbmQgd3JpdGVvdXQpIHdpdGhpbiBGMkZTLiBFc3NlbnRpYWxseSwgaXQncyBzZXR0aW5nIHRoZSBgZHJvcGJlaGluZGAgZmxhZyBvbiBmb2xpb3MgZHVyaW5nIHdyaXRlIG9wZXJhdGlvbnMsIHdoaWNoIHRoZW4gY2FzY2FkZXMgZG93biB0byBCSU8gYWxsb2NhdGlvbiBhbmQgbWVyZ2luZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBgZjJmc193cml0ZV9iZWdpbmAgbm93IHVzZXMgYEZHUF9ET05UQ0FDSEVgLCBhZmZlY3RpbmcgaG93IGZvbGlvcyBhcmUgaGFuZGxlZC4gVGhpcyB0aGVuIGZsb3dzIGludG8gYF9fYmlvX2FsbG9jYCwgc2V0dGluZyBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIHdoZW4gYSBkcm9wYmVoaW5kIGZvbGlvIGlzIGludm9sdmVkIGluIGEgd3JpdGUgSU8uIEltcG9ydGFudGx5LCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBiaW8gbWVyZ2luZyBmdW5jdGlvbnMgKGBmMmZzX21lcmdlX3BhZ2VfYmlvYCwgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgKSB0byBwcmV2ZW50IHRoZSBtZXJnaW5nIG9mIGRyb3BiZWhpbmQgYW5kIG5vbi1kcm9wYmVoaW5kIGJpb3MgdXNpbmcgYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYC5cblxuR2l2ZW4gdGhhdCBGMkZTIGlzIGEgZmlsZXN5c3RlbSB0aGF0J3MgYWN0aXZlbHkgZnV6emVkLCB0aGVzZSBjaGFuZ2VzIHdpdGhpbiB0aGUgSS9PIHBhdGggYXJlIHNpZ25pZmljYW50LiBNb2RpZnlpbmcgd3JpdGVfYmVnaW4sIGJpbyBtZXJnaW5nLCBhbmQgc3VibWlzc2lvbiBpcyBnb2luZyB0byBleHBvc2UgdGhlIGZpbGVzeXN0ZW0gdG8gbmV3IGV4ZWN1dGlvbiBwYXRocyBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBpc3N1ZXMsIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBpbmNvbXBsZXRlIGJpbyBzdWJtaXNzaW9uLCBtZW1vcnkgbGVha3MsIGFuZCBCSU8gY29tcGxldGlvbiBwcm9ibGVtcy4gVGhlcmVmb3JlLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuVG8gYmUgc3BlY2lmaWMsIHRoZSByZXF1aXJlZCBjb25maWcgZm9yIHRoaXMgaXMgYEYyRlNfRlNgLlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xzLCBsZXQncyBuYWlsIGRvd24gd2hhdCdzIGJlZW4gbW9kaWZpZWQuIFdlIGhhdmUgYGYyZnNfd3JpdGVfYmVnaW5gLCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIGFuZCBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAgYXMgdGhlIG1haW4gdG91Y2hwb2ludHMuIExvb2tpbmcgYXQgYF9fYmlvX2FsbG9jYCBhbmQgYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYCwgdGhleSBhcmUgc3RhdGljLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZW0gZGlyZWN0bHkgYmVpbmcgZXhwb3J0ZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCB0byB3b3JyeSBhYm91dCBvdGhlciBpc3N1ZXMuIFRoZXJlZm9yZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHk6IGBmMmZzX3dyaXRlX2JlZ2luYCwgYGYyZnNfbWVyZ2VfcGFnZV9iaW9gLCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgLlxuXG5BbHJpZ2h0LCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSdyZSBjbGVhcjpcblxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgW1wiRjJGU19GU1wiXWBcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wiZjJmc193cml0ZV9iZWdpblwiLCBcImYyZnNfbWVyZ2VfcGFnZV9iaW9cIiwgXCJmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlXCJdYFxuKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYFxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyBrZXkgRjJGUyBJL08gcGF0aHMgKHdyaXRlX2JlZ2luLCBiaW8gbWVyZ2luZywgc3VibWlzc2lvbikgd2l0aCBkcm9wYmVoaW5kIHdyaXRlb3V0LCBwb3RlbnRpYWxseSBleHBvc2luZyByYWNlIGNvbmRpdGlvbnMsIGJpbyBzdWJtaXNzaW9uIGlzc3VlcywgbWVtb3J5IGxlYWtzLCBvciBCSU8gY29tcGxldGlvbiBpc3N1ZXMgaW4gYSBmaWxlc3lzdGVtIHRoYXQgaXMgYWN0aXZlbHkgZnV6emVkLlxuXG5Ob3csIGxldCdzIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzMsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjA3LjU3NTQ2NTg4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODE4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGMkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZjJmc19tZXJnZV9wYWdlX2Jpb1wiLFxuICAgIFwiZjJmc19zdWJtaXRfcGFnZV93cml0ZVwiLFxuICAgIFwiZjJmc193cml0ZV9iZWdpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGMkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZjJmc19tZXJnZV9wYWdlX2Jpb1wiLFxuICAgIFwiZjJmc19zdWJtaXRfcGFnZV93cml0ZVwiLFxuICAgIFwiZjJmc193cml0ZV9iZWdpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6Mzg6MDcuNjUyMjkyMTYzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU0MjgxMTE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjA3LjY1Mjc0ODE2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0NTQyMzMxMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIElPQ0JfRE9OVENBQ0hFIChSV0ZfRE9OVENBQ0hFIC8gZHJvcC1iZWhpbmQgY2FjaGluZykgaW4gRjJGUyBidWZmZXJlZCB3cml0ZXMgYnkgc2V0dGluZyBGR1BfRE9OVENBQ0hFIGluIGYyZnNfd3JpdGVfYmVnaW4sIEJJT19DT01QTEVURV9JTl9UQVNLIGluIF9fYmlvX2FsbG9jLCBjaGVja2luZyBiaW8gbWVyZ2VhYmlsaXR5IGJhc2VkIG9uIHRoZSBmb2xpbyBkcm9wYmVoaW5kIGZsYWcsIGFuZCBkZWNsYXJpbmcgRk9QX0RPTlRDQUNIRSBpbiBmMmZzX2ZpbGVfb3BlcmF0aW9ucy5cXG5cXG5ObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIGNvbmN1cnJlbmN5LCBvciBiaW8gbWFuYWdlbWVudCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4OTZlN2IyM2U4NTgwZjBkYzAxY2U1ZjJmOTZlMWZkNDc2NjBhMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE5OjM3OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRhLmMgYi9mcy9mMmZzL2RhdGEuY1xuaW5kZXggMjFmMzk2ZWJlMjJjYS4uNmU4MTZjOTM0OWFiYyAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZGF0YS5jXG4rKysgYi9mcy9mMmZzL2RhdGEuY1xuQEAgLTUwMyw2ICs1MDMsOCBAQCBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fYWxsb2Moc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvLCBpbnQgbnBhZ2VzKVxuIFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsXG4gXHRcdFx0XHRmaW8tXHUwMDNlb3AgfCBmaW8tXHUwMDNlb3BfZmxhZ3MgfCBmMmZzX2lvX2ZsYWdzKGZpbyksXG4gXHRcdFx0XHRHRlBfTk9JTywgXHUwMDI2ZjJmc19iaW9zZXQpO1xuK1x0aWYgKCFpc19yZWFkX2lvKGZpby1cdTAwM2VvcCkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmaW8tXHUwMDNlZm9saW8pKVxuK1x0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzZWN0b3I7XG4gXHRpZiAoaXNfcmVhZF9pbyhmaW8tXHUwMDNlb3ApKSB7XG4gXHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBmMmZzX3JlYWRfZW5kX2lvO1xuQEAgLTc5Myw2ICs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRyZXR1cm4gYmlvLVx1MDAzZWJpX2JkZXYgPT0gZjJmc190YXJnZXRfZGV2aWNlKHNiaSwgY3VyX2Jsa2FkZHIsIE5VTEwpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdFx0XHRcdCAgc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxuK3tcbitcdHJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSA9PVxuK1x0XHRmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLVx1MDAzZWZvbGlvKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaW9fdHlwZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfYmlvX2luZm8gKmlvLFxuIFx0XHRcdFx0XHRcdHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiB7XG5AQCAtOTg1LDggKzk5NCwxMCBAQCBpbnQgZjJmc19tZXJnZV9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4gXG4gXHR0cmFjZV9mMmZzX3N1Ym1pdF9mb2xpb19iaW8oZGF0YV9mb2xpbywgZmlvKTtcbiBcbi1cdGlmIChiaW8gXHUwMDI2XHUwMDI2ICFwYWdlX2lzX21lcmdlYWJsZShmaW8tXHUwMDNlc2JpLCBiaW8sICpmaW8tXHUwMDNlbGFzdF9ibG9jayxcbi1cdFx0XHRcdFx0XHRmaW8tXHUwMDNlbmV3X2Jsa2FkZHIpKVxuK1x0aWYgKGJpbyBcdTAwMjZcdTAwMjZcbitcdCAgICAoIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby1cdTAwM2VzYmksIGJpbywgKmZpby1cdTAwM2VsYXN0X2Jsb2NrLFxuK1x0XHRcdFx0ZmlvLVx1MDAzZW5ld19ibGthZGRyKSB8fFxuK1x0ICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoYmlvLCBmaW8pKSlcbiBcdFx0ZjJmc19zdWJtaXRfbWVyZ2VkX2lwdV93cml0ZShmaW8tXHUwMDNlc2JpLCBcdTAwMjZiaW8sIE5VTEwpO1xuIGFsbG9jX25ldzpcbiBcdGlmICghYmlvKSB7XG5AQCAtMTA4Niw3ICsxMDk3LDggQEAgdm9pZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiBcdCAgICAoIWlvX2lzX21lcmdlYWJsZShzYmksIGlvLVx1MDAzZWJpbywgaW8sIGZpbywgaW8tXHUwMDNlbGFzdF9ibG9ja19pbl9iaW8sXG4gXHRcdFx0ICAgICAgZmlvLVx1MDAzZW5ld19ibGthZGRyKSB8fFxuIFx0ICAgICAhZjJmc19jcnlwdF9tZXJnZWFibGVfYmlvKGlvLVx1MDAzZWJpbywgZmlvX2lub2RlKGZpbyksXG4tXHRcdFx0XHRiaW9fZm9saW8tXHUwMDNlaW5kZXgsIGZpbykpKVxuK1x0XHRcdFx0YmlvX2ZvbGlvLVx1MDAzZWluZGV4LCBmaW8pIHx8XG4rXHQgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShpby1cdTAwM2ViaW8sIGZpbykpKVxuIFx0XHRfX3N1Ym1pdF9tZXJnZWRfYmlvKGlvKTtcbiBhbGxvY19uZXc6XG4gXHRpZiAoaW8tXHUwMDNlYmlvID09IE5VTEwpIHtcbkBAIC0zODcyLDExICszODg0LDE1IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGlub2RlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRmZ2ZfdCBmZ3BfZmxhZ3MgPSBGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVDtcbiBcdHBnb2ZmX3QgaW5kZXggPSBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRib29sIG5lZWRfYmFsYW5jZSA9IGZhbHNlO1xuIFx0YmxvY2tfdCBibGthZGRyID0gTlVMTF9BRERSO1xuIFx0aW50IGVyciA9IDA7XG4gXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG4rXHRcdGZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFO1xuK1xuIFx0dHJhY2VfZjJmc193cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pO1xuIFxuIFx0aWYgKCFmMmZzX2lzX2NoZWNrcG9pbnRfcmVhZHkoc2JpKSkge1xuQEAgLTM5MjIsOSArMzkzOCw4IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHQgKiBEbyBub3QgdXNlIEZHUF9TVEFCTEUgdG8gYXZvaWQgZGVhZGxvY2suXG4gXHQgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLlxuIFx0ICovXG4tXHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG4tXHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCxcbi1cdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuK1x0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsXG4rXHRcdFx0XHQgICAgICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0Z290byBmYWlsO1xuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcbmluZGV4IGVkYzM1MjU2OWU4N2UuLjU3MDI0NGFlNGZjOGEgMTAwNjQ0XG4tLS0gYS9mcy9mMmZzL2ZpbGUuY1xuKysrIGIvZnMvZjJmcy9maWxlLmNcbkBAIC01OTA5LDYgKzU5MDksNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGYyZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0LnNwbGljZV9yZWFkXHQ9IGYyZnNfZmlsZV9zcGxpY2VfcmVhZCxcbiBcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5mYWR2aXNlXHQ9IGYyZnNfZmlsZV9mYWR2aXNlLFxuLVx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyxcbitcdC5mb3BfZmxhZ3NcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxuIFx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjA3LjY1Mjc0OTAzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjc2NDYzMzA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQWRkaW5nIFJXRl9ET05UQ0FDSEUgU3VwcG9ydCB0byBGMkZTKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIGBSV0ZfRE9OVENBQ0hFYCBhbmQgYElPQ0JfRE9OVENBQ0hFYCBmbGFncyB3aXRoaW4gdGhlIEYyRlMgZmlsZXN5c3RlbSwgZWZmZWN0aXZlbHkgZW5hYmxpbmcgYSBcImRyb3AtYmVoaW5kXCIgYmVoYXZpb3IgZm9yIHdyaXRlcy4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFnZSBjYWNoZSBtYW5hZ2VtZW50LCBhbmQgc3BlY2lmaWNhbGx5LCBjb250cm9sbGluZyB3aGV0aGVyIHBhZ2VzIHdyaXR0ZW4gdG8gZGlzayBhcmUgcmV0YWluZWQgaW4gdGhlIHBhZ2UgY2FjaGUgYWZ0ZXJ3YXJkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlOlxuXG4qICAgSW4gYGZzL2YyZnMvZGF0YS5jYCwgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gaG93IGJpb3MgYXJlIGhhbmRsZWQgd2hlbiBgSU9DQl9ET05UQ0FDSEVgIGlzIHJlcXVlc3RlZC4gSWYgdGhlIGZsYWcgaXMgc2V0LCB0aGVuIHdoZW4gdGhlIGZvbGlvIGlzIGFsbG9jYXRlZCwgaXQncyB0YWdnZWQgd2l0aCBgRkdQX0RPTlRDQUNIRWAsIHdoaWNoIEkga25vdywgc2V0cyB0aGUgZHJvcGJlaGluZCBmbGFnLlxuKiAgIFRoZSBgX19iaW9fYWxsb2NgIGZ1bmN0aW9uIGlzIG1vZGlmaWVkIHRvIHNldCBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIG9uIHRoZSBiaW8gaWYgdGhlIGZvbGlvIGhhcyBkcm9wYmVoaW5kLlxuKiAgIFRoZW4gd2UgaGF2ZSBgZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGVgLCB3aGljaCBzZWVtcyB0byBiZSBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGluIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgLiBUaGlzIHByZXZlbnRzIHRoZSBtZXJnaW5nIG9mIGJpb3MgdGhhdCBtaXggcGFnZXMgd2l0aCBhbmQgd2l0aG91dCB0aGUgZHJvcGJlaGluZCBmbGFnLiBUaGlzIGlzIGNydWNpYWw7IHdlICptdXN0KiBtYWludGFpbiB0aGUgZHJvcC1iZWhpbmQgc2VtYW50aWNzLCBlbnN1cmluZyB0aGF0IHdlIGRvbid0IGFjY2lkZW50YWxseSBjYWNoZSBwYWdlcyB3ZSdyZSBzdXBwb3NlZCB0byBkcm9wLlxuKiAgIFRoZSBwYXRjaCB1cGRhdGVzIGBmMmZzX3dyaXRlX2JlZ2luYCB0byBwYXNzIGBGR1BfRE9OVENBQ0hFYCB0byB0aGUgYGYyZnNfZmlsZW1hcF9nZXRfZm9saW9gIGNhbGwuXG5cbkFuZCBmaW5hbGx5LCBgZnMvZjJmcy9maWxlLmNgIGFkZHMgYEZPUF9ET05UQ0FDSEVgIHRvIHRoZSBgZjJmc19maWxlX29wZXJhdGlvbnMuZm9wX2ZsYWdzYC5cblxuVGhlIHByaW1hcnkgb2JqZWN0aXZlIGlzIG5vdyBjbGVhcjogV2hlbiBgSU9DQl9ET05UQ0FDSEVgIGlzIHVzZWQsIHRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IHRoZSB3cml0dGVuIHBhZ2VzIGFyZSBub3Qga2VwdCBpbiB0aGUgcGFnZSBjYWNoZSBhZnRlciB0aGUgd3JpdGUgY29tcGxldGVzLiBUaGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnIGFuZCB0aGUgc3Vic2VxdWVudCBtZXJnaW5nIGxvZ2ljIGFyZSB0aGUga2V5IHRvIHRoaXMgYmVoYXZpb3IuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpc2tzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgY2FjaGUgb3BlcmF0aW9ucyBhbmQgYmxvY2sgSS9PLCBzbyBsZXQncyBydWxlIG91dCBhbnkgcmlzay4gSXQgZG9lc24ndCBhcHBlYXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgdG8gdXNlcnNwYWNlLCBvciBjaGFuZ2VzIGFueSBtZW1vcnkgY29waWVzLCBib3VuZHMgY2hlY2tzLCBldGMuIFNvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzbid0IGFuIGlzc3VlLlxuXG5UaGUgbW9yZSBsaWtlbHkgaXNzdWVzIHRoYXQgY291bGQgYmUgZm91bmQgZnJvbSB0aGlzIHBhdGNoIGFyZTpcblxuKiAgIFBhZ2UgY2FjaGUgcmFjZSBjb25kaXRpb25zOiBUaGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgcGFnZSBjYWNoZSBsaWZldGltZSwgcmVmY291bnRpbmcsIGRyb3AtYmVoaW5kLCBvciBkZWFkbG9ja3MgaW4gdGhlIHBhZ2UgY2FjaGUuIFRob3VnaCwgdGhlc2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxuKiAgIE1lcmdpbmcgbG9naWMgYnVnczogVGhlcmUgY291bGQgYmUgcHJvYmxlbXMgd2l0aCB0aGUgbWVyZ2luZyBsb2dpYywgb3Igd2l0aCB3cml0ZWJhY2suXG5cblNvIHRoZSBtYWluIHRoaW5nIHRvIHdhdGNoIG91dCBmb3IgaXMgY29ycmVjdG5lc3MgaW4gaG93IHdlIG1hbmFnZSB0aGUgZHJvcC1iZWhpbmQgc3RhdGUuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHRob3JvdWdobHkgdGVzdCBzY2VuYXJpb3Mgd2hlcmUgZHJvcC1iZWhpbmQgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNvbmN1cnJlbnQgd3JpdGVzLCByZWFkcywgYW5kIGV2aWN0aW9ucyB0byBlbnN1cmUgd2UgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbi4gQW5kIG9mIGNvdXJzZSwgbWFraW5nIHN1cmUgd2UgaGF2ZW4ndCBicm9rZW4gZXhpc3RpbmcgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozODoyNC40MTczODU4MzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ0MzYyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkdQX0RPTlRDQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mMmZzL2RhdGEuYz0zODc5PXN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9mMmZzL2RhdGEuYy0zODkzLVxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxcbmZzL2YyZnMvZGF0YS5jOjM4OTQ6XFx0XFx0ZmdwX2ZsYWdzIHw9IEZHUF9ET05UQ0FDSEU7XFxuZnMvZjJmcy9kYXRhLmMtMzg5NS1cXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9Nzk5PXN0cnVjdCBmb2xpbyAqaW9tYXBfZ2V0X2ZvbGlvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04MDUtXFx0aWYgKGl0ZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRE9OVENBQ0hFKVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODA2OlxcdFxcdGZncCB8PSBGR1BfRE9OVENBQ0hFO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODA3LVxcdGZncCB8PSBmZ2Zfc2V0X29yZGVyKGxlbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD02Nzk9cGdvZmZfdCBwYWdlX2NhY2hlX3ByZXZfbWlzcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTcwMi0gKiAqICVGR1BfU1RBQkxFIC0gV2FpdCBmb3IgdGhlIGZvbGlvIHRvIGJlIHN0YWJsZSAoZmluaXNoZWQgd3JpdGViYWNrKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjcwMzogKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC03MDQtICogKiAlRkdQX1dSSVRFQkVHSU4gLSBUaGUgZmxhZ3MgdG8gdXNlIGluIGEgZmlsZXN5c3RlbSB3cml0ZV9iZWdpbigpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD03MDc9dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZnZl90O1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNzE2LSNkZWZpbmUgRkdQX1NUQUJMRVxcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjcxNzojZGVmaW5lIEZHUF9ET05UQ0FDSEVcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMClcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC03MTgtI2RlZmluZSBGR0ZfR0VUX09SREVSKGZnZilcXHQoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgXFx1MDAzZVxcdTAwM2UgMjYpXFx0LyogdG9wIDYgYml0cyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9Nzc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICp3cml0ZV9iZWdpbl9nZXRfZm9saW8oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNzg0LSAgICAgICAgaWYgKGlvY2IgXFx1MDAyNlxcdTAwMjYgaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo3ODU6ICAgICAgICAgICAgICAgIGZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFO1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTc4Ni1cXG4tLVxcbm1tL2ZpbGVtYXAuYz0xOTQ3PXN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTIwMjQtXFx0XFx0XFx0XFx0X19mb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jOjIwMjU6XFx0XFx0XFx0aWYgKGZncF9mbGFncyBcXHUwMDI2IEZHUF9ET05UQ0FDSEUpXFxubW0vZmlsZW1hcC5jLTIwMjYtXFx0XFx0XFx0XFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XFxuLS1cXG5tbS9maWxlbWFwLmMtMjA2MC1cXHQvKiBub3QgYW4gdW5jYWNoZWQgbG9va3VwLCBjbGVhciB1bmNhY2hlZCBpZiBzZXQgKi9cXG5tbS9maWxlbWFwLmM6MjA2MTpcXHRpZiAoIShmZ3BfZmxhZ3MgXFx1MDAyNiBGR1BfRE9OVENBQ0hFKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKSB7XFxubW0vZmlsZW1hcC5jLTIwNjItXFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjI2LjAwMTgzMDU2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTkzMjE4OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEYyRlMgQnVmZmVyZWQgV3JpdGUgUGF0aCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoIGZvciB0aGUgRjJGUyBidWZmZXJlZCB3cml0ZSBwYXRoLCBhbmQgaXQgbG9va3MgcHJldHR5IGNsZWFuLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGVuYWJsaW5nIGBGT1BfRE9OVENBQ0hFYCBhbmQgYElPQ0JfRE9OVENBQ0hFYCBzdXBwb3J0LiBMZXQgbWUgYnJlYWsgaXQgZG93biBpbiBteSBoZWFkOlxuXG5GaXJzdCwgaW4gYGYyZnNfd3JpdGVfYmVnaW5gLCBpdOKAmXMgY29ycmVjdGx5IHNldHRpbmcgdGhlIGBGR1BfRE9OVENBQ0hFYCBmbGFnIGlmIHRoZSBgSU9DQl9ET05UQ0FDSEVgIGZsYWcgaXMgcHJlc2VudC4gVGhhdCdzIGV4YWN0bHkgdGhlIHJpZ2h0IG1lY2hhbmlzbSB0byBzaWduYWwgdGhlIGNhY2hpbmcgYmVoYXZpb3IuIFRoZW4sIGZvciBhbGxvY2F0aW9uLCBpbiBgX19iaW9fYWxsb2NgLCBzZXR0aW5nIGBCSU9fQ09NUExFVEVfSU5fVEFTS2Agb24gd3JpdGUgYmlvcyB3aGVuIHRoZSBmb2xpbyBpcyBtYXJrZWQgYXMgYGRyb3BiZWhpbmRgIHNlZW1zIHNlbnNpYmxlLiBJdOKAmXMgY2xlYXJseSBhaW1pbmcgZm9yIGEgbW9yZSBpbW1lZGlhdGUgY29tcGxldGlvbiBvbiB3cml0ZXMgdGhhdCBhcmVuJ3QgY2FjaGVkLlxuXG5UaGUgYmlvIG1lcmdpbmcgZnVuY3Rpb25zIGhhdmUgYSB2aXRhbCBjaGVjayB3aXRoIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAsIHdoaWNoIGlzIG5lY2Vzc2FyeS4gSXTigJlzIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgZm9saW9zIG1hcmtlZCBmb3IgZHJvcC1iZWhpbmQgd2l0aCB0aGUgb25lcyB0aGF0IGFyZW4ndC4gVGhpcyBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyB0aGUgaW50ZW5kZWQgXCJkb24ndCBjYWNoZVwiIGJlaGF2aW9yLiBGaW5hbGx5LCBhZHZlcnRpc2luZyBgRk9QX0RPTlRDQUNIRWAgaW4gYGYyZnNfZmlsZV9vcGVyYXRpb25zYCBpcyB0aGUgZmluYWwgc3RlcCwgbWFraW5nIHRoZSBmdW5jdGlvbmFsaXR5IGNsZWFyIHRvIHRoZSB1c2Vyc3BhY2UuXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCwgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlcmUncyBubyB3YXkgdGhhdCB0aGlzIGludHJvZHVjZXMgYW55IG5hc3R5IHN1cnByaXNlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmVuJ3QgYW55IHNuZWFreSBhY2Nlc3NlcywgYW5kIG5vIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIHVzZXIgc3BhY2Ugb3IgY29uZGl0aW9uYWwgbG9naWMuXG5cbkkgdGhpbmsgYW55IHBvdGVudGlhbCBpc3N1ZXMg4oCTIGFuZCB0aGVzZSBhcmUgYWx3YXlzIHBvc3NpYmxlIOKAkyB3aWxsIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGV54oCZcmUgdGhlIHJpZ2h0IHRvb2xzIHRvIGZpbmQgbGlmZWN5Y2xlIHByb2JsZW1zIG9yIGJpby1yZWxhdGVkIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuR2l2ZW4gdGhhdCwgSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByaXNrcyByZWxhdGVkIHRvIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIFNvLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZmFsc2UuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGdpdmUgdGhpcyByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTIsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjMyLjE5NTA1NzI1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBJT0NCX0RPTlRDQUNIRSAoUldGX0RPTlRDQUNIRSAvIGRyb3AtYmVoaW5kIGNhY2hpbmcpIGluIEYyRlMgYnVmZmVyZWQgd3JpdGVzIGJ5IHNldHRpbmcgRkdQX0RPTlRDQUNIRSBpbiBmMmZzX3dyaXRlX2JlZ2luLCBCSU9fQ09NUExFVEVfSU5fVEFTSyBpbiBfX2Jpb19hbGxvYywgY2hlY2tpbmcgYmlvIG1lcmdlYWJpbGl0eSBiYXNlZCBvbiB0aGUgZm9saW8gZHJvcGJlaGluZCBmbGFnLCBhbmQgZGVjbGFyaW5nIEZPUF9ET05UQ0FDSEUgaW4gZjJmc19maWxlX29wZXJhdGlvbnMuXFxuXFxuTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQsIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBpbiBjb25kaXRpb25hbCBicmFuY2hlcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCBjb25jdXJyZW5jeSwgb3IgYmlvIG1hbmFnZW1lbnQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIElPQ0JfRE9OVENBQ0hFIChSV0ZfRE9OVENBQ0hFIC8gZHJvcC1iZWhpbmQgY2FjaGluZykgaW4gRjJGUyBidWZmZXJlZCB3cml0ZXMgYnkgc2V0dGluZyBGR1BfRE9OVENBQ0hFIGluIGYyZnNfd3JpdGVfYmVnaW4sIEJJT19DT01QTEVURV9JTl9UQVNLIGluIF9fYmlvX2FsbG9jLCBjaGVja2luZyBiaW8gbWVyZ2VhYmlsaXR5IGJhc2VkIG9uIHRoZSBmb2xpbyBkcm9wYmVoaW5kIGZsYWcsIGFuZCBkZWNsYXJpbmcgRk9QX0RPTlRDQUNIRSBpbiBmMmZzX2ZpbGVfb3BlcmF0aW9ucy5cXG5cXG5ObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIGNvbmN1cnJlbmN5LCBvciBiaW8gbWFuYWdlbWVudCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 18:52:13 +0000 UTC FinishedAt: 2026-09-04 19:38:34 +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": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "F2FS_FS" ], "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": "e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "F2FS_FS" ], "series_id": "cbb9ded8-1388-4a7b-bfa7-44082b04025b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "f2fs_merge_page_bio", "f2fs_submit_page_write", "f2fs_write_begin" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0YyRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmMmZzX21lcmdlX3BhZ2VfYmlvJiMzNDssCiAgICAmIzM0O2YyZnNfc3VibWl0X3BhZ2Vfd3JpdGUmIzM0OywKICAgICYjMzQ7ZjJmc193cml0ZV9iZWdpbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgSU9DQl9ET05UQ0FDSEUgKFJXRl9ET05UQ0FDSEUgLyBkcm9wLWJlaGluZCBjYWNoaW5nKSBpbiBGMkZTIGJ1ZmZlcmVkIHdyaXRlcyBieSBzZXR0aW5nIEZHUF9ET05UQ0FDSEUgaW4gZjJmc193cml0ZV9iZWdpbiwgQklPX0NPTVBMRVRFX0lOX1RBU0sgaW4gX19iaW9fYWxsb2MsIGNoZWNraW5nIGJpbyBtZXJnZWFiaWxpdHkgYmFzZWQgb24gdGhlIGZvbGlvIGRyb3BiZWhpbmQgZmxhZywgYW5kIGRlY2xhcmluZyBGT1BfRE9OVENBQ0hFIGluIGYyZnNfZmlsZV9vcGVyYXRpb25zLlxuXG5ObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIGNvbmN1cnJlbmN5LCBvciBiaW8gbWFuYWdlbWVudCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEZPUF9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSBpbiBGMkZTLCBhbGxvd2luZyBkcm9wYmVoaW5kIGZvbGlvcyB0byBiZSB0YWdnZWQgYW5kIGNvbXBsZXRlZCBpbiB0YXNrIGNvbnRleHQuIEl0IHVwZGF0ZXMgZjJmc193cml0ZV9iZWdpbiB0byBzZXQgRkdQX0RPTlRDQUNIRSBhbmQgbW9kaWZpZXMgZjJmc19tZXJnZV9wYWdlX2JpbyBhbmQgZjJmc19zdWJtaXRfcGFnZV93cml0ZSB0byBhdm9pZCBtZXJnaW5nIGRyb3BiZWhpbmQgZm9saW9zIHdpdGggcmVndWxhciBmb2xpb3MuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBmaWxlc3lzdGVtIHdyaXRlIGFuZCBJL08gc3VibWlzc2lvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3ODk2ZTdiMjNlODU4MGYwZGMwMWNlNWYyZjk2ZTFmZDQ3NjYwYTEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxOTozNzozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9mMmZzL2RhdGEuYyBiL2ZzL2YyZnMvZGF0YS5jXG5pbmRleCAyMWYzOTZlYmUyMmNhLi42ZTgxNmM5MzQ5YWJjIDEwMDY0NFxuLS0tIGEvZnMvZjJmcy9kYXRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvZGF0YS5jXG5AQCAtNTAzLDYgJiM0Mzs1MDMsOCBAQCBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fYWxsb2Moc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvLCBpbnQgbnBhZ2VzKVxuIFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsXG4gXHRcdFx0XHRmaW8tXHUwMDNlb3AgfCBmaW8tXHUwMDNlb3BfZmxhZ3MgfCBmMmZzX2lvX2ZsYWdzKGZpbyksXG4gXHRcdFx0XHRHRlBfTk9JTywgXHUwMDI2ZjJmc19iaW9zZXQpO1xuJiM0MztcdGlmICghaXNfcmVhZF9pbyhmaW8tXHUwMDNlb3ApIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLVx1MDAzZWZvbGlvKSlcbiYjNDM7XHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHNlY3RvcjtcbiBcdGlmIChpc19yZWFkX2lvKGZpby1cdTAwM2VvcCkpIHtcbiBcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGYyZnNfcmVhZF9lbmRfaW87XG5AQCAtNzkzLDYgJiM0Mzs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRyZXR1cm4gYmlvLVx1MDAzZWJpX2JkZXYgPT0gZjJmc190YXJnZXRfZGV2aWNlKHNiaSwgY3VyX2Jsa2FkZHIsIE5VTEwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoc3RydWN0IGJpbyAqYmlvLFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmlvX2ZsYWdnZWQoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSykgPT1cbiYjNDM7XHRcdGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmaW8tXHUwMDNlZm9saW8pO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGlvX3R5cGVfaXNfbWVyZ2VhYmxlKHN0cnVjdCBmMmZzX2Jpb19pbmZvICppbyxcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4ge1xuQEAgLTk4NSw4ICYjNDM7OTk0LDEwIEBAIGludCBmMmZzX21lcmdlX3BhZ2VfYmlvKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiBcbiBcdHRyYWNlX2YyZnNfc3VibWl0X2ZvbGlvX2JpbyhkYXRhX2ZvbGlvLCBmaW8pO1xuIFxuLVx0aWYgKGJpbyBcdTAwMjZcdTAwMjYgIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby1cdTAwM2VzYmksIGJpbywgKmZpby1cdTAwM2VsYXN0X2Jsb2NrLFxuLVx0XHRcdFx0XHRcdGZpby1cdTAwM2VuZXdfYmxrYWRkcikpXG4mIzQzO1x0aWYgKGJpbyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFwYWdlX2lzX21lcmdlYWJsZShmaW8tXHUwMDNlc2JpLCBiaW8sICpmaW8tXHUwMDNlbGFzdF9ibG9jayxcbiYjNDM7XHRcdFx0XHRmaW8tXHUwMDNlbmV3X2Jsa2FkZHIpIHx8XG4mIzQzO1x0ICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoYmlvLCBmaW8pKSlcbiBcdFx0ZjJmc19zdWJtaXRfbWVyZ2VkX2lwdV93cml0ZShmaW8tXHUwMDNlc2JpLCBcdTAwMjZiaW8sIE5VTEwpO1xuIGFsbG9jX25ldzpcbiBcdGlmICghYmlvKSB7XG5AQCAtMTA4Niw3ICYjNDM7MTA5Nyw4IEBAIHZvaWQgZjJmc19zdWJtaXRfcGFnZV93cml0ZShzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4gXHQgICAgKCFpb19pc19tZXJnZWFibGUoc2JpLCBpby1cdTAwM2ViaW8sIGlvLCBmaW8sIGlvLVx1MDAzZWxhc3RfYmxvY2tfaW5fYmlvLFxuIFx0XHRcdCAgICAgIGZpby1cdTAwM2VuZXdfYmxrYWRkcikgfHxcbiBcdCAgICAgIWYyZnNfY3J5cHRfbWVyZ2VhYmxlX2Jpbyhpby1cdTAwM2ViaW8sIGZpb19pbm9kZShmaW8pLFxuLVx0XHRcdFx0YmlvX2ZvbGlvLVx1MDAzZWluZGV4LCBmaW8pKSlcbiYjNDM7XHRcdFx0XHRiaW9fZm9saW8tXHUwMDNlaW5kZXgsIGZpbykgfHxcbiYjNDM7XHQgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShpby1cdTAwM2ViaW8sIGZpbykpKVxuIFx0XHRfX3N1Ym1pdF9tZXJnZWRfYmlvKGlvKTtcbiBhbGxvY19uZXc6XG4gXHRpZiAoaW8tXHUwMDNlYmlvID09IE5VTEwpIHtcbkBAIC0zODcyLDExICYjNDM7Mzg4NCwxNSBAQCBzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiBcdHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfSV9TQihpbm9kZSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdGZnZl90IGZncF9mbGFncyA9IEZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFUO1xuIFx0cGdvZmZfdCBpbmRleCA9IHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdGJvb2wgbmVlZF9iYWxhbmNlID0gZmFsc2U7XG4gXHRibG9ja190IGJsa2FkZHIgPSBOVUxMX0FERFI7XG4gXHRpbnQgZXJyID0gMDtcbiBcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG4mIzQzO1x0XHRmZ3BfZmxhZ3MgfD0gRkdQX0RPTlRDQUNIRTtcbiYjNDM7XG4gXHR0cmFjZV9mMmZzX3dyaXRlX2JlZ2luKGlub2RlLCBwb3MsIGxlbik7XG4gXG4gXHRpZiAoIWYyZnNfaXNfY2hlY2twb2ludF9yZWFkeShzYmkpKSB7XG5AQCAtMzkyMiw5ICYjNDM7MzkzOCw4IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHQgKiBEbyBub3QgdXNlIEZHUF9TVEFCTEUgdG8gYXZvaWQgZGVhZGxvY2suXG4gXHQgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLlxuIFx0ICovXG4tXHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG4tXHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCxcbi1cdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuJiM0MztcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwgZmdwX2ZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xuIFx0XHRnb3RvIGZhaWw7XG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9maWxlLmMgYi9mcy9mMmZzL2ZpbGUuY1xuaW5kZXggZWRjMzUyNTY5ZTg3ZS4uNTcwMjQ0YWU0ZmM4YSAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL2ZpbGUuY1xuQEAgLTU5MDksNiAmIzQzOzU5MDksNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGYyZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0LnNwbGljZV9yZWFkXHQ9IGYyZnNfZmlsZV9zcGxpY2VfcmVhZCxcbiBcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5mYWR2aXNlXHQ9IGYyZnNfZmlsZV9mYWR2aXNlLFxuLVx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyxcbiYjNDM7XHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcbiBcdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuIH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RjJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2YyZnNfbWVyZ2VfcGFnZV9iaW8mIzM0OywKICAgICYjMzQ7ZjJmc19zdWJtaXRfcGFnZV93cml0ZSYjMzQ7LAogICAgJiMzNDtmMmZzX3dyaXRlX2JlZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4OTZlN2IyM2U4NTgwZjBkYzAxY2U1ZjJmOTZlMWZkNDc2NjBhMTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE5OjM3OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRhLmMgYi9mcy9mMmZzL2RhdGEuYwppbmRleCAyMWYzOTZlYmUyMmNhLi42ZTgxNmM5MzQ5YWJjIDEwMDY0NAotLS0gYS9mcy9mMmZzL2RhdGEuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL2RhdGEuYwpAQCAtNTAzLDYgJiM0Mzs1MDMsOCBAQCBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fYWxsb2Moc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvLCBpbnQgbnBhZ2VzKQogCWJpbyA9IGJpb19hbGxvY19iaW9zZXQoYmRldiwgbnBhZ2VzLAogCQkJCWZpby0mZ3Q7b3AgfCBmaW8tJmd0O29wX2ZsYWdzIHwgZjJmc19pb19mbGFncyhmaW8pLAogCQkJCUdGUF9OT0lPLCAmYW1wO2YyZnNfYmlvc2V0KTsKJiM0MzsJaWYgKCFpc19yZWFkX2lvKGZpby0mZ3Q7b3ApICZhbXA7JmFtcDsgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZpby0mZ3Q7Zm9saW8pKQomIzQzOwkJYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgPSBzZWN0b3I7CiAJaWYgKGlzX3JlYWRfaW8oZmlvLSZndDtvcCkpIHsKIAkJYmlvLSZndDtiaV9lbmRfaW8gPSBmMmZzX3JlYWRfZW5kX2lvOwpAQCAtNzkzLDYgJiM0Mzs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sCiAJcmV0dXJuIGJpby0mZ3Q7YmlfYmRldiA9PSBmMmZzX3RhcmdldF9kZXZpY2Uoc2JpLCBjdXJfYmxrYWRkciwgTlVMTCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShzdHJ1Y3QgYmlvICpiaW8sCiYjNDM7CQkJCQkgIHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSA9PQomIzQzOwkJZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZpby0mZ3Q7Zm9saW8pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlvX3R5cGVfaXNfbWVyZ2VhYmxlKHN0cnVjdCBmMmZzX2Jpb19pbmZvICppbywKIAkJCQkJCXN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbykKIHsKQEAgLTk4NSw4ICYjNDM7OTk0LDEwIEBAIGludCBmMmZzX21lcmdlX3BhZ2VfYmlvKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbykKIAogCXRyYWNlX2YyZnNfc3VibWl0X2ZvbGlvX2JpbyhkYXRhX2ZvbGlvLCBmaW8pOwogCi0JaWYgKGJpbyAmYW1wOyZhbXA7ICFwYWdlX2lzX21lcmdlYWJsZShmaW8tJmd0O3NiaSwgYmlvLCAqZmlvLSZndDtsYXN0X2Jsb2NrLAotCQkJCQkJZmlvLSZndDtuZXdfYmxrYWRkcikpCiYjNDM7CWlmIChiaW8gJmFtcDsmYW1wOwomIzQzOwkgICAgKCFwYWdlX2lzX21lcmdlYWJsZShmaW8tJmd0O3NiaSwgYmlvLCAqZmlvLSZndDtsYXN0X2Jsb2NrLAomIzQzOwkJCQlmaW8tJmd0O25ld19ibGthZGRyKSB8fAomIzQzOwkgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShiaW8sIGZpbykpKQogCQlmMmZzX3N1Ym1pdF9tZXJnZWRfaXB1X3dyaXRlKGZpby0mZ3Q7c2JpLCAmYW1wO2JpbywgTlVMTCk7CiBhbGxvY19uZXc6CiAJaWYgKCFiaW8pIHsKQEAgLTEwODYsNyAmIzQzOzEwOTcsOCBAQCB2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKQogCSAgICAoIWlvX2lzX21lcmdlYWJsZShzYmksIGlvLSZndDtiaW8sIGlvLCBmaW8sIGlvLSZndDtsYXN0X2Jsb2NrX2luX2JpbywKIAkJCSAgICAgIGZpby0mZ3Q7bmV3X2Jsa2FkZHIpIHx8CiAJICAgICAhZjJmc19jcnlwdF9tZXJnZWFibGVfYmlvKGlvLSZndDtiaW8sIGZpb19pbm9kZShmaW8pLAotCQkJCWJpb19mb2xpby0mZ3Q7aW5kZXgsIGZpbykpKQomIzQzOwkJCQliaW9fZm9saW8tJmd0O2luZGV4LCBmaW8pIHx8CiYjNDM7CSAgICAgIWYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlKGlvLSZndDtiaW8sIGZpbykpKQogCQlfX3N1Ym1pdF9tZXJnZWRfYmlvKGlvKTsKIGFsbG9jX25ldzoKIAlpZiAoaW8tJmd0O2JpbyA9PSBOVUxMKSB7CkBAIC0zODcyLDExICYjNDM7Mzg4NCwxNSBAQCBzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwogCXN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfSV9TQihpbm9kZSk7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJZmdmX3QgZmdwX2ZsYWdzID0gRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQ7CiAJcGdvZmZfdCBpbmRleCA9IHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCWJvb2wgbmVlZF9iYWxhbmNlID0gZmFsc2U7CiAJYmxvY2tfdCBibGthZGRyID0gTlVMTF9BRERSOwogCWludCBlcnIgPSAwOwogCiYjNDM7CWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RPTlRDQUNIRSkKJiM0MzsJCWZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFOwomIzQzOwogCXRyYWNlX2YyZnNfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuKTsKIAogCWlmICghZjJmc19pc19jaGVja3BvaW50X3JlYWR5KHNiaSkpIHsKQEAgLTM5MjIsOSAmIzQzOzM5MzgsOCBAQCBzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLAogCSAqIERvIG5vdCB1c2UgRkdQX1NUQUJMRSB0byBhdm9pZCBkZWFkbG9jay4KIAkgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLgogCSAqLwotCWZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwKLQkJCQlGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCwKLQkJCQltYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKJiM0MzsJZm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsCiYjNDM7CQkJCSAgICAgICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAlpZiAoSVNfRVJSKGZvbGlvKSkgewogCQllcnIgPSBQVFJfRVJSKGZvbGlvKTsKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZnMvZjJmcy9maWxlLmMgYi9mcy9mMmZzL2ZpbGUuYwppbmRleCBlZGMzNTI1NjllODdlLi41NzAyNDRhZTRmYzhhIDEwMDY0NAotLS0gYS9mcy9mMmZzL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL2ZpbGUuYwpAQCAtNTkwOSw2ICYjNDM7NTkwOSw2IEBAIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZjJmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLnNwbGljZV9yZWFkCT0gZjJmc19maWxlX3NwbGljZV9yZWFkLAogCS5zcGxpY2Vfd3JpdGUJPSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLAogCS5mYWR2aXNlCT0gZjJmc19maWxlX2ZhZHZpc2UsCi0JLmZvcF9mbGFncwk9IEZPUF9CVUZGRVJfUkFTWU5DLAomIzQzOwkuZm9wX2ZsYWdzCT0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLAogCS5zZXRsZWFzZQk9IGdlbmVyaWNfc2V0bGVhc2UsCiB9Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTkzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRjJGUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgRjJGUyBpbiB0aGUgTGludXgga2VybmVsLiBUaGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSBpdCwgc28gbGV0JiMzOTtzIGRpZyBpbi4gSSBzZWUgY2hhbmdlcyB0byBgZnMvZjJmcy9kYXRhLmNgIGFuZCBgZnMvZjJmcy9maWxlLmNgIOKAkyBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGNvcmUgYXJlYXMuCgpGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBfX2Jpb19hbGxvY2AgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBhIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZyB0byB0aGUgYmlvIGlmIGl0JiMzOTtzIG5vdCBhIHJlYWQgb3BlcmF0aW9uIGFuZCB0aGUgZm9saW8gaGFzIGBkcm9wYmVoaW5kYCBzZXQuIFRoaXMgc3VnZ2VzdHMgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIGNvbnRyb2wgd2hlbiB0aGUgSS9PIGNvbXBsZXRlcywgcG9zc2libHkgcmVsYXRlZCB0byBjYWNoaW5nIGJlaGF2aW9yLgoKTmV4dCwgdGhlcmUmIzM5O3MgdGhlIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgaW50cm9kdWNlZCB0byBjaGVjayBpZiBhbiBleGlzdGluZyBiaW8gY2FuIGJlIG1lcmdlZCB3aXRoIGEgbmV3IG9uZSBiYXNlZCBvbiB0aGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnLCBhbmQgdGhlIGBkcm9wYmVoaW5kYCBzdGF0ZSBvZiB0aGUgZm9saW8uIElmIHRoZSBkcm9wYmVoaW5kIHN0YXRlIGRpZmZlcnMgYmV0d2VlbiBiaW8gYW5kIGZvbGlvLCB0aGUgbWVyZ2luZyBpcyBwcmV2ZW50ZWQuIFRoaXMgbWVyZ2VhYmlsaXR5IGNoZWNrIGluIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgIGlzIGEgY3JpdGljYWwgb3B0aW1pemF0aW9uLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBvcHRpbWl6ZSB0aGUgSS9PIG1lcmdpbmcgd2hlbiB3cml0ZXMgYXJlIHN1Ym1pdHRlZC4KCk5vdywgcmVnYXJkaW5nIGBmMmZzX3dyaXRlX2JlZ2luYCwgdGhlIGFkZGl0aW9uIG9mIGBJT0NCX0RPTlRDQUNIRWAgaXMgdGVsbGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBkaXJlY3RseSBwYXNzaW5nIHRoaXMgZmxhZyBkb3duIHRvIHRoZSBmb2xpbyBhbGxvY2F0aW9uIHVzaW5nIGBGR1BfRE9OVENBQ0hFYC4gVGhpcyBpcyBhIGRpcmVjdCBtZXRob2Qgb2YgY29udHJvbGxpbmcgdGhlIGNhY2hpbmcgYmVoYXZpb3Igb2YgdGhlIHVuZGVybHlpbmcgZmlsZS4KCkZpbmFsbHksIGluIGBmcy9mMmZzL2ZpbGUuY2AsIHRoZSBgZm9wX2ZsYWdzYCBmb3IgdGhlIGZpbGUgb3BlcmF0aW9ucyBhcmUgc2V0IHRvIGBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEVgLiBUaGlzIGlzIGludGVyZXN0aW5nIGFzIGl0IGluZGljYXRlcyB3ZSBzaG91bGQgY2FjaGUgYXN5bmMgcmVhZHMgYW5kIGhhdmUgYERPTlRDQUNIRWAgZW5hYmxlZCBhdCB0aGUgZmlsZSBsZXZlbC4gVGhpcyBzZXR0aW5nIGlzIGxpa2VseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGNoYW5nZXMgaW4gYGYyZnNfd3JpdGVfYmVnaW5gIHRvIHByb3ZpZGUgYSB3YXkgdG8gc2VsZWN0aXZlbHkgZGlzYWJsZSBjYWNoaW5nIGZvciB3cml0ZXMuCgpOb3csIGJlZm9yZSBJIGdvIGRlZXBlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgc2hvdWxkIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIGBmcy9mMmZzL0tjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgc2V0dGluZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBvdGhlciBGMkZTIGZlYXR1cmVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHJlcXVpcmVkIGluIHRoZSB1c2VyJiMzOTtzIGVudmlyb25tZW50IHRvIHVzZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZjJmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEYyRlNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0YyRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA1Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDY6XHRcdHNlbGVjdCBOTFNcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEYyRlNfRlNfWEFUVFIgaWYgRlNfRU5DUllQVElPTlxuICAgOTpcdFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG4gIDEwOlx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgMTE6XHRcdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcbiAgMTI6XHRcdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuICAxMzpcdFx0c2VsZWN0IExaNEhDX0NPTVBSRVNTIGlmIEYyRlNfRlNfTFo0SENcbiAgMTQ6XHRcdHNlbGVjdCBMWk9fQ09NUFJFU1MgaWYgRjJGU19GU19MWk9cbiAgMTU6XHRcdHNlbGVjdCBMWk9fREVDT01QUkVTUyBpZiBGMkZTX0ZTX0xaT1xuICAxNjpcdFx0c2VsZWN0IFpTVERfQ09NUFJFU1MgaWYgRjJGU19GU19aU1REXG4gIDE3Olx0XHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTIGlmIEYyRlNfRlNfWlNURFxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBGMkZTIGlzIGJhc2VkIG9uIExvZy1zdHJ1Y3R1cmVkIEZpbGUgU3lzdGVtIChMRlMpLCB3aGljaCBzdXBwb3J0c1xuICAyMDpcdFx0ICB2ZXJzYXRpbGUgXCYjMzQ7Zmxhc2gtZnJpZW5kbHlcJiMzNDsgZmVhdHVyZXMuIFRoZSBkZXNpZ24gaGFzIGJlZW4gZm9jdXNlZCBvblxuICAyMTpcdFx0ICBhZGRyZXNzaW5nIHRoZSBmdW5kYW1lbnRhbCBpc3N1ZXMgaW4gTEZTLCB3aGljaCBhcmUgc25vd2JhbGwgZWZmZWN0XG4gIDIyOlx0XHQgIG9mIHdhbmRlcmluZyB0cmVlIGFuZCBoaWdoIGNsZWFuaW5nIG92ZXJoZWFkLlxuICAyMzpcdFxuICAyNDpcdFx0ICBTaW5jZSBmbGFzaC1iYXNlZCBzdG9yYWdlcyBzaG93IGRpZmZlcmVudCBjaGFyYWN0ZXJpc3RpY3MgYWNjb3JkaW5nIHRvXG4gIDI1Olx0XHQgIHRoZSBpbnRlcm5hbCBnZW9tZXRyeSBvciBmbGFzaCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWVzIGFrYSBGVEwsIEYyRlNcbiAgMjY6XHRcdCAgYW5kIHRvb2xzIHN1cHBvcnQgdmFyaW91cyBwYXJhbWV0ZXJzIG5vdCBvbmx5IGZvciBjb25maWd1cmluZyBvbi1kaXNrXG4gIDI3Olx0XHQgIGxheW91dCwgYnV0IGFsc28gZm9yIHNlbGVjdGluZyBhbGxvY2F0aW9uIGFuZCBjbGVhbmluZyBhbGdvcml0aG1zLlxuICAyODpcdFxuICAyOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBGMkZTX1NUQVRfRlNcbiAgMzI6XHRcdGJvb2wgXCYjMzQ7RjJGUyBTdGF0dXMgSW5mb3JtYXRpb25cJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gRjJGU19GU1xuICAzNDpcdFx0ZGVmYXVsdCB5XG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIC9zeXMva2VybmVsL2RlYnVnL2YyZnMvIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgcGFydGl0aW9uc1xuICAzNzpcdFx0ICBtb3VudGVkIGFzIGYyZnMuIEVhY2ggZmlsZSBzaG93cyB0aGUgd2hvbGUgZjJmcyBpbmZvcm1hdGlvbi5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgL3N5cy9rZXJuZWwvZGVidWcvZjJmcy9zdGF0dXMgaW5jbHVkZXM6XG4gIDQwOlx0XHQgICAgLSBtYWpvciBmaWxlc3lzdGVtIGluZm9ybWF0aW9uIG1hbmFnZWQgYnkgZjJmcyBjdXJyZW50bHlcbiAgNDE6XHRcdCAgICAtIGF2ZXJhZ2UgU0lUIGluZm9ybWF0aW9uIGFib3V0IHdob2xlIHNlZ21lbnRzXG4gIDQyOlx0XHQgICAgLSBjdXJyZW50IG1lbW9yeSBmb290cHJpbnQgY29uc3VtZWQgYnkgZjJmcy5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgRjJGU19GU19YQVRUUlxuICA0NTpcdFx0Ym9vbCBcJiMzNDtGMkZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbiAgNDY6XHRcdGRlcGVuZHMgb24gRjJGU19GU1xuICA0NzpcdFx0ZGVmYXVsdCB5XG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieVxuICA1MDpcdFx0ICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRjJGUyBBbmFseXNpcyBmb3IgU3l6a2FsbGVyIENvdmVyYWdlKioKCk9rYXksIGxldCYjMzk7cyBzZWUgd2hlcmUgd2Ugc3RhbmQgd2l0aCBGMkZTIGFuZCBzeXprYWxsZXIuIEZpcnN0LCBpcyBGMkZTIGEgc3RhbmRhcmQgdGFyZ2V0IGZvciBmdXp6aW5nPyBZZXAsIGdvb2QgdG8gc2VlIHRoYXQgaXQmIzM5O3MgYWxyZWFkeSBoZWF2aWx5IGZ1enplZCBieSBzeXprYWxsZXIuIFRoYXQmIzM5O3MgYSBncmVhdCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBkaWZmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBGMkZTIGNvZGUgYXJlIGJlaW5nIHRvdWNoZWQuCgpSaWdodCwgdGhlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmU6IGBfX2Jpb19hbGxvY2AsIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAsIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCwgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgLCBgZjJmc193cml0ZV9iZWdpbmAsIGFuZCBgZjJmc19maWxlX29wZXJhdGlvbnNgLiBHb3QgaXQuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgd2FudCB0byBzZWUgd2hpY2ggZnVuY3Rpb25zIGNhbGwgYGYyZnNfbWVyZ2VfcGFnZV9iaW9gIGFuZCBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAsIGFuZCBob3cgYGYyZnNfd3JpdGVfYmVnaW5gIGZpdHMgaW50byB0aGUgcGljdHVyZS4gQSBxdWljayBgZ3JlcGAgZm9yIGBmMmZzX3dyaXRlX2JlZ2luYCBzaG91bGQgZG8gdGhlIHRyaWNrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSB1c2FnZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2YyZnNfd3JpdGVfYmVnaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mMmZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2YyZnMvZGF0YS5jPTM4MzA9c3RhdGljIGludCBwcmVwYXJlX2F0b21pY193cml0ZV9iZWdpbihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZjJmcy9kYXRhLmMtMzg3OC1cbmZzL2YyZnMvZGF0YS5jOjM4Nzk6c3RhdGljIGludCBmMmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbmZzL2YyZnMvZGF0YS5jLTM4ODAtXHRcdFx0ICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2YyZnMvZGF0YS5jLTM4OTUtXG5mcy9mMmZzL2RhdGEuYzozODk2Olx0dHJhY2VfZjJmc193cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pO1xuZnMvZjJmcy9kYXRhLmMtMzg5Ny1cbi0tXG5mcy9mMmZzL2RhdGEuYz00NDQ1PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZjJmc19kYmxvY2tfYW9wcyA9IHtcbi0tXG5mcy9mMmZzL2RhdGEuYy00NDQ4LVx0LndyaXRlcGFnZXNcdD0gZjJmc193cml0ZV9kYXRhX3BhZ2VzLFxuZnMvZjJmcy9kYXRhLmM6NDQ0OTpcdC53cml0ZV9iZWdpblx0PSBmMmZzX3dyaXRlX2JlZ2luLFxuZnMvZjJmcy9kYXRhLmMtNDQ1MC1cdC53cml0ZV9lbmRcdD0gZjJmc193cml0ZV9lbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDoKCioqRGl2aW5nIGludG8gZjJmc19zdWJtaXRfcGFnZV93cml0ZSBhbmQgZjJmc19tZXJnZV9wYWdlX2JpbyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IEYyRlMgaGFuZGxlcyBwYWdlIHdyaXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgIGFuZCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgbWVjaGFuaWNzIGhlcmUsIHRoZSBudXRzIGFuZCBib2x0cyBvZiBnZXR0aW5nIGRhdGEgZnJvbSB0aGUgcGFnZSBjYWNoZSBkb3duIHRvIHRoZSBmbGFzaC4KCmBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlYCwgdGhhdCYjMzk7cyB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIGZvciBhIHdyaXRlLCByaWdodD8gSXQmIzM5O3Mgd2hlcmUgd2UgdGFrZSBhIG1vZGlmaWVkIHBhZ2UgYW5kIHByZXBhcmUgdG8gc2VuZCBpdCBvdXQgdG8gdGhlIGZsYXNoLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCYjMzk7cyB0aGUgaW50ZXJmYWNlPyBXaGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gSXMgaXQgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzPyBEb2VzIGl0IGhhbmRsZSBhbnkgcHJlLWZsdXNoaW5nIG9yIGludmFsaWRhdGlvbiBzdGVwcyBiZWZvcmUgdGhlIElPIGlzIGFjdHVhbGx5IGRpc3BhdGNoZWQ/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1ldGFkYXRhIHVwZGF0ZXMsIG9yIGhvdyBpdCBiYXRjaGVzIElPIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZmlsZSBkYXRhLiBBbnkgaW50ZXJuYWwgcXVldWluZz8gQW55IGRpcmVjdCBjYWxscyB0byB0aGUgYmxvY2sgbGF5ZXIgZm9yIHN1Ym1pdHRpbmcgdGhlIGJpbz8gV2hhdCBoYXBwZW5zIGlmIHRoZXJlJiMzOTtzIGFuIGVycm9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9naWMuIEFyZSB0aGVyZSBhbnkgY29udGV4dC1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGRhdGEgb3IgdGhlIGN1cnJlbnQgRjJGUyBzdGF0ZT8KClRoZW4gd2UgaGF2ZSBgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIHdoaWNoIHN1Z2dlc3RzIHNvbWUgZm9ybSBvZiBCSU8gbWVyZ2luZyBvciBhZ2dyZWdhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZS4gU28sIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggbXVsdGlwbGUgY29udGlndW91cyBvciBuZWFyYnkgcGFnZXMsIGFyZSB3ZSB0cnlpbmcgdG8gY29hbGVzY2UgdGhlbSBpbnRvIGEgc2luZ2xlIEJJTyB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIG1hbnkgc21hbGxlciByZXF1ZXN0cz8gV2hhdCBhcmUgdGhlIGNyaXRlcmlhIGZvciBtZXJnaW5nPyBIb3cgZG9lcyBpdCBkZWNpZGUgaWYgYSBtZXJnZSBpcyBiZW5lZmljaWFsIHZlcnN1cyBkZXRyaW1lbnRhbD8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBwYXJ0aWFsIHBhZ2Ugd3JpdGVzIGR1cmluZyBhIG1lcmdlLCBlc3BlY2lhbGx5IHdpdGggd2Vhci1sZXZlbGluZyBjb25zaWRlcmF0aW9ucyBpbiBtaW5kPyBBbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSB1bmRlcmx5aW5nIGZsYXNoIGNvbnRyb2xsZXImIzM5O3MgY2FwYWJpbGl0aWVzPyBEb2VzIEYyRlMgaGF2ZSBhbnkgaW50ZWxsaWdlbnQgaGV1cmlzdGljcyBmb3IgQklPIG1lcmdpbmc/IEZvciBleGFtcGxlLCBhcmUgd2UgdHJ5aW5nIHRvIG1heGltaXplIHRoZSBzaXplIG9mIHdyaXRlcyBiYXNlZCBvbiB0aGUgZmxhc2gmIzM5O3MgZXJhc2UgYmxvY2sgc2l6ZT8gRG9lcyBpdCBwcmlvcml0aXplIHNvbWUgd3JpdGVzIG92ZXIgb3RoZXJzIHRvIG1heGltaXplIHRoZSBtZXJnZSBwb3RlbnRpYWw/CkFyZSB0aGVyZSBhbnkgbG9ja2luZyBjb25jZXJucyBpbiBtZXJnaW5nLCBwYXJ0aWN1bGFybHkgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgcGFnZSBjYWNoZT8KClVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbWJpbmVkIHJvbGUuIEhvdyBkbyBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAgYW5kIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCB3b3JrIHRvZ2V0aGVyIHRvIHByb3ZpZGUgb3B0aW1hbCBJTyBwZXJmb3JtYW5jZSB3aGlsZSBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgY29uc2lzdGVuY3kgZm9yIHRoaXMgZmlsZXN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmMmZzX21lcmdlX3BhZ2VfYmlvfGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mMmZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2YyZnMvZGF0YS5jPTk1NT12b2lkIGYyZnNfc3VibWl0X2FsbF9tZXJnZWRfaXB1X3dyaXRlcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpXG4tLVxuZnMvZjJmcy9kYXRhLmMtOTgzLVxuZnMvZjJmcy9kYXRhLmM6OTg0OmludCBmMmZzX21lcmdlX3BhZ2VfYmlvKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbmZzL2YyZnMvZGF0YS5jLTk4NS17XG4tLVxuZnMvZjJmcy9kYXRhLmM9MTAyNj1zdGF0aWMgYm9vbCBpc19lbmRfem9uZV9ibGthZGRyKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgYmxvY2tfdCBibGthZGRyKVxuLS1cbmZzL2YyZnMvZGF0YS5jLTEwNDYtXG5mcy9mMmZzL2RhdGEuYzoxMDQ3OnZvaWQgZjJmc19zdWJtaXRfcGFnZV93cml0ZShzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG5mcy9mMmZzL2RhdGEuYy0xMDQ4LXtcbi0tXG5mcy9mMmZzL2YyZnMuaD00MjQ3PWludCBmMmZzX3N1Ym1pdF9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pO1xuZnMvZjJmcy9mMmZzLmg6NDI0ODppbnQgZjJmc19tZXJnZV9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pO1xuZnMvZjJmcy9mMmZzLmg6NDI0OTp2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKTtcbmZzL2YyZnMvZjJmcy5oLTQyNTAtc3RydWN0IGJsb2NrX2RldmljZSAqZjJmc190YXJnZXRfZGV2aWNlKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSxcbi0tXG5mcy9mMmZzL2djLmM9MTMyNj1zdGF0aWMgaW50IG1vdmVfZGF0YV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBibG9ja190IGJpZHgsXG4tLVxuZnMvZjJmcy9nYy5jLTE0NzctXHRmaW8ubmV3X2Jsa2FkZHIgPSBuZXdhZGRyO1xuZnMvZjJmcy9nYy5jOjE0Nzg6XHRmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKFx1MDAyNmZpbyk7XG5mcy9mMmZzL2djLmMtMTQ3OS1cbi0tXG5mcy9mMmZzL3NlZ21lbnQuYz00MDg3PXN0YXRpYyB2b2lkIGRvX3dyaXRlX3BhZ2Uoc3RydWN0IGYyZnNfc3VtbWFyeSAqc3VtLCBzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4tLVxuZnMvZjJmcy9zZWdtZW50LmMtNDEyMC1cdC8qIHdyaXRlb3V0IGRpcnR5IHBhZ2UgaW50byBiZGV2ICovXG5mcy9mMmZzL3NlZ21lbnQuYzo0MTIxOlx0ZjJmc19zdWJtaXRfcGFnZV93cml0ZShmaW8pO1xuZnMvZjJmcy9zZWdtZW50LmMtNDEyMi1cbi0tXG5mcy9mMmZzL3NlZ21lbnQuYz00MTI5PXZvaWQgZjJmc19kb193cml0ZV9tZXRhX3BhZ2Uoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2YyZnMvc2VnbWVudC5jLTQxNDgtXHRmb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8pO1xuZnMvZjJmcy9zZWdtZW50LmM6NDE0OTpcdGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoXHUwMDI2ZmlvKTtcbmZzL2YyZnMvc2VnbWVudC5jLTQxNTAtXG4tLVxuZnMvZjJmcy9zZWdtZW50LmM9NDE4MT1pbnQgZjJmc19pbnBsYWNlX3dyaXRlX2RhdGEoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxuLS1cbmZzL2YyZnMvc2VnbWVudC5jLTQyMTItXHRpZiAoZmlvLVx1MDAzZWJpbyBcdTAwMjZcdTAwMjYgIUlTX0YyRlNfSVBVX05PQ0FDSEUoc2JpKSlcbmZzL2YyZnMvc2VnbWVudC5jOjQyMTM6XHRcdGVyciA9IGYyZnNfbWVyZ2VfcGFnZV9iaW8oZmlvKTtcbmZzL2YyZnMvc2VnbWVudC5jLTQyMTQtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3MwoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA2NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRjJGUyBEcm9wYmVoaW5kIFdyaXRlb3V0IFN1cHBvcnQgLSBGdXp6aW5nIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgRk9QX0RPTlRDQUNIRWAgYW5kIGBJT0NCX0RPTlRDQUNIRWAgKGRyb3BiZWhpbmQgd3JpdGVvdXQpIHdpdGhpbiBGMkZTLiBFc3NlbnRpYWxseSwgaXQmIzM5O3Mgc2V0dGluZyB0aGUgYGRyb3BiZWhpbmRgIGZsYWcgb24gZm9saW9zIGR1cmluZyB3cml0ZSBvcGVyYXRpb25zLCB3aGljaCB0aGVuIGNhc2NhZGVzIGRvd24gdG8gQklPIGFsbG9jYXRpb24gYW5kIG1lcmdpbmcgbG9naWMuIFNwZWNpZmljYWxseSwgYGYyZnNfd3JpdGVfYmVnaW5gIG5vdyB1c2VzIGBGR1BfRE9OVENBQ0hFYCwgYWZmZWN0aW5nIGhvdyBmb2xpb3MgYXJlIGhhbmRsZWQuIFRoaXMgdGhlbiBmbG93cyBpbnRvIGBfX2Jpb19hbGxvY2AsIHNldHRpbmcgYEJJT19DT01QTEVURV9JTl9UQVNLYCB3aGVuIGEgZHJvcGJlaGluZCBmb2xpbyBpcyBpbnZvbHZlZCBpbiBhIHdyaXRlIElPLiBJbXBvcnRhbnRseSwgdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYmlvIG1lcmdpbmcgZnVuY3Rpb25zIChgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIGBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlYCkgdG8gcHJldmVudCB0aGUgbWVyZ2luZyBvZiBkcm9wYmVoaW5kIGFuZCBub24tZHJvcGJlaGluZCBiaW9zIHVzaW5nIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAuCgpHaXZlbiB0aGF0IEYyRlMgaXMgYSBmaWxlc3lzdGVtIHRoYXQmIzM5O3MgYWN0aXZlbHkgZnV6emVkLCB0aGVzZSBjaGFuZ2VzIHdpdGhpbiB0aGUgSS9PIHBhdGggYXJlIHNpZ25pZmljYW50LiBNb2RpZnlpbmcgd3JpdGVfYmVnaW4sIGJpbyBtZXJnaW5nLCBhbmQgc3VibWlzc2lvbiBpcyBnb2luZyB0byBleHBvc2UgdGhlIGZpbGVzeXN0ZW0gdG8gbmV3IGV4ZWN1dGlvbiBwYXRocyBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBpc3N1ZXMsIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBpbmNvbXBsZXRlIGJpbyBzdWJtaXNzaW9uLCBtZW1vcnkgbGVha3MsIGFuZCBCSU8gY29tcGxldGlvbiBwcm9ibGVtcy4gVGhlcmVmb3JlLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KClRvIGJlIHNwZWNpZmljLCB0aGUgcmVxdWlyZWQgY29uZmlnIGZvciB0aGlzIGlzIGBGMkZTX0ZTYC4KCk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLiBXZSBoYXZlIGBmMmZzX3dyaXRlX2JlZ2luYCwgYGYyZnNfbWVyZ2VfcGFnZV9iaW9gLCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgIGFzIHRoZSBtYWluIHRvdWNocG9pbnRzLiBMb29raW5nIGF0IGBfX2Jpb19hbGxvY2AgYW5kIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAsIHRoZXkgYXJlIHN0YXRpYywgc28gd2UgZG9uJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlbSBkaXJlY3RseSBiZWluZyBleHBvcnRlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRvIHdvcnJ5IGFib3V0IG90aGVyIGlzc3Vlcy4gVGhlcmVmb3JlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseTogYGYyZnNfd3JpdGVfYmVnaW5gLCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIGFuZCBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAuCgpBbHJpZ2h0LCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgY2xlYXI6CgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtGMkZTX0ZTJiMzNDtdYAoqICAgKipGb2N1c1N5bWJvbHM6KiogYFsmIzM0O2YyZnNfd3JpdGVfYmVnaW4mIzM0OywgJiMzNDtmMmZzX21lcmdlX3BhZ2VfYmlvJiMzNDssICYjMzQ7ZjJmc19zdWJtaXRfcGFnZV93cml0ZSYjMzQ7XWAKKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGtleSBGMkZTIEkvTyBwYXRocyAod3JpdGVfYmVnaW4sIGJpbyBtZXJnaW5nLCBzdWJtaXNzaW9uKSB3aXRoIGRyb3BiZWhpbmQgd3JpdGVvdXQsIHBvdGVudGlhbGx5IGV4cG9zaW5nIHJhY2UgY29uZGl0aW9ucywgYmlvIHN1Ym1pc3Npb24gaXNzdWVzLCBtZW1vcnkgbGVha3MsIG9yIEJJTyBjb21wbGV0aW9uIGlzc3VlcyBpbiBhIGZpbGVzeXN0ZW0gdGhhdCBpcyBhY3RpdmVseSBmdXp6ZWQuCgpOb3csIGxldCYjMzk7cyBmb3JtdWxhdGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RjJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2YyZnNfbWVyZ2VfcGFnZV9iaW8mIzM0OywKICAgICYjMzQ7ZjJmc19zdWJtaXRfcGFnZV93cml0ZSYjMzQ7LAogICAgJiMzNDtmMmZzX3dyaXRlX2JlZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RjJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2YyZnNfbWVyZ2VfcGFnZV9iaW8mIzM0OywKICAgICYjMzQ7ZjJmc19zdWJtaXRfcGFnZV93cml0ZSYjMzQ7LAogICAgJiMzNDtmMmZzX3dyaXRlX2JlZ2luJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgSU9DQl9ET05UQ0FDSEUgKFJXRl9ET05UQ0FDSEUgLyBkcm9wLWJlaGluZCBjYWNoaW5nKSBpbiBGMkZTIGJ1ZmZlcmVkIHdyaXRlcyBieSBzZXR0aW5nIEZHUF9ET05UQ0FDSEUgaW4gZjJmc193cml0ZV9iZWdpbiwgQklPX0NPTVBMRVRFX0lOX1RBU0sgaW4gX19iaW9fYWxsb2MsIGNoZWNraW5nIGJpbyBtZXJnZWFiaWxpdHkgYmFzZWQgb24gdGhlIGZvbGlvIGRyb3BiZWhpbmQgZmxhZywgYW5kIGRlY2xhcmluZyBGT1BfRE9OVENBQ0hFIGluIGYyZnNfZmlsZV9vcGVyYXRpb25zLlxuXG5ObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIGNvbmN1cnJlbmN5LCBvciBiaW8gbWFuYWdlbWVudCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzIHJhdGhlciB0aGFuIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzg5NmU3YjIzZTg1ODBmMGRjMDFjZTVmMmY5NmUxZmQ0NzY2MGExMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTk6Mzc6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9mMmZzL2RhdGEuYyBiL2ZzL2YyZnMvZGF0YS5jCmluZGV4IDIxZjM5NmViZTIyY2EuLjZlODE2YzkzNDlhYmMgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvZGF0YS5jCkBAIC01MDMsNiAmIzQzOzUwMyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYmlvICpfX2Jpb19hbGxvYyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8sIGludCBucGFnZXMpCiAJYmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsCiAJCQkJZmlvLSZndDtvcCB8IGZpby0mZ3Q7b3BfZmxhZ3MgfCBmMmZzX2lvX2ZsYWdzKGZpbyksCiAJCQkJR0ZQX05PSU8sICZhbXA7ZjJmc19iaW9zZXQpOwomIzQzOwlpZiAoIWlzX3JlYWRfaW8oZmlvLSZndDtvcCkgJmFtcDsmYW1wOyBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLSZndDtmb2xpbykpCiYjNDM7CQliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NlY3RvciA9IHNlY3RvcjsKIAlpZiAoaXNfcmVhZF9pbyhmaW8tJmd0O29wKSkgewogCQliaW8tJmd0O2JpX2VuZF9pbyA9IGYyZnNfcmVhZF9lbmRfaW87CkBAIC03OTMsNiAmIzQzOzc5NSwxMyBAQCBzdGF0aWMgYm9vbCBwYWdlX2lzX21lcmdlYWJsZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVjdCBiaW8gKmJpbywKIAlyZXR1cm4gYmlvLSZndDtiaV9iZGV2ID09IGYyZnNfdGFyZ2V0X2RldmljZShzYmksIGN1cl9ibGthZGRyLCBOVUxMKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlKHN0cnVjdCBiaW8gKmJpbywKJiM0MzsJCQkJCSAgc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpb19mbGFnZ2VkKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spID09CiYjNDM7CQlmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLSZndDtmb2xpbyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgaW9fdHlwZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfYmlvX2luZm8gKmlvLAogCQkJCQkJc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKQogewpAQCAtOTg1LDggJiM0Mzs5OTQsMTAgQEAgaW50IGYyZnNfbWVyZ2VfcGFnZV9iaW8oc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKQogCiAJdHJhY2VfZjJmc19zdWJtaXRfZm9saW9fYmlvKGRhdGFfZm9saW8sIGZpbyk7CiAKLQlpZiAoYmlvICZhbXA7JmFtcDsgIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby0mZ3Q7c2JpLCBiaW8sICpmaW8tJmd0O2xhc3RfYmxvY2ssCi0JCQkJCQlmaW8tJmd0O25ld19ibGthZGRyKSkKJiM0MzsJaWYgKGJpbyAmYW1wOyZhbXA7CiYjNDM7CSAgICAoIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby0mZ3Q7c2JpLCBiaW8sICpmaW8tJmd0O2xhc3RfYmxvY2ssCiYjNDM7CQkJCWZpby0mZ3Q7bmV3X2Jsa2FkZHIpIHx8CiYjNDM7CSAgICAgIWYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlKGJpbywgZmlvKSkpCiAJCWYyZnNfc3VibWl0X21lcmdlZF9pcHVfd3JpdGUoZmlvLSZndDtzYmksICZhbXA7YmlvLCBOVUxMKTsKIGFsbG9jX25ldzoKIAlpZiAoIWJpbykgewpAQCAtMTA4Niw3ICYjNDM7MTA5Nyw4IEBAIHZvaWQgZjJmc19zdWJtaXRfcGFnZV93cml0ZShzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pCiAJICAgICghaW9faXNfbWVyZ2VhYmxlKHNiaSwgaW8tJmd0O2JpbywgaW8sIGZpbywgaW8tJmd0O2xhc3RfYmxvY2tfaW5fYmlvLAogCQkJICAgICAgZmlvLSZndDtuZXdfYmxrYWRkcikgfHwKIAkgICAgICFmMmZzX2NyeXB0X21lcmdlYWJsZV9iaW8oaW8tJmd0O2JpbywgZmlvX2lub2RlKGZpbyksCi0JCQkJYmlvX2ZvbGlvLSZndDtpbmRleCwgZmlvKSkpCiYjNDM7CQkJCWJpb19mb2xpby0mZ3Q7aW5kZXgsIGZpbykgfHwKJiM0MzsJICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoaW8tJmd0O2JpbywgZmlvKSkpCiAJCV9fc3VibWl0X21lcmdlZF9iaW8oaW8pOwogYWxsb2NfbmV3OgogCWlmIChpby0mZ3Q7YmlvID09IE5VTEwpIHsKQEAgLTM4NzIsMTEgJiM0MzszODg0LDE1IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctJmd0O2hvc3Q7CiAJc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGlub2RlKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlmZ2ZfdCBmZ3BfZmxhZ3MgPSBGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVDsKIAlwZ29mZl90IGluZGV4ID0gcG9zICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiAJYm9vbCBuZWVkX2JhbGFuY2UgPSBmYWxzZTsKIAlibG9ja190IGJsa2FkZHIgPSBOVUxMX0FERFI7CiAJaW50IGVyciA9IDA7CiAKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRE9OVENBQ0hFKQomIzQzOwkJZmdwX2ZsYWdzIHw9IEZHUF9ET05UQ0FDSEU7CiYjNDM7CiAJdHJhY2VfZjJmc193cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pOwogCiAJaWYgKCFmMmZzX2lzX2NoZWNrcG9pbnRfcmVhZHkoc2JpKSkgewpAQCAtMzkyMiw5ICYjNDM7MzkzOCw4IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJICogRG8gbm90IHVzZSBGR1BfU1RBQkxFIHRvIGF2b2lkIGRlYWRsb2NrLgogCSAqIFdpbGwgd2FpdCB0aGF0IGJlbG93IHdpdGggb3VyIElPIGNvbnRyb2wuCiAJICovCi0JZm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LAotCQkJCUZHUF9MT0NLIHwgRkdQX1dSSVRFIHwgRkdQX0NSRUFULAotCQkJCW1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwomIzQzOwlmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsIGZncF9mbGFncywKJiM0MzsJCQkJICAgICAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOwogCWlmIChJU19FUlIoZm9saW8pKSB7CiAJCWVyciA9IFBUUl9FUlIoZm9saW8pOwogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9mcy9mMmZzL2ZpbGUuYyBiL2ZzL2YyZnMvZmlsZS5jCmluZGV4IGVkYzM1MjU2OWU4N2UuLjU3MDI0NGFlNGZjOGEgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvZmlsZS5jCkBAIC01OTA5LDYgJiM0Mzs1OTA5LDYgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmMmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkuc3BsaWNlX3JlYWQJPSBmMmZzX2ZpbGVfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCiAJLmZhZHZpc2UJPSBmMmZzX2ZpbGVfZmFkdmlzZSwKLQkuZm9wX2ZsYWdzCT0gRk9QX0JVRkZFUl9SQVNZTkMsCiYjNDM7CS5mb3BfZmxhZ3MJPSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsCiAJLnNldGxlYXNlCT0gZ2VuZXJpY19zZXRsZWFzZSwKIH07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDA1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBBZGRpbmcgUldGX0RPTlRDQUNIRSBTdXBwb3J0IHRvIEYyRlMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgaW50cm9kdWNpbmcgc3VwcG9ydCBmb3IgYFJXRl9ET05UQ0FDSEVgIGFuZCBgSU9DQl9ET05UQ0FDSEVgIGZsYWdzIHdpdGhpbiB0aGUgRjJGUyBmaWxlc3lzdGVtLCBlZmZlY3RpdmVseSBlbmFibGluZyBhICYjMzQ7ZHJvcC1iZWhpbmQmIzM0OyBiZWhhdmlvciBmb3Igd3JpdGVzLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFnZSBjYWNoZSBtYW5hZ2VtZW50LCBhbmQgc3BlY2lmaWNhbGx5LCBjb250cm9sbGluZyB3aGV0aGVyIHBhZ2VzIHdyaXR0ZW4gdG8gZGlzayBhcmUgcmV0YWluZWQgaW4gdGhlIHBhZ2UgY2FjaGUgYWZ0ZXJ3YXJkLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZToKCiogICBJbiBgZnMvZjJmcy9kYXRhLmNgLCB0aGUgY29yZSBjaGFuZ2VzIGFyZSBpbiBob3cgYmlvcyBhcmUgaGFuZGxlZCB3aGVuIGBJT0NCX0RPTlRDQUNIRWAgaXMgcmVxdWVzdGVkLiBJZiB0aGUgZmxhZyBpcyBzZXQsIHRoZW4gd2hlbiB0aGUgZm9saW8gaXMgYWxsb2NhdGVkLCBpdCYjMzk7cyB0YWdnZWQgd2l0aCBgRkdQX0RPTlRDQUNIRWAsIHdoaWNoIEkga25vdywgc2V0cyB0aGUgZHJvcGJlaGluZCBmbGFnLgoqICAgVGhlIGBfX2Jpb19hbGxvY2AgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gc2V0IGBCSU9fQ09NUExFVEVfSU5fVEFTS2Agb24gdGhlIGJpbyBpZiB0aGUgZm9saW8gaGFzIGRyb3BiZWhpbmQuCiogICBUaGVuIHdlIGhhdmUgYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYCwgd2hpY2ggc2VlbXMgdG8gYmUgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBpbiBgZjJmc19tZXJnZV9wYWdlX2Jpb2AgYW5kIGBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlYC4gVGhpcyBwcmV2ZW50cyB0aGUgbWVyZ2luZyBvZiBiaW9zIHRoYXQgbWl4IHBhZ2VzIHdpdGggYW5kIHdpdGhvdXQgdGhlIGRyb3BiZWhpbmQgZmxhZy4gVGhpcyBpcyBjcnVjaWFsOyB3ZSAqbXVzdCogbWFpbnRhaW4gdGhlIGRyb3AtYmVoaW5kIHNlbWFudGljcywgZW5zdXJpbmcgdGhhdCB3ZSBkb24mIzM5O3QgYWNjaWRlbnRhbGx5IGNhY2hlIHBhZ2VzIHdlJiMzOTtyZSBzdXBwb3NlZCB0byBkcm9wLgoqICAgVGhlIHBhdGNoIHVwZGF0ZXMgYGYyZnNfd3JpdGVfYmVnaW5gIHRvIHBhc3MgYEZHUF9ET05UQ0FDSEVgIHRvIHRoZSBgZjJmc19maWxlbWFwX2dldF9mb2xpb2AgY2FsbC4KCkFuZCBmaW5hbGx5LCBgZnMvZjJmcy9maWxlLmNgIGFkZHMgYEZPUF9ET05UQ0FDSEVgIHRvIHRoZSBgZjJmc19maWxlX29wZXJhdGlvbnMuZm9wX2ZsYWdzYC4KClRoZSBwcmltYXJ5IG9iamVjdGl2ZSBpcyBub3cgY2xlYXI6IFdoZW4gYElPQ0JfRE9OVENBQ0hFYCBpcyB1c2VkLCB0aGUgc3lzdGVtIGVuc3VyZXMgdGhhdCB0aGUgd3JpdHRlbiBwYWdlcyBhcmUgbm90IGtlcHQgaW4gdGhlIHBhZ2UgY2FjaGUgYWZ0ZXIgdGhlIHdyaXRlIGNvbXBsZXRlcy4gVGhlIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZyBhbmQgdGhlIHN1YnNlcXVlbnQgbWVyZ2luZyBsb2dpYyBhcmUgdGhlIGtleSB0byB0aGlzIGJlaGF2aW9yLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpc2tzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIGNhY2hlIG9wZXJhdGlvbnMgYW5kIGJsb2NrIEkvTywgc28gbGV0JiMzOTtzIHJ1bGUgb3V0IGFueSByaXNrLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgdG8gdXNlcnNwYWNlLCBvciBjaGFuZ2VzIGFueSBtZW1vcnkgY29waWVzLCBib3VuZHMgY2hlY2tzLCBldGMuIFNvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzbiYjMzk7dCBhbiBpc3N1ZS4KClRoZSBtb3JlIGxpa2VseSBpc3N1ZXMgdGhhdCBjb3VsZCBiZSBmb3VuZCBmcm9tIHRoaXMgcGF0Y2ggYXJlOgoKKiAgIFBhZ2UgY2FjaGUgcmFjZSBjb25kaXRpb25zOiBUaGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgcGFnZSBjYWNoZSBsaWZldGltZSwgcmVmY291bnRpbmcsIGRyb3AtYmVoaW5kLCBvciBkZWFkbG9ja3MgaW4gdGhlIHBhZ2UgY2FjaGUuIFRob3VnaCwgdGhlc2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLgoqICAgTWVyZ2luZyBsb2dpYyBidWdzOiBUaGVyZSBjb3VsZCBiZSBwcm9ibGVtcyB3aXRoIHRoZSBtZXJnaW5nIGxvZ2ljLCBvciB3aXRoIHdyaXRlYmFjay4KClNvIHRoZSBtYWluIHRoaW5nIHRvIHdhdGNoIG91dCBmb3IgaXMgY29ycmVjdG5lc3MgaW4gaG93IHdlIG1hbmFnZSB0aGUgZHJvcC1iZWhpbmQgc3RhdGUuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHRob3JvdWdobHkgdGVzdCBzY2VuYXJpb3Mgd2hlcmUgZHJvcC1iZWhpbmQgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNvbmN1cnJlbnQgd3JpdGVzLCByZWFkcywgYW5kIGV2aWN0aW9ucyB0byBlbnN1cmUgd2UgaGF2ZW4mIzM5O3QgaW50cm9kdWNlZCBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBkYXRhIGNvcnJ1cHRpb24uIEFuZCBvZiBjb3Vyc2UsIG1ha2luZyBzdXJlIHdlIGhhdmVuJiMzOTt0IGJyb2tlbiBleGlzdGluZyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkdQX0RPTlRDQUNIRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9mMmZzL2RhdGEuYz0zODc5PXN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZjJmcy9kYXRhLmMtMzg5My1cdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcbmZzL2YyZnMvZGF0YS5jOjM4OTQ6XHRcdGZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFO1xuZnMvZjJmcy9kYXRhLmMtMzg5NS1cbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTc5OT1zdHJ1Y3QgZm9saW8gKmlvbWFwX2dldF9mb2xpbyhzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgbG9mZl90IHBvcywgc2l6ZV90IGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTgwNS1cdGlmIChpdGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9ET05UQ0FDSEUpXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjgwNjpcdFx0ZmdwIHw9IEZHUF9ET05UQ0FDSEU7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTgwNy1cdGZncCB8PSBmZ2Zfc2V0X29yZGVyKGxlbik7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9Njc5PXBnb2ZmX3QgcGFnZV9jYWNoZV9wcmV2X21pc3Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNzAyLSAqICogJUZHUF9TVEFCTEUgLSBXYWl0IGZvciB0aGUgZm9saW8gdG8gYmUgc3RhYmxlIChmaW5pc2hlZCB3cml0ZWJhY2spXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo3MDM6ICogKiAlRkdQX0RPTlRDQUNIRSAtIFVuY2FjaGVkIGJ1ZmZlcmVkIElPXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC03MDQtICogKiAlRkdQX1dSSVRFQkVHSU4gLSBUaGUgZmxhZ3MgdG8gdXNlIGluIGEgZmlsZXN5c3RlbSB3cml0ZV9iZWdpbigpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9NzA3PXR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmZ2ZfdDtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC03MTYtI2RlZmluZSBGR1BfU1RBQkxFXHRcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6NzE3OiNkZWZpbmUgRkdQX0RPTlRDQUNIRVx0XHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMClcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTcxOC0jZGVmaW5lIEZHRl9HRVRfT1JERVIoZmdmKVx0KCgoX19mb3JjZSB1bnNpZ25lZClmZ2YpIFx1MDAzZVx1MDAzZSAyNilcdC8qIHRvcCA2IGJpdHMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD03Nzc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKndyaXRlX2JlZ2luX2dldF9mb2xpbyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNzg0LSAgICAgICAgaWYgKGlvY2IgXHUwMDI2XHUwMDI2IGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6Nzg1OiAgICAgICAgICAgICAgICBmZ3BfZmxhZ3MgfD0gRkdQX0RPTlRDQUNIRTtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTc4Ni1cbi0tXG5tbS9maWxlbWFwLmM9MTk0Nz1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtMjAyNC1cdFx0XHRcdF9fZm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xubW0vZmlsZW1hcC5jOjIwMjU6XHRcdFx0aWYgKGZncF9mbGFncyBcdTAwMjYgRkdQX0RPTlRDQUNIRSlcbm1tL2ZpbGVtYXAuYy0yMDI2LVx0XHRcdFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG4tLVxubW0vZmlsZW1hcC5jLTIwNjAtXHQvKiBub3QgYW4gdW5jYWNoZWQgbG9va3VwLCBjbGVhciB1bmNhY2hlZCBpZiBzZXQgKi9cbm1tL2ZpbGVtYXAuYzoyMDYxOlx0aWYgKCEoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfRE9OVENBQ0hFKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkge1xubW0vZmlsZW1hcC5jLTIwNjItXHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgxMgoJCQkJCQkJb3V0cHV0OiAxNzcKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRjJGUyBCdWZmZXJlZCBXcml0ZSBQYXRoIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaCBmb3IgdGhlIEYyRlMgYnVmZmVyZWQgd3JpdGUgcGF0aCwgYW5kIGl0IGxvb2tzIHByZXR0eSBjbGVhbi4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byBlbmFibGluZyBgRk9QX0RPTlRDQUNIRWAgYW5kIGBJT0NCX0RPTlRDQUNIRWAgc3VwcG9ydC4gTGV0IG1lIGJyZWFrIGl0IGRvd24gaW4gbXkgaGVhZDoKCkZpcnN0LCBpbiBgZjJmc193cml0ZV9iZWdpbmAsIGl04oCZcyBjb3JyZWN0bHkgc2V0dGluZyB0aGUgYEZHUF9ET05UQ0FDSEVgIGZsYWcgaWYgdGhlIGBJT0NCX0RPTlRDQUNIRWAgZmxhZyBpcyBwcmVzZW50LiBUaGF0JiMzOTtzIGV4YWN0bHkgdGhlIHJpZ2h0IG1lY2hhbmlzbSB0byBzaWduYWwgdGhlIGNhY2hpbmcgYmVoYXZpb3IuIFRoZW4sIGZvciBhbGxvY2F0aW9uLCBpbiBgX19iaW9fYWxsb2NgLCBzZXR0aW5nIGBCSU9fQ09NUExFVEVfSU5fVEFTS2Agb24gd3JpdGUgYmlvcyB3aGVuIHRoZSBmb2xpbyBpcyBtYXJrZWQgYXMgYGRyb3BiZWhpbmRgIHNlZW1zIHNlbnNpYmxlLiBJdOKAmXMgY2xlYXJseSBhaW1pbmcgZm9yIGEgbW9yZSBpbW1lZGlhdGUgY29tcGxldGlvbiBvbiB3cml0ZXMgdGhhdCBhcmVuJiMzOTt0IGNhY2hlZC4KClRoZSBiaW8gbWVyZ2luZyBmdW5jdGlvbnMgaGF2ZSBhIHZpdGFsIGNoZWNrIHdpdGggYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYCwgd2hpY2ggaXMgbmVjZXNzYXJ5LiBJdOKAmXMgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBmb2xpb3MgbWFya2VkIGZvciBkcm9wLWJlaGluZCB3aXRoIHRoZSBvbmVzIHRoYXQgYXJlbiYjMzk7dC4gVGhpcyBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyB0aGUgaW50ZW5kZWQgJiMzNDtkb24mIzM5O3QgY2FjaGUmIzM0OyBiZWhhdmlvci4gRmluYWxseSwgYWR2ZXJ0aXNpbmcgYEZPUF9ET05UQ0FDSEVgIGluIGBmMmZzX2ZpbGVfb3BlcmF0aW9uc2AgaXMgdGhlIGZpbmFsIHN0ZXAsIG1ha2luZyB0aGUgZnVuY3Rpb25hbGl0eSBjbGVhciB0byB0aGUgdXNlcnNwYWNlLgoKVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0LCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGVyZSYjMzk7cyBubyB3YXkgdGhhdCB0aGlzIGludHJvZHVjZXMgYW55IG5hc3R5IHN1cnByaXNlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgYWNjZXNzZXMsIGFuZCBubyBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIGZpZWxkcyB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljLgoKSSB0aGluayBhbnkgcG90ZW50aWFsIGlzc3VlcyDigJMgYW5kIHRoZXNlIGFyZSBhbHdheXMgcG9zc2libGUg4oCTIHdpbGwgYmUgY2F1Z2h0IGJ5IHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXnigJlyZSB0aGUgcmlnaHQgdG9vbHMgdG8gZmluZCBsaWZlY3ljbGUgcHJvYmxlbXMgb3IgYmlvLXJlbGF0ZWQgY29uY3VycmVuY3kgaXNzdWVzLgoKR2l2ZW4gdGhhdCwgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmlza3MgcmVsYXRlZCB0byBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBTbywgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGlzIGZhbHNlLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgZ2l2ZSB0aGlzIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBJT0NCX0RPTlRDQUNIRSAoUldGX0RPTlRDQUNIRSAvIGRyb3AtYmVoaW5kIGNhY2hpbmcpIGluIEYyRlMgYnVmZmVyZWQgd3JpdGVzIGJ5IHNldHRpbmcgRkdQX0RPTlRDQUNIRSBpbiBmMmZzX3dyaXRlX2JlZ2luLCBCSU9fQ09NUExFVEVfSU5fVEFTSyBpbiBfX2Jpb19hbGxvYywgY2hlY2tpbmcgYmlvIG1lcmdlYWJpbGl0eSBiYXNlZCBvbiB0aGUgZm9saW8gZHJvcGJlaGluZCBmbGFnLCBhbmQgZGVjbGFyaW5nIEZPUF9ET05UQ0FDSEUgaW4gZjJmc19maWxlX29wZXJhdGlvbnMuXG5cbk5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycyBhcmUgYWxsb2NhdGVkLCBubyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGZvbGlvIGxpZmVjeWNsZSwgY29uY3VycmVuY3ksIG9yIGJpbyBtYW5hZ2VtZW50IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIElPQ0JfRE9OVENBQ0hFIChSV0ZfRE9OVENBQ0hFIC8gZHJvcC1iZWhpbmQgY2FjaGluZykgaW4gRjJGUyBidWZmZXJlZCB3cml0ZXMgYnkgc2V0dGluZyBGR1BfRE9OVENBQ0hFIGluIGYyZnNfd3JpdGVfYmVnaW4sIEJJT19DT01QTEVURV9JTl9UQVNLIGluIF9fYmlvX2FsbG9jLCBjaGVja2luZyBiaW8gbWVyZ2VhYmlsaXR5IGJhc2VkIG9uIHRoZSBmb2xpbyBkcm9wYmVoaW5kIGZsYWcsIGFuZCBkZWNsYXJpbmcgRk9QX0RPTlRDQUNIRSBpbiBmMmZzX2ZpbGVfb3BlcmF0aW9ucy5cblxuTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQsIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBpbiBjb25kaXRpb25hbCBicmFuY2hlcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCBjb25jdXJyZW5jeSwgb3IgYmlvIG1hbmFnZW1lbnQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycyByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6Mzc6MzkuMjk4NTkwOTU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4OTY1MjQ4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRjJGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImYyZnNfbWVyZ2VfcGFnZV9iaW9cIixcbiAgICBcImYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVcIixcbiAgICBcImYyZnNfd3JpdGVfYmVnaW5cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgSU9DQl9ET05UQ0FDSEUgKFJXRl9ET05UQ0FDSEUgLyBkcm9wLWJlaGluZCBjYWNoaW5nKSBpbiBGMkZTIGJ1ZmZlcmVkIHdyaXRlcyBieSBzZXR0aW5nIEZHUF9ET05UQ0FDSEUgaW4gZjJmc193cml0ZV9iZWdpbiwgQklPX0NPTVBMRVRFX0lOX1RBU0sgaW4gX19iaW9fYWxsb2MsIGNoZWNraW5nIGJpbyBtZXJnZWFiaWxpdHkgYmFzZWQgb24gdGhlIGZvbGlvIGRyb3BiZWhpbmQgZmxhZywgYW5kIGRlY2xhcmluZyBGT1BfRE9OVENBQ0hFIGluIGYyZnNfZmlsZV9vcGVyYXRpb25zLlxcblxcbk5vIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYnVmZmVycyBhcmUgYWxsb2NhdGVkLCBubyBzdHJ1Y3QgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGZvbGlvIGxpZmVjeWNsZSwgY29uY3VycmVuY3ksIG9yIGJpbyBtYW5hZ2VtZW50IGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBGT1BfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUgaW4gRjJGUywgYWxsb3dpbmcgZHJvcGJlaGluZCBmb2xpb3MgdG8gYmUgdGFnZ2VkIGFuZCBjb21wbGV0ZWQgaW4gdGFzayBjb250ZXh0LiBJdCB1cGRhdGVzIGYyZnNfd3JpdGVfYmVnaW4gdG8gc2V0IEZHUF9ET05UQ0FDSEUgYW5kIG1vZGlmaWVzIGYyZnNfbWVyZ2VfcGFnZV9iaW8gYW5kIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUgdG8gYXZvaWQgbWVyZ2luZyBkcm9wYmVoaW5kIGZvbGlvcyB3aXRoIHJlZ3VsYXIgZm9saW9zLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgZmlsZXN5c3RlbSB3cml0ZSBhbmQgSS9PIHN1Ym1pc3Npb24gcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozNzozOS4yOTg1OTU3MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYxMjgwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ODk2ZTdiMjNlODU4MGYwZGMwMWNlNWYyZjk2ZTFmZDQ3NjYwYTEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTk6Mzc6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRhLmMgYi9mcy9mMmZzL2RhdGEuY1xcbmluZGV4IDIxZjM5NmViZTIyY2EuLjZlODE2YzkzNDlhYmMgMTAwNjQ0XFxuLS0tIGEvZnMvZjJmcy9kYXRhLmNcXG4rKysgYi9mcy9mMmZzL2RhdGEuY1xcbkBAIC01MDMsNiArNTAzLDggQEAgc3RhdGljIHN0cnVjdCBiaW8gKl9fYmlvX2FsbG9jKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbywgaW50IG5wYWdlcylcXG4gXFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsXFxuIFxcdFxcdFxcdFxcdGZpby1cXHUwMDNlb3AgfCBmaW8tXFx1MDAzZW9wX2ZsYWdzIHwgZjJmc19pb19mbGFncyhmaW8pLFxcbiBcXHRcXHRcXHRcXHRHRlBfTk9JTywgXFx1MDAyNmYyZnNfYmlvc2V0KTtcXG4rXFx0aWYgKCFpc19yZWFkX2lvKGZpby1cXHUwMDNlb3ApIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmaW8tXFx1MDAzZWZvbGlvKSlcXG4rXFx0XFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc2VjdG9yO1xcbiBcXHRpZiAoaXNfcmVhZF9pbyhmaW8tXFx1MDAzZW9wKSkge1xcbiBcXHRcXHRiaW8tXFx1MDAzZWJpX2VuZF9pbyA9IGYyZnNfcmVhZF9lbmRfaW87XFxuQEAgLTc5Myw2ICs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sXFxuIFxcdHJldHVybiBiaW8tXFx1MDAzZWJpX2JkZXYgPT0gZjJmc190YXJnZXRfZGV2aWNlKHNiaSwgY3VyX2Jsa2FkZHIsIE5VTEwpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShzdHJ1Y3QgYmlvICpiaW8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbit7XFxuK1xcdHJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSA9PVxcbitcXHRcXHRmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLVxcdTAwM2Vmb2xpbyk7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGlvX3R5cGVfaXNfbWVyZ2VhYmxlKHN0cnVjdCBmMmZzX2Jpb19pbmZvICppbyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbiB7XFxuQEAgLTk4NSw4ICs5OTQsMTAgQEAgaW50IGYyZnNfbWVyZ2VfcGFnZV9iaW8oc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbiBcXG4gXFx0dHJhY2VfZjJmc19zdWJtaXRfZm9saW9fYmlvKGRhdGFfZm9saW8sIGZpbyk7XFxuIFxcbi1cXHRpZiAoYmlvIFxcdTAwMjZcXHUwMDI2ICFwYWdlX2lzX21lcmdlYWJsZShmaW8tXFx1MDAzZXNiaSwgYmlvLCAqZmlvLVxcdTAwM2VsYXN0X2Jsb2NrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRmaW8tXFx1MDAzZW5ld19ibGthZGRyKSlcXG4rXFx0aWYgKGJpbyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKCFwYWdlX2lzX21lcmdlYWJsZShmaW8tXFx1MDAzZXNiaSwgYmlvLCAqZmlvLVxcdTAwM2VsYXN0X2Jsb2NrLFxcbitcXHRcXHRcXHRcXHRmaW8tXFx1MDAzZW5ld19ibGthZGRyKSB8fFxcbitcXHQgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShiaW8sIGZpbykpKVxcbiBcXHRcXHRmMmZzX3N1Ym1pdF9tZXJnZWRfaXB1X3dyaXRlKGZpby1cXHUwMDNlc2JpLCBcXHUwMDI2YmlvLCBOVUxMKTtcXG4gYWxsb2NfbmV3OlxcbiBcXHRpZiAoIWJpbykge1xcbkBAIC0xMDg2LDcgKzEwOTcsOCBAQCB2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbiBcXHQgICAgKCFpb19pc19tZXJnZWFibGUoc2JpLCBpby1cXHUwMDNlYmlvLCBpbywgZmlvLCBpby1cXHUwMDNlbGFzdF9ibG9ja19pbl9iaW8sXFxuIFxcdFxcdFxcdCAgICAgIGZpby1cXHUwMDNlbmV3X2Jsa2FkZHIpIHx8XFxuIFxcdCAgICAgIWYyZnNfY3J5cHRfbWVyZ2VhYmxlX2Jpbyhpby1cXHUwMDNlYmlvLCBmaW9faW5vZGUoZmlvKSxcXG4tXFx0XFx0XFx0XFx0YmlvX2ZvbGlvLVxcdTAwM2VpbmRleCwgZmlvKSkpXFxuK1xcdFxcdFxcdFxcdGJpb19mb2xpby1cXHUwMDNlaW5kZXgsIGZpbykgfHxcXG4rXFx0ICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoaW8tXFx1MDAzZWJpbywgZmlvKSkpXFxuIFxcdFxcdF9fc3VibWl0X21lcmdlZF9iaW8oaW8pO1xcbiBhbGxvY19uZXc6XFxuIFxcdGlmIChpby1cXHUwMDNlYmlvID09IE5VTEwpIHtcXG5AQCAtMzg3MiwxMSArMzg4NCwxNSBAQCBzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4gXFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGlub2RlKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0ZmdmX3QgZmdwX2ZsYWdzID0gRkdQX0xPQ0sgfCBGR1BfV1JJVEUgfCBGR1BfQ1JFQVQ7XFxuIFxcdHBnb2ZmX3QgaW5kZXggPSBwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0Ym9vbCBuZWVkX2JhbGFuY2UgPSBmYWxzZTtcXG4gXFx0YmxvY2tfdCBibGthZGRyID0gTlVMTF9BRERSO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxcbitcXHRcXHRmZ3BfZmxhZ3MgfD0gRkdQX0RPTlRDQUNIRTtcXG4rXFxuIFxcdHRyYWNlX2YyZnNfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuKTtcXG4gXFxuIFxcdGlmICghZjJmc19pc19jaGVja3BvaW50X3JlYWR5KHNiaSkpIHtcXG5AQCAtMzkyMiw5ICszOTM4LDggQEAgc3RhdGljIGludCBmMmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0ICogRG8gbm90IHVzZSBGR1BfU1RBQkxFIHRvIGF2b2lkIGRlYWRsb2NrLlxcbiBcXHQgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLlxcbiBcXHQgKi9cXG4tXFx0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LFxcbi1cXHRcXHRcXHRcXHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCxcXG4tXFx0XFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuK1xcdGZvbGlvID0gZjJmc19maWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCwgZmdwX2ZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XFxuIFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuIFxcdFxcdGVyciA9IFBUUl9FUlIoZm9saW8pO1xcbiBcXHRcXHRnb3RvIGZhaWw7XFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcXG5pbmRleCBlZGMzNTI1NjllODdlLi41NzAyNDRhZTRmYzhhIDEwMDY0NFxcbi0tLSBhL2ZzL2YyZnMvZmlsZS5jXFxuKysrIGIvZnMvZjJmcy9maWxlLmNcXG5AQCAtNTkwOSw2ICs1OTA5LDYgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmMmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LnNwbGljZV9yZWFkXFx0PSBmMmZzX2ZpbGVfc3BsaWNlX3JlYWQsXFxuIFxcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuIFxcdC5mYWR2aXNlXFx0PSBmMmZzX2ZpbGVfZmFkdmlzZSxcXG4tXFx0LmZvcF9mbGFnc1xcdD0gRk9QX0JVRkZFUl9SQVNZTkMsXFxuK1xcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcXG4gXFx0LnNldGxlYXNlXFx0PSBnZW5lcmljX3NldGxlYXNlLFxcbiB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozNzo0MC42NDU1MzI0MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI3MDA2NzU1ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkYyRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmMmZzX21lcmdlX3BhZ2VfYmlvXCIsXG4gICAgXCJmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlXCIsXG4gICAgXCJmMmZzX3dyaXRlX2JlZ2luXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBGT1BfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUgaW4gRjJGUywgYWxsb3dpbmcgZHJvcGJlaGluZCBmb2xpb3MgdG8gYmUgdGFnZ2VkIGFuZCBjb21wbGV0ZWQgaW4gdGFzayBjb250ZXh0LiBJdCB1cGRhdGVzIGYyZnNfd3JpdGVfYmVnaW4gdG8gc2V0IEZHUF9ET05UQ0FDSEUgYW5kIG1vZGlmaWVzIGYyZnNfbWVyZ2VfcGFnZV9iaW8gYW5kIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUgdG8gYXZvaWQgbWVyZ2luZyBkcm9wYmVoaW5kIGZvbGlvcyB3aXRoIHJlZ3VsYXIgZm9saW9zLiBUaGVzZSBjaGFuZ2VzIG1vZGlmeSByZWFjaGFibGUgZmlsZXN5c3RlbSB3cml0ZSBhbmQgSS9PIHN1Ym1pc3Npb24gcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgZm9yIHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4OTZlN2IyM2U4NTgwZjBkYzAxY2U1ZjJmOTZlMWZkNDc2NjBhMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE5OjM3OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRhLmMgYi9mcy9mMmZzL2RhdGEuY1xuaW5kZXggMjFmMzk2ZWJlMjJjYS4uNmU4MTZjOTM0OWFiYyAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZGF0YS5jXG4rKysgYi9mcy9mMmZzL2RhdGEuY1xuQEAgLTUwMyw2ICs1MDMsOCBAQCBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fYWxsb2Moc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvLCBpbnQgbnBhZ2VzKVxuIFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsXG4gXHRcdFx0XHRmaW8tXHUwMDNlb3AgfCBmaW8tXHUwMDNlb3BfZmxhZ3MgfCBmMmZzX2lvX2ZsYWdzKGZpbyksXG4gXHRcdFx0XHRHRlBfTk9JTywgXHUwMDI2ZjJmc19iaW9zZXQpO1xuK1x0aWYgKCFpc19yZWFkX2lvKGZpby1cdTAwM2VvcCkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmaW8tXHUwMDNlZm9saW8pKVxuK1x0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzZWN0b3I7XG4gXHRpZiAoaXNfcmVhZF9pbyhmaW8tXHUwMDNlb3ApKSB7XG4gXHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBmMmZzX3JlYWRfZW5kX2lvO1xuQEAgLTc5Myw2ICs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRyZXR1cm4gYmlvLVx1MDAzZWJpX2JkZXYgPT0gZjJmc190YXJnZXRfZGV2aWNlKHNiaSwgY3VyX2Jsa2FkZHIsIE5VTEwpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdFx0XHRcdCAgc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxuK3tcbitcdHJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSA9PVxuK1x0XHRmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLVx1MDAzZWZvbGlvKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaW9fdHlwZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfYmlvX2luZm8gKmlvLFxuIFx0XHRcdFx0XHRcdHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiB7XG5AQCAtOTg1LDggKzk5NCwxMCBAQCBpbnQgZjJmc19tZXJnZV9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4gXG4gXHR0cmFjZV9mMmZzX3N1Ym1pdF9mb2xpb19iaW8oZGF0YV9mb2xpbywgZmlvKTtcbiBcbi1cdGlmIChiaW8gXHUwMDI2XHUwMDI2ICFwYWdlX2lzX21lcmdlYWJsZShmaW8tXHUwMDNlc2JpLCBiaW8sICpmaW8tXHUwMDNlbGFzdF9ibG9jayxcbi1cdFx0XHRcdFx0XHRmaW8tXHUwMDNlbmV3X2Jsa2FkZHIpKVxuK1x0aWYgKGJpbyBcdTAwMjZcdTAwMjZcbitcdCAgICAoIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby1cdTAwM2VzYmksIGJpbywgKmZpby1cdTAwM2VsYXN0X2Jsb2NrLFxuK1x0XHRcdFx0ZmlvLVx1MDAzZW5ld19ibGthZGRyKSB8fFxuK1x0ICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoYmlvLCBmaW8pKSlcbiBcdFx0ZjJmc19zdWJtaXRfbWVyZ2VkX2lwdV93cml0ZShmaW8tXHUwMDNlc2JpLCBcdTAwMjZiaW8sIE5VTEwpO1xuIGFsbG9jX25ldzpcbiBcdGlmICghYmlvKSB7XG5AQCAtMTA4Niw3ICsxMDk3LDggQEAgdm9pZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiBcdCAgICAoIWlvX2lzX21lcmdlYWJsZShzYmksIGlvLVx1MDAzZWJpbywgaW8sIGZpbywgaW8tXHUwMDNlbGFzdF9ibG9ja19pbl9iaW8sXG4gXHRcdFx0ICAgICAgZmlvLVx1MDAzZW5ld19ibGthZGRyKSB8fFxuIFx0ICAgICAhZjJmc19jcnlwdF9tZXJnZWFibGVfYmlvKGlvLVx1MDAzZWJpbywgZmlvX2lub2RlKGZpbyksXG4tXHRcdFx0XHRiaW9fZm9saW8tXHUwMDNlaW5kZXgsIGZpbykpKVxuK1x0XHRcdFx0YmlvX2ZvbGlvLVx1MDAzZWluZGV4LCBmaW8pIHx8XG4rXHQgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShpby1cdTAwM2ViaW8sIGZpbykpKVxuIFx0XHRfX3N1Ym1pdF9tZXJnZWRfYmlvKGlvKTtcbiBhbGxvY19uZXc6XG4gXHRpZiAoaW8tXHUwMDNlYmlvID09IE5VTEwpIHtcbkBAIC0zODcyLDExICszODg0LDE1IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGlub2RlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRmZ2ZfdCBmZ3BfZmxhZ3MgPSBGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVDtcbiBcdHBnb2ZmX3QgaW5kZXggPSBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRib29sIG5lZWRfYmFsYW5jZSA9IGZhbHNlO1xuIFx0YmxvY2tfdCBibGthZGRyID0gTlVMTF9BRERSO1xuIFx0aW50IGVyciA9IDA7XG4gXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG4rXHRcdGZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFO1xuK1xuIFx0dHJhY2VfZjJmc193cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pO1xuIFxuIFx0aWYgKCFmMmZzX2lzX2NoZWNrcG9pbnRfcmVhZHkoc2JpKSkge1xuQEAgLTM5MjIsOSArMzkzOCw4IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHQgKiBEbyBub3QgdXNlIEZHUF9TVEFCTEUgdG8gYXZvaWQgZGVhZGxvY2suXG4gXHQgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLlxuIFx0ICovXG4tXHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG4tXHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCxcbi1cdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuK1x0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsXG4rXHRcdFx0XHQgICAgICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0Z290byBmYWlsO1xuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcbmluZGV4IGVkYzM1MjU2OWU4N2UuLjU3MDI0NGFlNGZjOGEgMTAwNjQ0XG4tLS0gYS9mcy9mMmZzL2ZpbGUuY1xuKysrIGIvZnMvZjJmcy9maWxlLmNcbkBAIC01OTA5LDYgKzU5MDksNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGYyZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0LnNwbGljZV9yZWFkXHQ9IGYyZnNfZmlsZV9zcGxpY2VfcmVhZCxcbiBcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5mYWR2aXNlXHQ9IGYyZnNfZmlsZV9mYWR2aXNlLFxuLVx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyxcbitcdC5mb3BfZmxhZ3NcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxuIFx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM3OjQwLjY0NTUzNDA0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTM2MjI3MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRjJGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEYyRlMgaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgaXQsIHNvIGxldCdzIGRpZyBpbi4gSSBzZWUgY2hhbmdlcyB0byBgZnMvZjJmcy9kYXRhLmNgIGFuZCBgZnMvZjJmcy9maWxlLmNgIOKAkyBpbnRlcmVzdGluZywgdGhvc2UgYXJlIGNvcmUgYXJlYXMuXG5cbkZpcnN0LCBsZXQncyBsb29rIGF0IHRoZSBgX19iaW9fYWxsb2NgIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIGBCSU9fQ09NUExFVEVfSU5fVEFTS2AgZmxhZyB0byB0aGUgYmlvIGlmIGl0J3Mgbm90IGEgcmVhZCBvcGVyYXRpb24gYW5kIHRoZSBmb2xpbyBoYXMgYGRyb3BiZWhpbmRgIHNldC4gVGhpcyBzdWdnZXN0cyB0aGV5J3JlIHRyeWluZyB0byBjb250cm9sIHdoZW4gdGhlIEkvTyBjb21wbGV0ZXMsIHBvc3NpYmx5IHJlbGF0ZWQgdG8gY2FjaGluZyBiZWhhdmlvci5cblxuTmV4dCwgdGhlcmUncyB0aGUgYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBpbnRyb2R1Y2VkIHRvIGNoZWNrIGlmIGFuIGV4aXN0aW5nIGJpbyBjYW4gYmUgbWVyZ2VkIHdpdGggYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIGZsYWcsIGFuZCB0aGUgYGRyb3BiZWhpbmRgIHN0YXRlIG9mIHRoZSBmb2xpby4gSWYgdGhlIGRyb3BiZWhpbmQgc3RhdGUgZGlmZmVycyBiZXR3ZWVuIGJpbyBhbmQgZm9saW8sIHRoZSBtZXJnaW5nIGlzIHByZXZlbnRlZC4gVGhpcyBtZXJnZWFiaWxpdHkgY2hlY2sgaW4gYGYyZnNfbWVyZ2VfcGFnZV9iaW9gIGFuZCBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAgaXMgYSBjcml0aWNhbCBvcHRpbWl6YXRpb24uIEl0J3MgZGVzaWduZWQgdG8gb3B0aW1pemUgdGhlIEkvTyBtZXJnaW5nIHdoZW4gd3JpdGVzIGFyZSBzdWJtaXR0ZWQuXG5cbk5vdywgcmVnYXJkaW5nIGBmMmZzX3dyaXRlX2JlZ2luYCwgdGhlIGFkZGl0aW9uIG9mIGBJT0NCX0RPTlRDQUNIRWAgaXMgdGVsbGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGRpcmVjdGx5IHBhc3NpbmcgdGhpcyBmbGFnIGRvd24gdG8gdGhlIGZvbGlvIGFsbG9jYXRpb24gdXNpbmcgYEZHUF9ET05UQ0FDSEVgLiBUaGlzIGlzIGEgZGlyZWN0IG1ldGhvZCBvZiBjb250cm9sbGluZyB0aGUgY2FjaGluZyBiZWhhdmlvciBvZiB0aGUgdW5kZXJseWluZyBmaWxlLlxuXG5GaW5hbGx5LCBpbiBgZnMvZjJmcy9maWxlLmNgLCB0aGUgYGZvcF9mbGFnc2AgZm9yIHRoZSBmaWxlIG9wZXJhdGlvbnMgYXJlIHNldCB0byBgRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBhcyBpdCBpbmRpY2F0ZXMgd2Ugc2hvdWxkIGNhY2hlIGFzeW5jIHJlYWRzIGFuZCBoYXZlIGBET05UQ0FDSEVgIGVuYWJsZWQgYXQgdGhlIGZpbGUgbGV2ZWwuIFRoaXMgc2V0dGluZyBpcyBsaWtlbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjaGFuZ2VzIGluIGBmMmZzX3dyaXRlX2JlZ2luYCB0byBwcm92aWRlIGEgd2F5IHRvIHNlbGVjdGl2ZWx5IGRpc2FibGUgY2FjaGluZyBmb3Igd3JpdGVzLlxuXG5Ob3csIGJlZm9yZSBJIGdvIGRlZXBlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgc2hvdWxkIHVzZSBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIGBmcy9mMmZzL0tjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgc2V0dGluZ3MgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG90aGVyIEYyRlMgZmVhdHVyZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyByZXF1aXJlZCBpbiB0aGUgdXNlcidzIGVudmlyb25tZW50IHRvIHVzZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTkzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6Mzc6NTEuMTgxNzYzNDE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZjJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRjJGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkYyRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbiAgIDU6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNjpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBGMkZTX0ZTX1hBVFRSIGlmIEZTX0VOQ1JZUFRJT05cXG4gICA5OlxcdFxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbiAgMTA6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAxMTpcXHRcXHRzZWxlY3QgTFo0X0NPTVBSRVNTIGlmIEYyRlNfRlNfTFo0XFxuICAxMjpcXHRcXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcXG4gIDEzOlxcdFxcdHNlbGVjdCBMWjRIQ19DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNEhDXFxuICAxNDpcXHRcXHRzZWxlY3QgTFpPX0NPTVBSRVNTIGlmIEYyRlNfRlNfTFpPXFxuICAxNTpcXHRcXHRzZWxlY3QgTFpPX0RFQ09NUFJFU1MgaWYgRjJGU19GU19MWk9cXG4gIDE2OlxcdFxcdHNlbGVjdCBaU1REX0NPTVBSRVNTIGlmIEYyRlNfRlNfWlNURFxcbiAgMTc6XFx0XFx0c2VsZWN0IFpTVERfREVDT01QUkVTUyBpZiBGMkZTX0ZTX1pTVERcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgRjJGUyBpcyBiYXNlZCBvbiBMb2ctc3RydWN0dXJlZCBGaWxlIFN5c3RlbSAoTEZTKSwgd2hpY2ggc3VwcG9ydHNcXG4gIDIwOlxcdFxcdCAgdmVyc2F0aWxlIFxcXCJmbGFzaC1mcmllbmRseVxcXCIgZmVhdHVyZXMuIFRoZSBkZXNpZ24gaGFzIGJlZW4gZm9jdXNlZCBvblxcbiAgMjE6XFx0XFx0ICBhZGRyZXNzaW5nIHRoZSBmdW5kYW1lbnRhbCBpc3N1ZXMgaW4gTEZTLCB3aGljaCBhcmUgc25vd2JhbGwgZWZmZWN0XFxuICAyMjpcXHRcXHQgIG9mIHdhbmRlcmluZyB0cmVlIGFuZCBoaWdoIGNsZWFuaW5nIG92ZXJoZWFkLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIFNpbmNlIGZsYXNoLWJhc2VkIHN0b3JhZ2VzIHNob3cgZGlmZmVyZW50IGNoYXJhY3RlcmlzdGljcyBhY2NvcmRpbmcgdG9cXG4gIDI1OlxcdFxcdCAgdGhlIGludGVybmFsIGdlb21ldHJ5IG9yIGZsYXNoIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZXMgYWthIEZUTCwgRjJGU1xcbiAgMjY6XFx0XFx0ICBhbmQgdG9vbHMgc3VwcG9ydCB2YXJpb3VzIHBhcmFtZXRlcnMgbm90IG9ubHkgZm9yIGNvbmZpZ3VyaW5nIG9uLWRpc2tcXG4gIDI3OlxcdFxcdCAgbGF5b3V0LCBidXQgYWxzbyBmb3Igc2VsZWN0aW5nIGFsbG9jYXRpb24gYW5kIGNsZWFuaW5nIGFsZ29yaXRobXMuXFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIEYyRlNfU1RBVF9GU1xcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiRjJGUyBTdGF0dXMgSW5mb3JtYXRpb25cXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIEYyRlNfRlNcXG4gIDM0OlxcdFxcdGRlZmF1bHQgeVxcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICAvc3lzL2tlcm5lbC9kZWJ1Zy9mMmZzLyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIHBhcnRpdGlvbnNcXG4gIDM3OlxcdFxcdCAgbW91bnRlZCBhcyBmMmZzLiBFYWNoIGZpbGUgc2hvd3MgdGhlIHdob2xlIGYyZnMgaW5mb3JtYXRpb24uXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgL3N5cy9rZXJuZWwvZGVidWcvZjJmcy9zdGF0dXMgaW5jbHVkZXM6XFxuICA0MDpcXHRcXHQgICAgLSBtYWpvciBmaWxlc3lzdGVtIGluZm9ybWF0aW9uIG1hbmFnZWQgYnkgZjJmcyBjdXJyZW50bHlcXG4gIDQxOlxcdFxcdCAgICAtIGF2ZXJhZ2UgU0lUIGluZm9ybWF0aW9uIGFib3V0IHdob2xlIHNlZ21lbnRzXFxuICA0MjpcXHRcXHQgICAgLSBjdXJyZW50IG1lbW9yeSBmb290cHJpbnQgY29uc3VtZWQgYnkgZjJmcy5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIEYyRlNfRlNfWEFUVFJcXG4gIDQ1OlxcdFxcdGJvb2wgXFxcIkYyRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1xcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gRjJGU19GU1xcbiAgNDc6XFx0XFx0ZGVmYXVsdCB5XFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIEV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG5hbWU6dmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGlub2RlcyBieVxcbiAgNTA6XFx0XFx0ICB0aGUga2VybmVsIG9yIGJ5IHVzZXJzIChzZWUgdGhlIGF0dHIoNSkgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozNzo1MS4xODE4NTgwNDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODkyODM5OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkYyRlMgQW5hbHlzaXMgZm9yIFN5emthbGxlciBDb3ZlcmFnZSoqXG5cbk9rYXksIGxldCdzIHNlZSB3aGVyZSB3ZSBzdGFuZCB3aXRoIEYyRlMgYW5kIHN5emthbGxlci4gRmlyc3QsIGlzIEYyRlMgYSBzdGFuZGFyZCB0YXJnZXQgZm9yIGZ1enppbmc/IFllcCwgZ29vZCB0byBzZWUgdGhhdCBpdCdzIGFscmVhZHkgaGVhdmlseSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiBUaGF0J3MgYSBncmVhdCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGRpZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGFydHMgb2YgdGhlIEYyRlMgY29kZSBhcmUgYmVpbmcgdG91Y2hlZC5cblxuUmlnaHQsIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYXJlOiBgX19iaW9fYWxsb2NgLCBgZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGVgLCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIGBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlYCwgYGYyZnNfd3JpdGVfYmVnaW5gLCBhbmQgYGYyZnNfZmlsZV9vcGVyYXRpb25zYC4gR290IGl0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgLCBhbmQgaG93IGBmMmZzX3dyaXRlX2JlZ2luYCBmaXRzIGludG8gdGhlIHBpY3R1cmUuIEEgcXVpY2sgYGdyZXBgIGZvciBgZjJmc193cml0ZV9iZWdpbmAgc2hvdWxkIGRvIHRoZSB0cmljay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgdXNhZ2UgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM3OjU0LjA3NDcwMDM5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY0OTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmMmZzX3dyaXRlX2JlZ2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2YyZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZjJmcy9kYXRhLmM9MzgzMD1zdGF0aWMgaW50IHByZXBhcmVfYXRvbWljX3dyaXRlX2JlZ2luKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL2YyZnMvZGF0YS5jLTM4NzgtXFxuZnMvZjJmcy9kYXRhLmM6Mzg3OTpzdGF0aWMgaW50IGYyZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2YyZnMvZGF0YS5jLTM4ODAtXFx0XFx0XFx0ICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZjJmcy9kYXRhLmMtMzg5NS1cXG5mcy9mMmZzL2RhdGEuYzozODk2OlxcdHRyYWNlX2YyZnNfd3JpdGVfYmVnaW4oaW5vZGUsIHBvcywgbGVuKTtcXG5mcy9mMmZzL2RhdGEuYy0zODk3LVxcbi0tXFxuZnMvZjJmcy9kYXRhLmM9NDQ0NT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGYyZnNfZGJsb2NrX2FvcHMgPSB7XFxuLS1cXG5mcy9mMmZzL2RhdGEuYy00NDQ4LVxcdC53cml0ZXBhZ2VzXFx0PSBmMmZzX3dyaXRlX2RhdGFfcGFnZXMsXFxuZnMvZjJmcy9kYXRhLmM6NDQ0OTpcXHQud3JpdGVfYmVnaW5cXHQ9IGYyZnNfd3JpdGVfYmVnaW4sXFxuZnMvZjJmcy9kYXRhLmMtNDQ1MC1cXHQud3JpdGVfZW5kXFx0PSBmMmZzX3dyaXRlX2VuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6Mzc6NTQuMTMwMzUzNjc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3OTY4MzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDpcblxuKipEaXZpbmcgaW50byBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIGFuZCBmMmZzX21lcmdlX3BhZ2VfYmlvKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbW9kZWwgb2YgaG93IEYyRlMgaGFuZGxlcyBwYWdlIHdyaXRlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgIGFuZCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AuIEVzc2VudGlhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBtZWNoYW5pY3MgaGVyZSwgdGhlIG51dHMgYW5kIGJvbHRzIG9mIGdldHRpbmcgZGF0YSBmcm9tIHRoZSBwYWdlIGNhY2hlIGRvd24gdG8gdGhlIGZsYXNoLlxuXG5gZjJmc19zdWJtaXRfcGFnZV93cml0ZWAsIHRoYXQncyB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIGZvciBhIHdyaXRlLCByaWdodD8gSXQncyB3aGVyZSB3ZSB0YWtlIGEgbW9kaWZpZWQgcGFnZSBhbmQgcHJlcGFyZSB0byBzZW5kIGl0IG91dCB0byB0aGUgZmxhc2guIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0J3MgdGhlIGludGVyZmFjZT8gV2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQ/IElzIGl0IHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cz8gRG9lcyBpdCBoYW5kbGUgYW55IHByZS1mbHVzaGluZyBvciBpbnZhbGlkYXRpb24gc3RlcHMgYmVmb3JlIHRoZSBJTyBpcyBhY3R1YWxseSBkaXNwYXRjaGVkPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggbWV0YWRhdGEgdXBkYXRlcywgb3IgaG93IGl0IGJhdGNoZXMgSU8gaWYgd2UncmUgZGVhbGluZyB3aXRoIGZpbGUgZGF0YS4gQW55IGludGVybmFsIHF1ZXVpbmc/IEFueSBkaXJlY3QgY2FsbHMgdG8gdGhlIGJsb2NrIGxheWVyIGZvciBzdWJtaXR0aW5nIHRoZSBiaW8/IFdoYXQgaGFwcGVucyBpZiB0aGVyZSdzIGFuIGVycm9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBlcnJvciBoYW5kbGluZyBhbmQgcmV0cnkgbG9naWMuIEFyZSB0aGVyZSBhbnkgY29udGV4dC1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGRhdGEgb3IgdGhlIGN1cnJlbnQgRjJGUyBzdGF0ZT9cblxuVGhlbiB3ZSBoYXZlIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBmb3JtIG9mIEJJTyBtZXJnaW5nIG9yIGFnZ3JlZ2F0aW9uLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLiBTbywgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBjb250aWd1b3VzIG9yIG5lYXJieSBwYWdlcywgYXJlIHdlIHRyeWluZyB0byBjb2FsZXNjZSB0aGVtIGludG8gYSBzaW5nbGUgQklPIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2YgbWFueSBzbWFsbGVyIHJlcXVlc3RzPyBXaGF0IGFyZSB0aGUgY3JpdGVyaWEgZm9yIG1lcmdpbmc/IEhvdyBkb2VzIGl0IGRlY2lkZSBpZiBhIG1lcmdlIGlzIGJlbmVmaWNpYWwgdmVyc3VzIGRldHJpbWVudGFsPyBIb3cgZG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIHBhcnRpYWwgcGFnZSB3cml0ZXMgZHVyaW5nIGEgbWVyZ2UsIGVzcGVjaWFsbHkgd2l0aCB3ZWFyLWxldmVsaW5nIGNvbnNpZGVyYXRpb25zIGluIG1pbmQ/IEFueSBkZXBlbmRlbmNpZXMgb24gdGhlIHVuZGVybHlpbmcgZmxhc2ggY29udHJvbGxlcidzIGNhcGFiaWxpdGllcz8gRG9lcyBGMkZTIGhhdmUgYW55IGludGVsbGlnZW50IGhldXJpc3RpY3MgZm9yIEJJTyBtZXJnaW5nPyBGb3IgZXhhbXBsZSwgYXJlIHdlIHRyeWluZyB0byBtYXhpbWl6ZSB0aGUgc2l6ZSBvZiB3cml0ZXMgYmFzZWQgb24gdGhlIGZsYXNoJ3MgZXJhc2UgYmxvY2sgc2l6ZT8gRG9lcyBpdCBwcmlvcml0aXplIHNvbWUgd3JpdGVzIG92ZXIgb3RoZXJzIHRvIG1heGltaXplIHRoZSBtZXJnZSBwb3RlbnRpYWw/XG5BcmUgdGhlcmUgYW55IGxvY2tpbmcgY29uY2VybnMgaW4gbWVyZ2luZywgcGFydGljdWxhcmx5IHdpdGggY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIHBhZ2UgY2FjaGU/XG5cblVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbWJpbmVkIHJvbGUuIEhvdyBkbyBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAgYW5kIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCB3b3JrIHRvZ2V0aGVyIHRvIHByb3ZpZGUgb3B0aW1hbCBJTyBwZXJmb3JtYW5jZSB3aGlsZSBlbnN1cmluZyBkYXRhIGludGVncml0eSBhbmQgY29uc2lzdGVuY3kgZm9yIHRoaXMgZmlsZXN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjAwLjcxMDA0MDQwOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMzNjE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmMmZzX21lcmdlX3BhZ2VfYmlvfGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZjJmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mMmZzL2RhdGEuYz05NTU9dm9pZCBmMmZzX3N1Ym1pdF9hbGxfbWVyZ2VkX2lwdV93cml0ZXMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpKVxcbi0tXFxuZnMvZjJmcy9kYXRhLmMtOTgzLVxcbmZzL2YyZnMvZGF0YS5jOjk4NDppbnQgZjJmc19tZXJnZV9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXFxuZnMvZjJmcy9kYXRhLmMtOTg1LXtcXG4tLVxcbmZzL2YyZnMvZGF0YS5jPTEwMjY9c3RhdGljIGJvb2wgaXNfZW5kX3pvbmVfYmxrYWRkcihzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIGJsb2NrX3QgYmxrYWRkcilcXG4tLVxcbmZzL2YyZnMvZGF0YS5jLTEwNDYtXFxuZnMvZjJmcy9kYXRhLmM6MTA0Nzp2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxcbmZzL2YyZnMvZGF0YS5jLTEwNDgte1xcbi0tXFxuZnMvZjJmcy9mMmZzLmg9NDI0Nz1pbnQgZjJmc19zdWJtaXRfcGFnZV9iaW8oc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKTtcXG5mcy9mMmZzL2YyZnMuaDo0MjQ4OmludCBmMmZzX21lcmdlX3BhZ2VfYmlvKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbyk7XFxuZnMvZjJmcy9mMmZzLmg6NDI0OTp2b2lkIGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKTtcXG5mcy9mMmZzL2YyZnMuaC00MjUwLXN0cnVjdCBibG9ja19kZXZpY2UgKmYyZnNfdGFyZ2V0X2RldmljZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXFxuLS1cXG5mcy9mMmZzL2djLmM9MTMyNj1zdGF0aWMgaW50IG1vdmVfZGF0YV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBibG9ja190IGJpZHgsXFxuLS1cXG5mcy9mMmZzL2djLmMtMTQ3Ny1cXHRmaW8ubmV3X2Jsa2FkZHIgPSBuZXdhZGRyO1xcbmZzL2YyZnMvZ2MuYzoxNDc4OlxcdGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGUoXFx1MDAyNmZpbyk7XFxuZnMvZjJmcy9nYy5jLTE0NzktXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYz00MDg3PXN0YXRpYyB2b2lkIGRvX3dyaXRlX3BhZ2Uoc3RydWN0IGYyZnNfc3VtbWFyeSAqc3VtLCBzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MTIwLVxcdC8qIHdyaXRlb3V0IGRpcnR5IHBhZ2UgaW50byBiZGV2ICovXFxuZnMvZjJmcy9zZWdtZW50LmM6NDEyMTpcXHRmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKGZpbyk7XFxuZnMvZjJmcy9zZWdtZW50LmMtNDEyMi1cXG4tLVxcbmZzL2YyZnMvc2VnbWVudC5jPTQxMjk9dm9pZCBmMmZzX2RvX3dyaXRlX21ldGFfcGFnZShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MTQ4LVxcdGZvbGlvX3N0YXJ0X3dyaXRlYmFjayhmb2xpbyk7XFxuZnMvZjJmcy9zZWdtZW50LmM6NDE0OTpcXHRmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKFxcdTAwMjZmaW8pO1xcbmZzL2YyZnMvc2VnbWVudC5jLTQxNTAtXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYz00MTgxPWludCBmMmZzX2lucGxhY2Vfd3JpdGVfZGF0YShzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MjEyLVxcdGlmIChmaW8tXFx1MDAzZWJpbyBcXHUwMDI2XFx1MDAyNiAhSVNfRjJGU19JUFVfTk9DQUNIRShzYmkpKVxcbmZzL2YyZnMvc2VnbWVudC5jOjQyMTM6XFx0XFx0ZXJyID0gZjJmc19tZXJnZV9wYWdlX2JpbyhmaW8pO1xcbmZzL2YyZnMvc2VnbWVudC5jLTQyMTQtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozODowMC43NTgzODUyODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODE3MDc3ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkYyRlMgRHJvcGJlaGluZCBXcml0ZW91dCBTdXBwb3J0IC0gRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgRk9QX0RPTlRDQUNIRWAgYW5kIGBJT0NCX0RPTlRDQUNIRWAgKGRyb3BiZWhpbmQgd3JpdGVvdXQpIHdpdGhpbiBGMkZTLiBFc3NlbnRpYWxseSwgaXQncyBzZXR0aW5nIHRoZSBgZHJvcGJlaGluZGAgZmxhZyBvbiBmb2xpb3MgZHVyaW5nIHdyaXRlIG9wZXJhdGlvbnMsIHdoaWNoIHRoZW4gY2FzY2FkZXMgZG93biB0byBCSU8gYWxsb2NhdGlvbiBhbmQgbWVyZ2luZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBgZjJmc193cml0ZV9iZWdpbmAgbm93IHVzZXMgYEZHUF9ET05UQ0FDSEVgLCBhZmZlY3RpbmcgaG93IGZvbGlvcyBhcmUgaGFuZGxlZC4gVGhpcyB0aGVuIGZsb3dzIGludG8gYF9fYmlvX2FsbG9jYCwgc2V0dGluZyBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIHdoZW4gYSBkcm9wYmVoaW5kIGZvbGlvIGlzIGludm9sdmVkIGluIGEgd3JpdGUgSU8uIEltcG9ydGFudGx5LCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBiaW8gbWVyZ2luZyBmdW5jdGlvbnMgKGBmMmZzX21lcmdlX3BhZ2VfYmlvYCwgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgKSB0byBwcmV2ZW50IHRoZSBtZXJnaW5nIG9mIGRyb3BiZWhpbmQgYW5kIG5vbi1kcm9wYmVoaW5kIGJpb3MgdXNpbmcgYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYC5cblxuR2l2ZW4gdGhhdCBGMkZTIGlzIGEgZmlsZXN5c3RlbSB0aGF0J3MgYWN0aXZlbHkgZnV6emVkLCB0aGVzZSBjaGFuZ2VzIHdpdGhpbiB0aGUgSS9PIHBhdGggYXJlIHNpZ25pZmljYW50LiBNb2RpZnlpbmcgd3JpdGVfYmVnaW4sIGJpbyBtZXJnaW5nLCBhbmQgc3VibWlzc2lvbiBpcyBnb2luZyB0byBleHBvc2UgdGhlIGZpbGVzeXN0ZW0gdG8gbmV3IGV4ZWN1dGlvbiBwYXRocyBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBpc3N1ZXMsIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCBpbmNvbXBsZXRlIGJpbyBzdWJtaXNzaW9uLCBtZW1vcnkgbGVha3MsIGFuZCBCSU8gY29tcGxldGlvbiBwcm9ibGVtcy4gVGhlcmVmb3JlLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuVG8gYmUgc3BlY2lmaWMsIHRoZSByZXF1aXJlZCBjb25maWcgZm9yIHRoaXMgaXMgYEYyRlNfRlNgLlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xzLCBsZXQncyBuYWlsIGRvd24gd2hhdCdzIGJlZW4gbW9kaWZpZWQuIFdlIGhhdmUgYGYyZnNfd3JpdGVfYmVnaW5gLCBgZjJmc19tZXJnZV9wYWdlX2Jpb2AsIGFuZCBgZjJmc19zdWJtaXRfcGFnZV93cml0ZWAgYXMgdGhlIG1haW4gdG91Y2hwb2ludHMuIExvb2tpbmcgYXQgYF9fYmlvX2FsbG9jYCBhbmQgYGYyZnNfYmlvX2Ryb3BiZWhpbmRfbWVyZ2VhYmxlYCwgdGhleSBhcmUgc3RhdGljLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZW0gZGlyZWN0bHkgYmVpbmcgZXhwb3J0ZWQgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCB0byB3b3JyeSBhYm91dCBvdGhlciBpc3N1ZXMuIFRoZXJlZm9yZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHk6IGBmMmZzX3dyaXRlX2JlZ2luYCwgYGYyZnNfbWVyZ2VfcGFnZV9iaW9gLCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgLlxuXG5BbHJpZ2h0LCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSdyZSBjbGVhcjpcblxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgW1wiRjJGU19GU1wiXWBcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wiZjJmc193cml0ZV9iZWdpblwiLCBcImYyZnNfbWVyZ2VfcGFnZV9iaW9cIiwgXCJmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlXCJdYFxuKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYFxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyBrZXkgRjJGUyBJL08gcGF0aHMgKHdyaXRlX2JlZ2luLCBiaW8gbWVyZ2luZywgc3VibWlzc2lvbikgd2l0aCBkcm9wYmVoaW5kIHdyaXRlb3V0LCBwb3RlbnRpYWxseSBleHBvc2luZyByYWNlIGNvbmRpdGlvbnMsIGJpbyBzdWJtaXNzaW9uIGlzc3VlcywgbWVtb3J5IGxlYWtzLCBvciBCSU8gY29tcGxldGlvbiBpc3N1ZXMgaW4gYSBmaWxlc3lzdGVtIHRoYXQgaXMgYWN0aXZlbHkgZnV6emVkLlxuXG5Ob3csIGxldCdzIGZvcm11bGF0ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzMsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjA3LjU3NTQ2NTg4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODE4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGMkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZjJmc19tZXJnZV9wYWdlX2Jpb1wiLFxuICAgIFwiZjJmc19zdWJtaXRfcGFnZV93cml0ZVwiLFxuICAgIFwiZjJmc193cml0ZV9iZWdpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGMkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZjJmc19tZXJnZV9wYWdlX2Jpb1wiLFxuICAgIFwiZjJmc19zdWJtaXRfcGFnZV93cml0ZVwiLFxuICAgIFwiZjJmc193cml0ZV9iZWdpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRk9QX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFIGluIEYyRlMsIGFsbG93aW5nIGRyb3BiZWhpbmQgZm9saW9zIHRvIGJlIHRhZ2dlZCBhbmQgY29tcGxldGVkIGluIHRhc2sgY29udGV4dC4gSXQgdXBkYXRlcyBmMmZzX3dyaXRlX2JlZ2luIHRvIHNldCBGR1BfRE9OVENBQ0hFIGFuZCBtb2RpZmllcyBmMmZzX21lcmdlX3BhZ2VfYmlvIGFuZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlIHRvIGF2b2lkIG1lcmdpbmcgZHJvcGJlaGluZCBmb2xpb3Mgd2l0aCByZWd1bGFyIGZvbGlvcy4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gd3JpdGUgYW5kIEkvTyBzdWJtaXNzaW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTk6Mzg6MDcuNjUyMjkyMTYzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU0MjgxMTE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjA3LjY1Mjc0ODE2M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0NTQyMzMxMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIElPQ0JfRE9OVENBQ0hFIChSV0ZfRE9OVENBQ0hFIC8gZHJvcC1iZWhpbmQgY2FjaGluZykgaW4gRjJGUyBidWZmZXJlZCB3cml0ZXMgYnkgc2V0dGluZyBGR1BfRE9OVENBQ0hFIGluIGYyZnNfd3JpdGVfYmVnaW4sIEJJT19DT01QTEVURV9JTl9UQVNLIGluIF9fYmlvX2FsbG9jLCBjaGVja2luZyBiaW8gbWVyZ2VhYmlsaXR5IGJhc2VkIG9uIHRoZSBmb2xpbyBkcm9wYmVoaW5kIGZsYWcsIGFuZCBkZWNsYXJpbmcgRk9QX0RPTlRDQUNIRSBpbiBmMmZzX2ZpbGVfb3BlcmF0aW9ucy5cXG5cXG5ObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIGNvbmN1cnJlbmN5LCBvciBiaW8gbWFuYWdlbWVudCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4OTZlN2IyM2U4NTgwZjBkYzAxY2U1ZjJmOTZlMWZkNDc2NjBhMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE5OjM3OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRhLmMgYi9mcy9mMmZzL2RhdGEuY1xuaW5kZXggMjFmMzk2ZWJlMjJjYS4uNmU4MTZjOTM0OWFiYyAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZGF0YS5jXG4rKysgYi9mcy9mMmZzL2RhdGEuY1xuQEAgLTUwMyw2ICs1MDMsOCBAQCBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fYWxsb2Moc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvLCBpbnQgbnBhZ2VzKVxuIFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChiZGV2LCBucGFnZXMsXG4gXHRcdFx0XHRmaW8tXHUwMDNlb3AgfCBmaW8tXHUwMDNlb3BfZmxhZ3MgfCBmMmZzX2lvX2ZsYWdzKGZpbyksXG4gXHRcdFx0XHRHRlBfTk9JTywgXHUwMDI2ZjJmc19iaW9zZXQpO1xuK1x0aWYgKCFpc19yZWFkX2lvKGZpby1cdTAwM2VvcCkgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmaW8tXHUwMDNlZm9saW8pKVxuK1x0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBzZWN0b3I7XG4gXHRpZiAoaXNfcmVhZF9pbyhmaW8tXHUwMDNlb3ApKSB7XG4gXHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBmMmZzX3JlYWRfZW5kX2lvO1xuQEAgLTc5Myw2ICs3OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFnZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgYmlvICpiaW8sXG4gXHRyZXR1cm4gYmlvLVx1MDAzZWJpX2JkZXYgPT0gZjJmc190YXJnZXRfZGV2aWNlKHNiaSwgY3VyX2Jsa2FkZHIsIE5VTEwpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdFx0XHRcdCAgc3RydWN0IGYyZnNfaW9faW5mbyAqZmlvKVxuK3tcbitcdHJldHVybiBiaW9fZmxhZ2dlZChiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKSA9PVxuK1x0XHRmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZmlvLVx1MDAzZWZvbGlvKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgaW9fdHlwZV9pc19tZXJnZWFibGUoc3RydWN0IGYyZnNfYmlvX2luZm8gKmlvLFxuIFx0XHRcdFx0XHRcdHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiB7XG5AQCAtOTg1LDggKzk5NCwxMCBAQCBpbnQgZjJmc19tZXJnZV9wYWdlX2JpbyhzdHJ1Y3QgZjJmc19pb19pbmZvICpmaW8pXG4gXG4gXHR0cmFjZV9mMmZzX3N1Ym1pdF9mb2xpb19iaW8oZGF0YV9mb2xpbywgZmlvKTtcbiBcbi1cdGlmIChiaW8gXHUwMDI2XHUwMDI2ICFwYWdlX2lzX21lcmdlYWJsZShmaW8tXHUwMDNlc2JpLCBiaW8sICpmaW8tXHUwMDNlbGFzdF9ibG9jayxcbi1cdFx0XHRcdFx0XHRmaW8tXHUwMDNlbmV3X2Jsa2FkZHIpKVxuK1x0aWYgKGJpbyBcdTAwMjZcdTAwMjZcbitcdCAgICAoIXBhZ2VfaXNfbWVyZ2VhYmxlKGZpby1cdTAwM2VzYmksIGJpbywgKmZpby1cdTAwM2VsYXN0X2Jsb2NrLFxuK1x0XHRcdFx0ZmlvLVx1MDAzZW5ld19ibGthZGRyKSB8fFxuK1x0ICAgICAhZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGUoYmlvLCBmaW8pKSlcbiBcdFx0ZjJmc19zdWJtaXRfbWVyZ2VkX2lwdV93cml0ZShmaW8tXHUwMDNlc2JpLCBcdTAwMjZiaW8sIE5VTEwpO1xuIGFsbG9jX25ldzpcbiBcdGlmICghYmlvKSB7XG5AQCAtMTA4Niw3ICsxMDk3LDggQEAgdm9pZCBmMmZzX3N1Ym1pdF9wYWdlX3dyaXRlKHN0cnVjdCBmMmZzX2lvX2luZm8gKmZpbylcbiBcdCAgICAoIWlvX2lzX21lcmdlYWJsZShzYmksIGlvLVx1MDAzZWJpbywgaW8sIGZpbywgaW8tXHUwMDNlbGFzdF9ibG9ja19pbl9iaW8sXG4gXHRcdFx0ICAgICAgZmlvLVx1MDAzZW5ld19ibGthZGRyKSB8fFxuIFx0ICAgICAhZjJmc19jcnlwdF9tZXJnZWFibGVfYmlvKGlvLVx1MDAzZWJpbywgZmlvX2lub2RlKGZpbyksXG4tXHRcdFx0XHRiaW9fZm9saW8tXHUwMDNlaW5kZXgsIGZpbykpKVxuK1x0XHRcdFx0YmlvX2ZvbGlvLVx1MDAzZWluZGV4LCBmaW8pIHx8XG4rXHQgICAgICFmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZShpby1cdTAwM2ViaW8sIGZpbykpKVxuIFx0XHRfX3N1Ym1pdF9tZXJnZWRfYmlvKGlvKTtcbiBhbGxvY19uZXc6XG4gXHRpZiAoaW8tXHUwMDNlYmlvID09IE5VTEwpIHtcbkBAIC0zODcyLDExICszODg0LDE1IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19JX1NCKGlub2RlKTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRmZ2ZfdCBmZ3BfZmxhZ3MgPSBGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVDtcbiBcdHBnb2ZmX3QgaW5kZXggPSBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRib29sIG5lZWRfYmFsYW5jZSA9IGZhbHNlO1xuIFx0YmxvY2tfdCBibGthZGRyID0gTlVMTF9BRERSO1xuIFx0aW50IGVyciA9IDA7XG4gXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG4rXHRcdGZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFO1xuK1xuIFx0dHJhY2VfZjJmc193cml0ZV9iZWdpbihpbm9kZSwgcG9zLCBsZW4pO1xuIFxuIFx0aWYgKCFmMmZzX2lzX2NoZWNrcG9pbnRfcmVhZHkoc2JpKSkge1xuQEAgLTM5MjIsOSArMzkzOCw4IEBAIHN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHQgKiBEbyBub3QgdXNlIEZHUF9TVEFCTEUgdG8gYXZvaWQgZGVhZGxvY2suXG4gXHQgKiBXaWxsIHdhaXQgdGhhdCBiZWxvdyB3aXRoIG91ciBJTyBjb250cm9sLlxuIFx0ICovXG4tXHRmb2xpbyA9IGYyZnNfZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXgsXG4tXHRcdFx0XHRGR1BfTE9DSyB8IEZHUF9XUklURSB8IEZHUF9DUkVBVCxcbi1cdFx0XHRcdG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpO1xuK1x0Zm9saW8gPSBmMmZzX2ZpbGVtYXBfZ2V0X2ZvbGlvKG1hcHBpbmcsIGluZGV4LCBmZ3BfZmxhZ3MsXG4rXHRcdFx0XHQgICAgICAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGZvbGlvKTtcbiBcdFx0Z290byBmYWlsO1xuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcbmluZGV4IGVkYzM1MjU2OWU4N2UuLjU3MDI0NGFlNGZjOGEgMTAwNjQ0XG4tLS0gYS9mcy9mMmZzL2ZpbGUuY1xuKysrIGIvZnMvZjJmcy9maWxlLmNcbkBAIC01OTA5LDYgKzU5MDksNiBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGYyZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuIFx0LnNwbGljZV9yZWFkXHQ9IGYyZnNfZmlsZV9zcGxpY2VfcmVhZCxcbiBcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiBcdC5mYWR2aXNlXHQ9IGYyZnNfZmlsZV9mYWR2aXNlLFxuLVx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyxcbitcdC5mb3BfZmxhZ3NcdD0gRk9QX0JVRkZFUl9SQVNZTkMgfCBGT1BfRE9OVENBQ0hFLFxuIFx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4gfTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjA3LjY1Mjc0OTAzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjc2NDYzMzA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQWRkaW5nIFJXRl9ET05UQ0FDSEUgU3VwcG9ydCB0byBGMkZTKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGludHJvZHVjaW5nIHN1cHBvcnQgZm9yIGBSV0ZfRE9OVENBQ0hFYCBhbmQgYElPQ0JfRE9OVENBQ0hFYCBmbGFncyB3aXRoaW4gdGhlIEYyRlMgZmlsZXN5c3RlbSwgZWZmZWN0aXZlbHkgZW5hYmxpbmcgYSBcImRyb3AtYmVoaW5kXCIgYmVoYXZpb3IgZm9yIHdyaXRlcy4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggcGFnZSBjYWNoZSBtYW5hZ2VtZW50LCBhbmQgc3BlY2lmaWNhbGx5LCBjb250cm9sbGluZyB3aGV0aGVyIHBhZ2VzIHdyaXR0ZW4gdG8gZGlzayBhcmUgcmV0YWluZWQgaW4gdGhlIHBhZ2UgY2FjaGUgYWZ0ZXJ3YXJkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlOlxuXG4qICAgSW4gYGZzL2YyZnMvZGF0YS5jYCwgdGhlIGNvcmUgY2hhbmdlcyBhcmUgaW4gaG93IGJpb3MgYXJlIGhhbmRsZWQgd2hlbiBgSU9DQl9ET05UQ0FDSEVgIGlzIHJlcXVlc3RlZC4gSWYgdGhlIGZsYWcgaXMgc2V0LCB0aGVuIHdoZW4gdGhlIGZvbGlvIGlzIGFsbG9jYXRlZCwgaXQncyB0YWdnZWQgd2l0aCBgRkdQX0RPTlRDQUNIRWAsIHdoaWNoIEkga25vdywgc2V0cyB0aGUgZHJvcGJlaGluZCBmbGFnLlxuKiAgIFRoZSBgX19iaW9fYWxsb2NgIGZ1bmN0aW9uIGlzIG1vZGlmaWVkIHRvIHNldCBgQklPX0NPTVBMRVRFX0lOX1RBU0tgIG9uIHRoZSBiaW8gaWYgdGhlIGZvbGlvIGhhcyBkcm9wYmVoaW5kLlxuKiAgIFRoZW4gd2UgaGF2ZSBgZjJmc19iaW9fZHJvcGJlaGluZF9tZXJnZWFibGVgLCB3aGljaCBzZWVtcyB0byBiZSBhIGhlbHBlciBmdW5jdGlvbiB1c2VkIGluIGBmMmZzX21lcmdlX3BhZ2VfYmlvYCBhbmQgYGYyZnNfc3VibWl0X3BhZ2Vfd3JpdGVgLiBUaGlzIHByZXZlbnRzIHRoZSBtZXJnaW5nIG9mIGJpb3MgdGhhdCBtaXggcGFnZXMgd2l0aCBhbmQgd2l0aG91dCB0aGUgZHJvcGJlaGluZCBmbGFnLiBUaGlzIGlzIGNydWNpYWw7IHdlICptdXN0KiBtYWludGFpbiB0aGUgZHJvcC1iZWhpbmQgc2VtYW50aWNzLCBlbnN1cmluZyB0aGF0IHdlIGRvbid0IGFjY2lkZW50YWxseSBjYWNoZSBwYWdlcyB3ZSdyZSBzdXBwb3NlZCB0byBkcm9wLlxuKiAgIFRoZSBwYXRjaCB1cGRhdGVzIGBmMmZzX3dyaXRlX2JlZ2luYCB0byBwYXNzIGBGR1BfRE9OVENBQ0hFYCB0byB0aGUgYGYyZnNfZmlsZW1hcF9nZXRfZm9saW9gIGNhbGwuXG5cbkFuZCBmaW5hbGx5LCBgZnMvZjJmcy9maWxlLmNgIGFkZHMgYEZPUF9ET05UQ0FDSEVgIHRvIHRoZSBgZjJmc19maWxlX29wZXJhdGlvbnMuZm9wX2ZsYWdzYC5cblxuVGhlIHByaW1hcnkgb2JqZWN0aXZlIGlzIG5vdyBjbGVhcjogV2hlbiBgSU9DQl9ET05UQ0FDSEVgIGlzIHVzZWQsIHRoZSBzeXN0ZW0gZW5zdXJlcyB0aGF0IHRoZSB3cml0dGVuIHBhZ2VzIGFyZSBub3Qga2VwdCBpbiB0aGUgcGFnZSBjYWNoZSBhZnRlciB0aGUgd3JpdGUgY29tcGxldGVzLiBUaGUgYEJJT19DT01QTEVURV9JTl9UQVNLYCBmbGFnIGFuZCB0aGUgc3Vic2VxdWVudCBtZXJnaW5nIGxvZ2ljIGFyZSB0aGUga2V5IHRvIHRoaXMgYmVoYXZpb3IuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpc2tzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aXRoIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgY2FjaGUgb3BlcmF0aW9ucyBhbmQgYmxvY2sgSS9PLCBzbyBsZXQncyBydWxlIG91dCBhbnkgcmlzay4gSXQgZG9lc24ndCBhcHBlYXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciB3cml0ZXMgdG8gdXNlcnNwYWNlLCBvciBjaGFuZ2VzIGFueSBtZW1vcnkgY29waWVzLCBib3VuZHMgY2hlY2tzLCBldGMuIFNvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzbid0IGFuIGlzc3VlLlxuXG5UaGUgbW9yZSBsaWtlbHkgaXNzdWVzIHRoYXQgY291bGQgYmUgZm91bmQgZnJvbSB0aGlzIHBhdGNoIGFyZTpcblxuKiAgIFBhZ2UgY2FjaGUgcmFjZSBjb25kaXRpb25zOiBUaGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgcGFnZSBjYWNoZSBsaWZldGltZSwgcmVmY291bnRpbmcsIGRyb3AtYmVoaW5kLCBvciBkZWFkbG9ja3MgaW4gdGhlIHBhZ2UgY2FjaGUuIFRob3VnaCwgdGhlc2Ugd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxuKiAgIE1lcmdpbmcgbG9naWMgYnVnczogVGhlcmUgY291bGQgYmUgcHJvYmxlbXMgd2l0aCB0aGUgbWVyZ2luZyBsb2dpYywgb3Igd2l0aCB3cml0ZWJhY2suXG5cblNvIHRoZSBtYWluIHRoaW5nIHRvIHdhdGNoIG91dCBmb3IgaXMgY29ycmVjdG5lc3MgaW4gaG93IHdlIG1hbmFnZSB0aGUgZHJvcC1iZWhpbmQgc3RhdGUuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHRob3JvdWdobHkgdGVzdCBzY2VuYXJpb3Mgd2hlcmUgZHJvcC1iZWhpbmQgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGNvbmN1cnJlbnQgd3JpdGVzLCByZWFkcywgYW5kIGV2aWN0aW9ucyB0byBlbnN1cmUgd2UgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbi4gQW5kIG9mIGNvdXJzZSwgbWFraW5nIHN1cmUgd2UgaGF2ZW4ndCBicm9rZW4gZXhpc3RpbmcgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxOTozODoyNC40MTczODU4MzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ0MzYyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkdQX0RPTlRDQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mMmZzL2RhdGEuYz0zODc5PXN0YXRpYyBpbnQgZjJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9mMmZzL2RhdGEuYy0zODkzLVxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxcbmZzL2YyZnMvZGF0YS5jOjM4OTQ6XFx0XFx0ZmdwX2ZsYWdzIHw9IEZHUF9ET05UQ0FDSEU7XFxuZnMvZjJmcy9kYXRhLmMtMzg5NS1cXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9Nzk5PXN0cnVjdCBmb2xpbyAqaW9tYXBfZ2V0X2ZvbGlvKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04MDUtXFx0aWYgKGl0ZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRE9OVENBQ0hFKVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODA2OlxcdFxcdGZncCB8PSBGR1BfRE9OVENBQ0hFO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODA3LVxcdGZncCB8PSBmZ2Zfc2V0X29yZGVyKGxlbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD02Nzk9cGdvZmZfdCBwYWdlX2NhY2hlX3ByZXZfbWlzcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTcwMi0gKiAqICVGR1BfU1RBQkxFIC0gV2FpdCBmb3IgdGhlIGZvbGlvIHRvIGJlIHN0YWJsZSAoZmluaXNoZWQgd3JpdGViYWNrKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjcwMzogKiAqICVGR1BfRE9OVENBQ0hFIC0gVW5jYWNoZWQgYnVmZmVyZWQgSU9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC03MDQtICogKiAlRkdQX1dSSVRFQkVHSU4gLSBUaGUgZmxhZ3MgdG8gdXNlIGluIGEgZmlsZXN5c3RlbSB3cml0ZV9iZWdpbigpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD03MDc9dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGZnZl90O1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNzE2LSNkZWZpbmUgRkdQX1NUQUJMRVxcdFxcdCgoX19mb3JjZSBmZ2ZfdCkweDAwMDAwMDgwKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjcxNzojZGVmaW5lIEZHUF9ET05UQ0FDSEVcXHRcXHQoKF9fZm9yY2UgZmdmX3QpMHgwMDAwMDEwMClcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC03MTgtI2RlZmluZSBGR0ZfR0VUX09SREVSKGZnZilcXHQoKChfX2ZvcmNlIHVuc2lnbmVkKWZnZikgXFx1MDAzZVxcdTAwM2UgMjYpXFx0LyogdG9wIDYgYml0cyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9Nzc3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICp3cml0ZV9iZWdpbl9nZXRfZm9saW8oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtNzg0LSAgICAgICAgaWYgKGlvY2IgXFx1MDAyNlxcdTAwMjYgaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDo3ODU6ICAgICAgICAgICAgICAgIGZncF9mbGFncyB8PSBGR1BfRE9OVENBQ0hFO1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTc4Ni1cXG4tLVxcbm1tL2ZpbGVtYXAuYz0xOTQ3PXN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTIwMjQtXFx0XFx0XFx0XFx0X19mb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jOjIwMjU6XFx0XFx0XFx0aWYgKGZncF9mbGFncyBcXHUwMDI2IEZHUF9ET05UQ0FDSEUpXFxubW0vZmlsZW1hcC5jLTIwMjYtXFx0XFx0XFx0XFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XFxuLS1cXG5tbS9maWxlbWFwLmMtMjA2MC1cXHQvKiBub3QgYW4gdW5jYWNoZWQgbG9va3VwLCBjbGVhciB1bmNhY2hlZCBpZiBzZXQgKi9cXG5tbS9maWxlbWFwLmM6MjA2MTpcXHRpZiAoIShmZ3BfZmxhZ3MgXFx1MDAyNiBGR1BfRE9OVENBQ0hFKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKSB7XFxubW0vZmlsZW1hcC5jLTIwNjItXFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjI2LjAwMTgzMDU2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTkzMjE4OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEYyRlMgQnVmZmVyZWQgV3JpdGUgUGF0aCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoIGZvciB0aGUgRjJGUyBidWZmZXJlZCB3cml0ZSBwYXRoLCBhbmQgaXQgbG9va3MgcHJldHR5IGNsZWFuLiBUaGUgY29yZSBvZiBpdCBib2lscyBkb3duIHRvIGVuYWJsaW5nIGBGT1BfRE9OVENBQ0hFYCBhbmQgYElPQ0JfRE9OVENBQ0hFYCBzdXBwb3J0LiBMZXQgbWUgYnJlYWsgaXQgZG93biBpbiBteSBoZWFkOlxuXG5GaXJzdCwgaW4gYGYyZnNfd3JpdGVfYmVnaW5gLCBpdOKAmXMgY29ycmVjdGx5IHNldHRpbmcgdGhlIGBGR1BfRE9OVENBQ0hFYCBmbGFnIGlmIHRoZSBgSU9DQl9ET05UQ0FDSEVgIGZsYWcgaXMgcHJlc2VudC4gVGhhdCdzIGV4YWN0bHkgdGhlIHJpZ2h0IG1lY2hhbmlzbSB0byBzaWduYWwgdGhlIGNhY2hpbmcgYmVoYXZpb3IuIFRoZW4sIGZvciBhbGxvY2F0aW9uLCBpbiBgX19iaW9fYWxsb2NgLCBzZXR0aW5nIGBCSU9fQ09NUExFVEVfSU5fVEFTS2Agb24gd3JpdGUgYmlvcyB3aGVuIHRoZSBmb2xpbyBpcyBtYXJrZWQgYXMgYGRyb3BiZWhpbmRgIHNlZW1zIHNlbnNpYmxlLiBJdOKAmXMgY2xlYXJseSBhaW1pbmcgZm9yIGEgbW9yZSBpbW1lZGlhdGUgY29tcGxldGlvbiBvbiB3cml0ZXMgdGhhdCBhcmVuJ3QgY2FjaGVkLlxuXG5UaGUgYmlvIG1lcmdpbmcgZnVuY3Rpb25zIGhhdmUgYSB2aXRhbCBjaGVjayB3aXRoIGBmMmZzX2Jpb19kcm9wYmVoaW5kX21lcmdlYWJsZWAsIHdoaWNoIGlzIG5lY2Vzc2FyeS4gSXTigJlzIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgZm9saW9zIG1hcmtlZCBmb3IgZHJvcC1iZWhpbmQgd2l0aCB0aGUgb25lcyB0aGF0IGFyZW4ndC4gVGhpcyBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyB0aGUgaW50ZW5kZWQgXCJkb24ndCBjYWNoZVwiIGJlaGF2aW9yLiBGaW5hbGx5LCBhZHZlcnRpc2luZyBgRk9QX0RPTlRDQUNIRWAgaW4gYGYyZnNfZmlsZV9vcGVyYXRpb25zYCBpcyB0aGUgZmluYWwgc3RlcCwgbWFraW5nIHRoZSBmdW5jdGlvbmFsaXR5IGNsZWFyIHRvIHRoZSB1c2Vyc3BhY2UuXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCwgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlcmUncyBubyB3YXkgdGhhdCB0aGlzIGludHJvZHVjZXMgYW55IG5hc3R5IHN1cnByaXNlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmVuJ3QgYW55IHNuZWFreSBhY2Nlc3NlcywgYW5kIG5vIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRvIHVzZXIgc3BhY2Ugb3IgY29uZGl0aW9uYWwgbG9naWMuXG5cbkkgdGhpbmsgYW55IHBvdGVudGlhbCBpc3N1ZXMg4oCTIGFuZCB0aGVzZSBhcmUgYWx3YXlzIHBvc3NpYmxlIOKAkyB3aWxsIGJlIGNhdWdodCBieSB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGV54oCZcmUgdGhlIHJpZ2h0IHRvb2xzIHRvIGZpbmQgbGlmZWN5Y2xlIHByb2JsZW1zIG9yIGJpby1yZWxhdGVkIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuR2l2ZW4gdGhhdCwgSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByaXNrcyByZWxhdGVkIHRvIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIFNvLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgaXMgZmFsc2UuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGdpdmUgdGhpcyByZWFzb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTIsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE5OjM4OjMyLjE5NTA1NzI1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBJT0NCX0RPTlRDQUNIRSAoUldGX0RPTlRDQUNIRSAvIGRyb3AtYmVoaW5kIGNhY2hpbmcpIGluIEYyRlMgYnVmZmVyZWQgd3JpdGVzIGJ5IHNldHRpbmcgRkdQX0RPTlRDQUNIRSBpbiBmMmZzX3dyaXRlX2JlZ2luLCBCSU9fQ09NUExFVEVfSU5fVEFTSyBpbiBfX2Jpb19hbGxvYywgY2hlY2tpbmcgYmlvIG1lcmdlYWJpbGl0eSBiYXNlZCBvbiB0aGUgZm9saW8gZHJvcGJlaGluZCBmbGFnLCBhbmQgZGVjbGFyaW5nIEZPUF9ET05UQ0FDSEUgaW4gZjJmc19maWxlX29wZXJhdGlvbnMuXFxuXFxuTm8gbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBidWZmZXJzIGFyZSBhbGxvY2F0ZWQsIG5vIHN0cnVjdCBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBpbiBjb25kaXRpb25hbCBicmFuY2hlcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZm9saW8gbGlmZWN5Y2xlLCBjb25jdXJyZW5jeSwgb3IgYmlvIG1hbmFnZW1lbnQgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycyByYXRoZXIgdGhhbiBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIElPQ0JfRE9OVENBQ0hFIChSV0ZfRE9OVENBQ0hFIC8gZHJvcC1iZWhpbmQgY2FjaGluZykgaW4gRjJGUyBidWZmZXJlZCB3cml0ZXMgYnkgc2V0dGluZyBGR1BfRE9OVENBQ0hFIGluIGYyZnNfd3JpdGVfYmVnaW4sIEJJT19DT01QTEVURV9JTl9UQVNLIGluIF9fYmlvX2FsbG9jLCBjaGVja2luZyBiaW8gbWVyZ2VhYmlsaXR5IGJhc2VkIG9uIHRoZSBmb2xpbyBkcm9wYmVoaW5kIGZsYWcsIGFuZCBkZWNsYXJpbmcgRk9QX0RPTlRDQUNIRSBpbiBmMmZzX2ZpbGVfb3BlcmF0aW9ucy5cXG5cXG5ObyBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgbm8gc3RydWN0IHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIGluIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBmb2xpbyBsaWZlY3ljbGUsIGNvbmN1cnJlbmN5LCBvciBiaW8gbWFuYWdlbWVudCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[1] Phase: Succeeded StartedAt: 2026-09-04 19:38:44 +0000 UTC FinishedAt: 2026-09-04 19:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 19:38:44 +0000 UTC FinishedAt: 2026-09-04 19:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2] Phase: Succeeded StartedAt: 2026-09-04 19:38:44 +0000 UTC FinishedAt: 2026-09-04 23:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:38:44 +0000 UTC FinishedAt: 2026-09-04 23:19:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:38:44 +0000 UTC FinishedAt: 2026-09-04 19:39:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:38:44 +0000 UTC FinishedAt: 2026-09-04 19:38:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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-workflowz5v54/series-workflowz5v54-convert-artifact-3774286707/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:39:05 +0000 UTC FinishedAt: 2026-09-04 19:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:39:05 +0000 UTC FinishedAt: 2026-09-04 19:55:14 +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:*ebc02fe0-caf9-4c6a-92fd-bc0dd29a889d,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-workflowz5v54/series-workflowz5v54-convert-artifact-3774286707/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": "6d083a6e-5567-43ad-b8dd-9140ce0b8910", "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-workflowz5v54/series-workflowz5v54-build-action-395406881/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:39:05 +0000 UTC FinishedAt: 2026-09-04 19:55:04 +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:*ebc02fe0-caf9-4c6a-92fd-bc0dd29a889d,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-workflowz5v54/series-workflowz5v54-convert-artifact-3774286707/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": "6d083a6e-5567-43ad-b8dd-9140ce0b8910", "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-workflowz5v54/series-workflowz5v54-build-action-395406881/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:55:14 +0000 UTC FinishedAt: 2026-09-04 19:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:55:14 +0000 UTC FinishedAt: 2026-09-04 19:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:55:14 +0000 UTC FinishedAt: 2026-09-04 19:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:55:14 +0000 UTC FinishedAt: 2026-09-04 19:55:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-workflowz5v54/series-workflowz5v54-convert-artifact-632379498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:55:24 +0000 UTC FinishedAt: 2026-09-04 19:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:55:24 +0000 UTC FinishedAt: 2026-09-04 19:56:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6d083a6e-5567-43ad-b8dd-9140ce0b8910,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-workflowz5v54/series-workflowz5v54-build-action-395406881/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-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:57:06 +0000 UTC FinishedAt: 2026-09-04 19:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:57:06 +0000 UTC FinishedAt: 2026-09-04 19:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:57:06 +0000 UTC FinishedAt: 2026-09-04 20:13:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:57:06 +0000 UTC FinishedAt: 2026-09-04 20:13:39 +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:*ebc02fe0-caf9-4c6a-92fd-bc0dd29a889d,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-workflowz5v54/series-workflowz5v54-convert-artifact-632379498/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": "e5903709-6ea2-4b1e-9dfc-f073e36367f7", "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-workflowz5v54/series-workflowz5v54-build-action-2553906318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 19:57:06 +0000 UTC FinishedAt: 2026-09-04 20:13:26 +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:*ebc02fe0-caf9-4c6a-92fd-bc0dd29a889d,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-workflowz5v54/series-workflowz5v54-convert-artifact-632379498/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": "e5903709-6ea2-4b1e-9dfc-f073e36367f7", "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-workflowz5v54/series-workflowz5v54-build-action-2553906318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:13:39 +0000 UTC FinishedAt: 2026-09-04 20:13:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:13:39 +0000 UTC FinishedAt: 2026-09-04 20:13:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:13:39 +0000 UTC FinishedAt: 2026-09-04 20:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:13:39 +0000 UTC FinishedAt: 2026-09-04 20:15:20 +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:*e5903709-6ea2-4b1e-9dfc-f073e36367f7,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-workflowz5v54/series-workflowz5v54-build-action-2553906318/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-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:16:54 +0000 UTC FinishedAt: 2026-09-04 23:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:16:54 +0000 UTC FinishedAt: 2026-09-04 20:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:16:54 +0000 UTC FinishedAt: 2026-09-04 20:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:16:55 +0000 UTC FinishedAt: 2026-09-04 23:19:37 +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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"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:*6d083a6e-5567-43ad-b8dd-9140ce0b8910,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5903709-6ea2-4b1e-9dfc-f073e36367f7,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-workflowz5v54/series-workflowz5v54-build-action-395406881/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-workflowz5v54/series-workflowz5v54-build-action-2553906318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:16:56 +0000 UTC FinishedAt: 2026-09-04 20:17:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:16:56 +0000 UTC FinishedAt: 2026-09-04 20:17:02 +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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"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-workflowz5v54/series-workflowz5v54-convert-artifact-151200767/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:16:56 +0000 UTC FinishedAt: 2026-09-04 20:16:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:17:21 +0000 UTC FinishedAt: 2026-09-04 23:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz5v54[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"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":["f2fs_merge_page_bio","f2fs_submit_page_write","f2fs_write_begin"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e3fc12b08aadde9cec7b3799ac0e0c9a1aa245c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["F2FS_FS"],"series_id":"cbb9ded8-1388-4a7b-bfa7-44082b04025b","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-04 20:17:21 +0000 UTC FinishedAt: 2026-09-04 23:19:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6d083a6e-5567-43ad-b8dd-9140ce0b8910,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5903709-6ea2-4b1e-9dfc-f073e36367f7,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-workflowz5v54/series-workflowz5v54-build-action-395406881/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-workflowz5v54/series-workflowz5v54-build-action-2553906318/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-workflowz5v54/series-workflowz5v54-convert-artifact-151200767/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,}