Name: series-workflowlk6cl Phase: Succeeded StartedAt: 2026-06-26 12:40:49 +0000 UTC FinishedAt: 2026-06-26 16:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[0] Phase: Succeeded StartedAt: 2026-06-26 12:40:49 +0000 UTC FinishedAt: 2026-06-26 12:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 12:40:49 +0000 UTC FinishedAt: 2026-06-26 12:53:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED", "BLK_DEV_NULL_BLK", "BLK_DEV_NVME", "NVME_CORE", "CIFS" ], "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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED", "BLK_DEV_NULL_BLK", "BLK_DEV_NVME", "NVME_CORE", "CIFS" ], "series_id": "b704ab57-fd75-4096-b84e-0d7f81b1e29f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mempool_resize", "mempool_init_node", "mempool_create_node_noprof", "mempool_exit", "disk_alloc_zone_resources", "nvme_pci_alloc_iod_mempool" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05WTUUmIzM0OywKICAgICYjMzQ7TlZNRV9DT1JFJiMzNDssCiAgICAmIzM0O0NJRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1wb29sX3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDttZW1wb29sX2luaXRfbm9kZSYjMzQ7LAogICAgJiMzNDttZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZiYjMzQ7LAogICAgJiMzNDttZW1wb29sX2V4aXQmIzM0OywKICAgICYjMzQ7ZGlza19hbGxvY196b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBgbWVtcG9vbGAgQVBJLCBpbnRyb2R1Y2luZyBhIGBtYXhfbnJgIHBhcmFtZXRlciB0byBsaW1pdCBwb29sIGNhcGFjaXR5IGFuZCBjaGFuZ2luZyBgbWVtcG9vbF9yZXNpemVgIHRvIG5vIGxvbmdlciBhbGxvY2F0ZSBtZW1vcnkgaW1tZWRpYXRlbHkgYnV0IGluc3RlYWQgcmVseSBvbiBgbWVtcG9vbF9mcmVlYCB0byByZWZpbGwgdGhlIHBvb2wuIEl0IGFsc28gY2hhbmdlcyB0aGUgaW50ZXJuYWwgYXJyYXkgYWxsb2NhdGlvbiB0byB1c2UgYGt2bWFsbG9jYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gbWVjaGFuaXNtIHVzZWQgYnkgdmFyaW91cyBzdWJzeXN0ZW1zIChlLmcuLCBibG9jayBsYXllciwgTlZNZSwgQ0lGUykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlOGY1YzQ3MTIzOWYyNGE1ZGNjYWQ1NDRhNDcwZTE5MDQ1ZWVlNWYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTI6NTE6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXpvbmVkLmMgYi9ibG9jay9ibGstem9uZWQuY1xuaW5kZXggNmEyMjFjMTgwODg5N2EuLmNjMDYwYTBjM2U5OWZmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXpvbmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay16b25lZC5jXG5AQCAtMTkxOCw4ICYjNDM7MTkxOCwxMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSYjNDM7JiM0MzspXG4gXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0pO1xuIFxuLVx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKHBvb2xfc2l6ZSxcbi1cdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGJsa196b25lX3dwbHVnKSk7XG4mIzQzO1x0ZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChcbiYjNDM7XHRcdFx0XHRcdHBvb2xfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLFxuJiM0MztcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBibGtfem9uZV93cGx1ZykpO1xuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbmluZGV4IGI1Zjg0NjIwMDY3ODk5Li5lYWE0ODA0YWIzYzM1ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xuQEAgLTMzNDksNyAmIzQzOzMzNDksNyBAQCBzdGF0aWMgaW50IG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sKHN0cnVjdCBudm1lX2RldiAqZGV2KVxuIHtcbiBcdHNpemVfdCBhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVjdCBudm1lX2RtYV92ZWMpICogTlZNRV9NQVhfU0VHUztcbiBcbi1cdGRldi1cdTAwM2VkbWF2ZWNfbWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX25vZGUoMSxcbiYjNDM7XHRkZXYtXHUwMDNlZG1hdmVjX21lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZV9ub2RlKDEsIDIsXG4gXHRcdFx0bWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFxuIFx0XHRcdCh2b2lkICopYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRkZXZfdG9fbm9kZShkZXYtXHUwMDNlZGV2KSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmggYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxuaW5kZXggZThlNDQwZTA0YTA2MDMuLjA3MzE0MmY4MDZjZWJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXG5AQCAtMTgsNiAmIzQzOzE4LDcgQEAgdHlwZWRlZiB2b2lkIChtZW1wb29sX2ZyZWVfdCkodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcbiB0eXBlZGVmIHN0cnVjdCBtZW1wb29sIHtcbiBcdHNwaW5sb2NrX3QgbG9jaztcbiBcdGludCBtaW5fbnI7XHRcdC8qIG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xuJiM0MztcdGludCBtYXhfbnI7XHRcdC8qIG1heCBuciBvZiBlbGVtZW50cyBhdCAqZWxlbWVudHMgKi9cbiBcdGludCBjdXJyX25yO1x0XHQvKiBDdXJyZW50IG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xuIFx0dm9pZCAqKmVsZW1lbnRzO1xuIFxuQEAgLTM4LDcgJiM0MzszOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1wb29sX2lzX3NhdHVyYXRlZChzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcbiB9XG4gXG4gdm9pZCBtZW1wb29sX2V4aXQoc3RydWN0IG1lbXBvb2wgKnBvb2wpO1xuLWludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcbiYjNDM7aW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLCBpbnQgbWF4X25yLFxuIFx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbiBcdFx0dm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpO1xuIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxuQEAgLTQ5LDE1ICYjNDM7NTAsMTUgQEAgaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4gXG4gc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlKGludCBtaW5fbnIsIG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sXG4gXHRcdG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLCB2b2lkICpwb29sX2RhdGEpO1xuLXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLFxuJiM0MztzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcbiBcdFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXG4gXHRcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQpO1xuICNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfbm9kZSguLi4pXHRcdFx0XHRcdFxcXG4gXHRhbGxvY19ob29rcyhtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4tI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfcG9vbF9kYXRhKVx0XFxcbi1cdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX3Bvb2xfZGF0YSxcdFxcXG4tXHRcdFx0ICAgIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbiYjNDM7I2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfZGF0YSlcdFxcXG4mIzQzO1x0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCAoX21pbl9ucikqMiwgX2FsbG9jX2ZuLCBfZnJlZV9mbixcdFxcXG4mIzQzO1x0XHRcdCAgICBfZGF0YSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxuIFxuIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpO1xuIHZvaWQgbWVtcG9vbF9kZXN0cm95KHN0cnVjdCBtZW1wb29sICpwb29sKTtcbkBAIC0xMDIsNiAmIzQzOzEwMywxMyBAQCB2b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcbiBcdG1lbXBvb2xfY3JlYXRlKChfbWluX25yKSwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFx0XFxcbiBcdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSlcbiBcbiYjNDM7I2RlZmluZSBtZW1wb29sX2luaXRfa21hbGxvY19yZXNpemFibGVfcG9vbChfcG9vbCwgX21pbl9uciwgX21heF9uciwgX3NpemUpXHRcdFxcXG4mIzQzO1x0bWVtcG9vbF9pbml0X25vZGUoX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcdFxcXG4mIzQzO1x0XHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxuJiM0MzsjZGVmaW5lIG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2woX21pbl9uciwgX21heF9uciwgX3NpemUpXHRcdFx0XFxcbiYjNDM7XHRtZW1wb29sX2NyZWF0ZV9ub2RlKF9taW5fbnIsIF9tYXhfbnIsIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcdFx0XFxcbiYjNDM7XHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKShfc2l6ZSksIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbiYjNDM7XG4gLypcbiAgKiBBIG1lbXBvb2xfYWxsb2NfdCBhbmQgbWVtcG9vbF9mcmVlX3QgZm9yIGEgc2ltcGxlIHBhZ2UgYWxsb2NhdG9yIHRoYXRcbiAgKiBhbGxvY2F0ZXMgcGFnZXMgb2YgdGhlIG9yZGVyIHNwZWNpZmllZCBieSBwb29sX2RhdGFcbmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmNcbmluZGV4IGRiMjNlMGVlZjY1MmRlLi4zNWMxYTI4YjZjMWJiZSAxMDA2NDRcbi0tLSBhL21tL21lbXBvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9vbC5jXG5AQCAtMjA3LDcgJiM0MzsyMDcsNyBAQCB2b2lkIG1lbXBvb2xfZXhpdChzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcbiBcdFx0dm9pZCAqZWxlbWVudCA9IHJlbW92ZV9lbGVtZW50KHBvb2wpO1xuIFx0XHRwb29sLVx1MDAzZWZyZWUoZWxlbWVudCwgcG9vbC1cdTAwM2Vwb29sX2RhdGEpO1xuIFx0fVxuLVx0a2ZyZWUocG9vbC1cdTAwM2VlbGVtZW50cyk7XG4mIzQzO1x0a3ZmcmVlKHBvb2wtXHUwMDNlZWxlbWVudHMpO1xuIFx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IE5VTEw7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9leGl0KTtcbkBAIC0yMzAsMjIgJiM0MzsyMzAsMjIgQEAgdm9pZCBtZW1wb29sX2Rlc3Ryb3koc3RydWN0IG1lbXBvb2wgKnBvb2wpXG4gfVxuIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9kZXN0cm95KTtcbiBcbi1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4mIzQzO2ludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9uciwgaW50IG1heF9ucixcbiBcdFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXG4gXHRcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlX2lkKVxuIHtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4gXHRwb29sLVx1MDAzZW1pbl9uclx0PSBtaW5fbnI7XG4mIzQzO1x0cG9vbC1cdTAwM2VtYXhfbnJcdD0gbWF4X25yO1xuIFx0cG9vbC1cdTAwM2Vwb29sX2RhdGEgPSBwb29sX2RhdGE7XG4gXHRwb29sLVx1MDAzZWFsbG9jXHQ9IGFsbG9jX2ZuO1xuIFx0cG9vbC1cdTAwM2VmcmVlXHQ9IGZyZWVfZm47XG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnBvb2wtXHUwMDNld2FpdCk7XG4tXHQvKlxuLVx0ICogbWF4KCkgdXNlZCBoZXJlIHRvIGVuc3VyZSBzdG9yYWdlIGZvciBhdCBsZWFzdCAxIGVsZW1lbnQgdG8gc3VwcG9ydFxuLVx0ICogemVybyBtaW5pbXVtIHBvb2xcbi1cdCAqL1xuLVx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IGttYWxsb2NfYXJyYXlfbm9kZShtYXgoMSwgbWluX25yKSwgc2l6ZW9mKHZvaWQgKiksXG4tXHRcdFx0XHRcdCAgICBnZnBfbWFzaywgbm9kZV9pZCk7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKG1heF9uciBcdTAwM2MgMSB8fCBtaW5fbnIgXHUwMDNjIDApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHBvb2wtXHUwMDNlZWxlbWVudHMgPSBrdm1hbGxvY19hcnJheV9ub2RlX25vcHJvZihtYXhfbnIsIHNpemVvZih2b2lkICopLCBnZnBfbWFzaywgbm9kZV9pZCk7XG4gXHRpZiAoIXBvb2wtXHUwMDNlZWxlbWVudHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTI1Myw3ICYjNDM7MjUzLDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxuIFx0ICogRmlyc3QgcHJlLWFsbG9jYXRlIHRoZSBndWFyYW50ZWVkIG51bWJlciBvZiBidWZmZXJzLFxuIFx0ICogYWxzbyBwcmUtYWxsb2NhdGUgMSBlbGVtZW50IGZvciB6ZXJvIG1pbmltdW0gcG9vbC5cbiBcdCAqL1xuLVx0d2hpbGUgKHBvb2wtXHUwMDNlY3Vycl9uciBcdTAwM2MgbWF4KDEsIHBvb2wtXHUwMDNlbWluX25yKSkge1xuJiM0MztcdHdoaWxlIChwb29sLVx1MDAzZWN1cnJfbnIgXHUwMDNjIHBvb2wtXHUwMDNlbWluX25yKSB7XG4gXHRcdHZvaWQgKmVsZW1lbnQ7XG4gXG4gXHRcdGVsZW1lbnQgPSBwb29sLVx1MDAzZWFsbG9jKGdmcF9tYXNrLCBwb29sLVx1MDAzZXBvb2xfZGF0YSk7XG5AQCAtMjg2LDcgJiM0MzsyODYsNyBAQCBpbnQgbWVtcG9vbF9pbml0X25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcbiBcdFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXG4gXHRcdHZvaWQgKnBvb2xfZGF0YSlcbiB7XG4tXHRyZXR1cm4gbWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBhbGxvY19mbiwgZnJlZV9mbixcbiYjNDM7XHRyZXR1cm4gbWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtaW5fbnIgKiAyLCBhbGxvY19mbiwgZnJlZV9mbixcbiBcdFx0XHRcdCBwb29sX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSk7XG4gXG4gfVxuQEAgLTI5Niw2ICYjNDM7Mjk2LDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcbiAgKiBtZW1wb29sX2NyZWF0ZV9ub2RlIC0gY3JlYXRlIGEgbWVtb3J5IHBvb2xcbiAgKiBAbWluX25yOiAgICB0aGUgbWluaW11bSBudW1iZXIgb2YgZWxlbWVudHMgZ3VhcmFudGVlZCB0byBiZVxuICAqICAgICAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhpcyBwb29sLlxuJiM0MzsgKiBAbWF4X25yOiAgICB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUgcG9vbFxuICAqIEBhbGxvY19mbjogIHVzZXItZGVmaW5lZCBlbGVtZW50LWFsbG9jYXRpb24gZnVuY3Rpb24uXG4gICogQGZyZWVfZm46ICAgdXNlci1kZWZpbmVkIGVsZW1lbnQtZnJlZWluZyBmdW5jdGlvbi5cbiAgKiBAcG9vbF9kYXRhOiBvcHRpb25hbCBwcml2YXRlIGRhdGEgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLlxuQEAgLTMxMCw3ICYjNDM7MzExLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcbiAgKlxuICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgcG9vbCBvYmplY3Qgb3IgJU5VTEwgb24gZXJyb3IuXG4gICovXG4tc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsXG4mIzQzO3N0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLCBpbnQgbWF4X25yLFxuIFx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbiBcdFx0dm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpXG4ge1xuQEAgLTMyMCw3ICYjNDM7MzIxLDcgQEAgc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsXG4gXHRpZiAoIXBvb2wpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgYWxsb2NfZm4sIGZyZWVfZm4sIHBvb2xfZGF0YSxcbiYjNDM7XHRpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtYXhfbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXG4gXHRcdFx0ICAgICAgZ2ZwX21hc2ssIG5vZGVfaWQpKSB7XG4gXHRcdGtmcmVlKHBvb2wpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0zMzgsOSAmIzQzOzMzOSw4IEBAIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xuICAqICAgICAgICAgICAgICBhbGxvY2F0ZWQgZm9yIHRoaXMgcG9vbC5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gc2hyaW5rcy9ncm93cyB0aGUgcG9vbC4gSW4gdGhlIGNhc2Ugb2YgZ3Jvd2luZyxcbi0gKiBpdCBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ld1xuLSAqIHNpemUgaW1tZWRpYXRlbHksIGJ1dCBuZXcgbWVtcG9vbF9mcmVlKCkgY2FsbHMgd2lsbCByZWZpbGwgaXQuXG4tICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuXG4mIzQzOyAqIHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ldyBzaXplIGltbWVkaWF0ZWx5LCBidXQgbmV3IG1lbXBvb2xfZnJlZSgpXG4mIzQzOyAqIGNhbGxzIHdpbGwgcmVmaWxsIGl0LlxuICAqXG4gICogTm90ZSwgdGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IG5vIG1lbXBvb2xfZGVzdHJveSBpcyBjYWxsZWRcbiAgKiB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bm5pbmcuIG1lbXBvb2xfYWxsb2MoKSBcdTAwMjYgbWVtcG9vbF9mcmVlKClcbkBAIC0zNTEsMTEgJiM0MzszNTEsMTMgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZik7XG4gaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcbiB7XG4gXHR2b2lkICplbGVtZW50O1xuLVx0dm9pZCAqKm5ld19lbGVtZW50cztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRCVUdfT04obmV3X21pbl9uciBcdTAwM2M9IDApO1xuLVx0bWlnaHRfc2xlZXAoKTtcbiYjNDM7XHRpZiAoV0FSTl9PTihuZXdfbWluX25yIFx1MDAzYyAwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3X21pbl9uciBcdTAwM2UgcG9vbC1cdTAwM2VtYXhfbnIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0aWYgKG5ld19taW5fbnIgXHUwMDNjPSBwb29sLVx1MDAzZW1pbl9ucikge1xuQEAgLTM2Niw0NSAmIzQzOzM2OCw4IEBAIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpXG4gXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdH1cbiBcdFx0cG9vbC1cdTAwM2VtaW5fbnIgPSBuZXdfbWluX25yO1xuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHR9XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuLVx0LyogR3JvdyB0aGUgcG9vbCAqL1xuLVx0bmV3X2VsZW1lbnRzID0ga21hbGxvY19vYmpzKCpuZXdfZWxlbWVudHMsIG5ld19taW5fbnIpO1xuLVx0aWYgKCFuZXdfZWxlbWVudHMpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRpZiAodW5saWtlbHkobmV3X21pbl9uciBcdTAwM2M9IHBvb2wtXHUwMDNlbWluX25yKSkge1xuLVx0XHQvKiBSYWNlZCwgb3RoZXIgcmVzaXplIHdpbGwgZG8gb3VyIHdvcmsgKi9cbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0a2ZyZWUobmV3X2VsZW1lbnRzKTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXHRtZW1jcHkobmV3X2VsZW1lbnRzLCBwb29sLVx1MDAzZWVsZW1lbnRzLFxuLVx0XHRcdHBvb2wtXHUwMDNlY3Vycl9uciAqIHNpemVvZigqbmV3X2VsZW1lbnRzKSk7XG4tXHRrZnJlZShwb29sLVx1MDAzZWVsZW1lbnRzKTtcbi1cdHBvb2wtXHUwMDNlZWxlbWVudHMgPSBuZXdfZWxlbWVudHM7XG4tXHRwb29sLVx1MDAzZW1pbl9uciA9IG5ld19taW5fbnI7XG4tXG4tXHR3aGlsZSAocG9vbC1cdTAwM2VjdXJyX25yIFx1MDAzYyBwb29sLVx1MDAzZW1pbl9ucikge1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRlbGVtZW50ID0gcG9vbC1cdTAwM2VhbGxvYyhHRlBfS0VSTkVMLCBwb29sLVx1MDAzZXBvb2xfZGF0YSk7XG4tXHRcdGlmICghZWxlbWVudClcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChwb29sLVx1MDAzZWN1cnJfbnIgXHUwMDNjIHBvb2wtXHUwMDNlbWluX25yKSB7XG4tXHRcdFx0YWRkX2VsZW1lbnQocG9vbCwgZWxlbWVudCk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0XHRwb29sLVx1MDAzZWZyZWUoZWxlbWVudCwgcG9vbC1cdTAwM2Vwb29sX2RhdGEpO1x0LyogUmFjZWQgKi9cbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuIFx0fVxuLW91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLW91dDpcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O05WTUVfQ09SRSYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtcG9vbF9yZXNpemUmIzM0OywKICAgICYjMzQ7bWVtcG9vbF9pbml0X25vZGUmIzM0OywKICAgICYjMzQ7bWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7bWVtcG9vbF9leGl0JiMzNDssCiAgICAmIzM0O2Rpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7bnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYG1lbXBvb2xgIEFQSSwgaW50cm9kdWNpbmcgYSBgbWF4X25yYCBwYXJhbWV0ZXIgdG8gbGltaXQgcG9vbCBjYXBhY2l0eSBhbmQgY2hhbmdpbmcgYG1lbXBvb2xfcmVzaXplYCB0byBubyBsb25nZXIgYWxsb2NhdGUgbWVtb3J5IGltbWVkaWF0ZWx5IGJ1dCBpbnN0ZWFkIHJlbHkgb24gYG1lbXBvb2xfZnJlZWAgdG8gcmVmaWxsIHRoZSBwb29sLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGludGVybmFsIGFycmF5IGFsbG9jYXRpb24gdG8gdXNlIGBrdm1hbGxvY2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gYSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbSB1c2VkIGJ5IHZhcmlvdXMgc3Vic3lzdGVtcyAoZS5nLiwgYmxvY2sgbGF5ZXIsIE5WTWUsIENJRlMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOGY1YzQ3MTIzOWYyNGE1ZGNjYWQ1NDRhNDcwZTE5MDQ1ZWVlNWYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTI6NTE6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jCmluZGV4IDZhMjIxYzE4MDg4OTdhLi5jYzA2MGEwYzNlOTlmZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXpvbmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXpvbmVkLmMKQEAgLTE5MTgsOCAmIzQzOzE5MTgsMTAgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCWZvciAoaSA9IDA7IGkgJmx0OyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSYjNDM7JiM0MzspCiAJCUlOSVRfSExJU1RfSEVBRCgmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hbaV0pOwogCi0JZGlzay0mZ3Q7em9uZV93cGx1Z3NfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChwb29sX3NpemUsCi0JCQkJCQlzaXplb2Yoc3RydWN0IGJsa196b25lX3dwbHVnKSk7CiYjNDM7CWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKAomIzQzOwkJCQkJcG9vbF9zaXplLAomIzQzOwkJCQkJQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsCiYjNDM7CQkJCQlzaXplb2Yoc3RydWN0IGJsa196b25lX3dwbHVnKSk7CiAJaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc19wb29sKQogCQlnb3RvIGZyZWVfaGFzaDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmMgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwppbmRleCBiNWY4NDYyMDA2Nzg5OS4uZWFhNDgwNGFiM2MzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jCkBAIC0zMzQ5LDcgJiM0MzszMzQ5LDcgQEAgc3RhdGljIGludCBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChzdHJ1Y3QgbnZtZV9kZXYgKmRldikKIHsKIAlzaXplX3QgYWxsb2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnZtZV9kbWFfdmVjKSAqIE5WTUVfTUFYX1NFR1M7CiAKLQlkZXYtJmd0O2RtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLAomIzQzOwlkZXYtJmd0O2RtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLCAyLAogCQkJbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLAogCQkJKHZvaWQgKilhbGxvY19zaXplLCBHRlBfS0VSTkVMLAogCQkJZGV2X3RvX25vZGUoZGV2LSZndDtkZXYpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKaW5kZXggZThlNDQwZTA0YTA2MDMuLjA3MzE0MmY4MDZjZWJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaApAQCAtMTgsNiAmIzQzOzE4LDcgQEAgdHlwZWRlZiB2b2lkIChtZW1wb29sX2ZyZWVfdCkodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTsKIHR5cGVkZWYgc3RydWN0IG1lbXBvb2wgewogCXNwaW5sb2NrX3QgbG9jazsKIAlpbnQgbWluX25yOwkJLyogbnIgb2YgZWxlbWVudHMgYXQgKmVsZW1lbnRzICovCiYjNDM7CWludCBtYXhfbnI7CQkvKiBtYXggbnIgb2YgZWxlbWVudHMgYXQgKmVsZW1lbnRzICovCiAJaW50IGN1cnJfbnI7CQkvKiBDdXJyZW50IG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqLwogCXZvaWQgKiplbGVtZW50czsKIApAQCAtMzgsNyAmIzQzOzM5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbXBvb2xfaXNfc2F0dXJhdGVkKHN0cnVjdCBtZW1wb29sICpwb29sKQogfQogCiB2b2lkIG1lbXBvb2xfZXhpdChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7Ci1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsCiYjNDM7aW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLCBpbnQgbWF4X25yLAogCQltZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwKIAkJdm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpOwogaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsCkBAIC00OSwxNSAmIzQzOzUwLDE1IEBAIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLAogCiBzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGUoaW50IG1pbl9uciwgbWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwKIAkJbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7Ci1zdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwKJiM0MztzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9uciwKIAkJbWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sCiAJCXZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQpOwogI2RlZmluZSBtZW1wb29sX2NyZWF0ZV9ub2RlKC4uLikJCQkJCVwKIAlhbGxvY19ob29rcyhtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpCiAKLSNkZWZpbmUgbWVtcG9vbF9jcmVhdGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX3Bvb2xfZGF0YSkJXAotCW1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX3Bvb2xfZGF0YSwJXAotCQkJICAgIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSkKJiM0MzsjZGVmaW5lIG1lbXBvb2xfY3JlYXRlKF9taW5fbnIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sIF9kYXRhKQlcCiYjNDM7CW1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgKF9taW5fbnIpKjIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sCVwKJiM0MzsJCQkgICAgX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSkKIAogaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucik7CiB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7CkBAIC0xMDIsNiAmIzQzOzEwMywxMyBAQCB2b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTsKIAltZW1wb29sX2NyZWF0ZSgoX21pbl9uciksIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSwJXAogCQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpKQogCiYjNDM7I2RlZmluZSBtZW1wb29sX2luaXRfa21hbGxvY19yZXNpemFibGVfcG9vbChfcG9vbCwgX21pbl9uciwgX21heF9uciwgX3NpemUpCQlcCiYjNDM7CW1lbXBvb2xfaW5pdF9ub2RlKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsCVwKJiM0MzsJCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpCiYjNDM7I2RlZmluZSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKF9taW5fbnIsIF9tYXhfbnIsIF9zaXplKQkJCVwKJiM0MzsJbWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsCQlcCiYjNDM7CQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpCiYjNDM7CiAvKgogICogQSBtZW1wb29sX2FsbG9jX3QgYW5kIG1lbXBvb2xfZnJlZV90IGZvciBhIHNpbXBsZSBwYWdlIGFsbG9jYXRvciB0aGF0CiAgKiBhbGxvY2F0ZXMgcGFnZXMgb2YgdGhlIG9yZGVyIHNwZWNpZmllZCBieSBwb29sX2RhdGEKZGlmZiAtLWdpdCBhL21tL21lbXBvb2wuYyBiL21tL21lbXBvb2wuYwppbmRleCBkYjIzZTBlZWY2NTJkZS4uMzVjMWEyOGI2YzFiYmUgMTAwNjQ0Ci0tLSBhL21tL21lbXBvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb29sLmMKQEAgLTIwNyw3ICYjNDM7MjA3LDcgQEAgdm9pZCBtZW1wb29sX2V4aXQoc3RydWN0IG1lbXBvb2wgKnBvb2wpCiAJCXZvaWQgKmVsZW1lbnQgPSByZW1vdmVfZWxlbWVudChwb29sKTsKIAkJcG9vbC0mZ3Q7ZnJlZShlbGVtZW50LCBwb29sLSZndDtwb29sX2RhdGEpOwogCX0KLQlrZnJlZShwb29sLSZndDtlbGVtZW50cyk7CiYjNDM7CWt2ZnJlZShwb29sLSZndDtlbGVtZW50cyk7CiAJcG9vbC0mZ3Q7ZWxlbWVudHMgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChtZW1wb29sX2V4aXQpOwpAQCAtMjMwLDIyICYjNDM7MjMwLDIyIEBAIHZvaWQgbWVtcG9vbF9kZXN0cm95KHN0cnVjdCBtZW1wb29sICpwb29sKQogfQogRVhQT1JUX1NZTUJPTChtZW1wb29sX2Rlc3Ryb3kpOwogCi1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsCiYjNDM7aW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLCBpbnQgbWF4X25yLAogCQltZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwKIAkJdm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtwb29sLSZndDtsb2NrKTsKIAlwb29sLSZndDttaW5fbnIJPSBtaW5fbnI7CiYjNDM7CXBvb2wtJmd0O21heF9ucgk9IG1heF9ucjsKIAlwb29sLSZndDtwb29sX2RhdGEgPSBwb29sX2RhdGE7CiAJcG9vbC0mZ3Q7YWxsb2MJPSBhbGxvY19mbjsKIAlwb29sLSZndDtmcmVlCT0gZnJlZV9mbjsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7cG9vbC0mZ3Q7d2FpdCk7Ci0JLyoKLQkgKiBtYXgoKSB1c2VkIGhlcmUgdG8gZW5zdXJlIHN0b3JhZ2UgZm9yIGF0IGxlYXN0IDEgZWxlbWVudCB0byBzdXBwb3J0Ci0JICogemVybyBtaW5pbXVtIHBvb2wKLQkgKi8KLQlwb29sLSZndDtlbGVtZW50cyA9IGttYWxsb2NfYXJyYXlfbm9kZShtYXgoMSwgbWluX25yKSwgc2l6ZW9mKHZvaWQgKiksCi0JCQkJCSAgICBnZnBfbWFzaywgbm9kZV9pZCk7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKG1heF9uciAmbHQ7IDEgfHwgbWluX25yICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcG9vbC0mZ3Q7ZWxlbWVudHMgPSBrdm1hbGxvY19hcnJheV9ub2RlX25vcHJvZihtYXhfbnIsIHNpemVvZih2b2lkICopLCBnZnBfbWFzaywgbm9kZV9pZCk7CiAJaWYgKCFwb29sLSZndDtlbGVtZW50cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI1Myw3ICYjNDM7MjUzLDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLAogCSAqIEZpcnN0IHByZS1hbGxvY2F0ZSB0aGUgZ3VhcmFudGVlZCBudW1iZXIgb2YgYnVmZmVycywKIAkgKiBhbHNvIHByZS1hbGxvY2F0ZSAxIGVsZW1lbnQgZm9yIHplcm8gbWluaW11bSBwb29sLgogCSAqLwotCXdoaWxlIChwb29sLSZndDtjdXJyX25yICZsdDsgbWF4KDEsIHBvb2wtJmd0O21pbl9ucikpIHsKJiM0MzsJd2hpbGUgKHBvb2wtJmd0O2N1cnJfbnIgJmx0OyBwb29sLSZndDttaW5fbnIpIHsKIAkJdm9pZCAqZWxlbWVudDsKIAogCQllbGVtZW50ID0gcG9vbC0mZ3Q7YWxsb2MoZ2ZwX21hc2ssIHBvb2wtJmd0O3Bvb2xfZGF0YSk7CkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLAogCQltZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwKIAkJdm9pZCAqcG9vbF9kYXRhKQogewotCXJldHVybiBtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLAomIzQzOwlyZXR1cm4gbWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtaW5fbnIgKiAyLCBhbGxvY19mbiwgZnJlZV9mbiwKIAkJCQkgcG9vbF9kYXRhLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpOwogCiB9CkBAIC0yOTYsNiAmIzQzOzI5Niw3IEBAIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9pbml0X25vcHJvZik7CiAgKiBtZW1wb29sX2NyZWF0ZV9ub2RlIC0gY3JlYXRlIGEgbWVtb3J5IHBvb2wKICAqIEBtaW5fbnI6ICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBndWFyYW50ZWVkIHRvIGJlCiAgKiAgICAgICAgICAgICBhbGxvY2F0ZWQgZm9yIHRoaXMgcG9vbC4KJiM0MzsgKiBAbWF4X25yOiAgICB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUgcG9vbAogICogQGFsbG9jX2ZuOiAgdXNlci1kZWZpbmVkIGVsZW1lbnQtYWxsb2NhdGlvbiBmdW5jdGlvbi4KICAqIEBmcmVlX2ZuOiAgIHVzZXItZGVmaW5lZCBlbGVtZW50LWZyZWVpbmcgZnVuY3Rpb24uCiAgKiBAcG9vbF9kYXRhOiBvcHRpb25hbCBwcml2YXRlIGRhdGEgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLgpAQCAtMzEwLDcgJiM0MzszMTEsNyBAQCBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfaW5pdF9ub3Byb2YpOwogICoKICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgcG9vbCBvYmplY3Qgb3IgJU5VTEwgb24gZXJyb3IuCiAgKi8KLXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLAomIzQzO3N0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLCBpbnQgbWF4X25yLAogCQltZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwKIAkJdm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpCiB7CkBAIC0zMjAsNyAmIzQzOzMyMSw3IEBAIHN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLAogCWlmICghcG9vbCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBhbGxvY19mbiwgZnJlZV9mbiwgcG9vbF9kYXRhLAomIzQzOwlpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtYXhfbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsCiAJCQkgICAgICBnZnBfbWFzaywgbm9kZV9pZCkpIHsKIAkJa2ZyZWUocG9vbCk7CiAJCXJldHVybiBOVUxMOwpAQCAtMzM4LDkgJiM0MzszMzksOCBAQCBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKTsKICAqICAgICAgICAgICAgICBhbGxvY2F0ZWQgZm9yIHRoaXMgcG9vbC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNocmlua3MvZ3Jvd3MgdGhlIHBvb2wuIEluIHRoZSBjYXNlIG9mIGdyb3dpbmcsCi0gKiBpdCBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ldwotICogc2l6ZSBpbW1lZGlhdGVseSwgYnV0IG5ldyBtZW1wb29sX2ZyZWUoKSBjYWxscyB3aWxsIHJlZmlsbCBpdC4KLSAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgomIzQzOyAqIHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ldyBzaXplIGltbWVkaWF0ZWx5LCBidXQgbmV3IG1lbXBvb2xfZnJlZSgpCiYjNDM7ICogY2FsbHMgd2lsbCByZWZpbGwgaXQuCiAgKgogICogTm90ZSwgdGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IG5vIG1lbXBvb2xfZGVzdHJveSBpcyBjYWxsZWQKICAqIHdoaWxlIHRoaXMgZnVuY3Rpb24gaXMgcnVubmluZy4gbWVtcG9vbF9hbGxvYygpICZhbXA7IG1lbXBvb2xfZnJlZSgpCkBAIC0zNTEsMTEgJiM0MzszNTEsMTMgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZik7CiBpbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKQogewogCXZvaWQgKmVsZW1lbnQ7Ci0Jdm9pZCAqKm5ld19lbGVtZW50czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JQlVHX09OKG5ld19taW5fbnIgJmx0Oz0gMCk7Ci0JbWlnaHRfc2xlZXAoKTsKJiM0MzsJaWYgKFdBUk5fT04obmV3X21pbl9uciAmbHQ7IDApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChuZXdfbWluX25yICZndDsgcG9vbC0mZ3Q7bWF4X25yKQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKIAlpZiAobmV3X21pbl9uciAmbHQ7PSBwb29sLSZndDttaW5fbnIpIHsKQEAgLTM2Niw0NSAmIzQzOzM2OCw4IEBAIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKIAkJfQogCQlwb29sLSZndDttaW5fbnIgPSBuZXdfbWluX25yOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtsb2NrLCBmbGFncyk7Ci0KLQkvKiBHcm93IHRoZSBwb29sICovCi0JbmV3X2VsZW1lbnRzID0ga21hbGxvY19vYmpzKCpuZXdfZWxlbWVudHMsIG5ld19taW5fbnIpOwotCWlmICghbmV3X2VsZW1lbnRzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotCWlmICh1bmxpa2VseShuZXdfbWluX25yICZsdDs9IHBvb2wtJmd0O21pbl9ucikpIHsKLQkJLyogUmFjZWQsIG90aGVyIHJlc2l6ZSB3aWxsIGRvIG91ciB3b3JrICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtsb2NrLCBmbGFncyk7Ci0JCWtmcmVlKG5ld19lbGVtZW50cyk7Ci0JCWdvdG8gb3V0OwotCX0KLQltZW1jcHkobmV3X2VsZW1lbnRzLCBwb29sLSZndDtlbGVtZW50cywKLQkJCXBvb2wtJmd0O2N1cnJfbnIgKiBzaXplb2YoKm5ld19lbGVtZW50cykpOwotCWtmcmVlKHBvb2wtJmd0O2VsZW1lbnRzKTsKLQlwb29sLSZndDtlbGVtZW50cyA9IG5ld19lbGVtZW50czsKLQlwb29sLSZndDttaW5fbnIgPSBuZXdfbWluX25yOwotCi0Jd2hpbGUgKHBvb2wtJmd0O2N1cnJfbnIgJmx0OyBwb29sLSZndDttaW5fbnIpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJZWxlbWVudCA9IHBvb2wtJmd0O2FsbG9jKEdGUF9LRVJORUwsIHBvb2wtJmd0O3Bvb2xfZGF0YSk7Ci0JCWlmICghZWxlbWVudCkKLQkJCWdvdG8gb3V0OwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJaWYgKHBvb2wtJmd0O2N1cnJfbnIgJmx0OyBwb29sLSZndDttaW5fbnIpIHsKLQkJCWFkZF9lbGVtZW50KHBvb2wsIGVsZW1lbnQpOwotCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJCXBvb2wtJmd0O2ZyZWUoZWxlbWVudCwgcG9vbC0mZ3Q7cG9vbF9kYXRhKTsJLyogUmFjZWQgKi8KLQkJCWdvdG8gb3V0OwotCQl9CiAJfQotb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotb3V0OgogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChtZW1wb29sX3Jlc2l6ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1wb29sIEFQSSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgdGhlIGBtZW1wb29sYCBBUEkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gbWFraW5nIHRoZSBwb29scyByZXNpemFibGUsIHdoaWNoIGlzIGdvb2QuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGBtZW1wb29sX2luaXRfbm9kZWAgYW5kIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAgYW5kIHNpZ25pZmljYW50bHkgYWx0ZXJzIGBtZW1wb29sX3Jlc2l6ZWAuIEl0IGFwcGVhcnMgYG1lbXBvb2xfcmVzaXplYCBubyBsb25nZXIgcmVhbGxvY2F0ZXMgdGhlIHVuZGVybHlpbmcgYXJyYXksIGluc3RlYWQgaXQgY2hhbmdlcyBgbWluX25yYCwgYW5kIHJlbGllcyBvbiBgbWF4X25yYCBub3cuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIGFuZCBgbWVtcG9vbF9pbml0X2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBhYm91dCB0aGUgZGlyZWN0aW9uLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4uLiBBaCwgaGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBwYXJ0OiBpbiBgbWVtcG9vbF9yZXNpemVgLCB0aGUgcGF0Y2ggbm93IGp1c3QgY2hlY2tzIGlmIHRoZSByZXF1ZXN0ZWQgYG5ld19taW5fbnJgIGV4Y2VlZHMgYHBvb2wtJmd0O21heF9ucmAgYW5kIHJldHVybnMgYC1FTk9TUENgIGlmIHRoYXQgaXMgdGhlIGNhc2UuIElmIHRoZSBkZXNpcmVkIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IG1pbmltdW0sIGl0IGZyZWVzIGV4dHJhIGVsZW1lbnRzLiBCdXQgdGhlIGtleSBwYXJ0IGhlcmUgaXMgdGhhdCB3aGVuIHlvdSBpbmNyZWFzZSBgbmV3X21pbl9ucmAgaXQganVzdCAqc2V0cyogdGhlIHZhbHVlIGFuZCBkb2VzIE5PVCBhbGxvY2F0ZS4gVGhlIGNvZGUgY29tbWVudHMgaW5kaWNhdGUgdGhhdCBuZXcgY2FsbHMgdG8gYG1lbXBvb2xfZnJlZSgpYCB3aWxsIGV2ZW50dWFsbHkgcmVmaWxsIGl0LiAqVGhhdCYjMzk7cyogYSBjaGFuZ2U7IHRoZSBvbGQgY29kZSBoYWQgYW4gZXhwbGljaXQgYWxsb2NhdGlvbiBsb29wIHRvIGVuc3VyZSB0aGUgcG9vbCB3YXMgYWx3YXlzIGF0IGxlYXN0IGBtaW5fbnJgIGluIHNpemUsIGJ1dCBub3cgaXQmIzM5O3MgZ29uZSEgVGhpcyBpcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHN0cmF0ZWd5LgoKV2FpdCwgc28gdGhleSYjMzk7cmUgZGVmZXJyaW5nIGFsbG9jYXRpb24gdG8gdGhlIGZyZWUgcGF0aD8gVGhhdCBoYXMgZGVmaW5pdGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSwgZXJyb3IgaGFuZGxpbmcsIGFuZCBtZW1vcnkgZnJhZ21lbnRhdGlvbi4gSXQmIzM5O3MgYSB0cmFkZS1vZmY6IHBvdGVudGlhbGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSBvbiB0aGUgcmVzaXplIHBhdGggYXQgdGhlIGV4cGVuc2Ugb2YgcG90ZW50aWFsIGRlbGF5cyB3aGVuIHRoZSBzeXN0ZW0gbmVlZHMgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkgYW5kIHRoZSBtZW1wb29sIGlzbiYjMzk7dCBpbW1lZGlhdGVseSByZWFkeSB0byBwcm92aWRlIGl0LgoKT2theSwgc28gdGhpcyBpcyBhICpjb3JlKiBrZXJuZWwgY2hhbmdlLiBJdCBhZmZlY3RzIGFsbCB1c2VycyBvZiBtZW1wb29sLCB3aGljaCBpcyBodWdlISBEZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byBjYXRjaCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBvciByZWdyZXNzaW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgbWVtcG9vbGAgaXMgYWx3YXlzIGVuYWJsZWQsIGFuZCBpdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQgaW50byB0aGUga2VybmVsIChhdCBsZWFzdCBhcyBmYXIgYXMgSSBjYW4gc2VlIGluIGBtbS9tZW1wb29sLmNgIGFuZCB0aGUgYG1tL01ha2VmaWxlYCkuIFRoYXQgbWFrZXMgaXQgZXZlbiBtb3JlIGNyaXRpY2FsIHRvIHRlc3QgdGhvcm91Z2hseSwgc2luY2UgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb29sLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT00OT1lbmRpZlxubW0vTWFrZWZpbGUtNTAtXG5tbS9NYWtlZmlsZTo1MTpvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbm1tL01ha2VmaWxlLTUyLVx0XHRcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgS2VybmVsIE1vZHVsZSBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGBtZW1wb29sLm9gIGlzIGFsd2F5cyBhIGdvLCBubyBjb25kaXRpb25hbCBmbGFncyB0aGVyZS4gRWFzeSBlbm91Z2guIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYGJsay16b25lZC5jYC4gQWhhLCB0aGF0IG9uZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgbW9kdWxhciBhbmQgYXZvaWRzIGNvbXBpbGluZyB1bm5lY2Vzc2FyeSBjb2RlLgoKTmV4dCB1cCwgYG52bWUvaG9zdC9wY2kuY2AuIFRoaXMgb25lJiMzOTtzIGEgbGl0dGxlIG1vcmUgaW52b2x2ZWQsIGdvdHRhIHRyYWNrIGRvd24gaXRzIGNvbmRpdGlvbnMuIE9rYXksIGhlcmUgd2UgZ28uLi4gaXQmIzM5O3MgY29udGluZ2VudCBvbiAqYm90aCogYENPTkZJR19OVk1FX0NPUkVgICphbmQqIGBDT05GSUdfQkxLX0RFVl9OVk1FYCBiZWluZyBkZWZpbmVkLiBNYWtlcyBwZXJmZWN0IHNlbnNlLCBjb25zaWRlcmluZyB0aGUgbmVlZCBmb3IgdGhlIE5WTWUgY29yZSBhbmQgYmxvY2sgZGV2aWNlIHN1cHBvcnQgYmVmb3JlIHRoZSBQQ0kgaG9zdCBkcml2ZXIgd291bGQgZXZlbiBiZSByZWxldmFudC4gR29vZCwgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsay16b25lZC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9Mjg9b2JqLSQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSAmIzQzOz0gYmlvLWludGVncml0eS5vIGJsay1pbnRlZ3JpdHkubyB0MTAtcGkubyBcXFxuYmxvY2svTWFrZWZpbGUtMjktXHRcdFx0XHQgICBiaW8taW50ZWdyaXR5LWF1dG8ubyBiaW8taW50ZWdyaXR5LWZzLm9cbmJsb2NrL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEKVx0JiM0Mzs9IGJsay16b25lZC5vXG5ibG9jay9NYWtlZmlsZS0zMS1vYmotJChDT05GSUdfQkxLX1dCVClcdFx0JiM0Mzs9IGJsay13YnQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBOVk1lIEhvc3QgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLCBwcm9iYWJseSB0byBkZWJ1ZyBzb21ldGhpbmcgc3BlY2lmaWMsIGNvbnRyaWJ1dGUgYSBwYXRjaCwgb3IgbWF5YmUganVzdCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIE5WTWUgaG9zdCBkcml2ZXJzIHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBwYXJzZSB0aGUgaW1wbGljYXRpb25zIOKAkyB0aGlzIE1ha2VmaWxlIGlzIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGNvbXBpbGluZyB0aGUgTlZNZSBob3N0IGRyaXZlciBjb21wb25lbnRzLiBJIGtub3cgdGhlcmUgd2lsbCBiZSBydWxlcyBmb3IgYnVpbGRpbmcgb2JqZWN0IGZpbGVzLCBsaW5raW5nIHRoZW0gaW50byBtb2R1bGVzLCBoYW5kbGluZyBkZXBlbmRlbmNpZXMuLi4gbGlrZWx5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncywgb3B0aW9ucyBmb3IgZGlmZmVyZW50IE5WTWUgY29udHJvbGxlciB2ZW5kb3JzLCBvciBwZXJoYXBzIGJ1aWxkLXRpbWUgb3B0aW1pemF0aW9ucy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSB2YXJpb3VzIHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIGBudm1lL2hvc3RgIGRpcmVjdG9yeSBhcmUgYnJvdWdodCB0b2dldGhlciwgaG93IGhlYWRlcnMgYXJlIGluY2x1ZGVkLCBhbmQgd2hhdCBtb2R1bGVzIG9yIGJpbmFyaWVzIGFyZSBwcm9kdWNlZC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIGRlY2lwaGVyIHRoZSBidWlsZCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2kubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlPTIwPW52bWUtY29yZS0kKENPTkZJR19OVk1FX0hPU1RfQVVUSClcdCYjNDM7PSBhdXRoLm9cbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlLTIxLVxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6MjI6bnZtZS15XHRcdFx0XHRcdCYjNDM7PSBwY2kub1xuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUtMjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUyNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNb2R1bGUgRGVwZW5kZW5jeSBJbnF1aXJ5KioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYnVpbGQgY29tbWFuZDogYG52bWUteSAmIzQzOz0gcGNpLm9gLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IFdoYXQmIzM5O3MgdGhlICpyZWFsKiBkZXBlbmRlbmN5IGNoYWluIGhlcmUgZm9yIHRoZSBgbnZtZWAgZHJpdmVyPyBJJiMzOTttIGFzc3VtaW5nIGBudm1lYCBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEl0IHNlZW1zIGxpa2UgdGhlIGBwY2kub2AgbW9kdWxlIGlzIGJlaW5nIGxpbmtlZCBpbiwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIHNldHRpbmcgdGhhdCBhY3R1YWxseSAqZW5hYmxlcyogdGhlIGNvcmUgYG52bWVgIGZ1bmN0aW9uYWxpdHkuIElzIGl0IGBDT05GSUdfTlZNRWAsIGBDT05GSUdfQkxLX0RFVl9OVk1FYCwgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZXJlJiMzOTtzIHByb2JhYmx5IGFuIGludGVybWVkaWF0ZSBkZXBlbmRlbmN5IHNvbWV3aGVyZSB0aGF0IHRpZXMgdGhlIGRldmljZSBkcml2ZXIgdG8gUENJLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRocm91Z2ggdGhlIEtjb25maWcgaGllcmFyY2h5IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0uKm52bWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZT0zPWNjZmxhZ3MteVx0XHRcdFx0JiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS00LVxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTlZNRV9DT1JFKVx0XHRcdCYjNDM7PSBudm1lLWNvcmUub1xuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxLX0RFVl9OVk1FKVx0XHQmIzQzOz0gbnZtZS5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OVk1FX0ZBQlJJQ1MpXHRcdCYjNDM7PSBudm1lLWZhYnJpY3Mub1xuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTlZNRV9SRE1BKVx0XHRcdCYjNDM7PSBudm1lLXJkbWEub1xuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTlZNRV9GQylcdFx0XHQmIzQzOz0gbnZtZS1mYy5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfTlZNRV9UQ1ApXHRcdFx0JiM0Mzs9IG52bWUtdGNwLm9cbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19OVk1FX0FQUExFKVx0XHQmIzQzOz0gbnZtZS1hcHBsZS5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS0xMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBOVk1lIGFuZCBNZW1vcnkgUG9vbHMqKgoKT2theSwgc28gYENPTkZJR19CTEtfREVWX05WTUVgIGJyaW5ncyBpbiBgbnZtZS5vYCwgd2hpY2ggbmF0dXJhbGx5IGluY2x1ZGVzIGBwY2kub2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZyB3aXRoaW4gdGhhdCBtb2R1bGUuIExldCYjMzk7cyBzZWUsIHdoYXQgaGFzIGNoYW5nZWQ/CgpSaWdodCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBzZWUgdGhlbTogYG1lbXBvb2xfZXhpdGAsIGBtZW1wb29sX2Rlc3Ryb3lgICh3aGljaCwgd2hpbGUgbm90IGNoYW5nZWQsIHByb3ZpZGVzIHZhbHVhYmxlIGNvbnRleHQpLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9pbml0X25vcHJvZmAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGFuZCBgbWVtcG9vbF9yZXNpemVgLgoKYG1lbXBvb2xfcmVzaXplYCBsb29rcyBsaWtlIHRoZSBwcmltZSBjYW5kaWRhdGUgZm9yIGluaXRpYWwgZnV6emluZyBlZmZvcnQuIEl0IGhhcyB0aGUgbW9zdCBzdWJzdGFudGl2ZSBsb2dpYyBjaGFuZ2VzLiBCdXQgYG1lbXBvb2xfaW5pdF9ub2RlYCBhbHNvIGdvdCBhIHRvdWNoLXVwIChzcGVjaWZpY2FsbHksIHVzaW5nIGBrdm1hbGxvY19hcnJheV9ub2RlX25vcHJvZmApLCBhbmQgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCBpcyBhbHNvIG9uIHRoZSBtb2RpZmllZCBsaXN0LiBJJiMzOTtsbCBhZGQgYG1lbXBvb2xfcmVzaXplYCwgYG1lbXBvb2xfaW5pdF9ub2RlYCwgYW5kIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAgdG8gYEZvY3VzU3ltYm9sc2AuCgpJIGFsc28gd2FudCB0byBjaGVjayBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgYW5kIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGAuIFRoZXkgY291bGQgYmUgZnJ1aXRmdWwsIHRvby4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSByZWFjaGFiaWxpdHkuIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGAgbGl2ZXMgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jYCwgc28gaXQgc2VlbXMgcmVsZXZhbnQuIEFuZCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgaW4gYGJsb2NrL2Jsay16b25lZC5jYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgY2FsbGVycyBmb3IgYG1lbXBvb2xfcmVzaXplYCwganVzdCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvb2xfcmVzaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay16b25lZC5jPTIwNzY9c3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMTI4LVxuYmxvY2svYmxrLXpvbmVkLmM6MjEyOTpcdG1lbXBvb2xfcmVzaXplKGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCwgcG9vbF9zaXplKTtcbmJsb2NrL2Jsay16b25lZC5jLTIxMzAtXG4tLVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYz04Njk9c3RhdGljIGVudW0gemZjcF9lcnBfYWN0X3Jlc3VsdCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmKFxuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYzo4ODQ6XHRpZiAobWVtcG9vbF9yZXNpemUoYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhLFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYy04ODUtXHRcdFx0ICAgYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlc3RhdF9yZWFkX2J1Zl9udW0pKVxuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg3LVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYzo4ODg6XHRpZiAobWVtcG9vbF9yZXNpemUoYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9vbC5zdGF0dXNfcmVhZF9yZXEsXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4OS1cdFx0XHQgICBhY3QtXHUwMDNlYWRhcHRlci1cdTAwM2VzdGF0X3JlYWRfYnVmX251bSkpXG4tLVxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MTA1OT1jbGVhbl9kZW11bHRpcGxleF9pbmZvKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcilcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMTQ4LVx0aWYgKGxlbmd0aCBcdTAwM2UgMClcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jOjExNDk6XHRcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggJiM0MzsgY2lmc19taW5fcmN2KTtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTExNTAtfVxuLS1cbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jPTEyNTQ9Y2lmc19kZW11bHRpcGxleF90aHJlYWQodm9pZCAqcClcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMjcxLVx0aWYgKGxlbmd0aCBcdTAwM2UgMSlcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jOjEyNzI6XHRcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggJiM0MzsgY2lmc19taW5fcmN2KTtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTEyNzMtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9NTM9c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNjItXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo2MzppbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKTtcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTY0LXZvaWQgbWVtcG9vbF9kZXN0cm95KHN0cnVjdCBtZW1wb29sICpwb29sKTtcbi0tXG5tbS9tZW1wb29sLmM9MzMyPUVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xuLS1cbm1tL21lbXBvb2wuYy0zMzQtLyoqXG5tbS9tZW1wb29sLmM6MzM1OiAqIG1lbXBvb2xfcmVzaXplIC0gcmVzaXplIGFuIGV4aXN0aW5nIG1lbW9yeSBwb29sXG5tbS9tZW1wb29sLmMtMzM2LSAqIEBwb29sOiAgICAgICBwb2ludGVyIHRvIHRoZSBtZW1vcnkgcG9vbCB3aGljaCB3YXMgYWxsb2NhdGVkIHZpYVxuLS1cbm1tL21lbXBvb2wuYy0zNTAtICovXG5tbS9tZW1wb29sLmM6MzUxOmludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpXG5tbS9tZW1wb29sLmMtMzUyLXtcbi0tXG5tbS9tZW1wb29sLmMtMzc0LX1cbm1tL21lbXBvb2wuYzozNzU6RVhQT1JUX1NZTUJPTChtZW1wb29sX3Jlc2l6ZSk7XG5tbS9tZW1wb29sLmMtMzc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgbWVtcG9vbF9yZXNpemVgIFBhdGNoKioKCk9rYXksIHNvIGBtZW1wb29sX3Jlc2l6ZWAgaXMgdXNlZCBpbiBhIGZldyBwbGFjZXMg4oCTIGBibG9jay9ibGstem9uZWQuY2AsIGBkcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jYCwgYW5kIGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoJiMzOTtzIGltcGxpY2F0aW9ucy4gIFJpZ2h0LCBJIHNlZSBpdC4gVGhlIGNoYW5nZSBtYWtlcyBgbWVtcG9vbF9yZXNpemVgIHJldHVybiBgLUVOT1NQQ2AgaWYgdGhlIHJlcXVlc3RlZCBgbmV3X21pbl9ucmAgZXhjZWVkcyB0aGUgYHBvb2wtJmd0O21heF9ucmAuIEFuZCBgbWVtcG9vbF9jcmVhdGVgIG5vdyBpbml0aWFsaXplcyBgbWF4X25yYCB0byBkb3VibGUgdGhlIGluaXRpYWwgYG1pbl9ucmAuICBUaGF0IG1lYW5zIGlmIEkgY2FsbCBgbWVtcG9vbF9yZXNpemVgIHdpdGggYSBgbmV3X21pbl9ucmAgZ3JlYXRlciB0aGFuIHR3aWNlIHRoZSAqaW5pdGlhbCogbWluaW11bSwgaXQmIzM5O3MgZ29pbmcgdG8gZmFpbC4gIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCBwbGF5cyBvdXQgaW4gYGZzL3NtYi9jbGllbnQvY29ubmVjdC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaWZzX3JlcV9wb29scCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9NDE0PW1lbXBvb2xfdCAqY2lmc19zbV9yZXFfcG9vbHA7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjQxNTptZW1wb29sX3QgKmNpZnNfcmVxX3Bvb2xwO1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYy00MTYtbWVtcG9vbF90IGNpZnNfbWlkX3Bvb2w7XG4tLVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYz0xNzM2PWNpZnNfaW5pdF9yZXF1ZXN0X2J1ZnModm9pZClcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE3NzEtXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjE3NzI6XHRjaWZzX3JlcV9wb29scCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChjaWZzX21pbl9yY3YsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE3NzMtXHRcdFx0XHRcdFx0ICBjaWZzX3JlcV9jYWNoZXApO1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzc0LVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxNzc1Olx0aWYgKGNpZnNfcmVxX3Bvb2xwID09IE5VTEwpIHtcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTc3Ni1cdFx0a21lbV9jYWNoZV9kZXN0cm95KGNpZnNfcmVxX2NhY2hlcCk7XG4tLVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzkwLVx0aWYgKGNpZnNfc21fcmVxX2NhY2hlcCA9PSBOVUxMKSB7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjE3OTE6XHRcdG1lbXBvb2xfZGVzdHJveShjaWZzX3JlcV9wb29scCk7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE3OTItXHRcdGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApO1xuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTgwNi1cdGlmIChjaWZzX3NtX3JlcV9wb29scCA9PSBOVUxMKSB7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjE4MDc6XHRcdG1lbXBvb2xfZGVzdHJveShjaWZzX3JlcV9wb29scCk7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE4MDgtXHRcdGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApO1xuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTgxNz1jaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKHZvaWQpXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE4MTgte1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxODE5Olx0bWVtcG9vbF9kZXN0cm95KGNpZnNfcmVxX3Bvb2xwKTtcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTgyMC1cdGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApO1xuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaD0yMTQyPWV4dGVybiBtZW1wb29sX3QgKmNpZnNfc21fcmVxX3Bvb2xwO1xuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oOjIxNDM6ZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7XG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmgtMjE0NC1leHRlcm4gbWVtcG9vbF90IGNpZnNfbWlkX3Bvb2w7XG4tLVxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MTA1OT1jbGVhbl9kZW11bHRpcGxleF9pbmZvKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcilcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMTQ4LVx0aWYgKGxlbmd0aCBcdTAwM2UgMClcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jOjExNDk6XHRcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggJiM0MzsgY2lmc19taW5fcmN2KTtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTExNTAtfVxuLS1cbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jPTEyNTQ9Y2lmc19kZW11bHRpcGxleF90aHJlYWQodm9pZCAqcClcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMjcxLVx0aWYgKGxlbmd0aCBcdTAwM2UgMSlcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jOjEyNzI6XHRcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggJiM0MzsgY2lmc19taW5fcmN2KTtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTEyNzMtXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmM9MTg3PWNpZnNfYnVmX2dldCh2b2lkKVxuLS1cbmZzL3NtYi9jbGllbnQvbWlzYy5jLTIwMS1cdCAqL1xuZnMvc21iL2NsaWVudC9taXNjLmM6MjAyOlx0cmV0X2J1ZiA9IG1lbXBvb2xfYWxsb2MoY2lmc19yZXFfcG9vbHAsIEdGUF9OT0ZTKTtcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTIwMy1cbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYz0yMTY9Y2lmc19idWZfcmVsZWFzZSh2b2lkICpidWZfdG9fZnJlZSlcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYy0yMjEtXHR9XG5mcy9zbWIvY2xpZW50L21pc2MuYzoyMjI6XHRtZW1wb29sX2ZyZWUoYnVmX3RvX2ZyZWUsIGNpZnNfcmVxX3Bvb2xwKTtcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTIyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBTTUIgQ2xpZW50IFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYGZzL3NtYi9jbGllbnQvY29ubmVjdC5jYCBhbmQgaW1tZWRpYXRlbHkgYSByZWQgZmxhZyBwb3BzIHVwLiBJdCYjMzk7cyB0aGUgYG1lbXBvb2xfcmVzaXplYCBmdW5jdGlvbiBjYWxsLiBUaGV5JiMzOTtyZSB0cnlpbmcgdG8gcmVzaXplIGBjaWZzX3JlcV9wb29scGAsIGFuZCB0aGF0IHBvb2wgd2FzIGluaXRpYWxseSBjcmVhdGVkIHdpdGggYGNpZnNfbWluX3JjdmAsIHdoaWNoIGlzIDY0LiBTbywgdGhlIGluaXRpYWwgc2l6ZSwgYW5kIHRoZXJlZm9yZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMsIGlzIDEyOCAoNjQqMiwgSSBhbSBhc3N1bWluZyB0aGlzLCBiYXNlZCBvbiBleHBlcmllbmNlKS4KCk5vdywgaWYgYGxlbmd0aCAmIzQzOyBjaWZzX21pbl9yY3ZgIGlzICpncmVhdGVyKiB0aGFuIDEyOCwgYG1lbXBvb2xfcmVzaXplYCBpcyBnb2luZyB0byBmYWlsLCB3aGljaCBpcyBleGFjdGx5IHRoZSBwb2ludC4KClRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBgbGVuZ3RoYCBpcyBlcXVhbCB0byBgYXRvbWljX2RlY19yZXR1cm4oJmFtcDt0Y3BTZXNBbGxvY0NvdW50KWAuIElmIGB0Y3BTZXNBbGxvY0NvdW50YCBzb21laG93IGVuZHMgdXAgYmVpbmcgbGFyZ2UsIHRoZW4gdGhhdCBhZGRpdGlvbiB3aWxsIGNhdXNlIGFuIG92ZXJmbG93LiAqQW5kKiwgdG8gYWRkIGluc3VsdCB0byBpbmp1cnksIHRoZSByZXR1cm4gdmFsdWUgb2YgYG1lbXBvb2xfcmVzaXplYCBpcyAqaWdub3JlZCohIFRoaXMgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSBkZW5pYWwtb2Ytc2VydmljZSBvciBldmVuIGEgbW9yZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHksIHBhcnRpY3VsYXJseSBpZiB0aGF0IGBsZW5ndGhgIGlzIGF0dGFja2VyLWNvbnRyb2xsZWQuIEEgbWVtb3J5IHBvb2wgcmVzaXplIGZhaWx1cmUgaW4gYSBjcml0aWNhbCBwYXRoIGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIGFsd2F5cyBnb3QgbXkgYXR0ZW50aW9uLgoKSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBleHBsb2l0YXRpb24gdmVjdG9ycywgYnV0IEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGVsbGluZyBtZSB0aGlzIGlzbiYjMzk7dCB0aGUgb25seSBwbGFjZSB0aGlzIGxvZ2ljIGlzIG9jY3VycmluZy4gTGV0JiMzOTtzIHNlZSBpZiBzb21ldGhpbmcgc2ltaWxhciBvY2N1cnMgaW4gYHpmY3BfZXJwLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb29sX3Jlc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYz04Njk9c3RhdGljIGVudW0gemZjcF9lcnBfYWN0X3Jlc3VsdCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmKFxuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYzo4ODQ6XHRpZiAobWVtcG9vbF9yZXNpemUoYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhLFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYy04ODUtXHRcdFx0ICAgYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlc3RhdF9yZWFkX2J1Zl9udW0pKVxuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg3LVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYzo4ODg6XHRpZiAobWVtcG9vbF9yZXNpemUoYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9vbC5zdGF0dXNfcmVhZF9yZXEsXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4OS1cdFx0XHQgICBhY3QtXHUwMDNlYWRhcHRlci1cdTAwM2VzdGF0X3JlYWRfYnVmX251bSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQW5hbHl6aW5nIGB6ZmNwX2VycC5jYCYjMzk7cyBFcnJvciBIYW5kbGluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgYHpmY3BfZXJwLmNgICpkb2VzKiBzZWVtIHRvIGJlIGNoZWNraW5nIHJldHVybiB2YWx1ZXMg4oCTIHRoYXQmIzM5O3MgZ29vZCBwcmFjdGljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgZXNwZWNpYWxseSBjb25jZXJuaW5nIGVycm9yIGNvbmRpdGlvbnMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGV5IGFyZSBoYW5kbGVkLCBzbyBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZS4gTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY2hlY2sgYW5kIHVuZGVyc3RhbmQgaG93IGBzcl9kYXRhYCBpcyBiZWluZyBjb25zdHJ1Y3RlZC4gS25vd2luZyBob3cgdGhlIGRhdGEgaXMgY3JlYXRlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIHN0YXRlcywgYW5kIHRoZXJlZm9yZSwgaG93IGVycm9ycyBtaWdodCBhcmlzZSBhbmQgYmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG9vbC5zcl9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL3Njc2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM9MjA2PXN0YXRpYyBpbnQgemZjcF9hbGxvY2F0ZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jLTIzOS1cdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIpIFx1MDAzZSBQQUdFX1NJWkUpO1xuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYzoyNDA6XHRhZGFwdGVyLVx1MDAzZXBvb2wuc3JfZGF0YSA9XG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jLTI0MS1cdFx0bWVtcG9vbF9jcmVhdGVfcGFnZV9wb29sKEZTRl9TVEFUVVNfUkVBRFNfUkVDT00sIDApO1xuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYzoyNDI6XHRpZiAoIWFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhKVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYy0yNDMtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM9MjUzPXN0YXRpYyB2b2lkIHpmY3BfZnJlZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jLTI1OS1cdG1lbXBvb2xfZGVzdHJveShhZGFwdGVyLVx1MDAzZXBvb2wuc3RhdHVzX3JlYWRfcmVxKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM6MjYwOlx0bWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMtMjYxLVx0bWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItXHUwMDNlcG9vbC5naWRfcG4pO1xuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM9ODY5PXN0YXRpYyBlbnVtIHpmY3BfZXJwX2FjdF9yZXN1bHQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4My1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg0Olx0aWYgKG1lbXBvb2xfcmVzaXplKGFjdC1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvb2wuc3JfZGF0YSxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg1LVx0XHRcdCAgIGFjdC1cdTAwM2VhZGFwdGVyLVx1MDAzZXN0YXRfcmVhZF9idWZfbnVtKSlcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jPTI1Nz1zdGF0aWMgdm9pZCB6ZmNwX2ZzZl9zdGF0dXNfcmVhZF9oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSlcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTI2My1cdFx0emZjcF9kYmZfaGJhX2ZzZl91c3MoXCYjMzQ7ZnNzcmhfMVwmIzM0OywgcmVxKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6MjY0Olx0XHRtZW1wb29sX2ZyZWUodmlydF90b19wYWdlKHNyX2J1ZiksIGFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtMjY1LVx0XHR6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpO1xuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtMzIyLVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYzozMjM6XHRtZW1wb29sX2ZyZWUodmlydF90b19wYWdlKHNyX2J1ZiksIGFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtMzI0LVx0emZjcF9mc2ZfcmVxX2ZyZWUocmVxKTtcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jPTkyOD1pbnQgemZjcF9mc2Zfc3RhdHVzX3JlYWQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbylcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk0Ny1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6OTQ4Olx0cGFnZSA9IG1lbXBvb2xfYWxsb2MoYWRhcHRlci1cdTAwM2Vwb29sLnNyX2RhdGEsIEdGUF9BVE9NSUMpO1xuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYy05NDktXHRpZiAoIXBhZ2UpIHtcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk2OC1cdHJlcS1cdTAwM2VkYXRhID0gTlVMTDtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6OTY5Olx0bWVtcG9vbF9mcmVlKHZpcnRfdG9fcGFnZShzcl9idWYpLCBhZGFwdGVyLVx1MDAzZXBvb2wuc3JfZGF0YSk7XG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk3MC1mYWlsZWRfYnVmOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbXBvb2wgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hhbmdlIHRvIHRoZSBgbWVtcG9vbGAgc2V0dXAuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgbWVtcG9vbF9jcmVhdGVfcGFnZV9wb29sYCwgd2hpY2gsIGJhc2VkIG9uIGBGU0ZfU1RBVFVTX1JFQURTX1JFQ09NYCAod2hpY2ggaXMgNjQpLCBzZXRzIHRoZSBgbWF4X25yYCB0byAxMjguIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVhZCBidWZmZXJzLiBUaGUgd29ycnkgaXMgdGhhdCBgYWN0LSZndDthZGFwdGVyLSZndDtzdGF0X3JlYWRfYnVmX251bWAgY291bGQgZXhjZWVkIHRoYXQsIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy4KCkJ1dCB3YWl0LCB0aGUgcGF0Y2ggKnJlcGxhY2VzKiB0aGF0IHdpdGggYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIGFuZCBgbWVtcG9vbF9pbml0X2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBpcyBoYW5kbGVkLiBBbmQgdGhleSYjMzk7dmUgYWxzbyBjaGFuZ2VkIHRoZSB1bmRlcmx5aW5nIGBtZW1wb29sX2NyZWF0ZWAgbWFjcm8uIE5vdywgYG1heF9ucmAgaXMgZHluYW1pY2FsbHkgc2V0IHRvIHR3aWNlIGBtaW5fbnJgLiBUaGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSDigJMgYSByZS1hcmNoaXRlY3Rpbmcgb2YgdGhlIG1lbW9yeSBwb29sIGFuZCByZXNpemluZyBiZWhhdmlvci4gVGhpcyBpcyBub3QganVzdCBhIHR3ZWFrOyBpdOKAmXMgYSBmdW5kYW1lbnRhbCBhbHRlcmF0aW9uIHRvIGhvdyB0aGVzZSBtZW1vcnkgcG9vbHMgd29yay4KClRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiwgcmFjZSBjb25kaXRpb25zLCBvciBhbGxvY2F0aW9uIGlzc3VlcyBpcyBzaWduaWZpY2FudGx5IGluY3JlYXNlZCB3aXRoIHRoaXMgY2hhbmdlLiBJdOKAmXMgZ290IHRvIGJlIHRob3JvdWdobHkgdGVzdGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29udGV4dC4gV2UmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgYENPTkZJR19CTEtfREVWX1pPTkVEYCBmb3IgYGJsay16b25lZC5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSByZWxldmFudCB0byB6b25lZCBibG9jayBkZXZpY2VzLiBXZSBhbHNvIG5lZWQgYENPTkZJR19CTEtfREVWX05WTUVgIGFuZCBgQ09ORklHX05WTUVfQ09SRWAgZm9yIHRoZSBOVk1lIGhvc3QgUENJIGRyaXZlciAoYG52bWUvaG9zdC9wY2kuY2ApLiBUaGUgYG1lbXBvb2xgIGl0c2VsZiBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLiBOb3csIEkgc2hvdWxkIG1vdmUgdG8gYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgIGluIGBibG9jay9ibGstem9uZWQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstem9uZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstem9uZWQuYz0xODg1PXZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTE5MDEtXG5ibG9jay9ibGstem9uZWQuYzoxOTAyOnN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2Jsay16b25lZC5jLTE5MDMtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBwb29sX3NpemUpXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjAzNT1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMDYzLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2gpIHtcbmJsb2NrL2Jsay16b25lZC5jOjIwNjQ6XHRcdHJldCA9IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoZGlzaywgcG9vbF9zaXplKTtcbmJsb2NrL2Jsay16b25lZC5jLTIwNjUtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTgzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqTXkgWm9uZSBSZXNvdXJjZSBWYWxpZGF0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhhdCB3aGVuIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSB6b25lIHJlc291cmNlcyBvbiBhIGRpc2ssIGEgZnVuY3Rpb24gbmFtZWQgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AgZ2V0cyB0aGUgY2FsbC4gTm93LCB0aGF0IGZ1bmN0aW9uLCBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYCwgaXMgZXNzZW50aWFsIGJlY2F1c2UgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIG91ciBkaXNrJiMzOTtzIHpvbmUgcmVzb3VyY2VzIGFyZSwgd2VsbCwgKnZhbGlkYXRlZCouIFdoZXJlIGRvZXMgdGhpcyB2YWxpZGF0aW9uIHByb2Nlc3MgYmVnaW4/IEl0IGluaXRpYXRlcyBhIGNhbGwgdG8gYW5vdGhlciBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYC4gVGhlcmVmb3JlLCB0byBhbGxvY2F0ZSB0aGUgcmVzb3VyY2VzLCB3ZSBtYWtlIHRoZSBjYWxsIHRvIGFsbG9jYXRlIHRoZSByZXNvdXJjZXMuIEl0IGFsbCBzdGFydHMgd2l0aCBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBicm9hZGVyIG1lY2hhbmlzbSwgYW5kICp0aGF0KiBpcyB3aGF0IHRoZW4gdHJpZ2dlcnMgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AuIFNvLCBpdCYjMzk7cyBhIGNhc2NhZGluZyBwcm9jZXNzLCBzdGFydGluZyBhdCB0aGUgYmxvY2sgbGF5ZXIgYW5kIHdvcmtpbmcgaXRzIHdheSBkb3duIHRvIHJlc291cmNlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9NTAzPXN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtNTI4LVx0ICogYXR0YWNoZWQgdG8gdGhlIGRpc2ssIHRoZW4gdGhpcyBpcyBhIHpvbmUgd3JpdGUgcGx1ZyBpbnNlcnQgZnJvbSB0aGVcbmJsb2NrL2Jsay16b25lZC5jOjUyOTpcdCAqIGZpcnN0IGNhbGwgdG8gYmxrX3JldmFsaWRhdGVfZGlza196b25lcygpLCBpbiB3aGljaCBjYXNlIHRoZSB6b25lIGlzXG5ibG9jay9ibGstem9uZWQuYy01MzAtXHQgKiBuZWNlc3NhcmlsbHkgaW4gdGhlIGFjdGl2ZSBjb25kaXRpb24uXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjI1MD1zdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY2Ioc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTIzMTktLyoqXG5ibG9jay9ibGstem9uZWQuYzoyMzIwOiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMgLSAocmUpYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgem9uZSB3cml0ZSBwbHVnc1xuYmxvY2svYmxrLXpvbmVkLmMtMjMyMS0gKiBAZGlzazpcdFRhcmdldCBkaXNrXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjMzMS0gKi9cbmJsb2NrL2Jsay16b25lZC5jOjIzMzI6aW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstem9uZWQuYy0yMzMzLXtcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yNDA4LX1cbmJsb2NrL2Jsay16b25lZC5jOjI0MDk6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3JldmFsaWRhdGVfZGlza196b25lcyk7XG5ibG9jay9ibGstem9uZWQuYy0yNDEwLVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYz0xNzU9aW50IG51bGxfcmVnaXN0ZXJfem9uZWRfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoxODQ6XHRyZXR1cm4gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODUtfVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01MDM9c3RhdGljIGludCB1YmxrX2dldF9ucl96b25lcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MTAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTExOnN0YXRpYyBpbnQgdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IHVibGtfZGV2aWNlICp1YilcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MTIte1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUxMzpcdHJldHVybiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHViLVx1MDAzZXViX2Rpc2spO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUxNC19XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTcxNz1zdGF0aWMgdm9pZCB1YmxrX2Rldl9wYXJhbV96b25lZF9hcHBseShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03MjAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzIxOnN0YXRpYyBpbnQgdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IHVibGtfZGV2aWNlICp1YilcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03MjIte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00NDEzPXN0YXRpYyBpbnQgdWJsa19jdHJsX3N0YXJ0X2RldihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NTQyLVx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSkge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjQ1NDM6XHRcdHJldCA9IHVibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHViKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NTQ0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE0MzY9c3RhdGljIGludCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1MzUtXHQgICAgKGxpbS5mZWF0dXJlcyBcdTAwMjYgQkxLX0ZFQVRfWk9ORUQpKSB7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNTM2Olx0XHRlcnIgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHZibGstXHUwMDNlZGlzayk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTM3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTczPXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMxMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMzExOlx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyh6bG8tXHUwMDNlZGlzayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMxMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9tZC9kbS16b25lLmM9MTUwPWJvb2wgZG1faXNfem9uZV93cml0ZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL2RtLXpvbmUuYy0xNjgtICogZm9yIHpvbmUgYXBwZW5kIGVtdWxhdGlvbi4gTm90ZSB0aGF0IHdlIGNhbm5vdCBzaW1wbHkgdXNlIHRoZSBibG9jayBsYXllclxuZHJpdmVycy9tZC9kbS16b25lLmM6MTY5OiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSBmdW5jdGlvbiBoZXJlIGFzIHRoZSBtYXBwZWQgZGV2aWNlIGlzIHN1c3BlbmRlZFxuZHJpdmVycy9tZC9kbS16b25lLmMtMTcwLSAqICh0aGlzIGlzIGNhbGxlZCBmcm9tIF9fYmluZCgpIGNvbnRleHQpLlxuLS1cbmRyaXZlcnMvbWQvZG0tem9uZS5jPTE3Mj1pbnQgZG1fcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuLS1cbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE5OC1cdG1kLVx1MDAzZXJldmFsaWRhdGVfbWFwX3Rhc2sgPSBjdXJyZW50O1xuZHJpdmVycy9tZC9kbS16b25lLmM6MTk5Olx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTIwMC1cdG1kLVx1MDAzZXJldmFsaWRhdGVfbWFwX3Rhc2sgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzY5PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0NzMtXHRpZiAoYmxrX3F1ZXVlX2lzX3pvbmVkKG5zLVx1MDAzZXF1ZXVlKSkge1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI0NzQ6XHRcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMobnMtXHUwMDNlZGlzayk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ3NS1cdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgIW52bWVfZmlyc3Rfc2Nhbihucy1cdTAwM2VkaXNrKSlcbi0tXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTE5PXN0YXRpYyB2b2lkIHNkX3piY19wcmludF96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxuLS1cbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01MzYtLypcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1Mzc6ICogQ2FsbCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCkgaWYgYW55IG9mIHRoZSB6b25lZCBkaXNrIHByb3BlcnRpZXMgaGF2ZVxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTUzOC0gKiBjaGFuZ2VkIHRoYXQgbWFrZSBpdCBuZWNlc3NhcnkgdG8gY2FsbCB0aGF0IGZ1bmN0aW9uLiBDYWxsZWQgYnlcbi0tXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTQxPWludCBzZF96YmNfcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxuLS1cbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01NjUtXHRmbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuZHJpdmVycy9zY3NpL3NkX3piYy5jOjU2NjpcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoZGlzayk7XG5kcml2ZXJzL3Njc2kvc2RfemJjLmMtNTY3LVx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTQ1Mz1pbnQgYmxrZGV2X3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBlbnVtIHJlcV9vcCBvcCxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNDU0LVx0XHRzZWN0b3JfdCBzZWN0b3JzLCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6NDU1OmludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNDU2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcxNQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBEaXNrIFJlc291cmNlcyB2aWEgWm9uZWQgRGV2aWNlcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBpcyBhIGtleSBmdW5jdGlvbiwgdHJpZ2dlcmVkIGJ5IGEgd2lkZSByYW5nZSBvZiBibG9jayBkZXZpY2UgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBgbnVsbF9ibGtgICh6b25lZCBkZXZpY2UgdGVzdGluZyEpLCBgdWJsa2AsIGB2aXJ0aW9fYmxrYCwgYHpsb29wYCwgYGRtYCwgYG52bWVgLCBhbmQgdGhlIFNDU0kgem9uZWQgZGV2aWNlIGNvZGUgKGBzZF96YmNgKS4gVGhhdCBtZWFucyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgcHJldHR5IGVhc2lseSByZWFjaGVkIHRocm91Z2ggc2V2ZXJhbCBkcml2ZXJzLiBUaGlzIGdpdmVzIG1lIGFuIGlkZWEuLi4gYG51bGxfYmxrYCBpcyBhbiBleGNlbGxlbnQgY2hvaWNlIGZvciB0ZXN0aW5nIHpvbmVkIGJsb2NrIGRldmljZSBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBhIGNsZWFuIHNsYXRlIHRvIHdvcmsgd2l0aC4gSSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgYWxvbmcgd2l0aCB0aGUgb2J2aW91cyBgQ09ORklHX0JMS19ERVZfWk9ORURgIG9mIGNvdXJzZS4KCk5vdywgd2hhdCYjMzk7cyB0aGlzIGFib3V0IGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGA/IEkgbmVlZCB0byBsb29rIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9wY2kuYz0zMzQwPXN0YXRpYyBpbnQgbnZtZV9kaXNhYmxlX3ByZXBhcmVfcmVzZXQoc3RydWN0IG52bWVfZGV2ICpkZXYsIGJvb2wgc2h1dGRvd24pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMzM0Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjMzNDg6c3RhdGljIGludCBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTMzNDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTM3NDE9c3RhdGljIGludCBudm1lX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMzc1Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjM3NTg6XHRyZXN1bHQgPSBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChkZXYpO1xuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMzc1OS1cdGlmIChyZXN1bHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDU1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBOVk1lIFBDSSBEcml2ZXIgYW5kIE1lbW9yeSBQb29sIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBgbnZtZV9wcm9iZWAgZnVuY3Rpb24uIFRoaXMgb25seSBoYXBwZW5zIGlmIHdlIGFjdHVhbGx5IGhhdmUgYW4gTlZNZSBQQ0kgZGV2aWNlIGRldGVjdGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIGBDT05GSUdfQkxLX0RFVl9OVk1FYCBjb25maWcgb3B0aW9uIGlzIHdoYXQgY29udHJvbHMgdGhhdCBkcml2ZXIsIHNvIHRoYXQgbWFrZXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlc2UgbWVtb3J5IHBvb2wgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpZS4gSSBzZWUgdGhhdCBgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbGAgYW5kIGBtZW1wb29sX2luaXRfa21hbGxvY19yZXNpemFibGVfcG9vbGAgYXJlIG1hY3JvcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L21lbXBvb2wuaGAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZXNlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEl0IGFsc28gbW9kaWZpZXMgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCwgYG1lbXBvb2xfaW5pdF9ub2RlYCwgYW5kIGBtZW1wb29sX3Jlc2l6ZWAuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoaWNoIGZ1bmN0aW9ucyB3b3VsZCBiZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uOgoKKiAgIGBtZW1wb29sX3Jlc2l6ZWAKKiAgIGBtZW1wb29sX2luaXRfbm9kZWAKKiAgIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAKKiAgIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYAoqICAgYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYAoKQWgsIHdhaXQgYSBzZWNvbmQuLi4gYG1lbXBvb2xfcmVzaXplYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzYCBpbiBgYmxvY2svYmxrLXpvbmVkLmNgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgTlZNZSBkcml2ZXImIzM5O3MgbWVtb3J5IHBvb2wgYW5kIHRoZSB6b25lZCBibG9jayBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGV4cGxvcmUgdGhhdCBjb25uZWN0aW9uIHRob3JvdWdobHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHNldCB1cCB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCB0ZXN0IGNhc2VzLCBwYXJ0aWN1bGFybHkgdGhlIGludGVycGxheSBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MjAzNT1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMDc1LSAqL1xuYmxvY2svYmxrLXpvbmVkLmM6MjA3NjpzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLXpvbmVkLmMtMjA3Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjMzMj1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMzkyLVxuYmxvY2svYmxrLXpvbmVkLmM6MjM5MzpcdHJldCA9IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssIFx1MDAyNmFyZ3MpO1xuYmxvY2svYmxrLXpvbmVkLmMtMjM5NC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzgwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtZW1wb29sX3Jlc2l6ZWAgUGF0Y2ggSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2ggdGhhdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYG1lbXBvb2xfcmVzaXplYC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgc2hpZnRpbmcgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYG1lbXBvb2xfcmVzaXplYCB0byBzaW1wbHkgYWRqdXN0aW5nIGBtaW5fbnJgIGFuZCByZWx5aW5nIG9uIGBtYXhfbnJgIGZvciBhbGxvY2F0aW9uLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBtZW1wb29sX3Jlc2l6ZWAgaXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzYCwgd2hpY2ggaXMgdXNlZCBpbiByZXZhbGlkYXRpbmcgem9uZWQgYmxvY2sgZGV2aWNlcywgYW5kIHRodXMgYG1lbXBvb2xfcmVzaXplYCBpcyBpbnZva2VkIHdpdGhpbiB0aGF0IHByb2Nlc3MuCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBJIHNlZSBpbiBgZnMvc21iL2NsaWVudC9jb25uZWN0LmNgIHRoYXQgYG1lbXBvb2xfcmVzaXplYCBpcyBjYWxsZWQgZnJvbSBgY2xlYW5fZGVtdWx0aXBsZXhfaW5mb2AgYW5kIGBjaWZzX2RlbXVsdGlwbGV4X3RocmVhZGAsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4gQWxzbywgdW5kZXIgYGRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmNgIHRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSBpZiB3ZSBoYXZlIGBDT05GSUdfWkZDUGAgZW5hYmxlZC4gVGhpcyBnaXZlcyBhIGJyb2FkIHNlbnNlIG9mIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuCgpUaGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoYXQgdGhpcyBuZXcgYXBwcm9hY2ggdG8gYG1lbXBvb2xfcmVzaXplYCB3aWxsIG5vdyBwb3RlbnRpYWxseSByZXR1cm4gYC1FTk9TUENgIGlmIHRoZSByZXF1ZXN0ZWQgYG5ld19taW5fbnJgIGV4Y2VlZHMgYHBvb2wtJmd0O21heF9ucmAuIEkgZHVnIGludG8gdGhlIGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AgY29kZSBhbmQgaXQgbG9va3MgbGlrZSBhIHJlc2l6ZSBmYWlsdXJlIGNvdWxkIGhhcHBlbiBiZWNhdXNlIHRoZSBgbGVuZ3RoICYjNDM7IGNpZnNfbWluX3JjdmAgbWlnaHQgZXhjZWVkIGBtYXhfbnJgLiBJIG5vdGljZWQgdGhhdCB0aGUgYGNpZnNfcmVxX3Bvb2xwYCBpcyBjcmVhdGVkIHdpdGggYSBgY2lmc19taW5fcmN2YCB2YWx1ZSBvZiA2NCwgYW5kIHRoZSBgbWF4X25yYCBpcyBpbml0aWFsaXplZCB0byAxMjguIElmIGBsZW5ndGhgIGlzIHRoZW4gZ3JlYXRlciB0aGFuIDY0LCB0aGlzIG5ldyBjaGVjayBtaWdodCBmYWlsLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBtZW1wb29sX3Jlc2l6ZWAgaXMgaWdub3JlZCBpbiB0aGF0IGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIHJlc2l6ZSB3aWxsIGZhaWwsIGFuZCB0aGUgcG9vbCB3aWxsIHN0aWxsIGhhdmUgaXRzIGBtaW5fbnJgIGVsZW1lbnRzLCBwb3NzaWJseSBjYXVzaW5nIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLCBidXQgbm90IGEgY3Jhc2guCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBtZW1wb29sX2Rlc3Ryb3lgLiBUaGUgcGF0Y2ggY2hhbmdlcyBgbWVtcG9vbF9leGl0YCB0byB1c2UgYGt2ZnJlZShwb29sLSZndDtlbGVtZW50cylgIGluc3RlYWQgb2YgYGtmcmVlKHBvb2wtJmd0O2VsZW1lbnRzKWAuIFRoaXMgaXMgYmVjYXVzZSBgbWVtcG9vbF9pbml0X25vZGVgIGlzIG5vdyB1c2luZyBga3ZtYWxsb2NfYXJyYXlfbm9kZV9ub3Byb2ZgIGluc3RlYWQgb2YgYGttYWxsb2NfYXJyYXlfbm9kZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGluIHVzZS4KCkkgYWxzbyBjaGVja2VkIGBtZW1wb29sX2luaXRfbm9kZWAgaW4gYG1tL21lbXBvb2wuY2AuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYG1heF9ucmAgYXMgYSBwYXJhbWV0ZXIuIFRoZSBwYXRjaCBoYXMgY2hhbmdlZCBgbWVtcG9vbF9pbml0X25vcHJvZmAgdG8gcGFzcyBgbWluX25yICogMmAgYXMgYG1heF9ucmAuIEkgY2FuIHNlZSB0aGlzIGluIHRoZSBjb2RlIGhlcmUuCgpBbHNvLCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgIHRha2VzIGBtYXhfbnJgIGFzIGEgcGFyYW1ldGVyLiBUaGUgc2lnbmF0dXJlIGZvciBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgIGhhcyBjaGFuZ2VkLgoKRmluYWxseSwgdGhlIGBtZW1wb29sX2NyZWF0ZV9ub2RlYCBtYWNybyBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQuIFRoaXMgbWFrZXMgbWUgd29uZGVyIGlmIGFsbCBjYWxsZXJzIG9mIGBtZW1wb29sX2NyZWF0ZV9ub2RlYCBoYXZlIGJlZW4gcHJvcGVybHkgdXBkYXRlZC4gU28sIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgY2FsbGVycyBvZiBgbWVtcG9vbF9jcmVhdGVfbm9kZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvb2xfY3JlYXRlX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MzM0OD1zdGF0aWMgaW50IG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sKHN0cnVjdCBudm1lX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTMzNTEtXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzozMzUyOlx0ZGV2LVx1MDAzZWRtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLCAyLFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMzM1My1cdFx0XHRtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9NTE9c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlKGludCBtaW5fbnIsIG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC01Mi1cdFx0bWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7XG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo1MzpzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU0LVx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU1LVx0XHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oOjU2OiNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfbm9kZSguLi4pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo1NzpcdGFsbG9jX2hvb2tzKG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU4LVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNTktI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfZGF0YSlcdFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo2MDpcdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgKF9taW5fbnIpKjIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sXHRcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNjEtXHRcdFx0ICAgIF9kYXRhLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9OTc9dm9pZCBtZW1wb29sX2tmcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtMTA5LSNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6MTEwOlx0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXHRcdFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC0xMTEtXHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKShfc2l6ZSksIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbi0tXG5tbS9tZW1wb29sLmM9MjkzPUVYUE9SVF9TWU1CT0wobWVtcG9vbF9pbml0X25vcHJvZik7XG4tLVxubW0vbWVtcG9vbC5jLTI5NS0vKipcbm1tL21lbXBvb2wuYzoyOTY6ICogbWVtcG9vbF9jcmVhdGVfbm9kZSAtIGNyZWF0ZSBhIG1lbW9yeSBwb29sXG5tbS9tZW1wb29sLmMtMjk3LSAqIEBtaW5fbnI6ICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBndWFyYW50ZWVkIHRvIGJlXG4tLVxubW0vbWVtcG9vbC5jLTMxMy0gKi9cbm1tL21lbXBvb2wuYzozMTQ6c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXG5tbS9tZW1wb29sLmMtMzE1LVx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbi0tXG5tbS9tZW1wb29sLmMtMzMxLX1cbm1tL21lbXBvb2wuYzozMzI6RVhQT1JUX1NZTUJPTChtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZik7XG5tbS9tZW1wb29sLmMtMzMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA3MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBtZW1wb29sX2NyZWF0ZV9ub2RlYCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYG1lbXBvb2xfY3JlYXRlX25vZGVgIGlzIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgc2VlbXMgbGlrZSB0aGUgb25seSBkaXJlY3QgY2FsbCBpcyBpbiBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgLCBhbG9uZ3NpZGUgaXRzIHVzYWdlIHdpdGhpbiB0aGUgYG1lbXBvb2xfY3JlYXRlYCBhbmQgYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIG1hY3Jvcy4gVGhpcyBmZWVscyBhIGJpdCBsaW1pdGVkLCBhbmQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QsIHNvIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBieSBzZWFyY2hpbmcgZm9yIG90aGVyIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIExldCYjMzk7cyBzZWUgaWYgdGhlIGdyZXBwZXIgaGFzIG90aGVyIGVudHJpZXMuCgpUaGUgb3V0cHV0IGxvb2tzIGNsZWFuLiBKdXN0IGBkcml2ZXJzL252bWUvaG9zdC9wY2kuY2AgYW5kIHdoZXJlIHRoZSBoZWFkZXIgZmlsZSBkZWNsYXJlcyBpdCBpbiBgaW5jbHVkZS9saW51eC9tZW1wb29sLmhgLgoKSG1tLCB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgcmVsYXRlZCB0byBtZW1wb29sIGluaXRpYWxpemF0aW9uLiBXaGF0IGFib3V0IGBtZW1wb29sX2luaXRfbm9kZWA/IFRoYXQgbWlnaHQgYmUgYSByZWxhdGVkIGFyZWEgSSBuZWVkIHRvIGNvbnNpZGVyIGFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb29sX2luaXRfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbXBvb2wuaD00MT12b2lkIG1lbXBvb2xfZXhpdChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo0MjppbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC00My1cdFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9OTc9dm9pZCBtZW1wb29sX2tmcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtMTA2LSNkZWZpbmUgbWVtcG9vbF9pbml0X2ttYWxsb2NfcmVzaXphYmxlX3Bvb2woX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIF9zaXplKVx0XHRcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6MTA3Olx0bWVtcG9vbF9pbml0X25vZGUoX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcdFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC0xMDgtXHRcdCAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXG4tLVxubW0vbWVtcG9vbC5jPTIzMT1FWFBPUlRfU1lNQk9MKG1lbXBvb2xfZGVzdHJveSk7XG5tbS9tZW1wb29sLmMtMjMyLVxubW0vbWVtcG9vbC5jOjIzMzppbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXG5tbS9tZW1wb29sLmMtMjM0LVx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbi0tXG5tbS9tZW1wb29sLmMtMjY4LX1cbm1tL21lbXBvb2wuYzoyNjk6RVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9kZSk7XG5tbS9tZW1wb29sLmMtMjcwLVxuLS1cbm1tL21lbXBvb2wuYz0yODU9aW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4tLVxubW0vbWVtcG9vbC5jLTI4OC17XG5tbS9tZW1wb29sLmM6Mjg5Olx0cmV0dXJuIG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgbWluX25yICogMiwgYWxsb2NfZm4sIGZyZWVfZm4sXG5tbS9tZW1wb29sLmMtMjkwLVx0XHRcdFx0IHBvb2xfZGF0YSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKTtcbi0tXG5tbS9tZW1wb29sLmM9MzE0PXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLCBpbnQgbWF4X25yLFxuLS1cbm1tL21lbXBvb2wuYy0zMjMtXG5tbS9tZW1wb29sLmM6MzI0Olx0aWYgKG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgbWF4X25yLCBhbGxvY19mbiwgZnJlZV9mbiwgcG9vbF9kYXRhLFxubW0vbWVtcG9vbC5jLTMyNS1cdFx0XHQgICAgICBnZnBfbWFzaywgbm9kZV9pZCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ2FsbGVycyBhbmQgTmVjZXNzYXJ5IENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBtZW1wb29sX2luaXRfbm9kZWAgaXMgb25seSBpbnZva2VkIGJ5IGBtZW1wb29sX2luaXRfbm9wcm9mYCwgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCwgYW5kIHRoYXQgbWFjcm8uLi4gYG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYC4gVGhhdCBjb25maXJtcyB0aGUgcGF0Y2ggSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgaGFzIGNvcnJlY3RseSB1cGRhdGVkICphbGwqIHRoZSBjYWxsIHNpdGVzLiBFeGNlbGxlbnQsIGdvb2QgdG8ga25vdy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGVzZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoZSBjb25maWdzIHRoYXQgdGhpcyB0aGluZyBuZWVkczogYENPTkZJR19CTEtfREVWX1pPTkVEYCwgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCwgYENPTkZJR19CTEtfREVWX05WTUVgLCBgQ09ORklHX05WTUVfQ09SRWAsIGFuZCBhbHNvIGBDT05GSUdfQ0lGU2AuIEkgYWxzbyBzZWUgdGhhdCBgQ09ORklHX1pGQ1BgIGlzIG5lZWRlZCwgZm9yIHRoaXMgYGRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmNgIGNvZGUuCgpXYWl0IGEgc2Vjb25k4oCmIHdhc24mIzM5O3QgYENPTkZJR19DSUZTYCByZW5hbWVkLCBvciBzb21ldGhpbmc/IElzIGl0IG5vdyBgQ09ORklHX1NNQl9GU2AgKm9yKiBgQ09ORklHX0NJRlNgPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGp1c3QgZ2xhbmNlIGF0IHRoZSBgZnMvc21iL2NsaWVudC9NYWtlZmlsZWAgcmVhbCBxdWljayB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gR290dGEgYmUgcHJlY2lzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qY2lmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9NYWtlZmlsZT01PWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcdFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xuZnMvc21iL2NsaWVudC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DSUZTKSAmIzQzOz0gY2lmcy5vXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ0lGUyBDb25maWd1cmF0aW9uIGFuZCBNYWtlZmlsZSBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBodW5jaCByZWdhcmRpbmcgYENPTkZJR19DSUZTYCBpcyBzcG90IG9uLiBUaGF0JiMzOTtzIGNvbmZpcm1lZCwgYW5kIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdCBmdXJ0aGVyLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgY29udGVudHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgcmVsYXRlZCBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBuZWVkZWQgY29udGV4dC4gSSB3YW50IHRvIHNlZSBob3cgQ0lGUy1yZWxhdGVkIG1vZHVsZXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBzcGVjaWZpYyBTMzkwIGFyY2hpdGVjdHVyZSBjb250ZXh0LCBsb29raW5nIGZvciBhbnkgc3BlY2lmaWMgYnVpbGQgY29uc2lkZXJhdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0uKnpmY3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZT02PXpmY3Atb2JqcyA6PSB6ZmNwX2F1eC5vIHpmY3BfY2N3Lm8gemZjcF9kYmYubyB6ZmNwX2VycC5vIFxcXG4tLVxuZHJpdmVycy9zMzkwL3Njc2kvTWFrZWZpbGUtOS1cbmRyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aRkNQKSAmIzQzOz0gemZjcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTI5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgY2hlY2sgY29uZmlybWVkIHRoYXQgYENPTkZJR19aRkNQYCBpcyBzZXQgYXMgZXhwZWN0ZWQsIHRoYXQmIzM5O3MgZ29vZC4gTm93LCBtb3Zpbmcgb24sIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYENPTkZJR19CTEtfREVWX05VTExfQkxLYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGlzIGJlaGF2aW5nIGFzIGFudGljaXBhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotLipudWxsX2JsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfQkxLX0RFVl9STkJEKVx0JiM0Mzs9IHJuYmQvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcdCYjNDM7PSBudWxsX2Jsay9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSAmIzQzOz0gcm51bGwvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzgyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBwcm9tcHQgbWVudGlvbnMgYENPTkZJR19CTEtfREVWX05VTExfQkxLYC4gWWVwLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQmIzM5O3MgdGhlICYjMzQ7bnVsbCBibG9jayBkZXZpY2UsJiMzNDsgZXNzZW50aWFsbHkgYSB1c2VmdWwgZGVidWdnaW5nIHRvb2wgb3IgYSBwbGFjZWhvbGRlci4gTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgbW9yZSBpbnRlcmVzdGluZyBhc3BlY3QsIGxldCYjMzk7cyBzZWUsIHdoYXQgd2FzIHRoYXQgb3B0aW9uIGFnYWluLi4uIGFoIHllcywgYENPTkZJR19CTEtfREVWX1pPTkVEYC4gSSBzaG91bGQgcHJvYmFibHkgYnJ1c2ggdXAgb24gdGhhdCwgem9uYWwgc3RvcmFnZSBpcyBiZWNvbWluZyBtb3JlIGFuZCBtb3JlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9aT05FRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz03Nz1jb25maWcgQkxLX0RFVl9XUklURV9NT1VOVEVEXG4tLVxuYmxvY2svS2NvbmZpZy05Ni1cbmJsb2NrL0tjb25maWc6OTc6Y29uZmlnIEJMS19ERVZfWk9ORURcbmJsb2NrL0tjb25maWctOTgtXHRib29sIFwmIzM0O1pvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIFpvbmVkIEJsb2NrIERldmljZSBTdXBwb3J0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgQ09ORklHX0JMS19ERVZfWk9ORURgIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IHdlIHdhbnQgZm9yIHpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0LiBOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyB0aGluZ3MgcmVsYXRlZCB0byBOVk1lLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHdlIHNlZSB6b25lZCBkZXZpY2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIE5WTWUgY29yZSBhbmQgYmxvY2sgZGV2aWNlIHN1cHBvcnQgYXJlIGFsc28gY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5LiBUaGVyZWZvcmUsIEkgc2hvdWxkIGNoZWNrIHRoYXQgYENPTkZJR19OVk1FX0NPUkVgIGFuZCBgQ09ORklHX0JMS19ERVZfTlZNRWAgYXJlIGFsc28gc2V0LiBNYWtpbmcgc3VyZSB0aG9zZSBhcmUgY29ycmVjdGx5IGVuYWJsZWQgd2lsbCBlbnN1cmUgdGhlIGNvcnJlY3QgbG93IGxldmVsIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgb3RoZXIgcmVsYXRlZCBjb25maWdzIGlmIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoyOmNvbmZpZyBOVk1FX0NPUkVcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMy1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTlZNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0yPWNvbmZpZyBOVk1FX0NPUkVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTQtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjU6Y29uZmlnIEJMS19ERVZfTlZNRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDk4CgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDg3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVzLCBgQ09ORklHX0JMS19ERVZfTlZNRWAgaXMgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb25maWdzIHdlJiMzOTtyZSBjb25zaWRlcmluZyBhcmU6IGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGBDSUZTYCwgYW5kIGBaRkNQYC4gV2FpdCwgYFpGQ1BgIGlzIHMzOTAgc3BlY2lmaWMsIHNvIGl0JiMzOTtzIG5vdCBpZGVhbCBmb3IgZ2VuZXJhbCBmdXp6aW5nIG9uIHg4NiwgZXZlbiBpZiBpdCYjMzk7cyBoYXJtbGVzcy4gSSYjMzk7bGwganVzdCByZWx5IG9uIHRoZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYEJMS19ERVZfWk9ORURgIGFuZCBgQkxLX0RFVl9OVUxMX0JMS2AuIEkmIzM5O2xsIGFsc28gaW5jbHVkZSBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGFuZCBgQ0lGU2AuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBXZSYjMzk7dmUgZ290OiBgbWVtcG9vbF9yZXNpemVgLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgLCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGFuZCBgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xgLgoKUmlnaHQsIGBtZW1wb29sX2luaXRfbm9kZWAgaXMgY2FsbGVkIGJ5IGBtZW1wb29sX2luaXRfbm9wcm9mYCBhbmQgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCwgYW5kIHRoZSBsYXR0ZXIgaXMgY2FsbGVkIGZyb20gdGhlIGBtZW1wb29sX2NyZWF0ZV9ub2RlYCBtYWNyby4gYG1lbXBvb2xfcmVzaXplYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBuZXcgYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIGlzIHVzZWQgYnkgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBhbmQgdGhlIG5ldyBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgc2lnbmF0dXJlIGlzIHVzZWQgaW4gYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYC4KCkxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlLi4uIGFoLCB5ZXMsIGBtZW1wb29sX2V4aXRgIHdhcyBjaGFuZ2VkIHRvIHVzZSBga3ZmcmVlYC4gQW5kIGBtZW1wb29sX2Rlc3Ryb3lgIGNhbGxzIGBtZW1wb29sX2V4aXRgLiBTbywgYm90aCBgbWVtcG9vbF9leGl0YCBhbmQgYG1lbXBvb2xfZGVzdHJveWAgYXJlIGltcG9ydGFudC4KCk9rYXksIGxldCYjMzk7cyByZWZpbmUgb3VyIGBGb2N1c1N5bWJvbHNgOiBgbWVtcG9vbF9yZXNpemVgLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgLCBgbWVtcG9vbF9leGl0YCwgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBhbmQgYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYC4KCldoYXQgZWxzZSBoYXZlIHdlIGdvdD8gSG1tLCB0aGUgcGF0Y2ggaGFzIGNoYW5nZWQgdGhlIGJlaGF2aW9yIG9mIGBtZW1wb29sX3Jlc2l6ZWAgc2lnbmlmaWNhbnRseS4gSXQgbm8gbG9uZ2VyIGFsbG9jYXRlcyBtZW1vcnksIGJ1dCBqdXN0IGFkanVzdHMgYG1pbl9ucmAuIFRoYXQmIzM5O3MgYSBtYWpvciBzaGlmdCBpbiBzZW1hbnRpY3MuIEl0IGFsc28gY2hhbmdlcyBgbWVtcG9vbF9pbml0X25vZGVgIHRvIHVzZSBga3ZtYWxsb2NfYXJyYXlfbm9kZV9ub3Byb2ZgIGluc3RlYWQgb2YgYGttYWxsb2NfYXJyYXlfbm9kZWAsIGVuYWJsaW5nIGxhcmdlciBwb29scy4gQWxzbywgYG1heF9ucmAgaXMgYWRkZWQgdG8gdGhlIG1lbXBvb2wgc3RydWN0LgoKWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGNvcmUgYG1lbXBvb2xgIEFQSSBpbiBzb21lIGZ1bmRhbWVudGFsIHdheXMuCgpPa2F5LCBsZXQmIzM5O3MgZmluYWxpemUgdGhlIHJlc3BvbnNlLgpXb3J0aEZ1enppbmc6IHRydWUKUmVhc29uaW5nOiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY29yZSBgbWVtcG9vbGAgQVBJLCBieSBpbnRyb2R1Y2luZyBhIGBtYXhfbnJgIHBhcmFtZXRlciB0byBsaW1pdCBwb29sIGNhcGFjaXR5IGFuZCBjaGFuZ2luZyBgbWVtcG9vbF9yZXNpemVgIHRvIG5vIGxvbmdlciBhbGxvY2F0ZSBtZW1vcnkgaW1tZWRpYXRlbHkgYnV0IGluc3RlYWQgcmVsaWVzIG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS4KRm9jdXNTeW1ib2xzOiBgbWVtcG9vbF9yZXNpemVgLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgLCBgbWVtcG9vbF9leGl0YCwgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xgCkVuYWJsZUNvbmZpZ3M6IGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGBDSUZTYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX0NPUkUmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbXBvb2xfcmVzaXplJiMzNDssCiAgICAmIzM0O21lbXBvb2xfaW5pdF9ub2RlJiMzNDssCiAgICAmIzM0O21lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mJiMzNDssCiAgICAmIzM0O21lbXBvb2xfZXhpdCYjMzQ7LAogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O252bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGBtZW1wb29sYCBBUEksIGludHJvZHVjaW5nIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGxpbWl0IHBvb2wgY2FwYWNpdHkgYW5kIGNoYW5naW5nIGBtZW1wb29sX3Jlc2l6ZWAgdG8gbm8gbG9uZ2VyIGFsbG9jYXRlIG1lbW9yeSBpbW1lZGlhdGVseSBidXQgaW5zdGVhZCByZWx5IG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX0NPUkUmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbXBvb2xfcmVzaXplJiMzNDssCiAgICAmIzM0O21lbXBvb2xfaW5pdF9ub2RlJiMzNDssCiAgICAmIzM0O21lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mJiMzNDssCiAgICAmIzM0O21lbXBvb2xfZXhpdCYjMzQ7LAogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O252bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGBtZW1wb29sYCBBUEksIGludHJvZHVjaW5nIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGxpbWl0IHBvb2wgY2FwYWNpdHkgYW5kIGNoYW5naW5nIGBtZW1wb29sX3Jlc2l6ZWAgdG8gbm8gbG9uZ2VyIGFsbG9jYXRlIG1lbW9yeSBpbW1lZGlhdGVseSBidXQgaW5zdGVhZCByZWx5IG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjIyLjcyNjcyNzA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTgxNDg3NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9DT1JFXCIsXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtcG9vbF9yZXNpemVcIixcbiAgICBcIm1lbXBvb2xfaW5pdF9ub2RlXCIsXG4gICAgXCJtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZlwiLFxuICAgIFwibWVtcG9vbF9leGl0XCIsXG4gICAgXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGBtZW1wb29sYCBBUEksIGludHJvZHVjaW5nIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGxpbWl0IHBvb2wgY2FwYWNpdHkgYW5kIGNoYW5naW5nIGBtZW1wb29sX3Jlc2l6ZWAgdG8gbm8gbG9uZ2VyIGFsbG9jYXRlIG1lbW9yeSBpbW1lZGlhdGVseSBidXQgaW5zdGVhZCByZWx5IG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MjIuNzI2NzMyNTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzU3MzY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU4ZjVjNDcxMjM5ZjI0YTVkY2NhZDU0NGE0NzBlMTkwNDVlZWU1ZjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTI6NTE6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXpvbmVkLmMgYi9ibG9jay9ibGstem9uZWQuY1xcbmluZGV4IDZhMjIxYzE4MDg4OTdhLi5jYzA2MGEwYzNlOTlmZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstem9uZWQuY1xcbisrKyBiL2Jsb2NrL2Jsay16b25lZC5jXFxuQEAgLTE5MTgsOCArMTkxOCwxMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSsrKVxcbiBcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0pO1xcbiBcXG4tXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChwb29sX3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcpKTtcXG4rXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2woXFxuK1xcdFxcdFxcdFxcdFxcdHBvb2xfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0QkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcpKTtcXG4gXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19wb29sKVxcbiBcXHRcXHRnb3RvIGZyZWVfaGFzaDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcXG5pbmRleCBiNWY4NDYyMDA2Nzg5OS4uZWFhNDgwNGFiM2MzNWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xcbkBAIC0zMzQ5LDcgKzMzNDksNyBAQCBzdGF0aWMgaW50IG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sKHN0cnVjdCBudm1lX2RldiAqZGV2KVxcbiB7XFxuIFxcdHNpemVfdCBhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVjdCBudm1lX2RtYV92ZWMpICogTlZNRV9NQVhfU0VHUztcXG4gXFxuLVxcdGRldi1cXHUwMDNlZG1hdmVjX21lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZV9ub2RlKDEsXFxuK1xcdGRldi1cXHUwMDNlZG1hdmVjX21lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZV9ub2RlKDEsIDIsXFxuIFxcdFxcdFxcdG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcXG4gXFx0XFx0XFx0KHZvaWQgKilhbGxvY19zaXplLCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRkZXZfdG9fbm9kZShkZXYtXFx1MDAzZWRldikpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXFxuaW5kZXggZThlNDQwZTA0YTA2MDMuLjA3MzE0MmY4MDZjZWJhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcXG5AQCAtMTgsNiArMTgsNyBAQCB0eXBlZGVmIHZvaWQgKG1lbXBvb2xfZnJlZV90KSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpO1xcbiB0eXBlZGVmIHN0cnVjdCBtZW1wb29sIHtcXG4gXFx0c3BpbmxvY2tfdCBsb2NrO1xcbiBcXHRpbnQgbWluX25yO1xcdFxcdC8qIG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xcbitcXHRpbnQgbWF4X25yO1xcdFxcdC8qIG1heCBuciBvZiBlbGVtZW50cyBhdCAqZWxlbWVudHMgKi9cXG4gXFx0aW50IGN1cnJfbnI7XFx0XFx0LyogQ3VycmVudCBuciBvZiBlbGVtZW50cyBhdCAqZWxlbWVudHMgKi9cXG4gXFx0dm9pZCAqKmVsZW1lbnRzO1xcbiBcXG5AQCAtMzgsNyArMzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtcG9vbF9pc19zYXR1cmF0ZWQoc3RydWN0IG1lbXBvb2wgKnBvb2wpXFxuIH1cXG4gXFxuIHZvaWQgbWVtcG9vbF9leGl0KHN0cnVjdCBtZW1wb29sICpwb29sKTtcXG4taW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxcbitpbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXFxuIFxcdFxcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxcbiBcXHRcXHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZV9pZCk7XFxuIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxcbkBAIC00OSwxNSArNTAsMTUgQEAgaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXFxuIFxcbiBzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGUoaW50IG1pbl9uciwgbWVtcG9vbF9hbGxvY190ICphbGxvY19mbixcXG4gXFx0XFx0bWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7XFxuLXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLFxcbitzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcXG4gXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuIFxcdFxcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQpO1xcbiAjZGVmaW5lIG1lbXBvb2xfY3JlYXRlX25vZGUoLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0YWxsb2NfaG9va3MobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG4tI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfcG9vbF9kYXRhKVxcdFxcXFxcXG4tXFx0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfcG9vbF9kYXRhLFxcdFxcXFxcXG4tXFx0XFx0XFx0ICAgIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcXG4rI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfZGF0YSlcXHRcXFxcXFxuK1xcdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgKF9taW5fbnIpKjIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sXFx0XFxcXFxcbitcXHRcXHRcXHQgICAgX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcXG4gXFxuIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpO1xcbiB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XFxuQEAgLTEwMiw2ICsxMDMsMTMgQEAgdm9pZCBtZW1wb29sX2tmcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSk7XFxuIFxcdG1lbXBvb2xfY3JlYXRlKChfbWluX25yKSwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFxcdFxcXFxcXG4gXFx0XFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSlcXG4gXFxuKyNkZWZpbmUgbWVtcG9vbF9pbml0X2ttYWxsb2NfcmVzaXphYmxlX3Bvb2woX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIF9zaXplKVxcdFxcdFxcXFxcXG4rXFx0bWVtcG9vbF9pbml0X25vZGUoX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcXHRcXFxcXFxuK1xcdFxcdCAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXFxuKyNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcXHRcXHRcXHRcXFxcXFxuK1xcdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgX21heF9uciwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxcbitcXG4gLypcXG4gICogQSBtZW1wb29sX2FsbG9jX3QgYW5kIG1lbXBvb2xfZnJlZV90IGZvciBhIHNpbXBsZSBwYWdlIGFsbG9jYXRvciB0aGF0XFxuICAqIGFsbG9jYXRlcyBwYWdlcyBvZiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHBvb2xfZGF0YVxcbmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmNcXG5pbmRleCBkYjIzZTBlZWY2NTJkZS4uMzVjMWEyOGI2YzFiYmUgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtcG9vbC5jXFxuKysrIGIvbW0vbWVtcG9vbC5jXFxuQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIG1lbXBvb2xfZXhpdChzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcXG4gXFx0XFx0dm9pZCAqZWxlbWVudCA9IHJlbW92ZV9lbGVtZW50KHBvb2wpO1xcbiBcXHRcXHRwb29sLVxcdTAwM2VmcmVlKGVsZW1lbnQsIHBvb2wtXFx1MDAzZXBvb2xfZGF0YSk7XFxuIFxcdH1cXG4tXFx0a2ZyZWUocG9vbC1cXHUwMDNlZWxlbWVudHMpO1xcbitcXHRrdmZyZWUocG9vbC1cXHUwMDNlZWxlbWVudHMpO1xcbiBcXHRwb29sLVxcdTAwM2VlbGVtZW50cyA9IE5VTEw7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtZW1wb29sX2V4aXQpO1xcbkBAIC0yMzAsMjIgKzIzMCwyMiBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfZGVzdHJveSk7XFxuIFxcbi1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXFxuK2ludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9uciwgaW50IG1heF9ucixcXG4gXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuIFxcdFxcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlX2lkKVxcbiB7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrKTtcXG4gXFx0cG9vbC1cXHUwMDNlbWluX25yXFx0PSBtaW5fbnI7XFxuK1xcdHBvb2wtXFx1MDAzZW1heF9uclxcdD0gbWF4X25yO1xcbiBcXHRwb29sLVxcdTAwM2Vwb29sX2RhdGEgPSBwb29sX2RhdGE7XFxuIFxcdHBvb2wtXFx1MDAzZWFsbG9jXFx0PSBhbGxvY19mbjtcXG4gXFx0cG9vbC1cXHUwMDNlZnJlZVxcdD0gZnJlZV9mbjtcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cG9vbC1cXHUwMDNld2FpdCk7XFxuLVxcdC8qXFxuLVxcdCAqIG1heCgpIHVzZWQgaGVyZSB0byBlbnN1cmUgc3RvcmFnZSBmb3IgYXQgbGVhc3QgMSBlbGVtZW50IHRvIHN1cHBvcnRcXG4tXFx0ICogemVybyBtaW5pbXVtIHBvb2xcXG4tXFx0ICovXFxuLVxcdHBvb2wtXFx1MDAzZWVsZW1lbnRzID0ga21hbGxvY19hcnJheV9ub2RlKG1heCgxLCBtaW5fbnIpLCBzaXplb2Yodm9pZCAqKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCBub2RlX2lkKTtcXG4rXFxuK1xcdGlmIChXQVJOX09OKG1heF9uciBcXHUwMDNjIDEgfHwgbWluX25yIFxcdTAwM2MgMCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cG9vbC1cXHUwMDNlZWxlbWVudHMgPSBrdm1hbGxvY19hcnJheV9ub2RlX25vcHJvZihtYXhfbnIsIHNpemVvZih2b2lkICopLCBnZnBfbWFzaywgbm9kZV9pZCk7XFxuIFxcdGlmICghcG9vbC1cXHUwMDNlZWxlbWVudHMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjUzLDcgKzI1Myw3IEBAIGludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcXG4gXFx0ICogRmlyc3QgcHJlLWFsbG9jYXRlIHRoZSBndWFyYW50ZWVkIG51bWJlciBvZiBidWZmZXJzLFxcbiBcXHQgKiBhbHNvIHByZS1hbGxvY2F0ZSAxIGVsZW1lbnQgZm9yIHplcm8gbWluaW11bSBwb29sLlxcbiBcXHQgKi9cXG4tXFx0d2hpbGUgKHBvb2wtXFx1MDAzZWN1cnJfbnIgXFx1MDAzYyBtYXgoMSwgcG9vbC1cXHUwMDNlbWluX25yKSkge1xcbitcXHR3aGlsZSAocG9vbC1cXHUwMDNlY3Vycl9uciBcXHUwMDNjIHBvb2wtXFx1MDAzZW1pbl9ucikge1xcbiBcXHRcXHR2b2lkICplbGVtZW50O1xcbiBcXG4gXFx0XFx0ZWxlbWVudCA9IHBvb2wtXFx1MDAzZWFsbG9jKGdmcF9tYXNrLCBwb29sLVxcdTAwM2Vwb29sX2RhdGEpO1xcbkBAIC0yODYsNyArMjg2LDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXFxuIFxcdFxcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxcbiBcXHRcXHR2b2lkICpwb29sX2RhdGEpXFxuIHtcXG4tXFx0cmV0dXJuIG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgYWxsb2NfZm4sIGZyZWVfZm4sXFxuK1xcdHJldHVybiBtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIG1pbl9uciAqIDIsIGFsbG9jX2ZuLCBmcmVlX2ZuLFxcbiBcXHRcXHRcXHRcXHQgcG9vbF9kYXRhLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpO1xcbiBcXG4gfVxcbkBAIC0yOTYsNiArMjk2LDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcXG4gICogbWVtcG9vbF9jcmVhdGVfbm9kZSAtIGNyZWF0ZSBhIG1lbW9yeSBwb29sXFxuICAqIEBtaW5fbnI6ICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBndWFyYW50ZWVkIHRvIGJlXFxuICAqICAgICAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhpcyBwb29sLlxcbisgKiBAbWF4X25yOiAgICB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUgcG9vbFxcbiAgKiBAYWxsb2NfZm46ICB1c2VyLWRlZmluZWQgZWxlbWVudC1hbGxvY2F0aW9uIGZ1bmN0aW9uLlxcbiAgKiBAZnJlZV9mbjogICB1c2VyLWRlZmluZWQgZWxlbWVudC1mcmVlaW5nIGZ1bmN0aW9uLlxcbiAgKiBAcG9vbF9kYXRhOiBvcHRpb25hbCBwcml2YXRlIGRhdGEgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLlxcbkBAIC0zMTAsNyArMzExLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcXG4gICpcXG4gICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBwb29sIG9iamVjdCBvciAlTlVMTCBvbiBlcnJvci5cXG4gICovXFxuLXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLFxcbitzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcXG4gXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuIFxcdFxcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlX2lkKVxcbiB7XFxuQEAgLTMyMCw3ICszMjEsNyBAQCBzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9ucixcXG4gXFx0aWYgKCFwb29sKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXFxuK1xcdGlmIChtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIG1heF9uciwgYWxsb2NfZm4sIGZyZWVfZm4sIHBvb2xfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgZ2ZwX21hc2ssIG5vZGVfaWQpKSB7XFxuIFxcdFxcdGtmcmVlKHBvb2wpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMzM4LDkgKzMzOSw4IEBAIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xcbiAgKiAgICAgICAgICAgICAgYWxsb2NhdGVkIGZvciB0aGlzIHBvb2wuXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gc2hyaW5rcy9ncm93cyB0aGUgcG9vbC4gSW4gdGhlIGNhc2Ugb2YgZ3Jvd2luZyxcXG4tICogaXQgY2Fubm90IGJlIGd1YXJhbnRlZWQgdGhhdCB0aGUgcG9vbCB3aWxsIGJlIGdyb3duIHRvIHRoZSBuZXdcXG4tICogc2l6ZSBpbW1lZGlhdGVseSwgYnV0IG5ldyBtZW1wb29sX2ZyZWUoKSBjYWxscyB3aWxsIHJlZmlsbCBpdC5cXG4tICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuXFxuKyAqIHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ldyBzaXplIGltbWVkaWF0ZWx5LCBidXQgbmV3IG1lbXBvb2xfZnJlZSgpXFxuKyAqIGNhbGxzIHdpbGwgcmVmaWxsIGl0LlxcbiAgKlxcbiAgKiBOb3RlLCB0aGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIHRoYXQgbm8gbWVtcG9vbF9kZXN0cm95IGlzIGNhbGxlZFxcbiAgKiB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bm5pbmcuIG1lbXBvb2xfYWxsb2MoKSBcXHUwMDI2IG1lbXBvb2xfZnJlZSgpXFxuQEAgLTM1MSwxMSArMzUxLDEzIEBAIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xcbiBpbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKVxcbiB7XFxuIFxcdHZvaWQgKmVsZW1lbnQ7XFxuLVxcdHZvaWQgKipuZXdfZWxlbWVudHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRCVUdfT04obmV3X21pbl9uciBcXHUwMDNjPSAwKTtcXG4tXFx0bWlnaHRfc2xlZXAoKTtcXG4rXFx0aWYgKFdBUk5fT04obmV3X21pbl9uciBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChuZXdfbWluX25yIFxcdTAwM2UgcG9vbC1cXHUwMDNlbWF4X25yKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdGlmIChuZXdfbWluX25yIFxcdTAwM2M9IHBvb2wtXFx1MDAzZW1pbl9ucikge1xcbkBAIC0zNjYsNDUgKzM2OCw4IEBAIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpXFxuIFxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cG9vbC1cXHUwMDNlbWluX25yID0gbmV3X21pbl9ucjtcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHR9XFxuLVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFxuLVxcdC8qIEdyb3cgdGhlIHBvb2wgKi9cXG4tXFx0bmV3X2VsZW1lbnRzID0ga21hbGxvY19vYmpzKCpuZXdfZWxlbWVudHMsIG5ld19taW5fbnIpO1xcbi1cXHRpZiAoIW5ld19lbGVtZW50cylcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRpZiAodW5saWtlbHkobmV3X21pbl9uciBcXHUwMDNjPSBwb29sLVxcdTAwM2VtaW5fbnIpKSB7XFxuLVxcdFxcdC8qIFJhY2VkLCBvdGhlciByZXNpemUgd2lsbCBkbyBvdXIgd29yayAqL1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdGtmcmVlKG5ld19lbGVtZW50cyk7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcdG1lbWNweShuZXdfZWxlbWVudHMsIHBvb2wtXFx1MDAzZWVsZW1lbnRzLFxcbi1cXHRcXHRcXHRwb29sLVxcdTAwM2VjdXJyX25yICogc2l6ZW9mKCpuZXdfZWxlbWVudHMpKTtcXG4tXFx0a2ZyZWUocG9vbC1cXHUwMDNlZWxlbWVudHMpO1xcbi1cXHRwb29sLVxcdTAwM2VlbGVtZW50cyA9IG5ld19lbGVtZW50cztcXG4tXFx0cG9vbC1cXHUwMDNlbWluX25yID0gbmV3X21pbl9ucjtcXG4tXFxuLVxcdHdoaWxlIChwb29sLVxcdTAwM2VjdXJyX25yIFxcdTAwM2MgcG9vbC1cXHUwMDNlbWluX25yKSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0XFx0ZWxlbWVudCA9IHBvb2wtXFx1MDAzZWFsbG9jKEdGUF9LRVJORUwsIHBvb2wtXFx1MDAzZXBvb2xfZGF0YSk7XFxuLVxcdFxcdGlmICghZWxlbWVudClcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdGlmIChwb29sLVxcdTAwM2VjdXJyX25yIFxcdTAwM2MgcG9vbC1cXHUwMDNlbWluX25yKSB7XFxuLVxcdFxcdFxcdGFkZF9lbGVtZW50KHBvb2wsIGVsZW1lbnQpO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdFxcdHBvb2wtXFx1MDAzZWZyZWUoZWxlbWVudCwgcG9vbC1cXHUwMDNlcG9vbF9kYXRhKTtcXHQvKiBSYWNlZCAqL1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuLW91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tb3V0OlxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MjMuMzQ0OTcyMDE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk1NjMyMzI5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRFwiLFxuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJOVk1FX0NPUkVcIixcbiAgICBcIkNJRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1wb29sX3Jlc2l6ZVwiLFxuICAgIFwibWVtcG9vbF9pbml0X25vZGVcIixcbiAgICBcIm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mXCIsXG4gICAgXCJtZW1wb29sX2V4aXRcIixcbiAgICBcImRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcIm52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYG1lbXBvb2xgIEFQSSwgaW50cm9kdWNpbmcgYSBgbWF4X25yYCBwYXJhbWV0ZXIgdG8gbGltaXQgcG9vbCBjYXBhY2l0eSBhbmQgY2hhbmdpbmcgYG1lbXBvb2xfcmVzaXplYCB0byBubyBsb25nZXIgYWxsb2NhdGUgbWVtb3J5IGltbWVkaWF0ZWx5IGJ1dCBpbnN0ZWFkIHJlbHkgb24gYG1lbXBvb2xfZnJlZWAgdG8gcmVmaWxsIHRoZSBwb29sLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGludGVybmFsIGFycmF5IGFsbG9jYXRpb24gdG8gdXNlIGBrdm1hbGxvY2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gYSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbSB1c2VkIGJ5IHZhcmlvdXMgc3Vic3lzdGVtcyAoZS5nLiwgYmxvY2sgbGF5ZXIsIE5WTWUsIENJRlMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU4ZjVjNDcxMjM5ZjI0YTVkY2NhZDU0NGE0NzBlMTkwNDVlZWU1ZjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAxMjo1MToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay16b25lZC5jIGIvYmxvY2svYmxrLXpvbmVkLmNcbmluZGV4IDZhMjIxYzE4MDg4OTdhLi5jYzA2MGEwYzNlOTlmZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay16b25lZC5jXG4rKysgYi9ibG9jay9ibGstem9uZWQuY1xuQEAgLTE5MTgsOCArMTkxOCwxMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSsrKVxuIFx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoW2ldKTtcbiBcbi1cdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChwb29sX3NpemUsXG4tXHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBibGtfem9uZV93cGx1ZykpO1xuK1x0ZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChcbitcdFx0XHRcdFx0cG9vbF9zaXplLFxuK1x0XHRcdFx0XHRCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRSxcbitcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBibGtfem9uZV93cGx1ZykpO1xuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbmluZGV4IGI1Zjg0NjIwMDY3ODk5Li5lYWE0ODA0YWIzYzM1ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xuQEAgLTMzNDksNyArMzM0OSw3IEBAIHN0YXRpYyBpbnQgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2woc3RydWN0IG52bWVfZGV2ICpkZXYpXG4ge1xuIFx0c2l6ZV90IGFsbG9jX3NpemUgPSBzaXplb2Yoc3RydWN0IG52bWVfZG1hX3ZlYykgKiBOVk1FX01BWF9TRUdTO1xuIFxuLVx0ZGV2LVx1MDAzZWRtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLFxuK1x0ZGV2LVx1MDAzZWRtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLCAyLFxuIFx0XHRcdG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcbiBcdFx0XHQodm9pZCAqKWFsbG9jX3NpemUsIEdGUF9LRVJORUwsXG4gXHRcdFx0ZGV2X3RvX25vZGUoZGV2LVx1MDAzZWRldikpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbmluZGV4IGU4ZTQ0MGUwNGEwNjAzLi4wNzMxNDJmODA2Y2ViYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxuQEAgLTE4LDYgKzE4LDcgQEAgdHlwZWRlZiB2b2lkIChtZW1wb29sX2ZyZWVfdCkodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcbiB0eXBlZGVmIHN0cnVjdCBtZW1wb29sIHtcbiBcdHNwaW5sb2NrX3QgbG9jaztcbiBcdGludCBtaW5fbnI7XHRcdC8qIG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xuK1x0aW50IG1heF9ucjtcdFx0LyogbWF4IG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xuIFx0aW50IGN1cnJfbnI7XHRcdC8qIEN1cnJlbnQgbnIgb2YgZWxlbWVudHMgYXQgKmVsZW1lbnRzICovXG4gXHR2b2lkICoqZWxlbWVudHM7XG4gXG5AQCAtMzgsNyArMzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtcG9vbF9pc19zYXR1cmF0ZWQoc3RydWN0IG1lbXBvb2wgKnBvb2wpXG4gfVxuIFxuIHZvaWQgbWVtcG9vbF9leGl0KHN0cnVjdCBtZW1wb29sICpwb29sKTtcbi1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4raW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLCBpbnQgbWF4X25yLFxuIFx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbiBcdFx0dm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpO1xuIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxuQEAgLTQ5LDE1ICs1MCwxNSBAQCBpbnQgbWVtcG9vbF9pbml0X25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcbiBcbiBzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGUoaW50IG1pbl9uciwgbWVtcG9vbF9hbGxvY190ICphbGxvY19mbixcbiBcdFx0bWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7XG4tc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsXG4rc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXG4gXHRcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxuIFx0XHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkKTtcbiAjZGVmaW5lIG1lbXBvb2xfY3JlYXRlX25vZGUoLi4uKVx0XHRcdFx0XHRcXFxuIFx0YWxsb2NfaG9va3MobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuLSNkZWZpbmUgbWVtcG9vbF9jcmVhdGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX3Bvb2xfZGF0YSlcdFxcXG4tXHRtZW1wb29sX2NyZWF0ZV9ub2RlKF9taW5fbnIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sIF9wb29sX2RhdGEsXHRcXFxuLVx0XHRcdCAgICBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXG4rI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfZGF0YSlcdFxcXG4rXHRtZW1wb29sX2NyZWF0ZV9ub2RlKF9taW5fbnIsIChfbWluX25yKSoyLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLFx0XFxcbitcdFx0XHQgICAgX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbiBcbiBpbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKTtcbiB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XG5AQCAtMTAyLDYgKzEwMywxMyBAQCB2b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcbiBcdG1lbXBvb2xfY3JlYXRlKChfbWluX25yKSwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFx0XFxcbiBcdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSlcbiBcbisjZGVmaW5lIG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcdFx0XFxcbitcdG1lbXBvb2xfaW5pdF9ub2RlKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXHRcXFxuK1x0XHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxuKyNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcdFx0XHRcXFxuK1x0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXHRcdFxcXG4rXHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKShfc2l6ZSksIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbitcbiAvKlxuICAqIEEgbWVtcG9vbF9hbGxvY190IGFuZCBtZW1wb29sX2ZyZWVfdCBmb3IgYSBzaW1wbGUgcGFnZSBhbGxvY2F0b3IgdGhhdFxuICAqIGFsbG9jYXRlcyBwYWdlcyBvZiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHBvb2xfZGF0YVxuZGlmZiAtLWdpdCBhL21tL21lbXBvb2wuYyBiL21tL21lbXBvb2wuY1xuaW5kZXggZGIyM2UwZWVmNjUyZGUuLjM1YzFhMjhiNmMxYmJlIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9vbC5jXG4rKysgYi9tbS9tZW1wb29sLmNcbkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBtZW1wb29sX2V4aXQoc3RydWN0IG1lbXBvb2wgKnBvb2wpXG4gXHRcdHZvaWQgKmVsZW1lbnQgPSByZW1vdmVfZWxlbWVudChwb29sKTtcbiBcdFx0cG9vbC1cdTAwM2VmcmVlKGVsZW1lbnQsIHBvb2wtXHUwMDNlcG9vbF9kYXRhKTtcbiBcdH1cbi1cdGtmcmVlKHBvb2wtXHUwMDNlZWxlbWVudHMpO1xuK1x0a3ZmcmVlKHBvb2wtXHUwMDNlZWxlbWVudHMpO1xuIFx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IE5VTEw7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9leGl0KTtcbkBAIC0yMzAsMjIgKzIzMCwyMiBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcbiB9XG4gRVhQT1JUX1NZTUJPTChtZW1wb29sX2Rlc3Ryb3kpO1xuIFxuLWludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcbitpbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXG4gXHRcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxuIFx0XHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZV9pZClcbiB7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuIFx0cG9vbC1cdTAwM2VtaW5fbnJcdD0gbWluX25yO1xuK1x0cG9vbC1cdTAwM2VtYXhfbnJcdD0gbWF4X25yO1xuIFx0cG9vbC1cdTAwM2Vwb29sX2RhdGEgPSBwb29sX2RhdGE7XG4gXHRwb29sLVx1MDAzZWFsbG9jXHQ9IGFsbG9jX2ZuO1xuIFx0cG9vbC1cdTAwM2VmcmVlXHQ9IGZyZWVfZm47XG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnBvb2wtXHUwMDNld2FpdCk7XG4tXHQvKlxuLVx0ICogbWF4KCkgdXNlZCBoZXJlIHRvIGVuc3VyZSBzdG9yYWdlIGZvciBhdCBsZWFzdCAxIGVsZW1lbnQgdG8gc3VwcG9ydFxuLVx0ICogemVybyBtaW5pbXVtIHBvb2xcbi1cdCAqL1xuLVx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IGttYWxsb2NfYXJyYXlfbm9kZShtYXgoMSwgbWluX25yKSwgc2l6ZW9mKHZvaWQgKiksXG4tXHRcdFx0XHRcdCAgICBnZnBfbWFzaywgbm9kZV9pZCk7XG4rXG4rXHRpZiAoV0FSTl9PTihtYXhfbnIgXHUwMDNjIDEgfHwgbWluX25yIFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwb29sLVx1MDAzZWVsZW1lbnRzID0ga3ZtYWxsb2NfYXJyYXlfbm9kZV9ub3Byb2YobWF4X25yLCBzaXplb2Yodm9pZCAqKSwgZ2ZwX21hc2ssIG5vZGVfaWQpO1xuIFx0aWYgKCFwb29sLVx1MDAzZWVsZW1lbnRzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yNTMsNyArMjUzLDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxuIFx0ICogRmlyc3QgcHJlLWFsbG9jYXRlIHRoZSBndWFyYW50ZWVkIG51bWJlciBvZiBidWZmZXJzLFxuIFx0ICogYWxzbyBwcmUtYWxsb2NhdGUgMSBlbGVtZW50IGZvciB6ZXJvIG1pbmltdW0gcG9vbC5cbiBcdCAqL1xuLVx0d2hpbGUgKHBvb2wtXHUwMDNlY3Vycl9uciBcdTAwM2MgbWF4KDEsIHBvb2wtXHUwMDNlbWluX25yKSkge1xuK1x0d2hpbGUgKHBvb2wtXHUwMDNlY3Vycl9uciBcdTAwM2MgcG9vbC1cdTAwM2VtaW5fbnIpIHtcbiBcdFx0dm9pZCAqZWxlbWVudDtcbiBcbiBcdFx0ZWxlbWVudCA9IHBvb2wtXHUwMDNlYWxsb2MoZ2ZwX21hc2ssIHBvb2wtXHUwMDNlcG9vbF9kYXRhKTtcbkBAIC0yODYsNyArMjg2LDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4gXHRcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxuIFx0XHR2b2lkICpwb29sX2RhdGEpXG4ge1xuLVx0cmV0dXJuIG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgYWxsb2NfZm4sIGZyZWVfZm4sXG4rXHRyZXR1cm4gbWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtaW5fbnIgKiAyLCBhbGxvY19mbiwgZnJlZV9mbixcbiBcdFx0XHRcdCBwb29sX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSk7XG4gXG4gfVxuQEAgLTI5Niw2ICsyOTYsNyBAQCBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfaW5pdF9ub3Byb2YpO1xuICAqIG1lbXBvb2xfY3JlYXRlX25vZGUgLSBjcmVhdGUgYSBtZW1vcnkgcG9vbFxuICAqIEBtaW5fbnI6ICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBndWFyYW50ZWVkIHRvIGJlXG4gICogICAgICAgICAgICAgYWxsb2NhdGVkIGZvciB0aGlzIHBvb2wuXG4rICogQG1heF9ucjogICAgdGhlIG1heGltdW0gY2FwYWNpdHkgb2YgdGhlIHBvb2xcbiAgKiBAYWxsb2NfZm46ICB1c2VyLWRlZmluZWQgZWxlbWVudC1hbGxvY2F0aW9uIGZ1bmN0aW9uLlxuICAqIEBmcmVlX2ZuOiAgIHVzZXItZGVmaW5lZCBlbGVtZW50LWZyZWVpbmcgZnVuY3Rpb24uXG4gICogQHBvb2xfZGF0YTogb3B0aW9uYWwgcHJpdmF0ZSBkYXRhIGF2YWlsYWJsZSB0byB0aGUgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy5cbkBAIC0zMTAsNyArMzExLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcbiAgKlxuICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgcG9vbCBvYmplY3Qgb3IgJU5VTEwgb24gZXJyb3IuXG4gICovXG4tc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsXG4rc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXG4gXHRcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxuIFx0XHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZV9pZClcbiB7XG5AQCAtMzIwLDcgKzMyMSw3IEBAIHN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLFxuIFx0aWYgKCFwb29sKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmIChtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXG4rXHRpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtYXhfbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXG4gXHRcdFx0ICAgICAgZ2ZwX21hc2ssIG5vZGVfaWQpKSB7XG4gXHRcdGtmcmVlKHBvb2wpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0zMzgsOSArMzM5LDggQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZik7XG4gICogICAgICAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhpcyBwb29sLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBzaHJpbmtzL2dyb3dzIHRoZSBwb29sLiBJbiB0aGUgY2FzZSBvZiBncm93aW5nLFxuLSAqIGl0IGNhbm5vdCBiZSBndWFyYW50ZWVkIHRoYXQgdGhlIHBvb2wgd2lsbCBiZSBncm93biB0byB0aGUgbmV3XG4tICogc2l6ZSBpbW1lZGlhdGVseSwgYnV0IG5ldyBtZW1wb29sX2ZyZWUoKSBjYWxscyB3aWxsIHJlZmlsbCBpdC5cbi0gKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC5cbisgKiB0aGUgcG9vbCB3aWxsIGJlIGdyb3duIHRvIHRoZSBuZXcgc2l6ZSBpbW1lZGlhdGVseSwgYnV0IG5ldyBtZW1wb29sX2ZyZWUoKVxuKyAqIGNhbGxzIHdpbGwgcmVmaWxsIGl0LlxuICAqXG4gICogTm90ZSwgdGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IG5vIG1lbXBvb2xfZGVzdHJveSBpcyBjYWxsZWRcbiAgKiB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bm5pbmcuIG1lbXBvb2xfYWxsb2MoKSBcdTAwMjYgbWVtcG9vbF9mcmVlKClcbkBAIC0zNTEsMTEgKzM1MSwxMyBAQCBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKTtcbiBpbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKVxuIHtcbiBcdHZvaWQgKmVsZW1lbnQ7XG4tXHR2b2lkICoqbmV3X2VsZW1lbnRzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdEJVR19PTihuZXdfbWluX25yIFx1MDAzYz0gMCk7XG4tXHRtaWdodF9zbGVlcCgpO1xuK1x0aWYgKFdBUk5fT04obmV3X21pbl9uciBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKG5ld19taW5fbnIgXHUwMDNlIHBvb2wtXHUwMDNlbWF4X25yKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0aWYgKG5ld19taW5fbnIgXHUwMDNjPSBwb29sLVx1MDAzZW1pbl9ucikge1xuQEAgLTM2Niw0NSArMzY4LDggQEAgaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcbiBcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0fVxuIFx0XHRwb29sLVx1MDAzZW1pbl9uciA9IG5ld19taW5fbnI7XG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdH1cbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXG4tXHQvKiBHcm93IHRoZSBwb29sICovXG4tXHRuZXdfZWxlbWVudHMgPSBrbWFsbG9jX29ianMoKm5ld19lbGVtZW50cywgbmV3X21pbl9ucik7XG4tXHRpZiAoIW5ld19lbGVtZW50cylcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdGlmICh1bmxpa2VseShuZXdfbWluX25yIFx1MDAzYz0gcG9vbC1cdTAwM2VtaW5fbnIpKSB7XG4tXHRcdC8qIFJhY2VkLCBvdGhlciByZXNpemUgd2lsbCBkbyBvdXIgd29yayAqL1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRrZnJlZShuZXdfZWxlbWVudHMpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cdG1lbWNweShuZXdfZWxlbWVudHMsIHBvb2wtXHUwMDNlZWxlbWVudHMsXG4tXHRcdFx0cG9vbC1cdTAwM2VjdXJyX25yICogc2l6ZW9mKCpuZXdfZWxlbWVudHMpKTtcbi1cdGtmcmVlKHBvb2wtXHUwMDNlZWxlbWVudHMpO1xuLVx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IG5ld19lbGVtZW50cztcbi1cdHBvb2wtXHUwMDNlbWluX25yID0gbmV3X21pbl9ucjtcbi1cbi1cdHdoaWxlIChwb29sLVx1MDAzZWN1cnJfbnIgXHUwMDNjIHBvb2wtXHUwMDNlbWluX25yKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGVsZW1lbnQgPSBwb29sLVx1MDAzZWFsbG9jKEdGUF9LRVJORUwsIHBvb2wtXHUwMDNlcG9vbF9kYXRhKTtcbi1cdFx0aWYgKCFlbGVtZW50KVxuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0aWYgKHBvb2wtXHUwMDNlY3Vycl9uciBcdTAwM2MgcG9vbC1cdTAwM2VtaW5fbnIpIHtcbi1cdFx0XHRhZGRfZWxlbWVudChwb29sLCBlbGVtZW50KTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRcdHBvb2wtXHUwMDNlZnJlZShlbGVtZW50LCBwb29sLVx1MDAzZXBvb2xfZGF0YSk7XHQvKiBSYWNlZCAqL1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4gXHR9XG4tb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tb3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9yZXNpemUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MjMuMzQ0OTczNjIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1MDM5NjI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbXBvb2wgQVBJIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyB0aGUgYG1lbXBvb2xgIEFQSSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gU2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBvbiBtYWtpbmcgdGhlIHBvb2xzIHJlc2l6YWJsZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgbWF4X25yYCBwYXJhbWV0ZXIgdG8gYG1lbXBvb2xfaW5pdF9ub2RlYCBhbmQgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCBhbmQgc2lnbmlmaWNhbnRseSBhbHRlcnMgYG1lbXBvb2xfcmVzaXplYC4gSXQgYXBwZWFycyBgbWVtcG9vbF9yZXNpemVgIG5vIGxvbmdlciByZWFsbG9jYXRlcyB0aGUgdW5kZXJseWluZyBhcnJheSwgaW5zdGVhZCBpdCBjaGFuZ2VzIGBtaW5fbnJgLCBhbmQgcmVsaWVzIG9uIGBtYXhfbnJgIG5vdy4gVGhleSd2ZSBhbHNvIGFkZGVkIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYCBhbmQgYG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYC4gVGhhdCBnaXZlcyBtZSBhIGNsdWUgYWJvdXQgdGhlIGRpcmVjdGlvbi5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLi4uIEFoLCBoZXJlJ3MgdGhlIGNydWNpYWwgcGFydDogaW4gYG1lbXBvb2xfcmVzaXplYCwgdGhlIHBhdGNoIG5vdyBqdXN0IGNoZWNrcyBpZiB0aGUgcmVxdWVzdGVkIGBuZXdfbWluX25yYCBleGNlZWRzIGBwb29sLVx1MDAzZW1heF9ucmAgYW5kIHJldHVybnMgYC1FTk9TUENgIGlmIHRoYXQgaXMgdGhlIGNhc2UuIElmIHRoZSBkZXNpcmVkIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IG1pbmltdW0sIGl0IGZyZWVzIGV4dHJhIGVsZW1lbnRzLiBCdXQgdGhlIGtleSBwYXJ0IGhlcmUgaXMgdGhhdCB3aGVuIHlvdSBpbmNyZWFzZSBgbmV3X21pbl9ucmAgaXQganVzdCAqc2V0cyogdGhlIHZhbHVlIGFuZCBkb2VzIE5PVCBhbGxvY2F0ZS4gVGhlIGNvZGUgY29tbWVudHMgaW5kaWNhdGUgdGhhdCBuZXcgY2FsbHMgdG8gYG1lbXBvb2xfZnJlZSgpYCB3aWxsIGV2ZW50dWFsbHkgcmVmaWxsIGl0LiAqVGhhdCdzKiBhIGNoYW5nZTsgdGhlIG9sZCBjb2RlIGhhZCBhbiBleHBsaWNpdCBhbGxvY2F0aW9uIGxvb3AgdG8gZW5zdXJlIHRoZSBwb29sIHdhcyBhbHdheXMgYXQgbGVhc3QgYG1pbl9ucmAgaW4gc2l6ZSwgYnV0IG5vdyBpdCdzIGdvbmUhIFRoaXMgaXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzdHJhdGVneS5cblxuV2FpdCwgc28gdGhleSdyZSBkZWZlcnJpbmcgYWxsb2NhdGlvbiB0byB0aGUgZnJlZSBwYXRoPyBUaGF0IGhhcyBkZWZpbml0ZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LCBlcnJvciBoYW5kbGluZywgYW5kIG1lbW9yeSBmcmFnbWVudGF0aW9uLiBJdCdzIGEgdHJhZGUtb2ZmOiBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugb24gdGhlIHJlc2l6ZSBwYXRoIGF0IHRoZSBleHBlbnNlIG9mIHBvdGVudGlhbCBkZWxheXMgd2hlbiB0aGUgc3lzdGVtIG5lZWRzIHRvIGFsbG9jYXRlIG1vcmUgbWVtb3J5IGFuZCB0aGUgbWVtcG9vbCBpc24ndCBpbW1lZGlhdGVseSByZWFkeSB0byBwcm92aWRlIGl0LlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgKmNvcmUqIGtlcm5lbCBjaGFuZ2UuIEl0IGFmZmVjdHMgYWxsIHVzZXJzIG9mIG1lbXBvb2wsIHdoaWNoIGlzIGh1Z2UhIERlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduIHRvIGNhdGNoIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlZ3Jlc3Npb25zLiBMZXQncyBzZWUuLi4gYG1lbXBvb2xgIGlzIGFsd2F5cyBlbmFibGVkLCBhbmQgaXQncyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQgaW50byB0aGUga2VybmVsIChhdCBsZWFzdCBhcyBmYXIgYXMgSSBjYW4gc2VlIGluIGBtbS9tZW1wb29sLmNgIGFuZCB0aGUgYG1tL01ha2VmaWxlYCkuIFRoYXQgbWFrZXMgaXQgZXZlbiBtb3JlIGNyaXRpY2FsIHRvIHRlc3QgdGhvcm91Z2hseSwgc2luY2UgaXQncyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQ5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MzIuOTk1MzcyMTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQ4MTkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb29sLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NDk9ZW5kaWZcXG5tbS9NYWtlZmlsZS01MC1cXG5tbS9NYWtlZmlsZTo1MTpvYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbm1tL01ha2VmaWxlLTUyLVxcdFxcdFxcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MzMuNDMwODY1ODk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNjQ3MTM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgS2VybmVsIE1vZHVsZSBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYG1lbXBvb2wub2AgaXMgYWx3YXlzIGEgZ28sIG5vIGNvbmRpdGlvbmFsIGZsYWdzIHRoZXJlLiBFYXN5IGVub3VnaC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbiBgYmxrLXpvbmVkLmNgLiBBaGEsIHRoYXQgb25lIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JMS19ERVZfWk9ORURgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBtb2R1bGFyIGFuZCBhdm9pZHMgY29tcGlsaW5nIHVubmVjZXNzYXJ5IGNvZGUuXG5cbk5leHQgdXAsIGBudm1lL2hvc3QvcGNpLmNgLiBUaGlzIG9uZSdzIGEgbGl0dGxlIG1vcmUgaW52b2x2ZWQsIGdvdHRhIHRyYWNrIGRvd24gaXRzIGNvbmRpdGlvbnMuIE9rYXksIGhlcmUgd2UgZ28uLi4gaXQncyBjb250aW5nZW50IG9uICpib3RoKiBgQ09ORklHX05WTUVfQ09SRWAgKmFuZCogYENPTkZJR19CTEtfREVWX05WTUVgIGJlaW5nIGRlZmluZWQuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGNvbnNpZGVyaW5nIHRoZSBuZWVkIGZvciB0aGUgTlZNZSBjb3JlIGFuZCBibG9jayBkZXZpY2Ugc3VwcG9ydCBiZWZvcmUgdGhlIFBDSSBob3N0IGRyaXZlciB3b3VsZCBldmVuIGJlIHJlbGV2YW50LiBHb29kLCBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjM4LjU2NzM0MDQzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk4Njc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGstem9uZWQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpICs9IGJpby1pbnRlZ3JpdHkubyBibGstaW50ZWdyaXR5Lm8gdDEwLXBpLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTI5LVxcdFxcdFxcdFxcdCAgIGJpby1pbnRlZ3JpdHktYXV0by5vIGJpby1pbnRlZ3JpdHktZnMub1xcbmJsb2NrL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEKVxcdCs9IGJsay16b25lZC5vXFxuYmxvY2svTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX0JMS19XQlQpXFx0XFx0Kz0gYmxrLXdidC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjM4LjYyNTMzMzU2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTM0NDE4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5WTWUgSG9zdCBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlLCBwcm9iYWJseSB0byBkZWJ1ZyBzb21ldGhpbmcgc3BlY2lmaWMsIGNvbnRyaWJ1dGUgYSBwYXRjaCwgb3IgbWF5YmUganVzdCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIE5WTWUgaG9zdCBkcml2ZXJzIHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBwYXJzZSB0aGUgaW1wbGljYXRpb25zIOKAkyB0aGlzIE1ha2VmaWxlIGlzIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGNvbXBpbGluZyB0aGUgTlZNZSBob3N0IGRyaXZlciBjb21wb25lbnRzLiBJIGtub3cgdGhlcmUgd2lsbCBiZSBydWxlcyBmb3IgYnVpbGRpbmcgb2JqZWN0IGZpbGVzLCBsaW5raW5nIHRoZW0gaW50byBtb2R1bGVzLCBoYW5kbGluZyBkZXBlbmRlbmNpZXMuLi4gbGlrZWx5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzLCBvcHRpb25zIGZvciBkaWZmZXJlbnQgTlZNZSBjb250cm9sbGVyIHZlbmRvcnMsIG9yIHBlcmhhcHMgYnVpbGQtdGltZSBvcHRpbWl6YXRpb25zLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgdmFyaW91cyBzb3VyY2UgZmlsZXMgd2l0aGluIHRoZSBgbnZtZS9ob3N0YCBkaXJlY3RvcnkgYXJlIGJyb3VnaHQgdG9nZXRoZXIsIGhvdyBoZWFkZXJzIGFyZSBpbmNsdWRlZCwgYW5kIHdoYXQgbW9kdWxlcyBvciBiaW5hcmllcyBhcmUgcHJvZHVjZWQuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIGRlY2lwaGVyIHRoZSBidWlsZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjQyLjY3ODc3ODQ2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQxMjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2kub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZT0yMD1udm1lLWNvcmUtJChDT05GSUdfTlZNRV9IT1NUX0FVVEgpXFx0Kz0gYXV0aC5vXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUtMjEtXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6MjI6bnZtZS15XFx0XFx0XFx0XFx0XFx0Kz0gcGNpLm9cXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS0yMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6NDIuNzQxMTk4Njc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU5MTA1NzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIE1vZHVsZSBEZXBlbmRlbmN5IElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGJ1aWxkIGNvbW1hbmQ6IGBudm1lLXkgKz0gcGNpLm9gLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IFdoYXQncyB0aGUgKnJlYWwqIGRlcGVuZGVuY3kgY2hhaW4gaGVyZSBmb3IgdGhlIGBudm1lYCBkcml2ZXI/IEknbSBhc3N1bWluZyBgbnZtZWAgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJdCBzZWVtcyBsaWtlIHRoZSBgcGNpLm9gIG1vZHVsZSBpcyBiZWluZyBsaW5rZWQgaW4sIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBzZXR0aW5nIHRoYXQgYWN0dWFsbHkgKmVuYWJsZXMqIHRoZSBjb3JlIGBudm1lYCBmdW5jdGlvbmFsaXR5LiBJcyBpdCBgQ09ORklHX05WTUVgLCBgQ09ORklHX0JMS19ERVZfTlZNRWAsIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGVyZSdzIHByb2JhYmx5IGFuIGludGVybWVkaWF0ZSBkZXBlbmRlbmN5IHNvbWV3aGVyZSB0aGF0IHRpZXMgdGhlIGRldmljZSBkcml2ZXIgdG8gUENJLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRocm91Z2ggdGhlIEtjb25maWcgaGllcmFyY2h5IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MTo1Mi4zMzIyNTk0MjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTQ4MjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipudm1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlPTM9Y2NmbGFncy15XFx0XFx0XFx0XFx0Kz0gLUkkKHNyYylcXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS00LVxcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX05WTUVfQ09SRSlcXHRcXHRcXHQrPSBudm1lLWNvcmUub1xcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMS19ERVZfTlZNRSlcXHRcXHQrPSBudm1lLm9cXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OVk1FX0ZBQlJJQ1MpXFx0XFx0Kz0gbnZtZS1mYWJyaWNzLm9cXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19OVk1FX1JETUEpXFx0XFx0XFx0Kz0gbnZtZS1yZG1hLm9cXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19OVk1FX0ZDKVxcdFxcdFxcdCs9IG52bWUtZmMub1xcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19OVk1FX1RDUClcXHRcXHRcXHQrPSBudm1lLXRjcC5vXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX05WTUVfQVBQTEUpXFx0XFx0Kz0gbnZtZS1hcHBsZS5vXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUtMTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjUyLjc0MTc2NThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0ODA1NTE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBOVk1lIGFuZCBNZW1vcnkgUG9vbHMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0JMS19ERVZfTlZNRWAgYnJpbmdzIGluIGBudm1lLm9gLCB3aGljaCBuYXR1cmFsbHkgaW5jbHVkZXMgYHBjaS5vYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIHdpdGhpbiB0aGF0IG1vZHVsZS4gTGV0J3Mgc2VlLCB3aGF0IGhhcyBjaGFuZ2VkP1xuXG5SaWdodCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBzZWUgdGhlbTogYG1lbXBvb2xfZXhpdGAsIGBtZW1wb29sX2Rlc3Ryb3lgICh3aGljaCwgd2hpbGUgbm90IGNoYW5nZWQsIHByb3ZpZGVzIHZhbHVhYmxlIGNvbnRleHQpLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9pbml0X25vcHJvZmAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGFuZCBgbWVtcG9vbF9yZXNpemVgLlxuXG5gbWVtcG9vbF9yZXNpemVgIGxvb2tzIGxpa2UgdGhlIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydC4gSXQgaGFzIHRoZSBtb3N0IHN1YnN0YW50aXZlIGxvZ2ljIGNoYW5nZXMuIEJ1dCBgbWVtcG9vbF9pbml0X25vZGVgIGFsc28gZ290IGEgdG91Y2gtdXAgKHNwZWNpZmljYWxseSwgdXNpbmcgYGt2bWFsbG9jX2FycmF5X25vZGVfbm9wcm9mYCksIGFuZCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgIGlzIGFsc28gb24gdGhlIG1vZGlmaWVkIGxpc3QuIEknbGwgYWRkIGBtZW1wb29sX3Jlc2l6ZWAsIGBtZW1wb29sX2luaXRfbm9kZWAsIGFuZCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5JIGFsc28gd2FudCB0byBjaGVjayBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgYW5kIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGAuIFRoZXkgY291bGQgYmUgZnJ1aXRmdWwsIHRvby5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHJlYWNoYWJpbGl0eS4gYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYCBsaXZlcyBpbiBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgLCBzbyBpdCBzZWVtcyByZWxldmFudC4gQW5kIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCBpcyBpbiBgYmxvY2svYmxrLXpvbmVkLmNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGNhbGxlcnMgZm9yIGBtZW1wb29sX3Jlc2l6ZWAsIGp1c3QgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDM3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjU5Ljc4OTgyMzY4MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNzI2OTc5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb29sX3Jlc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXpvbmVkLmM9MjA3Nj1zdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjEyOC1cXG5ibG9jay9ibGstem9uZWQuYzoyMTI5OlxcdG1lbXBvb2xfcmVzaXplKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wsIHBvb2xfc2l6ZSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjEzMC1cXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM9ODY5PXN0YXRpYyBlbnVtIHpmY3BfZXJwX2FjdF9yZXN1bHQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg0OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSxcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4NS1cXHRcXHRcXHQgICBhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXN0YXRfcmVhZF9idWZfbnVtKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg3LVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg4OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3RhdHVzX3JlYWRfcmVxLFxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg5LVxcdFxcdFxcdCAgIGFjdC1cXHUwMDNlYWRhcHRlci1cXHUwMDNlc3RhdF9yZWFkX2J1Zl9udW0pKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MTA1OT1jbGVhbl9kZW11bHRpcGxleF9pbmZvKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcilcXG4tLVxcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTExNDgtXFx0aWYgKGxlbmd0aCBcXHUwMDNlIDApXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM6MTE0OTpcXHRcXHRtZW1wb29sX3Jlc2l6ZShjaWZzX3JlcV9wb29scCwgbGVuZ3RoICsgY2lmc19taW5fcmN2KTtcXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMTUwLX1cXG4tLVxcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jPTEyNTQ9Y2lmc19kZW11bHRpcGxleF90aHJlYWQodm9pZCAqcClcXG4tLVxcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTEyNzEtXFx0aWYgKGxlbmd0aCBcXHUwMDNlIDEpXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM6MTI3MjpcXHRcXHRtZW1wb29sX3Jlc2l6ZShjaWZzX3JlcV9wb29scCwgbGVuZ3RoICsgY2lmc19taW5fcmN2KTtcXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMjczLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9NTM9c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC02Mi1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo2MzppbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKTtcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC02NC12b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XFxuLS1cXG5tbS9tZW1wb29sLmM9MzMyPUVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xcbi0tXFxubW0vbWVtcG9vbC5jLTMzNC0vKipcXG5tbS9tZW1wb29sLmM6MzM1OiAqIG1lbXBvb2xfcmVzaXplIC0gcmVzaXplIGFuIGV4aXN0aW5nIG1lbW9yeSBwb29sXFxubW0vbWVtcG9vbC5jLTMzNi0gKiBAcG9vbDogICAgICAgcG9pbnRlciB0byB0aGUgbWVtb3J5IHBvb2wgd2hpY2ggd2FzIGFsbG9jYXRlZCB2aWFcXG4tLVxcbm1tL21lbXBvb2wuYy0zNTAtICovXFxubW0vbWVtcG9vbC5jOjM1MTppbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKVxcbm1tL21lbXBvb2wuYy0zNTIte1xcbi0tXFxubW0vbWVtcG9vbC5jLTM3NC19XFxubW0vbWVtcG9vbC5jOjM3NTpFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTtcXG5tbS9tZW1wb29sLmMtMzc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjowMS45MTcxMDAwOTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTU2OTgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYG1lbXBvb2xfcmVzaXplYCBQYXRjaCoqXG5cbk9rYXksIHNvIGBtZW1wb29sX3Jlc2l6ZWAgaXMgdXNlZCBpbiBhIGZldyBwbGFjZXMg4oCTIGBibG9jay9ibGstem9uZWQuY2AsIGBkcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jYCwgYW5kIGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoJ3MgaW1wbGljYXRpb25zLiAgUmlnaHQsIEkgc2VlIGl0LiBUaGUgY2hhbmdlIG1ha2VzIGBtZW1wb29sX3Jlc2l6ZWAgcmV0dXJuIGAtRU5PU1BDYCBpZiB0aGUgcmVxdWVzdGVkIGBuZXdfbWluX25yYCBleGNlZWRzIHRoZSBgcG9vbC1cdTAwM2VtYXhfbnJgLiBBbmQgYG1lbXBvb2xfY3JlYXRlYCBub3cgaW5pdGlhbGl6ZXMgYG1heF9ucmAgdG8gZG91YmxlIHRoZSBpbml0aWFsIGBtaW5fbnJgLiAgVGhhdCBtZWFucyBpZiBJIGNhbGwgYG1lbXBvb2xfcmVzaXplYCB3aXRoIGEgYG5ld19taW5fbnJgIGdyZWF0ZXIgdGhhbiB0d2ljZSB0aGUgKmluaXRpYWwqIG1pbmltdW0sIGl0J3MgZ29pbmcgdG8gZmFpbC4gIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCBwbGF5cyBvdXQgaW4gYGZzL3NtYi9jbGllbnQvY29ubmVjdC5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MDUuNTg4NjcyMjM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODY5MDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaWZzX3JlcV9wb29scFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zbWIvY2xpZW50L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L2NpZnNmcy5jPTQxND1tZW1wb29sX3QgKmNpZnNfc21fcmVxX3Bvb2xwO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6NDE1Om1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy00MTYtbWVtcG9vbF90IGNpZnNfbWlkX3Bvb2w7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTE3MzY9Y2lmc19pbml0X3JlcXVlc3RfYnVmcyh2b2lkKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzcxLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTc3MjpcXHRjaWZzX3JlcV9wb29scCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChjaWZzX21pbl9yY3YsXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzczLVxcdFxcdFxcdFxcdFxcdFxcdCAgY2lmc19yZXFfY2FjaGVwKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE3NzQtXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxNzc1OlxcdGlmIChjaWZzX3JlcV9wb29scCA9PSBOVUxMKSB7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzc2LVxcdFxcdGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApO1xcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzkwLVxcdGlmIChjaWZzX3NtX3JlcV9jYWNoZXAgPT0gTlVMTCkge1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTc5MTpcXHRcXHRtZW1wb29sX2Rlc3Ryb3koY2lmc19yZXFfcG9vbHApO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTc5Mi1cXHRcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19yZXFfY2FjaGVwKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTgwNi1cXHRpZiAoY2lmc19zbV9yZXFfcG9vbHAgPT0gTlVMTCkge1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTgwNzpcXHRcXHRtZW1wb29sX2Rlc3Ryb3koY2lmc19yZXFfcG9vbHApO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTgwOC1cXHRcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19yZXFfY2FjaGVwKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTgxNz1jaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKHZvaWQpXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xODE4LXtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjE4MTk6XFx0bWVtcG9vbF9kZXN0cm95KGNpZnNfcmVxX3Bvb2xwKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE4MjAtXFx0a21lbV9jYWNoZV9kZXN0cm95KGNpZnNfcmVxX2NhY2hlcCk7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg9MjE0Mj1leHRlcm4gbWVtcG9vbF90ICpjaWZzX3NtX3JlcV9wb29scDtcXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg6MjE0MzpleHRlcm4gbWVtcG9vbF90ICpjaWZzX3JlcV9wb29scDtcXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmgtMjE0NC1leHRlcm4gbWVtcG9vbF90IGNpZnNfbWlkX3Bvb2w7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYz0xMDU5PWNsZWFuX2RlbXVsdGlwbGV4X2luZm8oc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmMtMTE0OC1cXHRpZiAobGVuZ3RoIFxcdTAwM2UgMClcXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYzoxMTQ5OlxcdFxcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggKyBjaWZzX21pbl9yY3YpO1xcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTExNTAtfVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MTI1ND1jaWZzX2RlbXVsdGlwbGV4X3RocmVhZCh2b2lkICpwKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmMtMTI3MS1cXHRpZiAobGVuZ3RoIFxcdTAwM2UgMSlcXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYzoxMjcyOlxcdFxcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggKyBjaWZzX21pbl9yY3YpO1xcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTEyNzMtXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYz0xODc9Y2lmc19idWZfZ2V0KHZvaWQpXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy0yMDEtXFx0ICovXFxuZnMvc21iL2NsaWVudC9taXNjLmM6MjAyOlxcdHJldF9idWYgPSBtZW1wb29sX2FsbG9jKGNpZnNfcmVxX3Bvb2xwLCBHRlBfTk9GUyk7XFxuZnMvc21iL2NsaWVudC9taXNjLmMtMjAzLVxcbi0tXFxuZnMvc21iL2NsaWVudC9taXNjLmM9MjE2PWNpZnNfYnVmX3JlbGVhc2Uodm9pZCAqYnVmX3RvX2ZyZWUpXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy0yMjEtXFx0fVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjIyMjpcXHRtZW1wb29sX2ZyZWUoYnVmX3RvX2ZyZWUsIGNpZnNfcmVxX3Bvb2xwKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy0yMjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjA1LjY0NzM2ODU0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk1ODQzOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgU01CIENsaWVudCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgcG9wcyB1cC4gSXQncyB0aGUgYG1lbXBvb2xfcmVzaXplYCBmdW5jdGlvbiBjYWxsLiBUaGV5J3JlIHRyeWluZyB0byByZXNpemUgYGNpZnNfcmVxX3Bvb2xwYCwgYW5kIHRoYXQgcG9vbCB3YXMgaW5pdGlhbGx5IGNyZWF0ZWQgd2l0aCBgY2lmc19taW5fcmN2YCwgd2hpY2ggaXMgNjQuIFNvLCB0aGUgaW5pdGlhbCBzaXplLCBhbmQgdGhlcmVmb3JlIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cywgaXMgMTI4ICg2NCoyLCBJIGFtIGFzc3VtaW5nIHRoaXMsIGJhc2VkIG9uIGV4cGVyaWVuY2UpLlxuXG5Ob3csIGlmIGBsZW5ndGggKyBjaWZzX21pbl9yY3ZgIGlzICpncmVhdGVyKiB0aGFuIDEyOCwgYG1lbXBvb2xfcmVzaXplYCBpcyBnb2luZyB0byBmYWlsLCB3aGljaCBpcyBleGFjdGx5IHRoZSBwb2ludC5cblxuVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBpcyB0aGF0IGBsZW5ndGhgIGlzIGVxdWFsIHRvIGBhdG9taWNfZGVjX3JldHVybihcdTAwMjZ0Y3BTZXNBbGxvY0NvdW50KWAuIElmIGB0Y3BTZXNBbGxvY0NvdW50YCBzb21laG93IGVuZHMgdXAgYmVpbmcgbGFyZ2UsIHRoZW4gdGhhdCBhZGRpdGlvbiB3aWxsIGNhdXNlIGFuIG92ZXJmbG93LiAqQW5kKiwgdG8gYWRkIGluc3VsdCB0byBpbmp1cnksIHRoZSByZXR1cm4gdmFsdWUgb2YgYG1lbXBvb2xfcmVzaXplYCBpcyAqaWdub3JlZCohIFRoaXMgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSBkZW5pYWwtb2Ytc2VydmljZSBvciBldmVuIGEgbW9yZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHksIHBhcnRpY3VsYXJseSBpZiB0aGF0IGBsZW5ndGhgIGlzIGF0dGFja2VyLWNvbnRyb2xsZWQuIEEgbWVtb3J5IHBvb2wgcmVzaXplIGZhaWx1cmUgaW4gYSBjcml0aWNhbCBwYXRoIGlzIHNvbWV0aGluZyB0aGF0J3MgYWx3YXlzIGdvdCBteSBhdHRlbnRpb24uXG5cbkknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBleHBsb2l0YXRpb24gdmVjdG9ycywgYnV0IEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGVsbGluZyBtZSB0aGlzIGlzbid0IHRoZSBvbmx5IHBsYWNlIHRoaXMgbG9naWMgaXMgb2NjdXJyaW5nLiBMZXQncyBzZWUgaWYgc29tZXRoaW5nIHNpbWlsYXIgb2NjdXJzIGluIGB6ZmNwX2VycC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MTEuNDQzMjE0NjQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzI3MzA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb29sX3Jlc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM9ODY5PXN0YXRpYyBlbnVtIHpmY3BfZXJwX2FjdF9yZXN1bHQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg0OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSxcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4NS1cXHRcXHRcXHQgICBhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXN0YXRfcmVhZF9idWZfbnVtKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg3LVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg4OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3RhdHVzX3JlYWRfcmVxLFxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg5LVxcdFxcdFxcdCAgIGFjdC1cXHUwMDNlYWRhcHRlci1cXHUwMDNlc3RhdF9yZWFkX2J1Zl9udW0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjoxMS41MDY0OTc0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODI5OTgwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipBbmFseXppbmcgYHpmY3BfZXJwLmNgJ3MgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBub3RpbmcgdGhhdCBgemZjcF9lcnAuY2AgKmRvZXMqIHNlZW0gdG8gYmUgY2hlY2tpbmcgcmV0dXJuIHZhbHVlcyDigJMgdGhhdCdzIGdvb2QgcHJhY3RpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGVzcGVjaWFsbHkgY29uY2VybmluZyBlcnJvciBjb25kaXRpb25zLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhleSBhcmUgaGFuZGxlZCwgc28gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZS4gTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY2hlY2sgYW5kIHVuZGVyc3RhbmQgaG93IGBzcl9kYXRhYCBpcyBiZWluZyBjb25zdHJ1Y3RlZC4gS25vd2luZyBob3cgdGhlIGRhdGEgaXMgY3JlYXRlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIHN0YXRlcywgYW5kIHRoZXJlZm9yZSwgaG93IGVycm9ycyBtaWdodCBhcmlzZSBhbmQgYmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjoxNy4zMzY0ODEyNDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTE0MDU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb29sLnNyX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL3Njc2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM9MjA2PXN0YXRpYyBpbnQgemZjcF9hbGxvY2F0ZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMtMjM5LVxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIpIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jOjI0MDpcXHRhZGFwdGVyLVxcdTAwM2Vwb29sLnNyX2RhdGEgPVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMtMjQxLVxcdFxcdG1lbXBvb2xfY3JlYXRlX3BhZ2VfcG9vbChGU0ZfU1RBVFVTX1JFQURTX1JFQ09NLCAwKTtcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jOjI0MjpcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSlcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jLTI0My1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM9MjUzPXN0YXRpYyB2b2lkIHpmY3BfZnJlZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMtMjU5LVxcdG1lbXBvb2xfZGVzdHJveShhZGFwdGVyLVxcdTAwM2Vwb29sLnN0YXR1c19yZWFkX3JlcSk7XFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYzoyNjA6XFx0bWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSk7XFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYy0yNjEtXFx0bWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItXFx1MDAzZXBvb2wuZ2lkX3BuKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM9ODY5PXN0YXRpYyBlbnVtIHpmY3BfZXJwX2FjdF9yZXN1bHQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg0OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSxcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4NS1cXHRcXHRcXHQgICBhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXN0YXRfcmVhZF9idWZfbnVtKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM9MjU3PXN0YXRpYyB2b2lkIHpmY3BfZnNmX3N0YXR1c19yZWFkX2hhbmRsZXIoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKVxcbi0tXFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYy0yNjMtXFx0XFx0emZjcF9kYmZfaGJhX2ZzZl91c3MoXFxcImZzc3JoXzFcXFwiLCByZXEpO1xcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6MjY0OlxcdFxcdG1lbXBvb2xfZnJlZSh2aXJ0X3RvX3BhZ2Uoc3JfYnVmKSwgYWRhcHRlci1cXHUwMDNlcG9vbC5zcl9kYXRhKTtcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTI2NS1cXHRcXHR6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpO1xcbi0tXFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYy0zMjItXFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYzozMjM6XFx0bWVtcG9vbF9mcmVlKHZpcnRfdG9fcGFnZShzcl9idWYpLCBhZGFwdGVyLVxcdTAwM2Vwb29sLnNyX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtMzI0LVxcdHpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jPTkyOD1pbnQgemZjcF9mc2Zfc3RhdHVzX3JlYWQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbylcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtOTQ3LVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6OTQ4OlxcdHBhZ2UgPSBtZW1wb29sX2FsbG9jKGFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSwgR0ZQX0FUT01JQyk7XFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYy05NDktXFx0aWYgKCFwYWdlKSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk2OC1cXHRyZXEtXFx1MDAzZWRhdGEgPSBOVUxMO1xcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6OTY5OlxcdG1lbXBvb2xfZnJlZSh2aXJ0X3RvX3BhZ2Uoc3JfYnVmKSwgYWRhcHRlci1cXHUwMDNlcG9vbC5zcl9kYXRhKTtcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk3MC1mYWlsZWRfYnVmOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjoxNy43MzU2MzIyODRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3ODAxNzMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbXBvb2wgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoYW5nZSB0byB0aGUgYG1lbXBvb2xgIHNldHVwLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYG1lbXBvb2xfY3JlYXRlX3BhZ2VfcG9vbGAsIHdoaWNoLCBiYXNlZCBvbiBgRlNGX1NUQVRVU19SRUFEU19SRUNPTWAgKHdoaWNoIGlzIDY0KSwgc2V0cyB0aGUgYG1heF9ucmAgdG8gMTI4LiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlYWQgYnVmZmVycy4gVGhlIHdvcnJ5IGlzIHRoYXQgYGFjdC1cdTAwM2VhZGFwdGVyLVx1MDAzZXN0YXRfcmVhZF9idWZfbnVtYCBjb3VsZCBleGNlZWQgdGhhdCwgY2F1c2luZyBhbGxvY2F0aW9uIGZhaWx1cmVzLlxuXG5CdXQgd2FpdCwgdGhlIHBhdGNoICpyZXBsYWNlcyogdGhhdCB3aXRoIGBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYCBhbmQgYG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBpcyBoYW5kbGVkLiBBbmQgdGhleSd2ZSBhbHNvIGNoYW5nZWQgdGhlIHVuZGVybHlpbmcgYG1lbXBvb2xfY3JlYXRlYCBtYWNyby4gTm93LCBgbWF4X25yYCBpcyBkeW5hbWljYWxseSBzZXQgdG8gdHdpY2UgYG1pbl9ucmAuIFRoYXQncyBhICpmdW5jdGlvbmFsKiBjaGFuZ2Ug4oCTIGEgcmUtYXJjaGl0ZWN0aW5nIG9mIHRoZSBtZW1vcnkgcG9vbCBhbmQgcmVzaXppbmcgYmVoYXZpb3IuIFRoaXMgaXMgbm90IGp1c3QgYSB0d2VhazsgaXTigJlzIGEgZnVuZGFtZW50YWwgYWx0ZXJhdGlvbiB0byBob3cgdGhlc2UgbWVtb3J5IHBvb2xzIHdvcmsuXG5cblRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiwgcmFjZSBjb25kaXRpb25zLCBvciBhbGxvY2F0aW9uIGlzc3VlcyBpcyBzaWduaWZpY2FudGx5IGluY3JlYXNlZCB3aXRoIHRoaXMgY2hhbmdlLiBJdOKAmXMgZ290IHRvIGJlIHRob3JvdWdobHkgdGVzdGVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbnRleHQuIFdlJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgYENPTkZJR19CTEtfREVWX1pPTkVEYCBmb3IgYGJsay16b25lZC5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSByZWxldmFudCB0byB6b25lZCBibG9jayBkZXZpY2VzLiBXZSBhbHNvIG5lZWQgYENPTkZJR19CTEtfREVWX05WTUVgIGFuZCBgQ09ORklHX05WTUVfQ09SRWAgZm9yIHRoZSBOVk1lIGhvc3QgUENJIGRyaXZlciAoYG52bWUvaG9zdC9wY2kuY2ApLiBUaGUgYG1lbXBvb2xgIGl0c2VsZiBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCdzIG5vdCBhIGNvbmNlcm4uIE5vdywgSSBzaG91bGQgbW92ZSB0byBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaW4gYGJsb2NrL2Jsay16b25lZC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MjMuODEzNjUzNDEyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDE2MTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay16b25lZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTE4ODU9dm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0xOTAxLVxcbmJsb2NrL2Jsay16b25lZC5jOjE5MDI6c3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay16b25lZC5jLTE5MDMtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjAzNT1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwNjMtXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XFxuYmxvY2svYmxrLXpvbmVkLmM6MjA2NDpcXHRcXHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2ssIHBvb2xfc2l6ZSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjA2NS1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjoyMy44ODM4MjA4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg1ODUxNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBab25lIFJlc291cmNlIFZhbGlkYXRpb24gUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhhdCB3aGVuIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSB6b25lIHJlc291cmNlcyBvbiBhIGRpc2ssIGEgZnVuY3Rpb24gbmFtZWQgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AgZ2V0cyB0aGUgY2FsbC4gTm93LCB0aGF0IGZ1bmN0aW9uLCBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYCwgaXMgZXNzZW50aWFsIGJlY2F1c2UgaXQncyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgb3VyIGRpc2sncyB6b25lIHJlc291cmNlcyBhcmUsIHdlbGwsICp2YWxpZGF0ZWQqLiBXaGVyZSBkb2VzIHRoaXMgdmFsaWRhdGlvbiBwcm9jZXNzIGJlZ2luPyBJdCBpbml0aWF0ZXMgYSBjYWxsIHRvIGFub3RoZXIgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AuIFRoZXJlZm9yZSwgdG8gYWxsb2NhdGUgdGhlIHJlc291cmNlcywgd2UgbWFrZSB0aGUgY2FsbCB0byBhbGxvY2F0ZSB0aGUgcmVzb3VyY2VzLiBJdCBhbGwgc3RhcnRzIHdpdGggYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCB3aGljaCBhcHBlYXJzIHRvIGJlIGEgYnJvYWRlciBtZWNoYW5pc20sIGFuZCAqdGhhdCogaXMgd2hhdCB0aGVuIHRyaWdnZXJzIGBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXNgLiBTbywgaXQncyBhIGNhc2NhZGluZyBwcm9jZXNzLCBzdGFydGluZyBhdCB0aGUgYmxvY2sgbGF5ZXIgYW5kIHdvcmtpbmcgaXRzIHdheSBkb3duIHRvIHJlc291cmNlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MjcuNzY5Njc2NTc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczODEwMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTUwMz1zdGF0aWMgYm9vbCBkaXNrX2luc2VydF96b25lX3dwbHVnKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtNTI4LVxcdCAqIGF0dGFjaGVkIHRvIHRoZSBkaXNrLCB0aGVuIHRoaXMgaXMgYSB6b25lIHdyaXRlIHBsdWcgaW5zZXJ0IGZyb20gdGhlXFxuYmxvY2svYmxrLXpvbmVkLmM6NTI5OlxcdCAqIGZpcnN0IGNhbGwgdG8gYmxrX3JldmFsaWRhdGVfZGlza196b25lcygpLCBpbiB3aGljaCBjYXNlIHRoZSB6b25lIGlzXFxuYmxvY2svYmxrLXpvbmVkLmMtNTMwLVxcdCAqIG5lY2Vzc2FyaWxseSBpbiB0aGUgYWN0aXZlIGNvbmRpdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIyNTA9c3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NiKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIzMTktLyoqXFxuYmxvY2svYmxrLXpvbmVkLmM6MjMyMDogKiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzIC0gKHJlKWFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHpvbmUgd3JpdGUgcGx1Z3NcXG5ibG9jay9ibGstem9uZWQuYy0yMzIxLSAqIEBkaXNrOlxcdFRhcmdldCBkaXNrXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yMzMxLSAqL1xcbmJsb2NrL2Jsay16b25lZC5jOjIzMzI6aW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuYmxvY2svYmxrLXpvbmVkLmMtMjMzMy17XFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yNDA4LX1cXG5ibG9jay9ibGstem9uZWQuYzoyNDA5OkVYUE9SVF9TWU1CT0xfR1BMKGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMpO1xcbmJsb2NrL2Jsay16b25lZC5jLTI0MTAtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9MTc1PWludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4My1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTg0OlxcdHJldHVybiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKGRpc2spO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODUtfVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUwMz1zdGF0aWMgaW50IHVibGtfZ2V0X25yX3pvbmVzKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTEwLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MTE6c3RhdGljIGludCB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MTIte1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MTM6XFx0cmV0dXJuIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModWItXFx1MDAzZXViX2Rpc2spO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MTQtfVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTcxNz1zdGF0aWMgdm9pZCB1YmxrX2Rldl9wYXJhbV96b25lZF9hcHBseShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTcyMC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzIxOnN0YXRpYyBpbnQgdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00NDEzPXN0YXRpYyBpbnQgdWJsa19jdHJsX3N0YXJ0X2RldihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1NDItXFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSkge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0NTQzOlxcdFxcdHJldCA9IHVibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHViKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDU0NC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTQzNj1zdGF0aWMgaW50IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTM1LVxcdCAgICAobGltLmZlYXR1cmVzIFxcdTAwMjYgQkxLX0ZFQVRfWk9ORUQpKSB7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTUzNjpcXHRcXHRlcnIgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHZibGstXFx1MDAzZWRpc2spO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1MzctXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTczPXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzEwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMzExOlxcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoemxvLVxcdTAwM2VkaXNrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMxMi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tZC9kbS16b25lLmM9MTUwPWJvb2wgZG1faXNfem9uZV93cml0ZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE2OC0gKiBmb3Igem9uZSBhcHBlbmQgZW11bGF0aW9uLiBOb3RlIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgdGhlIGJsb2NrIGxheWVyXFxuZHJpdmVycy9tZC9kbS16b25lLmM6MTY5OiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSBmdW5jdGlvbiBoZXJlIGFzIHRoZSBtYXBwZWQgZGV2aWNlIGlzIHN1c3BlbmRlZFxcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE3MC0gKiAodGhpcyBpcyBjYWxsZWQgZnJvbSBfX2JpbmQoKSBjb250ZXh0KS5cXG4tLVxcbmRyaXZlcnMvbWQvZG0tem9uZS5jPTE3Mj1pbnQgZG1fcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9tZC9kbS16b25lLmMtMTk4LVxcdG1kLVxcdTAwM2VyZXZhbGlkYXRlX21hcF90YXNrID0gY3VycmVudDtcXG5kcml2ZXJzL21kL2RtLXpvbmUuYzoxOTk6XFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcXG5kcml2ZXJzL21kL2RtLXpvbmUuYy0yMDAtXFx0bWQtXFx1MDAzZXJldmFsaWRhdGVfbWFwX3Rhc2sgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzNjk9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDczLVxcdGlmIChibGtfcXVldWVfaXNfem9uZWQobnMtXFx1MDAzZXF1ZXVlKSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDc0OlxcdFxcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMobnMtXFx1MDAzZWRpc2spO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDc1LVxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIW52bWVfZmlyc3Rfc2Nhbihucy1cXHUwMDNlZGlzaykpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTE5PXN0YXRpYyB2b2lkIHNkX3piY19wcmludF96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTUzNi0vKlxcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1Mzc6ICogQ2FsbCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCkgaWYgYW55IG9mIHRoZSB6b25lZCBkaXNrIHByb3BlcnRpZXMgaGF2ZVxcbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01MzgtICogY2hhbmdlZCB0aGF0IG1ha2UgaXQgbmVjZXNzYXJ5IHRvIGNhbGwgdGhhdCBmdW5jdGlvbi4gQ2FsbGVkIGJ5XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTQxPWludCBzZF96YmNfcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTU2NS1cXHRmbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1NjY6XFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcXG5kcml2ZXJzL3Njc2kvc2RfemJjLmMtNTY3LVxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShmbGFncyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTQ1Mz1pbnQgYmxrZGV2X3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBlbnVtIHJlcV9vcCBvcCxcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTQ1NC1cXHRcXHRzZWN0b3JfdCBzZWN0b3JzLCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjQ1NTppbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC00NTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjI5Ljk0MzQ5MjczOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjE5MTczMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIERpc2sgUmVzb3VyY2VzIHZpYSBab25lZCBEZXZpY2VzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AgaXMgYSBrZXkgZnVuY3Rpb24sIHRyaWdnZXJlZCBieSBhIHdpZGUgcmFuZ2Ugb2YgYmxvY2sgZGV2aWNlIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQncyBjYWxsZWQgYnkgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBgbnVsbF9ibGtgICh6b25lZCBkZXZpY2UgdGVzdGluZyEpLCBgdWJsa2AsIGB2aXJ0aW9fYmxrYCwgYHpsb29wYCwgYGRtYCwgYG52bWVgLCBhbmQgdGhlIFNDU0kgem9uZWQgZGV2aWNlIGNvZGUgKGBzZF96YmNgKS4gVGhhdCBtZWFucyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgcHJldHR5IGVhc2lseSByZWFjaGVkIHRocm91Z2ggc2V2ZXJhbCBkcml2ZXJzLiBUaGlzIGdpdmVzIG1lIGFuIGlkZWEuLi4gYG51bGxfYmxrYCBpcyBhbiBleGNlbGxlbnQgY2hvaWNlIGZvciB0ZXN0aW5nIHpvbmVkIGJsb2NrIGRldmljZSBmdW5jdGlvbmFsaXR5LiBJdCdzIGEgY2xlYW4gc2xhdGUgdG8gd29yayB3aXRoLiBJIHNob3VsZCBkZWZpbml0ZWx5IGVuYWJsZSBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBhbG9uZyB3aXRoIHRoZSBvYnZpb3VzIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgb2YgY291cnNlLlxuXG5Ob3csIHdoYXQncyB0aGlzIGFib3V0IGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGA/IEkgbmVlZCB0byBsb29rIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MzQuNTYyNjY5Mjc2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjgzNzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9wY2kuYz0zMzQwPXN0YXRpYyBpbnQgbnZtZV9kaXNhYmxlX3ByZXBhcmVfcmVzZXQoc3RydWN0IG52bWVfZGV2ICpkZXYsIGJvb2wgc2h1dGRvd24pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0zMzQ3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjMzNDg6c3RhdGljIGludCBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0zMzQ5LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTM3NDE9c3RhdGljIGludCBudm1lX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0zNzU3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjM3NTg6XFx0cmVzdWx0ID0gbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2woZGV2KTtcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0zNzU5LVxcdGlmIChyZXN1bHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjM0LjYyNTUxMzQwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzkzMDE1Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBOVk1lIFBDSSBEcml2ZXIgYW5kIE1lbW9yeSBQb29sIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGBudm1lX3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhbiBOVk1lIFBDSSBkZXZpY2UgZGV0ZWN0ZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUgYENPTkZJR19CTEtfREVWX05WTUVgIGNvbmZpZyBvcHRpb24gaXMgd2hhdCBjb250cm9scyB0aGF0IGRyaXZlciwgc28gdGhhdCBtYWtlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlc2UgbWVtb3J5IHBvb2wgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbGllLiBJIHNlZSB0aGF0IGBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYCBhbmQgYG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYCBhcmUgbWFjcm9zIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtcG9vbC5oYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlc2UsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gSXQgYWxzbyBtb2RpZmllcyBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgLCBgbWVtcG9vbF9pbml0X25vZGVgLCBhbmQgYG1lbXBvb2xfcmVzaXplYC5cblxuR2l2ZW4gdGhlc2UgY2hhbmdlcywgSSdtIHRoaW5raW5nIGFib3V0IHdoaWNoIGZ1bmN0aW9ucyB3b3VsZCBiZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uOlxuXG4qICAgYG1lbXBvb2xfcmVzaXplYFxuKiAgIGBtZW1wb29sX2luaXRfbm9kZWBcbiogICBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgXG4qICAgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgXG4qICAgYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYFxuXG5BaCwgd2FpdCBhIHNlY29uZC4uLiBgbWVtcG9vbF9yZXNpemVgIGlzICphbHNvKiBjYWxsZWQgZnJvbSBgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXNgIGluIGBibG9jay9ibGstem9uZWQuY2AuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIE5WTWUgZHJpdmVyJ3MgbWVtb3J5IHBvb2wgYW5kIHRoZSB6b25lZCBibG9jayBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGV4cGxvcmUgdGhhdCBjb25uZWN0aW9uIHRob3JvdWdobHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHNldCB1cCB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCB0ZXN0IGNhc2VzLCBwYXJ0aWN1bGFybHkgdGhlIGludGVycGxheSBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDU1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjQwLjAxODUzMTkzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2ODAwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLXpvbmVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXpvbmVkLmM9MjAzNT1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwNzUtICovXFxuYmxvY2svYmxrLXpvbmVkLmM6MjA3NjpzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay16b25lZC5jLTIwNzctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIzMzI9aW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yMzkyLVxcbmJsb2NrL2Jsay16b25lZC5jOjIzOTM6XFx0cmV0ID0gZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXFx1MDAyNmFyZ3MpO1xcbmJsb2NrL2Jsay16b25lZC5jLTIzOTQtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6NDAuMDgyMjE3ODA5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTc0NDkwNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1lbXBvb2xfcmVzaXplYCBQYXRjaCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2ggdGhhdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYG1lbXBvb2xfcmVzaXplYC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgc2hpZnRpbmcgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYG1lbXBvb2xfcmVzaXplYCB0byBzaW1wbHkgYWRqdXN0aW5nIGBtaW5fbnJgIGFuZCByZWx5aW5nIG9uIGBtYXhfbnJgIGZvciBhbGxvY2F0aW9uLlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoYXQgYG1lbXBvb2xfcmVzaXplYCBpcyBkaXJlY3RseSBjYWxsZWQgZnJvbSBgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXNgLCB3aGljaCBpcyB1c2VkIGluIHJldmFsaWRhdGluZyB6b25lZCBibG9jayBkZXZpY2VzLCBhbmQgdGh1cyBgbWVtcG9vbF9yZXNpemVgIGlzIGludm9rZWQgd2l0aGluIHRoYXQgcHJvY2Vzcy5cblxuTm93LCBsZXQncyBleHBsb3JlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBJIHNlZSBpbiBgZnMvc21iL2NsaWVudC9jb25uZWN0LmNgIHRoYXQgYG1lbXBvb2xfcmVzaXplYCBpcyBjYWxsZWQgZnJvbSBgY2xlYW5fZGVtdWx0aXBsZXhfaW5mb2AgYW5kIGBjaWZzX2RlbXVsdGlwbGV4X3RocmVhZGAsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4gQWxzbywgdW5kZXIgYGRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmNgIHRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSBpZiB3ZSBoYXZlIGBDT05GSUdfWkZDUGAgZW5hYmxlZC4gVGhpcyBnaXZlcyBhIGJyb2FkIHNlbnNlIG9mIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC5cblxuVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGF0IHRoaXMgbmV3IGFwcHJvYWNoIHRvIGBtZW1wb29sX3Jlc2l6ZWAgd2lsbCBub3cgcG90ZW50aWFsbHkgcmV0dXJuIGAtRU5PU1BDYCBpZiB0aGUgcmVxdWVzdGVkIGBuZXdfbWluX25yYCBleGNlZWRzIGBwb29sLVx1MDAzZW1heF9ucmAuIEkgZHVnIGludG8gdGhlIGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AgY29kZSBhbmQgaXQgbG9va3MgbGlrZSBhIHJlc2l6ZSBmYWlsdXJlIGNvdWxkIGhhcHBlbiBiZWNhdXNlIHRoZSBgbGVuZ3RoICsgY2lmc19taW5fcmN2YCBtaWdodCBleGNlZWQgYG1heF9ucmAuIEkgbm90aWNlZCB0aGF0IHRoZSBgY2lmc19yZXFfcG9vbHBgIGlzIGNyZWF0ZWQgd2l0aCBhIGBjaWZzX21pbl9yY3ZgIHZhbHVlIG9mIDY0LCBhbmQgdGhlIGBtYXhfbnJgIGlzIGluaXRpYWxpemVkIHRvIDEyOC4gSWYgYGxlbmd0aGAgaXMgdGhlbiBncmVhdGVyIHRoYW4gNjQsIHRoaXMgbmV3IGNoZWNrIG1pZ2h0IGZhaWwuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdmFsdWUgb2YgYG1lbXBvb2xfcmVzaXplYCBpcyBpZ25vcmVkIGluIHRoYXQgY29kZS4gSXQgc2VlbXMgbGlrZSB0aGUgcmVzaXplIHdpbGwgZmFpbCwgYW5kIHRoZSBwb29sIHdpbGwgc3RpbGwgaGF2ZSBpdHMgYG1pbl9ucmAgZWxlbWVudHMsIHBvc3NpYmx5IGNhdXNpbmcgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sIGJ1dCBub3QgYSBjcmFzaC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBtZW1wb29sX2Rlc3Ryb3lgLiBUaGUgcGF0Y2ggY2hhbmdlcyBgbWVtcG9vbF9leGl0YCB0byB1c2UgYGt2ZnJlZShwb29sLVx1MDAzZWVsZW1lbnRzKWAgaW5zdGVhZCBvZiBga2ZyZWUocG9vbC1cdTAwM2VlbGVtZW50cylgLiBUaGlzIGlzIGJlY2F1c2UgYG1lbXBvb2xfaW5pdF9ub2RlYCBpcyBub3cgdXNpbmcgYGt2bWFsbG9jX2FycmF5X25vZGVfbm9wcm9mYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX2FycmF5X25vZGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciBpbiB1c2UuXG5cbkkgYWxzbyBjaGVja2VkIGBtZW1wb29sX2luaXRfbm9kZWAgaW4gYG1tL21lbXBvb2wuY2AuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYG1heF9ucmAgYXMgYSBwYXJhbWV0ZXIuIFRoZSBwYXRjaCBoYXMgY2hhbmdlZCBgbWVtcG9vbF9pbml0X25vcHJvZmAgdG8gcGFzcyBgbWluX25yICogMmAgYXMgYG1heF9ucmAuIEkgY2FuIHNlZSB0aGlzIGluIHRoZSBjb2RlIGhlcmUuXG5cbkFsc28sIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAgdGFrZXMgYG1heF9ucmAgYXMgYSBwYXJhbWV0ZXIuIFRoZSBzaWduYXR1cmUgZm9yIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAgaGFzIGNoYW5nZWQuXG5cbkZpbmFsbHksIHRoZSBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgbWFjcm8gaGFzIGFsc28gYmVlbiB1cGRhdGVkLiBUaGlzIG1ha2VzIG1lIHdvbmRlciBpZiBhbGwgY2FsbGVycyBvZiBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgaGF2ZSBiZWVuIHByb3Blcmx5IHVwZGF0ZWQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGNhbGxlcnMgb2YgYG1lbXBvb2xfY3JlYXRlX25vZGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM4MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6NTIuMjU2NzExNzY1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3NzEyNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXBvb2xfY3JlYXRlX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTMzNDg9c3RhdGljIGludCBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTMzNTEtXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MzM1MjpcXHRkZXYtXFx1MDAzZWRtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLCAyLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTMzNTMtXFx0XFx0XFx0bWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9NTE9c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlKGludCBtaW5fbnIsIG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNTItXFx0XFx0bWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7XFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6NTM6c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNTQtXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNTUtXFx0XFx0dm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6NTY6I2RlZmluZSBtZW1wb29sX2NyZWF0ZV9ub2RlKC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6NTc6XFx0YWxsb2NfaG9va3MobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU4LVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU5LSNkZWZpbmUgbWVtcG9vbF9jcmVhdGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX2RhdGEpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oOjYwOlxcdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgKF9taW5fbnIpKjIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTYxLVxcdFxcdFxcdCAgICBfZGF0YSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9OTc9dm9pZCBtZW1wb29sX2tmcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC0xMDktI2RlZmluZSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKF9taW5fbnIsIF9tYXhfbnIsIF9zaXplKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDoxMTA6XFx0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTExMS1cXHRcXHQgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXFxuLS1cXG5tbS9tZW1wb29sLmM9MjkzPUVYUE9SVF9TWU1CT0wobWVtcG9vbF9pbml0X25vcHJvZik7XFxuLS1cXG5tbS9tZW1wb29sLmMtMjk1LS8qKlxcbm1tL21lbXBvb2wuYzoyOTY6ICogbWVtcG9vbF9jcmVhdGVfbm9kZSAtIGNyZWF0ZSBhIG1lbW9yeSBwb29sXFxubW0vbWVtcG9vbC5jLTI5Ny0gKiBAbWluX25yOiAgICB0aGUgbWluaW11bSBudW1iZXIgb2YgZWxlbWVudHMgZ3VhcmFudGVlZCB0byBiZVxcbi0tXFxubW0vbWVtcG9vbC5jLTMxMy0gKi9cXG5tbS9tZW1wb29sLmM6MzE0OnN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLCBpbnQgbWF4X25yLFxcbm1tL21lbXBvb2wuYy0zMTUtXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuLS1cXG5tbS9tZW1wb29sLmMtMzMxLX1cXG5tbS9tZW1wb29sLmM6MzMyOkVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xcbm1tL21lbXBvb2wuYy0zMzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjU0LjMwNDQzMTUxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjk3NzM4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgaXMgdXNlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCBzZWVtcyBsaWtlIHRoZSBvbmx5IGRpcmVjdCBjYWxsIGlzIGluIGBkcml2ZXJzL252bWUvaG9zdC9wY2kuY2AsIGFsb25nc2lkZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBgbWVtcG9vbF9jcmVhdGVgIGFuZCBgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbGAgbWFjcm9zLiBUaGlzIGZlZWxzIGEgYml0IGxpbWl0ZWQsIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LCBzbyBJJ2xsIGRvdWJsZS1jaGVjayBieSBzZWFyY2hpbmcgZm9yIG90aGVyIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIExldCdzIHNlZSBpZiB0aGUgZ3JlcHBlciBoYXMgb3RoZXIgZW50cmllcy5cblxuVGhlIG91dHB1dCBsb29rcyBjbGVhbi4gSnVzdCBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgIGFuZCB3aGVyZSB0aGUgaGVhZGVyIGZpbGUgZGVjbGFyZXMgaXQgaW4gYGluY2x1ZGUvbGludXgvbWVtcG9vbC5oYC5cblxuSG1tLCB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIG1lbXBvb2wgaW5pdGlhbGl6YXRpb24uIFdoYXQgYWJvdXQgYG1lbXBvb2xfaW5pdF9ub2RlYD8gVGhhdCBtaWdodCBiZSBhIHJlbGF0ZWQgYXJlYSBJIG5lZWQgdG8gY29uc2lkZXIgYXMgcGFydCBvZiB0aGlzIHByb2Nlc3MuIEknbGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNzMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6NTguNDM0MjA5MzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTA2MTc2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9vbF9pbml0X25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtcG9vbC5oPTQxPXZvaWQgbWVtcG9vbF9leGl0KHN0cnVjdCBtZW1wb29sICpwb29sKTtcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo0MjppbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNDMtXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaD05Nz12b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTEwNi0jZGVmaW5lIG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6MTA3OlxcdG1lbXBvb2xfaW5pdF9ub2RlKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTEwOC1cXHRcXHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxcbi0tXFxubW0vbWVtcG9vbC5jPTIzMT1FWFBPUlRfU1lNQk9MKG1lbXBvb2xfZGVzdHJveSk7XFxubW0vbWVtcG9vbC5jLTIzMi1cXG5tbS9tZW1wb29sLmM6MjMzOmludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9uciwgaW50IG1heF9ucixcXG5tbS9tZW1wb29sLmMtMjM0LVxcdFxcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxcbi0tXFxubW0vbWVtcG9vbC5jLTI2OC19XFxubW0vbWVtcG9vbC5jOjI2OTpFWFBPUlRfU1lNQk9MKG1lbXBvb2xfaW5pdF9ub2RlKTtcXG5tbS9tZW1wb29sLmMtMjcwLVxcbi0tXFxubW0vbWVtcG9vbC5jPTI4NT1pbnQgbWVtcG9vbF9pbml0X25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcXG4tLVxcbm1tL21lbXBvb2wuYy0yODgte1xcbm1tL21lbXBvb2wuYzoyODk6XFx0cmV0dXJuIG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgbWluX25yICogMiwgYWxsb2NfZm4sIGZyZWVfZm4sXFxubW0vbWVtcG9vbC5jLTI5MC1cXHRcXHRcXHRcXHQgcG9vbF9kYXRhLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpO1xcbi0tXFxubW0vbWVtcG9vbC5jPTMxND1zdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcXG4tLVxcbm1tL21lbXBvb2wuYy0zMjMtXFxubW0vbWVtcG9vbC5jOjMyNDpcXHRpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtYXhfbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXFxubW0vbWVtcG9vbC5jLTMyNS1cXHRcXHRcXHQgICAgICBnZnBfbWFzaywgbm9kZV9pZCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MDAuNDQ0ODM3Mzg3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzczMjg2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ2FsbGVycyBhbmQgTmVjZXNzYXJ5IENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgbWVtcG9vbF9pbml0X25vZGVgIGlzIG9ubHkgaW52b2tlZCBieSBgbWVtcG9vbF9pbml0X25vcHJvZmAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGFuZCB0aGF0IG1hY3JvLi4uIGBtZW1wb29sX2luaXRfa21hbGxvY19yZXNpemFibGVfcG9vbGAuIFRoYXQgY29uZmlybXMgdGhlIHBhdGNoIEkndmUgYmVlbiByZXZpZXdpbmcgaGFzIGNvcnJlY3RseSB1cGRhdGVkICphbGwqIHRoZSBjYWxsIHNpdGVzLiBFeGNlbGxlbnQsIGdvb2QgdG8ga25vdy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGUgY29uZmlncyB0aGF0IHRoaXMgdGhpbmcgbmVlZHM6IGBDT05GSUdfQkxLX0RFVl9aT05FRGAsIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AsIGBDT05GSUdfQkxLX0RFVl9OVk1FYCwgYENPTkZJR19OVk1FX0NPUkVgLCBhbmQgYWxzbyBgQ09ORklHX0NJRlNgLiBJIGFsc28gc2VlIHRoYXQgYENPTkZJR19aRkNQYCBpcyBuZWVkZWQsIGZvciB0aGlzIGBkcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jYCBjb2RlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIHdhc24ndCBgQ09ORklHX0NJRlNgIHJlbmFtZWQsIG9yIHNvbWV0aGluZz8gSXMgaXQgbm93IGBDT05GSUdfU01CX0ZTYCAqb3IqIGBDT05GSUdfQ0lGU2A/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBqdXN0IGdsYW5jZSBhdCB0aGUgYGZzL3NtYi9jbGllbnQvTWFrZWZpbGVgIHJlYWwgcXVpY2sgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gR290dGEgYmUgcHJlY2lzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MDYuMjIyMTY5NDYyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTUyMTMzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLS4qY2lmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zbWIvY2xpZW50L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvTWFrZWZpbGU9NT1jY2ZsYWdzLXkgKz0gLUkkKHNyYylcXHRcXHQjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DSUZTKSArPSBjaWZzLm9cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUzOjA2LjYzNzM4ODU5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE2MzQ5MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDSUZTIENvbmZpZ3VyYXRpb24gYW5kIE1ha2VmaWxlIEV4YW1pbmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgaHVuY2ggcmVnYXJkaW5nIGBDT05GSUdfQ0lGU2AgaXMgc3BvdCBvbi4gVGhhdCdzIGNvbmZpcm1lZCwgYW5kIGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIGRyaWxsIGRvd24gYSBiaXQgZnVydGhlci4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZWAuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgY29udGVudHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCByZWxhdGVkIGRlcGVuZGVuY2llcyBhbmQgY29tcGlsYXRpb24gZmxhZ3MgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIG5lZWRlZCBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIGhvdyBDSUZTLXJlbGF0ZWQgbW9kdWxlcyBhcmUgaGFuZGxlZCBpbiB0aGlzIHNwZWNpZmljIFMzOTAgYXJjaGl0ZWN0dXJlIGNvbnRleHQsIGxvb2tpbmcgZm9yIGFueSBzcGVjaWZpYyBidWlsZCBjb25zaWRlcmF0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MzowOS41NTM3NDEyOTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Mjk2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKnpmY3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL3Njc2kvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL3Njc2kvTWFrZWZpbGU9Nj16ZmNwLW9ianMgOj0gemZjcF9hdXgubyB6ZmNwX2Njdy5vIHpmY3BfZGJmLm8gemZjcF9lcnAubyBcXFxcXFxuLS1cXG5kcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZS05LVxcbmRyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aRkNQKSArPSB6ZmNwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MDkuNjEzMDUyNDAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMTYzOTc5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgY2hlY2sgY29uZmlybWVkIHRoYXQgYENPTkZJR19aRkNQYCBpcyBzZXQgYXMgZXhwZWN0ZWQsIHRoYXQncyBnb29kLiBOb3csIG1vdmluZyBvbiwgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBpcyBiZWhhdmluZyBhcyBhbnRpY2lwYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MzoxMS45Mjk0NTQ0NDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTY0NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKm51bGxfYmxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfQkxLX0RFVl9STkJEKVxcdCs9IHJuYmQvXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zNi1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxcdCs9IG51bGxfYmxrL1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSArPSBybnVsbC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MTIuMDAwNjI0OTE5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg0NDkzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIHByb21wdCBtZW50aW9ucyBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgLiBZZXAsIHRoYXQncyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0J3MgdGhlIFwibnVsbCBibG9jayBkZXZpY2UsXCIgZXNzZW50aWFsbHkgYSB1c2VmdWwgZGVidWdnaW5nIHRvb2wgb3IgYSBwbGFjZWhvbGRlci4gTm93LCBsZXQncyBtb3ZlIG9uIHRvIHRoZSBtb3JlIGludGVyZXN0aW5nIGFzcGVjdCwgbGV0J3Mgc2VlLCB3aGF0IHdhcyB0aGF0IG9wdGlvbiBhZ2Fpbi4uLiBhaCB5ZXMsIGBDT05GSUdfQkxLX0RFVl9aT05FRGAuIEkgc2hvdWxkIHByb2JhYmx5IGJydXNoIHVwIG9uIHRoYXQsIHpvbmFsIHN0b3JhZ2UgaXMgYmVjb21pbmcgbW9yZSBhbmQgbW9yZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzODIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MzoxNS4yMDkwODIyNjNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTMyNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz03Nz1jb25maWcgQkxLX0RFVl9XUklURV9NT1VOVEVEXFxuLS1cXG5ibG9jay9LY29uZmlnLTk2LVxcbmJsb2NrL0tjb25maWc6OTc6Y29uZmlnIEJMS19ERVZfWk9ORURcXG5ibG9jay9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIlpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MzoxNS4yNzEwMjIyODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMjYzOTk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgWm9uZWQgQmxvY2sgRGV2aWNlIFN1cHBvcnQqKlxuXG5SaWdodCwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgQ09ORklHX0JMS19ERVZfWk9ORURgIGVuYWJsZWQuIFRoYXQncyBnb29kLCB0aGF0J3Mgd2hhdCB3ZSB3YW50IGZvciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyB0aGluZ3MgcmVsYXRlZCB0byBOVk1lLCBhcyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgd2Ugc2VlIHpvbmVkIGRldmljZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgTlZNZSBjb3JlIGFuZCBibG9jayBkZXZpY2Ugc3VwcG9ydCBhcmUgYWxzbyBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkuIFRoZXJlZm9yZSwgSSBzaG91bGQgY2hlY2sgdGhhdCBgQ09ORklHX05WTUVfQ09SRWAgYW5kIGBDT05GSUdfQkxLX0RFVl9OVk1FYCBhcmUgYWxzbyBzZXQuIE1ha2luZyBzdXJlIHRob3NlIGFyZSBjb3JyZWN0bHkgZW5hYmxlZCB3aWxsIGVuc3VyZSB0aGUgY29ycmVjdCBsb3cgbGV2ZWwgc3VwcG9ydCBpcyBhdmFpbGFibGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIG90aGVyIHJlbGF0ZWQgY29uZmlncyBpZiBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MTguODczNjY1Mzg1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgyODQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6Mjpjb25maWcgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUzOjE4LjkzODQ5OTgwNFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTk5OTcxOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MjM5NzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUzOjIwLjUzODQ3NDEwMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NzYyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlZNRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9Mj1jb25maWcgTlZNRV9DT1JFXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTQtXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo1OmNvbmZpZyBCTEtfREVWX05WTUVcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIGJsb2NrIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MjAuNTk3MzU5MTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyMzYwMDY2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGBDT05GSUdfQkxLX0RFVl9OVk1FYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUuIExldCdzIHNlZS4uLiB0aGUgY29uZmlncyB3ZSdyZSBjb25zaWRlcmluZyBhcmU6IGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGBDSUZTYCwgYW5kIGBaRkNQYC4gV2FpdCwgYFpGQ1BgIGlzIHMzOTAgc3BlY2lmaWMsIHNvIGl0J3Mgbm90IGlkZWFsIGZvciBnZW5lcmFsIGZ1enppbmcgb24geDg2LCBldmVuIGlmIGl0J3MgaGFybWxlc3MuIEknbGwganVzdCByZWx5IG9uIHRoZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYEJMS19ERVZfWk9ORURgIGFuZCBgQkxLX0RFVl9OVUxMX0JMS2AuIEknbGwgYWxzbyBpbmNsdWRlIGBCTEtfREVWX05WTUVgLCBgTlZNRV9DT1JFYCwgYW5kIGBDSUZTYC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBXZSd2ZSBnb3Q6IGBtZW1wb29sX3Jlc2l6ZWAsIGBtZW1wb29sX2luaXRfbm9kZWAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYW5kIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGAuXG5cblJpZ2h0LCBgbWVtcG9vbF9pbml0X25vZGVgIGlzIGNhbGxlZCBieSBgbWVtcG9vbF9pbml0X25vcHJvZmAgYW5kIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGFuZCB0aGUgbGF0dGVyIGlzIGNhbGxlZCBmcm9tIHRoZSBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgbWFjcm8uIGBtZW1wb29sX3Jlc2l6ZWAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gdGhhdCdzIGNoYW5nZWQuIFRoZSBuZXcgYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIGlzIHVzZWQgYnkgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBhbmQgdGhlIG5ldyBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgc2lnbmF0dXJlIGlzIHVzZWQgaW4gYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYC5cblxuTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgaGVyZS4uLiBhaCwgeWVzLCBgbWVtcG9vbF9leGl0YCB3YXMgY2hhbmdlZCB0byB1c2UgYGt2ZnJlZWAuIEFuZCBgbWVtcG9vbF9kZXN0cm95YCBjYWxscyBgbWVtcG9vbF9leGl0YC4gU28sIGJvdGggYG1lbXBvb2xfZXhpdGAgYW5kIGBtZW1wb29sX2Rlc3Ryb3lgIGFyZSBpbXBvcnRhbnQuXG5cbk9rYXksIGxldCdzIHJlZmluZSBvdXIgYEZvY3VzU3ltYm9sc2A6IGBtZW1wb29sX3Jlc2l6ZWAsIGBtZW1wb29sX2luaXRfbm9kZWAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGBtZW1wb29sX2V4aXRgLCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGFuZCBgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xgLlxuXG5XaGF0IGVsc2UgaGF2ZSB3ZSBnb3Q/IEhtbSwgdGhlIHBhdGNoIGhhcyBjaGFuZ2VkIHRoZSBiZWhhdmlvciBvZiBgbWVtcG9vbF9yZXNpemVgIHNpZ25pZmljYW50bHkuIEl0IG5vIGxvbmdlciBhbGxvY2F0ZXMgbWVtb3J5LCBidXQganVzdCBhZGp1c3RzIGBtaW5fbnJgLiBUaGF0J3MgYSBtYWpvciBzaGlmdCBpbiBzZW1hbnRpY3MuIEl0IGFsc28gY2hhbmdlcyBgbWVtcG9vbF9pbml0X25vZGVgIHRvIHVzZSBga3ZtYWxsb2NfYXJyYXlfbm9kZV9ub3Byb2ZgIGluc3RlYWQgb2YgYGttYWxsb2NfYXJyYXlfbm9kZWAsIGVuYWJsaW5nIGxhcmdlciBwb29scy4gQWxzbywgYG1heF9ucmAgaXMgYWRkZWQgdG8gdGhlIG1lbXBvb2wgc3RydWN0LlxuXG5ZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCdzIHRvdWNoaW5nIHRoZSBjb3JlIGBtZW1wb29sYCBBUEkgaW4gc29tZSBmdW5kYW1lbnRhbCB3YXlzLlxuXG5Pa2F5LCBsZXQncyBmaW5hbGl6ZSB0aGUgcmVzcG9uc2UuXG5Xb3J0aEZ1enppbmc6IHRydWVcblJlYXNvbmluZzogVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGNvcmUgYG1lbXBvb2xgIEFQSSwgYnkgaW50cm9kdWNpbmcgYSBgbWF4X25yYCBwYXJhbWV0ZXIgdG8gbGltaXQgcG9vbCBjYXBhY2l0eSBhbmQgY2hhbmdpbmcgYG1lbXBvb2xfcmVzaXplYCB0byBubyBsb25nZXIgYWxsb2NhdGUgbWVtb3J5IGltbWVkaWF0ZWx5IGJ1dCBpbnN0ZWFkIHJlbGllcyBvbiBgbWVtcG9vbF9mcmVlYCB0byByZWZpbGwgdGhlIHBvb2wuIEl0IGFsc28gY2hhbmdlcyB0aGUgaW50ZXJuYWwgYXJyYXkgYWxsb2NhdGlvbiB0byB1c2UgYGt2bWFsbG9jYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gbWVjaGFuaXNtIHVzZWQgYnkgdmFyaW91cyBzdWJzeXN0ZW1zIChlLmcuLCBibG9jayBsYXllciwgTlZNZSwgQ0lGUykuXG5Gb2N1c1N5bWJvbHM6IGBtZW1wb29sX3Jlc2l6ZWAsIGBtZW1wb29sX2luaXRfbm9kZWAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGBtZW1wb29sX2V4aXRgLCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGBcbkVuYWJsZUNvbmZpZ3M6IGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGBDSUZTYFxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA5OCwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MzIuODMzMzY5MzY1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MzEwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9DT1JFXCIsXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtcG9vbF9yZXNpemVcIixcbiAgICBcIm1lbXBvb2xfaW5pdF9ub2RlXCIsXG4gICAgXCJtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZlwiLFxuICAgIFwibWVtcG9vbF9leGl0XCIsXG4gICAgXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGBtZW1wb29sYCBBUEksIGludHJvZHVjaW5nIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGxpbWl0IHBvb2wgY2FwYWNpdHkgYW5kIGNoYW5naW5nIGBtZW1wb29sX3Jlc2l6ZWAgdG8gbm8gbG9uZ2VyIGFsbG9jYXRlIG1lbW9yeSBpbW1lZGlhdGVseSBidXQgaW5zdGVhZCByZWx5IG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEXCIsXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIk5WTUVfQ09SRVwiLFxuICAgIFwiQ0lGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbXBvb2xfcmVzaXplXCIsXG4gICAgXCJtZW1wb29sX2luaXRfbm9kZVwiLFxuICAgIFwibWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZcIixcbiAgICBcIm1lbXBvb2xfZXhpdFwiLFxuICAgIFwiZGlza19hbGxvY196b25lX3Jlc291cmNlc1wiLFxuICAgIFwibnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBgbWVtcG9vbGAgQVBJLCBpbnRyb2R1Y2luZyBhIGBtYXhfbnJgIHBhcmFtZXRlciB0byBsaW1pdCBwb29sIGNhcGFjaXR5IGFuZCBjaGFuZ2luZyBgbWVtcG9vbF9yZXNpemVgIHRvIG5vIGxvbmdlciBhbGxvY2F0ZSBtZW1vcnkgaW1tZWRpYXRlbHkgYnV0IGluc3RlYWQgcmVseSBvbiBgbWVtcG9vbF9mcmVlYCB0byByZWZpbGwgdGhlIHBvb2wuIEl0IGFsc28gY2hhbmdlcyB0aGUgaW50ZXJuYWwgYXJyYXkgYWxsb2NhdGlvbiB0byB1c2UgYGt2bWFsbG9jYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gbWVjaGFuaXNtIHVzZWQgYnkgdmFyaW91cyBzdWJzeXN0ZW1zIChlLmcuLCBibG9jayBsYXllciwgTlZNZSwgQ0lGUykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 12:40:49 +0000 UTC FinishedAt: 2026-06-26 12:53:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED", "BLK_DEV_NULL_BLK", "BLK_DEV_NVME", "NVME_CORE", "CIFS" ], "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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED", "BLK_DEV_NULL_BLK", "BLK_DEV_NVME", "NVME_CORE", "CIFS" ], "series_id": "b704ab57-fd75-4096-b84e-0d7f81b1e29f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "mempool_resize", "mempool_init_node", "mempool_create_node_noprof", "mempool_exit", "disk_alloc_zone_resources", "nvme_pci_alloc_iod_mempool" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05WTUUmIzM0OywKICAgICYjMzQ7TlZNRV9DT1JFJiMzNDssCiAgICAmIzM0O0NJRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1wb29sX3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDttZW1wb29sX2luaXRfbm9kZSYjMzQ7LAogICAgJiMzNDttZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZiYjMzQ7LAogICAgJiMzNDttZW1wb29sX2V4aXQmIzM0OywKICAgICYjMzQ7ZGlza19hbGxvY196b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBgbWVtcG9vbGAgQVBJLCBpbnRyb2R1Y2luZyBhIGBtYXhfbnJgIHBhcmFtZXRlciB0byBsaW1pdCBwb29sIGNhcGFjaXR5IGFuZCBjaGFuZ2luZyBgbWVtcG9vbF9yZXNpemVgIHRvIG5vIGxvbmdlciBhbGxvY2F0ZSBtZW1vcnkgaW1tZWRpYXRlbHkgYnV0IGluc3RlYWQgcmVseSBvbiBgbWVtcG9vbF9mcmVlYCB0byByZWZpbGwgdGhlIHBvb2wuIEl0IGFsc28gY2hhbmdlcyB0aGUgaW50ZXJuYWwgYXJyYXkgYWxsb2NhdGlvbiB0byB1c2UgYGt2bWFsbG9jYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gbWVjaGFuaXNtIHVzZWQgYnkgdmFyaW91cyBzdWJzeXN0ZW1zIChlLmcuLCBibG9jayBsYXllciwgTlZNZSwgQ0lGUykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlOGY1YzQ3MTIzOWYyNGE1ZGNjYWQ1NDRhNDcwZTE5MDQ1ZWVlNWYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTI6NTE6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXpvbmVkLmMgYi9ibG9jay9ibGstem9uZWQuY1xuaW5kZXggNmEyMjFjMTgwODg5N2EuLmNjMDYwYTBjM2U5OWZmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXpvbmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay16b25lZC5jXG5AQCAtMTkxOCw4ICYjNDM7MTkxOCwxMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSYjNDM7JiM0MzspXG4gXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0pO1xuIFxuLVx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKHBvb2xfc2l6ZSxcbi1cdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGJsa196b25lX3dwbHVnKSk7XG4mIzQzO1x0ZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChcbiYjNDM7XHRcdFx0XHRcdHBvb2xfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLFxuJiM0MztcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBibGtfem9uZV93cGx1ZykpO1xuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbmluZGV4IGI1Zjg0NjIwMDY3ODk5Li5lYWE0ODA0YWIzYzM1ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xuQEAgLTMzNDksNyAmIzQzOzMzNDksNyBAQCBzdGF0aWMgaW50IG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sKHN0cnVjdCBudm1lX2RldiAqZGV2KVxuIHtcbiBcdHNpemVfdCBhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVjdCBudm1lX2RtYV92ZWMpICogTlZNRV9NQVhfU0VHUztcbiBcbi1cdGRldi1cdTAwM2VkbWF2ZWNfbWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX25vZGUoMSxcbiYjNDM7XHRkZXYtXHUwMDNlZG1hdmVjX21lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZV9ub2RlKDEsIDIsXG4gXHRcdFx0bWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFxuIFx0XHRcdCh2b2lkICopYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRkZXZfdG9fbm9kZShkZXYtXHUwMDNlZGV2KSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmggYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxuaW5kZXggZThlNDQwZTA0YTA2MDMuLjA3MzE0MmY4MDZjZWJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXG5AQCAtMTgsNiAmIzQzOzE4LDcgQEAgdHlwZWRlZiB2b2lkIChtZW1wb29sX2ZyZWVfdCkodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcbiB0eXBlZGVmIHN0cnVjdCBtZW1wb29sIHtcbiBcdHNwaW5sb2NrX3QgbG9jaztcbiBcdGludCBtaW5fbnI7XHRcdC8qIG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xuJiM0MztcdGludCBtYXhfbnI7XHRcdC8qIG1heCBuciBvZiBlbGVtZW50cyBhdCAqZWxlbWVudHMgKi9cbiBcdGludCBjdXJyX25yO1x0XHQvKiBDdXJyZW50IG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xuIFx0dm9pZCAqKmVsZW1lbnRzO1xuIFxuQEAgLTM4LDcgJiM0MzszOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1wb29sX2lzX3NhdHVyYXRlZChzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcbiB9XG4gXG4gdm9pZCBtZW1wb29sX2V4aXQoc3RydWN0IG1lbXBvb2wgKnBvb2wpO1xuLWludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcbiYjNDM7aW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLCBpbnQgbWF4X25yLFxuIFx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbiBcdFx0dm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpO1xuIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxuQEAgLTQ5LDE1ICYjNDM7NTAsMTUgQEAgaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4gXG4gc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlKGludCBtaW5fbnIsIG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sXG4gXHRcdG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLCB2b2lkICpwb29sX2RhdGEpO1xuLXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLFxuJiM0MztzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcbiBcdFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXG4gXHRcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQpO1xuICNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfbm9kZSguLi4pXHRcdFx0XHRcdFxcXG4gXHRhbGxvY19ob29rcyhtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpXG4gXG4tI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfcG9vbF9kYXRhKVx0XFxcbi1cdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX3Bvb2xfZGF0YSxcdFxcXG4tXHRcdFx0ICAgIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbiYjNDM7I2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfZGF0YSlcdFxcXG4mIzQzO1x0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCAoX21pbl9ucikqMiwgX2FsbG9jX2ZuLCBfZnJlZV9mbixcdFxcXG4mIzQzO1x0XHRcdCAgICBfZGF0YSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxuIFxuIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpO1xuIHZvaWQgbWVtcG9vbF9kZXN0cm95KHN0cnVjdCBtZW1wb29sICpwb29sKTtcbkBAIC0xMDIsNiAmIzQzOzEwMywxMyBAQCB2b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcbiBcdG1lbXBvb2xfY3JlYXRlKChfbWluX25yKSwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFx0XFxcbiBcdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSlcbiBcbiYjNDM7I2RlZmluZSBtZW1wb29sX2luaXRfa21hbGxvY19yZXNpemFibGVfcG9vbChfcG9vbCwgX21pbl9uciwgX21heF9uciwgX3NpemUpXHRcdFxcXG4mIzQzO1x0bWVtcG9vbF9pbml0X25vZGUoX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcdFxcXG4mIzQzO1x0XHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxuJiM0MzsjZGVmaW5lIG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2woX21pbl9uciwgX21heF9uciwgX3NpemUpXHRcdFx0XFxcbiYjNDM7XHRtZW1wb29sX2NyZWF0ZV9ub2RlKF9taW5fbnIsIF9tYXhfbnIsIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcdFx0XFxcbiYjNDM7XHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKShfc2l6ZSksIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbiYjNDM7XG4gLypcbiAgKiBBIG1lbXBvb2xfYWxsb2NfdCBhbmQgbWVtcG9vbF9mcmVlX3QgZm9yIGEgc2ltcGxlIHBhZ2UgYWxsb2NhdG9yIHRoYXRcbiAgKiBhbGxvY2F0ZXMgcGFnZXMgb2YgdGhlIG9yZGVyIHNwZWNpZmllZCBieSBwb29sX2RhdGFcbmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmNcbmluZGV4IGRiMjNlMGVlZjY1MmRlLi4zNWMxYTI4YjZjMWJiZSAxMDA2NDRcbi0tLSBhL21tL21lbXBvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9vbC5jXG5AQCAtMjA3LDcgJiM0MzsyMDcsNyBAQCB2b2lkIG1lbXBvb2xfZXhpdChzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcbiBcdFx0dm9pZCAqZWxlbWVudCA9IHJlbW92ZV9lbGVtZW50KHBvb2wpO1xuIFx0XHRwb29sLVx1MDAzZWZyZWUoZWxlbWVudCwgcG9vbC1cdTAwM2Vwb29sX2RhdGEpO1xuIFx0fVxuLVx0a2ZyZWUocG9vbC1cdTAwM2VlbGVtZW50cyk7XG4mIzQzO1x0a3ZmcmVlKHBvb2wtXHUwMDNlZWxlbWVudHMpO1xuIFx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IE5VTEw7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9leGl0KTtcbkBAIC0yMzAsMjIgJiM0MzsyMzAsMjIgQEAgdm9pZCBtZW1wb29sX2Rlc3Ryb3koc3RydWN0IG1lbXBvb2wgKnBvb2wpXG4gfVxuIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9kZXN0cm95KTtcbiBcbi1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4mIzQzO2ludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9uciwgaW50IG1heF9ucixcbiBcdFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXG4gXHRcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlX2lkKVxuIHtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBvb2wtXHUwMDNlbG9jayk7XG4gXHRwb29sLVx1MDAzZW1pbl9uclx0PSBtaW5fbnI7XG4mIzQzO1x0cG9vbC1cdTAwM2VtYXhfbnJcdD0gbWF4X25yO1xuIFx0cG9vbC1cdTAwM2Vwb29sX2RhdGEgPSBwb29sX2RhdGE7XG4gXHRwb29sLVx1MDAzZWFsbG9jXHQ9IGFsbG9jX2ZuO1xuIFx0cG9vbC1cdTAwM2VmcmVlXHQ9IGZyZWVfZm47XG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnBvb2wtXHUwMDNld2FpdCk7XG4tXHQvKlxuLVx0ICogbWF4KCkgdXNlZCBoZXJlIHRvIGVuc3VyZSBzdG9yYWdlIGZvciBhdCBsZWFzdCAxIGVsZW1lbnQgdG8gc3VwcG9ydFxuLVx0ICogemVybyBtaW5pbXVtIHBvb2xcbi1cdCAqL1xuLVx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IGttYWxsb2NfYXJyYXlfbm9kZShtYXgoMSwgbWluX25yKSwgc2l6ZW9mKHZvaWQgKiksXG4tXHRcdFx0XHRcdCAgICBnZnBfbWFzaywgbm9kZV9pZCk7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKG1heF9uciBcdTAwM2MgMSB8fCBtaW5fbnIgXHUwMDNjIDApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHBvb2wtXHUwMDNlZWxlbWVudHMgPSBrdm1hbGxvY19hcnJheV9ub2RlX25vcHJvZihtYXhfbnIsIHNpemVvZih2b2lkICopLCBnZnBfbWFzaywgbm9kZV9pZCk7XG4gXHRpZiAoIXBvb2wtXHUwMDNlZWxlbWVudHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTI1Myw3ICYjNDM7MjUzLDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxuIFx0ICogRmlyc3QgcHJlLWFsbG9jYXRlIHRoZSBndWFyYW50ZWVkIG51bWJlciBvZiBidWZmZXJzLFxuIFx0ICogYWxzbyBwcmUtYWxsb2NhdGUgMSBlbGVtZW50IGZvciB6ZXJvIG1pbmltdW0gcG9vbC5cbiBcdCAqL1xuLVx0d2hpbGUgKHBvb2wtXHUwMDNlY3Vycl9uciBcdTAwM2MgbWF4KDEsIHBvb2wtXHUwMDNlbWluX25yKSkge1xuJiM0MztcdHdoaWxlIChwb29sLVx1MDAzZWN1cnJfbnIgXHUwMDNjIHBvb2wtXHUwMDNlbWluX25yKSB7XG4gXHRcdHZvaWQgKmVsZW1lbnQ7XG4gXG4gXHRcdGVsZW1lbnQgPSBwb29sLVx1MDAzZWFsbG9jKGdmcF9tYXNrLCBwb29sLVx1MDAzZXBvb2xfZGF0YSk7XG5AQCAtMjg2LDcgJiM0MzsyODYsNyBAQCBpbnQgbWVtcG9vbF9pbml0X25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcbiBcdFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXG4gXHRcdHZvaWQgKnBvb2xfZGF0YSlcbiB7XG4tXHRyZXR1cm4gbWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBhbGxvY19mbiwgZnJlZV9mbixcbiYjNDM7XHRyZXR1cm4gbWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtaW5fbnIgKiAyLCBhbGxvY19mbiwgZnJlZV9mbixcbiBcdFx0XHRcdCBwb29sX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSk7XG4gXG4gfVxuQEAgLTI5Niw2ICYjNDM7Mjk2LDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcbiAgKiBtZW1wb29sX2NyZWF0ZV9ub2RlIC0gY3JlYXRlIGEgbWVtb3J5IHBvb2xcbiAgKiBAbWluX25yOiAgICB0aGUgbWluaW11bSBudW1iZXIgb2YgZWxlbWVudHMgZ3VhcmFudGVlZCB0byBiZVxuICAqICAgICAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhpcyBwb29sLlxuJiM0MzsgKiBAbWF4X25yOiAgICB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUgcG9vbFxuICAqIEBhbGxvY19mbjogIHVzZXItZGVmaW5lZCBlbGVtZW50LWFsbG9jYXRpb24gZnVuY3Rpb24uXG4gICogQGZyZWVfZm46ICAgdXNlci1kZWZpbmVkIGVsZW1lbnQtZnJlZWluZyBmdW5jdGlvbi5cbiAgKiBAcG9vbF9kYXRhOiBvcHRpb25hbCBwcml2YXRlIGRhdGEgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLlxuQEAgLTMxMCw3ICYjNDM7MzExLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcbiAgKlxuICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgcG9vbCBvYmplY3Qgb3IgJU5VTEwgb24gZXJyb3IuXG4gICovXG4tc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsXG4mIzQzO3N0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLCBpbnQgbWF4X25yLFxuIFx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbiBcdFx0dm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpXG4ge1xuQEAgLTMyMCw3ICYjNDM7MzIxLDcgQEAgc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsXG4gXHRpZiAoIXBvb2wpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0aWYgKG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgYWxsb2NfZm4sIGZyZWVfZm4sIHBvb2xfZGF0YSxcbiYjNDM7XHRpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtYXhfbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXG4gXHRcdFx0ICAgICAgZ2ZwX21hc2ssIG5vZGVfaWQpKSB7XG4gXHRcdGtmcmVlKHBvb2wpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0zMzgsOSAmIzQzOzMzOSw4IEBAIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xuICAqICAgICAgICAgICAgICBhbGxvY2F0ZWQgZm9yIHRoaXMgcG9vbC5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gc2hyaW5rcy9ncm93cyB0aGUgcG9vbC4gSW4gdGhlIGNhc2Ugb2YgZ3Jvd2luZyxcbi0gKiBpdCBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ld1xuLSAqIHNpemUgaW1tZWRpYXRlbHksIGJ1dCBuZXcgbWVtcG9vbF9mcmVlKCkgY2FsbHMgd2lsbCByZWZpbGwgaXQuXG4tICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuXG4mIzQzOyAqIHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ldyBzaXplIGltbWVkaWF0ZWx5LCBidXQgbmV3IG1lbXBvb2xfZnJlZSgpXG4mIzQzOyAqIGNhbGxzIHdpbGwgcmVmaWxsIGl0LlxuICAqXG4gICogTm90ZSwgdGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IG5vIG1lbXBvb2xfZGVzdHJveSBpcyBjYWxsZWRcbiAgKiB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bm5pbmcuIG1lbXBvb2xfYWxsb2MoKSBcdTAwMjYgbWVtcG9vbF9mcmVlKClcbkBAIC0zNTEsMTEgJiM0MzszNTEsMTMgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZik7XG4gaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcbiB7XG4gXHR2b2lkICplbGVtZW50O1xuLVx0dm9pZCAqKm5ld19lbGVtZW50cztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4tXHRCVUdfT04obmV3X21pbl9uciBcdTAwM2M9IDApO1xuLVx0bWlnaHRfc2xlZXAoKTtcbiYjNDM7XHRpZiAoV0FSTl9PTihuZXdfbWluX25yIFx1MDAzYyAwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3X21pbl9uciBcdTAwM2UgcG9vbC1cdTAwM2VtYXhfbnIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0aWYgKG5ld19taW5fbnIgXHUwMDNjPSBwb29sLVx1MDAzZW1pbl9ucikge1xuQEAgLTM2Niw0NSAmIzQzOzM2OCw4IEBAIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpXG4gXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdH1cbiBcdFx0cG9vbC1cdTAwM2VtaW5fbnIgPSBuZXdfbWluX25yO1xuLVx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHR9XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuLVx0LyogR3JvdyB0aGUgcG9vbCAqL1xuLVx0bmV3X2VsZW1lbnRzID0ga21hbGxvY19vYmpzKCpuZXdfZWxlbWVudHMsIG5ld19taW5fbnIpO1xuLVx0aWYgKCFuZXdfZWxlbWVudHMpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRpZiAodW5saWtlbHkobmV3X21pbl9uciBcdTAwM2M9IHBvb2wtXHUwMDNlbWluX25yKSkge1xuLVx0XHQvKiBSYWNlZCwgb3RoZXIgcmVzaXplIHdpbGwgZG8gb3VyIHdvcmsgKi9cbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0a2ZyZWUobmV3X2VsZW1lbnRzKTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXHRtZW1jcHkobmV3X2VsZW1lbnRzLCBwb29sLVx1MDAzZWVsZW1lbnRzLFxuLVx0XHRcdHBvb2wtXHUwMDNlY3Vycl9uciAqIHNpemVvZigqbmV3X2VsZW1lbnRzKSk7XG4tXHRrZnJlZShwb29sLVx1MDAzZWVsZW1lbnRzKTtcbi1cdHBvb2wtXHUwMDNlZWxlbWVudHMgPSBuZXdfZWxlbWVudHM7XG4tXHRwb29sLVx1MDAzZW1pbl9uciA9IG5ld19taW5fbnI7XG4tXG4tXHR3aGlsZSAocG9vbC1cdTAwM2VjdXJyX25yIFx1MDAzYyBwb29sLVx1MDAzZW1pbl9ucikge1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRlbGVtZW50ID0gcG9vbC1cdTAwM2VhbGxvYyhHRlBfS0VSTkVMLCBwb29sLVx1MDAzZXBvb2xfZGF0YSk7XG4tXHRcdGlmICghZWxlbWVudClcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChwb29sLVx1MDAzZWN1cnJfbnIgXHUwMDNjIHBvb2wtXHUwMDNlbWluX25yKSB7XG4tXHRcdFx0YWRkX2VsZW1lbnQocG9vbCwgZWxlbWVudCk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0XHRwb29sLVx1MDAzZWZyZWUoZWxlbWVudCwgcG9vbC1cdTAwM2Vwb29sX2RhdGEpO1x0LyogUmFjZWQgKi9cbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuIFx0fVxuLW91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLW91dDpcbiBcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVk1FJiMzNDssCiAgICAmIzM0O05WTUVfQ09SRSYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtcG9vbF9yZXNpemUmIzM0OywKICAgICYjMzQ7bWVtcG9vbF9pbml0X25vZGUmIzM0OywKICAgICYjMzQ7bWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YmIzM0OywKICAgICYjMzQ7bWVtcG9vbF9leGl0JiMzNDssCiAgICAmIzM0O2Rpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7bnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYG1lbXBvb2xgIEFQSSwgaW50cm9kdWNpbmcgYSBgbWF4X25yYCBwYXJhbWV0ZXIgdG8gbGltaXQgcG9vbCBjYXBhY2l0eSBhbmQgY2hhbmdpbmcgYG1lbXBvb2xfcmVzaXplYCB0byBubyBsb25nZXIgYWxsb2NhdGUgbWVtb3J5IGltbWVkaWF0ZWx5IGJ1dCBpbnN0ZWFkIHJlbHkgb24gYG1lbXBvb2xfZnJlZWAgdG8gcmVmaWxsIHRoZSBwb29sLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGludGVybmFsIGFycmF5IGFsbG9jYXRpb24gdG8gdXNlIGBrdm1hbGxvY2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gYSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbSB1c2VkIGJ5IHZhcmlvdXMgc3Vic3lzdGVtcyAoZS5nLiwgYmxvY2sgbGF5ZXIsIE5WTWUsIENJRlMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOGY1YzQ3MTIzOWYyNGE1ZGNjYWQ1NDRhNDcwZTE5MDQ1ZWVlNWYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTI6NTE6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jCmluZGV4IDZhMjIxYzE4MDg4OTdhLi5jYzA2MGEwYzNlOTlmZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXpvbmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXpvbmVkLmMKQEAgLTE5MTgsOCAmIzQzOzE5MTgsMTAgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCWZvciAoaSA9IDA7IGkgJmx0OyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSYjNDM7JiM0MzspCiAJCUlOSVRfSExJU1RfSEVBRCgmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hbaV0pOwogCi0JZGlzay0mZ3Q7em9uZV93cGx1Z3NfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChwb29sX3NpemUsCi0JCQkJCQlzaXplb2Yoc3RydWN0IGJsa196b25lX3dwbHVnKSk7CiYjNDM7CWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKAomIzQzOwkJCQkJcG9vbF9zaXplLAomIzQzOwkJCQkJQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsCiYjNDM7CQkJCQlzaXplb2Yoc3RydWN0IGJsa196b25lX3dwbHVnKSk7CiAJaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc19wb29sKQogCQlnb3RvIGZyZWVfaGFzaDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmMgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwppbmRleCBiNWY4NDYyMDA2Nzg5OS4uZWFhNDgwNGFiM2MzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jCkBAIC0zMzQ5LDcgJiM0MzszMzQ5LDcgQEAgc3RhdGljIGludCBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChzdHJ1Y3QgbnZtZV9kZXYgKmRldikKIHsKIAlzaXplX3QgYWxsb2Nfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbnZtZV9kbWFfdmVjKSAqIE5WTUVfTUFYX1NFR1M7CiAKLQlkZXYtJmd0O2RtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLAomIzQzOwlkZXYtJmd0O2RtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLCAyLAogCQkJbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLAogCQkJKHZvaWQgKilhbGxvY19zaXplLCBHRlBfS0VSTkVMLAogCQkJZGV2X3RvX25vZGUoZGV2LSZndDtkZXYpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmgKaW5kZXggZThlNDQwZTA0YTA2MDMuLjA3MzE0MmY4MDZjZWJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaApAQCAtMTgsNiAmIzQzOzE4LDcgQEAgdHlwZWRlZiB2b2lkIChtZW1wb29sX2ZyZWVfdCkodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTsKIHR5cGVkZWYgc3RydWN0IG1lbXBvb2wgewogCXNwaW5sb2NrX3QgbG9jazsKIAlpbnQgbWluX25yOwkJLyogbnIgb2YgZWxlbWVudHMgYXQgKmVsZW1lbnRzICovCiYjNDM7CWludCBtYXhfbnI7CQkvKiBtYXggbnIgb2YgZWxlbWVudHMgYXQgKmVsZW1lbnRzICovCiAJaW50IGN1cnJfbnI7CQkvKiBDdXJyZW50IG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqLwogCXZvaWQgKiplbGVtZW50czsKIApAQCAtMzgsNyAmIzQzOzM5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbXBvb2xfaXNfc2F0dXJhdGVkKHN0cnVjdCBtZW1wb29sICpwb29sKQogfQogCiB2b2lkIG1lbXBvb2xfZXhpdChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7Ci1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsCiYjNDM7aW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLCBpbnQgbWF4X25yLAogCQltZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwKIAkJdm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpOwogaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsCkBAIC00OSwxNSAmIzQzOzUwLDE1IEBAIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLAogCiBzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGUoaW50IG1pbl9uciwgbWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwKIAkJbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7Ci1zdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwKJiM0MztzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9uciwKIAkJbWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sCiAJCXZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQpOwogI2RlZmluZSBtZW1wb29sX2NyZWF0ZV9ub2RlKC4uLikJCQkJCVwKIAlhbGxvY19ob29rcyhtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihfX1ZBX0FSR1NfXykpCiAKLSNkZWZpbmUgbWVtcG9vbF9jcmVhdGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX3Bvb2xfZGF0YSkJXAotCW1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX3Bvb2xfZGF0YSwJXAotCQkJICAgIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSkKJiM0MzsjZGVmaW5lIG1lbXBvb2xfY3JlYXRlKF9taW5fbnIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sIF9kYXRhKQlcCiYjNDM7CW1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgKF9taW5fbnIpKjIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sCVwKJiM0MzsJCQkgICAgX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSkKIAogaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucik7CiB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7CkBAIC0xMDIsNiAmIzQzOzEwMywxMyBAQCB2b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTsKIAltZW1wb29sX2NyZWF0ZSgoX21pbl9uciksIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSwJXAogCQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpKQogCiYjNDM7I2RlZmluZSBtZW1wb29sX2luaXRfa21hbGxvY19yZXNpemFibGVfcG9vbChfcG9vbCwgX21pbl9uciwgX21heF9uciwgX3NpemUpCQlcCiYjNDM7CW1lbXBvb2xfaW5pdF9ub2RlKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsCVwKJiM0MzsJCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpCiYjNDM7I2RlZmluZSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKF9taW5fbnIsIF9tYXhfbnIsIF9zaXplKQkJCVwKJiM0MzsJbWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsCQlcCiYjNDM7CQkgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpCiYjNDM7CiAvKgogICogQSBtZW1wb29sX2FsbG9jX3QgYW5kIG1lbXBvb2xfZnJlZV90IGZvciBhIHNpbXBsZSBwYWdlIGFsbG9jYXRvciB0aGF0CiAgKiBhbGxvY2F0ZXMgcGFnZXMgb2YgdGhlIG9yZGVyIHNwZWNpZmllZCBieSBwb29sX2RhdGEKZGlmZiAtLWdpdCBhL21tL21lbXBvb2wuYyBiL21tL21lbXBvb2wuYwppbmRleCBkYjIzZTBlZWY2NTJkZS4uMzVjMWEyOGI2YzFiYmUgMTAwNjQ0Ci0tLSBhL21tL21lbXBvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1wb29sLmMKQEAgLTIwNyw3ICYjNDM7MjA3LDcgQEAgdm9pZCBtZW1wb29sX2V4aXQoc3RydWN0IG1lbXBvb2wgKnBvb2wpCiAJCXZvaWQgKmVsZW1lbnQgPSByZW1vdmVfZWxlbWVudChwb29sKTsKIAkJcG9vbC0mZ3Q7ZnJlZShlbGVtZW50LCBwb29sLSZndDtwb29sX2RhdGEpOwogCX0KLQlrZnJlZShwb29sLSZndDtlbGVtZW50cyk7CiYjNDM7CWt2ZnJlZShwb29sLSZndDtlbGVtZW50cyk7CiAJcG9vbC0mZ3Q7ZWxlbWVudHMgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChtZW1wb29sX2V4aXQpOwpAQCAtMjMwLDIyICYjNDM7MjMwLDIyIEBAIHZvaWQgbWVtcG9vbF9kZXN0cm95KHN0cnVjdCBtZW1wb29sICpwb29sKQogfQogRVhQT1JUX1NZTUJPTChtZW1wb29sX2Rlc3Ryb3kpOwogCi1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsCiYjNDM7aW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLCBpbnQgbWF4X25yLAogCQltZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwKIAkJdm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtwb29sLSZndDtsb2NrKTsKIAlwb29sLSZndDttaW5fbnIJPSBtaW5fbnI7CiYjNDM7CXBvb2wtJmd0O21heF9ucgk9IG1heF9ucjsKIAlwb29sLSZndDtwb29sX2RhdGEgPSBwb29sX2RhdGE7CiAJcG9vbC0mZ3Q7YWxsb2MJPSBhbGxvY19mbjsKIAlwb29sLSZndDtmcmVlCT0gZnJlZV9mbjsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7cG9vbC0mZ3Q7d2FpdCk7Ci0JLyoKLQkgKiBtYXgoKSB1c2VkIGhlcmUgdG8gZW5zdXJlIHN0b3JhZ2UgZm9yIGF0IGxlYXN0IDEgZWxlbWVudCB0byBzdXBwb3J0Ci0JICogemVybyBtaW5pbXVtIHBvb2wKLQkgKi8KLQlwb29sLSZndDtlbGVtZW50cyA9IGttYWxsb2NfYXJyYXlfbm9kZShtYXgoMSwgbWluX25yKSwgc2l6ZW9mKHZvaWQgKiksCi0JCQkJCSAgICBnZnBfbWFzaywgbm9kZV9pZCk7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKG1heF9uciAmbHQ7IDEgfHwgbWluX25yICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcG9vbC0mZ3Q7ZWxlbWVudHMgPSBrdm1hbGxvY19hcnJheV9ub2RlX25vcHJvZihtYXhfbnIsIHNpemVvZih2b2lkICopLCBnZnBfbWFzaywgbm9kZV9pZCk7CiAJaWYgKCFwb29sLSZndDtlbGVtZW50cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI1Myw3ICYjNDM7MjUzLDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLAogCSAqIEZpcnN0IHByZS1hbGxvY2F0ZSB0aGUgZ3VhcmFudGVlZCBudW1iZXIgb2YgYnVmZmVycywKIAkgKiBhbHNvIHByZS1hbGxvY2F0ZSAxIGVsZW1lbnQgZm9yIHplcm8gbWluaW11bSBwb29sLgogCSAqLwotCXdoaWxlIChwb29sLSZndDtjdXJyX25yICZsdDsgbWF4KDEsIHBvb2wtJmd0O21pbl9ucikpIHsKJiM0MzsJd2hpbGUgKHBvb2wtJmd0O2N1cnJfbnIgJmx0OyBwb29sLSZndDttaW5fbnIpIHsKIAkJdm9pZCAqZWxlbWVudDsKIAogCQllbGVtZW50ID0gcG9vbC0mZ3Q7YWxsb2MoZ2ZwX21hc2ssIHBvb2wtJmd0O3Bvb2xfZGF0YSk7CkBAIC0yODYsNyAmIzQzOzI4Niw3IEBAIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLAogCQltZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwKIAkJdm9pZCAqcG9vbF9kYXRhKQogewotCXJldHVybiBtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLAomIzQzOwlyZXR1cm4gbWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtaW5fbnIgKiAyLCBhbGxvY19mbiwgZnJlZV9mbiwKIAkJCQkgcG9vbF9kYXRhLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpOwogCiB9CkBAIC0yOTYsNiAmIzQzOzI5Niw3IEBAIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9pbml0X25vcHJvZik7CiAgKiBtZW1wb29sX2NyZWF0ZV9ub2RlIC0gY3JlYXRlIGEgbWVtb3J5IHBvb2wKICAqIEBtaW5fbnI6ICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBndWFyYW50ZWVkIHRvIGJlCiAgKiAgICAgICAgICAgICBhbGxvY2F0ZWQgZm9yIHRoaXMgcG9vbC4KJiM0MzsgKiBAbWF4X25yOiAgICB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUgcG9vbAogICogQGFsbG9jX2ZuOiAgdXNlci1kZWZpbmVkIGVsZW1lbnQtYWxsb2NhdGlvbiBmdW5jdGlvbi4KICAqIEBmcmVlX2ZuOiAgIHVzZXItZGVmaW5lZCBlbGVtZW50LWZyZWVpbmcgZnVuY3Rpb24uCiAgKiBAcG9vbF9kYXRhOiBvcHRpb25hbCBwcml2YXRlIGRhdGEgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLgpAQCAtMzEwLDcgJiM0MzszMTEsNyBAQCBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfaW5pdF9ub3Byb2YpOwogICoKICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgcG9vbCBvYmplY3Qgb3IgJU5VTEwgb24gZXJyb3IuCiAgKi8KLXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLAomIzQzO3N0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLCBpbnQgbWF4X25yLAogCQltZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbiwKIAkJdm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpCiB7CkBAIC0zMjAsNyAmIzQzOzMyMSw3IEBAIHN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLAogCWlmICghcG9vbCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBhbGxvY19mbiwgZnJlZV9mbiwgcG9vbF9kYXRhLAomIzQzOwlpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtYXhfbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsCiAJCQkgICAgICBnZnBfbWFzaywgbm9kZV9pZCkpIHsKIAkJa2ZyZWUocG9vbCk7CiAJCXJldHVybiBOVUxMOwpAQCAtMzM4LDkgJiM0MzszMzksOCBAQCBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKTsKICAqICAgICAgICAgICAgICBhbGxvY2F0ZWQgZm9yIHRoaXMgcG9vbC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNocmlua3MvZ3Jvd3MgdGhlIHBvb2wuIEluIHRoZSBjYXNlIG9mIGdyb3dpbmcsCi0gKiBpdCBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ldwotICogc2l6ZSBpbW1lZGlhdGVseSwgYnV0IG5ldyBtZW1wb29sX2ZyZWUoKSBjYWxscyB3aWxsIHJlZmlsbCBpdC4KLSAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgomIzQzOyAqIHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ldyBzaXplIGltbWVkaWF0ZWx5LCBidXQgbmV3IG1lbXBvb2xfZnJlZSgpCiYjNDM7ICogY2FsbHMgd2lsbCByZWZpbGwgaXQuCiAgKgogICogTm90ZSwgdGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IG5vIG1lbXBvb2xfZGVzdHJveSBpcyBjYWxsZWQKICAqIHdoaWxlIHRoaXMgZnVuY3Rpb24gaXMgcnVubmluZy4gbWVtcG9vbF9hbGxvYygpICZhbXA7IG1lbXBvb2xfZnJlZSgpCkBAIC0zNTEsMTEgJiM0MzszNTEsMTMgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZik7CiBpbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKQogewogCXZvaWQgKmVsZW1lbnQ7Ci0Jdm9pZCAqKm5ld19lbGVtZW50czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JQlVHX09OKG5ld19taW5fbnIgJmx0Oz0gMCk7Ci0JbWlnaHRfc2xlZXAoKTsKJiM0MzsJaWYgKFdBUk5fT04obmV3X21pbl9uciAmbHQ7IDApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChuZXdfbWluX25yICZndDsgcG9vbC0mZ3Q7bWF4X25yKQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKIAlpZiAobmV3X21pbl9uciAmbHQ7PSBwb29sLSZndDttaW5fbnIpIHsKQEAgLTM2Niw0NSAmIzQzOzM2OCw4IEBAIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKIAkJfQogCQlwb29sLSZndDttaW5fbnIgPSBuZXdfbWluX25yOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtsb2NrLCBmbGFncyk7Ci0KLQkvKiBHcm93IHRoZSBwb29sICovCi0JbmV3X2VsZW1lbnRzID0ga21hbGxvY19vYmpzKCpuZXdfZWxlbWVudHMsIG5ld19taW5fbnIpOwotCWlmICghbmV3X2VsZW1lbnRzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotCWlmICh1bmxpa2VseShuZXdfbWluX25yICZsdDs9IHBvb2wtJmd0O21pbl9ucikpIHsKLQkJLyogUmFjZWQsIG90aGVyIHJlc2l6ZSB3aWxsIGRvIG91ciB3b3JrICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb29sLSZndDtsb2NrLCBmbGFncyk7Ci0JCWtmcmVlKG5ld19lbGVtZW50cyk7Ci0JCWdvdG8gb3V0OwotCX0KLQltZW1jcHkobmV3X2VsZW1lbnRzLCBwb29sLSZndDtlbGVtZW50cywKLQkJCXBvb2wtJmd0O2N1cnJfbnIgKiBzaXplb2YoKm5ld19lbGVtZW50cykpOwotCWtmcmVlKHBvb2wtJmd0O2VsZW1lbnRzKTsKLQlwb29sLSZndDtlbGVtZW50cyA9IG5ld19lbGVtZW50czsKLQlwb29sLSZndDttaW5fbnIgPSBuZXdfbWluX25yOwotCi0Jd2hpbGUgKHBvb2wtJmd0O2N1cnJfbnIgJmx0OyBwb29sLSZndDttaW5fbnIpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJZWxlbWVudCA9IHBvb2wtJmd0O2FsbG9jKEdGUF9LRVJORUwsIHBvb2wtJmd0O3Bvb2xfZGF0YSk7Ci0JCWlmICghZWxlbWVudCkKLQkJCWdvdG8gb3V0OwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJaWYgKHBvb2wtJmd0O2N1cnJfbnIgJmx0OyBwb29sLSZndDttaW5fbnIpIHsKLQkJCWFkZF9lbGVtZW50KHBvb2wsIGVsZW1lbnQpOwotCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3Bvb2wtJmd0O2xvY2ssIGZsYWdzKTsKLQkJCXBvb2wtJmd0O2ZyZWUoZWxlbWVudCwgcG9vbC0mZ3Q7cG9vbF9kYXRhKTsJLyogUmFjZWQgKi8KLQkJCWdvdG8gb3V0OwotCQl9CiAJfQotb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotb3V0OgogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChtZW1wb29sX3Jlc2l6ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NDkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1wb29sIEFQSSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgdGhlIGBtZW1wb29sYCBBUEkgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFNlZW1zIGxpa2UgdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gbWFraW5nIHRoZSBwb29scyByZXNpemFibGUsIHdoaWNoIGlzIGdvb2QuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGBtZW1wb29sX2luaXRfbm9kZWAgYW5kIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAgYW5kIHNpZ25pZmljYW50bHkgYWx0ZXJzIGBtZW1wb29sX3Jlc2l6ZWAuIEl0IGFwcGVhcnMgYG1lbXBvb2xfcmVzaXplYCBubyBsb25nZXIgcmVhbGxvY2F0ZXMgdGhlIHVuZGVybHlpbmcgYXJyYXksIGluc3RlYWQgaXQgY2hhbmdlcyBgbWluX25yYCwgYW5kIHJlbGllcyBvbiBgbWF4X25yYCBub3cuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIGFuZCBgbWVtcG9vbF9pbml0X2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgLiBUaGF0IGdpdmVzIG1lIGEgY2x1ZSBhYm91dCB0aGUgZGlyZWN0aW9uLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4uLiBBaCwgaGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBwYXJ0OiBpbiBgbWVtcG9vbF9yZXNpemVgLCB0aGUgcGF0Y2ggbm93IGp1c3QgY2hlY2tzIGlmIHRoZSByZXF1ZXN0ZWQgYG5ld19taW5fbnJgIGV4Y2VlZHMgYHBvb2wtJmd0O21heF9ucmAgYW5kIHJldHVybnMgYC1FTk9TUENgIGlmIHRoYXQgaXMgdGhlIGNhc2UuIElmIHRoZSBkZXNpcmVkIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IG1pbmltdW0sIGl0IGZyZWVzIGV4dHJhIGVsZW1lbnRzLiBCdXQgdGhlIGtleSBwYXJ0IGhlcmUgaXMgdGhhdCB3aGVuIHlvdSBpbmNyZWFzZSBgbmV3X21pbl9ucmAgaXQganVzdCAqc2V0cyogdGhlIHZhbHVlIGFuZCBkb2VzIE5PVCBhbGxvY2F0ZS4gVGhlIGNvZGUgY29tbWVudHMgaW5kaWNhdGUgdGhhdCBuZXcgY2FsbHMgdG8gYG1lbXBvb2xfZnJlZSgpYCB3aWxsIGV2ZW50dWFsbHkgcmVmaWxsIGl0LiAqVGhhdCYjMzk7cyogYSBjaGFuZ2U7IHRoZSBvbGQgY29kZSBoYWQgYW4gZXhwbGljaXQgYWxsb2NhdGlvbiBsb29wIHRvIGVuc3VyZSB0aGUgcG9vbCB3YXMgYWx3YXlzIGF0IGxlYXN0IGBtaW5fbnJgIGluIHNpemUsIGJ1dCBub3cgaXQmIzM5O3MgZ29uZSEgVGhpcyBpcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHN0cmF0ZWd5LgoKV2FpdCwgc28gdGhleSYjMzk7cmUgZGVmZXJyaW5nIGFsbG9jYXRpb24gdG8gdGhlIGZyZWUgcGF0aD8gVGhhdCBoYXMgZGVmaW5pdGUgaW1wbGljYXRpb25zIGZvciBjb25jdXJyZW5jeSwgZXJyb3IgaGFuZGxpbmcsIGFuZCBtZW1vcnkgZnJhZ21lbnRhdGlvbi4gSXQmIzM5O3MgYSB0cmFkZS1vZmY6IHBvdGVudGlhbGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSBvbiB0aGUgcmVzaXplIHBhdGggYXQgdGhlIGV4cGVuc2Ugb2YgcG90ZW50aWFsIGRlbGF5cyB3aGVuIHRoZSBzeXN0ZW0gbmVlZHMgdG8gYWxsb2NhdGUgbW9yZSBtZW1vcnkgYW5kIHRoZSBtZW1wb29sIGlzbiYjMzk7dCBpbW1lZGlhdGVseSByZWFkeSB0byBwcm92aWRlIGl0LgoKT2theSwgc28gdGhpcyBpcyBhICpjb3JlKiBrZXJuZWwgY2hhbmdlLiBJdCBhZmZlY3RzIGFsbCB1c2VycyBvZiBtZW1wb29sLCB3aGljaCBpcyBodWdlISBEZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byBjYXRjaCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBvciByZWdyZXNzaW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBgbWVtcG9vbGAgaXMgYWx3YXlzIGVuYWJsZWQsIGFuZCBpdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQgaW50byB0aGUga2VybmVsIChhdCBsZWFzdCBhcyBmYXIgYXMgSSBjYW4gc2VlIGluIGBtbS9tZW1wb29sLmNgIGFuZCB0aGUgYG1tL01ha2VmaWxlYCkuIFRoYXQgbWFrZXMgaXQgZXZlbiBtb3JlIGNyaXRpY2FsIHRvIHRlc3QgdGhvcm91Z2hseSwgc2luY2UgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb29sLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT00OT1lbmRpZlxubW0vTWFrZWZpbGUtNTAtXG5tbS9NYWtlZmlsZTo1MTpvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbm1tL01ha2VmaWxlLTUyLVx0XHRcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgS2VybmVsIE1vZHVsZSBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGBtZW1wb29sLm9gIGlzIGFsd2F5cyBhIGdvLCBubyBjb25kaXRpb25hbCBmbGFncyB0aGVyZS4gRWFzeSBlbm91Z2guIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYGJsay16b25lZC5jYC4gQWhhLCB0aGF0IG9uZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgbW9kdWxhciBhbmQgYXZvaWRzIGNvbXBpbGluZyB1bm5lY2Vzc2FyeSBjb2RlLgoKTmV4dCB1cCwgYG52bWUvaG9zdC9wY2kuY2AuIFRoaXMgb25lJiMzOTtzIGEgbGl0dGxlIG1vcmUgaW52b2x2ZWQsIGdvdHRhIHRyYWNrIGRvd24gaXRzIGNvbmRpdGlvbnMuIE9rYXksIGhlcmUgd2UgZ28uLi4gaXQmIzM5O3MgY29udGluZ2VudCBvbiAqYm90aCogYENPTkZJR19OVk1FX0NPUkVgICphbmQqIGBDT05GSUdfQkxLX0RFVl9OVk1FYCBiZWluZyBkZWZpbmVkLiBNYWtlcyBwZXJmZWN0IHNlbnNlLCBjb25zaWRlcmluZyB0aGUgbmVlZCBmb3IgdGhlIE5WTWUgY29yZSBhbmQgYmxvY2sgZGV2aWNlIHN1cHBvcnQgYmVmb3JlIHRoZSBQQ0kgaG9zdCBkcml2ZXIgd291bGQgZXZlbiBiZSByZWxldmFudC4gR29vZCwgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsay16b25lZC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9Mjg9b2JqLSQoQ09ORklHX0JMS19ERVZfSU5URUdSSVRZKSAmIzQzOz0gYmlvLWludGVncml0eS5vIGJsay1pbnRlZ3JpdHkubyB0MTAtcGkubyBcXFxuYmxvY2svTWFrZWZpbGUtMjktXHRcdFx0XHQgICBiaW8taW50ZWdyaXR5LWF1dG8ubyBiaW8taW50ZWdyaXR5LWZzLm9cbmJsb2NrL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEKVx0JiM0Mzs9IGJsay16b25lZC5vXG5ibG9jay9NYWtlZmlsZS0zMS1vYmotJChDT05GSUdfQkxLX1dCVClcdFx0JiM0Mzs9IGJsay13YnQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBOVk1lIEhvc3QgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLCBwcm9iYWJseSB0byBkZWJ1ZyBzb21ldGhpbmcgc3BlY2lmaWMsIGNvbnRyaWJ1dGUgYSBwYXRjaCwgb3IgbWF5YmUganVzdCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIE5WTWUgaG9zdCBkcml2ZXJzIHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBwYXJzZSB0aGUgaW1wbGljYXRpb25zIOKAkyB0aGlzIE1ha2VmaWxlIGlzIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGNvbXBpbGluZyB0aGUgTlZNZSBob3N0IGRyaXZlciBjb21wb25lbnRzLiBJIGtub3cgdGhlcmUgd2lsbCBiZSBydWxlcyBmb3IgYnVpbGRpbmcgb2JqZWN0IGZpbGVzLCBsaW5raW5nIHRoZW0gaW50byBtb2R1bGVzLCBoYW5kbGluZyBkZXBlbmRlbmNpZXMuLi4gbGlrZWx5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncywgb3B0aW9ucyBmb3IgZGlmZmVyZW50IE5WTWUgY29udHJvbGxlciB2ZW5kb3JzLCBvciBwZXJoYXBzIGJ1aWxkLXRpbWUgb3B0aW1pemF0aW9ucy4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSB2YXJpb3VzIHNvdXJjZSBmaWxlcyB3aXRoaW4gdGhlIGBudm1lL2hvc3RgIGRpcmVjdG9yeSBhcmUgYnJvdWdodCB0b2dldGhlciwgaG93IGhlYWRlcnMgYXJlIGluY2x1ZGVkLCBhbmQgd2hhdCBtb2R1bGVzIG9yIGJpbmFyaWVzIGFyZSBwcm9kdWNlZC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIGRlY2lwaGVyIHRoZSBidWlsZCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2kubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlPTIwPW52bWUtY29yZS0kKENPTkZJR19OVk1FX0hPU1RfQVVUSClcdCYjNDM7PSBhdXRoLm9cbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlLTIxLVxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6MjI6bnZtZS15XHRcdFx0XHRcdCYjNDM7PSBwY2kub1xuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUtMjMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUyNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNb2R1bGUgRGVwZW5kZW5jeSBJbnF1aXJ5KioKCk9rYXksIHNvIEkgc2VlIHRoaXMgYnVpbGQgY29tbWFuZDogYG52bWUteSAmIzQzOz0gcGNpLm9gLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IFdoYXQmIzM5O3MgdGhlICpyZWFsKiBkZXBlbmRlbmN5IGNoYWluIGhlcmUgZm9yIHRoZSBgbnZtZWAgZHJpdmVyPyBJJiMzOTttIGFzc3VtaW5nIGBudm1lYCBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEl0IHNlZW1zIGxpa2UgdGhlIGBwY2kub2AgbW9kdWxlIGlzIGJlaW5nIGxpbmtlZCBpbiwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIHNldHRpbmcgdGhhdCBhY3R1YWxseSAqZW5hYmxlcyogdGhlIGNvcmUgYG52bWVgIGZ1bmN0aW9uYWxpdHkuIElzIGl0IGBDT05GSUdfTlZNRWAsIGBDT05GSUdfQkxLX0RFVl9OVk1FYCwgc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZXJlJiMzOTtzIHByb2JhYmx5IGFuIGludGVybWVkaWF0ZSBkZXBlbmRlbmN5IHNvbWV3aGVyZSB0aGF0IHRpZXMgdGhlIGRldmljZSBkcml2ZXIgdG8gUENJLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRocm91Z2ggdGhlIEtjb25maWcgaGllcmFyY2h5IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0uKm52bWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZT0zPWNjZmxhZ3MteVx0XHRcdFx0JiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS00LVxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTlZNRV9DT1JFKVx0XHRcdCYjNDM7PSBudm1lLWNvcmUub1xuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxLX0RFVl9OVk1FKVx0XHQmIzQzOz0gbnZtZS5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OVk1FX0ZBQlJJQ1MpXHRcdCYjNDM7PSBudm1lLWZhYnJpY3Mub1xuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTlZNRV9SRE1BKVx0XHRcdCYjNDM7PSBudm1lLXJkbWEub1xuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTlZNRV9GQylcdFx0XHQmIzQzOz0gbnZtZS1mYy5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfTlZNRV9UQ1ApXHRcdFx0JiM0Mzs9IG52bWUtdGNwLm9cbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjExOm9iai0kKENPTkZJR19OVk1FX0FQUExFKVx0XHQmIzQzOz0gbnZtZS1hcHBsZS5vXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS0xMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBOVk1lIGFuZCBNZW1vcnkgUG9vbHMqKgoKT2theSwgc28gYENPTkZJR19CTEtfREVWX05WTUVgIGJyaW5ncyBpbiBgbnZtZS5vYCwgd2hpY2ggbmF0dXJhbGx5IGluY2x1ZGVzIGBwY2kub2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZyB3aXRoaW4gdGhhdCBtb2R1bGUuIExldCYjMzk7cyBzZWUsIHdoYXQgaGFzIGNoYW5nZWQ/CgpSaWdodCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBzZWUgdGhlbTogYG1lbXBvb2xfZXhpdGAsIGBtZW1wb29sX2Rlc3Ryb3lgICh3aGljaCwgd2hpbGUgbm90IGNoYW5nZWQsIHByb3ZpZGVzIHZhbHVhYmxlIGNvbnRleHQpLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9pbml0X25vcHJvZmAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGFuZCBgbWVtcG9vbF9yZXNpemVgLgoKYG1lbXBvb2xfcmVzaXplYCBsb29rcyBsaWtlIHRoZSBwcmltZSBjYW5kaWRhdGUgZm9yIGluaXRpYWwgZnV6emluZyBlZmZvcnQuIEl0IGhhcyB0aGUgbW9zdCBzdWJzdGFudGl2ZSBsb2dpYyBjaGFuZ2VzLiBCdXQgYG1lbXBvb2xfaW5pdF9ub2RlYCBhbHNvIGdvdCBhIHRvdWNoLXVwIChzcGVjaWZpY2FsbHksIHVzaW5nIGBrdm1hbGxvY19hcnJheV9ub2RlX25vcHJvZmApLCBhbmQgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCBpcyBhbHNvIG9uIHRoZSBtb2RpZmllZCBsaXN0LiBJJiMzOTtsbCBhZGQgYG1lbXBvb2xfcmVzaXplYCwgYG1lbXBvb2xfaW5pdF9ub2RlYCwgYW5kIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAgdG8gYEZvY3VzU3ltYm9sc2AuCgpJIGFsc28gd2FudCB0byBjaGVjayBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgYW5kIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGAuIFRoZXkgY291bGQgYmUgZnJ1aXRmdWwsIHRvby4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSByZWFjaGFiaWxpdHkuIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGAgbGl2ZXMgaW4gYGRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jYCwgc28gaXQgc2VlbXMgcmVsZXZhbnQuIEFuZCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgaW4gYGJsb2NrL2Jsay16b25lZC5jYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgY2FsbGVycyBmb3IgYG1lbXBvb2xfcmVzaXplYCwganVzdCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvb2xfcmVzaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay16b25lZC5jPTIwNzY9c3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMTI4LVxuYmxvY2svYmxrLXpvbmVkLmM6MjEyOTpcdG1lbXBvb2xfcmVzaXplKGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCwgcG9vbF9zaXplKTtcbmJsb2NrL2Jsay16b25lZC5jLTIxMzAtXG4tLVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYz04Njk9c3RhdGljIGVudW0gemZjcF9lcnBfYWN0X3Jlc3VsdCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmKFxuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYzo4ODQ6XHRpZiAobWVtcG9vbF9yZXNpemUoYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhLFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYy04ODUtXHRcdFx0ICAgYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlc3RhdF9yZWFkX2J1Zl9udW0pKVxuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg3LVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYzo4ODg6XHRpZiAobWVtcG9vbF9yZXNpemUoYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9vbC5zdGF0dXNfcmVhZF9yZXEsXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4OS1cdFx0XHQgICBhY3QtXHUwMDNlYWRhcHRlci1cdTAwM2VzdGF0X3JlYWRfYnVmX251bSkpXG4tLVxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MTA1OT1jbGVhbl9kZW11bHRpcGxleF9pbmZvKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcilcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMTQ4LVx0aWYgKGxlbmd0aCBcdTAwM2UgMClcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jOjExNDk6XHRcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggJiM0MzsgY2lmc19taW5fcmN2KTtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTExNTAtfVxuLS1cbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jPTEyNTQ9Y2lmc19kZW11bHRpcGxleF90aHJlYWQodm9pZCAqcClcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMjcxLVx0aWYgKGxlbmd0aCBcdTAwM2UgMSlcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jOjEyNzI6XHRcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggJiM0MzsgY2lmc19taW5fcmN2KTtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTEyNzMtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9NTM9c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNjItXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo2MzppbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKTtcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTY0LXZvaWQgbWVtcG9vbF9kZXN0cm95KHN0cnVjdCBtZW1wb29sICpwb29sKTtcbi0tXG5tbS9tZW1wb29sLmM9MzMyPUVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xuLS1cbm1tL21lbXBvb2wuYy0zMzQtLyoqXG5tbS9tZW1wb29sLmM6MzM1OiAqIG1lbXBvb2xfcmVzaXplIC0gcmVzaXplIGFuIGV4aXN0aW5nIG1lbW9yeSBwb29sXG5tbS9tZW1wb29sLmMtMzM2LSAqIEBwb29sOiAgICAgICBwb2ludGVyIHRvIHRoZSBtZW1vcnkgcG9vbCB3aGljaCB3YXMgYWxsb2NhdGVkIHZpYVxuLS1cbm1tL21lbXBvb2wuYy0zNTAtICovXG5tbS9tZW1wb29sLmM6MzUxOmludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpXG5tbS9tZW1wb29sLmMtMzUyLXtcbi0tXG5tbS9tZW1wb29sLmMtMzc0LX1cbm1tL21lbXBvb2wuYzozNzU6RVhQT1JUX1NZTUJPTChtZW1wb29sX3Jlc2l6ZSk7XG5tbS9tZW1wb29sLmMtMzc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgbWVtcG9vbF9yZXNpemVgIFBhdGNoKioKCk9rYXksIHNvIGBtZW1wb29sX3Jlc2l6ZWAgaXMgdXNlZCBpbiBhIGZldyBwbGFjZXMg4oCTIGBibG9jay9ibGstem9uZWQuY2AsIGBkcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jYCwgYW5kIGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoJiMzOTtzIGltcGxpY2F0aW9ucy4gIFJpZ2h0LCBJIHNlZSBpdC4gVGhlIGNoYW5nZSBtYWtlcyBgbWVtcG9vbF9yZXNpemVgIHJldHVybiBgLUVOT1NQQ2AgaWYgdGhlIHJlcXVlc3RlZCBgbmV3X21pbl9ucmAgZXhjZWVkcyB0aGUgYHBvb2wtJmd0O21heF9ucmAuIEFuZCBgbWVtcG9vbF9jcmVhdGVgIG5vdyBpbml0aWFsaXplcyBgbWF4X25yYCB0byBkb3VibGUgdGhlIGluaXRpYWwgYG1pbl9ucmAuICBUaGF0IG1lYW5zIGlmIEkgY2FsbCBgbWVtcG9vbF9yZXNpemVgIHdpdGggYSBgbmV3X21pbl9ucmAgZ3JlYXRlciB0aGFuIHR3aWNlIHRoZSAqaW5pdGlhbCogbWluaW11bSwgaXQmIzM5O3MgZ29pbmcgdG8gZmFpbC4gIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCBwbGF5cyBvdXQgaW4gYGZzL3NtYi9jbGllbnQvY29ubmVjdC5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaWZzX3JlcV9wb29scCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9NDE0PW1lbXBvb2xfdCAqY2lmc19zbV9yZXFfcG9vbHA7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjQxNTptZW1wb29sX3QgKmNpZnNfcmVxX3Bvb2xwO1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYy00MTYtbWVtcG9vbF90IGNpZnNfbWlkX3Bvb2w7XG4tLVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYz0xNzM2PWNpZnNfaW5pdF9yZXF1ZXN0X2J1ZnModm9pZClcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE3NzEtXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjE3NzI6XHRjaWZzX3JlcV9wb29scCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChjaWZzX21pbl9yY3YsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE3NzMtXHRcdFx0XHRcdFx0ICBjaWZzX3JlcV9jYWNoZXApO1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzc0LVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxNzc1Olx0aWYgKGNpZnNfcmVxX3Bvb2xwID09IE5VTEwpIHtcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTc3Ni1cdFx0a21lbV9jYWNoZV9kZXN0cm95KGNpZnNfcmVxX2NhY2hlcCk7XG4tLVxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzkwLVx0aWYgKGNpZnNfc21fcmVxX2NhY2hlcCA9PSBOVUxMKSB7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjE3OTE6XHRcdG1lbXBvb2xfZGVzdHJveShjaWZzX3JlcV9wb29scCk7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE3OTItXHRcdGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApO1xuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTgwNi1cdGlmIChjaWZzX3NtX3JlcV9wb29scCA9PSBOVUxMKSB7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjE4MDc6XHRcdG1lbXBvb2xfZGVzdHJveShjaWZzX3JlcV9wb29scCk7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE4MDgtXHRcdGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApO1xuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTgxNz1jaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKHZvaWQpXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE4MTgte1xuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxODE5Olx0bWVtcG9vbF9kZXN0cm95KGNpZnNfcmVxX3Bvb2xwKTtcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTgyMC1cdGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApO1xuLS1cbmZzL3NtYi9jbGllbnQvY2lmc2dsb2IuaD0yMTQyPWV4dGVybiBtZW1wb29sX3QgKmNpZnNfc21fcmVxX3Bvb2xwO1xuZnMvc21iL2NsaWVudC9jaWZzZ2xvYi5oOjIxNDM6ZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7XG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmgtMjE0NC1leHRlcm4gbWVtcG9vbF90IGNpZnNfbWlkX3Bvb2w7XG4tLVxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MTA1OT1jbGVhbl9kZW11bHRpcGxleF9pbmZvKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcilcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMTQ4LVx0aWYgKGxlbmd0aCBcdTAwM2UgMClcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jOjExNDk6XHRcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggJiM0MzsgY2lmc19taW5fcmN2KTtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTExNTAtfVxuLS1cbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jPTEyNTQ9Y2lmc19kZW11bHRpcGxleF90aHJlYWQodm9pZCAqcClcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMjcxLVx0aWYgKGxlbmd0aCBcdTAwM2UgMSlcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jOjEyNzI6XHRcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggJiM0MzsgY2lmc19taW5fcmN2KTtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTEyNzMtXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmM9MTg3PWNpZnNfYnVmX2dldCh2b2lkKVxuLS1cbmZzL3NtYi9jbGllbnQvbWlzYy5jLTIwMS1cdCAqL1xuZnMvc21iL2NsaWVudC9taXNjLmM6MjAyOlx0cmV0X2J1ZiA9IG1lbXBvb2xfYWxsb2MoY2lmc19yZXFfcG9vbHAsIEdGUF9OT0ZTKTtcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTIwMy1cbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYz0yMTY9Y2lmc19idWZfcmVsZWFzZSh2b2lkICpidWZfdG9fZnJlZSlcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYy0yMjEtXHR9XG5mcy9zbWIvY2xpZW50L21pc2MuYzoyMjI6XHRtZW1wb29sX2ZyZWUoYnVmX3RvX2ZyZWUsIGNpZnNfcmVxX3Bvb2xwKTtcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTIyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBTTUIgQ2xpZW50IFZ1bG5lcmFiaWxpdGllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYGZzL3NtYi9jbGllbnQvY29ubmVjdC5jYCBhbmQgaW1tZWRpYXRlbHkgYSByZWQgZmxhZyBwb3BzIHVwLiBJdCYjMzk7cyB0aGUgYG1lbXBvb2xfcmVzaXplYCBmdW5jdGlvbiBjYWxsLiBUaGV5JiMzOTtyZSB0cnlpbmcgdG8gcmVzaXplIGBjaWZzX3JlcV9wb29scGAsIGFuZCB0aGF0IHBvb2wgd2FzIGluaXRpYWxseSBjcmVhdGVkIHdpdGggYGNpZnNfbWluX3JjdmAsIHdoaWNoIGlzIDY0LiBTbywgdGhlIGluaXRpYWwgc2l6ZSwgYW5kIHRoZXJlZm9yZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMsIGlzIDEyOCAoNjQqMiwgSSBhbSBhc3N1bWluZyB0aGlzLCBiYXNlZCBvbiBleHBlcmllbmNlKS4KCk5vdywgaWYgYGxlbmd0aCAmIzQzOyBjaWZzX21pbl9yY3ZgIGlzICpncmVhdGVyKiB0aGFuIDEyOCwgYG1lbXBvb2xfcmVzaXplYCBpcyBnb2luZyB0byBmYWlsLCB3aGljaCBpcyBleGFjdGx5IHRoZSBwb2ludC4KClRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBgbGVuZ3RoYCBpcyBlcXVhbCB0byBgYXRvbWljX2RlY19yZXR1cm4oJmFtcDt0Y3BTZXNBbGxvY0NvdW50KWAuIElmIGB0Y3BTZXNBbGxvY0NvdW50YCBzb21laG93IGVuZHMgdXAgYmVpbmcgbGFyZ2UsIHRoZW4gdGhhdCBhZGRpdGlvbiB3aWxsIGNhdXNlIGFuIG92ZXJmbG93LiAqQW5kKiwgdG8gYWRkIGluc3VsdCB0byBpbmp1cnksIHRoZSByZXR1cm4gdmFsdWUgb2YgYG1lbXBvb2xfcmVzaXplYCBpcyAqaWdub3JlZCohIFRoaXMgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSBkZW5pYWwtb2Ytc2VydmljZSBvciBldmVuIGEgbW9yZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHksIHBhcnRpY3VsYXJseSBpZiB0aGF0IGBsZW5ndGhgIGlzIGF0dGFja2VyLWNvbnRyb2xsZWQuIEEgbWVtb3J5IHBvb2wgcmVzaXplIGZhaWx1cmUgaW4gYSBjcml0aWNhbCBwYXRoIGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIGFsd2F5cyBnb3QgbXkgYXR0ZW50aW9uLgoKSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBleHBsb2l0YXRpb24gdmVjdG9ycywgYnV0IEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGVsbGluZyBtZSB0aGlzIGlzbiYjMzk7dCB0aGUgb25seSBwbGFjZSB0aGlzIGxvZ2ljIGlzIG9jY3VycmluZy4gTGV0JiMzOTtzIHNlZSBpZiBzb21ldGhpbmcgc2ltaWxhciBvY2N1cnMgaW4gYHpmY3BfZXJwLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb29sX3Jlc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYz04Njk9c3RhdGljIGVudW0gemZjcF9lcnBfYWN0X3Jlc3VsdCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X29wZW5fZnNmKFxuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYzo4ODQ6XHRpZiAobWVtcG9vbF9yZXNpemUoYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhLFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYy04ODUtXHRcdFx0ICAgYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlc3RhdF9yZWFkX2J1Zl9udW0pKVxuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg3LVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYzo4ODg6XHRpZiAobWVtcG9vbF9yZXNpemUoYWN0LVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9vbC5zdGF0dXNfcmVhZF9yZXEsXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4OS1cdFx0XHQgICBhY3QtXHUwMDNlYWRhcHRlci1cdTAwM2VzdGF0X3JlYWRfYnVmX251bSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZToKCioqQW5hbHl6aW5nIGB6ZmNwX2VycC5jYCYjMzk7cyBFcnJvciBIYW5kbGluZyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgYHpmY3BfZXJwLmNgICpkb2VzKiBzZWVtIHRvIGJlIGNoZWNraW5nIHJldHVybiB2YWx1ZXMg4oCTIHRoYXQmIzM5O3MgZ29vZCBwcmFjdGljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgZXNwZWNpYWxseSBjb25jZXJuaW5nIGVycm9yIGNvbmRpdGlvbnMuIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGV5IGFyZSBoYW5kbGVkLCBzbyBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZS4gTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY2hlY2sgYW5kIHVuZGVyc3RhbmQgaG93IGBzcl9kYXRhYCBpcyBiZWluZyBjb25zdHJ1Y3RlZC4gS25vd2luZyBob3cgdGhlIGRhdGEgaXMgY3JlYXRlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIHN0YXRlcywgYW5kIHRoZXJlZm9yZSwgaG93IGVycm9ycyBtaWdodCBhcmlzZSBhbmQgYmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG9vbC5zcl9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL3Njc2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM9MjA2PXN0YXRpYyBpbnQgemZjcF9hbGxvY2F0ZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jLTIzOS1cdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIpIFx1MDAzZSBQQUdFX1NJWkUpO1xuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYzoyNDA6XHRhZGFwdGVyLVx1MDAzZXBvb2wuc3JfZGF0YSA9XG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jLTI0MS1cdFx0bWVtcG9vbF9jcmVhdGVfcGFnZV9wb29sKEZTRl9TVEFUVVNfUkVBRFNfUkVDT00sIDApO1xuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYzoyNDI6XHRpZiAoIWFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhKVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYy0yNDMtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM9MjUzPXN0YXRpYyB2b2lkIHpmY3BfZnJlZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jLTI1OS1cdG1lbXBvb2xfZGVzdHJveShhZGFwdGVyLVx1MDAzZXBvb2wuc3RhdHVzX3JlYWRfcmVxKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM6MjYwOlx0bWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMtMjYxLVx0bWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItXHUwMDNlcG9vbC5naWRfcG4pO1xuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM9ODY5PXN0YXRpYyBlbnVtIHpmY3BfZXJwX2FjdF9yZXN1bHQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4My1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg0Olx0aWYgKG1lbXBvb2xfcmVzaXplKGFjdC1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvb2wuc3JfZGF0YSxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg1LVx0XHRcdCAgIGFjdC1cdTAwM2VhZGFwdGVyLVx1MDAzZXN0YXRfcmVhZF9idWZfbnVtKSlcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jPTI1Nz1zdGF0aWMgdm9pZCB6ZmNwX2ZzZl9zdGF0dXNfcmVhZF9oYW5kbGVyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSlcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTI2My1cdFx0emZjcF9kYmZfaGJhX2ZzZl91c3MoXCYjMzQ7ZnNzcmhfMVwmIzM0OywgcmVxKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6MjY0Olx0XHRtZW1wb29sX2ZyZWUodmlydF90b19wYWdlKHNyX2J1ZiksIGFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtMjY1LVx0XHR6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpO1xuLS1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtMzIyLVxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYzozMjM6XHRtZW1wb29sX2ZyZWUodmlydF90b19wYWdlKHNyX2J1ZiksIGFkYXB0ZXItXHUwMDNlcG9vbC5zcl9kYXRhKTtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtMzI0LVx0emZjcF9mc2ZfcmVxX2ZyZWUocmVxKTtcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jPTkyOD1pbnQgemZjcF9mc2Zfc3RhdHVzX3JlYWQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbylcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk0Ny1cbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6OTQ4Olx0cGFnZSA9IG1lbXBvb2xfYWxsb2MoYWRhcHRlci1cdTAwM2Vwb29sLnNyX2RhdGEsIEdGUF9BVE9NSUMpO1xuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYy05NDktXHRpZiAoIXBhZ2UpIHtcbi0tXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk2OC1cdHJlcS1cdTAwM2VkYXRhID0gTlVMTDtcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6OTY5Olx0bWVtcG9vbF9mcmVlKHZpcnRfdG9fcGFnZShzcl9idWYpLCBhZGFwdGVyLVx1MDAzZXBvb2wuc3JfZGF0YSk7XG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk3MC1mYWlsZWRfYnVmOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbXBvb2wgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hhbmdlIHRvIHRoZSBgbWVtcG9vbGAgc2V0dXAuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgbWVtcG9vbF9jcmVhdGVfcGFnZV9wb29sYCwgd2hpY2gsIGJhc2VkIG9uIGBGU0ZfU1RBVFVTX1JFQURTX1JFQ09NYCAod2hpY2ggaXMgNjQpLCBzZXRzIHRoZSBgbWF4X25yYCB0byAxMjguIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVhZCBidWZmZXJzLiBUaGUgd29ycnkgaXMgdGhhdCBgYWN0LSZndDthZGFwdGVyLSZndDtzdGF0X3JlYWRfYnVmX251bWAgY291bGQgZXhjZWVkIHRoYXQsIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy4KCkJ1dCB3YWl0LCB0aGUgcGF0Y2ggKnJlcGxhY2VzKiB0aGF0IHdpdGggYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIGFuZCBgbWVtcG9vbF9pbml0X2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBpcyBoYW5kbGVkLiBBbmQgdGhleSYjMzk7dmUgYWxzbyBjaGFuZ2VkIHRoZSB1bmRlcmx5aW5nIGBtZW1wb29sX2NyZWF0ZWAgbWFjcm8uIE5vdywgYG1heF9ucmAgaXMgZHluYW1pY2FsbHkgc2V0IHRvIHR3aWNlIGBtaW5fbnJgLiBUaGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSDigJMgYSByZS1hcmNoaXRlY3Rpbmcgb2YgdGhlIG1lbW9yeSBwb29sIGFuZCByZXNpemluZyBiZWhhdmlvci4gVGhpcyBpcyBub3QganVzdCBhIHR3ZWFrOyBpdOKAmXMgYSBmdW5kYW1lbnRhbCBhbHRlcmF0aW9uIHRvIGhvdyB0aGVzZSBtZW1vcnkgcG9vbHMgd29yay4KClRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiwgcmFjZSBjb25kaXRpb25zLCBvciBhbGxvY2F0aW9uIGlzc3VlcyBpcyBzaWduaWZpY2FudGx5IGluY3JlYXNlZCB3aXRoIHRoaXMgY2hhbmdlLiBJdOKAmXMgZ290IHRvIGJlIHRob3JvdWdobHkgdGVzdGVkLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29udGV4dC4gV2UmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgYENPTkZJR19CTEtfREVWX1pPTkVEYCBmb3IgYGJsay16b25lZC5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSByZWxldmFudCB0byB6b25lZCBibG9jayBkZXZpY2VzLiBXZSBhbHNvIG5lZWQgYENPTkZJR19CTEtfREVWX05WTUVgIGFuZCBgQ09ORklHX05WTUVfQ09SRWAgZm9yIHRoZSBOVk1lIGhvc3QgUENJIGRyaXZlciAoYG52bWUvaG9zdC9wY2kuY2ApLiBUaGUgYG1lbXBvb2xgIGl0c2VsZiBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBub3QgYSBjb25jZXJuLiBOb3csIEkgc2hvdWxkIG1vdmUgdG8gYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgIGluIGBibG9jay9ibGstem9uZWQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9ibGstem9uZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstem9uZWQuYz0xODg1PXZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTE5MDEtXG5ibG9jay9ibGstem9uZWQuYzoxOTAyOnN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2Jsay16b25lZC5jLTE5MDMtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBwb29sX3NpemUpXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjAzNT1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMDYzLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2gpIHtcbmJsb2NrL2Jsay16b25lZC5jOjIwNjQ6XHRcdHJldCA9IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoZGlzaywgcG9vbF9zaXplKTtcbmJsb2NrL2Jsay16b25lZC5jLTIwNjUtXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTgzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDoKCioqTXkgWm9uZSBSZXNvdXJjZSBWYWxpZGF0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhhdCB3aGVuIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSB6b25lIHJlc291cmNlcyBvbiBhIGRpc2ssIGEgZnVuY3Rpb24gbmFtZWQgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AgZ2V0cyB0aGUgY2FsbC4gTm93LCB0aGF0IGZ1bmN0aW9uLCBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYCwgaXMgZXNzZW50aWFsIGJlY2F1c2UgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIG91ciBkaXNrJiMzOTtzIHpvbmUgcmVzb3VyY2VzIGFyZSwgd2VsbCwgKnZhbGlkYXRlZCouIFdoZXJlIGRvZXMgdGhpcyB2YWxpZGF0aW9uIHByb2Nlc3MgYmVnaW4/IEl0IGluaXRpYXRlcyBhIGNhbGwgdG8gYW5vdGhlciBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYC4gVGhlcmVmb3JlLCB0byBhbGxvY2F0ZSB0aGUgcmVzb3VyY2VzLCB3ZSBtYWtlIHRoZSBjYWxsIHRvIGFsbG9jYXRlIHRoZSByZXNvdXJjZXMuIEl0IGFsbCBzdGFydHMgd2l0aCBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AsIHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBicm9hZGVyIG1lY2hhbmlzbSwgYW5kICp0aGF0KiBpcyB3aGF0IHRoZW4gdHJpZ2dlcnMgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AuIFNvLCBpdCYjMzk7cyBhIGNhc2NhZGluZyBwcm9jZXNzLCBzdGFydGluZyBhdCB0aGUgYmxvY2sgbGF5ZXIgYW5kIHdvcmtpbmcgaXRzIHdheSBkb3duIHRvIHJlc291cmNlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9NTAzPXN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtNTI4LVx0ICogYXR0YWNoZWQgdG8gdGhlIGRpc2ssIHRoZW4gdGhpcyBpcyBhIHpvbmUgd3JpdGUgcGx1ZyBpbnNlcnQgZnJvbSB0aGVcbmJsb2NrL2Jsay16b25lZC5jOjUyOTpcdCAqIGZpcnN0IGNhbGwgdG8gYmxrX3JldmFsaWRhdGVfZGlza196b25lcygpLCBpbiB3aGljaCBjYXNlIHRoZSB6b25lIGlzXG5ibG9jay9ibGstem9uZWQuYy01MzAtXHQgKiBuZWNlc3NhcmlsbHkgaW4gdGhlIGFjdGl2ZSBjb25kaXRpb24uXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjI1MD1zdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY2Ioc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTIzMTktLyoqXG5ibG9jay9ibGstem9uZWQuYzoyMzIwOiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMgLSAocmUpYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgem9uZSB3cml0ZSBwbHVnc1xuYmxvY2svYmxrLXpvbmVkLmMtMjMyMS0gKiBAZGlzazpcdFRhcmdldCBkaXNrXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjMzMS0gKi9cbmJsb2NrL2Jsay16b25lZC5jOjIzMzI6aW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9ibGstem9uZWQuYy0yMzMzLXtcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yNDA4LX1cbmJsb2NrL2Jsay16b25lZC5jOjI0MDk6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3JldmFsaWRhdGVfZGlza196b25lcyk7XG5ibG9jay9ibGstem9uZWQuYy0yNDEwLVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYz0xNzU9aW50IG51bGxfcmVnaXN0ZXJfem9uZWRfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoxODQ6XHRyZXR1cm4gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODUtfVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01MDM9c3RhdGljIGludCB1YmxrX2dldF9ucl96b25lcyhjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MTAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTExOnN0YXRpYyBpbnQgdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IHVibGtfZGV2aWNlICp1YilcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MTIte1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUxMzpcdHJldHVybiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHViLVx1MDAzZXViX2Rpc2spO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUxNC19XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTcxNz1zdGF0aWMgdm9pZCB1YmxrX2Rldl9wYXJhbV96b25lZF9hcHBseShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03MjAtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzIxOnN0YXRpYyBpbnQgdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IHVibGtfZGV2aWNlICp1YilcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy03MjIte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00NDEzPXN0YXRpYyBpbnQgdWJsa19jdHJsX3N0YXJ0X2RldihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NTQyLVx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSkge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjQ1NDM6XHRcdHJldCA9IHVibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHViKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00NTQ0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTE0MzY9c3RhdGljIGludCB2aXJ0YmxrX3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1MzUtXHQgICAgKGxpbS5mZWF0dXJlcyBcdTAwMjYgQkxLX0ZFQVRfWk9ORUQpKSB7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxNTM2Olx0XHRlcnIgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHZibGstXHUwMDNlZGlzayk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTM3LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTczPXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMxMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMzExOlx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyh6bG8tXHUwMDNlZGlzayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMxMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9tZC9kbS16b25lLmM9MTUwPWJvb2wgZG1faXNfem9uZV93cml0ZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbylcbi0tXG5kcml2ZXJzL21kL2RtLXpvbmUuYy0xNjgtICogZm9yIHpvbmUgYXBwZW5kIGVtdWxhdGlvbi4gTm90ZSB0aGF0IHdlIGNhbm5vdCBzaW1wbHkgdXNlIHRoZSBibG9jayBsYXllclxuZHJpdmVycy9tZC9kbS16b25lLmM6MTY5OiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSBmdW5jdGlvbiBoZXJlIGFzIHRoZSBtYXBwZWQgZGV2aWNlIGlzIHN1c3BlbmRlZFxuZHJpdmVycy9tZC9kbS16b25lLmMtMTcwLSAqICh0aGlzIGlzIGNhbGxlZCBmcm9tIF9fYmluZCgpIGNvbnRleHQpLlxuLS1cbmRyaXZlcnMvbWQvZG0tem9uZS5jPTE3Mj1pbnQgZG1fcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuLS1cbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE5OC1cdG1kLVx1MDAzZXJldmFsaWRhdGVfbWFwX3Rhc2sgPSBjdXJyZW50O1xuZHJpdmVycy9tZC9kbS16b25lLmM6MTk5Olx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTIwMC1cdG1kLVx1MDAzZXJldmFsaWRhdGVfbWFwX3Rhc2sgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzY5PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0NzMtXHRpZiAoYmxrX3F1ZXVlX2lzX3pvbmVkKG5zLVx1MDAzZXF1ZXVlKSkge1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI0NzQ6XHRcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMobnMtXHUwMDNlZGlzayk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ3NS1cdFx0aWYgKHJldCBcdTAwMjZcdTAwMjYgIW52bWVfZmlyc3Rfc2Nhbihucy1cdTAwM2VkaXNrKSlcbi0tXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTE5PXN0YXRpYyB2b2lkIHNkX3piY19wcmludF96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxuLS1cbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01MzYtLypcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1Mzc6ICogQ2FsbCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCkgaWYgYW55IG9mIHRoZSB6b25lZCBkaXNrIHByb3BlcnRpZXMgaGF2ZVxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTUzOC0gKiBjaGFuZ2VkIHRoYXQgbWFrZSBpdCBuZWNlc3NhcnkgdG8gY2FsbCB0aGF0IGZ1bmN0aW9uLiBDYWxsZWQgYnlcbi0tXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTQxPWludCBzZF96YmNfcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxuLS1cbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01NjUtXHRmbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuZHJpdmVycy9zY3NpL3NkX3piYy5jOjU2NjpcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoZGlzayk7XG5kcml2ZXJzL3Njc2kvc2RfemJjLmMtNTY3LVx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTQ1Mz1pbnQgYmxrZGV2X3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBlbnVtIHJlcV9vcCBvcCxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNDU0LVx0XHRzZWN0b3JfdCBzZWN0b3JzLCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6NDU1OmludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKTtcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtNDU2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcxNQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBEaXNrIFJlc291cmNlcyB2aWEgWm9uZWQgRGV2aWNlcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCBpcyBhIGtleSBmdW5jdGlvbiwgdHJpZ2dlcmVkIGJ5IGEgd2lkZSByYW5nZSBvZiBibG9jayBkZXZpY2UgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBgbnVsbF9ibGtgICh6b25lZCBkZXZpY2UgdGVzdGluZyEpLCBgdWJsa2AsIGB2aXJ0aW9fYmxrYCwgYHpsb29wYCwgYGRtYCwgYG52bWVgLCBhbmQgdGhlIFNDU0kgem9uZWQgZGV2aWNlIGNvZGUgKGBzZF96YmNgKS4gVGhhdCBtZWFucyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgcHJldHR5IGVhc2lseSByZWFjaGVkIHRocm91Z2ggc2V2ZXJhbCBkcml2ZXJzLiBUaGlzIGdpdmVzIG1lIGFuIGlkZWEuLi4gYG51bGxfYmxrYCBpcyBhbiBleGNlbGxlbnQgY2hvaWNlIGZvciB0ZXN0aW5nIHpvbmVkIGJsb2NrIGRldmljZSBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyBhIGNsZWFuIHNsYXRlIHRvIHdvcmsgd2l0aC4gSSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgYWxvbmcgd2l0aCB0aGUgb2J2aW91cyBgQ09ORklHX0JMS19ERVZfWk9ORURgIG9mIGNvdXJzZS4KCk5vdywgd2hhdCYjMzk7cyB0aGlzIGFib3V0IGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGA/IEkgbmVlZCB0byBsb29rIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvaG9zdC9wY2kuYz0zMzQwPXN0YXRpYyBpbnQgbnZtZV9kaXNhYmxlX3ByZXBhcmVfcmVzZXQoc3RydWN0IG52bWVfZGV2ICpkZXYsIGJvb2wgc2h1dGRvd24pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMzM0Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjMzNDg6c3RhdGljIGludCBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTMzNDkte1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTM3NDE9c3RhdGljIGludCBudm1lX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMzc1Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjM3NTg6XHRyZXN1bHQgPSBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChkZXYpO1xuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMzc1OS1cdGlmIChyZXN1bHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDU1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBOVk1lIFBDSSBEcml2ZXIgYW5kIE1lbW9yeSBQb29sIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBgbnZtZV9wcm9iZWAgZnVuY3Rpb24uIFRoaXMgb25seSBoYXBwZW5zIGlmIHdlIGFjdHVhbGx5IGhhdmUgYW4gTlZNZSBQQ0kgZGV2aWNlIGRldGVjdGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIGBDT05GSUdfQkxLX0RFVl9OVk1FYCBjb25maWcgb3B0aW9uIGlzIHdoYXQgY29udHJvbHMgdGhhdCBkcml2ZXIsIHNvIHRoYXQgbWFrZXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlc2UgbWVtb3J5IHBvb2wgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoZXJlIHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGxpZS4gSSBzZWUgdGhhdCBgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbGAgYW5kIGBtZW1wb29sX2luaXRfa21hbGxvY19yZXNpemFibGVfcG9vbGAgYXJlIG1hY3JvcyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L21lbXBvb2wuaGAuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHRoZXNlLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEl0IGFsc28gbW9kaWZpZXMgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCwgYG1lbXBvb2xfaW5pdF9ub2RlYCwgYW5kIGBtZW1wb29sX3Jlc2l6ZWAuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoaWNoIGZ1bmN0aW9ucyB3b3VsZCBiZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uOgoKKiAgIGBtZW1wb29sX3Jlc2l6ZWAKKiAgIGBtZW1wb29sX2luaXRfbm9kZWAKKiAgIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAKKiAgIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYAoqICAgYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYAoKQWgsIHdhaXQgYSBzZWNvbmQuLi4gYG1lbXBvb2xfcmVzaXplYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzYCBpbiBgYmxvY2svYmxrLXpvbmVkLmNgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgTlZNZSBkcml2ZXImIzM5O3MgbWVtb3J5IHBvb2wgYW5kIHRoZSB6b25lZCBibG9jayBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGV4cGxvcmUgdGhhdCBjb25uZWN0aW9uIHRob3JvdWdobHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHNldCB1cCB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCB0ZXN0IGNhc2VzLCBwYXJ0aWN1bGFybHkgdGhlIGludGVycGxheSBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MjAzNT1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMDc1LSAqL1xuYmxvY2svYmxrLXpvbmVkLmM6MjA3NjpzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuYmxvY2svYmxrLXpvbmVkLmMtMjA3Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjMzMj1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMzkyLVxuYmxvY2svYmxrLXpvbmVkLmM6MjM5MzpcdHJldCA9IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssIFx1MDAyNmFyZ3MpO1xuYmxvY2svYmxrLXpvbmVkLmMtMjM5NC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzgwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTAwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtZW1wb29sX3Jlc2l6ZWAgUGF0Y2ggSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2ggdGhhdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYG1lbXBvb2xfcmVzaXplYC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgc2hpZnRpbmcgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYG1lbXBvb2xfcmVzaXplYCB0byBzaW1wbHkgYWRqdXN0aW5nIGBtaW5fbnJgIGFuZCByZWx5aW5nIG9uIGBtYXhfbnJgIGZvciBhbGxvY2F0aW9uLgoKSW5pdGlhbGx5LCBJIHNlZSB0aGF0IGBtZW1wb29sX3Jlc2l6ZWAgaXMgZGlyZWN0bHkgY2FsbGVkIGZyb20gYGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzYCwgd2hpY2ggaXMgdXNlZCBpbiByZXZhbGlkYXRpbmcgem9uZWQgYmxvY2sgZGV2aWNlcywgYW5kIHRodXMgYG1lbXBvb2xfcmVzaXplYCBpcyBpbnZva2VkIHdpdGhpbiB0aGF0IHByb2Nlc3MuCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBJIHNlZSBpbiBgZnMvc21iL2NsaWVudC9jb25uZWN0LmNgIHRoYXQgYG1lbXBvb2xfcmVzaXplYCBpcyBjYWxsZWQgZnJvbSBgY2xlYW5fZGVtdWx0aXBsZXhfaW5mb2AgYW5kIGBjaWZzX2RlbXVsdGlwbGV4X3RocmVhZGAsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4gQWxzbywgdW5kZXIgYGRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmNgIHRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSBpZiB3ZSBoYXZlIGBDT05GSUdfWkZDUGAgZW5hYmxlZC4gVGhpcyBnaXZlcyBhIGJyb2FkIHNlbnNlIG9mIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuCgpUaGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoYXQgdGhpcyBuZXcgYXBwcm9hY2ggdG8gYG1lbXBvb2xfcmVzaXplYCB3aWxsIG5vdyBwb3RlbnRpYWxseSByZXR1cm4gYC1FTk9TUENgIGlmIHRoZSByZXF1ZXN0ZWQgYG5ld19taW5fbnJgIGV4Y2VlZHMgYHBvb2wtJmd0O21heF9ucmAuIEkgZHVnIGludG8gdGhlIGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AgY29kZSBhbmQgaXQgbG9va3MgbGlrZSBhIHJlc2l6ZSBmYWlsdXJlIGNvdWxkIGhhcHBlbiBiZWNhdXNlIHRoZSBgbGVuZ3RoICYjNDM7IGNpZnNfbWluX3JjdmAgbWlnaHQgZXhjZWVkIGBtYXhfbnJgLiBJIG5vdGljZWQgdGhhdCB0aGUgYGNpZnNfcmVxX3Bvb2xwYCBpcyBjcmVhdGVkIHdpdGggYSBgY2lmc19taW5fcmN2YCB2YWx1ZSBvZiA2NCwgYW5kIHRoZSBgbWF4X25yYCBpcyBpbml0aWFsaXplZCB0byAxMjguIElmIGBsZW5ndGhgIGlzIHRoZW4gZ3JlYXRlciB0aGFuIDY0LCB0aGlzIG5ldyBjaGVjayBtaWdodCBmYWlsLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBtZW1wb29sX3Jlc2l6ZWAgaXMgaWdub3JlZCBpbiB0aGF0IGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIHJlc2l6ZSB3aWxsIGZhaWwsIGFuZCB0aGUgcG9vbCB3aWxsIHN0aWxsIGhhdmUgaXRzIGBtaW5fbnJgIGVsZW1lbnRzLCBwb3NzaWJseSBjYXVzaW5nIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLCBidXQgbm90IGEgY3Jhc2guCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBtZW1wb29sX2Rlc3Ryb3lgLiBUaGUgcGF0Y2ggY2hhbmdlcyBgbWVtcG9vbF9leGl0YCB0byB1c2UgYGt2ZnJlZShwb29sLSZndDtlbGVtZW50cylgIGluc3RlYWQgb2YgYGtmcmVlKHBvb2wtJmd0O2VsZW1lbnRzKWAuIFRoaXMgaXMgYmVjYXVzZSBgbWVtcG9vbF9pbml0X25vZGVgIGlzIG5vdyB1c2luZyBga3ZtYWxsb2NfYXJyYXlfbm9kZV9ub3Byb2ZgIGluc3RlYWQgb2YgYGttYWxsb2NfYXJyYXlfbm9kZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGluIHVzZS4KCkkgYWxzbyBjaGVja2VkIGBtZW1wb29sX2luaXRfbm9kZWAgaW4gYG1tL21lbXBvb2wuY2AuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYG1heF9ucmAgYXMgYSBwYXJhbWV0ZXIuIFRoZSBwYXRjaCBoYXMgY2hhbmdlZCBgbWVtcG9vbF9pbml0X25vcHJvZmAgdG8gcGFzcyBgbWluX25yICogMmAgYXMgYG1heF9ucmAuIEkgY2FuIHNlZSB0aGlzIGluIHRoZSBjb2RlIGhlcmUuCgpBbHNvLCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgIHRha2VzIGBtYXhfbnJgIGFzIGEgcGFyYW1ldGVyLiBUaGUgc2lnbmF0dXJlIGZvciBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgIGhhcyBjaGFuZ2VkLgoKRmluYWxseSwgdGhlIGBtZW1wb29sX2NyZWF0ZV9ub2RlYCBtYWNybyBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQuIFRoaXMgbWFrZXMgbWUgd29uZGVyIGlmIGFsbCBjYWxsZXJzIG9mIGBtZW1wb29sX2NyZWF0ZV9ub2RlYCBoYXZlIGJlZW4gcHJvcGVybHkgdXBkYXRlZC4gU28sIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgY2FsbGVycyBvZiBgbWVtcG9vbF9jcmVhdGVfbm9kZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvb2xfY3JlYXRlX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MzM0OD1zdGF0aWMgaW50IG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sKHN0cnVjdCBudm1lX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTMzNTEtXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzozMzUyOlx0ZGV2LVx1MDAzZWRtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLCAyLFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMzM1My1cdFx0XHRtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9NTE9c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlKGludCBtaW5fbnIsIG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC01Mi1cdFx0bWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7XG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo1MzpzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU0LVx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU1LVx0XHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkKTtcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oOjU2OiNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfbm9kZSguLi4pXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo1NzpcdGFsbG9jX2hvb2tzKG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU4LVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNTktI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfZGF0YSlcdFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo2MDpcdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgKF9taW5fbnIpKjIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sXHRcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNjEtXHRcdFx0ICAgIF9kYXRhLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9OTc9dm9pZCBtZW1wb29sX2tmcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtMTA5LSNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6MTEwOlx0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXHRcdFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC0xMTEtXHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKShfc2l6ZSksIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbi0tXG5tbS9tZW1wb29sLmM9MjkzPUVYUE9SVF9TWU1CT0wobWVtcG9vbF9pbml0X25vcHJvZik7XG4tLVxubW0vbWVtcG9vbC5jLTI5NS0vKipcbm1tL21lbXBvb2wuYzoyOTY6ICogbWVtcG9vbF9jcmVhdGVfbm9kZSAtIGNyZWF0ZSBhIG1lbW9yeSBwb29sXG5tbS9tZW1wb29sLmMtMjk3LSAqIEBtaW5fbnI6ICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBndWFyYW50ZWVkIHRvIGJlXG4tLVxubW0vbWVtcG9vbC5jLTMxMy0gKi9cbm1tL21lbXBvb2wuYzozMTQ6c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXG5tbS9tZW1wb29sLmMtMzE1LVx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbi0tXG5tbS9tZW1wb29sLmMtMzMxLX1cbm1tL21lbXBvb2wuYzozMzI6RVhQT1JUX1NZTUJPTChtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZik7XG5tbS9tZW1wb29sLmMtMzMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTA3MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGBtZW1wb29sX2NyZWF0ZV9ub2RlYCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYG1lbXBvb2xfY3JlYXRlX25vZGVgIGlzIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgc2VlbXMgbGlrZSB0aGUgb25seSBkaXJlY3QgY2FsbCBpcyBpbiBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgLCBhbG9uZ3NpZGUgaXRzIHVzYWdlIHdpdGhpbiB0aGUgYG1lbXBvb2xfY3JlYXRlYCBhbmQgYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIG1hY3Jvcy4gVGhpcyBmZWVscyBhIGJpdCBsaW1pdGVkLCBhbmQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QsIHNvIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBieSBzZWFyY2hpbmcgZm9yIG90aGVyIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIExldCYjMzk7cyBzZWUgaWYgdGhlIGdyZXBwZXIgaGFzIG90aGVyIGVudHJpZXMuCgpUaGUgb3V0cHV0IGxvb2tzIGNsZWFuLiBKdXN0IGBkcml2ZXJzL252bWUvaG9zdC9wY2kuY2AgYW5kIHdoZXJlIHRoZSBoZWFkZXIgZmlsZSBkZWNsYXJlcyBpdCBpbiBgaW5jbHVkZS9saW51eC9tZW1wb29sLmhgLgoKSG1tLCB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgcmVsYXRlZCB0byBtZW1wb29sIGluaXRpYWxpemF0aW9uLiBXaGF0IGFib3V0IGBtZW1wb29sX2luaXRfbm9kZWA/IFRoYXQgbWlnaHQgYmUgYSByZWxhdGVkIGFyZWEgSSBuZWVkIHRvIGNvbnNpZGVyIGFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1wb29sX2luaXRfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbXBvb2wuaD00MT12b2lkIG1lbXBvb2xfZXhpdChzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo0MjppbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC00My1cdFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9OTc9dm9pZCBtZW1wb29sX2tmcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtMTA2LSNkZWZpbmUgbWVtcG9vbF9pbml0X2ttYWxsb2NfcmVzaXphYmxlX3Bvb2woX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIF9zaXplKVx0XHRcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6MTA3Olx0bWVtcG9vbF9pbml0X25vZGUoX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcdFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC0xMDgtXHRcdCAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXG4tLVxubW0vbWVtcG9vbC5jPTIzMT1FWFBPUlRfU1lNQk9MKG1lbXBvb2xfZGVzdHJveSk7XG5tbS9tZW1wb29sLmMtMjMyLVxubW0vbWVtcG9vbC5jOjIzMzppbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXG5tbS9tZW1wb29sLmMtMjM0LVx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbi0tXG5tbS9tZW1wb29sLmMtMjY4LX1cbm1tL21lbXBvb2wuYzoyNjk6RVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9kZSk7XG5tbS9tZW1wb29sLmMtMjcwLVxuLS1cbm1tL21lbXBvb2wuYz0yODU9aW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4tLVxubW0vbWVtcG9vbC5jLTI4OC17XG5tbS9tZW1wb29sLmM6Mjg5Olx0cmV0dXJuIG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgbWluX25yICogMiwgYWxsb2NfZm4sIGZyZWVfZm4sXG5tbS9tZW1wb29sLmMtMjkwLVx0XHRcdFx0IHBvb2xfZGF0YSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKTtcbi0tXG5tbS9tZW1wb29sLmM9MzE0PXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLCBpbnQgbWF4X25yLFxuLS1cbm1tL21lbXBvb2wuYy0zMjMtXG5tbS9tZW1wb29sLmM6MzI0Olx0aWYgKG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgbWF4X25yLCBhbGxvY19mbiwgZnJlZV9mbiwgcG9vbF9kYXRhLFxubW0vbWVtcG9vbC5jLTMyNS1cdFx0XHQgICAgICBnZnBfbWFzaywgbm9kZV9pZCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ2FsbGVycyBhbmQgTmVjZXNzYXJ5IENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBtZW1wb29sX2luaXRfbm9kZWAgaXMgb25seSBpbnZva2VkIGJ5IGBtZW1wb29sX2luaXRfbm9wcm9mYCwgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCwgYW5kIHRoYXQgbWFjcm8uLi4gYG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYC4gVGhhdCBjb25maXJtcyB0aGUgcGF0Y2ggSSYjMzk7dmUgYmVlbiByZXZpZXdpbmcgaGFzIGNvcnJlY3RseSB1cGRhdGVkICphbGwqIHRoZSBjYWxsIHNpdGVzLiBFeGNlbGxlbnQsIGdvb2QgdG8ga25vdy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGVzZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoZSBjb25maWdzIHRoYXQgdGhpcyB0aGluZyBuZWVkczogYENPTkZJR19CTEtfREVWX1pPTkVEYCwgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCwgYENPTkZJR19CTEtfREVWX05WTUVgLCBgQ09ORklHX05WTUVfQ09SRWAsIGFuZCBhbHNvIGBDT05GSUdfQ0lGU2AuIEkgYWxzbyBzZWUgdGhhdCBgQ09ORklHX1pGQ1BgIGlzIG5lZWRlZCwgZm9yIHRoaXMgYGRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmNgIGNvZGUuCgpXYWl0IGEgc2Vjb25k4oCmIHdhc24mIzM5O3QgYENPTkZJR19DSUZTYCByZW5hbWVkLCBvciBzb21ldGhpbmc/IElzIGl0IG5vdyBgQ09ORklHX1NNQl9GU2AgKm9yKiBgQ09ORklHX0NJRlNgPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGp1c3QgZ2xhbmNlIGF0IHRoZSBgZnMvc21iL2NsaWVudC9NYWtlZmlsZWAgcmVhbCBxdWljayB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gR290dGEgYmUgcHJlY2lzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qY2lmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9NYWtlZmlsZT01PWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcdFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xuZnMvc21iL2NsaWVudC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DSUZTKSAmIzQzOz0gY2lmcy5vXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ0lGUyBDb25maWd1cmF0aW9uIGFuZCBNYWtlZmlsZSBFeGFtaW5hdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBodW5jaCByZWdhcmRpbmcgYENPTkZJR19DSUZTYCBpcyBzcG90IG9uLiBUaGF0JiMzOTtzIGNvbmZpcm1lZCwgYW5kIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhIGJpdCBmdXJ0aGVyLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgY29udGVudHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgcmVsYXRlZCBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBuZWVkZWQgY29udGV4dC4gSSB3YW50IHRvIHNlZSBob3cgQ0lGUy1yZWxhdGVkIG1vZHVsZXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBzcGVjaWZpYyBTMzkwIGFyY2hpdGVjdHVyZSBjb250ZXh0LCBsb29raW5nIGZvciBhbnkgc3BlY2lmaWMgYnVpbGQgY29uc2lkZXJhdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0uKnpmY3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZT02PXpmY3Atb2JqcyA6PSB6ZmNwX2F1eC5vIHpmY3BfY2N3Lm8gemZjcF9kYmYubyB6ZmNwX2VycC5vIFxcXG4tLVxuZHJpdmVycy9zMzkwL3Njc2kvTWFrZWZpbGUtOS1cbmRyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aRkNQKSAmIzQzOz0gemZjcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTI5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgY2hlY2sgY29uZmlybWVkIHRoYXQgYENPTkZJR19aRkNQYCBpcyBzZXQgYXMgZXhwZWN0ZWQsIHRoYXQmIzM5O3MgZ29vZC4gTm93LCBtb3Zpbmcgb24sIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gYENPTkZJR19CTEtfREVWX05VTExfQkxLYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGlzIGJlaGF2aW5nIGFzIGFudGljaXBhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotLipudWxsX2JsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfQkxLX0RFVl9STkJEKVx0JiM0Mzs9IHJuYmQvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcdCYjNDM7PSBudWxsX2Jsay9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSAmIzQzOz0gcm51bGwvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzgyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBwcm9tcHQgbWVudGlvbnMgYENPTkZJR19CTEtfREVWX05VTExfQkxLYC4gWWVwLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQmIzM5O3MgdGhlICYjMzQ7bnVsbCBibG9jayBkZXZpY2UsJiMzNDsgZXNzZW50aWFsbHkgYSB1c2VmdWwgZGVidWdnaW5nIHRvb2wgb3IgYSBwbGFjZWhvbGRlci4gTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgbW9yZSBpbnRlcmVzdGluZyBhc3BlY3QsIGxldCYjMzk7cyBzZWUsIHdoYXQgd2FzIHRoYXQgb3B0aW9uIGFnYWluLi4uIGFoIHllcywgYENPTkZJR19CTEtfREVWX1pPTkVEYC4gSSBzaG91bGQgcHJvYmFibHkgYnJ1c2ggdXAgb24gdGhhdCwgem9uYWwgc3RvcmFnZSBpcyBiZWNvbWluZyBtb3JlIGFuZCBtb3JlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9aT05FRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZz03Nz1jb25maWcgQkxLX0RFVl9XUklURV9NT1VOVEVEXG4tLVxuYmxvY2svS2NvbmZpZy05Ni1cbmJsb2NrL0tjb25maWc6OTc6Y29uZmlnIEJMS19ERVZfWk9ORURcbmJsb2NrL0tjb25maWctOTgtXHRib29sIFwmIzM0O1pvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIFpvbmVkIEJsb2NrIERldmljZSBTdXBwb3J0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgQ09ORklHX0JMS19ERVZfWk9ORURgIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IHdlIHdhbnQgZm9yIHpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0LiBOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyB0aGluZ3MgcmVsYXRlZCB0byBOVk1lLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHdlIHNlZSB6b25lZCBkZXZpY2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIE5WTWUgY29yZSBhbmQgYmxvY2sgZGV2aWNlIHN1cHBvcnQgYXJlIGFsc28gY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5LiBUaGVyZWZvcmUsIEkgc2hvdWxkIGNoZWNrIHRoYXQgYENPTkZJR19OVk1FX0NPUkVgIGFuZCBgQ09ORklHX0JMS19ERVZfTlZNRWAgYXJlIGFsc28gc2V0LiBNYWtpbmcgc3VyZSB0aG9zZSBhcmUgY29ycmVjdGx5IGVuYWJsZWQgd2lsbCBlbnN1cmUgdGhlIGNvcnJlY3QgbG93IGxldmVsIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgb3RoZXIgcmVsYXRlZCBjb25maWdzIGlmIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5WTUVfQ09SRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzoyOmNvbmZpZyBOVk1FX0NPUkVcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWctMy1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTlZNRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnZtZS9ob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0yPWNvbmZpZyBOVk1FX0NPUkVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTQtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjU6Y29uZmlnIEJMS19ERVZfTlZNRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDk4CgkJCQkJCQlvdXRwdXQ6IDIzMwoJCQkJCQkJdGhvdWdodHM6IDg3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVzLCBgQ09ORklHX0JMS19ERVZfTlZNRWAgaXMgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb25maWdzIHdlJiMzOTtyZSBjb25zaWRlcmluZyBhcmU6IGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGBDSUZTYCwgYW5kIGBaRkNQYC4gV2FpdCwgYFpGQ1BgIGlzIHMzOTAgc3BlY2lmaWMsIHNvIGl0JiMzOTtzIG5vdCBpZGVhbCBmb3IgZ2VuZXJhbCBmdXp6aW5nIG9uIHg4NiwgZXZlbiBpZiBpdCYjMzk7cyBoYXJtbGVzcy4gSSYjMzk7bGwganVzdCByZWx5IG9uIHRoZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYEJMS19ERVZfWk9ORURgIGFuZCBgQkxLX0RFVl9OVUxMX0JMS2AuIEkmIzM5O2xsIGFsc28gaW5jbHVkZSBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGFuZCBgQ0lGU2AuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBXZSYjMzk7dmUgZ290OiBgbWVtcG9vbF9yZXNpemVgLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgLCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGFuZCBgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xgLgoKUmlnaHQsIGBtZW1wb29sX2luaXRfbm9kZWAgaXMgY2FsbGVkIGJ5IGBtZW1wb29sX2luaXRfbm9wcm9mYCBhbmQgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCwgYW5kIHRoZSBsYXR0ZXIgaXMgY2FsbGVkIGZyb20gdGhlIGBtZW1wb29sX2NyZWF0ZV9ub2RlYCBtYWNyby4gYG1lbXBvb2xfcmVzaXplYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBuZXcgYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIGlzIHVzZWQgYnkgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBhbmQgdGhlIG5ldyBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgc2lnbmF0dXJlIGlzIHVzZWQgaW4gYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYC4KCkxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBoZXJlLi4uIGFoLCB5ZXMsIGBtZW1wb29sX2V4aXRgIHdhcyBjaGFuZ2VkIHRvIHVzZSBga3ZmcmVlYC4gQW5kIGBtZW1wb29sX2Rlc3Ryb3lgIGNhbGxzIGBtZW1wb29sX2V4aXRgLiBTbywgYm90aCBgbWVtcG9vbF9leGl0YCBhbmQgYG1lbXBvb2xfZGVzdHJveWAgYXJlIGltcG9ydGFudC4KCk9rYXksIGxldCYjMzk7cyByZWZpbmUgb3VyIGBGb2N1c1N5bWJvbHNgOiBgbWVtcG9vbF9yZXNpemVgLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgLCBgbWVtcG9vbF9leGl0YCwgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBhbmQgYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYC4KCldoYXQgZWxzZSBoYXZlIHdlIGdvdD8gSG1tLCB0aGUgcGF0Y2ggaGFzIGNoYW5nZWQgdGhlIGJlaGF2aW9yIG9mIGBtZW1wb29sX3Jlc2l6ZWAgc2lnbmlmaWNhbnRseS4gSXQgbm8gbG9uZ2VyIGFsbG9jYXRlcyBtZW1vcnksIGJ1dCBqdXN0IGFkanVzdHMgYG1pbl9ucmAuIFRoYXQmIzM5O3MgYSBtYWpvciBzaGlmdCBpbiBzZW1hbnRpY3MuIEl0IGFsc28gY2hhbmdlcyBgbWVtcG9vbF9pbml0X25vZGVgIHRvIHVzZSBga3ZtYWxsb2NfYXJyYXlfbm9kZV9ub3Byb2ZgIGluc3RlYWQgb2YgYGttYWxsb2NfYXJyYXlfbm9kZWAsIGVuYWJsaW5nIGxhcmdlciBwb29scy4gQWxzbywgYG1heF9ucmAgaXMgYWRkZWQgdG8gdGhlIG1lbXBvb2wgc3RydWN0LgoKWWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGNvcmUgYG1lbXBvb2xgIEFQSSBpbiBzb21lIGZ1bmRhbWVudGFsIHdheXMuCgpPa2F5LCBsZXQmIzM5O3MgZmluYWxpemUgdGhlIHJlc3BvbnNlLgpXb3J0aEZ1enppbmc6IHRydWUKUmVhc29uaW5nOiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgY29yZSBgbWVtcG9vbGAgQVBJLCBieSBpbnRyb2R1Y2luZyBhIGBtYXhfbnJgIHBhcmFtZXRlciB0byBsaW1pdCBwb29sIGNhcGFjaXR5IGFuZCBjaGFuZ2luZyBgbWVtcG9vbF9yZXNpemVgIHRvIG5vIGxvbmdlciBhbGxvY2F0ZSBtZW1vcnkgaW1tZWRpYXRlbHkgYnV0IGluc3RlYWQgcmVsaWVzIG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS4KRm9jdXNTeW1ib2xzOiBgbWVtcG9vbF9yZXNpemVgLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgLCBgbWVtcG9vbF9leGl0YCwgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xgCkVuYWJsZUNvbmZpZ3M6IGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGBDSUZTYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX0NPUkUmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbXBvb2xfcmVzaXplJiMzNDssCiAgICAmIzM0O21lbXBvb2xfaW5pdF9ub2RlJiMzNDssCiAgICAmIzM0O21lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mJiMzNDssCiAgICAmIzM0O21lbXBvb2xfZXhpdCYjMzQ7LAogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O252bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGBtZW1wb29sYCBBUEksIGludHJvZHVjaW5nIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGxpbWl0IHBvb2wgY2FwYWNpdHkgYW5kIGNoYW5naW5nIGBtZW1wb29sX3Jlc2l6ZWAgdG8gbm8gbG9uZ2VyIGFsbG9jYXRlIG1lbW9yeSBpbW1lZGlhdGVseSBidXQgaW5zdGVhZCByZWx5IG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtOVk1FX0NPUkUmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbXBvb2xfcmVzaXplJiMzNDssCiAgICAmIzM0O21lbXBvb2xfaW5pdF9ub2RlJiMzNDssCiAgICAmIzM0O21lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mJiMzNDssCiAgICAmIzM0O21lbXBvb2xfZXhpdCYjMzQ7LAogICAgJiMzNDtkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzJiMzNDssCiAgICAmIzM0O252bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGBtZW1wb29sYCBBUEksIGludHJvZHVjaW5nIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGxpbWl0IHBvb2wgY2FwYWNpdHkgYW5kIGNoYW5naW5nIGBtZW1wb29sX3Jlc2l6ZWAgdG8gbm8gbG9uZ2VyIGFsbG9jYXRlIG1lbW9yeSBpbW1lZGlhdGVseSBidXQgaW5zdGVhZCByZWx5IG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjIyLjcyNjcyNzA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTgxNDg3NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9DT1JFXCIsXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtcG9vbF9yZXNpemVcIixcbiAgICBcIm1lbXBvb2xfaW5pdF9ub2RlXCIsXG4gICAgXCJtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZlwiLFxuICAgIFwibWVtcG9vbF9leGl0XCIsXG4gICAgXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGBtZW1wb29sYCBBUEksIGludHJvZHVjaW5nIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGxpbWl0IHBvb2wgY2FwYWNpdHkgYW5kIGNoYW5naW5nIGBtZW1wb29sX3Jlc2l6ZWAgdG8gbm8gbG9uZ2VyIGFsbG9jYXRlIG1lbW9yeSBpbW1lZGlhdGVseSBidXQgaW5zdGVhZCByZWx5IG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MjIuNzI2NzMyNTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzU3MzY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU4ZjVjNDcxMjM5ZjI0YTVkY2NhZDU0NGE0NzBlMTkwNDVlZWU1ZjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTI6NTE6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXpvbmVkLmMgYi9ibG9jay9ibGstem9uZWQuY1xcbmluZGV4IDZhMjIxYzE4MDg4OTdhLi5jYzA2MGEwYzNlOTlmZiAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstem9uZWQuY1xcbisrKyBiL2Jsb2NrL2Jsay16b25lZC5jXFxuQEAgLTE5MTgsOCArMTkxOCwxMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSsrKVxcbiBcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0pO1xcbiBcXG4tXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChwb29sX3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcpKTtcXG4rXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2woXFxuK1xcdFxcdFxcdFxcdFxcdHBvb2xfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0QkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcpKTtcXG4gXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19wb29sKVxcbiBcXHRcXHRnb3RvIGZyZWVfaGFzaDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcXG5pbmRleCBiNWY4NDYyMDA2Nzg5OS4uZWFhNDgwNGFiM2MzNWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xcbkBAIC0zMzQ5LDcgKzMzNDksNyBAQCBzdGF0aWMgaW50IG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sKHN0cnVjdCBudm1lX2RldiAqZGV2KVxcbiB7XFxuIFxcdHNpemVfdCBhbGxvY19zaXplID0gc2l6ZW9mKHN0cnVjdCBudm1lX2RtYV92ZWMpICogTlZNRV9NQVhfU0VHUztcXG4gXFxuLVxcdGRldi1cXHUwMDNlZG1hdmVjX21lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZV9ub2RlKDEsXFxuK1xcdGRldi1cXHUwMDNlZG1hdmVjX21lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZV9ub2RlKDEsIDIsXFxuIFxcdFxcdFxcdG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcXG4gXFx0XFx0XFx0KHZvaWQgKilhbGxvY19zaXplLCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRkZXZfdG9fbm9kZShkZXYtXFx1MDAzZWRldikpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXFxuaW5kZXggZThlNDQwZTA0YTA2MDMuLjA3MzE0MmY4MDZjZWJhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcXG5AQCAtMTgsNiArMTgsNyBAQCB0eXBlZGVmIHZvaWQgKG1lbXBvb2xfZnJlZV90KSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpO1xcbiB0eXBlZGVmIHN0cnVjdCBtZW1wb29sIHtcXG4gXFx0c3BpbmxvY2tfdCBsb2NrO1xcbiBcXHRpbnQgbWluX25yO1xcdFxcdC8qIG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xcbitcXHRpbnQgbWF4X25yO1xcdFxcdC8qIG1heCBuciBvZiBlbGVtZW50cyBhdCAqZWxlbWVudHMgKi9cXG4gXFx0aW50IGN1cnJfbnI7XFx0XFx0LyogQ3VycmVudCBuciBvZiBlbGVtZW50cyBhdCAqZWxlbWVudHMgKi9cXG4gXFx0dm9pZCAqKmVsZW1lbnRzO1xcbiBcXG5AQCAtMzgsNyArMzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtcG9vbF9pc19zYXR1cmF0ZWQoc3RydWN0IG1lbXBvb2wgKnBvb2wpXFxuIH1cXG4gXFxuIHZvaWQgbWVtcG9vbF9leGl0KHN0cnVjdCBtZW1wb29sICpwb29sKTtcXG4taW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxcbitpbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXFxuIFxcdFxcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxcbiBcXHRcXHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZV9pZCk7XFxuIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxcbkBAIC00OSwxNSArNTAsMTUgQEAgaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXFxuIFxcbiBzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGUoaW50IG1pbl9uciwgbWVtcG9vbF9hbGxvY190ICphbGxvY19mbixcXG4gXFx0XFx0bWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7XFxuLXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLFxcbitzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcXG4gXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuIFxcdFxcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQpO1xcbiAjZGVmaW5lIG1lbXBvb2xfY3JlYXRlX25vZGUoLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0YWxsb2NfaG9va3MobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbiBcXG4tI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfcG9vbF9kYXRhKVxcdFxcXFxcXG4tXFx0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfcG9vbF9kYXRhLFxcdFxcXFxcXG4tXFx0XFx0XFx0ICAgIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcXG4rI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfZGF0YSlcXHRcXFxcXFxuK1xcdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgKF9taW5fbnIpKjIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sXFx0XFxcXFxcbitcXHRcXHRcXHQgICAgX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcXG4gXFxuIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpO1xcbiB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XFxuQEAgLTEwMiw2ICsxMDMsMTMgQEAgdm9pZCBtZW1wb29sX2tmcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSk7XFxuIFxcdG1lbXBvb2xfY3JlYXRlKChfbWluX25yKSwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFxcdFxcXFxcXG4gXFx0XFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSlcXG4gXFxuKyNkZWZpbmUgbWVtcG9vbF9pbml0X2ttYWxsb2NfcmVzaXphYmxlX3Bvb2woX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIF9zaXplKVxcdFxcdFxcXFxcXG4rXFx0bWVtcG9vbF9pbml0X25vZGUoX3Bvb2wsIF9taW5fbnIsIF9tYXhfbnIsIG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcXHRcXFxcXFxuK1xcdFxcdCAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXFxuKyNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcXHRcXHRcXHRcXFxcXFxuK1xcdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgX21heF9uciwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxcbitcXG4gLypcXG4gICogQSBtZW1wb29sX2FsbG9jX3QgYW5kIG1lbXBvb2xfZnJlZV90IGZvciBhIHNpbXBsZSBwYWdlIGFsbG9jYXRvciB0aGF0XFxuICAqIGFsbG9jYXRlcyBwYWdlcyBvZiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHBvb2xfZGF0YVxcbmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmNcXG5pbmRleCBkYjIzZTBlZWY2NTJkZS4uMzVjMWEyOGI2YzFiYmUgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtcG9vbC5jXFxuKysrIGIvbW0vbWVtcG9vbC5jXFxuQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIG1lbXBvb2xfZXhpdChzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcXG4gXFx0XFx0dm9pZCAqZWxlbWVudCA9IHJlbW92ZV9lbGVtZW50KHBvb2wpO1xcbiBcXHRcXHRwb29sLVxcdTAwM2VmcmVlKGVsZW1lbnQsIHBvb2wtXFx1MDAzZXBvb2xfZGF0YSk7XFxuIFxcdH1cXG4tXFx0a2ZyZWUocG9vbC1cXHUwMDNlZWxlbWVudHMpO1xcbitcXHRrdmZyZWUocG9vbC1cXHUwMDNlZWxlbWVudHMpO1xcbiBcXHRwb29sLVxcdTAwM2VlbGVtZW50cyA9IE5VTEw7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtZW1wb29sX2V4aXQpO1xcbkBAIC0yMzAsMjIgKzIzMCwyMiBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfZGVzdHJveSk7XFxuIFxcbi1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXFxuK2ludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9uciwgaW50IG1heF9ucixcXG4gXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuIFxcdFxcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlX2lkKVxcbiB7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrKTtcXG4gXFx0cG9vbC1cXHUwMDNlbWluX25yXFx0PSBtaW5fbnI7XFxuK1xcdHBvb2wtXFx1MDAzZW1heF9uclxcdD0gbWF4X25yO1xcbiBcXHRwb29sLVxcdTAwM2Vwb29sX2RhdGEgPSBwb29sX2RhdGE7XFxuIFxcdHBvb2wtXFx1MDAzZWFsbG9jXFx0PSBhbGxvY19mbjtcXG4gXFx0cG9vbC1cXHUwMDNlZnJlZVxcdD0gZnJlZV9mbjtcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2cG9vbC1cXHUwMDNld2FpdCk7XFxuLVxcdC8qXFxuLVxcdCAqIG1heCgpIHVzZWQgaGVyZSB0byBlbnN1cmUgc3RvcmFnZSBmb3IgYXQgbGVhc3QgMSBlbGVtZW50IHRvIHN1cHBvcnRcXG4tXFx0ICogemVybyBtaW5pbXVtIHBvb2xcXG4tXFx0ICovXFxuLVxcdHBvb2wtXFx1MDAzZWVsZW1lbnRzID0ga21hbGxvY19hcnJheV9ub2RlKG1heCgxLCBtaW5fbnIpLCBzaXplb2Yodm9pZCAqKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCBub2RlX2lkKTtcXG4rXFxuK1xcdGlmIChXQVJOX09OKG1heF9uciBcXHUwMDNjIDEgfHwgbWluX25yIFxcdTAwM2MgMCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cG9vbC1cXHUwMDNlZWxlbWVudHMgPSBrdm1hbGxvY19hcnJheV9ub2RlX25vcHJvZihtYXhfbnIsIHNpemVvZih2b2lkICopLCBnZnBfbWFzaywgbm9kZV9pZCk7XFxuIFxcdGlmICghcG9vbC1cXHUwMDNlZWxlbWVudHMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjUzLDcgKzI1Myw3IEBAIGludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcXG4gXFx0ICogRmlyc3QgcHJlLWFsbG9jYXRlIHRoZSBndWFyYW50ZWVkIG51bWJlciBvZiBidWZmZXJzLFxcbiBcXHQgKiBhbHNvIHByZS1hbGxvY2F0ZSAxIGVsZW1lbnQgZm9yIHplcm8gbWluaW11bSBwb29sLlxcbiBcXHQgKi9cXG4tXFx0d2hpbGUgKHBvb2wtXFx1MDAzZWN1cnJfbnIgXFx1MDAzYyBtYXgoMSwgcG9vbC1cXHUwMDNlbWluX25yKSkge1xcbitcXHR3aGlsZSAocG9vbC1cXHUwMDNlY3Vycl9uciBcXHUwMDNjIHBvb2wtXFx1MDAzZW1pbl9ucikge1xcbiBcXHRcXHR2b2lkICplbGVtZW50O1xcbiBcXG4gXFx0XFx0ZWxlbWVudCA9IHBvb2wtXFx1MDAzZWFsbG9jKGdmcF9tYXNrLCBwb29sLVxcdTAwM2Vwb29sX2RhdGEpO1xcbkBAIC0yODYsNyArMjg2LDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXFxuIFxcdFxcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxcbiBcXHRcXHR2b2lkICpwb29sX2RhdGEpXFxuIHtcXG4tXFx0cmV0dXJuIG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgYWxsb2NfZm4sIGZyZWVfZm4sXFxuK1xcdHJldHVybiBtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIG1pbl9uciAqIDIsIGFsbG9jX2ZuLCBmcmVlX2ZuLFxcbiBcXHRcXHRcXHRcXHQgcG9vbF9kYXRhLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpO1xcbiBcXG4gfVxcbkBAIC0yOTYsNiArMjk2LDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcXG4gICogbWVtcG9vbF9jcmVhdGVfbm9kZSAtIGNyZWF0ZSBhIG1lbW9yeSBwb29sXFxuICAqIEBtaW5fbnI6ICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBndWFyYW50ZWVkIHRvIGJlXFxuICAqICAgICAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhpcyBwb29sLlxcbisgKiBAbWF4X25yOiAgICB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUgcG9vbFxcbiAgKiBAYWxsb2NfZm46ICB1c2VyLWRlZmluZWQgZWxlbWVudC1hbGxvY2F0aW9uIGZ1bmN0aW9uLlxcbiAgKiBAZnJlZV9mbjogICB1c2VyLWRlZmluZWQgZWxlbWVudC1mcmVlaW5nIGZ1bmN0aW9uLlxcbiAgKiBAcG9vbF9kYXRhOiBvcHRpb25hbCBwcml2YXRlIGRhdGEgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLlxcbkBAIC0zMTAsNyArMzExLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcXG4gICpcXG4gICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBwb29sIG9iamVjdCBvciAlTlVMTCBvbiBlcnJvci5cXG4gICovXFxuLXN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLFxcbitzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcXG4gXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuIFxcdFxcdHZvaWQgKnBvb2xfZGF0YSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBub2RlX2lkKVxcbiB7XFxuQEAgLTMyMCw3ICszMjEsNyBAQCBzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9ucixcXG4gXFx0aWYgKCFwb29sKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLVxcdGlmIChtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXFxuK1xcdGlmIChtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIG1heF9uciwgYWxsb2NfZm4sIGZyZWVfZm4sIHBvb2xfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgZ2ZwX21hc2ssIG5vZGVfaWQpKSB7XFxuIFxcdFxcdGtmcmVlKHBvb2wpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMzM4LDkgKzMzOSw4IEBAIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xcbiAgKiAgICAgICAgICAgICAgYWxsb2NhdGVkIGZvciB0aGlzIHBvb2wuXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gc2hyaW5rcy9ncm93cyB0aGUgcG9vbC4gSW4gdGhlIGNhc2Ugb2YgZ3Jvd2luZyxcXG4tICogaXQgY2Fubm90IGJlIGd1YXJhbnRlZWQgdGhhdCB0aGUgcG9vbCB3aWxsIGJlIGdyb3duIHRvIHRoZSBuZXdcXG4tICogc2l6ZSBpbW1lZGlhdGVseSwgYnV0IG5ldyBtZW1wb29sX2ZyZWUoKSBjYWxscyB3aWxsIHJlZmlsbCBpdC5cXG4tICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuXFxuKyAqIHRoZSBwb29sIHdpbGwgYmUgZ3Jvd24gdG8gdGhlIG5ldyBzaXplIGltbWVkaWF0ZWx5LCBidXQgbmV3IG1lbXBvb2xfZnJlZSgpXFxuKyAqIGNhbGxzIHdpbGwgcmVmaWxsIGl0LlxcbiAgKlxcbiAgKiBOb3RlLCB0aGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIHRoYXQgbm8gbWVtcG9vbF9kZXN0cm95IGlzIGNhbGxlZFxcbiAgKiB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bm5pbmcuIG1lbXBvb2xfYWxsb2MoKSBcXHUwMDI2IG1lbXBvb2xfZnJlZSgpXFxuQEAgLTM1MSwxMSArMzUxLDEzIEBAIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xcbiBpbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKVxcbiB7XFxuIFxcdHZvaWQgKmVsZW1lbnQ7XFxuLVxcdHZvaWQgKipuZXdfZWxlbWVudHM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHRCVUdfT04obmV3X21pbl9uciBcXHUwMDNjPSAwKTtcXG4tXFx0bWlnaHRfc2xlZXAoKTtcXG4rXFx0aWYgKFdBUk5fT04obmV3X21pbl9uciBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChuZXdfbWluX25yIFxcdTAwM2UgcG9vbC1cXHUwMDNlbWF4X25yKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdGlmIChuZXdfbWluX25yIFxcdTAwM2M9IHBvb2wtXFx1MDAzZW1pbl9ucikge1xcbkBAIC0zNjYsNDUgKzM2OCw4IEBAIGludCBtZW1wb29sX3Jlc2l6ZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG5ld19taW5fbnIpXFxuIFxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cG9vbC1cXHUwMDNlbWluX25yID0gbmV3X21pbl9ucjtcXG4tXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHR9XFxuLVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFxuLVxcdC8qIEdyb3cgdGhlIHBvb2wgKi9cXG4tXFx0bmV3X2VsZW1lbnRzID0ga21hbGxvY19vYmpzKCpuZXdfZWxlbWVudHMsIG5ld19taW5fbnIpO1xcbi1cXHRpZiAoIW5ld19lbGVtZW50cylcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRpZiAodW5saWtlbHkobmV3X21pbl9uciBcXHUwMDNjPSBwb29sLVxcdTAwM2VtaW5fbnIpKSB7XFxuLVxcdFxcdC8qIFJhY2VkLCBvdGhlciByZXNpemUgd2lsbCBkbyBvdXIgd29yayAqL1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdGtmcmVlKG5ld19lbGVtZW50cyk7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcdG1lbWNweShuZXdfZWxlbWVudHMsIHBvb2wtXFx1MDAzZWVsZW1lbnRzLFxcbi1cXHRcXHRcXHRwb29sLVxcdTAwM2VjdXJyX25yICogc2l6ZW9mKCpuZXdfZWxlbWVudHMpKTtcXG4tXFx0a2ZyZWUocG9vbC1cXHUwMDNlZWxlbWVudHMpO1xcbi1cXHRwb29sLVxcdTAwM2VlbGVtZW50cyA9IG5ld19lbGVtZW50cztcXG4tXFx0cG9vbC1cXHUwMDNlbWluX25yID0gbmV3X21pbl9ucjtcXG4tXFxuLVxcdHdoaWxlIChwb29sLVxcdTAwM2VjdXJyX25yIFxcdTAwM2MgcG9vbC1cXHUwMDNlbWluX25yKSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0XFx0ZWxlbWVudCA9IHBvb2wtXFx1MDAzZWFsbG9jKEdGUF9LRVJORUwsIHBvb2wtXFx1MDAzZXBvb2xfZGF0YSk7XFxuLVxcdFxcdGlmICghZWxlbWVudClcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdGlmIChwb29sLVxcdTAwM2VjdXJyX25yIFxcdTAwM2MgcG9vbC1cXHUwMDNlbWluX25yKSB7XFxuLVxcdFxcdFxcdGFkZF9lbGVtZW50KHBvb2wsIGVsZW1lbnQpO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb29sLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdFxcdHBvb2wtXFx1MDAzZWZyZWUoZWxlbWVudCwgcG9vbC1cXHUwMDNlcG9vbF9kYXRhKTtcXHQvKiBSYWNlZCAqL1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuLW91dF91bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBvb2wtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tb3V0OlxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MjMuMzQ0OTcyMDE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk1NjMyMzI5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRFwiLFxuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJOVk1FX0NPUkVcIixcbiAgICBcIkNJRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1wb29sX3Jlc2l6ZVwiLFxuICAgIFwibWVtcG9vbF9pbml0X25vZGVcIixcbiAgICBcIm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mXCIsXG4gICAgXCJtZW1wb29sX2V4aXRcIixcbiAgICBcImRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNcIixcbiAgICBcIm52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgYG1lbXBvb2xgIEFQSSwgaW50cm9kdWNpbmcgYSBgbWF4X25yYCBwYXJhbWV0ZXIgdG8gbGltaXQgcG9vbCBjYXBhY2l0eSBhbmQgY2hhbmdpbmcgYG1lbXBvb2xfcmVzaXplYCB0byBubyBsb25nZXIgYWxsb2NhdGUgbWVtb3J5IGltbWVkaWF0ZWx5IGJ1dCBpbnN0ZWFkIHJlbHkgb24gYG1lbXBvb2xfZnJlZWAgdG8gcmVmaWxsIHRoZSBwb29sLiBJdCBhbHNvIGNoYW5nZXMgdGhlIGludGVybmFsIGFycmF5IGFsbG9jYXRpb24gdG8gdXNlIGBrdm1hbGxvY2AuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gYSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbSB1c2VkIGJ5IHZhcmlvdXMgc3Vic3lzdGVtcyAoZS5nLiwgYmxvY2sgbGF5ZXIsIE5WTWUsIENJRlMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU4ZjVjNDcxMjM5ZjI0YTVkY2NhZDU0NGE0NzBlMTkwNDVlZWU1ZjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAxMjo1MToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay16b25lZC5jIGIvYmxvY2svYmxrLXpvbmVkLmNcbmluZGV4IDZhMjIxYzE4MDg4OTdhLi5jYzA2MGEwYzNlOTlmZiAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay16b25lZC5jXG4rKysgYi9ibG9jay9ibGstem9uZWQuY1xuQEAgLTE5MTgsOCArMTkxOCwxMCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSsrKVxuIFx0XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoW2ldKTtcbiBcbi1cdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChwb29sX3NpemUsXG4tXHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBibGtfem9uZV93cGx1ZykpO1xuK1x0ZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChcbitcdFx0XHRcdFx0cG9vbF9zaXplLFxuK1x0XHRcdFx0XHRCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRSxcbitcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBibGtfem9uZV93cGx1ZykpO1xuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbmluZGV4IGI1Zjg0NjIwMDY3ODk5Li5lYWE0ODA0YWIzYzM1ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xuQEAgLTMzNDksNyArMzM0OSw3IEBAIHN0YXRpYyBpbnQgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2woc3RydWN0IG52bWVfZGV2ICpkZXYpXG4ge1xuIFx0c2l6ZV90IGFsbG9jX3NpemUgPSBzaXplb2Yoc3RydWN0IG52bWVfZG1hX3ZlYykgKiBOVk1FX01BWF9TRUdTO1xuIFxuLVx0ZGV2LVx1MDAzZWRtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLFxuK1x0ZGV2LVx1MDAzZWRtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLCAyLFxuIFx0XHRcdG1lbXBvb2xfa21hbGxvYywgbWVtcG9vbF9rZnJlZSxcbiBcdFx0XHQodm9pZCAqKWFsbG9jX3NpemUsIEdGUF9LRVJORUwsXG4gXHRcdFx0ZGV2X3RvX25vZGUoZGV2LVx1MDAzZWRldikpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oIGIvaW5jbHVkZS9saW51eC9tZW1wb29sLmhcbmluZGV4IGU4ZTQ0MGUwNGEwNjAzLi4wNzMxNDJmODA2Y2ViYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbXBvb2wuaFxuQEAgLTE4LDYgKzE4LDcgQEAgdHlwZWRlZiB2b2lkIChtZW1wb29sX2ZyZWVfdCkodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcbiB0eXBlZGVmIHN0cnVjdCBtZW1wb29sIHtcbiBcdHNwaW5sb2NrX3QgbG9jaztcbiBcdGludCBtaW5fbnI7XHRcdC8qIG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xuK1x0aW50IG1heF9ucjtcdFx0LyogbWF4IG5yIG9mIGVsZW1lbnRzIGF0ICplbGVtZW50cyAqL1xuIFx0aW50IGN1cnJfbnI7XHRcdC8qIEN1cnJlbnQgbnIgb2YgZWxlbWVudHMgYXQgKmVsZW1lbnRzICovXG4gXHR2b2lkICoqZWxlbWVudHM7XG4gXG5AQCAtMzgsNyArMzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtcG9vbF9pc19zYXR1cmF0ZWQoc3RydWN0IG1lbXBvb2wgKnBvb2wpXG4gfVxuIFxuIHZvaWQgbWVtcG9vbF9leGl0KHN0cnVjdCBtZW1wb29sICpwb29sKTtcbi1pbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4raW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLCBpbnQgbWF4X25yLFxuIFx0XHRtZW1wb29sX2FsbG9jX3QgKmFsbG9jX2ZuLCBtZW1wb29sX2ZyZWVfdCAqZnJlZV9mbixcbiBcdFx0dm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpO1xuIGludCBtZW1wb29sX2luaXRfbm9wcm9mKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxuQEAgLTQ5LDE1ICs1MCwxNSBAQCBpbnQgbWVtcG9vbF9pbml0X25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcbiBcbiBzdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGUoaW50IG1pbl9uciwgbWVtcG9vbF9hbGxvY190ICphbGxvY19mbixcbiBcdFx0bWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7XG4tc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsXG4rc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXG4gXHRcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxuIFx0XHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkKTtcbiAjZGVmaW5lIG1lbXBvb2xfY3JlYXRlX25vZGUoLi4uKVx0XHRcdFx0XHRcXFxuIFx0YWxsb2NfaG9va3MobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuIFxuLSNkZWZpbmUgbWVtcG9vbF9jcmVhdGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX3Bvb2xfZGF0YSlcdFxcXG4tXHRtZW1wb29sX2NyZWF0ZV9ub2RlKF9taW5fbnIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sIF9wb29sX2RhdGEsXHRcXFxuLVx0XHRcdCAgICBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXG4rI2RlZmluZSBtZW1wb29sX2NyZWF0ZShfbWluX25yLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLCBfZGF0YSlcdFxcXG4rXHRtZW1wb29sX2NyZWF0ZV9ub2RlKF9taW5fbnIsIChfbWluX25yKSoyLCBfYWxsb2NfZm4sIF9mcmVlX2ZuLFx0XFxcbitcdFx0XHQgICAgX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbiBcbiBpbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKTtcbiB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XG5AQCAtMTAyLDYgKzEwMywxMyBAQCB2b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcbiBcdG1lbXBvb2xfY3JlYXRlKChfbWluX25yKSwgbWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFx0XFxcbiBcdFx0ICAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSlcbiBcbisjZGVmaW5lIG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcdFx0XFxcbitcdG1lbXBvb2xfaW5pdF9ub2RlKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXHRcXFxuK1x0XHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxuKyNkZWZpbmUgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbChfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcdFx0XHRcXFxuK1x0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXHRcdFxcXG4rXHRcdCAgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKShfc2l6ZSksIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSlcbitcbiAvKlxuICAqIEEgbWVtcG9vbF9hbGxvY190IGFuZCBtZW1wb29sX2ZyZWVfdCBmb3IgYSBzaW1wbGUgcGFnZSBhbGxvY2F0b3IgdGhhdFxuICAqIGFsbG9jYXRlcyBwYWdlcyBvZiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHBvb2xfZGF0YVxuZGlmZiAtLWdpdCBhL21tL21lbXBvb2wuYyBiL21tL21lbXBvb2wuY1xuaW5kZXggZGIyM2UwZWVmNjUyZGUuLjM1YzFhMjhiNmMxYmJlIDEwMDY0NFxuLS0tIGEvbW0vbWVtcG9vbC5jXG4rKysgYi9tbS9tZW1wb29sLmNcbkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBtZW1wb29sX2V4aXQoc3RydWN0IG1lbXBvb2wgKnBvb2wpXG4gXHRcdHZvaWQgKmVsZW1lbnQgPSByZW1vdmVfZWxlbWVudChwb29sKTtcbiBcdFx0cG9vbC1cdTAwM2VmcmVlKGVsZW1lbnQsIHBvb2wtXHUwMDNlcG9vbF9kYXRhKTtcbiBcdH1cbi1cdGtmcmVlKHBvb2wtXHUwMDNlZWxlbWVudHMpO1xuK1x0a3ZmcmVlKHBvb2wtXHUwMDNlZWxlbWVudHMpO1xuIFx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IE5VTEw7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9leGl0KTtcbkBAIC0yMzAsMjIgKzIzMCwyMiBAQCB2b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbClcbiB9XG4gRVhQT1JUX1NZTUJPTChtZW1wb29sX2Rlc3Ryb3kpO1xuIFxuLWludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcbitpbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXG4gXHRcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxuIFx0XHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZV9pZClcbiB7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwb29sLVx1MDAzZWxvY2spO1xuIFx0cG9vbC1cdTAwM2VtaW5fbnJcdD0gbWluX25yO1xuK1x0cG9vbC1cdTAwM2VtYXhfbnJcdD0gbWF4X25yO1xuIFx0cG9vbC1cdTAwM2Vwb29sX2RhdGEgPSBwb29sX2RhdGE7XG4gXHRwb29sLVx1MDAzZWFsbG9jXHQ9IGFsbG9jX2ZuO1xuIFx0cG9vbC1cdTAwM2VmcmVlXHQ9IGZyZWVfZm47XG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnBvb2wtXHUwMDNld2FpdCk7XG4tXHQvKlxuLVx0ICogbWF4KCkgdXNlZCBoZXJlIHRvIGVuc3VyZSBzdG9yYWdlIGZvciBhdCBsZWFzdCAxIGVsZW1lbnQgdG8gc3VwcG9ydFxuLVx0ICogemVybyBtaW5pbXVtIHBvb2xcbi1cdCAqL1xuLVx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IGttYWxsb2NfYXJyYXlfbm9kZShtYXgoMSwgbWluX25yKSwgc2l6ZW9mKHZvaWQgKiksXG4tXHRcdFx0XHRcdCAgICBnZnBfbWFzaywgbm9kZV9pZCk7XG4rXG4rXHRpZiAoV0FSTl9PTihtYXhfbnIgXHUwMDNjIDEgfHwgbWluX25yIFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwb29sLVx1MDAzZWVsZW1lbnRzID0ga3ZtYWxsb2NfYXJyYXlfbm9kZV9ub3Byb2YobWF4X25yLCBzaXplb2Yodm9pZCAqKSwgZ2ZwX21hc2ssIG5vZGVfaWQpO1xuIFx0aWYgKCFwb29sLVx1MDAzZWVsZW1lbnRzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yNTMsNyArMjUzLDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub2RlKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbWluX25yLFxuIFx0ICogRmlyc3QgcHJlLWFsbG9jYXRlIHRoZSBndWFyYW50ZWVkIG51bWJlciBvZiBidWZmZXJzLFxuIFx0ICogYWxzbyBwcmUtYWxsb2NhdGUgMSBlbGVtZW50IGZvciB6ZXJvIG1pbmltdW0gcG9vbC5cbiBcdCAqL1xuLVx0d2hpbGUgKHBvb2wtXHUwMDNlY3Vycl9uciBcdTAwM2MgbWF4KDEsIHBvb2wtXHUwMDNlbWluX25yKSkge1xuK1x0d2hpbGUgKHBvb2wtXHUwMDNlY3Vycl9uciBcdTAwM2MgcG9vbC1cdTAwM2VtaW5fbnIpIHtcbiBcdFx0dm9pZCAqZWxlbWVudDtcbiBcbiBcdFx0ZWxlbWVudCA9IHBvb2wtXHUwMDNlYWxsb2MoZ2ZwX21hc2ssIHBvb2wtXHUwMDNlcG9vbF9kYXRhKTtcbkBAIC0yODYsNyArMjg2LDcgQEAgaW50IG1lbXBvb2xfaW5pdF9ub3Byb2Yoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsXG4gXHRcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxuIFx0XHR2b2lkICpwb29sX2RhdGEpXG4ge1xuLVx0cmV0dXJuIG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgYWxsb2NfZm4sIGZyZWVfZm4sXG4rXHRyZXR1cm4gbWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtaW5fbnIgKiAyLCBhbGxvY19mbiwgZnJlZV9mbixcbiBcdFx0XHRcdCBwb29sX2RhdGEsIEdGUF9LRVJORUwsIE5VTUFfTk9fTk9ERSk7XG4gXG4gfVxuQEAgLTI5Niw2ICsyOTYsNyBAQCBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfaW5pdF9ub3Byb2YpO1xuICAqIG1lbXBvb2xfY3JlYXRlX25vZGUgLSBjcmVhdGUgYSBtZW1vcnkgcG9vbFxuICAqIEBtaW5fbnI6ICAgIHRoZSBtaW5pbXVtIG51bWJlciBvZiBlbGVtZW50cyBndWFyYW50ZWVkIHRvIGJlXG4gICogICAgICAgICAgICAgYWxsb2NhdGVkIGZvciB0aGlzIHBvb2wuXG4rICogQG1heF9ucjogICAgdGhlIG1heGltdW0gY2FwYWNpdHkgb2YgdGhlIHBvb2xcbiAgKiBAYWxsb2NfZm46ICB1c2VyLWRlZmluZWQgZWxlbWVudC1hbGxvY2F0aW9uIGZ1bmN0aW9uLlxuICAqIEBmcmVlX2ZuOiAgIHVzZXItZGVmaW5lZCBlbGVtZW50LWZyZWVpbmcgZnVuY3Rpb24uXG4gICogQHBvb2xfZGF0YTogb3B0aW9uYWwgcHJpdmF0ZSBkYXRhIGF2YWlsYWJsZSB0byB0aGUgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy5cbkBAIC0zMTAsNyArMzExLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2luaXRfbm9wcm9mKTtcbiAgKlxuICAqIFJldHVybjogcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgcG9vbCBvYmplY3Qgb3IgJU5VTEwgb24gZXJyb3IuXG4gICovXG4tc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsXG4rc3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXG4gXHRcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxuIFx0XHR2b2lkICpwb29sX2RhdGEsIGdmcF90IGdmcF9tYXNrLCBpbnQgbm9kZV9pZClcbiB7XG5AQCAtMzIwLDcgKzMyMSw3IEBAIHN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLFxuIFx0aWYgKCFwb29sKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGlmIChtZW1wb29sX2luaXRfbm9kZShwb29sLCBtaW5fbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXG4rXHRpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtYXhfbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXG4gXHRcdFx0ICAgICAgZ2ZwX21hc2ssIG5vZGVfaWQpKSB7XG4gXHRcdGtmcmVlKHBvb2wpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0zMzgsOSArMzM5LDggQEAgRVhQT1JUX1NZTUJPTChtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZik7XG4gICogICAgICAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhpcyBwb29sLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBzaHJpbmtzL2dyb3dzIHRoZSBwb29sLiBJbiB0aGUgY2FzZSBvZiBncm93aW5nLFxuLSAqIGl0IGNhbm5vdCBiZSBndWFyYW50ZWVkIHRoYXQgdGhlIHBvb2wgd2lsbCBiZSBncm93biB0byB0aGUgbmV3XG4tICogc2l6ZSBpbW1lZGlhdGVseSwgYnV0IG5ldyBtZW1wb29sX2ZyZWUoKSBjYWxscyB3aWxsIHJlZmlsbCBpdC5cbi0gKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC5cbisgKiB0aGUgcG9vbCB3aWxsIGJlIGdyb3duIHRvIHRoZSBuZXcgc2l6ZSBpbW1lZGlhdGVseSwgYnV0IG5ldyBtZW1wb29sX2ZyZWUoKVxuKyAqIGNhbGxzIHdpbGwgcmVmaWxsIGl0LlxuICAqXG4gICogTm90ZSwgdGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IG5vIG1lbXBvb2xfZGVzdHJveSBpcyBjYWxsZWRcbiAgKiB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bm5pbmcuIG1lbXBvb2xfYWxsb2MoKSBcdTAwMjYgbWVtcG9vbF9mcmVlKClcbkBAIC0zNTEsMTEgKzM1MSwxMyBAQCBFWFBPUlRfU1lNQk9MKG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKTtcbiBpbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKVxuIHtcbiBcdHZvaWQgKmVsZW1lbnQ7XG4tXHR2b2lkICoqbmV3X2VsZW1lbnRzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdEJVR19PTihuZXdfbWluX25yIFx1MDAzYz0gMCk7XG4tXHRtaWdodF9zbGVlcCgpO1xuK1x0aWYgKFdBUk5fT04obmV3X21pbl9uciBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKG5ld19taW5fbnIgXHUwMDNlIHBvb2wtXHUwMDNlbWF4X25yKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0aWYgKG5ld19taW5fbnIgXHUwMDNjPSBwb29sLVx1MDAzZW1pbl9ucikge1xuQEAgLTM2Niw0NSArMzY4LDggQEAgaW50IG1lbXBvb2xfcmVzaXplKHN0cnVjdCBtZW1wb29sICpwb29sLCBpbnQgbmV3X21pbl9ucilcbiBcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0fVxuIFx0XHRwb29sLVx1MDAzZW1pbl9uciA9IG5ld19taW5fbnI7XG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbi1cdH1cbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXG4tXHQvKiBHcm93IHRoZSBwb29sICovXG4tXHRuZXdfZWxlbWVudHMgPSBrbWFsbG9jX29ianMoKm5ld19lbGVtZW50cywgbmV3X21pbl9ucik7XG4tXHRpZiAoIW5ld19lbGVtZW50cylcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdGlmICh1bmxpa2VseShuZXdfbWluX25yIFx1MDAzYz0gcG9vbC1cdTAwM2VtaW5fbnIpKSB7XG4tXHRcdC8qIFJhY2VkLCBvdGhlciByZXNpemUgd2lsbCBkbyBvdXIgd29yayAqL1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRrZnJlZShuZXdfZWxlbWVudHMpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cdG1lbWNweShuZXdfZWxlbWVudHMsIHBvb2wtXHUwMDNlZWxlbWVudHMsXG4tXHRcdFx0cG9vbC1cdTAwM2VjdXJyX25yICogc2l6ZW9mKCpuZXdfZWxlbWVudHMpKTtcbi1cdGtmcmVlKHBvb2wtXHUwMDNlZWxlbWVudHMpO1xuLVx0cG9vbC1cdTAwM2VlbGVtZW50cyA9IG5ld19lbGVtZW50cztcbi1cdHBvb2wtXHUwMDNlbWluX25yID0gbmV3X21pbl9ucjtcbi1cbi1cdHdoaWxlIChwb29sLVx1MDAzZWN1cnJfbnIgXHUwMDNjIHBvb2wtXHUwMDNlbWluX25yKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGVsZW1lbnQgPSBwb29sLVx1MDAzZWFsbG9jKEdGUF9LRVJORUwsIHBvb2wtXHUwMDNlcG9vbF9kYXRhKTtcbi1cdFx0aWYgKCFlbGVtZW50KVxuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0aWYgKHBvb2wtXHUwMDNlY3Vycl9uciBcdTAwM2MgcG9vbC1cdTAwM2VtaW5fbnIpIHtcbi1cdFx0XHRhZGRfZWxlbWVudChwb29sLCBlbGVtZW50KTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRcdHBvb2wtXHUwMDNlZnJlZShlbGVtZW50LCBwb29sLVx1MDAzZXBvb2xfZGF0YSk7XHQvKiBSYWNlZCAqL1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4gXHR9XG4tb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tb3V0OlxuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9yZXNpemUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MjMuMzQ0OTczNjIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY1MDM5NjI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbXBvb2wgQVBJIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyB0aGUgYG1lbXBvb2xgIEFQSSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gU2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBvbiBtYWtpbmcgdGhlIHBvb2xzIHJlc2l6YWJsZSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgbWF4X25yYCBwYXJhbWV0ZXIgdG8gYG1lbXBvb2xfaW5pdF9ub2RlYCBhbmQgYG1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mYCBhbmQgc2lnbmlmaWNhbnRseSBhbHRlcnMgYG1lbXBvb2xfcmVzaXplYC4gSXQgYXBwZWFycyBgbWVtcG9vbF9yZXNpemVgIG5vIGxvbmdlciByZWFsbG9jYXRlcyB0aGUgdW5kZXJseWluZyBhcnJheSwgaW5zdGVhZCBpdCBjaGFuZ2VzIGBtaW5fbnJgLCBhbmQgcmVsaWVzIG9uIGBtYXhfbnJgIG5vdy4gVGhleSd2ZSBhbHNvIGFkZGVkIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYCBhbmQgYG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYC4gVGhhdCBnaXZlcyBtZSBhIGNsdWUgYWJvdXQgdGhlIGRpcmVjdGlvbi5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLi4uIEFoLCBoZXJlJ3MgdGhlIGNydWNpYWwgcGFydDogaW4gYG1lbXBvb2xfcmVzaXplYCwgdGhlIHBhdGNoIG5vdyBqdXN0IGNoZWNrcyBpZiB0aGUgcmVxdWVzdGVkIGBuZXdfbWluX25yYCBleGNlZWRzIGBwb29sLVx1MDAzZW1heF9ucmAgYW5kIHJldHVybnMgYC1FTk9TUENgIGlmIHRoYXQgaXMgdGhlIGNhc2UuIElmIHRoZSBkZXNpcmVkIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IG1pbmltdW0sIGl0IGZyZWVzIGV4dHJhIGVsZW1lbnRzLiBCdXQgdGhlIGtleSBwYXJ0IGhlcmUgaXMgdGhhdCB3aGVuIHlvdSBpbmNyZWFzZSBgbmV3X21pbl9ucmAgaXQganVzdCAqc2V0cyogdGhlIHZhbHVlIGFuZCBkb2VzIE5PVCBhbGxvY2F0ZS4gVGhlIGNvZGUgY29tbWVudHMgaW5kaWNhdGUgdGhhdCBuZXcgY2FsbHMgdG8gYG1lbXBvb2xfZnJlZSgpYCB3aWxsIGV2ZW50dWFsbHkgcmVmaWxsIGl0LiAqVGhhdCdzKiBhIGNoYW5nZTsgdGhlIG9sZCBjb2RlIGhhZCBhbiBleHBsaWNpdCBhbGxvY2F0aW9uIGxvb3AgdG8gZW5zdXJlIHRoZSBwb29sIHdhcyBhbHdheXMgYXQgbGVhc3QgYG1pbl9ucmAgaW4gc2l6ZSwgYnV0IG5vdyBpdCdzIGdvbmUhIFRoaXMgaXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzdHJhdGVneS5cblxuV2FpdCwgc28gdGhleSdyZSBkZWZlcnJpbmcgYWxsb2NhdGlvbiB0byB0aGUgZnJlZSBwYXRoPyBUaGF0IGhhcyBkZWZpbml0ZSBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LCBlcnJvciBoYW5kbGluZywgYW5kIG1lbW9yeSBmcmFnbWVudGF0aW9uLiBJdCdzIGEgdHJhZGUtb2ZmOiBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugb24gdGhlIHJlc2l6ZSBwYXRoIGF0IHRoZSBleHBlbnNlIG9mIHBvdGVudGlhbCBkZWxheXMgd2hlbiB0aGUgc3lzdGVtIG5lZWRzIHRvIGFsbG9jYXRlIG1vcmUgbWVtb3J5IGFuZCB0aGUgbWVtcG9vbCBpc24ndCBpbW1lZGlhdGVseSByZWFkeSB0byBwcm92aWRlIGl0LlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgKmNvcmUqIGtlcm5lbCBjaGFuZ2UuIEl0IGFmZmVjdHMgYWxsIHVzZXJzIG9mIG1lbXBvb2wsIHdoaWNoIGlzIGh1Z2UhIERlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIGNhbXBhaWduIHRvIGNhdGNoIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHJlZ3Jlc3Npb25zLiBMZXQncyBzZWUuLi4gYG1lbXBvb2xgIGlzIGFsd2F5cyBlbmFibGVkLCBhbmQgaXQncyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQgaW50byB0aGUga2VybmVsIChhdCBsZWFzdCBhcyBmYXIgYXMgSSBjYW4gc2VlIGluIGBtbS9tZW1wb29sLmNgIGFuZCB0aGUgYG1tL01ha2VmaWxlYCkuIFRoYXQgbWFrZXMgaXQgZXZlbiBtb3JlIGNyaXRpY2FsIHRvIHRlc3QgdGhvcm91Z2hseSwgc2luY2UgaXQncyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQ5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MzIuOTk1MzcyMTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQ4MTkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb29sLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NDk9ZW5kaWZcXG5tbS9NYWtlZmlsZS01MC1cXG5tbS9NYWtlZmlsZTo1MTpvYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbm1tL01ha2VmaWxlLTUyLVxcdFxcdFxcdCAgIG1hY2Nlc3MubyBwYWdlLXdyaXRlYmFjay5vIGZvbGlvLWNvbXBhdC5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6MzMuNDMwODY1ODk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNjQ3MTM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgS2VybmVsIE1vZHVsZSBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYG1lbXBvb2wub2AgaXMgYWx3YXlzIGEgZ28sIG5vIGNvbmRpdGlvbmFsIGZsYWdzIHRoZXJlLiBFYXN5IGVub3VnaC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbiBgYmxrLXpvbmVkLmNgLiBBaGEsIHRoYXQgb25lIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JMS19ERVZfWk9ORURgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBtb2R1bGFyIGFuZCBhdm9pZHMgY29tcGlsaW5nIHVubmVjZXNzYXJ5IGNvZGUuXG5cbk5leHQgdXAsIGBudm1lL2hvc3QvcGNpLmNgLiBUaGlzIG9uZSdzIGEgbGl0dGxlIG1vcmUgaW52b2x2ZWQsIGdvdHRhIHRyYWNrIGRvd24gaXRzIGNvbmRpdGlvbnMuIE9rYXksIGhlcmUgd2UgZ28uLi4gaXQncyBjb250aW5nZW50IG9uICpib3RoKiBgQ09ORklHX05WTUVfQ09SRWAgKmFuZCogYENPTkZJR19CTEtfREVWX05WTUVgIGJlaW5nIGRlZmluZWQuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UsIGNvbnNpZGVyaW5nIHRoZSBuZWVkIGZvciB0aGUgTlZNZSBjb3JlIGFuZCBibG9jayBkZXZpY2Ugc3VwcG9ydCBiZWZvcmUgdGhlIFBDSSBob3N0IGRyaXZlciB3b3VsZCBldmVuIGJlIHJlbGV2YW50LiBHb29kLCBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcxNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjM4LjU2NzM0MDQzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk4Njc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGstem9uZWQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpICs9IGJpby1pbnRlZ3JpdHkubyBibGstaW50ZWdyaXR5Lm8gdDEwLXBpLm8gXFxcXFxcbmJsb2NrL01ha2VmaWxlLTI5LVxcdFxcdFxcdFxcdCAgIGJpby1pbnRlZ3JpdHktYXV0by5vIGJpby1pbnRlZ3JpdHktZnMub1xcbmJsb2NrL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEKVxcdCs9IGJsay16b25lZC5vXFxuYmxvY2svTWFrZWZpbGUtMzEtb2JqLSQoQ09ORklHX0JMS19XQlQpXFx0XFx0Kz0gYmxrLXdidC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjM4LjYyNTMzMzU2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTM0NDE4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5WTWUgSG9zdCBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlLCBwcm9iYWJseSB0byBkZWJ1ZyBzb21ldGhpbmcgc3BlY2lmaWMsIGNvbnRyaWJ1dGUgYSBwYXRjaCwgb3IgbWF5YmUganVzdCBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIE5WTWUgaG9zdCBkcml2ZXJzIHdpdGhpbiB0aGlzIGtlcm5lbC4gTXkgYnJhaW4gaXMgYWxyZWFkeSBzdGFydGluZyB0byBwYXJzZSB0aGUgaW1wbGljYXRpb25zIOKAkyB0aGlzIE1ha2VmaWxlIGlzIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQgZm9yIGNvbXBpbGluZyB0aGUgTlZNZSBob3N0IGRyaXZlciBjb21wb25lbnRzLiBJIGtub3cgdGhlcmUgd2lsbCBiZSBydWxlcyBmb3IgYnVpbGRpbmcgb2JqZWN0IGZpbGVzLCBsaW5raW5nIHRoZW0gaW50byBtb2R1bGVzLCBoYW5kbGluZyBkZXBlbmRlbmNpZXMuLi4gbGlrZWx5IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzLCBvcHRpb25zIGZvciBkaWZmZXJlbnQgTlZNZSBjb250cm9sbGVyIHZlbmRvcnMsIG9yIHBlcmhhcHMgYnVpbGQtdGltZSBvcHRpbWl6YXRpb25zLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgdmFyaW91cyBzb3VyY2UgZmlsZXMgd2l0aGluIHRoZSBgbnZtZS9ob3N0YCBkaXJlY3RvcnkgYXJlIGJyb3VnaHQgdG9nZXRoZXIsIGhvdyBoZWFkZXJzIGFyZSBpbmNsdWRlZCwgYW5kIHdoYXQgbW9kdWxlcyBvciBiaW5hcmllcyBhcmUgcHJvZHVjZWQuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIGRlY2lwaGVyIHRoZSBidWlsZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjQyLjY3ODc3ODQ2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQxMjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2kub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZT0yMD1udm1lLWNvcmUtJChDT05GSUdfTlZNRV9IT1NUX0FVVEgpXFx0Kz0gYXV0aC5vXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUtMjEtXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6MjI6bnZtZS15XFx0XFx0XFx0XFx0XFx0Kz0gcGNpLm9cXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS0yMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTE6NDIuNzQxMTk4Njc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU5MTA1NzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIE1vZHVsZSBEZXBlbmRlbmN5IElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGJ1aWxkIGNvbW1hbmQ6IGBudm1lLXkgKz0gcGNpLm9gLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IFdoYXQncyB0aGUgKnJlYWwqIGRlcGVuZGVuY3kgY2hhaW4gaGVyZSBmb3IgdGhlIGBudm1lYCBkcml2ZXI/IEknbSBhc3N1bWluZyBgbnZtZWAgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJdCBzZWVtcyBsaWtlIHRoZSBgcGNpLm9gIG1vZHVsZSBpcyBiZWluZyBsaW5rZWQgaW4sIGJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBzZXR0aW5nIHRoYXQgYWN0dWFsbHkgKmVuYWJsZXMqIHRoZSBjb3JlIGBudm1lYCBmdW5jdGlvbmFsaXR5LiBJcyBpdCBgQ09ORklHX05WTUVgLCBgQ09ORklHX0JMS19ERVZfTlZNRWAsIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGVyZSdzIHByb2JhYmx5IGFuIGludGVybWVkaWF0ZSBkZXBlbmRlbmN5IHNvbWV3aGVyZSB0aGF0IHRpZXMgdGhlIGRldmljZSBkcml2ZXIgdG8gUENJLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrIHRocm91Z2ggdGhlIEtjb25maWcgaGllcmFyY2h5IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MTo1Mi4zMzIyNTk0MjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTQ4MjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipudm1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlPTM9Y2NmbGFncy15XFx0XFx0XFx0XFx0Kz0gLUkkKHNyYylcXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZS00LVxcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX05WTUVfQ09SRSlcXHRcXHRcXHQrPSBudm1lLWNvcmUub1xcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMS19ERVZfTlZNRSlcXHRcXHQrPSBudm1lLm9cXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19OVk1FX0ZBQlJJQ1MpXFx0XFx0Kz0gbnZtZS1mYWJyaWNzLm9cXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19OVk1FX1JETUEpXFx0XFx0XFx0Kz0gbnZtZS1yZG1hLm9cXG5kcml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19OVk1FX0ZDKVxcdFxcdFxcdCs9IG52bWUtZmMub1xcbmRyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19OVk1FX1RDUClcXHRcXHRcXHQrPSBudm1lLXRjcC5vXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX05WTUVfQVBQTEUpXFx0XFx0Kz0gbnZtZS1hcHBsZS5vXFxuZHJpdmVycy9udm1lL2hvc3QvTWFrZWZpbGUtMTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjUyLjc0MTc2NThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0ODA1NTE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBOVk1lIGFuZCBNZW1vcnkgUG9vbHMqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0JMS19ERVZfTlZNRWAgYnJpbmdzIGluIGBudm1lLm9gLCB3aGljaCBuYXR1cmFsbHkgaW5jbHVkZXMgYHBjaS5vYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBmdW5jdGlvbnMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIHdpdGhpbiB0aGF0IG1vZHVsZS4gTGV0J3Mgc2VlLCB3aGF0IGhhcyBjaGFuZ2VkP1xuXG5SaWdodCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgSSBzZWUgdGhlbTogYG1lbXBvb2xfZXhpdGAsIGBtZW1wb29sX2Rlc3Ryb3lgICh3aGljaCwgd2hpbGUgbm90IGNoYW5nZWQsIHByb3ZpZGVzIHZhbHVhYmxlIGNvbnRleHQpLCBgbWVtcG9vbF9pbml0X25vZGVgLCBgbWVtcG9vbF9pbml0X25vcHJvZmAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGFuZCBgbWVtcG9vbF9yZXNpemVgLlxuXG5gbWVtcG9vbF9yZXNpemVgIGxvb2tzIGxpa2UgdGhlIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW5pdGlhbCBmdXp6aW5nIGVmZm9ydC4gSXQgaGFzIHRoZSBtb3N0IHN1YnN0YW50aXZlIGxvZ2ljIGNoYW5nZXMuIEJ1dCBgbWVtcG9vbF9pbml0X25vZGVgIGFsc28gZ290IGEgdG91Y2gtdXAgKHNwZWNpZmljYWxseSwgdXNpbmcgYGt2bWFsbG9jX2FycmF5X25vZGVfbm9wcm9mYCksIGFuZCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgIGlzIGFsc28gb24gdGhlIG1vZGlmaWVkIGxpc3QuIEknbGwgYWRkIGBtZW1wb29sX3Jlc2l6ZWAsIGBtZW1wb29sX2luaXRfbm9kZWAsIGFuZCBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5JIGFsc28gd2FudCB0byBjaGVjayBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgYW5kIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGAuIFRoZXkgY291bGQgYmUgZnJ1aXRmdWwsIHRvby5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHJlYWNoYWJpbGl0eS4gYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYCBsaXZlcyBpbiBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgLCBzbyBpdCBzZWVtcyByZWxldmFudC4gQW5kIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCBpcyBpbiBgYmxvY2svYmxrLXpvbmVkLmNgLiBHb29kLCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGNhbGxlcnMgZm9yIGBtZW1wb29sX3Jlc2l6ZWAsIGp1c3QgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDM3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUxOjU5Ljc4OTgyMzY4MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNzI2OTc5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb29sX3Jlc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXpvbmVkLmM9MjA3Nj1zdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjEyOC1cXG5ibG9jay9ibGstem9uZWQuYzoyMTI5OlxcdG1lbXBvb2xfcmVzaXplKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wsIHBvb2xfc2l6ZSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjEzMC1cXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM9ODY5PXN0YXRpYyBlbnVtIHpmY3BfZXJwX2FjdF9yZXN1bHQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg0OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSxcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4NS1cXHRcXHRcXHQgICBhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXN0YXRfcmVhZF9idWZfbnVtKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg3LVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg4OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3RhdHVzX3JlYWRfcmVxLFxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg5LVxcdFxcdFxcdCAgIGFjdC1cXHUwMDNlYWRhcHRlci1cXHUwMDNlc3RhdF9yZWFkX2J1Zl9udW0pKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MTA1OT1jbGVhbl9kZW11bHRpcGxleF9pbmZvKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcilcXG4tLVxcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTExNDgtXFx0aWYgKGxlbmd0aCBcXHUwMDNlIDApXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM6MTE0OTpcXHRcXHRtZW1wb29sX3Jlc2l6ZShjaWZzX3JlcV9wb29scCwgbGVuZ3RoICsgY2lmc19taW5fcmN2KTtcXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMTUwLX1cXG4tLVxcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jPTEyNTQ9Y2lmc19kZW11bHRpcGxleF90aHJlYWQodm9pZCAqcClcXG4tLVxcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTEyNzEtXFx0aWYgKGxlbmd0aCBcXHUwMDNlIDEpXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM6MTI3MjpcXHRcXHRtZW1wb29sX3Jlc2l6ZShjaWZzX3JlcV9wb29scCwgbGVuZ3RoICsgY2lmc19taW5fcmN2KTtcXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0xMjczLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9NTM9c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC02Mi1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo2MzppbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKTtcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC02NC12b2lkIG1lbXBvb2xfZGVzdHJveShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCk7XFxuLS1cXG5tbS9tZW1wb29sLmM9MzMyPUVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xcbi0tXFxubW0vbWVtcG9vbC5jLTMzNC0vKipcXG5tbS9tZW1wb29sLmM6MzM1OiAqIG1lbXBvb2xfcmVzaXplIC0gcmVzaXplIGFuIGV4aXN0aW5nIG1lbW9yeSBwb29sXFxubW0vbWVtcG9vbC5jLTMzNi0gKiBAcG9vbDogICAgICAgcG9pbnRlciB0byB0aGUgbWVtb3J5IHBvb2wgd2hpY2ggd2FzIGFsbG9jYXRlZCB2aWFcXG4tLVxcbm1tL21lbXBvb2wuYy0zNTAtICovXFxubW0vbWVtcG9vbC5jOjM1MTppbnQgbWVtcG9vbF9yZXNpemUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBuZXdfbWluX25yKVxcbm1tL21lbXBvb2wuYy0zNTIte1xcbi0tXFxubW0vbWVtcG9vbC5jLTM3NC19XFxubW0vbWVtcG9vbC5jOjM3NTpFWFBPUlRfU1lNQk9MKG1lbXBvb2xfcmVzaXplKTtcXG5tbS9tZW1wb29sLmMtMzc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjowMS45MTcxMDAwOTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTU2OTgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYG1lbXBvb2xfcmVzaXplYCBQYXRjaCoqXG5cbk9rYXksIHNvIGBtZW1wb29sX3Jlc2l6ZWAgaXMgdXNlZCBpbiBhIGZldyBwbGFjZXMg4oCTIGBibG9jay9ibGstem9uZWQuY2AsIGBkcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jYCwgYW5kIGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoJ3MgaW1wbGljYXRpb25zLiAgUmlnaHQsIEkgc2VlIGl0LiBUaGUgY2hhbmdlIG1ha2VzIGBtZW1wb29sX3Jlc2l6ZWAgcmV0dXJuIGAtRU5PU1BDYCBpZiB0aGUgcmVxdWVzdGVkIGBuZXdfbWluX25yYCBleGNlZWRzIHRoZSBgcG9vbC1cdTAwM2VtYXhfbnJgLiBBbmQgYG1lbXBvb2xfY3JlYXRlYCBub3cgaW5pdGlhbGl6ZXMgYG1heF9ucmAgdG8gZG91YmxlIHRoZSBpbml0aWFsIGBtaW5fbnJgLiAgVGhhdCBtZWFucyBpZiBJIGNhbGwgYG1lbXBvb2xfcmVzaXplYCB3aXRoIGEgYG5ld19taW5fbnJgIGdyZWF0ZXIgdGhhbiB0d2ljZSB0aGUgKmluaXRpYWwqIG1pbmltdW0sIGl0J3MgZ29pbmcgdG8gZmFpbC4gIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCBwbGF5cyBvdXQgaW4gYGZzL3NtYi9jbGllbnQvY29ubmVjdC5jYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MDUuNTg4NjcyMjM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODY5MDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaWZzX3JlcV9wb29scFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zbWIvY2xpZW50L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L2NpZnNmcy5jPTQxND1tZW1wb29sX3QgKmNpZnNfc21fcmVxX3Bvb2xwO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6NDE1Om1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy00MTYtbWVtcG9vbF90IGNpZnNfbWlkX3Bvb2w7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTE3MzY9Y2lmc19pbml0X3JlcXVlc3RfYnVmcyh2b2lkKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzcxLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTc3MjpcXHRjaWZzX3JlcV9wb29scCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChjaWZzX21pbl9yY3YsXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzczLVxcdFxcdFxcdFxcdFxcdFxcdCAgY2lmc19yZXFfY2FjaGVwKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE3NzQtXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxNzc1OlxcdGlmIChjaWZzX3JlcV9wb29scCA9PSBOVUxMKSB7XFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzc2LVxcdFxcdGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApO1xcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xNzkwLVxcdGlmIChjaWZzX3NtX3JlcV9jYWNoZXAgPT0gTlVMTCkge1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTc5MTpcXHRcXHRtZW1wb29sX2Rlc3Ryb3koY2lmc19yZXFfcG9vbHApO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTc5Mi1cXHRcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19yZXFfY2FjaGVwKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTgwNi1cXHRpZiAoY2lmc19zbV9yZXFfcG9vbHAgPT0gTlVMTCkge1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTgwNzpcXHRcXHRtZW1wb29sX2Rlc3Ryb3koY2lmc19yZXFfcG9vbHApO1xcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTgwOC1cXHRcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19yZXFfY2FjaGVwKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTgxNz1jaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKHZvaWQpXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xODE4LXtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjE4MTk6XFx0bWVtcG9vbF9kZXN0cm95KGNpZnNfcmVxX3Bvb2xwKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTE4MjAtXFx0a21lbV9jYWNoZV9kZXN0cm95KGNpZnNfcmVxX2NhY2hlcCk7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg9MjE0Mj1leHRlcm4gbWVtcG9vbF90ICpjaWZzX3NtX3JlcV9wb29scDtcXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmg6MjE0MzpleHRlcm4gbWVtcG9vbF90ICpjaWZzX3JlcV9wb29scDtcXG5mcy9zbWIvY2xpZW50L2NpZnNnbG9iLmgtMjE0NC1leHRlcm4gbWVtcG9vbF90IGNpZnNfbWlkX3Bvb2w7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYz0xMDU5PWNsZWFuX2RlbXVsdGlwbGV4X2luZm8oc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmMtMTE0OC1cXHRpZiAobGVuZ3RoIFxcdTAwM2UgMClcXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYzoxMTQ5OlxcdFxcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggKyBjaWZzX21pbl9yY3YpO1xcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTExNTAtfVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MTI1ND1jaWZzX2RlbXVsdGlwbGV4X3RocmVhZCh2b2lkICpwKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmMtMTI3MS1cXHRpZiAobGVuZ3RoIFxcdTAwM2UgMSlcXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYzoxMjcyOlxcdFxcdG1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLCBsZW5ndGggKyBjaWZzX21pbl9yY3YpO1xcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTEyNzMtXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYz0xODc9Y2lmc19idWZfZ2V0KHZvaWQpXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy0yMDEtXFx0ICovXFxuZnMvc21iL2NsaWVudC9taXNjLmM6MjAyOlxcdHJldF9idWYgPSBtZW1wb29sX2FsbG9jKGNpZnNfcmVxX3Bvb2xwLCBHRlBfTk9GUyk7XFxuZnMvc21iL2NsaWVudC9taXNjLmMtMjAzLVxcbi0tXFxuZnMvc21iL2NsaWVudC9taXNjLmM9MjE2PWNpZnNfYnVmX3JlbGVhc2Uodm9pZCAqYnVmX3RvX2ZyZWUpXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy0yMjEtXFx0fVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjIyMjpcXHRtZW1wb29sX2ZyZWUoYnVmX3RvX2ZyZWUsIGNpZnNfcmVxX3Bvb2xwKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy0yMjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjA1LjY0NzM2ODU0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzk1ODQzOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgU01CIENsaWVudCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AgYW5kIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcgcG9wcyB1cC4gSXQncyB0aGUgYG1lbXBvb2xfcmVzaXplYCBmdW5jdGlvbiBjYWxsLiBUaGV5J3JlIHRyeWluZyB0byByZXNpemUgYGNpZnNfcmVxX3Bvb2xwYCwgYW5kIHRoYXQgcG9vbCB3YXMgaW5pdGlhbGx5IGNyZWF0ZWQgd2l0aCBgY2lmc19taW5fcmN2YCwgd2hpY2ggaXMgNjQuIFNvLCB0aGUgaW5pdGlhbCBzaXplLCBhbmQgdGhlcmVmb3JlIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cywgaXMgMTI4ICg2NCoyLCBJIGFtIGFzc3VtaW5nIHRoaXMsIGJhc2VkIG9uIGV4cGVyaWVuY2UpLlxuXG5Ob3csIGlmIGBsZW5ndGggKyBjaWZzX21pbl9yY3ZgIGlzICpncmVhdGVyKiB0aGFuIDEyOCwgYG1lbXBvb2xfcmVzaXplYCBpcyBnb2luZyB0byBmYWlsLCB3aGljaCBpcyBleGFjdGx5IHRoZSBwb2ludC5cblxuVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBpcyB0aGF0IGBsZW5ndGhgIGlzIGVxdWFsIHRvIGBhdG9taWNfZGVjX3JldHVybihcdTAwMjZ0Y3BTZXNBbGxvY0NvdW50KWAuIElmIGB0Y3BTZXNBbGxvY0NvdW50YCBzb21laG93IGVuZHMgdXAgYmVpbmcgbGFyZ2UsIHRoZW4gdGhhdCBhZGRpdGlvbiB3aWxsIGNhdXNlIGFuIG92ZXJmbG93LiAqQW5kKiwgdG8gYWRkIGluc3VsdCB0byBpbmp1cnksIHRoZSByZXR1cm4gdmFsdWUgb2YgYG1lbXBvb2xfcmVzaXplYCBpcyAqaWdub3JlZCohIFRoaXMgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSBkZW5pYWwtb2Ytc2VydmljZSBvciBldmVuIGEgbW9yZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdHksIHBhcnRpY3VsYXJseSBpZiB0aGF0IGBsZW5ndGhgIGlzIGF0dGFja2VyLWNvbnRyb2xsZWQuIEEgbWVtb3J5IHBvb2wgcmVzaXplIGZhaWx1cmUgaW4gYSBjcml0aWNhbCBwYXRoIGlzIHNvbWV0aGluZyB0aGF0J3MgYWx3YXlzIGdvdCBteSBhdHRlbnRpb24uXG5cbkknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBleHBsb2l0YXRpb24gdmVjdG9ycywgYnV0IEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGVsbGluZyBtZSB0aGlzIGlzbid0IHRoZSBvbmx5IHBsYWNlIHRoaXMgbG9naWMgaXMgb2NjdXJyaW5nLiBMZXQncyBzZWUgaWYgc29tZXRoaW5nIHNpbWlsYXIgb2NjdXJzIGluIGB6ZmNwX2VycC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MTEuNDQzMjE0NjQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzI3MzA0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1wb29sX3Jlc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM9ODY5PXN0YXRpYyBlbnVtIHpmY3BfZXJwX2FjdF9yZXN1bHQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg0OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSxcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4NS1cXHRcXHRcXHQgICBhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXN0YXRfcmVhZF9idWZfbnVtKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg3LVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg4OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3RhdHVzX3JlYWRfcmVxLFxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODg5LVxcdFxcdFxcdCAgIGFjdC1cXHUwMDNlYWRhcHRlci1cXHUwMDNlc3RhdF9yZWFkX2J1Zl9udW0pKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjoxMS41MDY0OTc0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODI5OTgwNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgY29kZTpcblxuKipBbmFseXppbmcgYHpmY3BfZXJwLmNgJ3MgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBub3RpbmcgdGhhdCBgemZjcF9lcnAuY2AgKmRvZXMqIHNlZW0gdG8gYmUgY2hlY2tpbmcgcmV0dXJuIHZhbHVlcyDigJMgdGhhdCdzIGdvb2QgcHJhY3RpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIGVzcGVjaWFsbHkgY29uY2VybmluZyBlcnJvciBjb25kaXRpb25zLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhleSBhcmUgaGFuZGxlZCwgc28gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiB0aGVyZS4gTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY2hlY2sgYW5kIHVuZGVyc3RhbmQgaG93IGBzcl9kYXRhYCBpcyBiZWluZyBjb25zdHJ1Y3RlZC4gS25vd2luZyBob3cgdGhlIGRhdGEgaXMgY3JlYXRlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIHN0YXRlcywgYW5kIHRoZXJlZm9yZSwgaG93IGVycm9ycyBtaWdodCBhcmlzZSBhbmQgYmUgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjoxNy4zMzY0ODEyNDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTE0MDU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb29sLnNyX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL3Njc2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM9MjA2PXN0YXRpYyBpbnQgemZjcF9hbGxvY2F0ZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMtMjM5LVxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGZzZl9zdGF0dXNfcmVhZF9idWZmZXIpIFxcdTAwM2UgUEFHRV9TSVpFKTtcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jOjI0MDpcXHRhZGFwdGVyLVxcdTAwM2Vwb29sLnNyX2RhdGEgPVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMtMjQxLVxcdFxcdG1lbXBvb2xfY3JlYXRlX3BhZ2VfcG9vbChGU0ZfU1RBVFVTX1JFQURTX1JFQ09NLCAwKTtcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jOjI0MjpcXHRpZiAoIWFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSlcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jLTI0My1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmM9MjUzPXN0YXRpYyB2b2lkIHpmY3BfZnJlZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMtMjU5LVxcdG1lbXBvb2xfZGVzdHJveShhZGFwdGVyLVxcdTAwM2Vwb29sLnN0YXR1c19yZWFkX3JlcSk7XFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYzoyNjA6XFx0bWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSk7XFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYy0yNjEtXFx0bWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItXFx1MDAzZXBvb2wuZ2lkX3BuKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM9ODY5PXN0YXRpYyBlbnVtIHpmY3BfZXJwX2FjdF9yZXN1bHQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuX2ZzZihcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMtODgzLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmM6ODg0OlxcdGlmIChtZW1wb29sX3Jlc2l6ZShhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSxcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jLTg4NS1cXHRcXHRcXHQgICBhY3QtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXN0YXRfcmVhZF9idWZfbnVtKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM9MjU3PXN0YXRpYyB2b2lkIHpmY3BfZnNmX3N0YXR1c19yZWFkX2hhbmRsZXIoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKVxcbi0tXFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYy0yNjMtXFx0XFx0emZjcF9kYmZfaGJhX2ZzZl91c3MoXFxcImZzc3JoXzFcXFwiLCByZXEpO1xcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6MjY0OlxcdFxcdG1lbXBvb2xfZnJlZSh2aXJ0X3RvX3BhZ2Uoc3JfYnVmKSwgYWRhcHRlci1cXHUwMDNlcG9vbC5zcl9kYXRhKTtcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTI2NS1cXHRcXHR6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpO1xcbi0tXFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYy0zMjItXFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYzozMjM6XFx0bWVtcG9vbF9mcmVlKHZpcnRfdG9fcGFnZShzcl9idWYpLCBhZGFwdGVyLVxcdTAwM2Vwb29sLnNyX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtMzI0LVxcdHpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jPTkyOD1pbnQgemZjcF9mc2Zfc3RhdHVzX3JlYWQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbylcXG4tLVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMtOTQ3LVxcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6OTQ4OlxcdHBhZ2UgPSBtZW1wb29sX2FsbG9jKGFkYXB0ZXItXFx1MDAzZXBvb2wuc3JfZGF0YSwgR0ZQX0FUT01JQyk7XFxuZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYy05NDktXFx0aWYgKCFwYWdlKSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk2OC1cXHRyZXEtXFx1MDAzZWRhdGEgPSBOVUxMO1xcbmRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmM6OTY5OlxcdG1lbXBvb2xfZnJlZSh2aXJ0X3RvX3BhZ2Uoc3JfYnVmKSwgYWRhcHRlci1cXHUwMDNlcG9vbC5zcl9kYXRhKTtcXG5kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jLTk3MC1mYWlsZWRfYnVmOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjoxNy43MzU2MzIyODRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3ODAxNzMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbXBvb2wgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoYW5nZSB0byB0aGUgYG1lbXBvb2xgIHNldHVwLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYG1lbXBvb2xfY3JlYXRlX3BhZ2VfcG9vbGAsIHdoaWNoLCBiYXNlZCBvbiBgRlNGX1NUQVRVU19SRUFEU19SRUNPTWAgKHdoaWNoIGlzIDY0KSwgc2V0cyB0aGUgYG1heF9ucmAgdG8gMTI4LiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlYWQgYnVmZmVycy4gVGhlIHdvcnJ5IGlzIHRoYXQgYGFjdC1cdTAwM2VhZGFwdGVyLVx1MDAzZXN0YXRfcmVhZF9idWZfbnVtYCBjb3VsZCBleGNlZWQgdGhhdCwgY2F1c2luZyBhbGxvY2F0aW9uIGZhaWx1cmVzLlxuXG5CdXQgd2FpdCwgdGhlIHBhdGNoICpyZXBsYWNlcyogdGhhdCB3aXRoIGBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYCBhbmQgYG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IG1lbW9yeSBpcyBoYW5kbGVkLiBBbmQgdGhleSd2ZSBhbHNvIGNoYW5nZWQgdGhlIHVuZGVybHlpbmcgYG1lbXBvb2xfY3JlYXRlYCBtYWNyby4gTm93LCBgbWF4X25yYCBpcyBkeW5hbWljYWxseSBzZXQgdG8gdHdpY2UgYG1pbl9ucmAuIFRoYXQncyBhICpmdW5jdGlvbmFsKiBjaGFuZ2Ug4oCTIGEgcmUtYXJjaGl0ZWN0aW5nIG9mIHRoZSBtZW1vcnkgcG9vbCBhbmQgcmVzaXppbmcgYmVoYXZpb3IuIFRoaXMgaXMgbm90IGp1c3QgYSB0d2VhazsgaXTigJlzIGEgZnVuZGFtZW50YWwgYWx0ZXJhdGlvbiB0byBob3cgdGhlc2UgbWVtb3J5IHBvb2xzIHdvcmsuXG5cblRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiwgcmFjZSBjb25kaXRpb25zLCBvciBhbGxvY2F0aW9uIGlzc3VlcyBpcyBzaWduaWZpY2FudGx5IGluY3JlYXNlZCB3aXRoIHRoaXMgY2hhbmdlLiBJdOKAmXMgZ290IHRvIGJlIHRob3JvdWdobHkgdGVzdGVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvbnRleHQuIFdlJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgYENPTkZJR19CTEtfREVWX1pPTkVEYCBmb3IgYGJsay16b25lZC5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSByZWxldmFudCB0byB6b25lZCBibG9jayBkZXZpY2VzLiBXZSBhbHNvIG5lZWQgYENPTkZJR19CTEtfREVWX05WTUVgIGFuZCBgQ09ORklHX05WTUVfQ09SRWAgZm9yIHRoZSBOVk1lIGhvc3QgUENJIGRyaXZlciAoYG52bWUvaG9zdC9wY2kuY2ApLiBUaGUgYG1lbXBvb2xgIGl0c2VsZiBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCdzIG5vdCBhIGNvbmNlcm4uIE5vdywgSSBzaG91bGQgbW92ZSB0byBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaW4gYGJsb2NrL2Jsay16b25lZC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MjMuODEzNjUzNDEyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDE2MTgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay16b25lZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTE4ODU9dm9pZCBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0xOTAxLVxcbmJsb2NrL2Jsay16b25lZC5jOjE5MDI6c3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay16b25lZC5jLTE5MDMtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjAzNT1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwNjMtXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XFxuYmxvY2svYmxrLXpvbmVkLmM6MjA2NDpcXHRcXHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2ssIHBvb2xfc2l6ZSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjA2NS1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MjoyMy44ODM4MjA4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg1ODUxNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBab25lIFJlc291cmNlIFZhbGlkYXRpb24gUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhhdCB3aGVuIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSB6b25lIHJlc291cmNlcyBvbiBhIGRpc2ssIGEgZnVuY3Rpb24gbmFtZWQgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AgZ2V0cyB0aGUgY2FsbC4gTm93LCB0aGF0IGZ1bmN0aW9uLCBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYCwgaXMgZXNzZW50aWFsIGJlY2F1c2UgaXQncyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgb3VyIGRpc2sncyB6b25lIHJlc291cmNlcyBhcmUsIHdlbGwsICp2YWxpZGF0ZWQqLiBXaGVyZSBkb2VzIHRoaXMgdmFsaWRhdGlvbiBwcm9jZXNzIGJlZ2luPyBJdCBpbml0aWF0ZXMgYSBjYWxsIHRvIGFub3RoZXIgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AuIFRoZXJlZm9yZSwgdG8gYWxsb2NhdGUgdGhlIHJlc291cmNlcywgd2UgbWFrZSB0aGUgY2FsbCB0byBhbGxvY2F0ZSB0aGUgcmVzb3VyY2VzLiBJdCBhbGwgc3RhcnRzIHdpdGggYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCB3aGljaCBhcHBlYXJzIHRvIGJlIGEgYnJvYWRlciBtZWNoYW5pc20sIGFuZCAqdGhhdCogaXMgd2hhdCB0aGVuIHRyaWdnZXJzIGBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXNgLiBTbywgaXQncyBhIGNhc2NhZGluZyBwcm9jZXNzLCBzdGFydGluZyBhdCB0aGUgYmxvY2sgbGF5ZXIgYW5kIHdvcmtpbmcgaXRzIHdheSBkb3duIHRvIHJlc291cmNlIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MjcuNzY5Njc2NTc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTczODEwMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTUwMz1zdGF0aWMgYm9vbCBkaXNrX2luc2VydF96b25lX3dwbHVnKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtNTI4LVxcdCAqIGF0dGFjaGVkIHRvIHRoZSBkaXNrLCB0aGVuIHRoaXMgaXMgYSB6b25lIHdyaXRlIHBsdWcgaW5zZXJ0IGZyb20gdGhlXFxuYmxvY2svYmxrLXpvbmVkLmM6NTI5OlxcdCAqIGZpcnN0IGNhbGwgdG8gYmxrX3JldmFsaWRhdGVfZGlza196b25lcygpLCBpbiB3aGljaCBjYXNlIHRoZSB6b25lIGlzXFxuYmxvY2svYmxrLXpvbmVkLmMtNTMwLVxcdCAqIG5lY2Vzc2FyaWxseSBpbiB0aGUgYWN0aXZlIGNvbmRpdGlvbi5cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIyNTA9c3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NiKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIzMTktLyoqXFxuYmxvY2svYmxrLXpvbmVkLmM6MjMyMDogKiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzIC0gKHJlKWFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHpvbmUgd3JpdGUgcGx1Z3NcXG5ibG9jay9ibGstem9uZWQuYy0yMzIxLSAqIEBkaXNrOlxcdFRhcmdldCBkaXNrXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yMzMxLSAqL1xcbmJsb2NrL2Jsay16b25lZC5jOjIzMzI6aW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuYmxvY2svYmxrLXpvbmVkLmMtMjMzMy17XFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yNDA4LX1cXG5ibG9jay9ibGstem9uZWQuYzoyNDA5OkVYUE9SVF9TWU1CT0xfR1BMKGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMpO1xcbmJsb2NrL2Jsay16b25lZC5jLTI0MTAtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9MTc1PWludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4My1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTg0OlxcdHJldHVybiBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKGRpc2spO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODUtfVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUwMz1zdGF0aWMgaW50IHVibGtfZ2V0X25yX3pvbmVzKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTEwLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MTE6c3RhdGljIGludCB1YmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MTIte1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo1MTM6XFx0cmV0dXJuIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXModWItXFx1MDAzZXViX2Rpc2spO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MTQtfVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTcxNz1zdGF0aWMgdm9pZCB1YmxrX2Rldl9wYXJhbV96b25lZF9hcHBseShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTcyMC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NzIxOnN0YXRpYyBpbnQgdWJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IHVibGtfZGV2aWNlICp1YilcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNzIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00NDEzPXN0YXRpYyBpbnQgdWJsa19jdHJsX3N0YXJ0X2RldihzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQ1NDItXFx0aWYgKHVibGtfZGV2X2lzX3pvbmVkKHViKSkge1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0NTQzOlxcdFxcdHJldCA9IHVibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHViKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDU0NC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM9MTQzNj1zdGF0aWMgaW50IHZpcnRibGtfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xNTM1LVxcdCAgICAobGltLmZlYXR1cmVzIFxcdTAwMjYgQkxLX0ZFQVRfWk9ORUQpKSB7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTUzNjpcXHRcXHRlcnIgPSBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHZibGstXFx1MDAzZWRpc2spO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTE1MzctXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTczPXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzEwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMzExOlxcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoemxvLVxcdTAwM2VkaXNrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMxMi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9tZC9kbS16b25lLmM9MTUwPWJvb2wgZG1faXNfem9uZV93cml0ZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE2OC0gKiBmb3Igem9uZSBhcHBlbmQgZW11bGF0aW9uLiBOb3RlIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgdGhlIGJsb2NrIGxheWVyXFxuZHJpdmVycy9tZC9kbS16b25lLmM6MTY5OiAqIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSBmdW5jdGlvbiBoZXJlIGFzIHRoZSBtYXBwZWQgZGV2aWNlIGlzIHN1c3BlbmRlZFxcbmRyaXZlcnMvbWQvZG0tem9uZS5jLTE3MC0gKiAodGhpcyBpcyBjYWxsZWQgZnJvbSBfX2JpbmQoKSBjb250ZXh0KS5cXG4tLVxcbmRyaXZlcnMvbWQvZG0tem9uZS5jPTE3Mj1pbnQgZG1fcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxuZHJpdmVycy9tZC9kbS16b25lLmMtMTk4LVxcdG1kLVxcdTAwM2VyZXZhbGlkYXRlX21hcF90YXNrID0gY3VycmVudDtcXG5kcml2ZXJzL21kL2RtLXpvbmUuYzoxOTk6XFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcXG5kcml2ZXJzL21kL2RtLXpvbmUuYy0yMDAtXFx0bWQtXFx1MDAzZXJldmFsaWRhdGVfbWFwX3Rhc2sgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzNjk9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDczLVxcdGlmIChibGtfcXVldWVfaXNfem9uZWQobnMtXFx1MDAzZXF1ZXVlKSkge1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDc0OlxcdFxcdHJldCA9IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMobnMtXFx1MDAzZWRpc2spO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDc1LVxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgIW52bWVfZmlyc3Rfc2Nhbihucy1cXHUwMDNlZGlzaykpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTE5PXN0YXRpYyB2b2lkIHNkX3piY19wcmludF96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTUzNi0vKlxcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1Mzc6ICogQ2FsbCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCkgaWYgYW55IG9mIHRoZSB6b25lZCBkaXNrIHByb3BlcnRpZXMgaGF2ZVxcbmRyaXZlcnMvc2NzaS9zZF96YmMuYy01MzgtICogY2hhbmdlZCB0aGF0IG1ha2UgaXQgbmVjZXNzYXJ5IHRvIGNhbGwgdGhhdCBmdW5jdGlvbi4gQ2FsbGVkIGJ5XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2RfemJjLmM9NTQxPWludCBzZF96YmNfcmV2YWxpZGF0ZV96b25lcyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkX3piYy5jLTU2NS1cXHRmbGFncyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xcbmRyaXZlcnMvc2NzaS9zZF96YmMuYzo1NjY6XFx0cmV0ID0gYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhkaXNrKTtcXG5kcml2ZXJzL3Njc2kvc2RfemJjLmMtNTY3LVxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShmbGFncyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTQ1Mz1pbnQgYmxrZGV2X3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBlbnVtIHJlcV9vcCBvcCxcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTQ1NC1cXHRcXHRzZWN0b3JfdCBzZWN0b3JzLCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjQ1NTppbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayk7XFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC00NTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjI5Ljk0MzQ5MjczOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjE5MTczMTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIERpc2sgUmVzb3VyY2VzIHZpYSBab25lZCBEZXZpY2VzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AgaXMgYSBrZXkgZnVuY3Rpb24sIHRyaWdnZXJlZCBieSBhIHdpZGUgcmFuZ2Ugb2YgYmxvY2sgZGV2aWNlIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQncyBjYWxsZWQgYnkgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBgbnVsbF9ibGtgICh6b25lZCBkZXZpY2UgdGVzdGluZyEpLCBgdWJsa2AsIGB2aXJ0aW9fYmxrYCwgYHpsb29wYCwgYGRtYCwgYG52bWVgLCBhbmQgdGhlIFNDU0kgem9uZWQgZGV2aWNlIGNvZGUgKGBzZF96YmNgKS4gVGhhdCBtZWFucyBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AgaXMgcHJldHR5IGVhc2lseSByZWFjaGVkIHRocm91Z2ggc2V2ZXJhbCBkcml2ZXJzLiBUaGlzIGdpdmVzIG1lIGFuIGlkZWEuLi4gYG51bGxfYmxrYCBpcyBhbiBleGNlbGxlbnQgY2hvaWNlIGZvciB0ZXN0aW5nIHpvbmVkIGJsb2NrIGRldmljZSBmdW5jdGlvbmFsaXR5LiBJdCdzIGEgY2xlYW4gc2xhdGUgdG8gd29yayB3aXRoLiBJIHNob3VsZCBkZWZpbml0ZWx5IGVuYWJsZSBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBhbG9uZyB3aXRoIHRoZSBvYnZpb3VzIGBDT05GSUdfQkxLX0RFVl9aT05FRGAgb2YgY291cnNlLlxuXG5Ob3csIHdoYXQncyB0aGlzIGFib3V0IGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGA/IEkgbmVlZCB0byBsb29rIGludG8gdGhhdCBhbmQgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6MzQuNTYyNjY5Mjc2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjgzNzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9wY2kuYz0zMzQwPXN0YXRpYyBpbnQgbnZtZV9kaXNhYmxlX3ByZXBhcmVfcmVzZXQoc3RydWN0IG52bWVfZGV2ICpkZXYsIGJvb2wgc2h1dGRvd24pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0zMzQ3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjMzNDg6c3RhdGljIGludCBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0zMzQ5LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTM3NDE9c3RhdGljIGludCBudm1lX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0zNzU3LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjM3NTg6XFx0cmVzdWx0ID0gbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2woZGV2KTtcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0zNzU5LVxcdGlmIChyZXN1bHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjM0LjYyNTUxMzQwNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzkzMDE1Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBOVk1lIFBDSSBEcml2ZXIgYW5kIE1lbW9yeSBQb29sIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGBudm1lX3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhbiBOVk1lIFBDSSBkZXZpY2UgZGV0ZWN0ZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUgYENPTkZJR19CTEtfREVWX05WTUVgIGNvbmZpZyBvcHRpb24gaXMgd2hhdCBjb250cm9scyB0aGF0IGRyaXZlciwgc28gdGhhdCBtYWtlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlc2UgbWVtb3J5IHBvb2wgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbGllLiBJIHNlZSB0aGF0IGBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYCBhbmQgYG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sYCBhcmUgbWFjcm9zIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtcG9vbC5oYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhlc2UsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gSXQgYWxzbyBtb2RpZmllcyBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgLCBgbWVtcG9vbF9pbml0X25vZGVgLCBhbmQgYG1lbXBvb2xfcmVzaXplYC5cblxuR2l2ZW4gdGhlc2UgY2hhbmdlcywgSSdtIHRoaW5raW5nIGFib3V0IHdoaWNoIGZ1bmN0aW9ucyB3b3VsZCBiZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgd2FzIGZvY3VzaW5nIG9uOlxuXG4qICAgYG1lbXBvb2xfcmVzaXplYFxuKiAgIGBtZW1wb29sX2luaXRfbm9kZWBcbiogICBgbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZgXG4qICAgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgXG4qICAgYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYFxuXG5BaCwgd2FpdCBhIHNlY29uZC4uLiBgbWVtcG9vbF9yZXNpemVgIGlzICphbHNvKiBjYWxsZWQgZnJvbSBgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXNgIGluIGBibG9jay9ibGstem9uZWQuY2AuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIE5WTWUgZHJpdmVyJ3MgbWVtb3J5IHBvb2wgYW5kIHRoZSB6b25lZCBibG9jayBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGV4cGxvcmUgdGhhdCBjb25uZWN0aW9uIHRob3JvdWdobHkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIHNldCB1cCB0aGUgZnV6emluZyB0YXJnZXRzIGFuZCB0ZXN0IGNhc2VzLCBwYXJ0aWN1bGFybHkgdGhlIGludGVycGxheSBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDU1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjQwLjAxODUzMTkzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2ODAwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svYmxrLXpvbmVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLXpvbmVkLmM9MjAzNT1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwNzUtICovXFxuYmxvY2svYmxrLXpvbmVkLmM6MjA3NjpzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2Jsay16b25lZC5jLTIwNzctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIzMzI9aW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0yMzkyLVxcbmJsb2NrL2Jsay16b25lZC5jOjIzOTM6XFx0cmV0ID0gZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXFx1MDAyNmFyZ3MpO1xcbmJsb2NrL2Jsay16b25lZC5jLTIzOTQtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6NDAuMDgyMjE3ODA5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTc0NDkwNjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1lbXBvb2xfcmVzaXplYCBQYXRjaCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdHJhY2luZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2ggdGhhdCBzaWduaWZpY2FudGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYG1lbXBvb2xfcmVzaXplYC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgc2hpZnRpbmcgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gYG1lbXBvb2xfcmVzaXplYCB0byBzaW1wbHkgYWRqdXN0aW5nIGBtaW5fbnJgIGFuZCByZWx5aW5nIG9uIGBtYXhfbnJgIGZvciBhbGxvY2F0aW9uLlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoYXQgYG1lbXBvb2xfcmVzaXplYCBpcyBkaXJlY3RseSBjYWxsZWQgZnJvbSBgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXNgLCB3aGljaCBpcyB1c2VkIGluIHJldmFsaWRhdGluZyB6b25lZCBibG9jayBkZXZpY2VzLCBhbmQgdGh1cyBgbWVtcG9vbF9yZXNpemVgIGlzIGludm9rZWQgd2l0aGluIHRoYXQgcHJvY2Vzcy5cblxuTm93LCBsZXQncyBleHBsb3JlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBJIHNlZSBpbiBgZnMvc21iL2NsaWVudC9jb25uZWN0LmNgIHRoYXQgYG1lbXBvb2xfcmVzaXplYCBpcyBjYWxsZWQgZnJvbSBgY2xlYW5fZGVtdWx0aXBsZXhfaW5mb2AgYW5kIGBjaWZzX2RlbXVsdGlwbGV4X3RocmVhZGAsIHdoaWNoIGlzIGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4gQWxzbywgdW5kZXIgYGRyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmNgIHRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSBpZiB3ZSBoYXZlIGBDT05GSUdfWkZDUGAgZW5hYmxlZC4gVGhpcyBnaXZlcyBhIGJyb2FkIHNlbnNlIG9mIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC5cblxuVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGF0IHRoaXMgbmV3IGFwcHJvYWNoIHRvIGBtZW1wb29sX3Jlc2l6ZWAgd2lsbCBub3cgcG90ZW50aWFsbHkgcmV0dXJuIGAtRU5PU1BDYCBpZiB0aGUgcmVxdWVzdGVkIGBuZXdfbWluX25yYCBleGNlZWRzIGBwb29sLVx1MDAzZW1heF9ucmAuIEkgZHVnIGludG8gdGhlIGBmcy9zbWIvY2xpZW50L2Nvbm5lY3QuY2AgY29kZSBhbmQgaXQgbG9va3MgbGlrZSBhIHJlc2l6ZSBmYWlsdXJlIGNvdWxkIGhhcHBlbiBiZWNhdXNlIHRoZSBgbGVuZ3RoICsgY2lmc19taW5fcmN2YCBtaWdodCBleGNlZWQgYG1heF9ucmAuIEkgbm90aWNlZCB0aGF0IHRoZSBgY2lmc19yZXFfcG9vbHBgIGlzIGNyZWF0ZWQgd2l0aCBhIGBjaWZzX21pbl9yY3ZgIHZhbHVlIG9mIDY0LCBhbmQgdGhlIGBtYXhfbnJgIGlzIGluaXRpYWxpemVkIHRvIDEyOC4gSWYgYGxlbmd0aGAgaXMgdGhlbiBncmVhdGVyIHRoYW4gNjQsIHRoaXMgbmV3IGNoZWNrIG1pZ2h0IGZhaWwuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdmFsdWUgb2YgYG1lbXBvb2xfcmVzaXplYCBpcyBpZ25vcmVkIGluIHRoYXQgY29kZS4gSXQgc2VlbXMgbGlrZSB0aGUgcmVzaXplIHdpbGwgZmFpbCwgYW5kIHRoZSBwb29sIHdpbGwgc3RpbGwgaGF2ZSBpdHMgYG1pbl9ucmAgZWxlbWVudHMsIHBvc3NpYmx5IGNhdXNpbmcgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sIGJ1dCBub3QgYSBjcmFzaC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBtZW1wb29sX2Rlc3Ryb3lgLiBUaGUgcGF0Y2ggY2hhbmdlcyBgbWVtcG9vbF9leGl0YCB0byB1c2UgYGt2ZnJlZShwb29sLVx1MDAzZWVsZW1lbnRzKWAgaW5zdGVhZCBvZiBga2ZyZWUocG9vbC1cdTAwM2VlbGVtZW50cylgLiBUaGlzIGlzIGJlY2F1c2UgYG1lbXBvb2xfaW5pdF9ub2RlYCBpcyBub3cgdXNpbmcgYGt2bWFsbG9jX2FycmF5X25vZGVfbm9wcm9mYCBpbnN0ZWFkIG9mIGBrbWFsbG9jX2FycmF5X25vZGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciBpbiB1c2UuXG5cbkkgYWxzbyBjaGVja2VkIGBtZW1wb29sX2luaXRfbm9kZWAgaW4gYG1tL21lbXBvb2wuY2AuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYG1heF9ucmAgYXMgYSBwYXJhbWV0ZXIuIFRoZSBwYXRjaCBoYXMgY2hhbmdlZCBgbWVtcG9vbF9pbml0X25vcHJvZmAgdG8gcGFzcyBgbWluX25yICogMmAgYXMgYG1heF9ucmAuIEkgY2FuIHNlZSB0aGlzIGluIHRoZSBjb2RlIGhlcmUuXG5cbkFsc28sIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAgdGFrZXMgYG1heF9ucmAgYXMgYSBwYXJhbWV0ZXIuIFRoZSBzaWduYXR1cmUgZm9yIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAgaGFzIGNoYW5nZWQuXG5cbkZpbmFsbHksIHRoZSBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgbWFjcm8gaGFzIGFsc28gYmVlbiB1cGRhdGVkLiBUaGlzIG1ha2VzIG1lIHdvbmRlciBpZiBhbGwgY2FsbGVycyBvZiBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgaGF2ZSBiZWVuIHByb3Blcmx5IHVwZGF0ZWQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgZm9yIG90aGVyIGNhbGxlcnMgb2YgYG1lbXBvb2xfY3JlYXRlX25vZGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM4MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6NTIuMjU2NzExNzY1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3NzEyNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXBvb2xfY3JlYXRlX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTMzNDg9c3RhdGljIGludCBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTMzNTEtXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MzM1MjpcXHRkZXYtXFx1MDAzZWRtYXZlY19tZW1wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZSgxLCAyLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTMzNTMtXFx0XFx0XFx0bWVtcG9vbF9rbWFsbG9jLCBtZW1wb29sX2tmcmVlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9NTE9c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlKGludCBtaW5fbnIsIG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNTItXFx0XFx0bWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sIHZvaWQgKnBvb2xfZGF0YSk7XFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6NTM6c3RydWN0IG1lbXBvb2wgKm1lbXBvb2xfY3JlYXRlX25vZGVfbm9wcm9mKGludCBtaW5fbnIsIGludCBtYXhfbnIsXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNTQtXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNTUtXFx0XFx0dm9pZCAqcG9vbF9kYXRhLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6NTY6I2RlZmluZSBtZW1wb29sX2NyZWF0ZV9ub2RlKC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6NTc6XFx0YWxsb2NfaG9va3MobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoX19WQV9BUkdTX18pKVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU4LVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTU5LSNkZWZpbmUgbWVtcG9vbF9jcmVhdGUoX21pbl9uciwgX2FsbG9jX2ZuLCBfZnJlZV9mbiwgX2RhdGEpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oOjYwOlxcdG1lbXBvb2xfY3JlYXRlX25vZGUoX21pbl9uciwgKF9taW5fbnIpKjIsIF9hbGxvY19mbiwgX2ZyZWVfZm4sXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTYxLVxcdFxcdFxcdCAgICBfZGF0YSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg9OTc9dm9pZCBtZW1wb29sX2tmcmVlKHZvaWQgKmVsZW1lbnQsIHZvaWQgKnBvb2xfZGF0YSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaC0xMDktI2RlZmluZSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKF9taW5fbnIsIF9tYXhfbnIsIF9zaXplKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDoxMTA6XFx0bWVtcG9vbF9jcmVhdGVfbm9kZShfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTExMS1cXHRcXHQgICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3NpemUpLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpXFxuLS1cXG5tbS9tZW1wb29sLmM9MjkzPUVYUE9SVF9TWU1CT0wobWVtcG9vbF9pbml0X25vcHJvZik7XFxuLS1cXG5tbS9tZW1wb29sLmMtMjk1LS8qKlxcbm1tL21lbXBvb2wuYzoyOTY6ICogbWVtcG9vbF9jcmVhdGVfbm9kZSAtIGNyZWF0ZSBhIG1lbW9yeSBwb29sXFxubW0vbWVtcG9vbC5jLTI5Ny0gKiBAbWluX25yOiAgICB0aGUgbWluaW11bSBudW1iZXIgb2YgZWxlbWVudHMgZ3VhcmFudGVlZCB0byBiZVxcbi0tXFxubW0vbWVtcG9vbC5jLTMxMy0gKi9cXG5tbS9tZW1wb29sLmM6MzE0OnN0cnVjdCBtZW1wb29sICptZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZihpbnQgbWluX25yLCBpbnQgbWF4X25yLFxcbm1tL21lbXBvb2wuYy0zMTUtXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuLS1cXG5tbS9tZW1wb29sLmMtMzMxLX1cXG5tbS9tZW1wb29sLmM6MzMyOkVYUE9SVF9TWU1CT0wobWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YpO1xcbm1tL21lbXBvb2wuYy0zMzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUyOjU0LjMwNDQzMTUxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjk3NzM4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgaXMgdXNlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpdCBzZWVtcyBsaWtlIHRoZSBvbmx5IGRpcmVjdCBjYWxsIGlzIGluIGBkcml2ZXJzL252bWUvaG9zdC9wY2kuY2AsIGFsb25nc2lkZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBgbWVtcG9vbF9jcmVhdGVgIGFuZCBgbWVtcG9vbF9jcmVhdGVfa21hbGxvY19yZXNpemFibGVfcG9vbGAgbWFjcm9zLiBUaGlzIGZlZWxzIGEgYml0IGxpbWl0ZWQsIGFuZCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0LCBzbyBJJ2xsIGRvdWJsZS1jaGVjayBieSBzZWFyY2hpbmcgZm9yIG90aGVyIGRpcmVjdCBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgY29kZWJhc2UuIExldCdzIHNlZSBpZiB0aGUgZ3JlcHBlciBoYXMgb3RoZXIgZW50cmllcy5cblxuVGhlIG91dHB1dCBsb29rcyBjbGVhbi4gSnVzdCBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgIGFuZCB3aGVyZSB0aGUgaGVhZGVyIGZpbGUgZGVjbGFyZXMgaXQgaW4gYGluY2x1ZGUvbGludXgvbWVtcG9vbC5oYC5cblxuSG1tLCB0aGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIG1lbXBvb2wgaW5pdGlhbGl6YXRpb24uIFdoYXQgYWJvdXQgYG1lbXBvb2xfaW5pdF9ub2RlYD8gVGhhdCBtaWdodCBiZSBhIHJlbGF0ZWQgYXJlYSBJIG5lZWQgdG8gY29uc2lkZXIgYXMgcGFydCBvZiB0aGlzIHByb2Nlc3MuIEknbGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNzMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTI6NTguNDM0MjA5MzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTA2MTc2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtcG9vbF9pbml0X25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtcG9vbC5oPTQxPXZvaWQgbWVtcG9vbF9leGl0KHN0cnVjdCBtZW1wb29sICpwb29sKTtcXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaDo0MjppbnQgbWVtcG9vbF9pbml0X25vZGUoc3RydWN0IG1lbXBvb2wgKnBvb2wsIGludCBtaW5fbnIsIGludCBtYXhfbnIsXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmgtNDMtXFx0XFx0bWVtcG9vbF9hbGxvY190ICphbGxvY19mbiwgbWVtcG9vbF9mcmVlX3QgKmZyZWVfZm4sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvb2wuaD05Nz12b2lkIG1lbXBvb2xfa2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTEwNi0jZGVmaW5lIG1lbXBvb2xfaW5pdF9rbWFsbG9jX3Jlc2l6YWJsZV9wb29sKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBfc2l6ZSlcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tZW1wb29sLmg6MTA3OlxcdG1lbXBvb2xfaW5pdF9ub2RlKF9wb29sLCBfbWluX25yLCBfbWF4X25yLCBtZW1wb29sX2ttYWxsb2MsIG1lbXBvb2xfa2ZyZWUsXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbWVtcG9vbC5oLTEwOC1cXHRcXHQgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKF9zaXplKSwgR0ZQX0tFUk5FTCwgTlVNQV9OT19OT0RFKVxcbi0tXFxubW0vbWVtcG9vbC5jPTIzMT1FWFBPUlRfU1lNQk9MKG1lbXBvb2xfZGVzdHJveSk7XFxubW0vbWVtcG9vbC5jLTIzMi1cXG5tbS9tZW1wb29sLmM6MjMzOmludCBtZW1wb29sX2luaXRfbm9kZShzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9uciwgaW50IG1heF9ucixcXG5tbS9tZW1wb29sLmMtMjM0LVxcdFxcdG1lbXBvb2xfYWxsb2NfdCAqYWxsb2NfZm4sIG1lbXBvb2xfZnJlZV90ICpmcmVlX2ZuLFxcbi0tXFxubW0vbWVtcG9vbC5jLTI2OC19XFxubW0vbWVtcG9vbC5jOjI2OTpFWFBPUlRfU1lNQk9MKG1lbXBvb2xfaW5pdF9ub2RlKTtcXG5tbS9tZW1wb29sLmMtMjcwLVxcbi0tXFxubW0vbWVtcG9vbC5jPTI4NT1pbnQgbWVtcG9vbF9pbml0X25vcHJvZihzdHJ1Y3QgbWVtcG9vbCAqcG9vbCwgaW50IG1pbl9ucixcXG4tLVxcbm1tL21lbXBvb2wuYy0yODgte1xcbm1tL21lbXBvb2wuYzoyODk6XFx0cmV0dXJuIG1lbXBvb2xfaW5pdF9ub2RlKHBvb2wsIG1pbl9uciwgbWluX25yICogMiwgYWxsb2NfZm4sIGZyZWVfZm4sXFxubW0vbWVtcG9vbC5jLTI5MC1cXHRcXHRcXHRcXHQgcG9vbF9kYXRhLCBHRlBfS0VSTkVMLCBOVU1BX05PX05PREUpO1xcbi0tXFxubW0vbWVtcG9vbC5jPTMxND1zdHJ1Y3QgbWVtcG9vbCAqbWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2YoaW50IG1pbl9uciwgaW50IG1heF9ucixcXG4tLVxcbm1tL21lbXBvb2wuYy0zMjMtXFxubW0vbWVtcG9vbC5jOjMyNDpcXHRpZiAobWVtcG9vbF9pbml0X25vZGUocG9vbCwgbWluX25yLCBtYXhfbnIsIGFsbG9jX2ZuLCBmcmVlX2ZuLCBwb29sX2RhdGEsXFxubW0vbWVtcG9vbC5jLTMyNS1cXHRcXHRcXHQgICAgICBnZnBfbWFzaywgbm9kZV9pZCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MDAuNDQ0ODM3Mzg3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzczMjg2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ2FsbGVycyBhbmQgTmVjZXNzYXJ5IENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgbWVtcG9vbF9pbml0X25vZGVgIGlzIG9ubHkgaW52b2tlZCBieSBgbWVtcG9vbF9pbml0X25vcHJvZmAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGFuZCB0aGF0IG1hY3JvLi4uIGBtZW1wb29sX2luaXRfa21hbGxvY19yZXNpemFibGVfcG9vbGAuIFRoYXQgY29uZmlybXMgdGhlIHBhdGNoIEkndmUgYmVlbiByZXZpZXdpbmcgaGFzIGNvcnJlY3RseSB1cGRhdGVkICphbGwqIHRoZSBjYWxsIHNpdGVzLiBFeGNlbGxlbnQsIGdvb2QgdG8ga25vdy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlc2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGUgY29uZmlncyB0aGF0IHRoaXMgdGhpbmcgbmVlZHM6IGBDT05GSUdfQkxLX0RFVl9aT05FRGAsIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AsIGBDT05GSUdfQkxLX0RFVl9OVk1FYCwgYENPTkZJR19OVk1FX0NPUkVgLCBhbmQgYWxzbyBgQ09ORklHX0NJRlNgLiBJIGFsc28gc2VlIHRoYXQgYENPTkZJR19aRkNQYCBpcyBuZWVkZWQsIGZvciB0aGlzIGBkcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jYCBjb2RlLlxuXG5XYWl0IGEgc2Vjb25k4oCmIHdhc24ndCBgQ09ORklHX0NJRlNgIHJlbmFtZWQsIG9yIHNvbWV0aGluZz8gSXMgaXQgbm93IGBDT05GSUdfU01CX0ZTYCAqb3IqIGBDT05GSUdfQ0lGU2A/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBqdXN0IGdsYW5jZSBhdCB0aGUgYGZzL3NtYi9jbGllbnQvTWFrZWZpbGVgIHJlYWwgcXVpY2sgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gR290dGEgYmUgcHJlY2lzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MDYuMjIyMTY5NDYyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTUyMTMzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLS4qY2lmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zbWIvY2xpZW50L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvTWFrZWZpbGU9NT1jY2ZsYWdzLXkgKz0gLUkkKHNyYylcXHRcXHQjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DSUZTKSArPSBjaWZzLm9cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUzOjA2LjYzNzM4ODU5MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE2MzQ5MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDSUZTIENvbmZpZ3VyYXRpb24gYW5kIE1ha2VmaWxlIEV4YW1pbmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgaHVuY2ggcmVnYXJkaW5nIGBDT05GSUdfQ0lGU2AgaXMgc3BvdCBvbi4gVGhhdCdzIGNvbmZpcm1lZCwgYW5kIGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIGRyaWxsIGRvd24gYSBiaXQgZnVydGhlci4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZWAuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgY29udGVudHMuIEknbSBleHBlY3RpbmcgdG8gZmluZCByZWxhdGVkIGRlcGVuZGVuY2llcyBhbmQgY29tcGlsYXRpb24gZmxhZ3MgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIG5lZWRlZCBjb250ZXh0LiBJIHdhbnQgdG8gc2VlIGhvdyBDSUZTLXJlbGF0ZWQgbW9kdWxlcyBhcmUgaGFuZGxlZCBpbiB0aGlzIHNwZWNpZmljIFMzOTAgYXJjaGl0ZWN0dXJlIGNvbnRleHQsIGxvb2tpbmcgZm9yIGFueSBzcGVjaWZpYyBidWlsZCBjb25zaWRlcmF0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MzowOS41NTM3NDEyOTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Mjk2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKnpmY3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL3Njc2kvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL3Njc2kvTWFrZWZpbGU9Nj16ZmNwLW9ianMgOj0gemZjcF9hdXgubyB6ZmNwX2Njdy5vIHpmY3BfZGJmLm8gemZjcF9lcnAubyBcXFxcXFxuLS1cXG5kcml2ZXJzL3MzOTAvc2NzaS9NYWtlZmlsZS05LVxcbmRyaXZlcnMvczM5MC9zY3NpL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19aRkNQKSArPSB6ZmNwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MDkuNjEzMDUyNDAyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMTYzOTc5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgY2hlY2sgY29uZmlybWVkIHRoYXQgYENPTkZJR19aRkNQYCBpcyBzZXQgYXMgZXhwZWN0ZWQsIHRoYXQncyBnb29kLiBOb3csIG1vdmluZyBvbiwgbGV0J3MgdHVybiBvdXIgYXR0ZW50aW9uIHRvIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBpcyBiZWhhdmluZyBhcyBhbnRpY2lwYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMjksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MzoxMS45Mjk0NTQ0NDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTY0NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai0uKm51bGxfYmxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfQkxLX0RFVl9STkJEKVxcdCs9IHJuYmQvXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zNi1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxcdCs9IG51bGxfYmxrL1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSArPSBybnVsbC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MTIuMDAwNjI0OTE5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDg0NDkzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9ucyoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIHByb21wdCBtZW50aW9ucyBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgLiBZZXAsIHRoYXQncyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0J3MgdGhlIFwibnVsbCBibG9jayBkZXZpY2UsXCIgZXNzZW50aWFsbHkgYSB1c2VmdWwgZGVidWdnaW5nIHRvb2wgb3IgYSBwbGFjZWhvbGRlci4gTm93LCBsZXQncyBtb3ZlIG9uIHRvIHRoZSBtb3JlIGludGVyZXN0aW5nIGFzcGVjdCwgbGV0J3Mgc2VlLCB3aGF0IHdhcyB0aGF0IG9wdGlvbiBhZ2Fpbi4uLiBhaCB5ZXMsIGBDT05GSUdfQkxLX0RFVl9aT05FRGAuIEkgc2hvdWxkIHByb2JhYmx5IGJydXNoIHVwIG9uIHRoYXQsIHpvbmFsIHN0b3JhZ2UgaXMgYmVjb21pbmcgbW9yZSBhbmQgbW9yZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzODIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MzoxNS4yMDkwODIyNjNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTMyNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz03Nz1jb25maWcgQkxLX0RFVl9XUklURV9NT1VOVEVEXFxuLS1cXG5ibG9jay9LY29uZmlnLTk2LVxcbmJsb2NrL0tjb25maWc6OTc6Y29uZmlnIEJMS19ERVZfWk9ORURcXG5ibG9jay9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIlpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxMjo1MzoxNS4yNzEwMjIyODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMjYzOTk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgWm9uZWQgQmxvY2sgRGV2aWNlIFN1cHBvcnQqKlxuXG5SaWdodCwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgQ09ORklHX0JMS19ERVZfWk9ORURgIGVuYWJsZWQuIFRoYXQncyBnb29kLCB0aGF0J3Mgd2hhdCB3ZSB3YW50IGZvciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyB0aGluZ3MgcmVsYXRlZCB0byBOVk1lLCBhcyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgd2Ugc2VlIHpvbmVkIGRldmljZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgTlZNZSBjb3JlIGFuZCBibG9jayBkZXZpY2Ugc3VwcG9ydCBhcmUgYWxzbyBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkuIFRoZXJlZm9yZSwgSSBzaG91bGQgY2hlY2sgdGhhdCBgQ09ORklHX05WTUVfQ09SRWAgYW5kIGBDT05GSUdfQkxLX0RFVl9OVk1FYCBhcmUgYWxzbyBzZXQuIE1ha2luZyBzdXJlIHRob3NlIGFyZSBjb3JyZWN0bHkgZW5hYmxlZCB3aWxsIGVuc3VyZSB0aGUgY29ycmVjdCBsb3cgbGV2ZWwgc3VwcG9ydCBpcyBhdmFpbGFibGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIG90aGVyIHJlbGF0ZWQgY29uZmlncyBpZiBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MTguODczNjY1Mzg1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgyODQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlZNRV9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6Mjpjb25maWcgTlZNRV9DT1JFXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUzOjE4LjkzODQ5OTgwNFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTk5OTcxOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MjM5NzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDEyOjUzOjIwLjUzODQ3NDEwMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg4NzYyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlZNRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc9Mj1jb25maWcgTlZNRV9DT1JFXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTQtXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZzo1OmNvbmZpZyBCTEtfREVWX05WTUVcXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIk5WTSBFeHByZXNzIGJsb2NrIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MjAuNTk3MzU5MTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyMzYwMDY2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGBDT05GSUdfQkxLX0RFVl9OVk1FYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUuIExldCdzIHNlZS4uLiB0aGUgY29uZmlncyB3ZSdyZSBjb25zaWRlcmluZyBhcmU6IGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGBDSUZTYCwgYW5kIGBaRkNQYC4gV2FpdCwgYFpGQ1BgIGlzIHMzOTAgc3BlY2lmaWMsIHNvIGl0J3Mgbm90IGlkZWFsIGZvciBnZW5lcmFsIGZ1enppbmcgb24geDg2LCBldmVuIGlmIGl0J3MgaGFybWxlc3MuIEknbGwganVzdCByZWx5IG9uIHRoZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYEJMS19ERVZfWk9ORURgIGFuZCBgQkxLX0RFVl9OVUxMX0JMS2AuIEknbGwgYWxzbyBpbmNsdWRlIGBCTEtfREVWX05WTUVgLCBgTlZNRV9DT1JFYCwgYW5kIGBDSUZTYC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBXZSd2ZSBnb3Q6IGBtZW1wb29sX3Jlc2l6ZWAsIGBtZW1wb29sX2luaXRfbm9kZWAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYW5kIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGAuXG5cblJpZ2h0LCBgbWVtcG9vbF9pbml0X25vZGVgIGlzIGNhbGxlZCBieSBgbWVtcG9vbF9pbml0X25vcHJvZmAgYW5kIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGFuZCB0aGUgbGF0dGVyIGlzIGNhbGxlZCBmcm9tIHRoZSBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgbWFjcm8uIGBtZW1wb29sX3Jlc2l6ZWAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gdGhhdCdzIGNoYW5nZWQuIFRoZSBuZXcgYG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcmVzaXphYmxlX3Bvb2xgIGlzIHVzZWQgYnkgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBhbmQgdGhlIG5ldyBgbWVtcG9vbF9jcmVhdGVfbm9kZWAgc2lnbmF0dXJlIGlzIHVzZWQgaW4gYG52bWVfcGNpX2FsbG9jX2lvZF9tZW1wb29sYC5cblxuTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgaGVyZS4uLiBhaCwgeWVzLCBgbWVtcG9vbF9leGl0YCB3YXMgY2hhbmdlZCB0byB1c2UgYGt2ZnJlZWAuIEFuZCBgbWVtcG9vbF9kZXN0cm95YCBjYWxscyBgbWVtcG9vbF9leGl0YC4gU28sIGJvdGggYG1lbXBvb2xfZXhpdGAgYW5kIGBtZW1wb29sX2Rlc3Ryb3lgIGFyZSBpbXBvcnRhbnQuXG5cbk9rYXksIGxldCdzIHJlZmluZSBvdXIgYEZvY3VzU3ltYm9sc2A6IGBtZW1wb29sX3Jlc2l6ZWAsIGBtZW1wb29sX2luaXRfbm9kZWAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGBtZW1wb29sX2V4aXRgLCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGFuZCBgbnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xgLlxuXG5XaGF0IGVsc2UgaGF2ZSB3ZSBnb3Q/IEhtbSwgdGhlIHBhdGNoIGhhcyBjaGFuZ2VkIHRoZSBiZWhhdmlvciBvZiBgbWVtcG9vbF9yZXNpemVgIHNpZ25pZmljYW50bHkuIEl0IG5vIGxvbmdlciBhbGxvY2F0ZXMgbWVtb3J5LCBidXQganVzdCBhZGp1c3RzIGBtaW5fbnJgLiBUaGF0J3MgYSBtYWpvciBzaGlmdCBpbiBzZW1hbnRpY3MuIEl0IGFsc28gY2hhbmdlcyBgbWVtcG9vbF9pbml0X25vZGVgIHRvIHVzZSBga3ZtYWxsb2NfYXJyYXlfbm9kZV9ub3Byb2ZgIGluc3RlYWQgb2YgYGttYWxsb2NfYXJyYXlfbm9kZWAsIGVuYWJsaW5nIGxhcmdlciBwb29scy4gQWxzbywgYG1heF9ucmAgaXMgYWRkZWQgdG8gdGhlIG1lbXBvb2wgc3RydWN0LlxuXG5ZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCdzIHRvdWNoaW5nIHRoZSBjb3JlIGBtZW1wb29sYCBBUEkgaW4gc29tZSBmdW5kYW1lbnRhbCB3YXlzLlxuXG5Pa2F5LCBsZXQncyBmaW5hbGl6ZSB0aGUgcmVzcG9uc2UuXG5Xb3J0aEZ1enppbmc6IHRydWVcblJlYXNvbmluZzogVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGNvcmUgYG1lbXBvb2xgIEFQSSwgYnkgaW50cm9kdWNpbmcgYSBgbWF4X25yYCBwYXJhbWV0ZXIgdG8gbGltaXQgcG9vbCBjYXBhY2l0eSBhbmQgY2hhbmdpbmcgYG1lbXBvb2xfcmVzaXplYCB0byBubyBsb25nZXIgYWxsb2NhdGUgbWVtb3J5IGltbWVkaWF0ZWx5IGJ1dCBpbnN0ZWFkIHJlbGllcyBvbiBgbWVtcG9vbF9mcmVlYCB0byByZWZpbGwgdGhlIHBvb2wuIEl0IGFsc28gY2hhbmdlcyB0aGUgaW50ZXJuYWwgYXJyYXkgYWxsb2NhdGlvbiB0byB1c2UgYGt2bWFsbG9jYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gbWVjaGFuaXNtIHVzZWQgYnkgdmFyaW91cyBzdWJzeXN0ZW1zIChlLmcuLCBibG9jayBsYXllciwgTlZNZSwgQ0lGUykuXG5Gb2N1c1N5bWJvbHM6IGBtZW1wb29sX3Jlc2l6ZWAsIGBtZW1wb29sX2luaXRfbm9kZWAsIGBtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZmAsIGBtZW1wb29sX2V4aXRgLCBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AsIGBudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbGBcbkVuYWJsZUNvbmZpZ3M6IGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBgQkxLX0RFVl9OVk1FYCwgYE5WTUVfQ09SRWAsIGBDSUZTYFxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDA5OCwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTI6NTM6MzIuODMzMzY5MzY1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4MzEwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiTlZNRV9DT1JFXCIsXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtcG9vbF9yZXNpemVcIixcbiAgICBcIm1lbXBvb2xfaW5pdF9ub2RlXCIsXG4gICAgXCJtZW1wb29sX2NyZWF0ZV9ub2RlX25vcHJvZlwiLFxuICAgIFwibWVtcG9vbF9leGl0XCIsXG4gICAgXCJkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJudm1lX3BjaV9hbGxvY19pb2RfbWVtcG9vbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGBtZW1wb29sYCBBUEksIGludHJvZHVjaW5nIGEgYG1heF9ucmAgcGFyYW1ldGVyIHRvIGxpbWl0IHBvb2wgY2FwYWNpdHkgYW5kIGNoYW5naW5nIGBtZW1wb29sX3Jlc2l6ZWAgdG8gbm8gbG9uZ2VyIGFsbG9jYXRlIG1lbW9yeSBpbW1lZGlhdGVseSBidXQgaW5zdGVhZCByZWx5IG9uIGBtZW1wb29sX2ZyZWVgIHRvIHJlZmlsbCB0aGUgcG9vbC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBpbnRlcm5hbCBhcnJheSBhbGxvY2F0aW9uIHRvIHVzZSBga3ZtYWxsb2NgLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGEgY29yZSBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20gdXNlZCBieSB2YXJpb3VzIHN1YnN5c3RlbXMgKGUuZy4sIGJsb2NrIGxheWVyLCBOVk1lLCBDSUZTKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEXCIsXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIk5WTUVfQ09SRVwiLFxuICAgIFwiQ0lGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbXBvb2xfcmVzaXplXCIsXG4gICAgXCJtZW1wb29sX2luaXRfbm9kZVwiLFxuICAgIFwibWVtcG9vbF9jcmVhdGVfbm9kZV9ub3Byb2ZcIixcbiAgICBcIm1lbXBvb2xfZXhpdFwiLFxuICAgIFwiZGlza19hbGxvY196b25lX3Jlc291cmNlc1wiLFxuICAgIFwibnZtZV9wY2lfYWxsb2NfaW9kX21lbXBvb2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBgbWVtcG9vbGAgQVBJLCBpbnRyb2R1Y2luZyBhIGBtYXhfbnJgIHBhcmFtZXRlciB0byBsaW1pdCBwb29sIGNhcGFjaXR5IGFuZCBjaGFuZ2luZyBgbWVtcG9vbF9yZXNpemVgIHRvIG5vIGxvbmdlciBhbGxvY2F0ZSBtZW1vcnkgaW1tZWRpYXRlbHkgYnV0IGluc3RlYWQgcmVseSBvbiBgbWVtcG9vbF9mcmVlYCB0byByZWZpbGwgdGhlIHBvb2wuIEl0IGFsc28gY2hhbmdlcyB0aGUgaW50ZXJuYWwgYXJyYXkgYWxsb2NhdGlvbiB0byB1c2UgYGt2bWFsbG9jYC4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBhIGNvcmUgbWVtb3J5IGFsbG9jYXRpb24gbWVjaGFuaXNtIHVzZWQgYnkgdmFyaW91cyBzdWJzeXN0ZW1zIChlLmcuLCBibG9jayBsYXllciwgTlZNZSwgQ0lGUykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[1] Phase: Succeeded StartedAt: 2026-06-26 12:53:44 +0000 UTC FinishedAt: 2026-06-26 12:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 12:53:44 +0000 UTC FinishedAt: 2026-06-26 12:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2] Phase: Succeeded StartedAt: 2026-06-26 12:53:44 +0000 UTC FinishedAt: 2026-06-26 16:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 12:53:44 +0000 UTC FinishedAt: 2026-06-26 16:50:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 12:53:44 +0000 UTC FinishedAt: 2026-06-26 12:53:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 12:53:44 +0000 UTC FinishedAt: 2026-06-26 12:53:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"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-workflowlk6cl/series-workflowlk6cl-convert-artifact-1704543793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 12:53:54 +0000 UTC FinishedAt: 2026-06-26 13:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 12:53:54 +0000 UTC FinishedAt: 2026-06-26 13:15:59 +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:*57f6fdac-bae7-41cb-b027-d9b28c6cf2d2,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-workflowlk6cl/series-workflowlk6cl-convert-artifact-1704543793/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": "46cf92ce-b552-49ca-bd80-a0b005a571e1", "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-workflowlk6cl/series-workflowlk6cl-build-action-1972233311/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 12:53:54 +0000 UTC FinishedAt: 2026-06-26 13:15:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*57f6fdac-bae7-41cb-b027-d9b28c6cf2d2,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-workflowlk6cl/series-workflowlk6cl-convert-artifact-1704543793/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": "46cf92ce-b552-49ca-bd80-a0b005a571e1", "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-workflowlk6cl/series-workflowlk6cl-build-action-1972233311/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:15:59 +0000 UTC FinishedAt: 2026-06-26 13:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:15:59 +0000 UTC FinishedAt: 2026-06-26 13:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:15:59 +0000 UTC FinishedAt: 2026-06-26 13:16:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:15:59 +0000 UTC FinishedAt: 2026-06-26 13:16:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-workflowlk6cl/series-workflowlk6cl-convert-artifact-2078600580/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:16:09 +0000 UTC FinishedAt: 2026-06-26 13:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:16:09 +0000 UTC FinishedAt: 2026-06-26 13:17:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46cf92ce-b552-49ca-bd80-a0b005a571e1,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-workflowlk6cl/series-workflowlk6cl-build-action-1972233311/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-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:17:59 +0000 UTC FinishedAt: 2026-06-26 13:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:17:59 +0000 UTC FinishedAt: 2026-06-26 13:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:17:59 +0000 UTC FinishedAt: 2026-06-26 13:42:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:17:59 +0000 UTC FinishedAt: 2026-06-26 13:42:28 +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:*57f6fdac-bae7-41cb-b027-d9b28c6cf2d2,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-workflowlk6cl/series-workflowlk6cl-convert-artifact-2078600580/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": "8226a4b1-e75c-4061-a425-c182b33b400d", "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-workflowlk6cl/series-workflowlk6cl-build-action-1564141456/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:17:59 +0000 UTC FinishedAt: 2026-06-26 13:42:18 +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:*57f6fdac-bae7-41cb-b027-d9b28c6cf2d2,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-workflowlk6cl/series-workflowlk6cl-convert-artifact-2078600580/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": "8226a4b1-e75c-4061-a425-c182b33b400d", "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-workflowlk6cl/series-workflowlk6cl-build-action-1564141456/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:42:28 +0000 UTC FinishedAt: 2026-06-26 13:42:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:42:28 +0000 UTC FinishedAt: 2026-06-26 13:42:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:42:28 +0000 UTC FinishedAt: 2026-06-26 13:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:42:28 +0000 UTC FinishedAt: 2026-06-26 13:44:33 +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:*8226a4b1-e75c-4061-a425-c182b33b400d,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-workflowlk6cl/series-workflowlk6cl-build-action-1564141456/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-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:44:39 +0000 UTC FinishedAt: 2026-06-26 16:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:44:39 +0000 UTC FinishedAt: 2026-06-26 16:50:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"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:*46cf92ce-b552-49ca-bd80-a0b005a571e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8226a4b1-e75c-4061-a425-c182b33b400d,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-workflowlk6cl/series-workflowlk6cl-build-action-1972233311/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-workflowlk6cl/series-workflowlk6cl-build-action-1564141456/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:44:39 +0000 UTC FinishedAt: 2026-06-26 13:46:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:44:39 +0000 UTC FinishedAt: 2026-06-26 13:45:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"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-workflowlk6cl/series-workflowlk6cl-convert-artifact-2632233613/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:44:39 +0000 UTC FinishedAt: 2026-06-26 13:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:44:39 +0000 UTC FinishedAt: 2026-06-26 13:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:44:39 +0000 UTC FinishedAt: 2026-06-26 13:44:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:46:02 +0000 UTC FinishedAt: 2026-06-26 16:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlk6cl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["mempool_resize","mempool_init_node","mempool_create_node_noprof","mempool_exit","disk_alloc_zone_resources","nvme_pci_alloc_iod_mempool"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_NVME","NVME_CORE","CIFS"],"series_id":"b704ab57-fd75-4096-b84e-0d7f81b1e29f","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-06-26 13:46:02 +0000 UTC FinishedAt: 2026-06-26 16:49:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46cf92ce-b552-49ca-bd80-a0b005a571e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8226a4b1-e75c-4061-a425-c182b33b400d,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-workflowlk6cl/series-workflowlk6cl-build-action-1972233311/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-workflowlk6cl/series-workflowlk6cl-build-action-1564141456/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-workflowlk6cl/series-workflowlk6cl-convert-artifact-2632233613/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,}