Name: series-workflowvlg7m Phase: Succeeded StartedAt: 2026-07-28 12:54:09 +0000 UTC FinishedAt: 2026-07-28 18:27:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[0] Phase: Succeeded StartedAt: 2026-07-28 12:54:09 +0000 UTC FinishedAt: 2026-07-28 13:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 12:54:09 +0000 UTC FinishedAt: 2026-07-28 13:25:31 +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": "c9b47e6b23114e939b17f818471c7a46e59006e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM", "TMPFS" ], "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": "c9b47e6b23114e939b17f818471c7a46e59006e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM", "TMPFS" ], "series_id": "5bb58f7b-bcc1-4f41-bf66-4d26b45540b5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_fallocate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzRhMTc1MzZkNzc1MmY1ODQ1M2E4ZGUwYmYzOGJmMzY1MmUyMjVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTM6MjQ6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li5kNjI2NTYxZDQ2ZGI3ZSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0zNjAxLDcgJiM0MzszNjAxLDggQEAgc3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc2htZW1fZmFsbG9jIHNobWVtX2ZhbGxvYztcbi1cdHBnb2ZmX3Qgc3RhcnQsIGluZGV4LCBlbmQsIHVuZG9fZmFsbG9jZW5kO1xuJiM0MztcdHBnb2ZmX3Qgc3RhcnQsIGluZGV4LCBlbmQsIG5yX3BhZ2VzLCB1bmRvX2ZhbGxvY2VuZDtcbiYjNDM7XHRsb2ZmX3QgZW5kX3BvcztcbiBcdGludCBlcnJvcjtcbiBcbiBcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkpXG5AQCAtMzY0OSwyMyAmIzQzOzM2NTAsMjkgQEAgc3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbiBcdH1cbiBcbiBcdC8qIFdlIG5lZWQgdG8gY2hlY2sgcmxpbWl0IGV2ZW4gd2hlbiBGQUxMT0NfRkxfS0VFUF9TSVpFICovXG4tXHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIG9mZnNldCAmIzQzOyBsZW4pO1xuJiM0MztcdGVuZF9wb3MgPSBvZmZzZXQgJiM0MzsgbGVuO1xuJiM0MztcdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgZW5kX3Bvcyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKChpbmZvLVx1MDAzZXNlYWxzIFx1MDAyNiBGX1NFQUxfR1JPVykgXHUwMDI2XHUwMDI2IG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuJiM0MztcdGlmICgoaW5mby1cdTAwM2VzZWFscyBcdTAwMjYgRl9TRUFMX0dST1cpIFx1MDAyNlx1MDAyNiBlbmRfcG9zIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbiBcdFx0ZXJyb3IgPSAtRVBFUk07XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0c3RhcnQgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRlbmQgPSAob2Zmc2V0ICYjNDM7IGxlbiAmIzQzOyBQQUdFX1NJWkUgLSAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRlbmQgPSAoKHU2NCllbmRfcG9zICYjNDM7IFBBR0VfU0laRSAtIDEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XG4gXHQvKiBUcnkgdG8gYXZvaWQgYSBzd2Fwc3Rvcm0gaWYgbGVuIGlzIGltcG9zc2libGUgdG8gc2F0aXNmeSAqL1xuLVx0aWYgKHNiaW5mby1cdTAwM2VtYXhfYmxvY2tzIFx1MDAyNlx1MDAyNiBlbmQgLSBzdGFydCBcdTAwM2Ugc2JpbmZvLVx1MDAzZW1heF9ibG9ja3MpIHtcbiYjNDM7XHRpZiAoc2JpbmZvLVx1MDAzZW1heF9ibG9ja3MgXHUwMDI2XHUwMDI2IG5yX3BhZ2VzIFx1MDAzZSBzYmluZm8tXHUwMDNlbWF4X2Jsb2Nrcykge1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChucl9wYWdlcyBcdTAwM2UgTE9OR19NQVggfHxcbiYjNDM7XHQgICAgbnJfcGFnZXMgXHUwMDNlIHRvdGFscmFtX3BhZ2VzKCkgJiM0MzsgdG90YWxfc3dhcF9wYWdlcykge1xuIFx0XHRlcnJvciA9IC1FTk9TUEM7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuLVxuIFx0c2htZW1fZmFsbG9jLndhaXRxID0gTlVMTDtcbiBcdHNobWVtX2ZhbGxvYy5zdGFydCA9IHN0YXJ0O1xuIFx0c2htZW1fZmFsbG9jLm5leHQgID0gc3RhcnQ7XG5AQCAtMzY5OSw3ICYjNDM7MzcwNiw3IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRcdGVsc2UgaWYgKHNobWVtX2ZhbGxvYy5ucl91bnN3YXBwZWQgXHUwMDNlIHNobWVtX2ZhbGxvYy5ucl9mYWxsb2NlZClcbiBcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4gXHRcdGVsc2Vcbi1cdFx0XHRlcnJvciA9IHNobWVtX2dldF9mb2xpbyhpbm9kZSwgaW5kZXgsIG9mZnNldCAmIzQzOyBsZW4sXG4mIzQzO1x0XHRcdGVycm9yID0gc2htZW1fZ2V0X2ZvbGlvKGlub2RlLCBpbmRleCwgZW5kX3BvcyxcbiBcdFx0XHRcdFx0XHRcdTAwMjZmb2xpbywgU0dQX0ZBTExPQyk7XG4gXHRcdGlmIChlcnJvcikge1xuIFx0XHRcdGluZm8tXHUwMDNlZmFsbG9jZW5kID0gdW5kb19mYWxsb2NlbmQ7XG5AQCAtMzc0Myw4ICYjNDM7Mzc1MCw4IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuLVx0aWYgKCEobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXHUwMDI2XHUwMDI2IG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbi1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgJiM0MzsgbGVuKTtcbiYjNDM7XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjYgZW5kX3BvcyBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplKVxuJiM0MztcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBlbmRfcG9zKTtcbiB1bmRvbmU6XG4gXHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiBcdGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMzRhMTc1MzZkNzc1MmY1ODQ1M2E4ZGUwYmYzOGJmMzY1MmUyMjVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMTM6MjQ6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCBiNTFmODNjOTcwYmIzNy4uZDYyNjU2MWQ0NmRiN2UgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMzYwMSw3ICYjNDM7MzYwMSw4IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwogCXN0cnVjdCBzaG1lbV9mYWxsb2Mgc2htZW1fZmFsbG9jOwotCXBnb2ZmX3Qgc3RhcnQsIGluZGV4LCBlbmQsIHVuZG9fZmFsbG9jZW5kOwomIzQzOwlwZ29mZl90IHN0YXJ0LCBpbmRleCwgZW5kLCBucl9wYWdlcywgdW5kb19mYWxsb2NlbmQ7CiYjNDM7CWxvZmZfdCBlbmRfcG9zOwogCWludCBlcnJvcjsKIAogCWlmIChtb2RlICZhbXA7IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFKSkKQEAgLTM2NDksMjMgJiM0MzszNjUwLDI5IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJfQogCiAJLyogV2UgbmVlZCB0byBjaGVjayBybGltaXQgZXZlbiB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgKi8KLQllcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIG9mZnNldCAmIzQzOyBsZW4pOwomIzQzOwllbmRfcG9zID0gb2Zmc2V0ICYjNDM7IGxlbjsKJiM0MzsJZXJyb3IgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBlbmRfcG9zKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCi0JaWYgKChpbmZvLSZndDtzZWFscyAmYW1wOyBGX1NFQUxfR1JPVykgJmFtcDsmYW1wOyBvZmZzZXQgJiM0MzsgbGVuICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkgewomIzQzOwlpZiAoKGluZm8tJmd0O3NlYWxzICZhbXA7IEZfU0VBTF9HUk9XKSAmYW1wOyZhbXA7IGVuZF9wb3MgJmd0OyBpbm9kZS0mZ3Q7aV9zaXplKSB7CiAJCWVycm9yID0gLUVQRVJNOwogCQlnb3RvIG91dDsKIAl9CiAKIAlzdGFydCA9IG9mZnNldCAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwotCWVuZCA9IChvZmZzZXQgJiM0MzsgbGVuICYjNDM7IFBBR0VfU0laRSAtIDEpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CWVuZCA9ICgodTY0KWVuZF9wb3MgJiM0MzsgUEFHRV9TSVpFIC0gMSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJbnJfcGFnZXMgPSBlbmQgLSBzdGFydDsKIAkvKiBUcnkgdG8gYXZvaWQgYSBzd2Fwc3Rvcm0gaWYgbGVuIGlzIGltcG9zc2libGUgdG8gc2F0aXNmeSAqLwotCWlmIChzYmluZm8tJmd0O21heF9ibG9ja3MgJmFtcDsmYW1wOyBlbmQgLSBzdGFydCAmZ3Q7IHNiaW5mby0mZ3Q7bWF4X2Jsb2NrcykgewomIzQzOwlpZiAoc2JpbmZvLSZndDttYXhfYmxvY2tzICZhbXA7JmFtcDsgbnJfcGFnZXMgJmd0OyBzYmluZm8tJmd0O21heF9ibG9ja3MpIHsKJiM0MzsJCWVycm9yID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWlmIChucl9wYWdlcyAmZ3Q7IExPTkdfTUFYIHx8CiYjNDM7CSAgICBucl9wYWdlcyAmZ3Q7IHRvdGFscmFtX3BhZ2VzKCkgJiM0MzsgdG90YWxfc3dhcF9wYWdlcykgewogCQllcnJvciA9IC1FTk9TUEM7CiAJCWdvdG8gb3V0OwogCX0KLQogCXNobWVtX2ZhbGxvYy53YWl0cSA9IE5VTEw7CiAJc2htZW1fZmFsbG9jLnN0YXJ0ID0gc3RhcnQ7CiAJc2htZW1fZmFsbG9jLm5leHQgID0gc3RhcnQ7CkBAIC0zNjk5LDcgJiM0MzszNzA2LDcgQEAgc3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwKIAkJZWxzZSBpZiAoc2htZW1fZmFsbG9jLm5yX3Vuc3dhcHBlZCAmZ3Q7IHNobWVtX2ZhbGxvYy5ucl9mYWxsb2NlZCkKIAkJCWVycm9yID0gLUVOT01FTTsKIAkJZWxzZQotCQkJZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIGluZGV4LCBvZmZzZXQgJiM0MzsgbGVuLAomIzQzOwkJCWVycm9yID0gc2htZW1fZ2V0X2ZvbGlvKGlub2RlLCBpbmRleCwgZW5kX3BvcywKIAkJCQkJCSZhbXA7Zm9saW8sIFNHUF9GQUxMT0MpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWluZm8tJmd0O2ZhbGxvY2VuZCA9IHVuZG9fZmFsbG9jZW5kOwpAQCAtMzc0Myw4ICYjNDM7Mzc1MCw4IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAotCWlmICghKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX0tFRVBfU0laRSkgJmFtcDsmYW1wOyBvZmZzZXQgJiM0MzsgbGVuICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkKLQkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgJiM0MzsgbGVuKTsKJiM0MzsJaWYgKCEobW9kZSAmYW1wOyBGQUxMT0NfRkxfS0VFUF9TSVpFKSAmYW1wOyZhbXA7IGVuZF9wb3MgJmd0OyBpbm9kZS0mZ3Q7aV9zaXplKQomIzQzOwkJaV9zaXplX3dyaXRlKGlub2RlLCBlbmRfcG9zKTsKIHVuZG9uZToKIAlzcGluX2xvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKIAlpbm9kZS0mZ3Q7aV9wcml2YXRlID0gTlVMTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IHNobWVtX2ZhbGxvY2F0ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgc2htZW1fZmFsbG9jYXRlYCB3aXRoaW4gYG1tL3NobWVtLmNgLiAgTXkgZmlyc3Qgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCYjMzk7cyBtb2RpZnlpbmcgYSBjb3JlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIHNobWVtL3RtcGZzIHN1YnN5c3RlbSwgc28gdGhpcyB3YXJyYW50cyBjbG9zZSBhdHRlbnRpb24uICBUaGUgY2hhbmdlcyBmb2N1cyBvbiBob3cgYGVuZGAgYW5kIGBucl9wYWdlc2AgYXJlIGNvbXB1dGVkIGFuZCB2YWxpZGF0ZWQuIFRoZSBhZGRpdGlvbiBvZiB0aGlzIGNoZWNrIGlzIGludGVyZXN0aW5nOgoKYGBgYwoJaWYgKG5yX3BhZ2VzICZndDsgTE9OR19NQVggfHwKCSAgICBucl9wYWdlcyAmZ3Q7IHRvdGFscmFtX3BhZ2VzKCkgJiM0MzsgdG90YWxfc3dhcF9wYWdlcykgewoJCWVycm9yID0gLUVOT1NQQzsKCQlnb3RvIG91dDsKCX0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBob3cgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gc2htZW0sIHdoaWNoIG1lYW5zIHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkIHRob3JvdWdobHkuIFRoZSB0YXJnZXQgaXMgdGhlIGBzaG1lbV9mYWxsb2NhdGVgIGZ1bmN0aW9uIGl0c2VsZi4gTm93LCBhIGNyaXRpY2FsIGNvbnNpZGVyYXRpb24gZm9yIGZ1enppbmcgZWZmZWN0aXZlbmVzcyBpcyBzeW1ib2wgdmlzaWJpbGl0eS4gSSBuZWVkIHRvIGtub3cgaWYgYHNobWVtX2ZhbGxvY2F0ZWAgaXMgc3RhdGljIG9yIG5vdC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiwgaXQgaXMgaW5kZWVkIGRlZmluZWQgYXMgYHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIC4uLilgISBIbW0sIGJlaW5nIHN0YXRpYyBtaWdodCBtYWtlIGl0IGxlc3MgdGhhbiBpZGVhbCBhcyBhIGBGb2N1c1N5bWJvbGAgZm9yIGZ1enppbmcsIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSBhcHByb2FjaC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG1tL3NobWVtLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgZ29vZCBlbnRyeXBvaW50cyBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9mYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NDY9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vc2htZW0uYy0xMDAtLypcbm1tL3NobWVtLmM6MTAxOiAqIHNobWVtX2ZhbGxvY2F0ZSBjb21tdW5pY2F0ZXMgd2l0aCBzaG1lbV9mYXVsdCBvciBzaG1lbV93cml0ZW91dCB2aWFcbm1tL3NobWVtLmMtMTAyLSAqIGlub2RlLVx1MDAzZWlfcHJpdmF0ZSAod2l0aCBpX3J3c2VtIG1ha2luZyBzdXJlIHRoYXQgaXQgaGFzIG9ubHkgb25lIHVzZXIgYXRcbi0tXG5tbS9zaG1lbS5jPTE1OTE9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLFxuLS1cbm1tL3NobWVtLmMtMTY1Ni1cdCAqIGdvb2QgaWRlYSB0byBjb250aW51ZSBhbnl3YXksIG9uY2Ugd2UmIzM5O3JlIHB1c2hpbmcgaW50byBzd2FwLiAgU29cbm1tL3NobWVtLmM6MTY1NzpcdCAqIHJlYWN0aXZhdGUgdGhlIGZvbGlvLCBhbmQgbGV0IHNobWVtX2ZhbGxvY2F0ZSgpIHF1aXQgd2hlbiB0b28gbWFueS5cbm1tL3NobWVtLmMtMTY1OC1cdCAqL1xuLS1cbm1tL3NobWVtLmM9MjY0Mz1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYWxsb2Nfd2FpdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5tbS9zaG1lbS5jLTI2NjYtXHRcdC8qXG5tbS9zaG1lbS5jOjI2Njc6XHRcdCAqIHNobWVtX2ZhbGxvY193YWl0cSBwb2ludHMgaW50byB0aGUgc2htZW1fZmFsbG9jYXRlKClcbm1tL3NobWVtLmMtMjY2OC1cdFx0ICogc3RhY2sgb2YgdGhlIGhvbGUtcHVuY2hpbmcgdGFzazogc2htZW1fZmFsbG9jX3dhaXRxXG4tLVxubW0vc2htZW0uYz0zNTc3PXN0YXRpYyBsb2ZmX3Qgc2htZW1fZmlsZV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpXG4tLVxubW0vc2htZW0uYy0zNTk2LVxubW0vc2htZW0uYzozNTk3OnN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG5tbS9zaG1lbS5jLTM1OTgtXHRcdFx0XHRcdFx0XHQgbG9mZl90IGxlbilcbi0tXG5tbS9zaG1lbS5jPTUxNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htZW1fZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbm1tL3NobWVtLmMtNTE1NS1cdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbm1tL3NobWVtLmM6NTE1NjpcdC5mYWxsb2NhdGVcdD0gc2htZW1fZmFsbG9jYXRlLFxubW0vc2htZW0uYy01MTU3LVx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c1N5bWJvbCBDb25zaWRlcmF0aW9ucyBmb3Igc2htZW1fZmFsbG9jYXRlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGBzaG1lbV9mYWxsb2NhdGVgIGZ1bmN0aW9uLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGluaXRpYWxseSBtYWRlIG1lIHBhdXNlIGFib3V0IGl0cyBzdWl0YWJpbGl0eSBhcyBhIEZvY3VzU3ltYm9sLiBNeSBmaXJzdCB0aG91Z2h0IHdhcyB0aGF0IGEgc3RhdGljIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBhIGdyZWF0IGNob2ljZS4gSSBzdGFydGVkIGJ5IHRyYWNpbmcgdGhlIHVzYWdlLCBub3RpbmcgdGhhdCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgLmZhbGxvY2F0ZWAgd2l0aGluIHRoZSBgc2htZW1fZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3QuCgpNeSBuZXh0IHN0ZXAgd2FzIHRvIHNlZSBpZiB0aGVyZSB3YXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIGBzaG1lbV9maWxlX29wZXJhdGlvbnNgIHN0cnVjdC4gSSByZW1lbWJlcmVkIGl0JiMzOTtzIGEgZmlsZSBvcGVyYXRpb24sIHNvIGl0JiMzOTtzIGludm9rZWQgdGhyb3VnaCBgdmZzX2ZhbGxvY2F0ZWAsIHdoaWNoIGxpdmVzIGluIGBmcy9vcGVuLmNgLiBJIGNoZWNrZWQgaWYgYHNobWVtX2ZhbGxvY2F0ZWAgd2FzIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgLSBpdCYjMzk7cyBub3QuIEkgY29uc2lkZXJlZCB0aGF0IGV2ZW4gYmVpbmcgc3RhdGljLCBTeXprYWxsZXIgY291bGQgc3RpbGwgdGFyZ2V0IGl0IHRocm91Z2ggdGhlIGBmYWxsb2NhdGVgIHN5c2NhbGwgb24gdG1wZnMvc2htZW0gZmlsZXMuIFN0aWxsLCB0aGUgaW5zdHJ1Y3Rpb25zIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuCgpUaGVuIHRoZSBrZXkgcmVhbGl6YXRpb24gaGl0IG1lLiBFdmVuIHRob3VnaCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYCwgaXQgKmlzKiB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHNobWVtX2ZpbGVfb3BlcmF0aW9uc2AuIFRoaXMgbWVhbnMgaXQgKndvbiYjMzk7dCogYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEl0IGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBTbywgZGVzcGl0ZSBpdHMgYHN0YXRpY2AgZGVjbGFyYXRpb24sIGl0IGlzIHBlcmZlY3RseSBmaW5lIGFzIGEgRm9jdXNTeW1ib2wuIFRoaXMgbWFrZXMgaXQgYSB2aWFibGUgY2FuZGlkYXRlLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gRnJvbSBsb29raW5nIGF0IGBtbS9zaG1lbS5jYCwgaXQmIzM5O3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX1NITUVNYCBlbmFibGVkLCB3aGljaCBpcyBwcmFjdGljYWxseSBhbHdheXMgdGhlIGNhc2UuIFNvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhcmUgbWluaW1hbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBieSBjaGVja2luZyB0aGUgYG1tL01ha2VmaWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTUzLVx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbm1tL01ha2VmaWxlOjU0Olx0XHRcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcbm1tL01ha2VmaWxlLTU1LVx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG4tLVxubW0vTWFrZWZpbGU9MTQ3PW9iai0kKENPTkZJR19FWEVDTUVNKSAmIzQzOz0gZXhlY21lbS5vXG5tbS9NYWtlZmlsZToxNDg6b2JqLSQoQ09ORklHX1RNUEZTX1FVT1RBKSAmIzQzOz0gc2htZW1fcXVvdGEub1xubW0vTWFrZWZpbGUtMTQ5LW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICYjNDM7PSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgc2htZW0ub2AqKgoKT2theSwgc28gYHNobWVtLm9gIGlzIGRlZmluaXRlbHkgZ2V0dGluZyBjb21waWxlZCBiZWNhdXNlIGl0JiMzOTtzIGxpc3RlZCBpbiBgb2JqLXlgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmV4dGVudCogb2YgaXRzIGNvbXBpbGF0aW9uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBDT05GSUdfU0hNRU1gIG9wdGlvbiBwbGF5cyBhIHJvbGUgaGVyZS4gRG9lcyBpdCBtZWFuIHRoYXQgdGhlIGJhc2Ugb2JqZWN0IGlzICphbHdheXMqIGNvbXBpbGVkLCBidXQgaXRzIGZ1bGwgZnVuY3Rpb25hbGl0eSBpcyBkZXBlbmRlbnQgb24gdGhlIGNvbmZpZz8gT3IgcGVyaGFwcyBpdCBhZmZlY3RzIGluY2x1c2lvbiBvZiB0aGUgc291cmNlIGZpbGUgZW50aXJlbHk/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgYmVjYXVzZSBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSBpbiBgc2htZW0uY2AuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiBgbW0vc2htZW0uY2AgaXRzZWxmLiBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGF0IGBDT05GSUdfU0hNRU1gIG1hY3JvIGlzIHVzZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQmIzM5O3MgYWZmZWN0aW5nIHRoZSBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NDY9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XG5tbS9zaG1lbS5jLTQ3LVxubW0vc2htZW0uYzo0ODojaWZkZWYgQ09ORklHX1NITUVNXG5tbS9zaG1lbS5jLTQ5LS8qXG4tLVxubW0vc2htZW0uYz01Njk0PV9fc2V0dXAoXCYjMzQ7dGhwX3NobWVtPVwmIzM0Oywgc2V0dXBfdGhwX3NobWVtKTtcbi0tXG5tbS9zaG1lbS5jLTU2OTctXG5tbS9zaG1lbS5jOjU2OTg6I2Vsc2UgLyogIUNPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01Njk5LVxuLS1cbm1tL3NobWVtLmM9NTc2Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbm1tL3NobWVtLmMtNTc3NC1cbm1tL3NobWVtLmM6NTc3NTojZW5kaWYgLyogQ09ORklHX1NITUVNICovXG5tbS9zaG1lbS5jLTU3NzYtXG4tLVxubW0vc2htZW0uYz01OTI5PXN0cnVjdCBmb2xpbyAqc2htZW1fcmVhZF9mb2xpb19nZnAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vc2htZW0uYy01OTMxLXtcbm1tL3NobWVtLmM6NTkzMjojaWZkZWYgQ09ORklHX1NITUVNXG5tbS9zaG1lbS5jLTU5MzMtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU0hNRU0gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBzZWUgdGhhdCBgQ09ORklHX1NITUVNYCBpcyAqZXNzZW50aWFsKiBpZiBJIHdhbnQgdG8gdXNlIGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBpbiBgc2htZW0uY2AuIFRoYXQmIzM5O3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGJ1dCBpdCYjMzk7cyBnb29kIHRvIGNvbmZpcm0uIE5vdywgSSBuZWVkIHRvIHNwZWNpZmljYWxseSBsb29rIGF0IGhvdyBgc2htZW1fZmFsbG9jYXRlYCBmaXRzIGludG8gdGhpcy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBub3QuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgc2htZW1fZmFsbG9jYXRlYCBpcyBndWFyZGVkIGJ5IHRoZSBgQ09ORklHX1NITUVNYCBwcmVwcm9jZXNzb3IgbWFjcm8uIFRoYXQgd2lsbCB0ZWxsIG1lIGlmIEkgbmVlZCB0aGF0IGNvbmZpZyBvcHRpb24gZW5hYmxlZCBmb3IgZnVsbCBhY2Nlc3MgdG8gaXQsIGFuZCB0aGUgZnVsbCBleHRlbnQgb2YgdGhlIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2ZhbGxvY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz00Nj1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9zaG1lbS5jLTEwMC0vKlxubW0vc2htZW0uYzoxMDE6ICogc2htZW1fZmFsbG9jYXRlIGNvbW11bmljYXRlcyB3aXRoIHNobWVtX2ZhdWx0IG9yIHNobWVtX3dyaXRlb3V0IHZpYVxubW0vc2htZW0uYy0xMDItICogaW5vZGUtXHUwMDNlaV9wcml2YXRlICh3aXRoIGlfcndzZW0gbWFraW5nIHN1cmUgdGhhdCBpdCBoYXMgb25seSBvbmUgdXNlciBhdFxuLS1cbm1tL3NobWVtLmM9MTU5MT1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsXG4tLVxubW0vc2htZW0uYy0xNjU2LVx0ICogZ29vZCBpZGVhIHRvIGNvbnRpbnVlIGFueXdheSwgb25jZSB3ZSYjMzk7cmUgcHVzaGluZyBpbnRvIHN3YXAuICBTb1xubW0vc2htZW0uYzoxNjU3Olx0ICogcmVhY3RpdmF0ZSB0aGUgZm9saW8sIGFuZCBsZXQgc2htZW1fZmFsbG9jYXRlKCkgcXVpdCB3aGVuIHRvbyBtYW55LlxubW0vc2htZW0uYy0xNjU4LVx0ICovXG4tLVxubW0vc2htZW0uYz0yNjQzPXN0YXRpYyB2bV9mYXVsdF90IHNobWVtX2ZhbGxvY193YWl0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL3NobWVtLmMtMjY2Ni1cdFx0Lypcbm1tL3NobWVtLmM6MjY2NzpcdFx0ICogc2htZW1fZmFsbG9jX3dhaXRxIHBvaW50cyBpbnRvIHRoZSBzaG1lbV9mYWxsb2NhdGUoKVxubW0vc2htZW0uYy0yNjY4LVx0XHQgKiBzdGFjayBvZiB0aGUgaG9sZS1wdW5jaGluZyB0YXNrOiBzaG1lbV9mYWxsb2Nfd2FpdHFcbi0tXG5tbS9zaG1lbS5jPTM1Nzc9c3RhdGljIGxvZmZfdCBzaG1lbV9maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcbi0tXG5tbS9zaG1lbS5jLTM1OTYtXG5tbS9zaG1lbS5jOjM1OTc6c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbm1tL3NobWVtLmMtMzU5OC1cdFx0XHRcdFx0XHRcdCBsb2ZmX3QgbGVuKVxuLS1cbm1tL3NobWVtLmM9NTE0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG1lbV9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxubW0vc2htZW0uYy01MTU1LVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxubW0vc2htZW0uYzo1MTU2Olx0LmZhbGxvY2F0ZVx0PSBzaG1lbV9mYWxsb2NhdGUsXG5tbS9zaG1lbS5jLTUxNTctXHQuc2V0bGVhc2VcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHNobWVtX2ZhbGxvY2F0ZWAgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGRvd24gd2hlcmUgYHNobWVtX2ZhbGxvY2F0ZWAgaXMgZGVmaW5lZC4gTGluZSAzNTk3LCBnb3QgaXQuIEFuZCB0aGF0JiMzOTtzICpiZWZvcmUqIHRoYXQgYCNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9gIGJsb2NrIGF0IGxpbmUgNTY5OC4gVGhhdCBwcmV0dHkgbXVjaCBjb25maXJtcyB3aGF0IEkgc3VzcGVjdGVkOiBgQ09ORklHX1NITUVNYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkIGZvciBgc2htZW1fZmFsbG9jYXRlYCB0byBldmVuIGJlIGNvbXBpbGVkIGluLiBUaGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIHZlcnkgY2xlYXIuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgQ09ORklHX1NITUVNYCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHR5cGljYWwga2VybmVsIGNvbmZpZ3VyYXRpb24/IEl0IHVzdWFsbHkgaXMsIGFzIGZhciBhcyBJIHJlY2FsbCBmcm9tIG15IHByZXZpb3VzIHdvcmsuIEJ1dCBsZXQmIzM5O3Mgbm90IHJlbHkgb24gbWVtb3J5IGFsb25lLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgbW9zdCByZWxpYWJsZSBwbGFjZSB0byBjaGVjayB0aGlzIGlzIGBpbml0L0tjb25maWdgLiBUaW1lIHRvIGNvbnN1bHQgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4ODc9Y29uZmlnIEVWRU5URkRcbi0tXG5pbml0L0tjb25maWctMTg5NS1cbmluaXQvS2NvbmZpZzoxODk2OmNvbmZpZyBTSE1FTVxuaW5pdC9LY29uZmlnLTE4OTctXHRib29sIFwmIzM0O1VzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW1cJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJvb2xlYW4gRmxhZyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIG5ldyBmbGFnLCBhbmQgSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBhIGJvb2xlYW4uIFRoZSBpbXBsaWVkIGRlZmF1bHQgaXMgYWxtb3N0IGNlcnRhaW5seSAmIzM0O3llcywmIzM0OyBnaXZlbiB0aGUgY29udGV4dC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB1c3VhbCBsb2NhdGlvbiBmb3IgZGVmaW5pbmcgYW5kIGNvbmZpZ3VyaW5nIGtlcm5lbCBmZWF0dXJlcywgYW5kIGl0IHNob3VsZCBob2xkIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgdGhlIGBTSE1FTWAgZGVmYXVsdCB2YWx1ZSwgaWYgdGhlcmUgaXMgYW55LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5nIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4ODc9Y29uZmlnIEVWRU5URkRcbi0tXG5pbml0L0tjb25maWctMTg5NS1cbmluaXQvS2NvbmZpZzoxODk2OmNvbmZpZyBTSE1FTVxuaW5pdC9LY29uZmlnLTE4OTctXHRib29sIFwmIzM0O1VzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW1cJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFtwcmVzdW1hYmx5IGEgcmVsYXRlZCBjb25jZXB0IHRoZSB1c2VyIGlzIGludGVyZXN0ZWQgaW4sIHRob3VnaCBub3QgZXhwbGljaXRseSBzdGF0ZWRdPyBJIGltbWVkaWF0ZWx5IGhvbmVkIGluIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBHaXZlbiB0aGUgYnJlYWR0aCBvZiBvcHRpb25zIGluIHRoZSBrZXJuZWwsIEkmIzM5O20gZ3Vlc3Npbmcgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLCBvciBhdCBsZWFzdCBhIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQuIExldCBtZSBwdWxsIHVwIHRoYXQgZmlsZSBhbmQganVtcCBkaXJlY3RseSB0byBhcm91bmQgbGluZSAxODk2LiBUaGlzIHNwZWNpZmljIGZpbGUgYW5kIGxpbmUgYXJlIGEgZ29vZCBiZXQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBhcmVhcyBvZiBpbnRlcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTA6XHRcdGhlbHBcbjE4OTE6XHRcdCAgRW5hYmxlIHRoZSBldmVudGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSBib3RoXG4xODkyOlx0XHQgIGtlcm5lbCBub3RpZmljYXRpb24gKGllLiBLQUlPKSBvciB1c2Vyc3BhY2Ugbm90aWZpY2F0aW9ucy5cbjE4OTM6XHRcbjE4OTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbjE4OTU6XHRcbjE4OTY6XHRjb25maWcgU0hNRU1cbjE4OTc6XHRcdGJvb2wgXCYjMzQ7VXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVwmIzM0OyBpZiBFWFBFUlRcbjE4OTg6XHRcdGRlZmF1bHQgeVxuMTg5OTpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE5MDA6XHRcdGhlbHBcbjE5MDE6XHRcdCAgVGhlIHNobWVtIGlzIGFuIGludGVybmFsIGZpbGVzeXN0ZW0gdXNlZCB0byBtYW5hZ2Ugc2hhcmVkIG1lbW9yeS5cbjE5MDI6XHRcdCAgSXQgaXMgYmFja2VkIGJ5IHN3YXAgYW5kIG1hbmFnZXMgcmVzb3VyY2UgbGltaXRzLiBJdCBpcyBhbHNvIGV4cG9ydGVkXG4xOTAzOlx0XHQgIHRvIHVzZXJzcGFjZSBhcyB0bXBmcyBpZiBUTVBGUyBpcyBlbmFibGVkLiBEaXNhYmxpbmcgdGhpc1xuMTkwNDpcdFx0ICBvcHRpb24gcmVwbGFjZXMgc2htZW0gYW5kIHRtcGZzIHdpdGggdGhlIG11Y2ggc2ltcGxlciByYW1mcyBjb2RlLFxuMTkwNTpcdFx0ICB3aGljaCBtYXkgYmUgYXBwcm9wcmlhdGUgb24gc21hbGwgc3lzdGVtcyB3aXRob3V0IHN3YXAuXG4xOTA2Olx0XG4xOTA3Olx0Y29uZmlnIEFJT1xuMTkwODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQUlPIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTA5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBTaGFyZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBzeXN0ZW0gZGVmYXVsdHMgdG8gdXNpbmcgYFNITUVNYC4gVGhhdCBtYWtlcyBzZW5zZSBhcyBhIHN0YXJ0aW5nIHBvaW50LiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoaXMgY29udGV4dD8gVGhpbmtpbmcgYWJvdXQgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBzaGFyZWQgbWVtb3J5LCBgVE1QRlNgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQuIEl0JiMzOTtzIG9mdGVuIHVzZWQgdG8gcHJvdmlkZSBhIGZpbGVzeXN0ZW0gaW50ZXJmYWNlIHRvIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgYGZzL0tjb25maWdgLiBUaGF0IHNob3VsZCBjb250YWluIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBgVE1QRlNgLCBhbmQgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgaG93IGl0IGludGVyYWN0cyB3aXRoIGBTSE1FTWAgKG9yIHdoZXRoZXIgdGhlcmUmIzM5O3Mgc29tZSBvdmVybGFwIG9yIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbikgd2hpY2ggd291bGQgZ2l2ZSBtZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBUaW1lIHRvIGRpdmUgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTVBGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0xNjU9c291cmNlIFwmIzM0O2ZzL3N5c2ZzL0tjb25maWdcJiMzNDtcbmZzL0tjb25maWctMTY2LVxuZnMvS2NvbmZpZzoxNjc6Y29uZmlnIFRNUEZTXG5mcy9LY29uZmlnLTE2OC1cdGJvb2wgXCYjMzQ7VG1wZnMgdmlydHVhbCBtZW1vcnkgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoZm9ybWVyIHNobSBmcylcJiMzNDtcbi0tXG5mcy9LY29uZmlnLTE4MC1cbmZzL0tjb25maWc6MTgxOmNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcbmZzL0tjb25maWctMTgyLVx0Ym9vbCBcJiMzNDtUbXBmcyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL0tjb25maWctMTk4LVxuZnMvS2NvbmZpZzoxOTk6Y29uZmlnIFRNUEZTX1hBVFRSXG5mcy9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7VG1wZnMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL0tjb25maWctMjEzLVxuZnMvS2NvbmZpZzoyMTQ6Y29uZmlnIFRNUEZTX0lOT0RFNjRcbmZzL0tjb25maWctMjE1LVx0Ym9vbCBcJiMzNDtVc2UgNjQtYml0IGlub190IGJ5IGRlZmF1bHQgaW4gdG1wZnNcJiMzNDtcbi0tXG5mcy9LY29uZmlnLTIzNC1cbmZzL0tjb25maWc6MjM1OmNvbmZpZyBUTVBGU19RVU9UQVxuZnMvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1RtcGZzIHF1b3RhIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODExNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgcmVxdWVzdCBzdWdnZXN0cyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdG9waWMgYXQgaGFuZC4gJiMzNDtmcy9LY29uZmlnJiMzNDsgaXMgdGhlIGtleSBmaWxlIGhlcmUuIFRoYXQgbmFycm93cyBpdCBkb3duIGltbWVkaWF0ZWx5IHRvIGZpbGVzeXN0ZW0tcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExpbmUgMTY3IGlzIG91ciB0YXJnZXQuIEl0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHByYWN0aWNlIHRvIHN0YXJ0IG5lYXIgdGhlIHN1Z2dlc3RlZCBsaW5lIG51bWJlciwgYW5kIG9mdGVuIHNjYW4gYSBsaXR0bGUgYWJvdmUgb3IgYmVsb3cgdGhhdCBsaW5lLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdmFsdWFibGUgY29udGV4dC4gSXQgYWxzbyBpcyBhIGdvb2QgaWRlYSB0byBicmluZyB1cCBhbm90aGVyIHdpbmRvdyB0byBzZWFyY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhcmUgYnVyaWVkIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRzb3VyY2UgXCYjMzQ7ZnMvc3lzZnMvS2NvbmZpZ1wmIzM0O1xuIDE2NjpcdFxuIDE2NzpcdGNvbmZpZyBUTVBGU1xuIDE2ODpcdFx0Ym9vbCBcJiMzNDtUbXBmcyB2aXJ0dWFsIG1lbW9yeSBmaWxlIHN5c3RlbSBzdXBwb3J0IChmb3JtZXIgc2htIGZzKVwmIzM0O1xuIDE2OTpcdFx0ZGVwZW5kcyBvbiBTSE1FTVxuIDE3MDpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDE3MTpcdFx0aGVscFxuIDE3MjpcdFx0ICBUbXBmcyBpcyBhIGZpbGUgc3lzdGVtIHdoaWNoIGtlZXBzIGFsbCBmaWxlcyBpbiB2aXJ0dWFsIG1lbW9yeS5cbiAxNzM6XHRcbiAxNzQ6XHRcdCAgRXZlcnl0aGluZyBpbiB0bXBmcyBpcyB0ZW1wb3JhcnkgaW4gdGhlIHNlbnNlIHRoYXQgbm8gZmlsZXMgd2lsbCBiZVxuIDE3NTpcdFx0ICBjcmVhdGVkIG9uIHlvdXIgaGFyZCBkcml2ZS4gVGhlIGZpbGVzIGxpdmUgaW4gbWVtb3J5IGFuZCBzd2FwXG4gMTc2Olx0XHQgIHNwYWNlLiBJZiB5b3UgdW5tb3VudCBhIHRtcGZzIGluc3RhbmNlLCBldmVyeXRoaW5nIHN0b3JlZCB0aGVyZWluIGlzXG4gMTc3Olx0XHQgIGxvc3QuXG4gMTc4Olx0XG4gMTc5Olx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDE4MDpcdFxuIDE4MTpcdGNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcbiAxODI6XHRcdGJvb2wgXCYjMzQ7VG1wZnMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAxODM6XHRcdGRlcGVuZHMgb24gVE1QRlNcbiAxODQ6XHRcdHNlbGVjdCBUTVBGU19YQVRUUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjI3CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIGBzaG1lbV9mYWxsb2NhdGVgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhbGwgYWJvdXQgYHNobWVtX2ZhbGxvY2F0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIHNldHVwIOKAkyBzbywgeWVzLCBgVE1QRlNgIGlzIHJlcXVpcmVkIHRvIG1vdW50IGEgdG1wZnMgZmlsZXN5c3RlbSwgYW5kIHdlJiMzOTtsbCBuZWVkIGBTSE1FTWAgYXMgd2VsbC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGBmYWxsb2NhdGVgIG9uIHNoYXJlZCBtZW1vcnkgKHNobWVtKS4gSSBicmllZmx5IGNvbnNpZGVyZWQgb3RoZXIgZnVuY3Rpb25zLCBidXQgaXQmIzM5O3MgY2xlYXIgdGhhdCBgc2htZW1fZmFsbG9jYXRlYCBpcyB0aGUgb25seSBvbmUgYmVpbmcgdG91Y2hlZC4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBgc2htZW1fZmFsbG9jYXRlYCBpcyAqc3RhdGljKiwgd2hpY2ggaW5pdGlhbGx5IGdhdmUgbWUgcGF1c2UuIEJ1dCwgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0JiMzOTtzIG5vdCBpbmxpbmVkIGFuZCB0aHVzIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCBkZXNwaXRlIGl0cyBzdGF0aWMgbmF0dXJlLCBgc2htZW1fZmFsbG9jYXRlYCBpcyB0aGUgcmlnaHQgZm9jdXMuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBGb2N1c1N5bWJvbGAgdG8gYCYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDtgIGJlY2F1c2UgaXQmIzM5O3MgdGhlIHNwZWNpZmljIHRhcmdldC4gSSYjMzk7bGwgYWxzbyBhZGQgYCYjMzQ7U0hNRU0mIzM0O2AgYW5kIGAmIzM0O1RNUEZTJiMzNDtgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gc3BlY2lmeSB0aGF0IHRoZXNlIGFyZSByZXF1aXJlbWVudHMuCgpJIGRpZCBhIGRvdWJsZSBjaGVjayB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBpdCYjMzk7cyB0aGUgb25seSBtb2RpZmllZCBmdW5jdGlvbi4gWWVzLCBqdXN0IGBzaG1lbV9mYWxsb2NhdGVgLgoKTm93LCBsZXQmIzM5O3MgcmVjYXAgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIHBhdGNoLiBUaGUgY29yZSBpc3N1ZSBpcyBhIHBvdGVudGlhbCBvdmVyZmxvdyBvciBleGNlZWRhbmNlIG9mIHRvdGFsIFJBTSAmIzQzOyBzd2FwIGJ5IGBucl9wYWdlc2Agd2l0aGluIGBzaG1lbV9mYWxsb2NhdGVgLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgYm91bmRzIGNoZWNrOiBgbnJfcGFnZXMgJmd0OyBMT05HX01BWGAgb3IgYG5yX3BhZ2VzICZndDsgdG90YWxyYW1fcGFnZXMoKSAmIzQzOyB0b3RhbF9zd2FwX3BhZ2VzYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsIGNoYW5nZSogd2l0aGluIHRoZSBjb3JlIGtlcm5lbCAoc2htZW0vdG1wZnMpLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiBhIHRtcGZzIGZpbGUuIE15IGV4cGVydCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBuZWVkcyBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBuZXcgYm91bmRzIGNoZWNraW5nIGFuZCBlbnN1cmUgdGhhdCBubyByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4gU28sIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDozMC43NDcwODI1MDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQxODI4NzQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTSE1FTVwiLFxuICAgIFwiVE1QRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9mYWxsb2NhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2htZW1fZmFsbG9jYXRlYCB0byBhZGQgYm91bmRzIGNoZWNraW5nIGZvciBgbnJfcGFnZXNgIHRvIHByZXZlbnQgb3ZlcmZsb3cgb3IgZXhjZWVkaW5nIHRvdGFsIFJBTSBhbmQgc3dhcCBzcGFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoc2htZW0vdG1wZnMpIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiBhIHRtcGZzIGZpbGUuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYm91bmRzIGNoZWNraW5nIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjMwLjc0NzA5NDg1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2NTY3MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDM0YTE3NTM2ZDc3NTJmNTg0NTNhOGRlMGJmMzhiZjM2NTJlMjI1YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAxMzoyNDoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li5kNjI2NTYxZDQ2ZGI3ZSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0zNjAxLDcgKzM2MDEsOCBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbiBcXHRzdHJ1Y3Qgc2htZW1fZmFsbG9jIHNobWVtX2ZhbGxvYztcXG4tXFx0cGdvZmZfdCBzdGFydCwgaW5kZXgsIGVuZCwgdW5kb19mYWxsb2NlbmQ7XFxuK1xcdHBnb2ZmX3Qgc3RhcnQsIGluZGV4LCBlbmQsIG5yX3BhZ2VzLCB1bmRvX2ZhbGxvY2VuZDtcXG4rXFx0bG9mZl90IGVuZF9wb3M7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuIFxcdGlmIChtb2RlIFxcdTAwMjYgfihGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpKVxcbkBAIC0zNjQ5LDIzICszNjUwLDI5IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFdlIG5lZWQgdG8gY2hlY2sgcmxpbWl0IGV2ZW4gd2hlbiBGQUxMT0NfRkxfS0VFUF9TSVpFICovXFxuLVxcdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTtcXG4rXFx0ZW5kX3BvcyA9IG9mZnNldCArIGxlbjtcXG4rXFx0ZXJyb3IgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBlbmRfcG9zKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGlmICgoaW5mby1cXHUwMDNlc2VhbHMgXFx1MDAyNiBGX1NFQUxfR1JPVykgXFx1MDAyNlxcdTAwMjYgb2Zmc2V0ICsgbGVuIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSkge1xcbitcXHRpZiAoKGluZm8tXFx1MDAzZXNlYWxzIFxcdTAwMjYgRl9TRUFMX0dST1cpIFxcdTAwMjZcXHUwMDI2IGVuZF9wb3MgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuIFxcdFxcdGVycm9yID0gLUVQRVJNO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0c3RhcnQgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFx0ZW5kID0gKG9mZnNldCArIGxlbiArIFBBR0VfU0laRSAtIDEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdGVuZCA9ICgodTY0KWVuZF9wb3MgKyBQQUdFX1NJWkUgLSAxKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRucl9wYWdlcyA9IGVuZCAtIHN0YXJ0O1xcbiBcXHQvKiBUcnkgdG8gYXZvaWQgYSBzd2Fwc3Rvcm0gaWYgbGVuIGlzIGltcG9zc2libGUgdG8gc2F0aXNmeSAqL1xcbi1cXHRpZiAoc2JpbmZvLVxcdTAwM2VtYXhfYmxvY2tzIFxcdTAwMjZcXHUwMDI2IGVuZCAtIHN0YXJ0IFxcdTAwM2Ugc2JpbmZvLVxcdTAwM2VtYXhfYmxvY2tzKSB7XFxuK1xcdGlmIChzYmluZm8tXFx1MDAzZW1heF9ibG9ja3MgXFx1MDAyNlxcdTAwMjYgbnJfcGFnZXMgXFx1MDAzZSBzYmluZm8tXFx1MDAzZW1heF9ibG9ja3MpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRpZiAobnJfcGFnZXMgXFx1MDAzZSBMT05HX01BWCB8fFxcbitcXHQgICAgbnJfcGFnZXMgXFx1MDAzZSB0b3RhbHJhbV9wYWdlcygpICsgdG90YWxfc3dhcF9wYWdlcykge1xcbiBcXHRcXHRlcnJvciA9IC1FTk9TUEM7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuLVxcbiBcXHRzaG1lbV9mYWxsb2Mud2FpdHEgPSBOVUxMO1xcbiBcXHRzaG1lbV9mYWxsb2Muc3RhcnQgPSBzdGFydDtcXG4gXFx0c2htZW1fZmFsbG9jLm5leHQgID0gc3RhcnQ7XFxuQEAgLTM2OTksNyArMzcwNiw3IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuIFxcdFxcdGVsc2UgaWYgKHNobWVtX2ZhbGxvYy5ucl91bnN3YXBwZWQgXFx1MDAzZSBzaG1lbV9mYWxsb2MubnJfZmFsbG9jZWQpXFxuIFxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRlcnJvciA9IHNobWVtX2dldF9mb2xpbyhpbm9kZSwgaW5kZXgsIG9mZnNldCArIGxlbixcXG4rXFx0XFx0XFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIGluZGV4LCBlbmRfcG9zLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Zm9saW8sIFNHUF9GQUxMT0MpO1xcbiBcXHRcXHRpZiAoZXJyb3IpIHtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlZmFsbG9jZW5kID0gdW5kb19mYWxsb2NlbmQ7XFxuQEAgLTM3NDMsOCArMzc1MCw4IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjYgb2Zmc2V0ICsgbGVuIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSlcXG4tXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBsZW4pO1xcbitcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjYgZW5kX3BvcyBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpXFxuK1xcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgZW5kX3Bvcyk7XFxuIHVuZG9uZTpcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjMxLjU1NDg2MDIwNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ3NjEwNDk2NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCIsXG4gICAgXCJUTVBGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNobWVtX2ZhbGxvY2F0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDM0YTE3NTM2ZDc3NTJmNTg0NTNhOGRlMGJmMzhiZjM2NTJlMjI1YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDEzOjI0OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li5kNjI2NTYxZDQ2ZGI3ZSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0zNjAxLDcgKzM2MDEsOCBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiBcdHN0cnVjdCBzaG1lbV9mYWxsb2Mgc2htZW1fZmFsbG9jO1xuLVx0cGdvZmZfdCBzdGFydCwgaW5kZXgsIGVuZCwgdW5kb19mYWxsb2NlbmQ7XG4rXHRwZ29mZl90IHN0YXJ0LCBpbmRleCwgZW5kLCBucl9wYWdlcywgdW5kb19mYWxsb2NlbmQ7XG4rXHRsb2ZmX3QgZW5kX3BvcztcbiBcdGludCBlcnJvcjtcbiBcbiBcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkpXG5AQCAtMzY0OSwyMyArMzY1MCwyOSBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0fVxuIFxuIFx0LyogV2UgbmVlZCB0byBjaGVjayBybGltaXQgZXZlbiB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgKi9cbi1cdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTtcbitcdGVuZF9wb3MgPSBvZmZzZXQgKyBsZW47XG4rXHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIGVuZF9wb3MpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmICgoaW5mby1cdTAwM2VzZWFscyBcdTAwMjYgRl9TRUFMX0dST1cpIFx1MDAyNlx1MDAyNiBvZmZzZXQgKyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuK1x0aWYgKChpbmZvLVx1MDAzZXNlYWxzIFx1MDAyNiBGX1NFQUxfR1JPVykgXHUwMDI2XHUwMDI2IGVuZF9wb3MgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuIFx0XHRlcnJvciA9IC1FUEVSTTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRzdGFydCA9IG9mZnNldCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGVuZCA9IChvZmZzZXQgKyBsZW4gKyBQQUdFX1NJWkUgLSAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdGVuZCA9ICgodTY0KWVuZF9wb3MgKyBQQUdFX1NJWkUgLSAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XG4gXHQvKiBUcnkgdG8gYXZvaWQgYSBzd2Fwc3Rvcm0gaWYgbGVuIGlzIGltcG9zc2libGUgdG8gc2F0aXNmeSAqL1xuLVx0aWYgKHNiaW5mby1cdTAwM2VtYXhfYmxvY2tzIFx1MDAyNlx1MDAyNiBlbmQgLSBzdGFydCBcdTAwM2Ugc2JpbmZvLVx1MDAzZW1heF9ibG9ja3MpIHtcbitcdGlmIChzYmluZm8tXHUwMDNlbWF4X2Jsb2NrcyBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNlIHNiaW5mby1cdTAwM2VtYXhfYmxvY2tzKSB7XG4rXHRcdGVycm9yID0gLUVOT1NQQztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNlIExPTkdfTUFYIHx8XG4rXHQgICAgbnJfcGFnZXMgXHUwMDNlIHRvdGFscmFtX3BhZ2VzKCkgKyB0b3RhbF9zd2FwX3BhZ2VzKSB7XG4gXHRcdGVycm9yID0gLUVOT1NQQztcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXG4gXHRzaG1lbV9mYWxsb2Mud2FpdHEgPSBOVUxMO1xuIFx0c2htZW1fZmFsbG9jLnN0YXJ0ID0gc3RhcnQ7XG4gXHRzaG1lbV9mYWxsb2MubmV4dCAgPSBzdGFydDtcbkBAIC0zNjk5LDcgKzM3MDYsNyBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0XHRlbHNlIGlmIChzaG1lbV9mYWxsb2MubnJfdW5zd2FwcGVkIFx1MDAzZSBzaG1lbV9mYWxsb2MubnJfZmFsbG9jZWQpXG4gXHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIGluZGV4LCBvZmZzZXQgKyBsZW4sXG4rXHRcdFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIGluZGV4LCBlbmRfcG9zLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmZvbGlvLCBTR1BfRkFMTE9DKTtcbiBcdFx0aWYgKGVycm9yKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VmYWxsb2NlbmQgPSB1bmRvX2ZhbGxvY2VuZDtcbkBAIC0zNzQzLDggKzM3NTAsOCBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcbi1cdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNiBvZmZzZXQgKyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbi1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBsZW4pO1xuK1x0aWYgKCEobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXHUwMDI2XHUwMDI2IGVuZF9wb3MgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbitcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBlbmRfcG9zKTtcbiB1bmRvbmU6XG4gXHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiBcdGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDozMS41NTQ4NjMzNTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU5NTg0MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogc2htZW1fZmFsbG9jYXRlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYHNobWVtX2ZhbGxvY2F0ZWAgd2l0aGluIGBtbS9zaG1lbS5jYC4gIE15IGZpcnN0IG9ic2VydmF0aW9uIGlzIHRoYXQgaXQncyBtb2RpZnlpbmcgYSBjb3JlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIHNobWVtL3RtcGZzIHN1YnN5c3RlbSwgc28gdGhpcyB3YXJyYW50cyBjbG9zZSBhdHRlbnRpb24uICBUaGUgY2hhbmdlcyBmb2N1cyBvbiBob3cgYGVuZGAgYW5kIGBucl9wYWdlc2AgYXJlIGNvbXB1dGVkIGFuZCB2YWxpZGF0ZWQuIFRoZSBhZGRpdGlvbiBvZiB0aGlzIGNoZWNrIGlzIGludGVyZXN0aW5nOlxuXG5gYGBjXG5cdGlmIChucl9wYWdlcyBcdTAwM2UgTE9OR19NQVggfHxcblx0ICAgIG5yX3BhZ2VzIFx1MDAzZSB0b3RhbHJhbV9wYWdlcygpICsgdG90YWxfc3dhcF9wYWdlcykge1xuXHRcdGVycm9yID0gLUVOT1NQQztcblx0XHRnb3RvIG91dDtcblx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiBzaG1lbSwgd2hpY2ggbWVhbnMgdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gVGhlIHRhcmdldCBpcyB0aGUgYHNobWVtX2ZhbGxvY2F0ZWAgZnVuY3Rpb24gaXRzZWxmLiBOb3csIGEgY3JpdGljYWwgY29uc2lkZXJhdGlvbiBmb3IgZnV6emluZyBlZmZlY3RpdmVuZXNzIGlzIHN5bWJvbCB2aXNpYmlsaXR5LiBJIG5lZWQgdG8ga25vdyBpZiBgc2htZW1fZmFsbG9jYXRlYCBpcyBzdGF0aWMgb3Igbm90LiBMb29raW5nIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBpdCBpcyBpbmRlZWQgZGVmaW5lZCBhcyBgc3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgLi4uKWAhIEhtbSwgYmVpbmcgc3RhdGljIG1pZ2h0IG1ha2UgaXQgbGVzcyB0aGFuIGlkZWFsIGFzIGEgYEZvY3VzU3ltYm9sYCBmb3IgZnV6emluZywgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIGFwcHJvYWNoLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdpdGhpbiBgbW0vc2htZW0uY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBnb29kIGVudHJ5cG9pbnRzIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6MzYuMjE0NDUwMjg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjYxNzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9mYWxsb2NhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vc2htZW0uYy0xMDAtLypcXG5tbS9zaG1lbS5jOjEwMTogKiBzaG1lbV9mYWxsb2NhdGUgY29tbXVuaWNhdGVzIHdpdGggc2htZW1fZmF1bHQgb3Igc2htZW1fd3JpdGVvdXQgdmlhXFxubW0vc2htZW0uYy0xMDItICogaW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSAod2l0aCBpX3J3c2VtIG1ha2luZyBzdXJlIHRoYXQgaXQgaGFzIG9ubHkgb25lIHVzZXIgYXRcXG4tLVxcbm1tL3NobWVtLmM9MTU5MT1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsXFxuLS1cXG5tbS9zaG1lbS5jLTE2NTYtXFx0ICogZ29vZCBpZGVhIHRvIGNvbnRpbnVlIGFueXdheSwgb25jZSB3ZSdyZSBwdXNoaW5nIGludG8gc3dhcC4gIFNvXFxubW0vc2htZW0uYzoxNjU3OlxcdCAqIHJlYWN0aXZhdGUgdGhlIGZvbGlvLCBhbmQgbGV0IHNobWVtX2ZhbGxvY2F0ZSgpIHF1aXQgd2hlbiB0b28gbWFueS5cXG5tbS9zaG1lbS5jLTE2NTgtXFx0ICovXFxuLS1cXG5tbS9zaG1lbS5jPTI2NDM9c3RhdGljIHZtX2ZhdWx0X3Qgc2htZW1fZmFsbG9jX3dhaXQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5tbS9zaG1lbS5jLTI2NjYtXFx0XFx0LypcXG5tbS9zaG1lbS5jOjI2Njc6XFx0XFx0ICogc2htZW1fZmFsbG9jX3dhaXRxIHBvaW50cyBpbnRvIHRoZSBzaG1lbV9mYWxsb2NhdGUoKVxcbm1tL3NobWVtLmMtMjY2OC1cXHRcXHQgKiBzdGFjayBvZiB0aGUgaG9sZS1wdW5jaGluZyB0YXNrOiBzaG1lbV9mYWxsb2Nfd2FpdHFcXG4tLVxcbm1tL3NobWVtLmM9MzU3Nz1zdGF0aWMgbG9mZl90IHNobWVtX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxcbi0tXFxubW0vc2htZW0uYy0zNTk2LVxcbm1tL3NobWVtLmM6MzU5NzpzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbm1tL3NobWVtLmMtMzU5OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgbG9mZl90IGxlbilcXG4tLVxcbm1tL3NobWVtLmM9NTE0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG1lbV9maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTUxNTUtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5tbS9zaG1lbS5jOjUxNTY6XFx0LmZhbGxvY2F0ZVxcdD0gc2htZW1fZmFsbG9jYXRlLFxcbm1tL3NobWVtLmMtNTE1Ny1cXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjM2LjQ4MTA3NTY2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNDY2MTI2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNTeW1ib2wgQ29uc2lkZXJhdGlvbnMgZm9yIHNobWVtX2ZhbGxvY2F0ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYHNobWVtX2ZhbGxvY2F0ZWAgZnVuY3Rpb24uIEl0J3Mgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgbWFkZSBtZSBwYXVzZSBhYm91dCBpdHMgc3VpdGFiaWxpdHkgYXMgYSBGb2N1c1N5bWJvbC4gTXkgZmlyc3QgdGhvdWdodCB3YXMgdGhhdCBhIHN0YXRpYyBmdW5jdGlvbiBtaWdodCBub3QgYmUgYSBncmVhdCBjaG9pY2UuIEkgc3RhcnRlZCBieSB0cmFjaW5nIHRoZSB1c2FnZSwgbm90aW5nIHRoYXQgaXQncyBhc3NpZ25lZCB0byBgLmZhbGxvY2F0ZWAgd2l0aGluIHRoZSBgc2htZW1fZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3QuXG5cbk15IG5leHQgc3RlcCB3YXMgdG8gc2VlIGlmIHRoZXJlIHdhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgYHNobWVtX2ZpbGVfb3BlcmF0aW9uc2Agc3RydWN0LiBJIHJlbWVtYmVyZWQgaXQncyBhIGZpbGUgb3BlcmF0aW9uLCBzbyBpdCdzIGludm9rZWQgdGhyb3VnaCBgdmZzX2ZhbGxvY2F0ZWAsIHdoaWNoIGxpdmVzIGluIGBmcy9vcGVuLmNgLiBJIGNoZWNrZWQgaWYgYHNobWVtX2ZhbGxvY2F0ZWAgd2FzIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgLSBpdCdzIG5vdC4gSSBjb25zaWRlcmVkIHRoYXQgZXZlbiBiZWluZyBzdGF0aWMsIFN5emthbGxlciBjb3VsZCBzdGlsbCB0YXJnZXQgaXQgdGhyb3VnaCB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiB0bXBmcy9zaG1lbSBmaWxlcy4gU3RpbGwsIHRoZSBpbnN0cnVjdGlvbnMgcHJpb3JpdGl6ZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy5cblxuVGhlbiB0aGUga2V5IHJlYWxpemF0aW9uIGhpdCBtZS4gRXZlbiB0aG91Z2ggaXQncyBkZWNsYXJlZCBgc3RhdGljYCwgaXQgKmlzKiB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHNobWVtX2ZpbGVfb3BlcmF0aW9uc2AuIFRoaXMgbWVhbnMgaXQgKndvbid0KiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFNvLCBkZXNwaXRlIGl0cyBgc3RhdGljYCBkZWNsYXJhdGlvbiwgaXQgaXMgcGVyZmVjdGx5IGZpbmUgYXMgYSBGb2N1c1N5bWJvbC4gVGhpcyBtYWtlcyBpdCBhIHZpYWJsZSBjYW5kaWRhdGUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEZyb20gbG9va2luZyBhdCBgbW0vc2htZW0uY2AsIGl0J3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX1NITUVNYCBlbmFibGVkLCB3aGljaCBpcyBwcmFjdGljYWxseSBhbHdheXMgdGhlIGNhc2UuIFNvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhcmUgbWluaW1hbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBieSBjaGVja2luZyB0aGUgYG1tL01ha2VmaWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDo0My41Mjc2OTEzNzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NjU4MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTUxPW9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZS01My1cXHRcXHRcXHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NDpcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NS1cXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZT0xNDc9b2JqLSQoQ09ORklHX0VYRUNNRU0pICs9IGV4ZWNtZW0ub1xcbm1tL01ha2VmaWxlOjE0ODpvYmotJChDT05GSUdfVE1QRlNfUVVPVEEpICs9IHNobWVtX3F1b3RhLm9cXG5tbS9NYWtlZmlsZS0xNDktb2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgKz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjQzLjY3NTQyMjMyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTYyMjA0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgc2htZW0ub2AqKlxuXG5Pa2F5LCBzbyBgc2htZW0ub2AgaXMgZGVmaW5pdGVseSBnZXR0aW5nIGNvbXBpbGVkIGJlY2F1c2UgaXQncyBsaXN0ZWQgaW4gYG9iai15YC4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpleHRlbnQqIG9mIGl0cyBjb21waWxhdGlvbi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgQ09ORklHX1NITUVNYCBvcHRpb24gcGxheXMgYSByb2xlIGhlcmUuIERvZXMgaXQgbWVhbiB0aGF0IHRoZSBiYXNlIG9iamVjdCBpcyAqYWx3YXlzKiBjb21waWxlZCwgYnV0IGl0cyBmdWxsIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIHRoZSBjb25maWc/IE9yIHBlcmhhcHMgaXQgYWZmZWN0cyBpbmNsdXNpb24gb2YgdGhlIHNvdXJjZSBmaWxlIGVudGlyZWx5PyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IGJlY2F1c2UgaXQncyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSBpbiBgc2htZW0uY2AuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiBgbW0vc2htZW0uY2AgaXRzZWxmLiBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGF0IGBDT05GSUdfU0hNRU1gIG1hY3JvIGlzIHVzZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQncyBhZmZlY3RpbmcgdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6NDcuMzcxNjQ3MDY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzgxMTIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0hNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xcbm1tL3NobWVtLmMtNDctXFxubW0vc2htZW0uYzo0ODojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vc2htZW0uYy00OS0vKlxcbi0tXFxubW0vc2htZW0uYz01Njk0PV9fc2V0dXAoXFxcInRocF9zaG1lbT1cXFwiLCBzZXR1cF90aHBfc2htZW0pO1xcbi0tXFxubW0vc2htZW0uYy01Njk3LVxcbm1tL3NobWVtLmM6NTY5ODojZWxzZSAvKiAhQ09ORklHX1NITUVNICovXFxubW0vc2htZW0uYy01Njk5LVxcbi0tXFxubW0vc2htZW0uYz01NzY3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTU3NzQtXFxubW0vc2htZW0uYzo1Nzc1OiNlbmRpZiAvKiBDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU3NzYtXFxuLS1cXG5tbS9zaG1lbS5jPTU5Mjk9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNTkzMS17XFxubW0vc2htZW0uYzo1OTMyOiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTU5MzMtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjQ3LjU4NTUwNjM2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzEwNjUxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTSE1FTSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19TSE1FTWAgaXMgKmVzc2VudGlhbCogaWYgSSB3YW50IHRvIHVzZSBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gYHNobWVtLmNgLiBUaGF0J3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGJ1dCBpdCdzIGdvb2QgdG8gY29uZmlybS4gTm93LCBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgYXQgaG93IGBzaG1lbV9mYWxsb2NhdGVgIGZpdHMgaW50byB0aGlzLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhhdCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG5vdC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHNobWVtX2ZhbGxvY2F0ZWAgaXMgZ3VhcmRlZCBieSB0aGUgYENPTkZJR19TSE1FTWAgcHJlcHJvY2Vzc29yIG1hY3JvLiBUaGF0IHdpbGwgdGVsbCBtZSBpZiBJIG5lZWQgdGhhdCBjb25maWcgb3B0aW9uIGVuYWJsZWQgZm9yIGZ1bGwgYWNjZXNzIHRvIGl0LCBhbmQgdGhlIGZ1bGwgZXh0ZW50IG9mIHRoZSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6NTAuODU2NTc1MzQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwNjk0OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fZmFsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NobWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2htZW0uYz00Nj1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL3NobWVtLmMtMTAwLS8qXFxubW0vc2htZW0uYzoxMDE6ICogc2htZW1fZmFsbG9jYXRlIGNvbW11bmljYXRlcyB3aXRoIHNobWVtX2ZhdWx0IG9yIHNobWVtX3dyaXRlb3V0IHZpYVxcbm1tL3NobWVtLmMtMTAyLSAqIGlub2RlLVxcdTAwM2VpX3ByaXZhdGUgKHdpdGggaV9yd3NlbSBtYWtpbmcgc3VyZSB0aGF0IGl0IGhhcyBvbmx5IG9uZSB1c2VyIGF0XFxuLS1cXG5tbS9zaG1lbS5jPTE1OTE9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLFxcbi0tXFxubW0vc2htZW0uYy0xNjU2LVxcdCAqIGdvb2QgaWRlYSB0byBjb250aW51ZSBhbnl3YXksIG9uY2Ugd2UncmUgcHVzaGluZyBpbnRvIHN3YXAuICBTb1xcbm1tL3NobWVtLmM6MTY1NzpcXHQgKiByZWFjdGl2YXRlIHRoZSBmb2xpbywgYW5kIGxldCBzaG1lbV9mYWxsb2NhdGUoKSBxdWl0IHdoZW4gdG9vIG1hbnkuXFxubW0vc2htZW0uYy0xNjU4LVxcdCAqL1xcbi0tXFxubW0vc2htZW0uYz0yNjQzPXN0YXRpYyB2bV9mYXVsdF90IHNobWVtX2ZhbGxvY193YWl0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxubW0vc2htZW0uYy0yNjY2LVxcdFxcdC8qXFxubW0vc2htZW0uYzoyNjY3OlxcdFxcdCAqIHNobWVtX2ZhbGxvY193YWl0cSBwb2ludHMgaW50byB0aGUgc2htZW1fZmFsbG9jYXRlKClcXG5tbS9zaG1lbS5jLTI2NjgtXFx0XFx0ICogc3RhY2sgb2YgdGhlIGhvbGUtcHVuY2hpbmcgdGFzazogc2htZW1fZmFsbG9jX3dhaXRxXFxuLS1cXG5tbS9zaG1lbS5jPTM1Nzc9c3RhdGljIGxvZmZfdCBzaG1lbV9maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcXG4tLVxcbm1tL3NobWVtLmMtMzU5Ni1cXG5tbS9zaG1lbS5jOjM1OTc6c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG5tbS9zaG1lbS5jLTM1OTgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBsZW4pXFxuLS1cXG5tbS9zaG1lbS5jPTUxNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htZW1fZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxubW0vc2htZW0uYy01MTU1LVxcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxubW0vc2htZW0uYzo1MTU2OlxcdC5mYWxsb2NhdGVcXHQ9IHNobWVtX2ZhbGxvY2F0ZSxcXG5tbS9zaG1lbS5jLTUxNTctXFx0LnNldGxlYXNlXFx0PSBnZW5lcmljX3NldGxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDo1MS4wMjI2NTMyMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5OTIwNDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzaG1lbV9mYWxsb2NhdGVgIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2tpbmcgZG93biB3aGVyZSBgc2htZW1fZmFsbG9jYXRlYCBpcyBkZWZpbmVkLiBMaW5lIDM1OTcsIGdvdCBpdC4gQW5kIHRoYXQncyAqYmVmb3JlKiB0aGF0IGAjZWxzZSAvKiAhQ09ORklHX1NITUVNICovYCBibG9jayBhdCBsaW5lIDU2OTguIFRoYXQgcHJldHR5IG11Y2ggY29uZmlybXMgd2hhdCBJIHN1c3BlY3RlZDogYENPTkZJR19TSE1FTWAgaXMgYWJzb2x1dGVseSByZXF1aXJlZCBmb3IgYHNobWVtX2ZhbGxvY2F0ZWAgdG8gZXZlbiBiZSBjb21waWxlZCBpbi4gVGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSB2ZXJ5IGNsZWFyLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgQ09ORklHX1NITUVNYCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHR5cGljYWwga2VybmVsIGNvbmZpZ3VyYXRpb24/IEl0IHVzdWFsbHkgaXMsIGFzIGZhciBhcyBJIHJlY2FsbCBmcm9tIG15IHByZXZpb3VzIHdvcmsuIEJ1dCBsZXQncyBub3QgcmVseSBvbiBtZW1vcnkgYWxvbmUuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBtb3N0IHJlbGlhYmxlIHBsYWNlIHRvIGNoZWNrIHRoaXMgaXMgYGluaXQvS2NvbmZpZ2AuIFRpbWUgdG8gY29uc3VsdCB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NjQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDo1NS4xMjE4NjE5MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTA1NTI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0hNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODg3PWNvbmZpZyBFVkVOVEZEXFxuLS1cXG5pbml0L0tjb25maWctMTg5NS1cXG5pbml0L0tjb25maWc6MTg5Njpjb25maWcgU0hNRU1cXG5pbml0L0tjb25maWctMTg5Ny1cXHRib29sIFxcXCJVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6NTUuMzAyOTI1NDQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDgzODYzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgQm9vbGVhbiBGbGFnKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBhIG5ldyBmbGFnLCBhbmQgSSdtIGd1ZXNzaW5nIGl0J3MgYSBib29sZWFuLiBUaGUgaW1wbGllZCBkZWZhdWx0IGlzIGFsbW9zdCBjZXJ0YWlubHkgXCJ5ZXMsXCIgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSB1c3VhbCBsb2NhdGlvbiBmb3IgZGVmaW5pbmcgYW5kIGNvbmZpZ3VyaW5nIGtlcm5lbCBmZWF0dXJlcywgYW5kIGl0IHNob3VsZCBob2xkIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgdGhlIGBTSE1FTWAgZGVmYXVsdCB2YWx1ZSwgaWYgdGhlcmUgaXMgYW55LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5nIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODM1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6NTkuMDUxMzE3NTg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM1NzM1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTg4Nz1jb25maWcgRVZFTlRGRFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4OTUtXFxuaW5pdC9LY29uZmlnOjE4OTY6Y29uZmlnIFNITUVNXFxuaW5pdC9LY29uZmlnLTE4OTctXFx0Ym9vbCBcXFwiVXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjU5LjMwNDg5Nzg0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDExNjQ3MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gW3ByZXN1bWFibHkgYSByZWxhdGVkIGNvbmNlcHQgdGhlIHVzZXIgaXMgaW50ZXJlc3RlZCBpbiwgdGhvdWdoIG5vdCBleHBsaWNpdGx5IHN0YXRlZF0/IEkgaW1tZWRpYXRlbHkgaG9uZWQgaW4gb24gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEdpdmVuIHRoZSBicmVhZHRoIG9mIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCwgSSdtIGd1ZXNzaW5nIHdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLCBvciBhdCBsZWFzdCBhIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQuIExldCBtZSBwdWxsIHVwIHRoYXQgZmlsZSBhbmQganVtcCBkaXJlY3RseSB0byBhcm91bmQgbGluZSAxODk2LiBUaGlzIHNwZWNpZmljIGZpbGUgYW5kIGxpbmUgYXJlIGEgZ29vZCBiZXQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBhcmVhcyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjAyLjMxNjU0OTUwMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4OTA6XFx0XFx0aGVscFxcbjE4OTE6XFx0XFx0ICBFbmFibGUgdGhlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byByZWNlaXZlIGJvdGhcXG4xODkyOlxcdFxcdCAga2VybmVsIG5vdGlmaWNhdGlvbiAoaWUuIEtBSU8pIG9yIHVzZXJzcGFjZSBub3RpZmljYXRpb25zLlxcbjE4OTM6XFx0XFxuMTg5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuMTg5NTpcXHRcXG4xODk2OlxcdGNvbmZpZyBTSE1FTVxcbjE4OTc6XFx0XFx0Ym9vbCBcXFwiVXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVxcXCIgaWYgRVhQRVJUXFxuMTg5ODpcXHRcXHRkZWZhdWx0IHlcXG4xODk5OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTkwMDpcXHRcXHRoZWxwXFxuMTkwMTpcXHRcXHQgIFRoZSBzaG1lbSBpcyBhbiBpbnRlcm5hbCBmaWxlc3lzdGVtIHVzZWQgdG8gbWFuYWdlIHNoYXJlZCBtZW1vcnkuXFxuMTkwMjpcXHRcXHQgIEl0IGlzIGJhY2tlZCBieSBzd2FwIGFuZCBtYW5hZ2VzIHJlc291cmNlIGxpbWl0cy4gSXQgaXMgYWxzbyBleHBvcnRlZFxcbjE5MDM6XFx0XFx0ICB0byB1c2Vyc3BhY2UgYXMgdG1wZnMgaWYgVE1QRlMgaXMgZW5hYmxlZC4gRGlzYWJsaW5nIHRoaXNcXG4xOTA0OlxcdFxcdCAgb3B0aW9uIHJlcGxhY2VzIHNobWVtIGFuZCB0bXBmcyB3aXRoIHRoZSBtdWNoIHNpbXBsZXIgcmFtZnMgY29kZSxcXG4xOTA1OlxcdFxcdCAgd2hpY2ggbWF5IGJlIGFwcHJvcHJpYXRlIG9uIHNtYWxsIHN5c3RlbXMgd2l0aG91dCBzd2FwLlxcbjE5MDY6XFx0XFxuMTkwNzpcXHRjb25maWcgQUlPXFxuMTkwODpcXHRcXHRib29sIFxcXCJFbmFibGUgQUlPIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE5MDk6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjAyLjMxNzAxNjA1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ2Njc0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBTaGFyZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IHN5c3RlbSBkZWZhdWx0cyB0byB1c2luZyBgU0hNRU1gLiBUaGF0IG1ha2VzIHNlbnNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgaW4gdGhpcyBjb250ZXh0PyBUaGlua2luZyBhYm91dCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHNoYXJlZCBtZW1vcnksIGBUTVBGU2AgaW1tZWRpYXRlbHkgY29tZXMgdG8gbWluZC4gSXQncyBvZnRlbiB1c2VkIHRvIHByb3ZpZGUgYSBmaWxlc3lzdGVtIGludGVyZmFjZSB0byBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZS5cblxuUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBmcy9LY29uZmlnYC4gVGhhdCBzaG91bGQgY29udGFpbiB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgYFRNUEZTYCwgYW5kIGhvcGVmdWxseSBpbGx1bWluYXRlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgU0hNRU1gIChvciB3aGV0aGVyIHRoZXJlJ3Mgc29tZSBvdmVybGFwIG9yIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbikgd2hpY2ggd291bGQgZ2l2ZSBtZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjA2LjQ2MzY5NjA2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MTkwNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTVBGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MTY1PXNvdXJjZSBcXFwiZnMvc3lzZnMvS2NvbmZpZ1xcXCJcXG5mcy9LY29uZmlnLTE2Ni1cXG5mcy9LY29uZmlnOjE2Nzpjb25maWcgVE1QRlNcXG5mcy9LY29uZmlnLTE2OC1cXHRib29sIFxcXCJUbXBmcyB2aXJ0dWFsIG1lbW9yeSBmaWxlIHN5c3RlbSBzdXBwb3J0IChmb3JtZXIgc2htIGZzKVxcXCJcXG4tLVxcbmZzL0tjb25maWctMTgwLVxcbmZzL0tjb25maWc6MTgxOmNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcXG5mcy9LY29uZmlnLTE4Mi1cXHRib29sIFxcXCJUbXBmcyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL0tjb25maWctMTk4LVxcbmZzL0tjb25maWc6MTk5OmNvbmZpZyBUTVBGU19YQVRUUlxcbmZzL0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlRtcGZzIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9LY29uZmlnLTIxMy1cXG5mcy9LY29uZmlnOjIxNDpjb25maWcgVE1QRlNfSU5PREU2NFxcbmZzL0tjb25maWctMjE1LVxcdGJvb2wgXFxcIlVzZSA2NC1iaXQgaW5vX3QgYnkgZGVmYXVsdCBpbiB0bXBmc1xcXCJcXG4tLVxcbmZzL0tjb25maWctMjM0LVxcbmZzL0tjb25maWc6MjM1OmNvbmZpZyBUTVBGU19RVU9UQVxcbmZzL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlRtcGZzIHF1b3RhIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjA2LjY4OTkwNDk1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM2OTM0OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIHJlcXVlc3Qgc3VnZ2VzdHMgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHRvcGljIGF0IGhhbmQuIFwiZnMvS2NvbmZpZ1wiIGlzIHRoZSBrZXkgZmlsZSBoZXJlLiBUaGF0IG5hcnJvd3MgaXQgZG93biBpbW1lZGlhdGVseSB0byBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMaW5lIDE2NyBpcyBvdXIgdGFyZ2V0LiBJdCdzIHVzdWFsbHkgYSBnb29kIHByYWN0aWNlIHRvIHN0YXJ0IG5lYXIgdGhlIHN1Z2dlc3RlZCBsaW5lIG51bWJlciwgYW5kIG9mdGVuIHNjYW4gYSBsaXR0bGUgYWJvdmUgb3IgYmVsb3cgdGhhdCBsaW5lLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdmFsdWFibGUgY29udGV4dC4gSXQgYWxzbyBpcyBhIGdvb2QgaWRlYSB0byBicmluZyB1cCBhbm90aGVyIHdpbmRvdyB0byBzZWFyY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSBidXJpZWQgd2l0aGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjU6MTAuMDI2ODQzNTQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRzb3VyY2UgXFxcImZzL3N5c2ZzL0tjb25maWdcXFwiXFxuIDE2NjpcXHRcXG4gMTY3OlxcdGNvbmZpZyBUTVBGU1xcbiAxNjg6XFx0XFx0Ym9vbCBcXFwiVG1wZnMgdmlydHVhbCBtZW1vcnkgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoZm9ybWVyIHNobSBmcylcXFwiXFxuIDE2OTpcXHRcXHRkZXBlbmRzIG9uIFNITUVNXFxuIDE3MDpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDE3MTpcXHRcXHRoZWxwXFxuIDE3MjpcXHRcXHQgIFRtcGZzIGlzIGEgZmlsZSBzeXN0ZW0gd2hpY2gga2VlcHMgYWxsIGZpbGVzIGluIHZpcnR1YWwgbWVtb3J5LlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIEV2ZXJ5dGhpbmcgaW4gdG1wZnMgaXMgdGVtcG9yYXJ5IGluIHRoZSBzZW5zZSB0aGF0IG5vIGZpbGVzIHdpbGwgYmVcXG4gMTc1OlxcdFxcdCAgY3JlYXRlZCBvbiB5b3VyIGhhcmQgZHJpdmUuIFRoZSBmaWxlcyBsaXZlIGluIG1lbW9yeSBhbmQgc3dhcFxcbiAxNzY6XFx0XFx0ICBzcGFjZS4gSWYgeW91IHVubW91bnQgYSB0bXBmcyBpbnN0YW5jZSwgZXZlcnl0aGluZyBzdG9yZWQgdGhlcmVpbiBpc1xcbiAxNzc6XFx0XFx0ICBsb3N0LlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDE4MDpcXHRcXG4gMTgxOlxcdGNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcXG4gMTgyOlxcdFxcdGJvb2wgXFxcIlRtcGZzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAxODM6XFx0XFx0ZGVwZW5kcyBvbiBUTVBGU1xcbiAxODQ6XFx0XFx0c2VsZWN0IFRNUEZTX1hBVFRSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjEwLjAyNzAxMTY2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODg4NTg5NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgYHNobWVtX2ZhbGxvY2F0ZWAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGFsbCBhYm91dCBgc2htZW1fZmFsbG9jYXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgc2V0dXAg4oCTIHNvLCB5ZXMsIGBUTVBGU2AgaXMgcmVxdWlyZWQgdG8gbW91bnQgYSB0bXBmcyBmaWxlc3lzdGVtLCBhbmQgd2UnbGwgbmVlZCBgU0hNRU1gIGFzIHdlbGwuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBwYXRjaCBtb2RpZmllcyBgc2htZW1fZmFsbG9jYXRlYCwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50IGZvciBgZmFsbG9jYXRlYCBvbiBzaGFyZWQgbWVtb3J5IChzaG1lbSkuIEkgYnJpZWZseSBjb25zaWRlcmVkIG90aGVyIGZ1bmN0aW9ucywgYnV0IGl0J3MgY2xlYXIgdGhhdCBgc2htZW1fZmFsbG9jYXRlYCBpcyB0aGUgb25seSBvbmUgYmVpbmcgdG91Y2hlZC5cblxuTm93LCBhIGNydWNpYWwgcG9pbnQ6IGBzaG1lbV9mYWxsb2NhdGVgIGlzICpzdGF0aWMqLCB3aGljaCBpbml0aWFsbHkgZ2F2ZSBtZSBwYXVzZS4gQnV0LCBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCdzIG5vdCBpbmxpbmVkIGFuZCB0aHVzIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCBkZXNwaXRlIGl0cyBzdGF0aWMgbmF0dXJlLCBgc2htZW1fZmFsbG9jYXRlYCBpcyB0aGUgcmlnaHQgZm9jdXMuIEknbSBnb2luZyB0byBzZXQgYEZvY3VzU3ltYm9sYCB0byBgXCJzaG1lbV9mYWxsb2NhdGVcImAgYmVjYXVzZSBpdCdzIHRoZSBzcGVjaWZpYyB0YXJnZXQuIEknbGwgYWxzbyBhZGQgYFwiU0hNRU1cImAgYW5kIGBcIlRNUEZTXCJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gc3BlY2lmeSB0aGF0IHRoZXNlIGFyZSByZXF1aXJlbWVudHMuXG5cbkkgZGlkIGEgZG91YmxlIGNoZWNrIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0J3MgdGhlIG9ubHkgbW9kaWZpZWQgZnVuY3Rpb24uIFllcywganVzdCBgc2htZW1fZmFsbG9jYXRlYC5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgcGF0Y2guIFRoZSBjb3JlIGlzc3VlIGlzIGEgcG90ZW50aWFsIG92ZXJmbG93IG9yIGV4Y2VlZGFuY2Ugb2YgdG90YWwgUkFNICsgc3dhcCBieSBgbnJfcGFnZXNgIHdpdGhpbiBgc2htZW1fZmFsbG9jYXRlYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjazogYG5yX3BhZ2VzIFx1MDAzZSBMT05HX01BWGAgb3IgYG5yX3BhZ2VzIFx1MDAzZSB0b3RhbHJhbV9wYWdlcygpICsgdG90YWxfc3dhcF9wYWdlc2AuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgKHNobWVtL3RtcGZzKSwgYW5kIGl0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiBhIHRtcGZzIGZpbGUuIE15IGV4cGVydCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBuZWVkcyBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBuZXcgYm91bmRzIGNoZWNraW5nIGFuZCBlbnN1cmUgdGhhdCBubyByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4gU28sIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjcsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjU6MTguOTE1NjA1NTE2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NzQ2MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTSE1FTVwiLFxuICAgIFwiVE1QRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9mYWxsb2NhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2htZW1fZmFsbG9jYXRlYCB0byBhZGQgYm91bmRzIGNoZWNraW5nIGZvciBgbnJfcGFnZXNgIHRvIHByZXZlbnQgb3ZlcmZsb3cgb3IgZXhjZWVkaW5nIHRvdGFsIFJBTSBhbmQgc3dhcCBzcGFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoc2htZW0vdG1wZnMpIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiBhIHRtcGZzIGZpbGUuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYm91bmRzIGNoZWNraW5nIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0hNRU1cIixcbiAgICBcIlRNUEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fZmFsbG9jYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNobWVtX2ZhbGxvY2F0ZWAgdG8gYWRkIGJvdW5kcyBjaGVja2luZyBmb3IgYG5yX3BhZ2VzYCB0byBwcmV2ZW50IG92ZXJmbG93IG9yIGV4Y2VlZGluZyB0b3RhbCBSQU0gYW5kIHN3YXAgc3BhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKHNobWVtL3RtcGZzKSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBmYWxsb2NhdGVgIHN5c2NhbGwgb24gYSB0bXBmcyBmaWxlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGJvdW5kcyBjaGVja2luZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 12:54:09 +0000 UTC FinishedAt: 2026-07-28 13:25:20 +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": "c9b47e6b23114e939b17f818471c7a46e59006e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM", "TMPFS" ], "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": "c9b47e6b23114e939b17f818471c7a46e59006e7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SHMEM", "TMPFS" ], "series_id": "5bb58f7b-bcc1-4f41-bf66-4d26b45540b5" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_fallocate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzRhMTc1MzZkNzc1MmY1ODQ1M2E4ZGUwYmYzOGJmMzY1MmUyMjVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTM6MjQ6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li5kNjI2NTYxZDQ2ZGI3ZSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0zNjAxLDcgJiM0MzszNjAxLDggQEAgc3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4gXHRzdHJ1Y3Qgc2htZW1fZmFsbG9jIHNobWVtX2ZhbGxvYztcbi1cdHBnb2ZmX3Qgc3RhcnQsIGluZGV4LCBlbmQsIHVuZG9fZmFsbG9jZW5kO1xuJiM0MztcdHBnb2ZmX3Qgc3RhcnQsIGluZGV4LCBlbmQsIG5yX3BhZ2VzLCB1bmRvX2ZhbGxvY2VuZDtcbiYjNDM7XHRsb2ZmX3QgZW5kX3BvcztcbiBcdGludCBlcnJvcjtcbiBcbiBcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkpXG5AQCAtMzY0OSwyMyAmIzQzOzM2NTAsMjkgQEAgc3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbiBcdH1cbiBcbiBcdC8qIFdlIG5lZWQgdG8gY2hlY2sgcmxpbWl0IGV2ZW4gd2hlbiBGQUxMT0NfRkxfS0VFUF9TSVpFICovXG4tXHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIG9mZnNldCAmIzQzOyBsZW4pO1xuJiM0MztcdGVuZF9wb3MgPSBvZmZzZXQgJiM0MzsgbGVuO1xuJiM0MztcdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgZW5kX3Bvcyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKChpbmZvLVx1MDAzZXNlYWxzIFx1MDAyNiBGX1NFQUxfR1JPVykgXHUwMDI2XHUwMDI2IG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuJiM0MztcdGlmICgoaW5mby1cdTAwM2VzZWFscyBcdTAwMjYgRl9TRUFMX0dST1cpIFx1MDAyNlx1MDAyNiBlbmRfcG9zIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbiBcdFx0ZXJyb3IgPSAtRVBFUk07XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0c3RhcnQgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRlbmQgPSAob2Zmc2V0ICYjNDM7IGxlbiAmIzQzOyBQQUdFX1NJWkUgLSAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRlbmQgPSAoKHU2NCllbmRfcG9zICYjNDM7IFBBR0VfU0laRSAtIDEpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XG4gXHQvKiBUcnkgdG8gYXZvaWQgYSBzd2Fwc3Rvcm0gaWYgbGVuIGlzIGltcG9zc2libGUgdG8gc2F0aXNmeSAqL1xuLVx0aWYgKHNiaW5mby1cdTAwM2VtYXhfYmxvY2tzIFx1MDAyNlx1MDAyNiBlbmQgLSBzdGFydCBcdTAwM2Ugc2JpbmZvLVx1MDAzZW1heF9ibG9ja3MpIHtcbiYjNDM7XHRpZiAoc2JpbmZvLVx1MDAzZW1heF9ibG9ja3MgXHUwMDI2XHUwMDI2IG5yX3BhZ2VzIFx1MDAzZSBzYmluZm8tXHUwMDNlbWF4X2Jsb2Nrcykge1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChucl9wYWdlcyBcdTAwM2UgTE9OR19NQVggfHxcbiYjNDM7XHQgICAgbnJfcGFnZXMgXHUwMDNlIHRvdGFscmFtX3BhZ2VzKCkgJiM0MzsgdG90YWxfc3dhcF9wYWdlcykge1xuIFx0XHRlcnJvciA9IC1FTk9TUEM7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuLVxuIFx0c2htZW1fZmFsbG9jLndhaXRxID0gTlVMTDtcbiBcdHNobWVtX2ZhbGxvYy5zdGFydCA9IHN0YXJ0O1xuIFx0c2htZW1fZmFsbG9jLm5leHQgID0gc3RhcnQ7XG5AQCAtMzY5OSw3ICYjNDM7MzcwNiw3IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRcdGVsc2UgaWYgKHNobWVtX2ZhbGxvYy5ucl91bnN3YXBwZWQgXHUwMDNlIHNobWVtX2ZhbGxvYy5ucl9mYWxsb2NlZClcbiBcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4gXHRcdGVsc2Vcbi1cdFx0XHRlcnJvciA9IHNobWVtX2dldF9mb2xpbyhpbm9kZSwgaW5kZXgsIG9mZnNldCAmIzQzOyBsZW4sXG4mIzQzO1x0XHRcdGVycm9yID0gc2htZW1fZ2V0X2ZvbGlvKGlub2RlLCBpbmRleCwgZW5kX3BvcyxcbiBcdFx0XHRcdFx0XHRcdTAwMjZmb2xpbywgU0dQX0ZBTExPQyk7XG4gXHRcdGlmIChlcnJvcikge1xuIFx0XHRcdGluZm8tXHUwMDNlZmFsbG9jZW5kID0gdW5kb19mYWxsb2NlbmQ7XG5AQCAtMzc0Myw4ICYjNDM7Mzc1MCw4IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuLVx0aWYgKCEobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXHUwMDI2XHUwMDI2IG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbi1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgJiM0MzsgbGVuKTtcbiYjNDM7XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjYgZW5kX3BvcyBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplKVxuJiM0MztcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBlbmRfcG9zKTtcbiB1bmRvbmU6XG4gXHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiBcdGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMzRhMTc1MzZkNzc1MmY1ODQ1M2E4ZGUwYmYzOGJmMzY1MmUyMjVhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMTM6MjQ6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCBiNTFmODNjOTcwYmIzNy4uZDYyNjU2MWQ0NmRiN2UgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMzYwMSw3ICYjNDM7MzYwMSw4IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwogCXN0cnVjdCBzaG1lbV9mYWxsb2Mgc2htZW1fZmFsbG9jOwotCXBnb2ZmX3Qgc3RhcnQsIGluZGV4LCBlbmQsIHVuZG9fZmFsbG9jZW5kOwomIzQzOwlwZ29mZl90IHN0YXJ0LCBpbmRleCwgZW5kLCBucl9wYWdlcywgdW5kb19mYWxsb2NlbmQ7CiYjNDM7CWxvZmZfdCBlbmRfcG9zOwogCWludCBlcnJvcjsKIAogCWlmIChtb2RlICZhbXA7IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFKSkKQEAgLTM2NDksMjMgJiM0MzszNjUwLDI5IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJfQogCiAJLyogV2UgbmVlZCB0byBjaGVjayBybGltaXQgZXZlbiB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgKi8KLQllcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIG9mZnNldCAmIzQzOyBsZW4pOwomIzQzOwllbmRfcG9zID0gb2Zmc2V0ICYjNDM7IGxlbjsKJiM0MzsJZXJyb3IgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBlbmRfcG9zKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCi0JaWYgKChpbmZvLSZndDtzZWFscyAmYW1wOyBGX1NFQUxfR1JPVykgJmFtcDsmYW1wOyBvZmZzZXQgJiM0MzsgbGVuICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkgewomIzQzOwlpZiAoKGluZm8tJmd0O3NlYWxzICZhbXA7IEZfU0VBTF9HUk9XKSAmYW1wOyZhbXA7IGVuZF9wb3MgJmd0OyBpbm9kZS0mZ3Q7aV9zaXplKSB7CiAJCWVycm9yID0gLUVQRVJNOwogCQlnb3RvIG91dDsKIAl9CiAKIAlzdGFydCA9IG9mZnNldCAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwotCWVuZCA9IChvZmZzZXQgJiM0MzsgbGVuICYjNDM7IFBBR0VfU0laRSAtIDEpICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CWVuZCA9ICgodTY0KWVuZF9wb3MgJiM0MzsgUEFHRV9TSVpFIC0gMSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJbnJfcGFnZXMgPSBlbmQgLSBzdGFydDsKIAkvKiBUcnkgdG8gYXZvaWQgYSBzd2Fwc3Rvcm0gaWYgbGVuIGlzIGltcG9zc2libGUgdG8gc2F0aXNmeSAqLwotCWlmIChzYmluZm8tJmd0O21heF9ibG9ja3MgJmFtcDsmYW1wOyBlbmQgLSBzdGFydCAmZ3Q7IHNiaW5mby0mZ3Q7bWF4X2Jsb2NrcykgewomIzQzOwlpZiAoc2JpbmZvLSZndDttYXhfYmxvY2tzICZhbXA7JmFtcDsgbnJfcGFnZXMgJmd0OyBzYmluZm8tJmd0O21heF9ibG9ja3MpIHsKJiM0MzsJCWVycm9yID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWlmIChucl9wYWdlcyAmZ3Q7IExPTkdfTUFYIHx8CiYjNDM7CSAgICBucl9wYWdlcyAmZ3Q7IHRvdGFscmFtX3BhZ2VzKCkgJiM0MzsgdG90YWxfc3dhcF9wYWdlcykgewogCQllcnJvciA9IC1FTk9TUEM7CiAJCWdvdG8gb3V0OwogCX0KLQogCXNobWVtX2ZhbGxvYy53YWl0cSA9IE5VTEw7CiAJc2htZW1fZmFsbG9jLnN0YXJ0ID0gc3RhcnQ7CiAJc2htZW1fZmFsbG9jLm5leHQgID0gc3RhcnQ7CkBAIC0zNjk5LDcgJiM0MzszNzA2LDcgQEAgc3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwKIAkJZWxzZSBpZiAoc2htZW1fZmFsbG9jLm5yX3Vuc3dhcHBlZCAmZ3Q7IHNobWVtX2ZhbGxvYy5ucl9mYWxsb2NlZCkKIAkJCWVycm9yID0gLUVOT01FTTsKIAkJZWxzZQotCQkJZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIGluZGV4LCBvZmZzZXQgJiM0MzsgbGVuLAomIzQzOwkJCWVycm9yID0gc2htZW1fZ2V0X2ZvbGlvKGlub2RlLCBpbmRleCwgZW5kX3BvcywKIAkJCQkJCSZhbXA7Zm9saW8sIFNHUF9GQUxMT0MpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWluZm8tJmd0O2ZhbGxvY2VuZCA9IHVuZG9fZmFsbG9jZW5kOwpAQCAtMzc0Myw4ICYjNDM7Mzc1MCw4IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsCiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAotCWlmICghKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX0tFRVBfU0laRSkgJmFtcDsmYW1wOyBvZmZzZXQgJiM0MzsgbGVuICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkKLQkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgJiM0MzsgbGVuKTsKJiM0MzsJaWYgKCEobW9kZSAmYW1wOyBGQUxMT0NfRkxfS0VFUF9TSVpFKSAmYW1wOyZhbXA7IGVuZF9wb3MgJmd0OyBpbm9kZS0mZ3Q7aV9zaXplKQomIzQzOwkJaV9zaXplX3dyaXRlKGlub2RlLCBlbmRfcG9zKTsKIHVuZG9uZToKIAlzcGluX2xvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKIAlpbm9kZS0mZ3Q7aV9wcml2YXRlID0gTlVMTDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IHNobWVtX2ZhbGxvY2F0ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgc2htZW1fZmFsbG9jYXRlYCB3aXRoaW4gYG1tL3NobWVtLmNgLiAgTXkgZmlyc3Qgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCYjMzk7cyBtb2RpZnlpbmcgYSBjb3JlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIHNobWVtL3RtcGZzIHN1YnN5c3RlbSwgc28gdGhpcyB3YXJyYW50cyBjbG9zZSBhdHRlbnRpb24uICBUaGUgY2hhbmdlcyBmb2N1cyBvbiBob3cgYGVuZGAgYW5kIGBucl9wYWdlc2AgYXJlIGNvbXB1dGVkIGFuZCB2YWxpZGF0ZWQuIFRoZSBhZGRpdGlvbiBvZiB0aGlzIGNoZWNrIGlzIGludGVyZXN0aW5nOgoKYGBgYwoJaWYgKG5yX3BhZ2VzICZndDsgTE9OR19NQVggfHwKCSAgICBucl9wYWdlcyAmZ3Q7IHRvdGFscmFtX3BhZ2VzKCkgJiM0MzsgdG90YWxfc3dhcF9wYWdlcykgewoJCWVycm9yID0gLUVOT1NQQzsKCQlnb3RvIG91dDsKCX0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBob3cgbWVtb3J5IGFsbG9jYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gc2htZW0sIHdoaWNoIG1lYW5zIHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkIHRob3JvdWdobHkuIFRoZSB0YXJnZXQgaXMgdGhlIGBzaG1lbV9mYWxsb2NhdGVgIGZ1bmN0aW9uIGl0c2VsZi4gTm93LCBhIGNyaXRpY2FsIGNvbnNpZGVyYXRpb24gZm9yIGZ1enppbmcgZWZmZWN0aXZlbmVzcyBpcyBzeW1ib2wgdmlzaWJpbGl0eS4gSSBuZWVkIHRvIGtub3cgaWYgYHNobWVtX2ZhbGxvY2F0ZWAgaXMgc3RhdGljIG9yIG5vdC4gTG9va2luZyBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiwgaXQgaXMgaW5kZWVkIGRlZmluZWQgYXMgYHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIC4uLilgISBIbW0sIGJlaW5nIHN0YXRpYyBtaWdodCBtYWtlIGl0IGxlc3MgdGhhbiBpZGVhbCBhcyBhIGBGb2N1c1N5bWJvbGAgZm9yIGZ1enppbmcsIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSBhcHByb2FjaC4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aXRoaW4gYG1tL3NobWVtLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgZ29vZCBlbnRyeXBvaW50cyBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9mYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NDY9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XG4tLVxubW0vc2htZW0uYy0xMDAtLypcbm1tL3NobWVtLmM6MTAxOiAqIHNobWVtX2ZhbGxvY2F0ZSBjb21tdW5pY2F0ZXMgd2l0aCBzaG1lbV9mYXVsdCBvciBzaG1lbV93cml0ZW91dCB2aWFcbm1tL3NobWVtLmMtMTAyLSAqIGlub2RlLVx1MDAzZWlfcHJpdmF0ZSAod2l0aCBpX3J3c2VtIG1ha2luZyBzdXJlIHRoYXQgaXQgaGFzIG9ubHkgb25lIHVzZXIgYXRcbi0tXG5tbS9zaG1lbS5jPTE1OTE9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLFxuLS1cbm1tL3NobWVtLmMtMTY1Ni1cdCAqIGdvb2QgaWRlYSB0byBjb250aW51ZSBhbnl3YXksIG9uY2Ugd2UmIzM5O3JlIHB1c2hpbmcgaW50byBzd2FwLiAgU29cbm1tL3NobWVtLmM6MTY1NzpcdCAqIHJlYWN0aXZhdGUgdGhlIGZvbGlvLCBhbmQgbGV0IHNobWVtX2ZhbGxvY2F0ZSgpIHF1aXQgd2hlbiB0b28gbWFueS5cbm1tL3NobWVtLmMtMTY1OC1cdCAqL1xuLS1cbm1tL3NobWVtLmM9MjY0Mz1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYWxsb2Nfd2FpdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5tbS9zaG1lbS5jLTI2NjYtXHRcdC8qXG5tbS9zaG1lbS5jOjI2Njc6XHRcdCAqIHNobWVtX2ZhbGxvY193YWl0cSBwb2ludHMgaW50byB0aGUgc2htZW1fZmFsbG9jYXRlKClcbm1tL3NobWVtLmMtMjY2OC1cdFx0ICogc3RhY2sgb2YgdGhlIGhvbGUtcHVuY2hpbmcgdGFzazogc2htZW1fZmFsbG9jX3dhaXRxXG4tLVxubW0vc2htZW0uYz0zNTc3PXN0YXRpYyBsb2ZmX3Qgc2htZW1fZmlsZV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpXG4tLVxubW0vc2htZW0uYy0zNTk2LVxubW0vc2htZW0uYzozNTk3OnN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG5tbS9zaG1lbS5jLTM1OTgtXHRcdFx0XHRcdFx0XHQgbG9mZl90IGxlbilcbi0tXG5tbS9zaG1lbS5jPTUxNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htZW1fZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbm1tL3NobWVtLmMtNTE1NS1cdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbm1tL3NobWVtLmM6NTE1NjpcdC5mYWxsb2NhdGVcdD0gc2htZW1fZmFsbG9jYXRlLFxubW0vc2htZW0uYy01MTU3LVx0LnNldGxlYXNlXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c1N5bWJvbCBDb25zaWRlcmF0aW9ucyBmb3Igc2htZW1fZmFsbG9jYXRlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGBzaG1lbV9mYWxsb2NhdGVgIGZ1bmN0aW9uLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIGluaXRpYWxseSBtYWRlIG1lIHBhdXNlIGFib3V0IGl0cyBzdWl0YWJpbGl0eSBhcyBhIEZvY3VzU3ltYm9sLiBNeSBmaXJzdCB0aG91Z2h0IHdhcyB0aGF0IGEgc3RhdGljIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBhIGdyZWF0IGNob2ljZS4gSSBzdGFydGVkIGJ5IHRyYWNpbmcgdGhlIHVzYWdlLCBub3RpbmcgdGhhdCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgLmZhbGxvY2F0ZWAgd2l0aGluIHRoZSBgc2htZW1fZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3QuCgpNeSBuZXh0IHN0ZXAgd2FzIHRvIHNlZSBpZiB0aGVyZSB3YXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIGBzaG1lbV9maWxlX29wZXJhdGlvbnNgIHN0cnVjdC4gSSByZW1lbWJlcmVkIGl0JiMzOTtzIGEgZmlsZSBvcGVyYXRpb24sIHNvIGl0JiMzOTtzIGludm9rZWQgdGhyb3VnaCBgdmZzX2ZhbGxvY2F0ZWAsIHdoaWNoIGxpdmVzIGluIGBmcy9vcGVuLmNgLiBJIGNoZWNrZWQgaWYgYHNobWVtX2ZhbGxvY2F0ZWAgd2FzIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgLSBpdCYjMzk7cyBub3QuIEkgY29uc2lkZXJlZCB0aGF0IGV2ZW4gYmVpbmcgc3RhdGljLCBTeXprYWxsZXIgY291bGQgc3RpbGwgdGFyZ2V0IGl0IHRocm91Z2ggdGhlIGBmYWxsb2NhdGVgIHN5c2NhbGwgb24gdG1wZnMvc2htZW0gZmlsZXMuIFN0aWxsLCB0aGUgaW5zdHJ1Y3Rpb25zIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuCgpUaGVuIHRoZSBrZXkgcmVhbGl6YXRpb24gaGl0IG1lLiBFdmVuIHRob3VnaCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYCwgaXQgKmlzKiB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHNobWVtX2ZpbGVfb3BlcmF0aW9uc2AuIFRoaXMgbWVhbnMgaXQgKndvbiYjMzk7dCogYmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEl0IGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBTbywgZGVzcGl0ZSBpdHMgYHN0YXRpY2AgZGVjbGFyYXRpb24sIGl0IGlzIHBlcmZlY3RseSBmaW5lIGFzIGEgRm9jdXNTeW1ib2wuIFRoaXMgbWFrZXMgaXQgYSB2aWFibGUgY2FuZGlkYXRlLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4gRnJvbSBsb29raW5nIGF0IGBtbS9zaG1lbS5jYCwgaXQmIzM5O3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX1NITUVNYCBlbmFibGVkLCB3aGljaCBpcyBwcmFjdGljYWxseSBhbHdheXMgdGhlIGNhc2UuIFNvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhcmUgbWluaW1hbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBieSBjaGVja2luZyB0aGUgYG1tL01ha2VmaWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTUzLVx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbm1tL01ha2VmaWxlOjU0Olx0XHRcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcbm1tL01ha2VmaWxlLTU1LVx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG4tLVxubW0vTWFrZWZpbGU9MTQ3PW9iai0kKENPTkZJR19FWEVDTUVNKSAmIzQzOz0gZXhlY21lbS5vXG5tbS9NYWtlZmlsZToxNDg6b2JqLSQoQ09ORklHX1RNUEZTX1FVT1RBKSAmIzQzOz0gc2htZW1fcXVvdGEub1xubW0vTWFrZWZpbGUtMTQ5LW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICYjNDM7PSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQ4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgc2htZW0ub2AqKgoKT2theSwgc28gYHNobWVtLm9gIGlzIGRlZmluaXRlbHkgZ2V0dGluZyBjb21waWxlZCBiZWNhdXNlIGl0JiMzOTtzIGxpc3RlZCBpbiBgb2JqLXlgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmV4dGVudCogb2YgaXRzIGNvbXBpbGF0aW9uLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdGhlIGBDT05GSUdfU0hNRU1gIG9wdGlvbiBwbGF5cyBhIHJvbGUgaGVyZS4gRG9lcyBpdCBtZWFuIHRoYXQgdGhlIGJhc2Ugb2JqZWN0IGlzICphbHdheXMqIGNvbXBpbGVkLCBidXQgaXRzIGZ1bGwgZnVuY3Rpb25hbGl0eSBpcyBkZXBlbmRlbnQgb24gdGhlIGNvbmZpZz8gT3IgcGVyaGFwcyBpdCBhZmZlY3RzIGluY2x1c2lvbiBvZiB0aGUgc291cmNlIGZpbGUgZW50aXJlbHk/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgYmVjYXVzZSBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSBpbiBgc2htZW0uY2AuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiBgbW0vc2htZW0uY2AgaXRzZWxmLiBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGF0IGBDT05GSUdfU0hNRU1gIG1hY3JvIGlzIHVzZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQmIzM5O3MgYWZmZWN0aW5nIHRoZSBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NDY9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XG5tbS9zaG1lbS5jLTQ3LVxubW0vc2htZW0uYzo0ODojaWZkZWYgQ09ORklHX1NITUVNXG5tbS9zaG1lbS5jLTQ5LS8qXG4tLVxubW0vc2htZW0uYz01Njk0PV9fc2V0dXAoXCYjMzQ7dGhwX3NobWVtPVwmIzM0Oywgc2V0dXBfdGhwX3NobWVtKTtcbi0tXG5tbS9zaG1lbS5jLTU2OTctXG5tbS9zaG1lbS5jOjU2OTg6I2Vsc2UgLyogIUNPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01Njk5LVxuLS1cbm1tL3NobWVtLmM9NTc2Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbm1tL3NobWVtLmMtNTc3NC1cbm1tL3NobWVtLmM6NTc3NTojZW5kaWYgLyogQ09ORklHX1NITUVNICovXG5tbS9zaG1lbS5jLTU3NzYtXG4tLVxubW0vc2htZW0uYz01OTI5PXN0cnVjdCBmb2xpbyAqc2htZW1fcmVhZF9mb2xpb19nZnAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vc2htZW0uYy01OTMxLXtcbm1tL3NobWVtLmM6NTkzMjojaWZkZWYgQ09ORklHX1NITUVNXG5tbS9zaG1lbS5jLTU5MzMtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU0hNRU0gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBzZWUgdGhhdCBgQ09ORklHX1NITUVNYCBpcyAqZXNzZW50aWFsKiBpZiBJIHdhbnQgdG8gdXNlIGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBpbiBgc2htZW0uY2AuIFRoYXQmIzM5O3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGJ1dCBpdCYjMzk7cyBnb29kIHRvIGNvbmZpcm0uIE5vdywgSSBuZWVkIHRvIHNwZWNpZmljYWxseSBsb29rIGF0IGhvdyBgc2htZW1fZmFsbG9jYXRlYCBmaXRzIGludG8gdGhpcy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBub3QuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgc2htZW1fZmFsbG9jYXRlYCBpcyBndWFyZGVkIGJ5IHRoZSBgQ09ORklHX1NITUVNYCBwcmVwcm9jZXNzb3IgbWFjcm8uIFRoYXQgd2lsbCB0ZWxsIG1lIGlmIEkgbmVlZCB0aGF0IGNvbmZpZyBvcHRpb24gZW5hYmxlZCBmb3IgZnVsbCBhY2Nlc3MgdG8gaXQsIGFuZCB0aGUgZnVsbCBleHRlbnQgb2YgdGhlIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2ZhbGxvY2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz00Nj1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9zaG1lbS5jLTEwMC0vKlxubW0vc2htZW0uYzoxMDE6ICogc2htZW1fZmFsbG9jYXRlIGNvbW11bmljYXRlcyB3aXRoIHNobWVtX2ZhdWx0IG9yIHNobWVtX3dyaXRlb3V0IHZpYVxubW0vc2htZW0uYy0xMDItICogaW5vZGUtXHUwMDNlaV9wcml2YXRlICh3aXRoIGlfcndzZW0gbWFraW5nIHN1cmUgdGhhdCBpdCBoYXMgb25seSBvbmUgdXNlciBhdFxuLS1cbm1tL3NobWVtLmM9MTU5MT1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsXG4tLVxubW0vc2htZW0uYy0xNjU2LVx0ICogZ29vZCBpZGVhIHRvIGNvbnRpbnVlIGFueXdheSwgb25jZSB3ZSYjMzk7cmUgcHVzaGluZyBpbnRvIHN3YXAuICBTb1xubW0vc2htZW0uYzoxNjU3Olx0ICogcmVhY3RpdmF0ZSB0aGUgZm9saW8sIGFuZCBsZXQgc2htZW1fZmFsbG9jYXRlKCkgcXVpdCB3aGVuIHRvbyBtYW55LlxubW0vc2htZW0uYy0xNjU4LVx0ICovXG4tLVxubW0vc2htZW0uYz0yNjQzPXN0YXRpYyB2bV9mYXVsdF90IHNobWVtX2ZhbGxvY193YWl0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL3NobWVtLmMtMjY2Ni1cdFx0Lypcbm1tL3NobWVtLmM6MjY2NzpcdFx0ICogc2htZW1fZmFsbG9jX3dhaXRxIHBvaW50cyBpbnRvIHRoZSBzaG1lbV9mYWxsb2NhdGUoKVxubW0vc2htZW0uYy0yNjY4LVx0XHQgKiBzdGFjayBvZiB0aGUgaG9sZS1wdW5jaGluZyB0YXNrOiBzaG1lbV9mYWxsb2Nfd2FpdHFcbi0tXG5tbS9zaG1lbS5jPTM1Nzc9c3RhdGljIGxvZmZfdCBzaG1lbV9maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcbi0tXG5tbS9zaG1lbS5jLTM1OTYtXG5tbS9zaG1lbS5jOjM1OTc6c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbm1tL3NobWVtLmMtMzU5OC1cdFx0XHRcdFx0XHRcdCBsb2ZmX3QgbGVuKVxuLS1cbm1tL3NobWVtLmM9NTE0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG1lbV9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxubW0vc2htZW0uYy01MTU1LVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxubW0vc2htZW0uYzo1MTU2Olx0LmZhbGxvY2F0ZVx0PSBzaG1lbV9mYWxsb2NhdGUsXG5tbS9zaG1lbS5jLTUxNTctXHQuc2V0bGVhc2VcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHNobWVtX2ZhbGxvY2F0ZWAgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGRvd24gd2hlcmUgYHNobWVtX2ZhbGxvY2F0ZWAgaXMgZGVmaW5lZC4gTGluZSAzNTk3LCBnb3QgaXQuIEFuZCB0aGF0JiMzOTtzICpiZWZvcmUqIHRoYXQgYCNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9gIGJsb2NrIGF0IGxpbmUgNTY5OC4gVGhhdCBwcmV0dHkgbXVjaCBjb25maXJtcyB3aGF0IEkgc3VzcGVjdGVkOiBgQ09ORklHX1NITUVNYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkIGZvciBgc2htZW1fZmFsbG9jYXRlYCB0byBldmVuIGJlIGNvbXBpbGVkIGluLiBUaGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIHZlcnkgY2xlYXIuCgpOb3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgQ09ORklHX1NITUVNYCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHR5cGljYWwga2VybmVsIGNvbmZpZ3VyYXRpb24/IEl0IHVzdWFsbHkgaXMsIGFzIGZhciBhcyBJIHJlY2FsbCBmcm9tIG15IHByZXZpb3VzIHdvcmsuIEJ1dCBsZXQmIzM5O3Mgbm90IHJlbHkgb24gbWVtb3J5IGFsb25lLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUgbW9zdCByZWxpYWJsZSBwbGFjZSB0byBjaGVjayB0aGlzIGlzIGBpbml0L0tjb25maWdgLiBUaW1lIHRvIGNvbnN1bHQgdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4ODc9Y29uZmlnIEVWRU5URkRcbi0tXG5pbml0L0tjb25maWctMTg5NS1cbmluaXQvS2NvbmZpZzoxODk2OmNvbmZpZyBTSE1FTVxuaW5pdC9LY29uZmlnLTE4OTctXHRib29sIFwmIzM0O1VzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW1cJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJvb2xlYW4gRmxhZyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIG5ldyBmbGFnLCBhbmQgSSYjMzk7bSBndWVzc2luZyBpdCYjMzk7cyBhIGJvb2xlYW4uIFRoZSBpbXBsaWVkIGRlZmF1bHQgaXMgYWxtb3N0IGNlcnRhaW5seSAmIzM0O3llcywmIzM0OyBnaXZlbiB0aGUgY29udGV4dC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB1c3VhbCBsb2NhdGlvbiBmb3IgZGVmaW5pbmcgYW5kIGNvbmZpZ3VyaW5nIGtlcm5lbCBmZWF0dXJlcywgYW5kIGl0IHNob3VsZCBob2xkIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgdGhlIGBTSE1FTWAgZGVmYXVsdCB2YWx1ZSwgaWYgdGhlcmUgaXMgYW55LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5nIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4ODc9Y29uZmlnIEVWRU5URkRcbi0tXG5pbml0L0tjb25maWctMTg5NS1cbmluaXQvS2NvbmZpZzoxODk2OmNvbmZpZyBTSE1FTVxuaW5pdC9LY29uZmlnLTE4OTctXHRib29sIFwmIzM0O1VzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW1cJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwOTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFtwcmVzdW1hYmx5IGEgcmVsYXRlZCBjb25jZXB0IHRoZSB1c2VyIGlzIGludGVyZXN0ZWQgaW4sIHRob3VnaCBub3QgZXhwbGljaXRseSBzdGF0ZWRdPyBJIGltbWVkaWF0ZWx5IGhvbmVkIGluIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBHaXZlbiB0aGUgYnJlYWR0aCBvZiBvcHRpb25zIGluIHRoZSBrZXJuZWwsIEkmIzM5O20gZ3Vlc3Npbmcgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLCBvciBhdCBsZWFzdCBhIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQuIExldCBtZSBwdWxsIHVwIHRoYXQgZmlsZSBhbmQganVtcCBkaXJlY3RseSB0byBhcm91bmQgbGluZSAxODk2LiBUaGlzIHNwZWNpZmljIGZpbGUgYW5kIGxpbmUgYXJlIGEgZ29vZCBiZXQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBhcmVhcyBvZiBpbnRlcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4OTA6XHRcdGhlbHBcbjE4OTE6XHRcdCAgRW5hYmxlIHRoZSBldmVudGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gcmVjZWl2ZSBib3RoXG4xODkyOlx0XHQgIGtlcm5lbCBub3RpZmljYXRpb24gKGllLiBLQUlPKSBvciB1c2Vyc3BhY2Ugbm90aWZpY2F0aW9ucy5cbjE4OTM6XHRcbjE4OTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbjE4OTU6XHRcbjE4OTY6XHRjb25maWcgU0hNRU1cbjE4OTc6XHRcdGJvb2wgXCYjMzQ7VXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVwmIzM0OyBpZiBFWFBFUlRcbjE4OTg6XHRcdGRlZmF1bHQgeVxuMTg5OTpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE5MDA6XHRcdGhlbHBcbjE5MDE6XHRcdCAgVGhlIHNobWVtIGlzIGFuIGludGVybmFsIGZpbGVzeXN0ZW0gdXNlZCB0byBtYW5hZ2Ugc2hhcmVkIG1lbW9yeS5cbjE5MDI6XHRcdCAgSXQgaXMgYmFja2VkIGJ5IHN3YXAgYW5kIG1hbmFnZXMgcmVzb3VyY2UgbGltaXRzLiBJdCBpcyBhbHNvIGV4cG9ydGVkXG4xOTAzOlx0XHQgIHRvIHVzZXJzcGFjZSBhcyB0bXBmcyBpZiBUTVBGUyBpcyBlbmFibGVkLiBEaXNhYmxpbmcgdGhpc1xuMTkwNDpcdFx0ICBvcHRpb24gcmVwbGFjZXMgc2htZW0gYW5kIHRtcGZzIHdpdGggdGhlIG11Y2ggc2ltcGxlciByYW1mcyBjb2RlLFxuMTkwNTpcdFx0ICB3aGljaCBtYXkgYmUgYXBwcm9wcmlhdGUgb24gc21hbGwgc3lzdGVtcyB3aXRob3V0IHN3YXAuXG4xOTA2Olx0XG4xOTA3Olx0Y29uZmlnIEFJT1xuMTkwODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQUlPIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4xOTA5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBTaGFyZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBzeXN0ZW0gZGVmYXVsdHMgdG8gdXNpbmcgYFNITUVNYC4gVGhhdCBtYWtlcyBzZW5zZSBhcyBhIHN0YXJ0aW5nIHBvaW50LiBCdXQgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoaXMgY29udGV4dD8gVGhpbmtpbmcgYWJvdXQgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBzaGFyZWQgbWVtb3J5LCBgVE1QRlNgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQuIEl0JiMzOTtzIG9mdGVuIHVzZWQgdG8gcHJvdmlkZSBhIGZpbGVzeXN0ZW0gaW50ZXJmYWNlIHRvIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgYGZzL0tjb25maWdgLiBUaGF0IHNob3VsZCBjb250YWluIHRoZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBgVE1QRlNgLCBhbmQgaG9wZWZ1bGx5IGlsbHVtaW5hdGUgaG93IGl0IGludGVyYWN0cyB3aXRoIGBTSE1FTWAgKG9yIHdoZXRoZXIgdGhlcmUmIzM5O3Mgc29tZSBvdmVybGFwIG9yIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbikgd2hpY2ggd291bGQgZ2l2ZSBtZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBUaW1lIHRvIGRpdmUgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTVBGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0xNjU9c291cmNlIFwmIzM0O2ZzL3N5c2ZzL0tjb25maWdcJiMzNDtcbmZzL0tjb25maWctMTY2LVxuZnMvS2NvbmZpZzoxNjc6Y29uZmlnIFRNUEZTXG5mcy9LY29uZmlnLTE2OC1cdGJvb2wgXCYjMzQ7VG1wZnMgdmlydHVhbCBtZW1vcnkgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoZm9ybWVyIHNobSBmcylcJiMzNDtcbi0tXG5mcy9LY29uZmlnLTE4MC1cbmZzL0tjb25maWc6MTgxOmNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcbmZzL0tjb25maWctMTgyLVx0Ym9vbCBcJiMzNDtUbXBmcyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL0tjb25maWctMTk4LVxuZnMvS2NvbmZpZzoxOTk6Y29uZmlnIFRNUEZTX1hBVFRSXG5mcy9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7VG1wZnMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL0tjb25maWctMjEzLVxuZnMvS2NvbmZpZzoyMTQ6Y29uZmlnIFRNUEZTX0lOT0RFNjRcbmZzL0tjb25maWctMjE1LVx0Ym9vbCBcJiMzNDtVc2UgNjQtYml0IGlub190IGJ5IGRlZmF1bHQgaW4gdG1wZnNcJiMzNDtcbi0tXG5mcy9LY29uZmlnLTIzNC1cbmZzL0tjb25maWc6MjM1OmNvbmZpZyBUTVBGU19RVU9UQVxuZnMvS2NvbmZpZy0yMzYtXHRib29sIFwmIzM0O1RtcGZzIHF1b3RhIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODExNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgcmVxdWVzdCBzdWdnZXN0cyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdG9waWMgYXQgaGFuZC4gJiMzNDtmcy9LY29uZmlnJiMzNDsgaXMgdGhlIGtleSBmaWxlIGhlcmUuIFRoYXQgbmFycm93cyBpdCBkb3duIGltbWVkaWF0ZWx5IHRvIGZpbGVzeXN0ZW0tcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExpbmUgMTY3IGlzIG91ciB0YXJnZXQuIEl0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHByYWN0aWNlIHRvIHN0YXJ0IG5lYXIgdGhlIHN1Z2dlc3RlZCBsaW5lIG51bWJlciwgYW5kIG9mdGVuIHNjYW4gYSBsaXR0bGUgYWJvdmUgb3IgYmVsb3cgdGhhdCBsaW5lLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdmFsdWFibGUgY29udGV4dC4gSXQgYWxzbyBpcyBhIGdvb2QgaWRlYSB0byBicmluZyB1cCBhbm90aGVyIHdpbmRvdyB0byBzZWFyY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhcmUgYnVyaWVkIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRzb3VyY2UgXCYjMzQ7ZnMvc3lzZnMvS2NvbmZpZ1wmIzM0O1xuIDE2NjpcdFxuIDE2NzpcdGNvbmZpZyBUTVBGU1xuIDE2ODpcdFx0Ym9vbCBcJiMzNDtUbXBmcyB2aXJ0dWFsIG1lbW9yeSBmaWxlIHN5c3RlbSBzdXBwb3J0IChmb3JtZXIgc2htIGZzKVwmIzM0O1xuIDE2OTpcdFx0ZGVwZW5kcyBvbiBTSE1FTVxuIDE3MDpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDE3MTpcdFx0aGVscFxuIDE3MjpcdFx0ICBUbXBmcyBpcyBhIGZpbGUgc3lzdGVtIHdoaWNoIGtlZXBzIGFsbCBmaWxlcyBpbiB2aXJ0dWFsIG1lbW9yeS5cbiAxNzM6XHRcbiAxNzQ6XHRcdCAgRXZlcnl0aGluZyBpbiB0bXBmcyBpcyB0ZW1wb3JhcnkgaW4gdGhlIHNlbnNlIHRoYXQgbm8gZmlsZXMgd2lsbCBiZVxuIDE3NTpcdFx0ICBjcmVhdGVkIG9uIHlvdXIgaGFyZCBkcml2ZS4gVGhlIGZpbGVzIGxpdmUgaW4gbWVtb3J5IGFuZCBzd2FwXG4gMTc2Olx0XHQgIHNwYWNlLiBJZiB5b3UgdW5tb3VudCBhIHRtcGZzIGluc3RhbmNlLCBldmVyeXRoaW5nIHN0b3JlZCB0aGVyZWluIGlzXG4gMTc3Olx0XHQgIGxvc3QuXG4gMTc4Olx0XG4gMTc5Olx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDE4MDpcdFxuIDE4MTpcdGNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcbiAxODI6XHRcdGJvb2wgXCYjMzQ7VG1wZnMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAxODM6XHRcdGRlcGVuZHMgb24gVE1QRlNcbiAxODQ6XHRcdHNlbGVjdCBUTVBGU19YQVRUUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjI3CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIGBzaG1lbV9mYWxsb2NhdGVgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhbGwgYWJvdXQgYHNobWVtX2ZhbGxvY2F0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IEkgbmVlZCB0byBjb25maXJtIHRoZSB1bmRlcmx5aW5nIHNldHVwIOKAkyBzbywgeWVzLCBgVE1QRlNgIGlzIHJlcXVpcmVkIHRvIG1vdW50IGEgdG1wZnMgZmlsZXN5c3RlbSwgYW5kIHdlJiMzOTtsbCBuZWVkIGBTSE1FTWAgYXMgd2VsbC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGBmYWxsb2NhdGVgIG9uIHNoYXJlZCBtZW1vcnkgKHNobWVtKS4gSSBicmllZmx5IGNvbnNpZGVyZWQgb3RoZXIgZnVuY3Rpb25zLCBidXQgaXQmIzM5O3MgY2xlYXIgdGhhdCBgc2htZW1fZmFsbG9jYXRlYCBpcyB0aGUgb25seSBvbmUgYmVpbmcgdG91Y2hlZC4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBgc2htZW1fZmFsbG9jYXRlYCBpcyAqc3RhdGljKiwgd2hpY2ggaW5pdGlhbGx5IGdhdmUgbWUgcGF1c2UuIEJ1dCwgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGl0JiMzOTtzIG5vdCBpbmxpbmVkIGFuZCB0aHVzIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCBkZXNwaXRlIGl0cyBzdGF0aWMgbmF0dXJlLCBgc2htZW1fZmFsbG9jYXRlYCBpcyB0aGUgcmlnaHQgZm9jdXMuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBGb2N1c1N5bWJvbGAgdG8gYCYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDtgIGJlY2F1c2UgaXQmIzM5O3MgdGhlIHNwZWNpZmljIHRhcmdldC4gSSYjMzk7bGwgYWxzbyBhZGQgYCYjMzQ7U0hNRU0mIzM0O2AgYW5kIGAmIzM0O1RNUEZTJiMzNDtgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gc3BlY2lmeSB0aGF0IHRoZXNlIGFyZSByZXF1aXJlbWVudHMuCgpJIGRpZCBhIGRvdWJsZSBjaGVjayB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBpdCYjMzk7cyB0aGUgb25seSBtb2RpZmllZCBmdW5jdGlvbi4gWWVzLCBqdXN0IGBzaG1lbV9mYWxsb2NhdGVgLgoKTm93LCBsZXQmIzM5O3MgcmVjYXAgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIHBhdGNoLiBUaGUgY29yZSBpc3N1ZSBpcyBhIHBvdGVudGlhbCBvdmVyZmxvdyBvciBleGNlZWRhbmNlIG9mIHRvdGFsIFJBTSAmIzQzOyBzd2FwIGJ5IGBucl9wYWdlc2Agd2l0aGluIGBzaG1lbV9mYWxsb2NhdGVgLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgYm91bmRzIGNoZWNrOiBgbnJfcGFnZXMgJmd0OyBMT05HX01BWGAgb3IgYG5yX3BhZ2VzICZndDsgdG90YWxyYW1fcGFnZXMoKSAmIzQzOyB0b3RhbF9zd2FwX3BhZ2VzYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsIGNoYW5nZSogd2l0aGluIHRoZSBjb3JlIGtlcm5lbCAoc2htZW0vdG1wZnMpLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiBhIHRtcGZzIGZpbGUuIE15IGV4cGVydCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBuZWVkcyBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBuZXcgYm91bmRzIGNoZWNraW5nIGFuZCBlbnN1cmUgdGhhdCBubyByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4gU28sIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NITUVNJiMzNDssCiAgICAmIzM0O1RNUEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDozMC43NDcwODI1MDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQxODI4NzQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTSE1FTVwiLFxuICAgIFwiVE1QRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9mYWxsb2NhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2htZW1fZmFsbG9jYXRlYCB0byBhZGQgYm91bmRzIGNoZWNraW5nIGZvciBgbnJfcGFnZXNgIHRvIHByZXZlbnQgb3ZlcmZsb3cgb3IgZXhjZWVkaW5nIHRvdGFsIFJBTSBhbmQgc3dhcCBzcGFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoc2htZW0vdG1wZnMpIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiBhIHRtcGZzIGZpbGUuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYm91bmRzIGNoZWNraW5nIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjMwLjc0NzA5NDg1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2NTY3MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDM0YTE3NTM2ZDc3NTJmNTg0NTNhOGRlMGJmMzhiZjM2NTJlMjI1YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAxMzoyNDoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li5kNjI2NTYxZDQ2ZGI3ZSAxMDA2NDRcXG4tLS0gYS9tbS9zaG1lbS5jXFxuKysrIGIvbW0vc2htZW0uY1xcbkBAIC0zNjAxLDcgKzM2MDEsOCBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbiBcXHRzdHJ1Y3Qgc2htZW1fZmFsbG9jIHNobWVtX2ZhbGxvYztcXG4tXFx0cGdvZmZfdCBzdGFydCwgaW5kZXgsIGVuZCwgdW5kb19mYWxsb2NlbmQ7XFxuK1xcdHBnb2ZmX3Qgc3RhcnQsIGluZGV4LCBlbmQsIG5yX3BhZ2VzLCB1bmRvX2ZhbGxvY2VuZDtcXG4rXFx0bG9mZl90IGVuZF9wb3M7XFxuIFxcdGludCBlcnJvcjtcXG4gXFxuIFxcdGlmIChtb2RlIFxcdTAwMjYgfihGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpKVxcbkBAIC0zNjQ5LDIzICszNjUwLDI5IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFdlIG5lZWQgdG8gY2hlY2sgcmxpbWl0IGV2ZW4gd2hlbiBGQUxMT0NfRkxfS0VFUF9TSVpFICovXFxuLVxcdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTtcXG4rXFx0ZW5kX3BvcyA9IG9mZnNldCArIGxlbjtcXG4rXFx0ZXJyb3IgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBlbmRfcG9zKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGlmICgoaW5mby1cXHUwMDNlc2VhbHMgXFx1MDAyNiBGX1NFQUxfR1JPVykgXFx1MDAyNlxcdTAwMjYgb2Zmc2V0ICsgbGVuIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSkge1xcbitcXHRpZiAoKGluZm8tXFx1MDAzZXNlYWxzIFxcdTAwMjYgRl9TRUFMX0dST1cpIFxcdTAwMjZcXHUwMDI2IGVuZF9wb3MgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuIFxcdFxcdGVycm9yID0gLUVQRVJNO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0c3RhcnQgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFx0ZW5kID0gKG9mZnNldCArIGxlbiArIFBBR0VfU0laRSAtIDEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdGVuZCA9ICgodTY0KWVuZF9wb3MgKyBQQUdFX1NJWkUgLSAxKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRucl9wYWdlcyA9IGVuZCAtIHN0YXJ0O1xcbiBcXHQvKiBUcnkgdG8gYXZvaWQgYSBzd2Fwc3Rvcm0gaWYgbGVuIGlzIGltcG9zc2libGUgdG8gc2F0aXNmeSAqL1xcbi1cXHRpZiAoc2JpbmZvLVxcdTAwM2VtYXhfYmxvY2tzIFxcdTAwMjZcXHUwMDI2IGVuZCAtIHN0YXJ0IFxcdTAwM2Ugc2JpbmZvLVxcdTAwM2VtYXhfYmxvY2tzKSB7XFxuK1xcdGlmIChzYmluZm8tXFx1MDAzZW1heF9ibG9ja3MgXFx1MDAyNlxcdTAwMjYgbnJfcGFnZXMgXFx1MDAzZSBzYmluZm8tXFx1MDAzZW1heF9ibG9ja3MpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXHRpZiAobnJfcGFnZXMgXFx1MDAzZSBMT05HX01BWCB8fFxcbitcXHQgICAgbnJfcGFnZXMgXFx1MDAzZSB0b3RhbHJhbV9wYWdlcygpICsgdG90YWxfc3dhcF9wYWdlcykge1xcbiBcXHRcXHRlcnJvciA9IC1FTk9TUEM7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuLVxcbiBcXHRzaG1lbV9mYWxsb2Mud2FpdHEgPSBOVUxMO1xcbiBcXHRzaG1lbV9mYWxsb2Muc3RhcnQgPSBzdGFydDtcXG4gXFx0c2htZW1fZmFsbG9jLm5leHQgID0gc3RhcnQ7XFxuQEAgLTM2OTksNyArMzcwNiw3IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuIFxcdFxcdGVsc2UgaWYgKHNobWVtX2ZhbGxvYy5ucl91bnN3YXBwZWQgXFx1MDAzZSBzaG1lbV9mYWxsb2MubnJfZmFsbG9jZWQpXFxuIFxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRlcnJvciA9IHNobWVtX2dldF9mb2xpbyhpbm9kZSwgaW5kZXgsIG9mZnNldCArIGxlbixcXG4rXFx0XFx0XFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIGluZGV4LCBlbmRfcG9zLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Zm9saW8sIFNHUF9GQUxMT0MpO1xcbiBcXHRcXHRpZiAoZXJyb3IpIHtcXG4gXFx0XFx0XFx0aW5mby1cXHUwMDNlZmFsbG9jZW5kID0gdW5kb19mYWxsb2NlbmQ7XFxuQEAgLTM3NDMsOCArMzc1MCw4IEBAIHN0YXRpYyBsb25nIHNobWVtX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjYgb2Zmc2V0ICsgbGVuIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSlcXG4tXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBsZW4pO1xcbitcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjYgZW5kX3BvcyBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpXFxuK1xcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgZW5kX3Bvcyk7XFxuIHVuZG9uZTpcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjMxLjU1NDg2MDIwNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ3NjEwNDk2NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNITUVNXCIsXG4gICAgXCJUTVBGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNobWVtX2ZhbGxvY2F0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG1lbV9mYWxsb2NhdGVgIHRvIGFkZCBib3VuZHMgY2hlY2tpbmcgZm9yIGBucl9wYWdlc2AgdG8gcHJldmVudCBvdmVyZmxvdyBvciBleGNlZWRpbmcgdG90YWwgUkFNIGFuZCBzd2FwIHNwYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChzaG1lbS90bXBmcykgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgZmFsbG9jYXRlYCBzeXNjYWxsIG9uIGEgdG1wZnMgZmlsZS4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBib3VuZHMgY2hlY2tpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDM0YTE3NTM2ZDc3NTJmNTg0NTNhOGRlMGJmMzhiZjM2NTJlMjI1YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDEzOjI0OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li5kNjI2NTYxZDQ2ZGI3ZSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0zNjAxLDcgKzM2MDEsOCBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiBcdHN0cnVjdCBzaG1lbV9mYWxsb2Mgc2htZW1fZmFsbG9jO1xuLVx0cGdvZmZfdCBzdGFydCwgaW5kZXgsIGVuZCwgdW5kb19mYWxsb2NlbmQ7XG4rXHRwZ29mZl90IHN0YXJ0LCBpbmRleCwgZW5kLCBucl9wYWdlcywgdW5kb19mYWxsb2NlbmQ7XG4rXHRsb2ZmX3QgZW5kX3BvcztcbiBcdGludCBlcnJvcjtcbiBcbiBcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkpXG5AQCAtMzY0OSwyMyArMzY1MCwyOSBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0fVxuIFxuIFx0LyogV2UgbmVlZCB0byBjaGVjayBybGltaXQgZXZlbiB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgKi9cbi1cdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTtcbitcdGVuZF9wb3MgPSBvZmZzZXQgKyBsZW47XG4rXHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIGVuZF9wb3MpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmICgoaW5mby1cdTAwM2VzZWFscyBcdTAwMjYgRl9TRUFMX0dST1cpIFx1MDAyNlx1MDAyNiBvZmZzZXQgKyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuK1x0aWYgKChpbmZvLVx1MDAzZXNlYWxzIFx1MDAyNiBGX1NFQUxfR1JPVykgXHUwMDI2XHUwMDI2IGVuZF9wb3MgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuIFx0XHRlcnJvciA9IC1FUEVSTTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRzdGFydCA9IG9mZnNldCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGVuZCA9IChvZmZzZXQgKyBsZW4gKyBQQUdFX1NJWkUgLSAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdGVuZCA9ICgodTY0KWVuZF9wb3MgKyBQQUdFX1NJWkUgLSAxKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcdG5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7XG4gXHQvKiBUcnkgdG8gYXZvaWQgYSBzd2Fwc3Rvcm0gaWYgbGVuIGlzIGltcG9zc2libGUgdG8gc2F0aXNmeSAqL1xuLVx0aWYgKHNiaW5mby1cdTAwM2VtYXhfYmxvY2tzIFx1MDAyNlx1MDAyNiBlbmQgLSBzdGFydCBcdTAwM2Ugc2JpbmZvLVx1MDAzZW1heF9ibG9ja3MpIHtcbitcdGlmIChzYmluZm8tXHUwMDNlbWF4X2Jsb2NrcyBcdTAwMjZcdTAwMjYgbnJfcGFnZXMgXHUwMDNlIHNiaW5mby1cdTAwM2VtYXhfYmxvY2tzKSB7XG4rXHRcdGVycm9yID0gLUVOT1NQQztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRpZiAobnJfcGFnZXMgXHUwMDNlIExPTkdfTUFYIHx8XG4rXHQgICAgbnJfcGFnZXMgXHUwMDNlIHRvdGFscmFtX3BhZ2VzKCkgKyB0b3RhbF9zd2FwX3BhZ2VzKSB7XG4gXHRcdGVycm9yID0gLUVOT1NQQztcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXG4gXHRzaG1lbV9mYWxsb2Mud2FpdHEgPSBOVUxMO1xuIFx0c2htZW1fZmFsbG9jLnN0YXJ0ID0gc3RhcnQ7XG4gXHRzaG1lbV9mYWxsb2MubmV4dCAgPSBzdGFydDtcbkBAIC0zNjk5LDcgKzM3MDYsNyBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0XHRlbHNlIGlmIChzaG1lbV9mYWxsb2MubnJfdW5zd2FwcGVkIFx1MDAzZSBzaG1lbV9mYWxsb2MubnJfZmFsbG9jZWQpXG4gXHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuIFx0XHRlbHNlXG4tXHRcdFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIGluZGV4LCBvZmZzZXQgKyBsZW4sXG4rXHRcdFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW8oaW5vZGUsIGluZGV4LCBlbmRfcG9zLFxuIFx0XHRcdFx0XHRcdFx1MDAyNmZvbGlvLCBTR1BfRkFMTE9DKTtcbiBcdFx0aWYgKGVycm9yKSB7XG4gXHRcdFx0aW5mby1cdTAwM2VmYWxsb2NlbmQgPSB1bmRvX2ZhbGxvY2VuZDtcbkBAIC0zNzQzLDggKzM3NTAsOCBAQCBzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbiBcbi1cdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNiBvZmZzZXQgKyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbi1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBsZW4pO1xuK1x0aWYgKCEobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXHUwMDI2XHUwMDI2IGVuZF9wb3MgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbitcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBlbmRfcG9zKTtcbiB1bmRvbmU6XG4gXHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiBcdGlub2RlLVx1MDAzZWlfcHJpdmF0ZSA9IE5VTEw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDozMS41NTQ4NjMzNTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU5NTg0MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogc2htZW1fZmFsbG9jYXRlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYHNobWVtX2ZhbGxvY2F0ZWAgd2l0aGluIGBtbS9zaG1lbS5jYC4gIE15IGZpcnN0IG9ic2VydmF0aW9uIGlzIHRoYXQgaXQncyBtb2RpZnlpbmcgYSBjb3JlIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIHNobWVtL3RtcGZzIHN1YnN5c3RlbSwgc28gdGhpcyB3YXJyYW50cyBjbG9zZSBhdHRlbnRpb24uICBUaGUgY2hhbmdlcyBmb2N1cyBvbiBob3cgYGVuZGAgYW5kIGBucl9wYWdlc2AgYXJlIGNvbXB1dGVkIGFuZCB2YWxpZGF0ZWQuIFRoZSBhZGRpdGlvbiBvZiB0aGlzIGNoZWNrIGlzIGludGVyZXN0aW5nOlxuXG5gYGBjXG5cdGlmIChucl9wYWdlcyBcdTAwM2UgTE9OR19NQVggfHxcblx0ICAgIG5yX3BhZ2VzIFx1MDAzZSB0b3RhbHJhbV9wYWdlcygpICsgdG90YWxfc3dhcF9wYWdlcykge1xuXHRcdGVycm9yID0gLUVOT1NQQztcblx0XHRnb3RvIG91dDtcblx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiBzaG1lbSwgd2hpY2ggbWVhbnMgdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gVGhlIHRhcmdldCBpcyB0aGUgYHNobWVtX2ZhbGxvY2F0ZWAgZnVuY3Rpb24gaXRzZWxmLiBOb3csIGEgY3JpdGljYWwgY29uc2lkZXJhdGlvbiBmb3IgZnV6emluZyBlZmZlY3RpdmVuZXNzIGlzIHN5bWJvbCB2aXNpYmlsaXR5LiBJIG5lZWQgdG8ga25vdyBpZiBgc2htZW1fZmFsbG9jYXRlYCBpcyBzdGF0aWMgb3Igbm90LiBMb29raW5nIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBpdCBpcyBpbmRlZWQgZGVmaW5lZCBhcyBgc3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgLi4uKWAhIEhtbSwgYmVpbmcgc3RhdGljIG1pZ2h0IG1ha2UgaXQgbGVzcyB0aGFuIGlkZWFsIGFzIGEgYEZvY3VzU3ltYm9sYCBmb3IgZnV6emluZywgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIGFwcHJvYWNoLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdpdGhpbiBgbW0vc2htZW0uY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBnb29kIGVudHJ5cG9pbnRzIGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6MzYuMjE0NDUwMjg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjYxNzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9mYWxsb2NhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vc2htZW0uYy0xMDAtLypcXG5tbS9zaG1lbS5jOjEwMTogKiBzaG1lbV9mYWxsb2NhdGUgY29tbXVuaWNhdGVzIHdpdGggc2htZW1fZmF1bHQgb3Igc2htZW1fd3JpdGVvdXQgdmlhXFxubW0vc2htZW0uYy0xMDItICogaW5vZGUtXFx1MDAzZWlfcHJpdmF0ZSAod2l0aCBpX3J3c2VtIG1ha2luZyBzdXJlIHRoYXQgaXQgaGFzIG9ubHkgb25lIHVzZXIgYXRcXG4tLVxcbm1tL3NobWVtLmM9MTU5MT1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsXFxuLS1cXG5tbS9zaG1lbS5jLTE2NTYtXFx0ICogZ29vZCBpZGVhIHRvIGNvbnRpbnVlIGFueXdheSwgb25jZSB3ZSdyZSBwdXNoaW5nIGludG8gc3dhcC4gIFNvXFxubW0vc2htZW0uYzoxNjU3OlxcdCAqIHJlYWN0aXZhdGUgdGhlIGZvbGlvLCBhbmQgbGV0IHNobWVtX2ZhbGxvY2F0ZSgpIHF1aXQgd2hlbiB0b28gbWFueS5cXG5tbS9zaG1lbS5jLTE2NTgtXFx0ICovXFxuLS1cXG5tbS9zaG1lbS5jPTI2NDM9c3RhdGljIHZtX2ZhdWx0X3Qgc2htZW1fZmFsbG9jX3dhaXQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5tbS9zaG1lbS5jLTI2NjYtXFx0XFx0LypcXG5tbS9zaG1lbS5jOjI2Njc6XFx0XFx0ICogc2htZW1fZmFsbG9jX3dhaXRxIHBvaW50cyBpbnRvIHRoZSBzaG1lbV9mYWxsb2NhdGUoKVxcbm1tL3NobWVtLmMtMjY2OC1cXHRcXHQgKiBzdGFjayBvZiB0aGUgaG9sZS1wdW5jaGluZyB0YXNrOiBzaG1lbV9mYWxsb2Nfd2FpdHFcXG4tLVxcbm1tL3NobWVtLmM9MzU3Nz1zdGF0aWMgbG9mZl90IHNobWVtX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxcbi0tXFxubW0vc2htZW0uYy0zNTk2LVxcbm1tL3NobWVtLmM6MzU5NzpzdGF0aWMgbG9uZyBzaG1lbV9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbm1tL3NobWVtLmMtMzU5OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgbG9mZl90IGxlbilcXG4tLVxcbm1tL3NobWVtLmM9NTE0NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzaG1lbV9maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTUxNTUtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5tbS9zaG1lbS5jOjUxNTY6XFx0LmZhbGxvY2F0ZVxcdD0gc2htZW1fZmFsbG9jYXRlLFxcbm1tL3NobWVtLmMtNTE1Ny1cXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjM2LjQ4MTA3NTY2OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNDY2MTI2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNTeW1ib2wgQ29uc2lkZXJhdGlvbnMgZm9yIHNobWVtX2ZhbGxvY2F0ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYHNobWVtX2ZhbGxvY2F0ZWAgZnVuY3Rpb24uIEl0J3Mgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgbWFkZSBtZSBwYXVzZSBhYm91dCBpdHMgc3VpdGFiaWxpdHkgYXMgYSBGb2N1c1N5bWJvbC4gTXkgZmlyc3QgdGhvdWdodCB3YXMgdGhhdCBhIHN0YXRpYyBmdW5jdGlvbiBtaWdodCBub3QgYmUgYSBncmVhdCBjaG9pY2UuIEkgc3RhcnRlZCBieSB0cmFjaW5nIHRoZSB1c2FnZSwgbm90aW5nIHRoYXQgaXQncyBhc3NpZ25lZCB0byBgLmZhbGxvY2F0ZWAgd2l0aGluIHRoZSBgc2htZW1fZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3QuXG5cbk15IG5leHQgc3RlcCB3YXMgdG8gc2VlIGlmIHRoZXJlIHdhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgYHNobWVtX2ZpbGVfb3BlcmF0aW9uc2Agc3RydWN0LiBJIHJlbWVtYmVyZWQgaXQncyBhIGZpbGUgb3BlcmF0aW9uLCBzbyBpdCdzIGludm9rZWQgdGhyb3VnaCBgdmZzX2ZhbGxvY2F0ZWAsIHdoaWNoIGxpdmVzIGluIGBmcy9vcGVuLmNgLiBJIGNoZWNrZWQgaWYgYHNobWVtX2ZhbGxvY2F0ZWAgd2FzIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMgLSBpdCdzIG5vdC4gSSBjb25zaWRlcmVkIHRoYXQgZXZlbiBiZWluZyBzdGF0aWMsIFN5emthbGxlciBjb3VsZCBzdGlsbCB0YXJnZXQgaXQgdGhyb3VnaCB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiB0bXBmcy9zaG1lbSBmaWxlcy4gU3RpbGwsIHRoZSBpbnN0cnVjdGlvbnMgcHJpb3JpdGl6ZSBub24tc3RhdGljIGVudHJ5IHBvaW50cy5cblxuVGhlbiB0aGUga2V5IHJlYWxpemF0aW9uIGhpdCBtZS4gRXZlbiB0aG91Z2ggaXQncyBkZWNsYXJlZCBgc3RhdGljYCwgaXQgKmlzKiB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHNobWVtX2ZpbGVfb3BlcmF0aW9uc2AuIFRoaXMgbWVhbnMgaXQgKndvbid0KiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFNvLCBkZXNwaXRlIGl0cyBgc3RhdGljYCBkZWNsYXJhdGlvbiwgaXQgaXMgcGVyZmVjdGx5IGZpbmUgYXMgYSBGb2N1c1N5bWJvbC4gVGhpcyBtYWtlcyBpdCBhIHZpYWJsZSBjYW5kaWRhdGUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuIEZyb20gbG9va2luZyBhdCBgbW0vc2htZW0uY2AsIGl0J3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX1NITUVNYCBlbmFibGVkLCB3aGljaCBpcyBwcmFjdGljYWxseSBhbHdheXMgdGhlIGNhc2UuIFNvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBhcmUgbWluaW1hbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBieSBjaGVja2luZyB0aGUgYG1tL01ha2VmaWxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDo0My41Mjc2OTEzNzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NjU4MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTUxPW9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZS01My1cXHRcXHRcXHQgICByZWFkYWhlYWQubyBzd2FwLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NDpcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NS1cXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZT0xNDc9b2JqLSQoQ09ORklHX0VYRUNNRU0pICs9IGV4ZWNtZW0ub1xcbm1tL01ha2VmaWxlOjE0ODpvYmotJChDT05GSUdfVE1QRlNfUVVPVEEpICs9IHNobWVtX3F1b3RhLm9cXG5tbS9NYWtlZmlsZS0xNDktb2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgKz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjQzLjY3NTQyMjMyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTYyMjA0OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgc2htZW0ub2AqKlxuXG5Pa2F5LCBzbyBgc2htZW0ub2AgaXMgZGVmaW5pdGVseSBnZXR0aW5nIGNvbXBpbGVkIGJlY2F1c2UgaXQncyBsaXN0ZWQgaW4gYG9iai15YC4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpleHRlbnQqIG9mIGl0cyBjb21waWxhdGlvbi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgQ09ORklHX1NITUVNYCBvcHRpb24gcGxheXMgYSByb2xlIGhlcmUuIERvZXMgaXQgbWVhbiB0aGF0IHRoZSBiYXNlIG9iamVjdCBpcyAqYWx3YXlzKiBjb21waWxlZCwgYnV0IGl0cyBmdWxsIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIHRoZSBjb25maWc/IE9yIHBlcmhhcHMgaXQgYWZmZWN0cyBpbmNsdXNpb24gb2YgdGhlIHNvdXJjZSBmaWxlIGVudGlyZWx5PyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IGJlY2F1c2UgaXQncyByZWxhdGVkIHRvIHRoZSBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSBpbiBgc2htZW0uY2AuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBpbiBgbW0vc2htZW0uY2AgaXRzZWxmLiBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGF0IGBDT05GSUdfU0hNRU1gIG1hY3JvIGlzIHVzZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQncyBhZmZlY3RpbmcgdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQ4LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6NDcuMzcxNjQ3MDY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzgxMTIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfU0hNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xcbm1tL3NobWVtLmMtNDctXFxubW0vc2htZW0uYzo0ODojaWZkZWYgQ09ORklHX1NITUVNXFxubW0vc2htZW0uYy00OS0vKlxcbi0tXFxubW0vc2htZW0uYz01Njk0PV9fc2V0dXAoXFxcInRocF9zaG1lbT1cXFwiLCBzZXR1cF90aHBfc2htZW0pO1xcbi0tXFxubW0vc2htZW0uYy01Njk3LVxcbm1tL3NobWVtLmM6NTY5ODojZWxzZSAvKiAhQ09ORklHX1NITUVNICovXFxubW0vc2htZW0uYy01Njk5LVxcbi0tXFxubW0vc2htZW0uYz01NzY3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpzaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTU3NzQtXFxubW0vc2htZW0uYzo1Nzc1OiNlbmRpZiAvKiBDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU3NzYtXFxuLS1cXG5tbS9zaG1lbS5jPTU5Mjk9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNTkzMS17XFxubW0vc2htZW0uYzo1OTMyOiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTU5MzMtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjQ3LjU4NTUwNjM2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzEwNjUxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTSE1FTSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19TSE1FTWAgaXMgKmVzc2VudGlhbCogaWYgSSB3YW50IHRvIHVzZSBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gYHNobWVtLmNgLiBUaGF0J3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGJ1dCBpdCdzIGdvb2QgdG8gY29uZmlybS4gTm93LCBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGxvb2sgYXQgaG93IGBzaG1lbV9mYWxsb2NhdGVgIGZpdHMgaW50byB0aGlzLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhhdCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG9yIG5vdC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYHNobWVtX2ZhbGxvY2F0ZWAgaXMgZ3VhcmRlZCBieSB0aGUgYENPTkZJR19TSE1FTWAgcHJlcHJvY2Vzc29yIG1hY3JvLiBUaGF0IHdpbGwgdGVsbCBtZSBpZiBJIG5lZWQgdGhhdCBjb25maWcgb3B0aW9uIGVuYWJsZWQgZm9yIGZ1bGwgYWNjZXNzIHRvIGl0LCBhbmQgdGhlIGZ1bGwgZXh0ZW50IG9mIHRoZSBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjU0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6NTAuODU2NTc1MzQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYwNjk0OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fZmFsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NobWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2htZW0uYz00Nj1zdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50IF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm1tL3NobWVtLmMtMTAwLS8qXFxubW0vc2htZW0uYzoxMDE6ICogc2htZW1fZmFsbG9jYXRlIGNvbW11bmljYXRlcyB3aXRoIHNobWVtX2ZhdWx0IG9yIHNobWVtX3dyaXRlb3V0IHZpYVxcbm1tL3NobWVtLmMtMTAyLSAqIGlub2RlLVxcdTAwM2VpX3ByaXZhdGUgKHdpdGggaV9yd3NlbSBtYWtpbmcgc3VyZSB0aGF0IGl0IGhhcyBvbmx5IG9uZSB1c2VyIGF0XFxuLS1cXG5tbS9zaG1lbS5jPTE1OTE9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLFxcbi0tXFxubW0vc2htZW0uYy0xNjU2LVxcdCAqIGdvb2QgaWRlYSB0byBjb250aW51ZSBhbnl3YXksIG9uY2Ugd2UncmUgcHVzaGluZyBpbnRvIHN3YXAuICBTb1xcbm1tL3NobWVtLmM6MTY1NzpcXHQgKiByZWFjdGl2YXRlIHRoZSBmb2xpbywgYW5kIGxldCBzaG1lbV9mYWxsb2NhdGUoKSBxdWl0IHdoZW4gdG9vIG1hbnkuXFxubW0vc2htZW0uYy0xNjU4LVxcdCAqL1xcbi0tXFxubW0vc2htZW0uYz0yNjQzPXN0YXRpYyB2bV9mYXVsdF90IHNobWVtX2ZhbGxvY193YWl0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxubW0vc2htZW0uYy0yNjY2LVxcdFxcdC8qXFxubW0vc2htZW0uYzoyNjY3OlxcdFxcdCAqIHNobWVtX2ZhbGxvY193YWl0cSBwb2ludHMgaW50byB0aGUgc2htZW1fZmFsbG9jYXRlKClcXG5tbS9zaG1lbS5jLTI2NjgtXFx0XFx0ICogc3RhY2sgb2YgdGhlIGhvbGUtcHVuY2hpbmcgdGFzazogc2htZW1fZmFsbG9jX3dhaXRxXFxuLS1cXG5tbS9zaG1lbS5jPTM1Nzc9c3RhdGljIGxvZmZfdCBzaG1lbV9maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcXG4tLVxcbm1tL3NobWVtLmMtMzU5Ni1cXG5tbS9zaG1lbS5jOjM1OTc6c3RhdGljIGxvbmcgc2htZW1fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG5tbS9zaG1lbS5jLTM1OTgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBsZW4pXFxuLS1cXG5tbS9zaG1lbS5jPTUxNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2htZW1fZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxubW0vc2htZW0uYy01MTU1LVxcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxubW0vc2htZW0uYzo1MTU2OlxcdC5mYWxsb2NhdGVcXHQ9IHNobWVtX2ZhbGxvY2F0ZSxcXG5tbS9zaG1lbS5jLTUxNTctXFx0LnNldGxlYXNlXFx0PSBnZW5lcmljX3NldGxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDo1MS4wMjI2NTMyMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5OTIwNDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzaG1lbV9mYWxsb2NhdGVgIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2tpbmcgZG93biB3aGVyZSBgc2htZW1fZmFsbG9jYXRlYCBpcyBkZWZpbmVkLiBMaW5lIDM1OTcsIGdvdCBpdC4gQW5kIHRoYXQncyAqYmVmb3JlKiB0aGF0IGAjZWxzZSAvKiAhQ09ORklHX1NITUVNICovYCBibG9jayBhdCBsaW5lIDU2OTguIFRoYXQgcHJldHR5IG11Y2ggY29uZmlybXMgd2hhdCBJIHN1c3BlY3RlZDogYENPTkZJR19TSE1FTWAgaXMgYWJzb2x1dGVseSByZXF1aXJlZCBmb3IgYHNobWVtX2ZhbGxvY2F0ZWAgdG8gZXZlbiBiZSBjb21waWxlZCBpbi4gVGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSB2ZXJ5IGNsZWFyLlxuXG5Ob3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyBgQ09ORklHX1NITUVNYCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHR5cGljYWwga2VybmVsIGNvbmZpZ3VyYXRpb24/IEl0IHVzdWFsbHkgaXMsIGFzIGZhciBhcyBJIHJlY2FsbCBmcm9tIG15IHByZXZpb3VzIHdvcmsuIEJ1dCBsZXQncyBub3QgcmVseSBvbiBtZW1vcnkgYWxvbmUuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZSBtb3N0IHJlbGlhYmxlIHBsYWNlIHRvIGNoZWNrIHRoaXMgaXMgYGluaXQvS2NvbmZpZ2AuIFRpbWUgdG8gY29uc3VsdCB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NjQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMzoyNDo1NS4xMjE4NjE5MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTA1NTI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0hNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODg3PWNvbmZpZyBFVkVOVEZEXFxuLS1cXG5pbml0L0tjb25maWctMTg5NS1cXG5pbml0L0tjb25maWc6MTg5Njpjb25maWcgU0hNRU1cXG5pbml0L0tjb25maWctMTg5Ny1cXHRib29sIFxcXCJVc2UgZnVsbCBzaG1lbSBmaWxlc3lzdGVtXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6NTUuMzAyOTI1NDQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDgzODYzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgQm9vbGVhbiBGbGFnKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBhIG5ldyBmbGFnLCBhbmQgSSdtIGd1ZXNzaW5nIGl0J3MgYSBib29sZWFuLiBUaGUgaW1wbGllZCBkZWZhdWx0IGlzIGFsbW9zdCBjZXJ0YWlubHkgXCJ5ZXMsXCIgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSB1c3VhbCBsb2NhdGlvbiBmb3IgZGVmaW5pbmcgYW5kIGNvbmZpZ3VyaW5nIGtlcm5lbCBmZWF0dXJlcywgYW5kIGl0IHNob3VsZCBob2xkIHRoZSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgdGhlIGBTSE1FTWAgZGVmYXVsdCB2YWx1ZSwgaWYgdGhlcmUgaXMgYW55LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5nIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODM1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjQ6NTkuMDUxMzE3NTg2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM1NzM1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNITUVNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTg4Nz1jb25maWcgRVZFTlRGRFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4OTUtXFxuaW5pdC9LY29uZmlnOjE4OTY6Y29uZmlnIFNITUVNXFxuaW5pdC9LY29uZmlnLTE4OTctXFx0Ym9vbCBcXFwiVXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI0OjU5LjMwNDg5Nzg0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDExNjQ3MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gW3ByZXN1bWFibHkgYSByZWxhdGVkIGNvbmNlcHQgdGhlIHVzZXIgaXMgaW50ZXJlc3RlZCBpbiwgdGhvdWdoIG5vdCBleHBsaWNpdGx5IHN0YXRlZF0/IEkgaW1tZWRpYXRlbHkgaG9uZWQgaW4gb24gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEdpdmVuIHRoZSBicmVhZHRoIG9mIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCwgSSdtIGd1ZXNzaW5nIHdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLCBvciBhdCBsZWFzdCBhIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQuIExldCBtZSBwdWxsIHVwIHRoYXQgZmlsZSBhbmQganVtcCBkaXJlY3RseSB0byBhcm91bmQgbGluZSAxODk2LiBUaGlzIHNwZWNpZmljIGZpbGUgYW5kIGxpbmUgYXJlIGEgZ29vZCBiZXQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29uZmlndXJhdGlvbiBhcmVhcyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjAyLjMxNjU0OTUwMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4OTA6XFx0XFx0aGVscFxcbjE4OTE6XFx0XFx0ICBFbmFibGUgdGhlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byByZWNlaXZlIGJvdGhcXG4xODkyOlxcdFxcdCAga2VybmVsIG5vdGlmaWNhdGlvbiAoaWUuIEtBSU8pIG9yIHVzZXJzcGFjZSBub3RpZmljYXRpb25zLlxcbjE4OTM6XFx0XFxuMTg5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuMTg5NTpcXHRcXG4xODk2OlxcdGNvbmZpZyBTSE1FTVxcbjE4OTc6XFx0XFx0Ym9vbCBcXFwiVXNlIGZ1bGwgc2htZW0gZmlsZXN5c3RlbVxcXCIgaWYgRVhQRVJUXFxuMTg5ODpcXHRcXHRkZWZhdWx0IHlcXG4xODk5OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTkwMDpcXHRcXHRoZWxwXFxuMTkwMTpcXHRcXHQgIFRoZSBzaG1lbSBpcyBhbiBpbnRlcm5hbCBmaWxlc3lzdGVtIHVzZWQgdG8gbWFuYWdlIHNoYXJlZCBtZW1vcnkuXFxuMTkwMjpcXHRcXHQgIEl0IGlzIGJhY2tlZCBieSBzd2FwIGFuZCBtYW5hZ2VzIHJlc291cmNlIGxpbWl0cy4gSXQgaXMgYWxzbyBleHBvcnRlZFxcbjE5MDM6XFx0XFx0ICB0byB1c2Vyc3BhY2UgYXMgdG1wZnMgaWYgVE1QRlMgaXMgZW5hYmxlZC4gRGlzYWJsaW5nIHRoaXNcXG4xOTA0OlxcdFxcdCAgb3B0aW9uIHJlcGxhY2VzIHNobWVtIGFuZCB0bXBmcyB3aXRoIHRoZSBtdWNoIHNpbXBsZXIgcmFtZnMgY29kZSxcXG4xOTA1OlxcdFxcdCAgd2hpY2ggbWF5IGJlIGFwcHJvcHJpYXRlIG9uIHNtYWxsIHN5c3RlbXMgd2l0aG91dCBzd2FwLlxcbjE5MDY6XFx0XFxuMTkwNzpcXHRjb25maWcgQUlPXFxuMTkwODpcXHRcXHRib29sIFxcXCJFbmFibGUgQUlPIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE5MDk6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjAyLjMxNzAxNjA1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ2Njc0Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBTaGFyZWQgTWVtb3J5IENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IHN5c3RlbSBkZWZhdWx0cyB0byB1c2luZyBgU0hNRU1gLiBUaGF0IG1ha2VzIHNlbnNlIGFzIGEgc3RhcnRpbmcgcG9pbnQuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgaW4gdGhpcyBjb250ZXh0PyBUaGlua2luZyBhYm91dCBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHNoYXJlZCBtZW1vcnksIGBUTVBGU2AgaW1tZWRpYXRlbHkgY29tZXMgdG8gbWluZC4gSXQncyBvZnRlbiB1c2VkIHRvIHByb3ZpZGUgYSBmaWxlc3lzdGVtIGludGVyZmFjZSB0byBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZS5cblxuUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBmcy9LY29uZmlnYC4gVGhhdCBzaG91bGQgY29udGFpbiB0aGUgZGVmaW5pdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgYFRNUEZTYCwgYW5kIGhvcGVmdWxseSBpbGx1bWluYXRlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgU0hNRU1gIChvciB3aGV0aGVyIHRoZXJlJ3Mgc29tZSBvdmVybGFwIG9yIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbikgd2hpY2ggd291bGQgZ2l2ZSBtZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjA2LjQ2MzY5NjA2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MTkwNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTVBGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MTY1PXNvdXJjZSBcXFwiZnMvc3lzZnMvS2NvbmZpZ1xcXCJcXG5mcy9LY29uZmlnLTE2Ni1cXG5mcy9LY29uZmlnOjE2Nzpjb25maWcgVE1QRlNcXG5mcy9LY29uZmlnLTE2OC1cXHRib29sIFxcXCJUbXBmcyB2aXJ0dWFsIG1lbW9yeSBmaWxlIHN5c3RlbSBzdXBwb3J0IChmb3JtZXIgc2htIGZzKVxcXCJcXG4tLVxcbmZzL0tjb25maWctMTgwLVxcbmZzL0tjb25maWc6MTgxOmNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcXG5mcy9LY29uZmlnLTE4Mi1cXHRib29sIFxcXCJUbXBmcyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL0tjb25maWctMTk4LVxcbmZzL0tjb25maWc6MTk5OmNvbmZpZyBUTVBGU19YQVRUUlxcbmZzL0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlRtcGZzIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9LY29uZmlnLTIxMy1cXG5mcy9LY29uZmlnOjIxNDpjb25maWcgVE1QRlNfSU5PREU2NFxcbmZzL0tjb25maWctMjE1LVxcdGJvb2wgXFxcIlVzZSA2NC1iaXQgaW5vX3QgYnkgZGVmYXVsdCBpbiB0bXBmc1xcXCJcXG4tLVxcbmZzL0tjb25maWctMjM0LVxcbmZzL0tjb25maWc6MjM1OmNvbmZpZyBUTVBGU19RVU9UQVxcbmZzL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlRtcGZzIHF1b3RhIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjA2LjY4OTkwNDk1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM2OTM0OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIHJlcXVlc3Qgc3VnZ2VzdHMgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHRvcGljIGF0IGhhbmQuIFwiZnMvS2NvbmZpZ1wiIGlzIHRoZSBrZXkgZmlsZSBoZXJlLiBUaGF0IG5hcnJvd3MgaXQgZG93biBpbW1lZGlhdGVseSB0byBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMaW5lIDE2NyBpcyBvdXIgdGFyZ2V0LiBJdCdzIHVzdWFsbHkgYSBnb29kIHByYWN0aWNlIHRvIHN0YXJ0IG5lYXIgdGhlIHN1Z2dlc3RlZCBsaW5lIG51bWJlciwgYW5kIG9mdGVuIHNjYW4gYSBsaXR0bGUgYWJvdmUgb3IgYmVsb3cgdGhhdCBsaW5lLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdmFsdWFibGUgY29udGV4dC4gSXQgYWxzbyBpcyBhIGdvb2QgaWRlYSB0byBicmluZyB1cCBhbm90aGVyIHdpbmRvdyB0byBzZWFyY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGFyZSBidXJpZWQgd2l0aGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjU6MTAuMDI2ODQzNTQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NTpcXHRzb3VyY2UgXFxcImZzL3N5c2ZzL0tjb25maWdcXFwiXFxuIDE2NjpcXHRcXG4gMTY3OlxcdGNvbmZpZyBUTVBGU1xcbiAxNjg6XFx0XFx0Ym9vbCBcXFwiVG1wZnMgdmlydHVhbCBtZW1vcnkgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoZm9ybWVyIHNobSBmcylcXFwiXFxuIDE2OTpcXHRcXHRkZXBlbmRzIG9uIFNITUVNXFxuIDE3MDpcXHRcXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuIDE3MTpcXHRcXHRoZWxwXFxuIDE3MjpcXHRcXHQgIFRtcGZzIGlzIGEgZmlsZSBzeXN0ZW0gd2hpY2gga2VlcHMgYWxsIGZpbGVzIGluIHZpcnR1YWwgbWVtb3J5LlxcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHQgIEV2ZXJ5dGhpbmcgaW4gdG1wZnMgaXMgdGVtcG9yYXJ5IGluIHRoZSBzZW5zZSB0aGF0IG5vIGZpbGVzIHdpbGwgYmVcXG4gMTc1OlxcdFxcdCAgY3JlYXRlZCBvbiB5b3VyIGhhcmQgZHJpdmUuIFRoZSBmaWxlcyBsaXZlIGluIG1lbW9yeSBhbmQgc3dhcFxcbiAxNzY6XFx0XFx0ICBzcGFjZS4gSWYgeW91IHVubW91bnQgYSB0bXBmcyBpbnN0YW5jZSwgZXZlcnl0aGluZyBzdG9yZWQgdGhlcmVpbiBpc1xcbiAxNzc6XFx0XFx0ICBsb3N0LlxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDE4MDpcXHRcXG4gMTgxOlxcdGNvbmZpZyBUTVBGU19QT1NJWF9BQ0xcXG4gMTgyOlxcdFxcdGJvb2wgXFxcIlRtcGZzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAxODM6XFx0XFx0ZGVwZW5kcyBvbiBUTVBGU1xcbiAxODQ6XFx0XFx0c2VsZWN0IFRNUEZTX1hBVFRSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEzOjI1OjEwLjAyNzAxMTY2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODg4NTg5NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgYHNobWVtX2ZhbGxvY2F0ZWAqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGFsbCBhYm91dCBgc2htZW1fZmFsbG9jYXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgc2V0dXAg4oCTIHNvLCB5ZXMsIGBUTVBGU2AgaXMgcmVxdWlyZWQgdG8gbW91bnQgYSB0bXBmcyBmaWxlc3lzdGVtLCBhbmQgd2UnbGwgbmVlZCBgU0hNRU1gIGFzIHdlbGwuIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBwYXRjaCBtb2RpZmllcyBgc2htZW1fZmFsbG9jYXRlYCwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50IGZvciBgZmFsbG9jYXRlYCBvbiBzaGFyZWQgbWVtb3J5IChzaG1lbSkuIEkgYnJpZWZseSBjb25zaWRlcmVkIG90aGVyIGZ1bmN0aW9ucywgYnV0IGl0J3MgY2xlYXIgdGhhdCBgc2htZW1fZmFsbG9jYXRlYCBpcyB0aGUgb25seSBvbmUgYmVpbmcgdG91Y2hlZC5cblxuTm93LCBhIGNydWNpYWwgcG9pbnQ6IGBzaG1lbV9mYWxsb2NhdGVgIGlzICpzdGF0aWMqLCB3aGljaCBpbml0aWFsbHkgZ2F2ZSBtZSBwYXVzZS4gQnV0LCBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCBpdCdzIG5vdCBpbmxpbmVkIGFuZCB0aHVzIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlcmVmb3JlLCBkZXNwaXRlIGl0cyBzdGF0aWMgbmF0dXJlLCBgc2htZW1fZmFsbG9jYXRlYCBpcyB0aGUgcmlnaHQgZm9jdXMuIEknbSBnb2luZyB0byBzZXQgYEZvY3VzU3ltYm9sYCB0byBgXCJzaG1lbV9mYWxsb2NhdGVcImAgYmVjYXVzZSBpdCdzIHRoZSBzcGVjaWZpYyB0YXJnZXQuIEknbGwgYWxzbyBhZGQgYFwiU0hNRU1cImAgYW5kIGBcIlRNUEZTXCJgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgdG8gc3BlY2lmeSB0aGF0IHRoZXNlIGFyZSByZXF1aXJlbWVudHMuXG5cbkkgZGlkIGEgZG91YmxlIGNoZWNrIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0J3MgdGhlIG9ubHkgbW9kaWZpZWQgZnVuY3Rpb24uIFllcywganVzdCBgc2htZW1fZmFsbG9jYXRlYC5cblxuTm93LCBsZXQncyByZWNhcCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgcGF0Y2guIFRoZSBjb3JlIGlzc3VlIGlzIGEgcG90ZW50aWFsIG92ZXJmbG93IG9yIGV4Y2VlZGFuY2Ugb2YgdG90YWwgUkFNICsgc3dhcCBieSBgbnJfcGFnZXNgIHdpdGhpbiBgc2htZW1fZmFsbG9jYXRlYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGFkZGluZyBhIGJvdW5kcyBjaGVjazogYG5yX3BhZ2VzIFx1MDAzZSBMT05HX01BWGAgb3IgYG5yX3BhZ2VzIFx1MDAzZSB0b3RhbHJhbV9wYWdlcygpICsgdG90YWxfc3dhcF9wYWdlc2AuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgKHNobWVtL3RtcGZzKSwgYW5kIGl0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiBhIHRtcGZzIGZpbGUuIE15IGV4cGVydCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBuZWVkcyBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBuZXcgYm91bmRzIGNoZWNraW5nIGFuZCBlbnN1cmUgdGhhdCBubyByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4gU28sIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjcsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTM6MjU6MTguOTE1NjA1NTE2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5NzQ2MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTSE1FTVwiLFxuICAgIFwiVE1QRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9mYWxsb2NhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgc2htZW1fZmFsbG9jYXRlYCB0byBhZGQgYm91bmRzIGNoZWNraW5nIGZvciBgbnJfcGFnZXNgIHRvIHByZXZlbnQgb3ZlcmZsb3cgb3IgZXhjZWVkaW5nIHRvdGFsIFJBTSBhbmQgc3dhcCBzcGFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoc2htZW0vdG1wZnMpIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGZhbGxvY2F0ZWAgc3lzY2FsbCBvbiBhIHRtcGZzIGZpbGUuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYm91bmRzIGNoZWNraW5nIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0hNRU1cIixcbiAgICBcIlRNUEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fZmFsbG9jYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNobWVtX2ZhbGxvY2F0ZWAgdG8gYWRkIGJvdW5kcyBjaGVja2luZyBmb3IgYG5yX3BhZ2VzYCB0byBwcmV2ZW50IG92ZXJmbG93IG9yIGV4Y2VlZGluZyB0b3RhbCBSQU0gYW5kIHN3YXAgc3BhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKHNobWVtL3RtcGZzKSB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBmYWxsb2NhdGVgIHN5c2NhbGwgb24gYSB0bXBmcyBmaWxlLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGJvdW5kcyBjaGVja2luZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[1] Phase: Succeeded StartedAt: 2026-07-28 13:25:31 +0000 UTC FinishedAt: 2026-07-28 13:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 13:25:31 +0000 UTC FinishedAt: 2026-07-28 13:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2] Phase: Succeeded StartedAt: 2026-07-28 13:25:31 +0000 UTC FinishedAt: 2026-07-28 18:27:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 13:25:31 +0000 UTC FinishedAt: 2026-07-28 18:27:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 13:25:31 +0000 UTC FinishedAt: 2026-07-28 13:26:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 13:25:31 +0000 UTC FinishedAt: 2026-07-28 13:26:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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-workflowvlg7m/series-workflowvlg7m-convert-artifact-1039905610/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 13:26:13 +0000 UTC FinishedAt: 2026-07-28 14:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 13:26:13 +0000 UTC FinishedAt: 2026-07-28 14:35:29 +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:*b960830b-e331-4efd-b7be-cd007770e6fb,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-workflowvlg7m/series-workflowvlg7m-convert-artifact-1039905610/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": "2cf167dc-f430-4297-b1cd-e784c6114d60", "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-workflowvlg7m/series-workflowvlg7m-build-action-1901087544/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 13:26:13 +0000 UTC FinishedAt: 2026-07-28 14:35:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b960830b-e331-4efd-b7be-cd007770e6fb,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-workflowvlg7m/series-workflowvlg7m-convert-artifact-1039905610/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": "2cf167dc-f430-4297-b1cd-e784c6114d60", "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-workflowvlg7m/series-workflowvlg7m-build-action-1901087544/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:35:29 +0000 UTC FinishedAt: 2026-07-28 14:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:35:29 +0000 UTC FinishedAt: 2026-07-28 14:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:35:29 +0000 UTC FinishedAt: 2026-07-28 14:35:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:35:29 +0000 UTC FinishedAt: 2026-07-28 14:35:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-workflowvlg7m/series-workflowvlg7m-convert-artifact-1175558885/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:35:40 +0000 UTC FinishedAt: 2026-07-28 14:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:35:40 +0000 UTC FinishedAt: 2026-07-28 14:37:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cf167dc-f430-4297-b1cd-e784c6114d60,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-workflowvlg7m/series-workflowvlg7m-build-action-1901087544/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-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:37:49 +0000 UTC FinishedAt: 2026-07-28 14:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:37:49 +0000 UTC FinishedAt: 2026-07-28 14:37:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:37:49 +0000 UTC FinishedAt: 2026-07-28 15:23:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:37:49 +0000 UTC FinishedAt: 2026-07-28 15:23:01 +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:*b960830b-e331-4efd-b7be-cd007770e6fb,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-workflowvlg7m/series-workflowvlg7m-convert-artifact-1175558885/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": "251604f3-d92c-4f80-a7cb-b4c43d4d1c7c", "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-workflowvlg7m/series-workflowvlg7m-build-action-3797184305/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 14:37:49 +0000 UTC FinishedAt: 2026-07-28 15:22:51 +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:*b960830b-e331-4efd-b7be-cd007770e6fb,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-workflowvlg7m/series-workflowvlg7m-convert-artifact-1175558885/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": "251604f3-d92c-4f80-a7cb-b4c43d4d1c7c", "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-workflowvlg7m/series-workflowvlg7m-build-action-3797184305/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:23:01 +0000 UTC FinishedAt: 2026-07-28 15:23:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:23:01 +0000 UTC FinishedAt: 2026-07-28 15:23:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:23:01 +0000 UTC FinishedAt: 2026-07-28 15:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:23:01 +0000 UTC FinishedAt: 2026-07-28 15:24:55 +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:*251604f3-d92c-4f80-a7cb-b4c43d4d1c7c,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-workflowvlg7m/series-workflowvlg7m-build-action-3797184305/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-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:05 +0000 UTC FinishedAt: 2026-07-28 18:27:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:05 +0000 UTC FinishedAt: 2026-07-28 18:27:12 +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"],"focus":null,"focus_symbols":["shmem_fallocate"],"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:*2cf167dc-f430-4297-b1cd-e784c6114d60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*251604f3-d92c-4f80-a7cb-b4c43d4d1c7c,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-workflowvlg7m/series-workflowvlg7m-build-action-1901087544/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-workflowvlg7m/series-workflowvlg7m-build-action-3797184305/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:05 +0000 UTC FinishedAt: 2026-07-28 15:25:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:05 +0000 UTC FinishedAt: 2026-07-28 15:25:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_fallocate"],"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-workflowvlg7m/series-workflowvlg7m-convert-artifact-630738794/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:05 +0000 UTC FinishedAt: 2026-07-28 15:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:05 +0000 UTC FinishedAt: 2026-07-28 15:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:05 +0000 UTC FinishedAt: 2026-07-28 15:25:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:25 +0000 UTC FinishedAt: 2026-07-28 18:27:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvlg7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"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"],"focus":null,"focus_symbols":["shmem_fallocate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"c9b47e6b23114e939b17f818471c7a46e59006e7","config_name":"upstream-apparmor-kasan.config","enable_configs":["SHMEM","TMPFS"],"series_id":"5bb58f7b-bcc1-4f41-bf66-4d26b45540b5","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-07-28 15:25:25 +0000 UTC FinishedAt: 2026-07-28 18:27:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cf167dc-f430-4297-b1cd-e784c6114d60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*251604f3-d92c-4f80-a7cb-b4c43d4d1c7c,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-workflowvlg7m/series-workflowvlg7m-build-action-1901087544/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-workflowvlg7m/series-workflowvlg7m-build-action-3797184305/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-workflowvlg7m/series-workflowvlg7m-convert-artifact-630738794/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,}