Name: series-workflowknqd2 Phase: Succeeded StartedAt: 2026-08-17 05:52:19 +0000 UTC FinishedAt: 2026-08-17 07:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[0] Phase: Succeeded StartedAt: 2026-08-17 05:52:19 +0000 UTC FinishedAt: 2026-08-17 05:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 05:52:19 +0000 UTC FinishedAt: 2026-08-17 05:57:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTB", "NTB_TRANSPORT", "NTB_NETDEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTB", "NTB_TRANSPORT", "NTB_NETDEV" ], "series_id": "81b36320-b33c-49b9-9af2-412446ccd577" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ntb_netdev_start_xmit", "ntb_transport_tx_enqueue", "ntb_tx_copy_callback" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05UQiYjMzQ7LAogICAgJiMzNDtOVEJfVFJBTlNQT1JUJiMzNDssCiAgICAmIzM0O05UQl9ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGJfbmV0ZGV2X3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7bnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O250Yl90eF9jb3B5X2NhbGxiYWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvZ2ljIGJ1Z3MsIHF1ZXVlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcXVldWUgc3RhcnZhdGlvbiBpc3N1ZXMgaW4gdGhlIE5UQiBuZXRkZXYgZHJpdmVyLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgbW92ZXMgYSBmcmFtZSBzaXplIGNoZWNrIHRvIGFuIGVhcmxpZXIgc3luY2hyb25vdXMgc3RhZ2UgKGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgKSwgYW5kIGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBhZGQgdGhlIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgcXVldWUgYmVmb3JlIGludm9raW5nIHRoZSB0cmFuc21pc3Npb24gaGFuZGxlci4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRCIChOb24tVHJhbnNwYXJlbnQgQnJpZGdlKSBuZXRkZXYgZHJpdmVyIGFuZCB0cmFuc3BvcnQgbGF5ZXIgdG8gZml4IGEgYnVnIGluIHRoZSB0cmFuc21pdCBwYXRoLiBJdCBjaGFuZ2VzIGhvdyBgbnRiX25ldGRldl9zdGFydF94bWl0YCBoYW5kbGVzIHF1ZXVlIHN0b3BzIGFuZCBlcnJvcnMsIGFuZCBtb2RpZmllcyBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCB0byBjaGVjayBmb3IgbGluayBzdGF0dXMgYW5kIGZyYW1lIHNpemUgbGltaXRzLiBJdCBhbHNvIHVwZGF0ZXMgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBjb3JyZWN0bHkgaGFuZGxlIERNQSBjb3B5IHJlc3VsdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgdHJhbnNtaXQgcGF0aHMgb3ZlciBOVEIsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNmY1NWVmNTZiNzlhMjllNzVmODExYmJhOWEwN2RmYmJjNmExNWU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDU6NTM6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXG5pbmRleCAwMjlhNGE1MzJhMTA0Li4wMmIzNWNmNTNhNjIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcbkBAIC0xOTksOCAmIzQzOzE5OSwxMCBAQCBzdGF0aWMgaW50IF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gc3RhdGljIGludCBudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IG50Yl9uZXRkZXZfcXVldWUgKnEsIGludCBzaXplKVxuIHtcbi1cdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cdTAwM2VxaWQpIHx8XG4tXHQgICAgKG50Yl90cmFuc3BvcnRfdHhfZnJlZV9lbnRyeShxLVx1MDAzZXFwKSBcdTAwM2U9IHNpemUpKVxuJiM0MztcdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cdTAwM2VxaWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0aWYgKG50Yl90cmFuc3BvcnRfdHhfZnJlZV9lbnRyeShxLVx1MDAzZXFwKSBcdTAwM2U9IHNpemUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0dXJuIF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHNpemUpO1xuQEAgLTI1NiwyMSAmIzQzOzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRxID0gXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlc1txaWRdO1xuIFxuLVx0bnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApO1xuJiM0MztcdGlmICh1bmxpa2VseShudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCkpKVxuJiM0MztcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuIFxuIFx0cmMgPSBudGJfdHJhbnNwb3J0X3R4X2VucXVldWUocS1cdTAwM2VxcCwgc2tiLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0aWYgKHJjID09IC1FQUdBSU4gfHwgcmMgPT0gLUVCVVNZKSB7XG4mIzQzO1x0XHRcdG5ldGlmX3N0b3Bfc3VicXVldWUobmRldiwgcS1cdTAwM2VxaWQpO1xuJiM0MztcdFx0XHRtb2RfdGltZXIoXHUwMDI2cS1cdTAwM2V0eF90aW1lcixcbiYjNDM7XHRcdFx0XHQgIGppZmZpZXMgJiM0MzsgdXNlY3NfdG9famlmZmllcyh0eF90aW1lKSk7XG4mIzQzO1x0XHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRnb3RvIGRyb3A7XG4mIzQzO1x0fVxuIFxuIFx0LyogY2hlY2sgZm9yIG5leHQgc3VibWl0ICovXG4gXHRudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuLWVycjpcbiYjNDM7ZHJvcDpcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOztcbi1cdG5kZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOztcbi1cdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiYjNDM7XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBudGJfbmV0ZGV2X3R4X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuaW5kZXggZjU5ZjkyNmQ0YmZhYS4uZjljYWExYTY1M2M1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jXG5AQCAtMTcxOSw5ICYjNDM7MTcxOSwxNiBAQCBzdGF0aWMgdm9pZCBudGJfdHJhbnNwb3J0X3J4Y19kYih1bnNpZ25lZCBsb25nIGRhdGEpXG4gc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyIF9faW9tZW0gKmhkcjtcbiBcdHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5ID0gZGF0YTtcbi1cdHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCA9IGVudHJ5LVx1MDAzZXFwO1xuLVx0c3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHIgPSBlbnRyeS1cdTAwM2V0eF9oZHI7XG4mIzQzO1x0c3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwO1xuJiM0MztcdHVuc2lnbmVkIGludCBsZW47XG4mIzQzO1x0dm9pZCAqY2JfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cXAgPSBlbnRyeS1cdTAwM2VxcDtcbiYjNDM7XHRoZHIgPSBlbnRyeS1cdTAwM2V0eF9oZHI7XG4mIzQzO1x0Y2JfZGF0YSA9IGVudHJ5LVx1MDAzZWNiX2RhdGE7XG4mIzQzO1x0bGVuID0gZW50cnktXHUwMDNlbGVuO1xuIFxuIFx0Lyogd2UgbmVlZCB0byBjaGVjayBETUEgcmVzdWx0cyBpZiB3ZSBhcmUgdXNpbmcgRE1BICovXG4gXHRpZiAocmVzKSB7XG5AQCAtMTc2OCwxNSAmIzQzOzE3NzUsMTMgQEAgc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSxcbiBcdCAqIFwmIzM0O2xpbmsgZG93blwmIzM0OyBvciBzaW1pbGFyLiAgU2luY2Ugbm8gcGF5bG9hZCBpcyBiZWluZyBzZW50IGluIHRoZXNlXG4gXHQgKiBjYXNlcywgdGhlcmUgaXMgbm90aGluZyB0byBhZGQgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUuXG4gXHQgKi9cbi1cdGlmIChlbnRyeS1cdTAwM2VsZW4gXHUwMDNlIDApIHtcbi1cdFx0cXAtXHUwMDNldHhfYnl0ZXMgJiM0Mzs9IGVudHJ5LVx1MDAzZWxlbjtcbi1cbi1cdFx0aWYgKHFwLVx1MDAzZXR4X2hhbmRsZXIpXG4tXHRcdFx0cXAtXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXHUwMDNlY2JfZGF0YSwgZW50cnktXHUwMDNlY2JfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBlbnRyeS1cdTAwM2VsZW4pO1xuLVx0fVxuJiM0MztcdGlmIChsZW4gXHUwMDNlIDApXG4mIzQzO1x0XHRxcC1cdTAwM2V0eF9ieXRlcyAmIzQzOz0gbGVuO1xuIFxuIFx0bnRiX2xpc3RfYWRkKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNnFwLVx1MDAzZXR4X2ZyZWVfcSk7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHFwLVx1MDAzZXR4X2hhbmRsZXIpXG4mIzQzO1x0XHRxcC1cdTAwM2V0eF9oYW5kbGVyKHFwLCBxcC1cdTAwM2VjYl9kYXRhLCBjYl9kYXRhLCBsZW4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldClcbkBAIC0xOTUwLDE1ICYjNDM7MTk1NSw2IEBAIHN0YXRpYyBpbnQgbnRiX3Byb2Nlc3NfdHgoc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwLFxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkge1xuLVx0XHRpZiAocXAtXHUwMDNldHhfaGFuZGxlcilcbi1cdFx0XHRxcC1cdTAwM2V0eF9oYW5kbGVyKHFwLCBxcC1cdTAwM2VjYl9kYXRhLCBOVUxMLCAtRUlPKTtcbi1cbi1cdFx0bnRiX2xpc3RfYWRkKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2ZW50cnktXHUwMDNlZW50cnksXG4tXHRcdFx0ICAgICBcdTAwMjZxcC1cdTAwM2V0eF9mcmVlX3EpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbiBcdG50Yl9hc3luY190eChxcCwgZW50cnkpO1xuIFxuIFx0cXAtXHUwMDNldHhfcGt0cyYjNDM7JiM0Mzs7XG5AQCAtMjM0OCw5ICYjNDM7MjM0NCwxMSBAQCBpbnQgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsXG4gXHRpZiAoIXFwIHx8ICFsZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0LyogSWYgdGhlIHFwIGxpbmsgaXMgZG93biBhbHJlYWR5LCBqdXN0IGlnbm9yZS4gKi9cbiBcdGlmICghcXAtXHUwMDNlbGlua19pc191cClcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0xJTks7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHRlbnRyeSA9IG50Yl9saXN0X3JtKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2cXAtXHUwMDNldHhfZnJlZV9xKTtcbiBcdGlmICghZW50cnkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRCJiMzNDssCiAgICAmIzM0O05UQl9UUkFOU1BPUlQmIzM0OywKICAgICYjMzQ7TlRCX05FVERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250Yl9uZXRkZXZfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtudGJfdHJhbnNwb3J0X3R4X2VucXVldWUmIzM0OywKICAgICYjMzQ7bnRiX3R4X2NvcHlfY2FsbGJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5UQiAoTm9uLVRyYW5zcGFyZW50IEJyaWRnZSkgbmV0ZGV2IGRyaXZlciBhbmQgdHJhbnNwb3J0IGxheWVyIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgdHJhbnNtaXQgcGF0aC4gSXQgY2hhbmdlcyBob3cgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaGFuZGxlcyBxdWV1ZSBzdG9wcyBhbmQgZXJyb3JzLCBhbmQgbW9kaWZpZXMgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgdG8gY2hlY2sgZm9yIGxpbmsgc3RhdHVzIGFuZCBmcmFtZSBzaXplIGxpbWl0cy4gSXQgYWxzbyB1cGRhdGVzIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gY29ycmVjdGx5IGhhbmRsZSBETUEgY29weSByZXN1bHRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGhzIG92ZXIgTlRCLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjZmNTVlZjU2Yjc5YTI5ZTc1ZjgxMWJiYTlhMDdkZmJiYzZhMTVlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA1OjUzOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jCmluZGV4IDAyOWE0YTUzMmExMDQuLjAyYjM1Y2Y1M2E2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L250Yl9uZXRkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMKQEAgLTE5OSw4ICYjNDM7MTk5LDEwIEBAIHN0YXRpYyBpbnQgX19udGJfbmV0ZGV2X21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIHN0YXRpYyBpbnQgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJCSAgICBzdHJ1Y3QgbnRiX25ldGRldl9xdWV1ZSAqcSwgaW50IHNpemUpCiB7Ci0JaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChuZGV2LCBxLSZndDtxaWQpIHx8Ci0JICAgIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS0mZ3Q7cXApICZndDs9IHNpemUpKQomIzQzOwlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5kZXYsIHEtJmd0O3FpZCkpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAobnRiX3RyYW5zcG9ydF90eF9mcmVlX2VudHJ5KHEtJmd0O3FwKSAmZ3Q7PSBzaXplKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBfX250Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCBzaXplKTsKQEAgLTI1NiwyMSAmIzQzOzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAKIAlxID0gJmFtcDtkZXYtJmd0O3F1ZXVlc1txaWRdOwogCi0JbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApOwomIzQzOwlpZiAodW5saWtlbHkobnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApKSkKJiM0MzsJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCXJjID0gbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHEtJmd0O3FwLCBza2IsIHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtsZW4pOwotCWlmIChyYykKLQkJZ290byBlcnI7CiYjNDM7CWlmIChyYykgewomIzQzOwkJaWYgKHJjID09IC1FQUdBSU4gfHwgcmMgPT0gLUVCVVNZKSB7CiYjNDM7CQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZGV2LCBxLSZndDtxaWQpOwomIzQzOwkJCW1vZF90aW1lcigmYW1wO3EtJmd0O3R4X3RpbWVyLAomIzQzOwkJCQkgIGppZmZpZXMgJiM0MzsgdXNlY3NfdG9famlmZmllcyh0eF90aW1lKSk7CiYjNDM7CQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZ290byBkcm9wOwomIzQzOwl9CiAKIAkvKiBjaGVjayBmb3IgbmV4dCBzdWJtaXQgKi8KIAludGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCi1lcnI6CiYjNDM7ZHJvcDoKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAluZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKLQluZGV2LSZndDtzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7OwotCXJldHVybiBORVRERVZfVFhfQlVTWTsKJiM0MzsJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgbnRiX25ldGRldl90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYwppbmRleCBmNTlmOTI2ZDRiZmFhLi5mOWNhYTFhNjUzYzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jCkBAIC0xNzE5LDkgJiM0MzsxNzE5LDE2IEBAIHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsCiAJCQkJIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpCiB7CiYjNDM7CXN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIgX19pb21lbSAqaGRyOwogCXN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5ID0gZGF0YTsKLQlzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAgPSBlbnRyeS0mZ3Q7cXA7Ci0Jc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHIgPSBlbnRyeS0mZ3Q7dHhfaGRyOwomIzQzOwlzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXA7CiYjNDM7CXVuc2lnbmVkIGludCBsZW47CiYjNDM7CXZvaWQgKmNiX2RhdGE7CiYjNDM7CiYjNDM7CXFwID0gZW50cnktJmd0O3FwOwomIzQzOwloZHIgPSBlbnRyeS0mZ3Q7dHhfaGRyOwomIzQzOwljYl9kYXRhID0gZW50cnktJmd0O2NiX2RhdGE7CiYjNDM7CWxlbiA9IGVudHJ5LSZndDtsZW47CiAKIAkvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEgKi8KIAlpZiAocmVzKSB7CkBAIC0xNzY4LDE1ICYjNDM7MTc3NSwxMyBAQCBzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLAogCSAqICYjMzQ7bGluayBkb3duJiMzNDsgb3Igc2ltaWxhci4gIFNpbmNlIG5vIHBheWxvYWQgaXMgYmVpbmcgc2VudCBpbiB0aGVzZQogCSAqIGNhc2VzLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZCB0byB0aGUgY29tcGxldGlvbiBxdWV1ZS4KIAkgKi8KLQlpZiAoZW50cnktJmd0O2xlbiAmZ3Q7IDApIHsKLQkJcXAtJmd0O3R4X2J5dGVzICYjNDM7PSBlbnRyeS0mZ3Q7bGVuOwotCi0JCWlmIChxcC0mZ3Q7dHhfaGFuZGxlcikKLQkJCXFwLSZndDt0eF9oYW5kbGVyKHFwLCBxcC0mZ3Q7Y2JfZGF0YSwgZW50cnktJmd0O2NiX2RhdGEsCi0JCQkJICAgICAgIGVudHJ5LSZndDtsZW4pOwotCX0KJiM0MzsJaWYgKGxlbiAmZ3Q7IDApCiYjNDM7CQlxcC0mZ3Q7dHhfYnl0ZXMgJiM0Mzs9IGxlbjsKIAogCW50Yl9saXN0X2FkZCgmYW1wO3FwLSZndDtudGJfdHhfZnJlZV9xX2xvY2ssICZhbXA7ZW50cnktJmd0O2VudHJ5LCAmYW1wO3FwLSZndDt0eF9mcmVlX3EpOwomIzQzOwomIzQzOwlpZiAobGVuICZndDsgMCAmYW1wOyZhbXA7IHFwLSZndDt0eF9oYW5kbGVyKQomIzQzOwkJcXAtJmd0O3R4X2hhbmRsZXIocXAsIHFwLSZndDtjYl9kYXRhLCBjYl9kYXRhLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldCkKQEAgLTE5NTAsMTUgJiM0MzsxOTU1LDYgQEAgc3RhdGljIGludCBudGJfcHJvY2Vzc190eChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsCiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChlbnRyeS0mZ3Q7bGVuICZndDsgcXAtJmd0O3R4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkgewotCQlpZiAocXAtJmd0O3R4X2hhbmRsZXIpCi0JCQlxcC0mZ3Q7dHhfaGFuZGxlcihxcCwgcXAtJmd0O2NiX2RhdGEsIE5VTEwsIC1FSU8pOwotCi0JCW50Yl9saXN0X2FkZCgmYW1wO3FwLSZndDtudGJfdHhfZnJlZV9xX2xvY2ssICZhbXA7ZW50cnktJmd0O2VudHJ5LAotCQkJICAgICAmYW1wO3FwLSZndDt0eF9mcmVlX3EpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAludGJfYXN5bmNfdHgocXAsIGVudHJ5KTsKIAogCXFwLSZndDt0eF9wa3RzJiM0MzsmIzQzOzsKQEAgLTIzNDgsOSAmIzQzOzIzNDQsMTEgQEAgaW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLAogCWlmICghcXAgfHwgIWxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBJZiB0aGUgcXAgbGluayBpcyBkb3duIGFscmVhZHksIGp1c3QgaWdub3JlLiAqLwogCWlmICghcXAtJmd0O2xpbmtfaXNfdXApCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIC1FTk9MSU5LOwomIzQzOwomIzQzOwlpZiAobGVuICZndDsgcXAtJmd0O3R4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiAKIAllbnRyeSA9IG50Yl9saXN0X3JtKCZhbXA7cXAtJmd0O250Yl90eF9mcmVlX3FfbG9jaywgJmFtcDtxcC0mZ3Q7dHhfZnJlZV9xKTsKIAlpZiAoIWVudHJ5KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBOZWVkIGZvciBGdXp6aW5nIHRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbGFuZGVkLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZz8gV2UgaGF2ZSBtb2RpZmljYXRpb25zIGluIGBkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNgIGFuZCBgZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jYC4gUmlnaHQsIE5UQiwgTm9uLVRyYW5zcGFyZW50IEJyaWRnZS4gSXQgZGVhbHMgd2l0aCB0aGUgTlRCIG5ldGRldiBkcml2ZXIgYW5kIHRoZSBOVEIgdHJhbnNwb3J0LCBib3RoIHJlbGF0ZWQgdG8gYSBQQ0llIGZlYXR1cmUuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHJpbmdpbmcgc29tZSBiZWxscy4gVGhleSBtZW50aW9uIG5lZWRpbmcgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBmb3IgY2VydGFpbiBkcml2ZXJzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBQQ0llIGhlcmUsIGFuZCBOVEIgKmlzKiBhIFBDSWUgc3Vic3lzdGVtLiBIbW0sIGlzIE5UQiBlbXVsYXRlZCBpbiBRRU1VPyBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSYjMzk7cyBhIFFFTVUgTlRCIGRldmljZSBvciBpZiB3ZSBjYW4gdGVzdCBpdCBhdCBhbGwuIEl0IG1pZ2h0IG5vdCBiZSB0ZXN0YWJsZSBhbmQgdGhlbiB0aGVyZSBpcyBub3QgbXVjaCBwb2ludC4KCkFoLCB3YWl0IGEgc2Vjb25kLCBOVEIgaXMgYSBzdWJzeXN0ZW0sIHNvIGl0IGlzIGxpa2VseSB0byBoYXZlIGl0cyBvd24gaW50ZXJuYWwgdGVzdGluZyBmcmFtZXdvcmsuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGluIGBkcml2ZXJzL250Yi90ZXN0L2AuIExldCYjMzk7cyBhbHNvIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hlcmUgZWxzZSBOVEIgaXMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBmdXp6IHRoaXMgZWZmZWN0aXZlbHksIG9yIGlmIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGEgaGFyZHdhcmUtZ2F0ZWQgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5UQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL250Yi9LY29uZmlnOjI6bWVudWNvbmZpZyBOVEJcbmRyaXZlcnMvbnRiL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL0tjb25maWc9MTQ9aWYgTlRCXG5kcml2ZXJzL250Yi9LY29uZmlnLTE1LVxuZHJpdmVycy9udGIvS2NvbmZpZzoxNjpjb25maWcgTlRCX01TSVxuZHJpdmVycy9udGIvS2NvbmZpZy0xNy1cdGJvb2wgXCYjMzQ7TVNJIEludGVycnVwdCBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udGIvS2NvbmZpZz0yOT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9udGIvdGVzdC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL250Yi9LY29uZmlnLTMwLVxuZHJpdmVycy9udGIvS2NvbmZpZzozMTpjb25maWcgTlRCX1RSQU5TUE9SVFxuZHJpdmVycy9udGIvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O05UQiBUcmFuc3BvcnQgQ2xpZW50XCYjMzQ7XG4tLVxuZHJpdmVycy9udGIvaHcvYW1kL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnRiL2h3L2FtZC9LY29uZmlnOjI6Y29uZmlnIE5UQl9BTURcbmRyaXZlcnMvbnRiL2h3L2FtZC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgTm9uLVRyYW5zcGFyZW50IEJyaWRnZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWc6MTpjb25maWcgTlRCX0VQRlxuZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgRVBGIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL2h3L2lkdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL250Yi9ody9pZHQvS2NvbmZpZzoyOmNvbmZpZyBOVEJfSURUXG5kcml2ZXJzL250Yi9ody9pZHQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SURUIFBDSWUtc3dpdGNoIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL2h3L2ludGVsL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnRiL2h3L2ludGVsL0tjb25maWc6Mjpjb25maWcgTlRCX0lOVEVMXG5kcml2ZXJzL250Yi9ody9pbnRlbC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL250Yi9ody9tc2NjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnRiL2h3L21zY2MvS2NvbmZpZzoyOmNvbmZpZyBOVEJfU1dJVENIVEVDXG5kcml2ZXJzL250Yi9ody9tc2NjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3JvU2VtaSBTd2l0Y2h0ZWMgTm9uLVRyYW5zcGFyZW50IEJyaWRnZSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6Mjpjb25maWcgTlRCX1BJTkdQT05HXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05UQiBQaW5nIFBvbmcgVGVzdCBDbGllbnRcJiMzNDtcbi0tXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMTAtXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MTE6Y29uZmlnIE5UQl9UT09MXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMTItXHR0cmlzdGF0ZSBcJiMzNDtOVEIgRGVidWdnaW5nIFRvb2wgVGVzdCBDbGllbnRcJiMzNDtcbi0tXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjEtXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MjI6Y29uZmlnIE5UQl9QRVJGXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtOVEIgUkFXIFBlcmYgTWVhc3VyaW5nIFRvb2xcJiMzNDtcbi0tXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjktXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MzA6Y29uZmlnIE5UQl9NU0lfVEVTVFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTMxLVx0dHJpc3RhdGUgXCYjMzQ7TlRCIE1TSSBUZXN0IENsaWVudFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTlRCIEludmVzdGlnYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSBoYXZlIGEgdmlydHVhbCBOVEIgZGV2aWNlIGF2YWlsYWJsZSBmb3IgdGVzdGluZy4gSG1tbSwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbnl0aGluZyByZWxhdGVkIHRvIE5UQj8gQSBxdWljayBzZWFyY2jigKZ3YWl0LCB0aGVyZSYjMzk7cyBhICYjMzQ7c3l6LWNsdXN0ZXImIzM0OyB0YWchIE9rYXksIGRvZXMgdGhhdCBtZWFuIHN5emthbGxlciB0ZXN0cyBOVEI/IExldCYjMzk7cyBrZWVwIGRpZ2dpbmcuIEkgc2VlIGEgZGlyZWN0b3J5IGNhbGxlZCBgZHJpdmVycy9udGIvaHcvZXBmL2AsIGJ1dCBob2xkIG9u4oCmZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgdGhhdCBgc3l6X250YmAgcHNldWRvLXN5c2NhbGw/IE5vLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBJIGhhdmUsIEkmIzM5O20gbG9va2luZyBhdCBkcml2ZXJzIHRoYXQgKm5lZWQqIHJlYWwgaGFyZHdhcmUsIHNwZWNpZmljYWxseSB0aG9zZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBsaWtlIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgb3IgYW1kZ3B1IHdoaWNoIGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkFscmlnaHQsIGJhY2sgdG8gdGhlIGVtdWxhdGlvbiBxdWVzdGlvbi4gSXMgTlRCIGFjdHVhbGx5IGVtdWxhdGVkIGluIFFFTVU/IEkgd2FzIHRoaW5raW5nIGFib3V0IGBpdnNobWVtYCBvciBzb21ldGhpbmcgc2ltaWxhci4uLiBub3BlLiBIbW0sIEkgc2VlIGBody9taXNjL3NnYS5jYCwgdGhhdCYjMzk7cyBub3QgaXQsIGFuZCBgaHcvcGNpLWJyaWRnZS9kZWMuY2AsIHN0aWxsIG5vLiBEb2VzIFFFTVUgZXZlbiAqaGF2ZSogYW4gTlRCIGRldmljZT8gV2FpdCBhIG1pbnV0ZS4uLiBgbnRiX25ldGRldmAhIFRoYXQmIzM5O3MgYSBuZXR3b3JrIGRldmljZSBkcml2ZXIgKm92ZXIqIE5UQi4gQmluZ28hIFRoYXQmIzM5O3Mgb3VyIHZpcnR1YWwgaW50ZXJmYWNlLiBOb3csIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoYXQmIzM5O3MgZGVmaW5lZC4gTGV0JiMzOTtzIHNlYXJjaCBmb3IgYG50Yl9uZXRkZXZgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUgYW5kIGZpbmQgb3V0IHdoYXQgdGhhdCYjMzk7cyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5UQl9ORVRERVYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zNzA9Y29uZmlnIE5FVF9QT0xMX0NPTlRST0xMRVJcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3Mi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzczOmNvbmZpZyBOVEJfTkVUREVWXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3NC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTlRCX05FVERFVmAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTlRCX05FVERFVmAuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGNvZGViYXNlIOKAkyBwcm9iYWJseSBhIGBtYWtlIG1lbnVjb25maWdgIG9yIGEgc2ltaWxhciB0b29sIHRvIHNlZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCByZWxhdGlvbnNoaXBzLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgZGVwZW5kZW5jaWVzLCBwb3NzaWJseSBzb21lIFBDSS1yZWxhdGVkIGNvbXBvbmVudHMsIGFuZCBsaWtlbHkgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyBpZiBpdCYjMzk7cyB0aWVkIHRvIGEgcGFydGljdWxhciBOZXR3b3JrIFRyYW5zcG9ydCBCcmlkZ2UgKE5UQikgaW1wbGVtZW50YXRpb24uIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGdlbmVyaWMgTlRCIG5ldGRldiBkcml2ZXIsIG9yIHNvbWV0aGluZyB2ZXJ5IHRhcmdldGVkLiBLbm93aW5nIHRoZSBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIGhhdmUgYSBiZXR0ZXIgaWRlYSBvZiB3aGF0IHRvIGV4cGVjdC4gVGhpcyBkZXBlbmRlbmN5IGludmVzdGlnYXRpb24gaXMgY3J1Y2lhbCBiZWZvcmUgSSBtYWtlIGFueSBtb2RpZmljYXRpb25zLCB0cm91Ymxlc2hvb3QgaXNzdWVzLCBvciBldmFsdWF0ZSBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIG5ldHdvcmsgZnVuY3Rpb25hbGl0aWVzIGluIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGJvdGggZGlyZWN0IGRlcGVuZGVuY2llcyBhbmQgYW55IGluZGlyZWN0IG9uZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRCX05FVERFVnxkZXBlbmRzIG9uLipOVEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzcwPWNvbmZpZyBORVRfUE9MTF9DT05UUk9MTEVSXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzItXG5kcml2ZXJzL25ldC9LY29uZmlnOjM3Mzpjb25maWcgTlRCX05FVERFVlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzQtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIEV0aGVybmV0IG92ZXIgTlRCIFRyYW5zcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozNzU6XHRkZXBlbmRzIG9uIE5UQl9UUkFOU1BPUlRcbmRyaXZlcnMvbmV0L0tjb25maWctMzc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBOVEIgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgTlRCLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IFN5emthbGxlciBpcyByZWxldmFudCBoZXJlIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGNhcGFibGUgb2YgZnV6emluZyBOVEIsIGlzbiYjMzk7dCBpdD8gRG9lcyBpdCBoYXZlIGEgc3lzY2FsbCBsaWtlIGBzeXpfbnRiYD8gSG1tLCBtYXliZSBub3QgZXhwbGljaXRseSwgYnV0IFN5emthbGxlciBpcyBhIHBvd2VyZnVsIHRvb2wuIEl0IG1pZ2h0IGJlIGdvaW5nIHRocm91Z2ggYSBkaWZmZXJlbnQgcm91dGUsIHV0aWxpemluZyBzb21ldGhpbmcgbGlrZSBgdmttc2AsIGB2Z2VtYCwgYGR1bW15YCwgYG1hYzgwMjExX2h3c2ltYCwgb3IgZXZlbiBsZXZlcmFnaW5nIGBudGJfbmV0ZGV2YCBpbiBzb21lIGluZGlyZWN0IG1hbm5lci4gVGhhdOKAmXMgYSBwb3NzaWJpbGl0eS4gTm93LCBob3cgdGhlIGhlY2sgZG9lcyBTeXprYWxsZXIgKnRlc3QqIGBudGJfbmV0ZGV2YCwgc3BlY2lmaWNhbGx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBBbmQgd2FpdCBhIHNlY29uZCwgaXMgdGhlcmUgZXZlbiBhIGR1bW15IE5UQiBkcml2ZXIgYXZhaWxhYmxlPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb2J2aW91cyBwbGFjZSBmaXJzdCDigJMgbGV0JiMzOTtzIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL250Yi9ody9gLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgbXkgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvaHcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogbnVsbCwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDthbWQmIzM0OywKICAgICYjMzQ7ZXBmJiMzNDssCiAgICAmIzM0O2lkdCYjMzQ7LAogICAgJiMzNDtpbnRlbCYjMzQ7LAogICAgJiMzNDttc2NjJiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBmb3IgYSBQbGFjZWhvbGRlciBOVEIgRHJpdmVyKioKCkhtbSwgaXMgdGhlcmUgYSBiYXNpYyBvciAmIzM0O2R1bW15JiMzNDsgTlRCIGRyaXZlciBhdmFpbGFibGU/IEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHNvbWUgYmFzaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYmVmb3JlIHdyaXRpbmcgYW55dGhpbmcgdG9vIHNwZWNpZmljLCBzbyBpdCBjb3VsZCBzYXZlIGEgbG90IG9mIHRpbWUgdG8gc3RhcnQgd2l0aCBzb21lIGV4aXN0aW5nIHNjYWZmb2xkaW5nLiBPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGEgbGlrZWx5IHBsYWNlIHdvdWxkIGJlIHdpdGhpbiB0aGUgTlRCIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUsIHNvIEkmIzM5O2xsIGNoZWNrIGluIHRoZSBgZHJpdmVycy9udGIvaHcvZXBmL2AgZGlyZWN0b3J5LiBNYXliZSB0aGVyZSYjMzk7cyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvciBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiB0dWNrZWQgYXdheSBpbiB0aGVyZS4gR29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5UQl9FUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9ody9lcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnOjE6Y29uZmlnIE5UQl9FUEZcbmRyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIEVQRiBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIGBudGJfbmV0ZGV2YCBUZXN0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgc3l6a2FsbGVyIGNhbiB0ZXN0IHRoaXMgYG50Yl9uZXRkZXZgIHRoaW5nLiBGaXJzdCB0aG91Z2h0IGlzLCAqbWF5YmUqIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBkcml2ZXIgZm9yIGl0LCBhbmQgdGhlbiBpdCYjMzk7cyB0ZXN0YWJsZSwgb3IgbWF5YmUgaXQmIzM5O3MgY29tcGxldGVseSBvdXQgb2YgdGhlIHF1ZXN0aW9uLiBJIHNob3VsZCBjaGVjayBpZiBgbnRiX25ldGRldmAgaXRzZWxmIGlzIGV2ZW4gYSBjYW5kaWRhdGUgZm9yIHRlc3RpbmcuCgpUaGUgcG90ZW50aWFsIHdyaW5rbGUgaXMgdGhhdCBpdCYjMzk7cyBhIFBDSWUgZGV2aWNlLCBhbmQgUUVNVSYjMzk7cyBQQ0llIGVtdWxhdGlvbiBjYW4gYmUgc3BvdHR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBRRU1VIGVtdWxhdGVzIE5UQiBhdCBhbGwuIFJpZ2h0LCBzbyBJJiMzOTtsbCBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgJiMzNDtudGImIzM0OyBvciBqdXN0IHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgbWVudGlvbiBvZiBpdCBiZWluZyB0ZXN0YWJsZS4KCkhhbmcgb24sIHRoZSBpbnN0cnVjdGlvbnMgaGFkIHNvbWV0aGluZywgbGV0IG1lIGxvb2suLi4gQWgsIGhlcmUgaXQgaXM6ICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4uLiYjMzQ7IGJ1dCB3YWl0LCBgbnRiX25ldGRldmAgaXNuJiMzOTt0IG9uZSBvZiB0aG9zZSEgSXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgYSAqdmlydHVhbCBldGhlcm5ldCBvdmVyIE5UQiog4oCTIGEgZ2VuZXJpYyBzdWJzeXN0ZW0gZHJpdmVyLiBTbyB0aGF0ICpzaG91bGQqIG1lYW4gaXQmIzM5O3MgZGlmZmVyZW50LgoKU28sIHRoZSBxdWVzdGlvbiBpcywgKmlzKiBOVEIgdGVzdGFibGUgaW4gUUVNVSwgaW4gZ2VuZXJhbD8gTGV0JiMzOTtzIHNlZS4uLiBJIHNlZSBgZHJpdmVycy9udGIvaHcvZXBmL250Yl9od19lcGYuY2AsIHNvIEVQRiBpcyBFbmRwb2ludCBGcmFtZXdvcmsuIEFsc28sIGBudGJfbmV0ZGV2LmNgIGFuZCBgbnRiX3RyYW5zcG9ydC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBgbnRiX25ldGRldl9zdGFydF94bWl0YC4KCklmIGl0JiMzOTtzIG5vdCBjbGVhciwgaXQmIzM5O3Mgc2FmZXIgdG8gYXNzdW1lIGEgZ2VuZXJpYyBzdWJzeXN0ZW0gaXMgdGVzdGFibGUgdW5sZXNzIGl0ICpzcGVjaWZpY2FsbHkqIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlLgoKUmlnaHQsIHNvIHdoYXQgYWJvdXQgUUVNVT8gSSBrbm93IGl0IGhhcyBzdHVmZiBsaWtlIGBody9wY2ktYnJpZGdlL3hpbzMxMzBfZG93bnN0cmVhbS5jYCwgZXRjLiBEb2VzIGl0IGhhdmUgYW4gKmFjdHVhbCogTlRCIGRldmljZT8gSG1tbSwgd2FpdCwgbm8sIGBudGJfbmV0ZGV2YCBpcyBhICpuZXR3b3JrKiBkZXZpY2UhCgpPa2F5LCBsZXQmIzM5O3MgZ28gYmFjayB0byBiYXNpY3MsIGFyZSB0aGVyZSBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgTlRCPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTIzNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjM2MS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjIzNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNjMtXHRbTkRUUEFfSUZJTkRFWF1cdFx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MjM4MT1zdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNDM3LVx0XHRcdFx0XHRcdCAgdGJbTkRUQV9QQVJNU10sXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyNDM4Olx0XHRcdFx0XHRcdCAgbmxfbnRibF9wYXJtX3BvbGljeSwgZXh0YWNrKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTI0MzktXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDM9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02NTQtXHRib29sIGJ5X21lID0gZmFsc2U7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY1NTpcdGludCBudGJsO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02NTYtXHRpbnQgZGlyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjY5LVx0aG4gPSBkaXIgPyBcdTAwMjZjcC1cdTAwM2VobjEgOiBcdTAwMjZjcC1cdTAwM2VobjA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY3MDpcdG50YmwgPSAwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02NzEtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02ODAtXHRcdHQgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2VuZXdfdGJsKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjgxOlx0XHRudGJsJiM0MzsmIzQzOztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjgyLVx0XHQvKiBXZSBhcmUgbG9zdD8gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjgzOlx0XHRpZiAobnRibCBcdTAwM2U9IDIpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg0LVx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTI0ODA9bmw4MDIxMV9zZW5kX3Btc3JfZnRtX2NhcGEoY29uc3Qgc3RydWN0IGNmZzgwMjExX3Btc3JfY2FwYWJpbGl0aWVzICpjYXAsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTQ2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyNTQ3Olx0aWYgKGNhcC1cdTAwM2VmdG0uaXN0YS5zdXBwb3J0X250YiB8fCBjYXAtXHUwMDNlZnRtLmlzdGEuc3VwcG9ydF90YiB8fFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTQ4LVx0ICAgIGNhcC1cdTAwM2VmdG0uaXN0YS5zdXBwb3J0X2VkY2EpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI1NTQtXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyNTU1Olx0XHRpZiAoY2FwLVx1MDAzZWZ0bS5pc3RhLnN1cHBvcnRfbnRiIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTU2LVx0XHQgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9QTVNSX0ZUTV9DQVBBX0FUVFJfU1VQUE9SVF9OVEIpKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU3MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjU3MTpcdGlmIChjYXAtXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9udGIgfHwgY2FwLVx1MDAzZWZ0bS5yc3RhLnN1cHBvcnRfdGIgfHxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU3Mi1cdCAgICBjYXAtXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9lZGNhKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTg2LVx0XHRcdHJldHVybiAtRU5PQlVGUztcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjU4NzpcdFx0aWYgKGNhcC1cdTAwM2VmdG0ucnN0YS5zdXBwb3J0X250YiBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU4OC1cdFx0ICAgIG5sYV9wdXRfZmxhZyhtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX1NVUFBPUlRfTlRCKSlcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI2MTctXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI2MTg6XHRpZiAoY2FwLVx1MDAzZWZ0bS5taW5fYWxsb3dlZF9yYW5naW5nX2ludGVydmFsX250YiBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjYxOS1cdCAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX01JTl9JTlRFUlZBTF9OVEIsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI2MjA6XHRcdFx0Y2FwLVx1MDAzZWZ0bS5taW5fYWxsb3dlZF9yYW5naW5nX2ludGVydmFsX250YikpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI2MjEtXHRcdHJldHVybiAtRU5PQlVGUztcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEyMjQ1PXN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2JzcyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjI0OC1cdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIyNDk6XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmludGJzcylcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIyNTAte1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjI1MTpcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKnJlcyA9IFx1MDAyNmludGJzcy1cdTAwM2VwdWI7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMjUyLVx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX2Jzc19pZXMgKmllcztcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzIwLVx0ICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9CU1NfU0VFTl9NU19BR08sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzIxOlx0XHRcdGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGludGJzcy1cdTAwM2V0cykpKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyMi1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzIzLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMyNDpcdGlmIChpbnRic3MtXHUwMDNlcGFyZW50X3RzZiBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMjUtXHQgICAgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgTkw4MDIxMV9CU1NfUEFSRU5UX1RTRixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzMjY6XHRcdFx0ICAgICAgIGludGJzcy1cdTAwM2VwYXJlbnRfdHNmLCBOTDgwMjExX0JTU19QQUQpIHx8XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzI3LVx0ICAgICBubGFfcHV0KG1zZywgTkw4MDIxMV9CU1NfUEFSRU5UX0JTU0lELCBFVEhfQUxFTixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzMjg6XHRcdCAgICAgaW50YnNzLVx1MDAzZXBhcmVudF9ic3NpZCkpKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyOS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMzNS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzMzY6XHRpZiAoIW5sODAyMTFfcHV0X3NpZ25hbChtc2csIGludGJzcy1cdTAwM2VwdWIuY2hhaW5zLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMzNzpcdFx0XHRcdGludGJzcy1cdTAwM2VwdWIuY2hhaW5fc2lnbmFsLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMzOC1cdFx0XHRcdE5MODAyMTFfQlNTX0NIQUlOX1NJR05BTCkpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM0MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzNDE6XHRpZiAoaW50YnNzLVx1MDAzZWJzc19zb3VyY2UgIT0gQlNTX1NPVVJDRV9TVEFfUFJPRklMRSkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM0Mi1cdFx0c3dpdGNoIChyZGV2LVx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM2MS1cdFx0Zm9yX2VhY2hfdmFsaWRfbGluayh3ZGV2LCBsaW5rX2lkKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzYyOlx0XHRcdGlmIChpbnRic3MgPT0gd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5jbGllbnQuY3VycmVudF9ic3MgXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzYzLVx0XHRcdCAgICAobmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0JTU19TVEFUVVMsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM3My1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzc0Olx0XHRpZiAoaW50YnNzID09IHdkZXYtXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM3NS1cdFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9CU1NfU1RBVFVTLFxuLS1cbm5ldC93aXJlbGVzcy9wbXNyLmM9MTA9c3RhdGljIGludCBwbXNyX3BhcnNlX2Z0bShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3Btc3IuYy0yMjUtXHRpZiAob3V0LVx1MDAzZWZ0bS5yc3RhIFx1MDAyNlx1MDAyNiBvdXQtXHUwMDNlZnRtLm5vbl90cmlnZ2VyX2Jhc2VkIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL3Btc3IuYzoyMjY6XHQgICAgIWNhcGEtXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9udGIpIHtcbm5ldC93aXJlbGVzcy9wbXNyLmMtMjI3LVx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9ODQ0PXN0YXRpYyBpbnQgY2ZnODAyMTFfc2Nhbl82Z2h6KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg2OS1cdGlmIChyZGV2X3JlcS1cdTAwM2VyZXEuZmxhZ3MgXHUwMDI2IE5MODAyMTFfU0NBTl9GTEFHX0NPTE9DQVRFRF82R0haKSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjg3MDpcdFx0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqaW50YnNzO1xubmV0L3dpcmVsZXNzL3NjYW4uYy04NzEtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg3Mi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJkZXYtXHUwMDNlYnNzX2xvY2spO1xubmV0L3dpcmVsZXNzL3NjYW4uYzo4NzM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW50YnNzLCBcdTAwMjZyZGV2LVx1MDAzZWJzc19saXN0LCBsaXN0KSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjg3NDpcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpyZXMgPSBcdTAwMjZpbnRic3MtXHUwMDNlcHViO1xubmV0L3dpcmVsZXNzL3NjYW4uYy04NzUtXHRcdFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX2Jzc19pZXMgKmllcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMTQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5emthbGxlci1Gb3VuZCBOVEIgQnVnKioKCk9rYXksIHNvIGBudGJfbmV0ZGV2YCBpcyBhIG5ldHdvcmsgZHJpdmVyLCBjb25maXJtZWQuIFRoZSBjb21taXQgbWVzc2FnZSBwb2ludHMgdG8gYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGF0JiMzOTtzIHNpZ25pZmljYW50OyBzeXprYWxsZXImIzM5O3MgZmluZGluZyBpbXBsaWVzIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGhvdyBkb2VzIHN5emthbGxlciBldmVuIHRlc3QgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlcj8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHVuZGVybHlpbmcgdGVzdCBzZXR1cC4gTGV0IG1lIGNoZWNrIHRoZSBvYnZpb3VzIGxvY2F0aW9uczogYGRyaXZlcnMvbnRiL3Rlc3QvYCwgYGRyaXZlcnMvbnRiL2h3L2VwZi9gLCBtYXliZSBldmVuIGEgbmV0bGluayBpbnRlcmZhY2UgaW5zdGFudGlhdGlvbi4KClRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGZvdW5kIHNvbWV0aGluZyBtZWFucyB0aGVyZSYjMzk7cyBhIHBhdGggdGhyb3VnaCB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBwYXRoLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG50Yl9uZXRkZXYuY2AgYW5kIGBudGJfdHJhbnNwb3J0LmNgLCBzbyBJIHNob3VsZCBmb2N1cyBvbiB0aG9zZS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgaXQgYXBwZWFycyB3ZSBoYXZlIGZ1bmN0aW9uYWwgY2hhbmdlcy4gSW4gYG50Yl9uZXRkZXYuY2AsIHRoZSBwYXRjaCBtb2RpZmllcyBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCwgYW5kIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciB0aGUgcmVzdWx0IG9mIGBudGJfbmV0ZGV2X21heWJlX3N0b3BfdHhgLiBJbiBgbnRiX3RyYW5zcG9ydC5jYCwgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgZm9yIGBsZW4gJmd0OyBxcC0mZ3Q7dHhfbWF4X2ZyYW1lIC0gc2l6ZW9mKHN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIpYCBhbmQgcmV0dXJucyBgLUVOT0xJTktgIGlmIGBxcC0mZ3Q7bGlua19pc191cGAgaXMgZmFsc2UuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXJzLgoKR2l2ZW4gc3l6a2FsbGVyJiMzOTtzIHN1Y2Nlc3MsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyLiBIb3cgZG9lcyBzeXprYWxsZXIgZ2V0IGBudGJfbmV0ZGV2YCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nPyBEb2VzIGl0IHVzZSBhIGR1bW15IE5UQiBkcml2ZXIgdG8gc2ltdWxhdGUgdGhlIGhhcmR3YXJlPyBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9udGIvaHcvaW50ZWwvbnRiX2h3X2dlbjEuY2AgZm9yIGFueSBjbHVlcywgb3IgcGVyaGFwcyBgZHJpdmVycy9udGIvdGVzdC9udGJfcGluZ3BvbmcuY2AuIEl0JiMzOTtzIGxpa2VseSBzeXprYWxsZXIgdXRpbGl6ZXMgYSBzaW1wbGlmaWVkIG9yIHZpcnR1YWwgTlRCIGVudmlyb25tZW50LiBTbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSB0ZXN0IG9yIGR1bW15IGRyaXZlcnMgaW4gdGhlIGBkcml2ZXJzL250Yi90ZXN0L2Agb3IgYGRyaXZlcnMvbnRiL2h3L2AgZGlyZWN0b3JpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL250Yi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgVmlydHVhbCBOVEIgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBwb3RlbnRpYWwgdmlydHVhbCBkcml2ZXJzIHJlbGF0ZWQgdG8gTmV0d29yay1BdHRhY2hlZCBCcmlkZ2UgKE5UQikgZnVuY3Rpb25hbGl0eS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGRyaXZlcnMvbnRiL2h3L2AgZGlyZWN0b3J5IGZpcnN0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSwgd2hpY2ggdmlydHVhbCBkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9mdGVuIG1pbWljIG9yIGFic3RyYWN0LCBpcyBsb2NhdGVkLiBJJiMzOTttIHRoaW5raW5nLCBieSBleGFtaW5pbmcgdGhlIGZpbGVzIHRoZXJlLCBJIG1pZ2h0IGJlIGFibGUgdG8gc3BvdCBwYXR0ZXJucyBvciB0ZWNobmlxdWVzIGNvbW1vbmx5IHVzZWQgaW4gdmlydHVhbGl6YXRpb24gb2YgdGhlIE5UQiBoYXJkd2FyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gcG90ZW50aWFsbHkgZmluZCB0aGUga2V5IHNvdXJjZSBvciBhIHBvaW50ZXIgdG8gaXQgdGhhdCBkZW1vbnN0cmF0ZXMgaG93IHRoZXkgYXJlIGhhbmRsZWQsIG9yIGF0IGxlYXN0IHByb3ZpZGVzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGludm9sdmVkIGluIHZpcnR1YWxpemluZyB0aGUgTlRCLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL2h3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IG51bGwsCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7YW1kJiMzNDssCiAgICAmIzM0O2VwZiYjMzQ7LAogICAgJiMzNDtpZHQmIzM0OywKICAgICYjMzQ7aW50ZWwmIzM0OywKICAgICYjMzQ7bXNjYyYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIGBlcGZgIGlzIEVuZHBvaW50IEZyYW1ld29yaywgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCBjYW4gYmUgbGV2ZXJhZ2VkIHdpdGggYHBjaS1lcGYtdGVzdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIGNvdWxkIGV2ZW4gYmUgdmlydHVhbC4gQW5kIGhleSwgdGhlcmUmIzM5O3MgYWxzbyBgbnRiX25ldGRldmAsIHdoaWNoIGlzIGEgbmV0ZGV2IGRyaXZlci4gSWYgSSBjYW4gcmVhY2ggaXQsIHRoZW4gaXQmIzM5O3MgYSBkZWZpbml0ZSBjYW5kaWRhdGUsIHNvIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gc2VlbSB0byBiZToKKiAgIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgCiogICBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYAoqICAgYG50Yl90eF9jb3B5X2NhbGxiYWNrYAoqICAgQW5kIG1heWJlIGBudGJfbmV0ZGV2X21heWJlX3N0b3BfdHhgLCBhbHRob3VnaCB0aGF0IG9uZSYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBhcyBpbnRlcmVzdGluZy4KCkxldCYjMzk7cyBjaGVjayBgbnRiX25ldGRldl9zdGFydF94bWl0YCBhbmQgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAuIFdhaXQsIHRoZSBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCBvbmUgaXMgc3RhdGljLCBzbyBJIHNob3VsZCBwcm9iYWJseSBza2lwIHRoYXQuIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGlzIGV4cG9ydGVkLCB0aG91Z2gsIHNvIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQuIExldCYjMzk7cyBkaWcgaW50byBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpbiBgZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYz0yMzIzPUVYUE9SVF9TWU1CT0xfR1BMKG50Yl90cmFuc3BvcnRfcnhfZW5xdWV1ZSk7XG4tLVxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMjUtLyoqXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM6MjMyNjogKiBudGJfdHJhbnNwb3J0X3R4X2VucXVldWUgLSBFbnF1ZXVlIGEgbmV3IE5UQiBxdWV1ZSBlbnRyeVxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMjctICogQHFwOiBOVEIgdHJhbnNwb3J0IGxheWVyIHF1ZXVlIHRoZSBlbnRyeSBpcyB0byBiZSBlbnF1ZXVlZCBvblxuLS1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0yMzM3LSAqL1xuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jOjIzMzg6aW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMzktXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0yMzcyLX1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoyMzczOkVYUE9SVF9TWU1CT0xfR1BMKG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZSk7XG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMjM3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NjUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOVEIgTmV0d29yayBEZXZpY2UgVHJhbnNtaXQgUGF0aCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBOVEIgbmV0d29yayBkZXZpY2UgdHJhbnNtaXQgcGF0aC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaW4gYGRyaXZlcnMvbmV0L250Yl9uZXRkZXYuY2AuIEkgZXhwZWN0IHRoaXMgaXMgdGhlIGtleSBmdW5jdGlvbiB3aGVyZSB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBpcyBpbml0aWF0ZWQsIHNvIGl04oCZcyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgTmV0RGV2aWNlIGxheWVyIGRvd24gdG8gdGhlIE5UQiBoYXJkd2FyZSBpbnRlcmZhY2UuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIE5UQiBjb3JlIHdpbGwgYmUgY3J1Y2lhbCwgcGFydGljdWxhcmx5IGhvdyBETUEgaXMgY29uZmlndXJlZCBhbmQgdXNlZCB0byBnZXQgcGFja2V0cyBhY3Jvc3MgdGhlIGxpbmsuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBtYW5hZ2VtZW50IGFzIHdlbGwsIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBzaGFyZWQgcmVzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250Yl9uZXRkZXZfc3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L250Yl9uZXRkZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnRiX3F1ZXVlX2hhbmRsZXJzIG50Yl9uZXRkZXZfaGFuZGxlcnMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbnRiX25ldGRldi5jLTI1MC1cbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYzoyNTE6c3RhdGljIG5ldGRldl90eF90IG50Yl9uZXRkZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbnRiX25ldGRldi5jLTI1Mi1cdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYz00MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBudGJfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMtNDM1LVx0Lm5kb19zdG9wID0gbnRiX25ldGRldl9jbG9zZSxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYzo0MzY6XHQubmRvX3N0YXJ0X3htaXQgPSBudGJfbmV0ZGV2X3N0YXJ0X3htaXQsXG5kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMtNDM3LVx0Lm5kb19jaGFuZ2VfbXR1ID0gbnRiX25ldGRldl9jaGFuZ2VfbXR1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgYG50Yl9uZXRkZXZgIFRYIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgLiBJdCYjMzk7cyBhIGBuZXRkZXZgIG9wZXJhdGlvbiwgYW5kIHRlY2huaWNhbGx5IHN0YXRpYywgYnV0IGl0JiMzOTtzIGFuIEFQSSBlbnRyeSBwb2ludCwgc3BlY2lmaWNhbGx5IGBuZG9fc3RhcnRfeG1pdGAuIFRoZSBpbnN0cnVjdGlvbnMgSSYjMzk7dmUgYmVlbiBmb2xsb3dpbmcgYWR2b2NhdGUgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIG1lIHF1ZXN0aW9uIHdoZXRoZXIgdG8gZmF2b3IgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgaW5zdGVhZCBvZiBgbnRiX25ldGRldl9zdGFydF94bWl0YC4gSG93ZXZlciwgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gbW9kaWZpZWQgaW4gYG50Yl9uZXRkZXYuY2AuIEl0ICppcyogYSBjYWxsYmFjaywgYW4gZW50cnkgcG9pbnQsIGFuZCB0aGF0IG1hdHRlcnMgZm9yIGhvdyB3ZSYjMzk7cmUgYnVpbGRpbmcgdGhlIGFic3RyYWN0aW9uIGhlcmUuIFNvIGl0JiMzOTtzIGZpbmUgdG8ga2VlcCBpdC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGluIGBudGJfdHJhbnNwb3J0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGJfdHhfY29weV9jYWxsYmFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MTY4MD1zdGF0aWMgdm9pZCBudGJfdHJhbnNwb3J0X3J4Y19kYih1bnNpZ25lZCBsb25nIGRhdGEpXG4tLVxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE3MTgtXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM6MTcxOTpzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE3MjAtXHRcdFx0XHQgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlcylcbi0tXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MTc4Nz1zdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldClcbi0tXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMTgwMi1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoxODAzOlx0bnRiX3R4X2NvcHlfY2FsbGJhY2soZW50cnksIE5VTEwpO1xuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE4MDQtfVxuLS1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYz0xODU0PXN0YXRpYyBpbnQgbnRiX2FzeW5jX3R4X3N1Ym1pdChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsXG4tLVxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE4OTEtXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM6MTg5MjpcdHR4ZC1cdTAwM2VjYWxsYmFja19yZXN1bHQgPSBudGJfdHhfY29weV9jYWxsYmFjaztcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0xODkzLVx0dHhkLVx1MDAzZWNhbGxiYWNrX3BhcmFtID0gZW50cnk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBLY29uZmlnIG9wdGlvbnM6CgoqKkNoZWNraW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBOVEIgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGFjdHVhbGx5IGJ1aWxkaW5nIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IG15IEtjb25maWcgZHVja3MgaW4gYSByb3cuIEl0JiMzOTtzIHRpbWUgdG8gdmVyaWZ5IHRoZSBwcmVyZXF1aXNpdGVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBOVEJfTkVUREVWYCBhbmQgYE5UQl9UUkFOU1BPUlRgIGFyZSBwcm9wZXJseSBlbmFibGVkIGFuZCBzZXQgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoZSBOVEIgbmV0d29yayBkZXZpY2Ugc3VwcG9ydCBhbmQgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVyLiBJIGNhbiYjMzk7dCBldmVuICp0aGluayogYWJvdXQgY29tcGlsaW5nIHRoaXMgY29kZSBpZiB0aG9zZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzIGFyZSBtaXNzaW5nIG9yIG1pc2NvbmZpZ3VyZWQuIFNvLCBsZXQmIzM5O3MgaGVhZCB0byB0aGUgS2NvbmZpZyBhbmQgZW5zdXJlIHRob3NlIG9wdGlvbnMgYXJlIHNldCBhcyByZXF1aXJlZC4gSXQmIzM5O3MgYSBxdWljayBidXQgZXNzZW50aWFsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEJfVFJBTlNQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnPTI5PXNvdXJjZSBcJiMzNDtkcml2ZXJzL250Yi90ZXN0L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbnRiL0tjb25maWctMzAtXG5kcml2ZXJzL250Yi9LY29uZmlnOjMxOmNvbmZpZyBOVEJfVFJBTlNQT1JUXG5kcml2ZXJzL250Yi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TlRCIFRyYW5zcG9ydCBDbGllbnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBgTlRCX1RSQU5TUE9SVGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IGFzc2VzcyB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgTlRCX1RSQU5TUE9SVGAuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIG1vZHVsZSAqcmVsaWVzKiBvbiBhbmQsIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBpdCAqZG9lc24mIzM5O3QqIGRlcGVuZCBvbiwgYnV0IHdoaWNoIHdlIG1heSBoYXZlIGFzc3VtZWQgaXQgZGlkLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBkZXBlbmRlbmN5IGdyYXBoIGluIG15IG1pbmQsIG9yIGJldHRlciB5ZXQsIGEgdmlzdWFsaXphdGlvbiBpZiBvbmUgZG9lc24mIzM5O3QgZXhpc3QuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgbWVhbmluZ2Z1bCBpbXBhY3QuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGluZGlyZWN0IGRlcGVuZGVuY2llcyDigJMgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZXMsIHRoZSBzZWNvbmQtb3JkZXIgcmVsYXRpb25zaGlwcyB0aGF0IG9mdGVuIGJpdGUgeW91IGxhdGVyLiBJIG5lZWQgdG8ga25vdyBub3QganVzdCB0aGUgZGlyZWN0IHVwc3RyZWFtIG1vZHVsZXMsIGJ1dCBhbHNvIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIHRoZWlycywgYW5kIHNvIG9uLiBBbnkgdW5leHBlY3RlZCBjb25uZWN0aW9uIGNvdWxkIHBvdGVudGlhbGx5IG1hbmlmZXN0IGluIHN1YnRsZSBidWdzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgZG93biB0aGUgcm9hZC4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgKm5hdHVyZSogb2YgdGhlc2UgZGVwZW5kZW5jaWVzLiBBcmUgdGhleSBoYXJkLCBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhleSBtb3JlIGZsZXhpYmxlLCBwZXJoYXBzIHJ1bnRpbWUgbGlua3Mgb3IgaW50ZXJmYWNlcz8gVGhlIHR5cGUgb2YgZGVwZW5kZW5jeSB3aWxsIGdyZWF0bHkgaW5mbHVlbmNlIGhvdyBjaGFuZ2VzIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uCgpJIHdhbnQgdG8ga25vdyBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbHVya2luZy4gQSBjaXJjdWxhciBkZXBlbmRlbmN5IHdvdWxkIGJlIGFuIGFic29sdXRlIG5pZ2h0bWFyZSB3aGVuIHRyeWluZyB0byByZWZhY3Rvci4gSSBhbSB3b25kZXJpbmcgaG93IHRoaXMgdGllcyBpbiB3aXRoIGFueSBuZXcgd29yayBvciBmZWF0dXJlcyB3ZSBhcmUgdHJ5aW5nIHRvIGluY29ycG9yYXRlLgoKRmluYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdG9vbHMgYXQgbXkgZGlzcG9zYWwuIERvIEkgaGF2ZSBhIHJlbGlhYmxlIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCB0aGF0IGNhbiBnZW5lcmF0ZSBhIGNvbXByZWhlbnNpdmUgcmVwb3J0PyBDYW4gSSB0cmFjZSB0aGUgY29ubmVjdGlvbnMgbWFudWFsbHkgaWYgdGhlIHRvb2xpbmcgaXMgaW5hZGVxdWF0ZT8gVGhlIHNwZWVkIGFuZCBhY2N1cmFjeSBvZiBteSBhbmFseXNpcyB3aWxsIGRlcGVuZCBvbiBob3cgZWZmaWNpZW50bHkgSSBjYW4gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5UQl9UUkFOU1BPUlR8ZGVwZW5kcyBvbi4qTlRCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnPTI5PXNvdXJjZSBcJiMzNDtkcml2ZXJzL250Yi90ZXN0L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbnRiL0tjb25maWctMzAtXG5kcml2ZXJzL250Yi9LY29uZmlnOjMxOmNvbmZpZyBOVEJfVFJBTlNQT1JUXG5kcml2ZXJzL250Yi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TlRCIFRyYW5zcG9ydCBDbGllbnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIGRlcGVuZGVuY3kgeW91JiMzOTt2ZSBpZGVudGlmaWVkOgoKKipEZXBlbmRlbmN5IERlZHVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIG9yIHNldHVwLi4uIGFuZCBJJiMzOTttIHNlZWluZyBgTlRCX1RSQU5TUE9SVGAgYW5kIGEgY29uZGl0aW9uYWwgYGlmIE5UQmAuIEl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyLiBgTlRCX1RSQU5TUE9SVGAmIzM5O3MgdmVyeSBleGlzdGVuY2UgKmRlcGVuZHMqIG9uIGBOVEJgIGJlaW5nIGRlZmluZWQuIEl0JiMzOTtzIG5lc3RlZCByaWdodCBpbnNpZGUgdGhhdCBjb25kaXRpb25hbCBibG9jaywgc28gaWYgYE5UQmAgaXNuJiMzOTt0IHNldCwgYE5UQl9UUkFOU1BPUlRgIHNpbXBseSAqd29uJiMzOTt0KiBleGlzdC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LiBUaGVyZSYjMzk7cyBubyB3YXkgYXJvdW5kIGl0LiBNeSBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbSBuZWVkcyB0byByZWZsZWN0IHRoaXMgaGFyZHdpcmVkIHJlbGF0aW9uc2hpcC4gSWYgSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcsIHRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjaGVjay4gVGhpcyBpcyBub3QgYSBjaG9pY2UsIGl0JiMzOTtzIGEgYnVpbHQtaW4gY29uc3RyYWludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWYgTlRCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnPTI9bWVudWNvbmZpZyBOVEJcbi0tXG5kcml2ZXJzL250Yi9LY29uZmlnLTEzLVxuZHJpdmVycy9udGIvS2NvbmZpZzoxNDppZiBOVEJcbmRyaXZlcnMvbnRiL0tjb25maWctMTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDM1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBEZXBlbmRlbmNpZXMgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gc3RhcnRpbmcgYSBuZXcgaW50ZWdyYXRpb24gb3IgcHJvamVjdCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIHNxdWFyZWx5IG9uIHRoZSBuZWNlc3NhcnkgY29yZSBjb21wb25lbnRzLiBSaWdodCBub3csIEkmIzM5O20gdGhpbmtpbmcgd2UmIzM5O3JlIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgTlRCYCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBUaGVuIHRoZXJlJiMzOTtzIGBOVEJfVFJBTlNQT1JUYCDigJMgb2J2aW91c2x5IGVzc2VudGlhbCBmb3IgZGF0YSBtb3ZlbWVudC4gQW5kIG9mIGNvdXJzZSwgd2UmIzM5O2xsIG5lZWQgYE5UQl9ORVRERVZgIHRvIGRlYWwgd2l0aCBuZXR3b3JrIGRldmljZSBhc3BlY3RzLgoKQnV0IEkga25vdyBiZXR0ZXIgdGhhbiB0byBqdXN0IGFzc3VtZSB0aG9zZSBhcmUgdGhlICpvbmx5KiBwaWVjZXMgd2UmIzM5O2xsIG5lZWQuIE15IGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0aGF0IGRlcGVuZGVuY2llcyBjYW4gYmUgc25lYWt5LCBwb3BwaW5nIHVwIGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZG8gYSB0aG9yb3VnaCBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHZpdGFsIGNvbXBvbmVudHMgdGhhdCB0aGVzZSB0aHJlZSBtaWdodCByZWx5IG9uLCBvciB0aGF0IHRoaXMgc2V0dXAgbWlnaHQgcmVxdWlyZS4gTmVlZCB0byBkb3QgbXkgaSYjMzk7cyBhbmQgY3Jvc3MgbXkgdCYjMzk7cyBvbiB0aGlzLiBHb3R0YSBiZSBjb21wbGV0ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz02PW1lbnVjb25maWcgTkVUREVWSUNFU1xuZHJpdmVycy9uZXQvS2NvbmZpZy03LVx0ZGVmYXVsdCB5IGlmIFVNTFxuZHJpdmVycy9uZXQvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBORVRcbmRyaXZlcnMvbmV0L0tjb25maWctOS1cdGJvb2wgXCYjMzQ7TmV0d29yayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDE9Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQzOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0Olx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NzQ9Y29uZmlnIFdJUkVHVUFSRFxuZHJpdmVycy9uZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O1dpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NzY6XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy03Ny1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9OTI9Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xuZHJpdmVycy9uZXQvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo5NDpcdGRlcGVuZHMgb24gV0lSRUdVQVJEXG5kcml2ZXJzL25ldC9LY29uZmlnLTk1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MTAzPWNvbmZpZyBPVlBOXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O09wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MTA1Olx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMTA2LVx0c2VsZWN0IERTVF9DQUNIRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MTM2PWNvbmZpZyBORVRfRkNcbmRyaXZlcnMvbmV0L0tjb25maWctMTM3LVx0Ym9vbCBcJiMzNDtGaWJyZSBDaGFubmVsIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjEzODpcdGRlcGVuZHMgb24gU0NTSSBcdTAwMjZcdTAwMjYgUENJXG5kcml2ZXJzL25ldC9LY29uZmlnLTEzOS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTE0OT1jb25maWcgSUZCXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1MC1cdHRyaXN0YXRlIFwmIzM0O0ludGVybWVkaWF0ZSBGdW5jdGlvbmFsIEJsb2NrIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MTUxOlx0ZGVwZW5kcyBvbiBORVRfQUNUX01JUlJFRCB8fCBORlRfRldEX05FVERFVlxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNTItXHRzZWxlY3QgTkVUX1JFRElSRUNUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0xNzk9Y29uZmlnIE1BQ1ZUQVBcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVx0dHJpc3RhdGUgXCYjMzQ7TUFDLVZMQU4gYmFzZWQgdGFwIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoxODE6XHRkZXBlbmRzIG9uIE1BQ1ZMQU5cbmRyaXZlcnMvbmV0L0tjb25maWc6MTgyOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4My1cdHNlbGVjdCBUQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTE5Mz1jb25maWcgSVBWTEFOX0wzU1xuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTQ6XHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTU6XHRkZXBlbmRzIG9uIElQVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0xOTYtXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0xOTk9Y29uZmlnIElQVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUC1WTEFOIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjAxOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTIwMi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXG5kcml2ZXJzL25ldC9LY29uZmlnLTIxNy1cdHRyaXN0YXRlIFwmIzM0O0lQLVZMQU4gYmFzZWQgdGFwIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTg6XHRkZXBlbmRzIG9uIElQVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTk6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjIwLVx0c2VsZWN0IFRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjMwPWNvbmZpZyBWWExBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjMyOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMy1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjQ1PWNvbmZpZyBHRU5FVkVcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ2LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjQ3Olx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0OC1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2MS1cdHRyaXN0YXRlIFwmIzM0O0JhcmUgVURQIEVuY2Fwc3VsYXRpb25cJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjYyOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2My1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjcyPWNvbmZpZyBHVFBcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVx0dHJpc3RhdGUgXCYjMzQ7R1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyNzQ6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjc1LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yODk9Y29uZmlnIFBGQ1BcbmRyaXZlcnMvbmV0L0tjb25maWctMjkwLVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEZvcndhcmRpbmcgQ29udHJvbCBQcm90b2NvbCAoUEZDUClcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjkxOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTI5Mi1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzAyPWNvbmZpZyBBTVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzAzLVx0dHJpc3RhdGUgXCYjMzQ7QXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcgKEFNVClcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MzA0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJUF9NVUxUSUNBU1RcbmRyaXZlcnMvbmV0L0tjb25maWctMzA1LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzI4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozMjk6XHRkZXBlbmRzIG9uIFBSSU5US1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMzQ9Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozMzY6XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzM3LVx0XHRcdCEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzQ1PWNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDgtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM1NT1jb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozNTc6XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1OC1cdGRlZmF1bHQgblxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzczPWNvbmZpZyBOVEJfTkVUREVWXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3NC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjM3NTpcdGRlcGVuZHMgb24gTlRCX1RSQU5TUE9SVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzYtXG5kcml2ZXJzL25ldC9LY29uZmlnPTM3Nz1jb25maWcgUklPTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3OC1cdHRyaXN0YXRlIFwmIzM0O1JhcGlkSU8gRXRoZXJuZXQgb3ZlciBtZXNzYWdpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc5Olx0ZGVwZW5kcyBvbiBSQVBJRElPXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4MC1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzgxPWNvbmZpZyBSSU9ORVRfVFhfU0laRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zODItXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIG91dGJvdW5kIHF1ZXVlIGVudHJpZXNcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MzgzOlx0ZGVwZW5kcyBvbiBSSU9ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzg0LVx0ZGVmYXVsdCBcJiMzNDsxMjhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcbmRyaXZlcnMvbmV0L0tjb25maWctMzg3LVx0aW50IFwmIzM0O051bWJlciBvZiBpbmJvdW5kIHF1ZXVlIGVudHJpZXNcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzg4Olx0ZGVwZW5kcyBvbiBSSU9ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzg5LVx0ZGVmYXVsdCBcJiMzNDsxMjhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM5MT1jb25maWcgVFVOXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozOTM6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzk0LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00NDM9Y29uZmlnIFZJUlRJT19ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ0LVx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIG5ldHdvcmsgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0NTpcdGRlcGVuZHMgb24gVklSVElPXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ni1cdHNlbGVjdCBORVRfRkFJTE9WRVJcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ2Mz1jb25maWcgTkVUS0lUXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cdGJvb2wgXCYjMzQ7QlBGLXByb2dyYW1tYWJsZSBuZXR3b3JrIGRldmljZVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo0NjU6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2Ni1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ3Mj1jb25maWcgTkVUX1ZSRlxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzMtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ3NDpcdGRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ3NTpcdGRlcGVuZHMgb24gTkVUX0wzX01BU1RFUl9ERVZcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc2Olx0ZGVwZW5kcyBvbiBJUFY2X01VTFRJUExFX1RBQkxFUyB8fCBJUFY2PW5cbmRyaXZlcnMvbmV0L0tjb25maWctNDc3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDgxPWNvbmZpZyBWU09DS01PTlxuZHJpdmVycy9uZXQvS2NvbmZpZy00ODItXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIHZzb2NrIG1vbml0b3JpbmcgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ4MzpcdGRlcGVuZHMgb24gVkhPU1RfVlNPQ0tcbmRyaXZlcnMvbmV0L0tjb25maWctNDg0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDg5PWNvbmZpZyBNSElfTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ5MC1cdHRyaXN0YXRlIFwmIzM0O01ISSBuZXR3b3JrIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo0OTE6XHRkZXBlbmRzIG9uIE1ISV9CVVNcbmRyaXZlcnMvbmV0L0tjb25maWctNDkyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0NS1cdHRyaXN0YXRlIFwmIzM0O1hlbiBuZXR3b3JrIGRldmljZSBmcm9udGVuZCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ2Olx0ZGVwZW5kcyBvbiBYRU5cbmRyaXZlcnMvbmV0L0tjb25maWctNTQ3LVx0c2VsZWN0IFhFTl9YRU5CVVNfRlJPTlRFTkRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTU2Mj1jb25maWcgWEVOX05FVERFVl9CQUNLRU5EXG5kcml2ZXJzL25ldC9LY29uZmlnLTU2My1cdHRyaXN0YXRlIFwmIzM0O1hlbiBiYWNrZW5kIG5ldHdvcmsgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjU2NDpcdGRlcGVuZHMgb24gWEVOX0JBQ0tFTkRcbmRyaXZlcnMvbmV0L0tjb25maWctNTY1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4NS1cdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBWTVhORVQzIGV0aGVybmV0IGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODY6XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODc6XHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODgtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01OTQ9Y29uZmlnIEZVSklUU1VfRVNcbmRyaXZlcnMvbmV0L0tjb25maWctNTk1LVx0dHJpc3RhdGUgXCYjMzQ7RlVKSVRTVSBFeHRlbmRlZCBTb2NrZXQgTmV0d29yayBEZXZpY2UgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjU5NjpcdGRlcGVuZHMgb24gQUNQSVxuZHJpdmVycy9uZXQvS2NvbmZpZy01OTctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA2Olx0ZGVwZW5kcyBvbiBERUJVR19GU1xuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDc6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA4Olx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDk6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cdHNlbGVjdCBORVRfREVWTElOS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODczMwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYE5UQmAgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYE5UQl9ORVRERVZgIHJlbGllcyBkaXJlY3RseSBvbiBgTlRCX1RSQU5TUE9SVGAuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgbmV0d29yayBkZXZpY2UgbmVlZHMgYSB0cmFuc3BvcnQgbGF5ZXIuIE5vdywgYE5UQl9UUkFOU1BPUlRgIGl0c2VsZiBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIGJhc2UgYE5UQmAgbW9kdWxlLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgc28gZmFyLCB0aGUgcmVsYXRpb25zaGlwcyBhcmUgY2xlYXI6IE5FVERFViAtJmd0OyBUUkFOU1BPUlQgLSZndDsgTlRCLiBCdXQgSSBhbHdheXMgbGlrZSB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBEZXBlbmRlbmNpZXMgY2FuIGJlIHNuZWFreSwgZXNwZWNpYWxseSBpbiBzb21ldGhpbmcgYXMgY29tcGxleCBhcyBhIGtlcm5lbCBkcml2ZXIuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkgc2hvdWxkIHByb2JhYmx5IG9wZW4gdXAgYGRyaXZlcnMvbnRiL0tjb25maWdgIGFuZCBzY2FuIHRocm91Z2ggdGhlIG9wdGlvbnMgdGhlcmUgdG8gYmUgY29tcGxldGVseSBzdXJlLiBTb21ldGltZXMgdGhlcmUgYXJlIGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgcmVxdWlyZW1lbnRzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBhcHBhcmVudCBmcm9tIGEgY3Vyc29yeSBnbGFuY2UuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBmdW5kYW1lbnRhbCBkcml2ZXIgYnVpbGRpbmcgYmxvY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnPTI9bWVudWNvbmZpZyBOVEJcbmRyaXZlcnMvbnRiL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9udGIvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbnRiL0tjb25maWctNS1cdGhlbHBcbi0tXG5kcml2ZXJzL250Yi9LY29uZmlnPTE2PWNvbmZpZyBOVEJfTVNJXG5kcml2ZXJzL250Yi9LY29uZmlnLTE3LVx0Ym9vbCBcJiMzNDtNU0kgSW50ZXJydXB0IFN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbnRiL0tjb25maWc6MTg6XHRkZXBlbmRzIG9uIFBDSV9NU0lcbmRyaXZlcnMvbnRiL0tjb25maWctMTktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTU4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTlRCIENvbmZpZ3VyYXRpb24gRGlsZW1tYSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgTlRCIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGUgZGVwZW5kZW5jeSDigJMgYE5UQmAgcmVsaWVzIG9uIGBQQ0lgLiBNYWtlcyBzZW5zZSwgdGhlIGhhcmR3YXJlIGludGVyZmFjZS4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGluY2x1ZGUgYWxsIHRoZSByZWxldmFudCBvcHRpb25zIHRvIGdldCB0aGlzIHRoaW5nIHVwIGFuZCBydW5uaW5nIHByb3Blcmx5LiBMZXQmIzM5O3MgYWRkIGBOVEJgLCBgTlRCX1RSQU5TUE9SVGAsIGFuZCBgTlRCX05FVERFVmAgdG8gdGhlIG1peC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGNvbXBvbmVudHMuCgpXYWl0IGEgc2Vjb25k4oCmIHdhc24mIzM5O3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IHN5emthbGxlciBoYXZpbmcgYSBkdW1teSBOVEIgZHJpdmVyPyBJIGNvdWxkIGJlIGltYWdpbmluZyB0aGluZ3MsIGJ1dCBpdCYjMzk7cyB3b3J0aCBhIGRvdWJsZS1jaGVjay4gT2theSwgeWVhaCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdGVzdCBkcml2ZXIgYW5kIGl0cyByZWxhdGVkIGNvbmZpZyBvcHRpb25zIGJ5IGNoZWNraW5nIGBkcml2ZXJzL250Yi90ZXN0L0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXprYWxsZXIgZHJpdmVyIGRvZXNuJiMzOTt0IGNvbmZsaWN0IHdpdGggbXkgY29uZmlndXJhdGlvbi4gSSBob3BlIHRoaXMgY292ZXJzIGV2ZXJ5dGhpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi90ZXN0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoyOmNvbmZpZyBOVEJfUElOR1BPTkdcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRCIFBpbmcgUG9uZyBUZXN0IENsaWVudFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0xMC1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoxMTpjb25maWcgTlRCX1RPT0xcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0xMi1cdHRyaXN0YXRlIFwmIzM0O05UQiBEZWJ1Z2dpbmcgVG9vbCBUZXN0IENsaWVudFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoyMjpjb25maWcgTlRCX1BFUkZcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O05UQiBSQVcgUGVyZiBNZWFzdXJpbmcgVG9vbFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yOS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzozMDpjb25maWcgTlRCX01TSV9URVNUXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMzEtXHR0cmlzdGF0ZSBcJiMzNDtOVEIgTVNJIFRlc3QgQ2xpZW50XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEJ1ZyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBEaWQgSSBqdXN0IHNlZSBzb21ldGhpbmcgYWJvdXQgYHN5el9udGJgPyBUaGF0IGNhbiYjMzk7dCBiZSByaWdodC4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGlzIHRvb2wgKmNhbm5vdCogYmUgdXNlZCBmb3IgbG9va2luZyBhdCBzeXprYWxsZXImIzM5O3Mgb3duIHBzZXVkby1zeXNjYWxscyBsaWtlIGFueXRoaW5nIHByZWZpeGVkIHdpdGggYHN5el9gLiBUaGV5IGFyZW4mIzM5O3QgaW4gdGhlIGtlcm5lbCwgc28gd2hhdCYjMzk7cyBnb2luZyBvbj8gSWYgc3l6a2FsbGVyIGZvdW5kIGEgYnVnIHJlbGF0ZWQgdG8gTlRCLCBpdCBtdXN0IGJlIHRlc3RhYmxlIHNvbWVob3cuCgpSaWdodCwgdGhlcmUgaGFzIHRvIGJlIGEgcmVhbCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHRoaW5rLi4uIGEgdmlydHVhbCBOVEIgZHJpdmVyPyBUaGF0JiMzOTtzIHBsYXVzaWJsZS4gV2hlcmUgd291bGQgdGhhdCBsaXZlPyBBaCwgcHJvYmFibHkgaW4gYGRyaXZlcnMvbnRiL2h3L2VwZi9gLiBUaGF0IG1ha2VzIHNlbnNlLgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeSBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSG9wZWZ1bGx5LCB0aGF0IGdpdmVzIHVzIHRoZSBjb250ZXh0IHdlIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwOTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRVBGIEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBFUEYgaGFyZHdhcmUgd2l0aGluIHRoZSBOVEIgZHJpdmVyLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL250Yi9ody9lcGYvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIGRlY2lzaW9ucyBmb3IgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBhcmUgbGlrZWx5IGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBlYWNoIG9wdGlvbiBoYXMgb24gdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvciBhbmQgcGVyZm9ybWFuY2UuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGdyYXNwaW5nIGhvdyB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIHBpZWNlIGlzIGNvbnRyb2xsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE5UQl9FUEZcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgRVBGIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuICAgMzpcdFx0aGVscFxuICAgNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBFUEYgTlRCIG9uIGNvbmZpZ3VyYWJsZSBlbmRwb2ludC5cbiAgIDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgTlRCOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKT2theSwgc28gYE5UQl9FUEZgIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzLiBUaGF0JiMzOTtzIGdvb2QuIEFuZCBzaW5jZSBzeXprYWxsZXIgZm91bmQgYSBidWcsIHRoZSBhZmZlY3RlZCBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaW1lIHRvIGJyZWFrIHRoaXMgZG93biBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucy4KClRoZSBpbnN0cnVjdGlvbnMgc2F5IHRoYXQgaWYgdGhlcmUmIzM5O3MgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLCB0aGVuIHdlIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuICBTaW5jZSB0aGVyZSYjMzk7cyBhIGJ1ZywgdGhhdCYjMzk7cyB3aGF0IHdlIGhhdmUgaGVyZS4gU28sIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgd2UgbmVlZCB0byBleHRyYWN0IHRoZSBpbXBvcnRhbnQga2VybmVsIGZ1bmN0aW9ucyBmb3IgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBzZWUuLi4gIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgLCBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCwgYW5kIGBudGJfdHhfY29weV9jYWxsYmFja2Agc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIEkgaGF2ZSBjb25maXJtZWQgdGhhdC4KCk5leHQgdXAgYXJlIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIG5lZWQgdG8gZGVmaW5lIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQuIFRoZSBvYnZpb3VzIG9uZXMgaGVyZSBhcmUgYE5UQmAsIGBOVEJfVFJBTlNQT1JUYCwgYW5kIGBOVEJfTkVUREVWYC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQuICBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZS4gIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIGl0ICppcyogdXNlZCBhcyBhIGNhbGxiYWNrOiBgdHhkLSZndDtjYWxsYmFja19yZXN1bHQgPSBudGJfdHhfY29weV9jYWxsYmFjaztgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBpbmxpbmVkIGFuZCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQgc2hvdWxkIGJlIGZpbmUuICBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBwZXJmZWN0LiAgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaXMgc3RhdGljLCBidXQgaXMgYSBuZXRkZXYgb3A6IGAubmRvX3N0YXJ0X3htaXQgPSBudGJfbmV0ZGV2X3N0YXJ0X3htaXQsYCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgaW5saW5lZCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgYW4gZW50cnkgcG9pbnQuCgpPa2F5LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQ/IGBudGJfbmV0ZGV2X21heWJlX3N0b3BfdHhgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGRpcmVjdGx5LCB3aGljaCBtYWtlcyBpdCBhIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcuIFdlICpkb24mIzM5O3QqIHdhbnQgdGhhdC4gU28gbGV0JiMzOTtzIHNraXAgdGhhdC4KCkhtbSwgYG50Yl9wcm9jZXNzX3R4YCBpbiBgZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jYC4uLiBUaGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQhIExldCYjMzk7cyBleGFtaW5lIHRoZSBkaWZmLiBBaCwgc29tZSBsaW5lcyB3ZXJlIHJlbW92ZWQuIFRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgc3RhdGljLiAgSXMgaXQgYW4gZW50cnkgcG9pbnQ/IE5vLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBvdGhlciBmdW5jdGlvbnMsIGxpa2UgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAsIHdoaWNoIGlzIHByb2JhYmx5IHRoZSBtYWluIGVudHJ5IHBvaW50LiBTbywgd2UgYWxyZWFkeSBoYXZlIHRoYXQuCgpOb3cgbGV0JiMzOTtzIGNoZWNrIGBudGJfbmV0ZGV2X3R4X3RpbWVyYCBpbiBgZHJpdmVycy9uZXQvbnRiX25ldGRldi5jYC4gV2FpdCEgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaXMgbW9kaWZpZWQuIEFuZCB0aGUgZGlmZiBzaG93cyBhIGNvZGUgY2hhbmdlIGhlcmUuCgpTbywgbGV0JiMzOTtzIHJldmlldzogT3VyIGBGb2N1c1N5bWJvbHNgOiBgbnRiX25ldGRldl9zdGFydF94bWl0YCwgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAsIGBudGJfdHhfY29weV9jYWxsYmFja2AuIGFuZCBvdXIgYEVuYWJsZUNvbmZpZ3NgOiBgTlRCYCwgYE5UQl9UUkFOU1BPUlRgLCBgTlRCX05FVERFVmAuCgpBbnl0aGluZyBlbHNlPyBJcyBgTlRCX0VQRmAgcmVsZXZhbnQ/ICBXZSBkb24mIzM5O3Qga25vdyBmb3Igc3VyZSwgYXMgc3l6a2FsbGVyIGNvdWxkIGJlIHVzaW5nIHNvbWV0aGluZyBlbHNlLiBEb2VzIHN5emthbGxlciBoYXZlIGEgZHVtbXkgTlRCIGRyaXZlcj8gIExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9udGIvaHcvYC4gIGBOVEJfUElOR1BPTkdgPyAgTm8sIHRoYXQmIzM5O3MgYSB0ZXN0IGNsaWVudCwgbm90IGEgaGFyZHdhcmUgZHJpdmVyLiAgYE5UQl9ORVRERVZgIGlzIGEgY2xpZW50LiBXaGF0JiMzOTtzIHRoZSBoYXJkd2FyZT8gSSBzaG91bGQgbG9vayBmb3IgaGFyZHdhcmUsIG9yIGEgYGR1bW15YCBkcml2ZXIgaW4gYGRyaXZlcnMvbnRiL2h3L2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9ody8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ1MAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA3MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5UQiBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTlRCIChOb24tVHJhbnNwYXJlbnQgQnJpZGdlKSBkcml2ZXIgcGF0Y2gsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdHJhbnNtaXQgcGF0aC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgYW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCB0ZXN0aW5nLCBlc3BlY2lhbGx5IGZ1enppbmcgd2l0aCB0b29scyBsaWtlIHN5emthbGxlci4KCkZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBoYXJkd2FyZSB2YXJpYXRpb25zLiBJJiMzOTttIHdvbmRlcmluZyB3aGljaCBzcGVjaWZpYyBOVEIgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zIGFyZSBhZmZlY3RlZDogYGRyaXZlcnMvbnRiL2h3L2lkdC9gLCBgZHJpdmVycy9udGIvaHcvaW50ZWwvYCwgYGRyaXZlcnMvbnRiL2h3L2FtZC9gLCBgZHJpdmVycy9udGIvaHcvbXNjYy9gLCBgZHJpdmVycy9udGIvaHcvZXBmL2AuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBzcGVjaWZ5IGEgJiMzNDtkdW1teSYjMzQ7IGRyaXZlciwgc28gaXQgcHJvYmFibHkgaXMgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgdmlydHVhbCBQQ0kgZnJhbWV3b3JrIG9yIHRoZSBnZW5lcmljIGBOVEJfRVBGYCBtb2R1bGUuCgpUaGUgZmFjdCB0aGF0IHRoZSBidWcgcmVwb3J0IGNhbWUgZnJvbSBgc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0O2AgaXMgc2lnbmlmaWNhbnQuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBzeXprYWxsZXIgKmlzKiBjYXBhYmxlIG9mIHRlc3RpbmcgdGhpcyBOVEIgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZ3JlYXQuIEkganVzdCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb3ZlcmFnZSwgYW5kIHRoZSBvYnZpb3VzIG9uZXMgYXJlIGBOVEJgLCBgTlRCX1RSQU5TUE9SVGAsIGFuZCBgTlRCX05FVERFVmAuIEkmIzM5O2xsIHByb3ZpZGUgdGhvc2UgY29uZmlndXJhdGlvbnMgaW4gdGhlIHJlc3VsdC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biBkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgYE5UQl9ORVRERVZgIHJlbGllcyBvbiBgTlRCX1RSQU5TUE9SVGAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGBOVEJgLCBhbmQgYE5UQmAgZGVwZW5kcyBvbiBgUENJYC4gVGhlIGBQQ0lgIGNvbmZpZyBzaG91bGQgYmUgc3RhbmRhcmQsIGJ1dCBJIHdpbGwgbWFrZSBub3RlIG9mIGl0LgoKTmV4dCwgSSBuZWVkIHRvIGRlZmluZSB0aGUgc3ltYm9scyB0aGF0IGFyZSBjaGFuZ2VkIGluIHRoZSBwYXRjaC4gSSYjMzk7bGwgY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IHJlYWNoYWJsZS4gTGV0JiMzOTtzIHNlZS4uLiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGlzbiYjMzk7dCBleHBvcnRlZCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBpdCBpc24mIzM5O3QgcmVsZXZhbnQsIHNpbmNlIGl0JiMzOTtzIHVzZWQgd2l0aGluIGV4cG9ydGVkIGZ1bmN0aW9ucy4gYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgaXMgZXhwb3J0ZWQuIEFuZCBgbnRiX25ldGRldl9zdGFydF94bWl0YCBpc24mIzM5O3QgZGlyZWN0bHkgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBhIGBuZG9fc3RhcnRfeG1pdGAgY2FsbGJhY2ssIHNvIGl0ICppcyogcmVhY2hhYmxlLgoKU28sIGJhc2VkIG9uIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBhbmQgbXkgY29kZSBhbmFseXNpcywgdGhlIGtleSBzeW1ib2xzIHRoYXQgcmVwcmVzZW50IHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBhcmU6IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgLCBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCwgYW5kIGBudGJfdHhfY29weV9jYWxsYmFja2AuIFRoZXNlIGFyZSB0aGUgb25lcyBJJiMzOTtsbCBoaWdobGlnaHQgYXMgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbmV0d29yayB0cmFuc21pc3Npb24gYW5kIHRoZSBoYW5kbGluZyBvZiBxdWV1ZSBzdG9wcywgZXJyb3JzLCBsaW5rIHN0YXR1cyBhbmQgZnJhbWUgc2l6ZSBsaW1pdHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGZ1bmN0aW9uIG5hbWVzIG9uZSBsYXN0IHRpbWUuIFllcCwgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCBpcyBpbmRlZWQgYHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpYC4gQW5kIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGlzIGBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KWAuIEFuZCBmaW5hbGx5LCBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpcyBgaW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKWAuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gSSYjMzk7bGwgY29uZmlndXJlIG15IHJlc3VsdCB1c2luZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05UQiYjMzQ7LAogICAgJiMzNDtOVEJfVFJBTlNQT1JUJiMzNDssCiAgICAmIzM0O05UQl9ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGJfbmV0ZGV2X3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7bnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O250Yl90eF9jb3B5X2NhbGxiYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVEIgKE5vbi1UcmFuc3BhcmVudCBCcmlkZ2UpIG5ldGRldiBkcml2ZXIgYW5kIHRyYW5zcG9ydCBsYXllciB0byBmaXggYSBidWcgaW4gdGhlIHRyYW5zbWl0IHBhdGguIEl0IGNoYW5nZXMgaG93IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGhhbmRsZXMgcXVldWUgc3RvcHMgYW5kIGVycm9ycywgYW5kIG1vZGlmaWVzIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIHRvIGNoZWNrIGZvciBsaW5rIHN0YXR1cyBhbmQgZnJhbWUgc2l6ZSBsaW1pdHMuIEl0IGFsc28gdXBkYXRlcyBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGNvcnJlY3RseSBoYW5kbGUgRE1BIGNvcHkgcmVzdWx0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgbmV0d29yayB0cmFuc21pdCBwYXRocyBvdmVyIE5UQiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRCJiMzNDssCiAgICAmIzM0O05UQl9UUkFOU1BPUlQmIzM0OywKICAgICYjMzQ7TlRCX05FVERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250Yl9uZXRkZXZfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtudGJfdHJhbnNwb3J0X3R4X2VucXVldWUmIzM0OywKICAgICYjMzQ7bnRiX3R4X2NvcHlfY2FsbGJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5UQiAoTm9uLVRyYW5zcGFyZW50IEJyaWRnZSkgbmV0ZGV2IGRyaXZlciBhbmQgdHJhbnNwb3J0IGxheWVyIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgdHJhbnNtaXQgcGF0aC4gSXQgY2hhbmdlcyBob3cgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaGFuZGxlcyBxdWV1ZSBzdG9wcyBhbmQgZXJyb3JzLCBhbmQgbW9kaWZpZXMgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgdG8gY2hlY2sgZm9yIGxpbmsgc3RhdHVzIGFuZCBmcmFtZSBzaXplIGxpbWl0cy4gSXQgYWxzbyB1cGRhdGVzIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gY29ycmVjdGx5IGhhbmRsZSBETUEgY29weSByZXN1bHRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGhzIG92ZXIgTlRCLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsb2dpYyBidWdzLCBxdWV1ZSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHF1ZXVlIHN0YXJ2YXRpb24gaXNzdWVzIGluIHRoZSBOVEIgbmV0ZGV2IGRyaXZlci4gSXQgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIG1vdmVzIGEgZnJhbWUgc2l6ZSBjaGVjayB0byBhbiBlYXJsaWVyIHN5bmNocm9ub3VzIHN0YWdlIChgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCksIGFuZCBjaGFuZ2VzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gYWRkIHRoZSBlbnRyeSBiYWNrIHRvIHRoZSBmcmVlIHF1ZXVlIGJlZm9yZSBpbnZva2luZyB0aGUgdHJhbnNtaXNzaW9uIGhhbmRsZXIuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjZmNTVlZjU2Yjc5YTI5ZTc1ZjgxMWJiYTlhMDdkZmJiYzZhMTVlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA1OjUzOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jCmluZGV4IDAyOWE0YTUzMmExMDQuLjAyYjM1Y2Y1M2E2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L250Yl9uZXRkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMKQEAgLTE5OSw4ICYjNDM7MTk5LDEwIEBAIHN0YXRpYyBpbnQgX19udGJfbmV0ZGV2X21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIHN0YXRpYyBpbnQgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJCSAgICBzdHJ1Y3QgbnRiX25ldGRldl9xdWV1ZSAqcSwgaW50IHNpemUpCiB7Ci0JaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChuZGV2LCBxLSZndDtxaWQpIHx8Ci0JICAgIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS0mZ3Q7cXApICZndDs9IHNpemUpKQomIzQzOwlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5kZXYsIHEtJmd0O3FpZCkpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAobnRiX3RyYW5zcG9ydF90eF9mcmVlX2VudHJ5KHEtJmd0O3FwKSAmZ3Q7PSBzaXplKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBfX250Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCBzaXplKTsKQEAgLTI1NiwyMSAmIzQzOzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAKIAlxID0gJmFtcDtkZXYtJmd0O3F1ZXVlc1txaWRdOwogCi0JbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApOwomIzQzOwlpZiAodW5saWtlbHkobnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApKSkKJiM0MzsJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCXJjID0gbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHEtJmd0O3FwLCBza2IsIHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtsZW4pOwotCWlmIChyYykKLQkJZ290byBlcnI7CiYjNDM7CWlmIChyYykgewomIzQzOwkJaWYgKHJjID09IC1FQUdBSU4gfHwgcmMgPT0gLUVCVVNZKSB7CiYjNDM7CQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZGV2LCBxLSZndDtxaWQpOwomIzQzOwkJCW1vZF90aW1lcigmYW1wO3EtJmd0O3R4X3RpbWVyLAomIzQzOwkJCQkgIGppZmZpZXMgJiM0MzsgdXNlY3NfdG9famlmZmllcyh0eF90aW1lKSk7CiYjNDM7CQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZ290byBkcm9wOwomIzQzOwl9CiAKIAkvKiBjaGVjayBmb3IgbmV4dCBzdWJtaXQgKi8KIAludGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCi1lcnI6CiYjNDM7ZHJvcDoKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAluZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKLQluZGV2LSZndDtzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7OwotCXJldHVybiBORVRERVZfVFhfQlVTWTsKJiM0MzsJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgbnRiX25ldGRldl90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYwppbmRleCBmNTlmOTI2ZDRiZmFhLi5mOWNhYTFhNjUzYzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jCkBAIC0xNzE5LDkgJiM0MzsxNzE5LDE2IEBAIHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsCiAJCQkJIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpCiB7CiYjNDM7CXN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIgX19pb21lbSAqaGRyOwogCXN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5ID0gZGF0YTsKLQlzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAgPSBlbnRyeS0mZ3Q7cXA7Ci0Jc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHIgPSBlbnRyeS0mZ3Q7dHhfaGRyOwomIzQzOwlzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXA7CiYjNDM7CXVuc2lnbmVkIGludCBsZW47CiYjNDM7CXZvaWQgKmNiX2RhdGE7CiYjNDM7CiYjNDM7CXFwID0gZW50cnktJmd0O3FwOwomIzQzOwloZHIgPSBlbnRyeS0mZ3Q7dHhfaGRyOwomIzQzOwljYl9kYXRhID0gZW50cnktJmd0O2NiX2RhdGE7CiYjNDM7CWxlbiA9IGVudHJ5LSZndDtsZW47CiAKIAkvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEgKi8KIAlpZiAocmVzKSB7CkBAIC0xNzY4LDE1ICYjNDM7MTc3NSwxMyBAQCBzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLAogCSAqICYjMzQ7bGluayBkb3duJiMzNDsgb3Igc2ltaWxhci4gIFNpbmNlIG5vIHBheWxvYWQgaXMgYmVpbmcgc2VudCBpbiB0aGVzZQogCSAqIGNhc2VzLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZCB0byB0aGUgY29tcGxldGlvbiBxdWV1ZS4KIAkgKi8KLQlpZiAoZW50cnktJmd0O2xlbiAmZ3Q7IDApIHsKLQkJcXAtJmd0O3R4X2J5dGVzICYjNDM7PSBlbnRyeS0mZ3Q7bGVuOwotCi0JCWlmIChxcC0mZ3Q7dHhfaGFuZGxlcikKLQkJCXFwLSZndDt0eF9oYW5kbGVyKHFwLCBxcC0mZ3Q7Y2JfZGF0YSwgZW50cnktJmd0O2NiX2RhdGEsCi0JCQkJICAgICAgIGVudHJ5LSZndDtsZW4pOwotCX0KJiM0MzsJaWYgKGxlbiAmZ3Q7IDApCiYjNDM7CQlxcC0mZ3Q7dHhfYnl0ZXMgJiM0Mzs9IGxlbjsKIAogCW50Yl9saXN0X2FkZCgmYW1wO3FwLSZndDtudGJfdHhfZnJlZV9xX2xvY2ssICZhbXA7ZW50cnktJmd0O2VudHJ5LCAmYW1wO3FwLSZndDt0eF9mcmVlX3EpOwomIzQzOwomIzQzOwlpZiAobGVuICZndDsgMCAmYW1wOyZhbXA7IHFwLSZndDt0eF9oYW5kbGVyKQomIzQzOwkJcXAtJmd0O3R4X2hhbmRsZXIocXAsIHFwLSZndDtjYl9kYXRhLCBjYl9kYXRhLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldCkKQEAgLTE5NTAsMTUgJiM0MzsxOTU1LDYgQEAgc3RhdGljIGludCBudGJfcHJvY2Vzc190eChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsCiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChlbnRyeS0mZ3Q7bGVuICZndDsgcXAtJmd0O3R4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkgewotCQlpZiAocXAtJmd0O3R4X2hhbmRsZXIpCi0JCQlxcC0mZ3Q7dHhfaGFuZGxlcihxcCwgcXAtJmd0O2NiX2RhdGEsIE5VTEwsIC1FSU8pOwotCi0JCW50Yl9saXN0X2FkZCgmYW1wO3FwLSZndDtudGJfdHhfZnJlZV9xX2xvY2ssICZhbXA7ZW50cnktJmd0O2VudHJ5LAotCQkJICAgICAmYW1wO3FwLSZndDt0eF9mcmVlX3EpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAludGJfYXN5bmNfdHgocXAsIGVudHJ5KTsKIAogCXFwLSZndDt0eF9wa3RzJiM0MzsmIzQzOzsKQEAgLTIzNDgsOSAmIzQzOzIzNDQsMTEgQEAgaW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLAogCWlmICghcXAgfHwgIWxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBJZiB0aGUgcXAgbGluayBpcyBkb3duIGFscmVhZHksIGp1c3QgaWdub3JlLiAqLwogCWlmICghcXAtJmd0O2xpbmtfaXNfdXApCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIC1FTk9MSU5LOwomIzQzOwomIzQzOwlpZiAobGVuICZndDsgcXAtJmd0O3R4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiAKIAllbnRyeSA9IG50Yl9saXN0X3JtKCZhbXA7cXAtJmd0O250Yl90eF9mcmVlX3FfbG9jaywgJmFtcDtxcC0mZ3Q7dHhfZnJlZV9xKTsKIAlpZiAoIWVudHJ5KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE1CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDE4OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEFkZHJlc3NpbmcgUXVldWUgTWFuYWdlbWVudCBhbmQgUG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIGluIE5UQiBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgdGhlIE5UQiBuZXR3b3JrIGRldmljZSBhbmQgdHJhbnNwb3J0IGRyaXZlcnMuIExldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgc3lzdGVtYXRpY2FsbHkuIEl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIGFpbWVkIGF0IHJlZmluaW5nIHF1ZXVlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBoYW5kbGluZyBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gcGFja2V0IGVucXVldWVpbmcsIHRyYW5zbWlzc2lvbiwgYW5kIGNvbXBsZXRpb24uIFRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBmb2N1c2VkIG9uIHRoZSBjaGFuZ2VzIGFjcm9zcyBgbnRiX25ldGRldi5jYCBhbmQgYG50Yl90cmFuc3BvcnQuY2AuCgpGaXJzdCwgaW4gYG50Yl9uZXRkZXYuY2AsIHRoZSByZXZpc2VkIGxvZ2ljIHdpdGhpbiBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCBzZWVtcyB0byB0aWdodGVuIHVwIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgdHJhbnNtaXNzaW9uIHF1ZXVlIGlzIGhhbHRlZC4gQmVmb3JlLCB0aGVyZSB3YXMgYSBkb3VibGUgY2hlY2sgb2YgdGhlIHN1YnF1ZXVlIHN0YXRlLCBhbmQgYXZhaWxhYmxlIHF1ZXVlIGVudHJpZXMsIG5vdyBpdCBvbmx5IGNoZWNrcyB0aGUgc3VicXVldWUgc3RhdGUsIGFuZCByZXR1cm5zIGlmIHN0b3BwZWQuIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIG5vdyBhY2NvdW50cyBmb3IgdGhlIHJldHVybiBvZiBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCwgYW5kIGFwcHJvcHJpYXRlbHkgaGFuZGxlcyBidXN5IGNvbmRpdGlvbnMuIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIG5vdyBhY2NvdW50cyBmb3IgYSBidXN5IHJldHVybi4KClRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgaW4gYG50Yl90cmFuc3BvcnQuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCBhbmQgYG50Yl9wcm9jZXNzX3R4YC4gRXhhbWluaW5nIGBudGJfdHhfY29weV9jYWxsYmFja2AsIEkgemVyb2VkIGluIG9uIHRoZSByZW9yZGVyaW5nIG9mIHRoZSBvcGVyYXRpb25zIGludm9sdmluZyB0aGUgYG50Yl9saXN0X2FkZGAgYW5kIHRoZSBjYWxsIHRvIGBxcC0mZ3Q7dHhfaGFuZGxlcmAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGUgcG90ZW50aWFsIGZvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgaGFuZGxlciBtaWdodCBmcmVlIG9yIGFjY2VzcyBkYXRhIHdpdGhpbiB0aGUgZW50cnksIGFmdGVyIHdoaWNoIHRoZSBsaXN0IGFkZGl0aW9uIG9jY3Vycy4gSG93ZXZlciwgdGhpcyBwYXRjaCBjb3JyZWN0bHkgcGxhY2VzIGBudGJfbGlzdF9hZGRgICpiZWZvcmUqIHRoZSBoYW5kbGVyIGNhbGwuIFdoeT8gVGhlIGB0eF9oYW5kbGVyYCBpcyBtZWFudCB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHF1ZXVlIGVudHJ5IGlzIHJlYWR5IGZvciByZS11c2UuIFRoaXMgZml4ZXMgdGhlIG9yaWdpbmFsIGJ1Zy4gSXQmIzM5O3MgYSBjbGFzc2ljYWwgcXVldWVpbmcvbG9naWMgZXJyb3IuCgpBZGRpdGlvbmFsbHksIGBudGJfcHJvY2Vzc190eGAgaGFkIGEgY2hlY2sgb24gdGhlIHBhY2tldCYjMzk7cyBsZW5ndGggY29tcGFyZWQgdG8gYHFwLSZndDt0eF9tYXhfZnJhbWVgIGFuZCBjYWxscyBhIGB0eF9oYW5kbGVyYCB3aXRoIGAtRUlPYCBpZiBpdCBmYWlscywgd2hpY2ggbWF5IGNhdXNlIGl0IHRvIGRyb3AgcGFja2V0cy4gVGhlIHBhdGNoIG1vdmVzIHRoaXMgY2hlY2sgZGlyZWN0bHkgaW50byBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCwgYW5kIHRoZSByZXR1cm4gdmFsdWVzIGFyZSBoYW5kbGVkIGF0IHRoZSBgbnRiX25ldGRldl9zdGFydF94bWl0YCBsZXZlbC4KCk5vdywgYXMgYW4gZXhwZXJ0LCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBpc24mIzM5O3QgYWJvdXQgS01TQU4gKGtlcm5lbCBtZW1vcnkgc2FuaXRpemVyKSBvciB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBwcm9wZXIgcXVldWUgbWFuYWdlbWVudCwgYXZvaWRpbmcgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIHByZXZlbnRpbmcgcGFja2V0IGRyb3BzIGR1ZSB0byBpbXByb3BlciBsZW5ndGggY2hlY2tpbmcuCgpJIHdpbGwgZG91YmxlLWNoZWNrIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ29pbmcgdG8gdXNlciBzcGFjZSBvciBoYXJkd2FyZS4gSG93ZXZlciwgSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgbW9zdGx5IGludm9sdmUgdGhlIHBhY2tldCBsZW5ndGggY2hlY2sgbW92aW5nIGZyb20gYSBsYXRlciBwcm9jZXNzaW5nIHN0YWdlIHRvIGVhcmx5IGVucXVldWVpbmcsIHdoaWNoIGp1c3QgcmVmaW5lcyBlcnJvciBoYW5kbGluZy4gQWRkaXRpb25hbGx5LCB0aGUgcmVvcmRlcmluZyBvZiB0aGUgYG50Yl9saXN0X2FkZGAgY2FsbCBhbmQgdGhlIGB0eF9oYW5kbGVyYCBjYWxsIHdpdGhpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGNsZWFybHkgYWRkcmVzc2VzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQvb3IgcXVldWVpbmcgbG9naWMgYnVncy4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgdGFyZ2V0ZWQgYXQgYWRkcmVzc2luZyBxdWV1ZSBtYW5hZ2VtZW50IGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2l0aGluIHRoZSBOVEIgZHJpdmVyLiBTbyBJJiMzOTtsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvZ2ljIGJ1Z3MsIHF1ZXVlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcXVldWUgc3RhcnZhdGlvbiBpc3N1ZXMgaW4gdGhlIE5UQiBuZXRkZXYgZHJpdmVyLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgbW92ZXMgYSBmcmFtZSBzaXplIGNoZWNrIHRvIGFuIGVhcmxpZXIgc3luY2hyb25vdXMgc3RhZ2UgKGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgKSwgYW5kIGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBhZGQgdGhlIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgcXVldWUgYmVmb3JlIGludm9raW5nIHRoZSB0cmFuc21pc3Npb24gaGFuZGxlci4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvZ2ljIGJ1Z3MsIHF1ZXVlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcXVldWUgc3RhcnZhdGlvbiBpc3N1ZXMgaW4gdGhlIE5UQiBuZXRkZXYgZHJpdmVyLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgbW92ZXMgYSBmcmFtZSBzaXplIGNoZWNrIHRvIGFuIGVhcmxpZXIgc3luY2hyb25vdXMgc3RhZ2UgKGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgKSwgYW5kIGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBhZGQgdGhlIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgcXVldWUgYmVmb3JlIGludm9raW5nIHRoZSB0cmFuc21pc3Npb24gaGFuZGxlci4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1MzoyOC44Mzc0MTc3NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUwNDc1MDExMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRCXCIsXG4gICAgXCJOVEJfVFJBTlNQT1JUXCIsXG4gICAgXCJOVEJfTkVUREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRiX25ldGRldl9zdGFydF94bWl0XCIsXG4gICAgXCJudGJfdHJhbnNwb3J0X3R4X2VucXVldWVcIixcbiAgICBcIm50Yl90eF9jb3B5X2NhbGxiYWNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbG9naWMgYnVncywgcXVldWUgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBxdWV1ZSBzdGFydmF0aW9uIGlzc3VlcyBpbiB0aGUgTlRCIG5ldGRldiBkcml2ZXIuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCBtb3ZlcyBhIGZyYW1lIHNpemUgY2hlY2sgdG8gYW4gZWFybGllciBzeW5jaHJvbm91cyBzdGFnZSAoYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWApLCBhbmQgY2hhbmdlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGFkZCB0aGUgZW50cnkgYmFjayB0byB0aGUgZnJlZSBxdWV1ZSBiZWZvcmUgaW52b2tpbmcgdGhlIHRyYW5zbWlzc2lvbiBoYW5kbGVyLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5UQiAoTm9uLVRyYW5zcGFyZW50IEJyaWRnZSkgbmV0ZGV2IGRyaXZlciBhbmQgdHJhbnNwb3J0IGxheWVyIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgdHJhbnNtaXQgcGF0aC4gSXQgY2hhbmdlcyBob3cgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaGFuZGxlcyBxdWV1ZSBzdG9wcyBhbmQgZXJyb3JzLCBhbmQgbW9kaWZpZXMgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgdG8gY2hlY2sgZm9yIGxpbmsgc3RhdHVzIGFuZCBmcmFtZSBzaXplIGxpbWl0cy4gSXQgYWxzbyB1cGRhdGVzIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gY29ycmVjdGx5IGhhbmRsZSBETUEgY29weSByZXN1bHRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGhzIG92ZXIgTlRCLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1MzoyOC44Mzc0MzYzODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzI1MTc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI2ZjU1ZWY1NmI3OWEyOWU3NWY4MTFiYmE5YTA3ZGZiYmM2YTE1ZTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDU6NTM6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXFxuaW5kZXggMDI5YTRhNTMyYTEwNC4uMDJiMzVjZjUzYTYyMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcXG4rKysgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcXG5AQCAtMTk5LDggKzE5OSwxMCBAQCBzdGF0aWMgaW50IF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIHN0YXRpYyBpbnQgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IG50Yl9uZXRkZXZfcXVldWUgKnEsIGludCBzaXplKVxcbiB7XFxuLVxcdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cXHUwMDNlcWlkKSB8fFxcbi1cXHQgICAgKG50Yl90cmFuc3BvcnRfdHhfZnJlZV9lbnRyeShxLVxcdTAwM2VxcCkgXFx1MDAzZT0gc2l6ZSkpXFxuK1xcdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cXHUwMDNlcWlkKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdGlmIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS1cXHUwMDNlcXApIFxcdTAwM2U9IHNpemUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cmV0dXJuIF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHNpemUpO1xcbkBAIC0yNTYsMjEgKzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRxID0gXFx1MDAyNmRldi1cXHUwMDNlcXVldWVzW3FpZF07XFxuIFxcbi1cXHRudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7XFxuK1xcdGlmICh1bmxpa2VseShudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCkpKVxcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuIFxcbiBcXHRyYyA9IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShxLVxcdTAwM2VxcCwgc2tiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4tXFx0aWYgKHJjKVxcbi1cXHRcXHRnb3RvIGVycjtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGlmIChyYyA9PSAtRUFHQUlOIHx8IHJjID09IC1FQlVTWSkge1xcbitcXHRcXHRcXHRuZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHEtXFx1MDAzZXFpZCk7XFxuK1xcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2cS1cXHUwMDNldHhfdGltZXIsXFxuK1xcdFxcdFxcdFxcdCAgamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXModHhfdGltZSkpO1xcbitcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGdvdG8gZHJvcDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogY2hlY2sgZm9yIG5leHQgc3VibWl0ICovXFxuIFxcdG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCB0eF9zdG9wKTtcXG4gXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcbi1lcnI6XFxuK2Ryb3A6XFxuK1xcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdG5kZXYtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4tXFx0bmRldi1cXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XFxuLVxcdHJldHVybiBORVRERVZfVFhfQlVTWTtcXG4rXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbnRiX25ldGRldl90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jIGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jXFxuaW5kZXggZjU5ZjkyNmQ0YmZhYS4uZjljYWExYTY1M2M1YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNcXG4rKysgYi9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNcXG5AQCAtMTcxOSw5ICsxNzE5LDE2IEBAIHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4gc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpXFxuIHtcXG4rXFx0c3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHI7XFxuIFxcdHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5ID0gZGF0YTtcXG4tXFx0c3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwID0gZW50cnktXFx1MDAzZXFwO1xcbi1cXHRzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyIF9faW9tZW0gKmhkciA9IGVudHJ5LVxcdTAwM2V0eF9oZHI7XFxuK1xcdHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcDtcXG4rXFx0dW5zaWduZWQgaW50IGxlbjtcXG4rXFx0dm9pZCAqY2JfZGF0YTtcXG4rXFxuK1xcdHFwID0gZW50cnktXFx1MDAzZXFwO1xcbitcXHRoZHIgPSBlbnRyeS1cXHUwMDNldHhfaGRyO1xcbitcXHRjYl9kYXRhID0gZW50cnktXFx1MDAzZWNiX2RhdGE7XFxuK1xcdGxlbiA9IGVudHJ5LVxcdTAwM2VsZW47XFxuIFxcbiBcXHQvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEgKi9cXG4gXFx0aWYgKHJlcykge1xcbkBAIC0xNzY4LDE1ICsxNzc1LDEzIEBAIHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsXFxuIFxcdCAqIFxcXCJsaW5rIGRvd25cXFwiIG9yIHNpbWlsYXIuICBTaW5jZSBubyBwYXlsb2FkIGlzIGJlaW5nIHNlbnQgaW4gdGhlc2VcXG4gXFx0ICogY2FzZXMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gYWRkIHRvIHRoZSBjb21wbGV0aW9uIHF1ZXVlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW4gXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHFwLVxcdTAwM2V0eF9ieXRlcyArPSBlbnRyeS1cXHUwMDNlbGVuO1xcbi1cXG4tXFx0XFx0aWYgKHFwLVxcdTAwM2V0eF9oYW5kbGVyKVxcbi1cXHRcXHRcXHRxcC1cXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXFx1MDAzZWNiX2RhdGEsIGVudHJ5LVxcdTAwM2VjYl9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZW50cnktXFx1MDAzZWxlbik7XFxuLVxcdH1cXG4rXFx0aWYgKGxlbiBcXHUwMDNlIDApXFxuK1xcdFxcdHFwLVxcdTAwM2V0eF9ieXRlcyArPSBsZW47XFxuIFxcbiBcXHRudGJfbGlzdF9hZGQoXFx1MDAyNnFwLVxcdTAwM2VudGJfdHhfZnJlZV9xX2xvY2ssIFxcdTAwMjZlbnRyeS1cXHUwMDNlZW50cnksIFxcdTAwMjZxcC1cXHUwMDNldHhfZnJlZV9xKTtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHFwLVxcdTAwM2V0eF9oYW5kbGVyKVxcbitcXHRcXHRxcC1cXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXFx1MDAzZWNiX2RhdGEsIGNiX2RhdGEsIGxlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG50Yl9tZW1jcHlfdHhfb25fc3RhY2soc3RydWN0IG50Yl9xdWV1ZV9lbnRyeSAqZW50cnksIHZvaWQgX19pb21lbSAqb2Zmc2V0KVxcbkBAIC0xOTUwLDE1ICsxOTU1LDYgQEAgc3RhdGljIGludCBudGJfcHJvY2Vzc190eChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZW50cnktXFx1MDAzZWxlbiBcXHUwMDNlIHFwLVxcdTAwM2V0eF9tYXhfZnJhbWUgLSBzaXplb2Yoc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlcikpIHtcXG4tXFx0XFx0aWYgKHFwLVxcdTAwM2V0eF9oYW5kbGVyKVxcbi1cXHRcXHRcXHRxcC1cXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXFx1MDAzZWNiX2RhdGEsIE5VTEwsIC1FSU8pO1xcbi1cXG4tXFx0XFx0bnRiX2xpc3RfYWRkKFxcdTAwMjZxcC1cXHUwMDNlbnRiX3R4X2ZyZWVfcV9sb2NrLCBcXHUwMDI2ZW50cnktXFx1MDAzZWVudHJ5LFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZxcC1cXHUwMDNldHhfZnJlZV9xKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuIFxcdG50Yl9hc3luY190eChxcCwgZW50cnkpO1xcbiBcXG4gXFx0cXAtXFx1MDAzZXR4X3BrdHMrKztcXG5AQCAtMjM0OCw5ICsyMzQ0LDExIEBAIGludCBudGJfdHJhbnNwb3J0X3R4X2VucXVldWUoc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwLCB2b2lkICpjYiwgdm9pZCAqZGF0YSxcXG4gXFx0aWYgKCFxcCB8fCAhbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdC8qIElmIHRoZSBxcCBsaW5rIGlzIGRvd24gYWxyZWFkeSwganVzdCBpZ25vcmUuICovXFxuIFxcdGlmICghcXAtXFx1MDAzZWxpbmtfaXNfdXApXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gLUVOT0xJTks7XFxuK1xcbitcXHRpZiAobGVuIFxcdTAwM2UgcXAtXFx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gXFxuIFxcdGVudHJ5ID0gbnRiX2xpc3Rfcm0oXFx1MDAyNnFwLVxcdTAwM2VudGJfdHhfZnJlZV9xX2xvY2ssIFxcdTAwMjZxcC1cXHUwMDNldHhfZnJlZV9xKTtcXG4gXFx0aWYgKCFlbnRyeSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1MzoyOS4yNDU0OTA0ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODQ5NTE1NjI4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRCXCIsXG4gICAgXCJOVEJfVFJBTlNQT1JUXCIsXG4gICAgXCJOVEJfTkVUREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRiX25ldGRldl9zdGFydF94bWl0XCIsXG4gICAgXCJudGJfdHJhbnNwb3J0X3R4X2VucXVldWVcIixcbiAgICBcIm50Yl90eF9jb3B5X2NhbGxiYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5UQiAoTm9uLVRyYW5zcGFyZW50IEJyaWRnZSkgbmV0ZGV2IGRyaXZlciBhbmQgdHJhbnNwb3J0IGxheWVyIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgdHJhbnNtaXQgcGF0aC4gSXQgY2hhbmdlcyBob3cgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaGFuZGxlcyBxdWV1ZSBzdG9wcyBhbmQgZXJyb3JzLCBhbmQgbW9kaWZpZXMgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgdG8gY2hlY2sgZm9yIGxpbmsgc3RhdHVzIGFuZCBmcmFtZSBzaXplIGxpbWl0cy4gSXQgYWxzbyB1cGRhdGVzIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gY29ycmVjdGx5IGhhbmRsZSBETUEgY29weSByZXN1bHRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGhzIG92ZXIgTlRCLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNmY1NWVmNTZiNzlhMjllNzVmODExYmJhOWEwN2RmYmJjNmExNWU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDU6NTM6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcbmluZGV4IDAyOWE0YTUzMmExMDQuLjAyYjM1Y2Y1M2E2MjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L250Yl9uZXRkZXYuY1xuQEAgLTE5OSw4ICsxOTksMTAgQEAgc3RhdGljIGludCBfX250Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIHN0YXRpYyBpbnQgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBudGJfbmV0ZGV2X3F1ZXVlICpxLCBpbnQgc2l6ZSlcbiB7XG4tXHRpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5kZXYsIHEtXHUwMDNlcWlkKSB8fFxuLVx0ICAgIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS1cdTAwM2VxcCkgXHUwMDNlPSBzaXplKSlcbitcdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cdTAwM2VxaWQpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0aWYgKG50Yl90cmFuc3BvcnRfdHhfZnJlZV9lbnRyeShxLVx1MDAzZXFwKSBcdTAwM2U9IHNpemUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0dXJuIF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHNpemUpO1xuQEAgLTI1NiwyMSArMjU4LDMwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBudGJfbmV0ZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHEgPSBcdTAwMjZkZXYtXHUwMDNlcXVldWVzW3FpZF07XG4gXG4tXHRudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7XG4rXHRpZiAodW5saWtlbHkobnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApKSlcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuIFxuIFx0cmMgPSBudGJfdHJhbnNwb3J0X3R4X2VucXVldWUocS1cdTAwM2VxcCwgc2tiLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyO1xuK1x0aWYgKHJjKSB7XG4rXHRcdGlmIChyYyA9PSAtRUFHQUlOIHx8IHJjID09IC1FQlVTWSkge1xuK1x0XHRcdG5ldGlmX3N0b3Bfc3VicXVldWUobmRldiwgcS1cdTAwM2VxaWQpO1xuK1x0XHRcdG1vZF90aW1lcihcdTAwMjZxLVx1MDAzZXR4X3RpbWVyLFxuK1x0XHRcdFx0ICBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyh0eF90aW1lKSk7XG4rXHRcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuK1x0XHR9XG4rXG4rXHRcdGdvdG8gZHJvcDtcbitcdH1cbiBcbiBcdC8qIGNoZWNrIGZvciBuZXh0IHN1Ym1pdCAqL1xuIFx0bnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbi1lcnI6XG4rZHJvcDpcbitcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbi1cdG5kZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG4tXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4rXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBudGJfbmV0ZGV2X3R4X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuaW5kZXggZjU5ZjkyNmQ0YmZhYS4uZjljYWExYTY1M2M1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuKysrIGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jXG5AQCAtMTcxOSw5ICsxNzE5LDE2IEBAIHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSlcbiBzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpXG4ge1xuK1x0c3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHI7XG4gXHRzdHJ1Y3QgbnRiX3F1ZXVlX2VudHJ5ICplbnRyeSA9IGRhdGE7XG4tXHRzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAgPSBlbnRyeS1cdTAwM2VxcDtcbi1cdHN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIgX19pb21lbSAqaGRyID0gZW50cnktXHUwMDNldHhfaGRyO1xuK1x0c3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwO1xuK1x0dW5zaWduZWQgaW50IGxlbjtcbitcdHZvaWQgKmNiX2RhdGE7XG4rXG4rXHRxcCA9IGVudHJ5LVx1MDAzZXFwO1xuK1x0aGRyID0gZW50cnktXHUwMDNldHhfaGRyO1xuK1x0Y2JfZGF0YSA9IGVudHJ5LVx1MDAzZWNiX2RhdGE7XG4rXHRsZW4gPSBlbnRyeS1cdTAwM2VsZW47XG4gXG4gXHQvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEgKi9cbiBcdGlmIChyZXMpIHtcbkBAIC0xNzY4LDE1ICsxNzc1LDEzIEBAIHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsXG4gXHQgKiBcImxpbmsgZG93blwiIG9yIHNpbWlsYXIuICBTaW5jZSBubyBwYXlsb2FkIGlzIGJlaW5nIHNlbnQgaW4gdGhlc2VcbiBcdCAqIGNhc2VzLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZCB0byB0aGUgY29tcGxldGlvbiBxdWV1ZS5cbiBcdCAqL1xuLVx0aWYgKGVudHJ5LVx1MDAzZWxlbiBcdTAwM2UgMCkge1xuLVx0XHRxcC1cdTAwM2V0eF9ieXRlcyArPSBlbnRyeS1cdTAwM2VsZW47XG4tXG4tXHRcdGlmIChxcC1cdTAwM2V0eF9oYW5kbGVyKVxuLVx0XHRcdHFwLVx1MDAzZXR4X2hhbmRsZXIocXAsIHFwLVx1MDAzZWNiX2RhdGEsIGVudHJ5LVx1MDAzZWNiX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgZW50cnktXHUwMDNlbGVuKTtcbi1cdH1cbitcdGlmIChsZW4gXHUwMDNlIDApXG4rXHRcdHFwLVx1MDAzZXR4X2J5dGVzICs9IGxlbjtcbiBcbiBcdG50Yl9saXN0X2FkZChcdTAwMjZxcC1cdTAwM2VudGJfdHhfZnJlZV9xX2xvY2ssIFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZxcC1cdTAwM2V0eF9mcmVlX3EpO1xuK1xuK1x0aWYgKGxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcXAtXHUwMDNldHhfaGFuZGxlcilcbitcdFx0cXAtXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXHUwMDNlY2JfZGF0YSwgY2JfZGF0YSwgbGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbnRiX21lbWNweV90eF9vbl9zdGFjayhzdHJ1Y3QgbnRiX3F1ZXVlX2VudHJ5ICplbnRyeSwgdm9pZCBfX2lvbWVtICpvZmZzZXQpXG5AQCAtMTk1MCwxNSArMTk1NSw2IEBAIHN0YXRpYyBpbnQgbnRiX3Byb2Nlc3NfdHgoc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwLFxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkge1xuLVx0XHRpZiAocXAtXHUwMDNldHhfaGFuZGxlcilcbi1cdFx0XHRxcC1cdTAwM2V0eF9oYW5kbGVyKHFwLCBxcC1cdTAwM2VjYl9kYXRhLCBOVUxMLCAtRUlPKTtcbi1cbi1cdFx0bnRiX2xpc3RfYWRkKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2ZW50cnktXHUwMDNlZW50cnksXG4tXHRcdFx0ICAgICBcdTAwMjZxcC1cdTAwM2V0eF9mcmVlX3EpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbiBcdG50Yl9hc3luY190eChxcCwgZW50cnkpO1xuIFxuIFx0cXAtXHUwMDNldHhfcGt0cysrO1xuQEAgLTIzNDgsOSArMjM0NCwxMSBAQCBpbnQgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsXG4gXHRpZiAoIXFwIHx8ICFsZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0LyogSWYgdGhlIHFwIGxpbmsgaXMgZG93biBhbHJlYWR5LCBqdXN0IGlnbm9yZS4gKi9cbiBcdGlmICghcXAtXHUwMDNlbGlua19pc191cClcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiAtRU5PTElOSztcbitcbitcdGlmIChsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcbiBcdGVudHJ5ID0gbnRiX2xpc3Rfcm0oXHUwMDI2cXAtXHUwMDNlbnRiX3R4X2ZyZWVfcV9sb2NrLCBcdTAwMjZxcC1cdTAwM2V0eF9mcmVlX3EpO1xuIFx0aWYgKCFlbnRyeSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTM6MjkuMjQ1NDkyMDg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIzODY0OTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIE5lZWQgZm9yIEZ1enppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxhbmRlZCwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIGRvZXMgaXQgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmc/IFdlIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9uZXQvbnRiX25ldGRldi5jYCBhbmQgYGRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY2AuIFJpZ2h0LCBOVEIsIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2UuIEl0IGRlYWxzIHdpdGggdGhlIE5UQiBuZXRkZXYgZHJpdmVyIGFuZCB0aGUgTlRCIHRyYW5zcG9ydCwgYm90aCByZWxhdGVkIHRvIGEgUENJZSBmZWF0dXJlLlxuXG5Ob3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHJpbmdpbmcgc29tZSBiZWxscy4gVGhleSBtZW50aW9uIG5lZWRpbmcgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBmb3IgY2VydGFpbiBkcml2ZXJzLiBXZSdyZSB0YWxraW5nIGFib3V0IFBDSWUgaGVyZSwgYW5kIE5UQiAqaXMqIGEgUENJZSBzdWJzeXN0ZW0uIEhtbSwgaXMgTlRCIGVtdWxhdGVkIGluIFFFTVU/IEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJ3MgYSBRRU1VIE5UQiBkZXZpY2Ugb3IgaWYgd2UgY2FuIHRlc3QgaXQgYXQgYWxsLiBJdCBtaWdodCBub3QgYmUgdGVzdGFibGUgYW5kIHRoZW4gdGhlcmUgaXMgbm90IG11Y2ggcG9pbnQuXG5cbkFoLCB3YWl0IGEgc2Vjb25kLCBOVEIgaXMgYSBzdWJzeXN0ZW0sIHNvIGl0IGlzIGxpa2VseSB0byBoYXZlIGl0cyBvd24gaW50ZXJuYWwgdGVzdGluZyBmcmFtZXdvcmsuIExldCdzIHNlZSBpZiB0aGVyZSdzIHNvbWV0aGluZyBpbiBgZHJpdmVycy9udGIvdGVzdC9gLiBMZXQncyBhbHNvIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hlcmUgZWxzZSBOVEIgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGZ1enogdGhpcyBlZmZlY3RpdmVseSwgb3IgaWYgaXQncyBnb2luZyB0byBiZSBhIGhhcmR3YXJlLWdhdGVkIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTE4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTM6MzQuNDg0MTQ1MDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mjg4Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udGIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnRiL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL250Yi9LY29uZmlnOjI6bWVudWNvbmZpZyBOVEJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL0tjb25maWc9MTQ9aWYgTlRCXFxuZHJpdmVycy9udGIvS2NvbmZpZy0xNS1cXG5kcml2ZXJzL250Yi9LY29uZmlnOjE2OmNvbmZpZyBOVEJfTVNJXFxuZHJpdmVycy9udGIvS2NvbmZpZy0xNy1cXHRib29sIFxcXCJNU0kgSW50ZXJydXB0IFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi9LY29uZmlnPTI5PXNvdXJjZSBcXFwiZHJpdmVycy9udGIvdGVzdC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbnRiL0tjb25maWctMzAtXFxuZHJpdmVycy9udGIvS2NvbmZpZzozMTpjb25maWcgTlRCX1RSQU5TUE9SVFxcbmRyaXZlcnMvbnRiL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk5UQiBUcmFuc3BvcnQgQ2xpZW50XFxcIlxcbi0tXFxuZHJpdmVycy9udGIvaHcvYW1kL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL250Yi9ody9hbWQvS2NvbmZpZzoyOmNvbmZpZyBOVEJfQU1EXFxuZHJpdmVycy9udGIvaHcvYW1kL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQU1EIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnOjE6Y29uZmlnIE5UQl9FUEZcXG5kcml2ZXJzL250Yi9ody9lcGYvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEVQRiBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi9ody9pZHQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnRiL2h3L2lkdC9LY29uZmlnOjI6Y29uZmlnIE5UQl9JRFRcXG5kcml2ZXJzL250Yi9ody9pZHQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJRFQgUENJZS1zd2l0Y2ggTm9uLVRyYW5zcGFyZW50IEJyaWRnZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udGIvaHcvaW50ZWwvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnRiL2h3L2ludGVsL0tjb25maWc6Mjpjb25maWcgTlRCX0lOVEVMXFxuZHJpdmVycy9udGIvaHcvaW50ZWwvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi9ody9tc2NjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL250Yi9ody9tc2NjL0tjb25maWc6Mjpjb25maWcgTlRCX1NXSVRDSFRFQ1xcbmRyaXZlcnMvbnRiL2h3L21zY2MvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNaWNyb1NlbWkgU3dpdGNodGVjIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoyOmNvbmZpZyBOVEJfUElOR1BPTkdcXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRCIFBpbmcgUG9uZyBUZXN0IENsaWVudFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0xMC1cXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MTE6Y29uZmlnIE5UQl9UT09MXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTEyLVxcdHRyaXN0YXRlIFxcXCJOVEIgRGVidWdnaW5nIFRvb2wgVGVzdCBDbGllbnRcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjEtXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnOjIyOmNvbmZpZyBOVEJfUEVSRlxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiTlRCIFJBVyBQZXJmIE1lYXN1cmluZyBUb29sXFxcIlxcbi0tXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTI5LVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzozMDpjb25maWcgTlRCX01TSV9URVNUXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTMxLVxcdHRyaXN0YXRlIFxcXCJOVEIgTVNJIFRlc3QgQ2xpZW50XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1MzozNC41MzA0MzY2OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ0ODIyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5UQiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSBoYXZlIGEgdmlydHVhbCBOVEIgZGV2aWNlIGF2YWlsYWJsZSBmb3IgdGVzdGluZy4gSG1tbSwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbnl0aGluZyByZWxhdGVkIHRvIE5UQj8gQSBxdWljayBzZWFyY2jigKZ3YWl0LCB0aGVyZSdzIGEgXCJzeXotY2x1c3RlclwiIHRhZyEgT2theSwgZG9lcyB0aGF0IG1lYW4gc3l6a2FsbGVyIHRlc3RzIE5UQj8gTGV0J3Mga2VlcCBkaWdnaW5nLiBJIHNlZSBhIGRpcmVjdG9yeSBjYWxsZWQgYGRyaXZlcnMvbnRiL2h3L2VwZi9gLCBidXQgaG9sZCBvbuKApmRvZXNuJ3Qgc3l6a2FsbGVyIGhhdmUgdGhhdCBgc3l6X250YmAgcHNldWRvLXN5c2NhbGw/IE5vLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBJIGhhdmUsIEknbSBsb29raW5nIGF0IGRyaXZlcnMgdGhhdCAqbmVlZCogcmVhbCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRob3NlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBvciBhbWRncHUgd2hpY2ggYXJlbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbkFscmlnaHQsIGJhY2sgdG8gdGhlIGVtdWxhdGlvbiBxdWVzdGlvbi4gSXMgTlRCIGFjdHVhbGx5IGVtdWxhdGVkIGluIFFFTVU/IEkgd2FzIHRoaW5raW5nIGFib3V0IGBpdnNobWVtYCBvciBzb21ldGhpbmcgc2ltaWxhci4uLiBub3BlLiBIbW0sIEkgc2VlIGBody9taXNjL3NnYS5jYCwgdGhhdCdzIG5vdCBpdCwgYW5kIGBody9wY2ktYnJpZGdlL2RlYy5jYCwgc3RpbGwgbm8uIERvZXMgUUVNVSBldmVuICpoYXZlKiBhbiBOVEIgZGV2aWNlPyBXYWl0IGEgbWludXRlLi4uIGBudGJfbmV0ZGV2YCEgVGhhdCdzIGEgbmV0d29yayBkZXZpY2UgZHJpdmVyICpvdmVyKiBOVEIuIEJpbmdvISBUaGF0J3Mgb3VyIHZpcnR1YWwgaW50ZXJmYWNlLiBOb3csIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoYXQncyBkZWZpbmVkLiBMZXQncyBzZWFyY2ggZm9yIGBudGJfbmV0ZGV2YCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCBmaW5kIG91dCB3aGF0IHRoYXQncyBhbGwgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTM6NDEuNTc1MjYxMzE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjE1NDEyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRCX05FVERFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zNzA9Y29uZmlnIE5FVF9QT0xMX0NPTlRST0xMRVJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzcyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzczOmNvbmZpZyBOVEJfTkVUREVWXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo0MS43MTc0MjE3NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTIzODcwNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYE5UQl9ORVRERVZgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTlRCX05FVERFVmAuIEknbGwgc3RhcnQgYnkgdHJhY2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgY29kZWJhc2Ug4oCTIHByb2JhYmx5IGEgYG1ha2UgbWVudWNvbmZpZ2Agb3IgYSBzaW1pbGFyIHRvb2wgdG8gc2VlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlbGF0aW9uc2hpcHMuIEknbSBleHBlY3Rpbmcgc29tZSBzdGFuZGFyZCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGRlcGVuZGVuY2llcywgcG9zc2libHkgc29tZSBQQ0ktcmVsYXRlZCBjb21wb25lbnRzLCBhbmQgbGlrZWx5IHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgaWYgaXQncyB0aWVkIHRvIGEgcGFydGljdWxhciBOZXR3b3JrIFRyYW5zcG9ydCBCcmlkZ2UgKE5UQikgaW1wbGVtZW50YXRpb24uIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGdlbmVyaWMgTlRCIG5ldGRldiBkcml2ZXIsIG9yIHNvbWV0aGluZyB2ZXJ5IHRhcmdldGVkLiBLbm93aW5nIHRoZSBhcmNoaXRlY3R1cmUsIEknbGwgaGF2ZSBhIGJldHRlciBpZGVhIG9mIHdoYXQgdG8gZXhwZWN0LiBUaGlzIGRlcGVuZGVuY3kgaW52ZXN0aWdhdGlvbiBpcyBjcnVjaWFsIGJlZm9yZSBJIG1ha2UgYW55IG1vZGlmaWNhdGlvbnMsIHRyb3VibGVzaG9vdCBpc3N1ZXMsIG9yIGV2YWx1YXRlIGludGVncmF0aW9uIHdpdGggb3RoZXIgbmV0d29yayBmdW5jdGlvbmFsaXRpZXMgaW4gdGhlIHN5c3RlbS4gSSdsbCBiZSBsb29raW5nIGZvciBib3RoIGRpcmVjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSBpbmRpcmVjdCBvbmVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo0NS4yNDEyOTU3NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NTg3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5UQl9ORVRERVZ8ZGVwZW5kcyBvbi4qTlRCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zNzA9Y29uZmlnIE5FVF9QT0xMX0NPTlRST0xMRVJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzcyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzczOmNvbmZpZyBOVEJfTkVUREVWXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc1OlxcdGRlcGVuZHMgb24gTlRCX1RSQU5TUE9SVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo0NS4yODgyNTczNDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcwMjQ0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgTlRCIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyBOVEIuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgU3l6a2FsbGVyIGlzIHJlbGV2YW50IGhlcmUg4oCTIGl0J3MgZGVmaW5pdGVseSBjYXBhYmxlIG9mIGZ1enppbmcgTlRCLCBpc24ndCBpdD8gRG9lcyBpdCBoYXZlIGEgc3lzY2FsbCBsaWtlIGBzeXpfbnRiYD8gSG1tLCBtYXliZSBub3QgZXhwbGljaXRseSwgYnV0IFN5emthbGxlciBpcyBhIHBvd2VyZnVsIHRvb2wuIEl0IG1pZ2h0IGJlIGdvaW5nIHRocm91Z2ggYSBkaWZmZXJlbnQgcm91dGUsIHV0aWxpemluZyBzb21ldGhpbmcgbGlrZSBgdmttc2AsIGB2Z2VtYCwgYGR1bW15YCwgYG1hYzgwMjExX2h3c2ltYCwgb3IgZXZlbiBsZXZlcmFnaW5nIGBudGJfbmV0ZGV2YCBpbiBzb21lIGluZGlyZWN0IG1hbm5lci4gVGhhdOKAmXMgYSBwb3NzaWJpbGl0eS4gTm93LCBob3cgdGhlIGhlY2sgZG9lcyBTeXprYWxsZXIgKnRlc3QqIGBudGJfbmV0ZGV2YCwgc3BlY2lmaWNhbGx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBBbmQgd2FpdCBhIHNlY29uZCwgaXMgdGhlcmUgZXZlbiBhIGR1bW15IE5UQiBkcml2ZXIgYXZhaWxhYmxlPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb2J2aW91cyBwbGFjZSBmaXJzdCDigJMgbGV0J3MgcG9rZSBhcm91bmQgaW4gYGRyaXZlcnMvbnRiL2h3L2AuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgbXkgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo0OS4yNTg1MDQzMjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbnRiL2h3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IG51bGwsXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJhbWRcIixcbiAgICBcImVwZlwiLFxuICAgIFwiaWR0XCIsXG4gICAgXCJpbnRlbFwiLFxuICAgIFwibXNjY1wiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjUzOjQ5LjI1ODU1NDA4N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyNzUxNzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZm9yIGEgUGxhY2Vob2xkZXIgTlRCIERyaXZlcioqXG5cbkhtbSwgaXMgdGhlcmUgYSBiYXNpYyBvciBcImR1bW15XCIgTlRCIGRyaXZlciBhdmFpbGFibGU/IEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHNvbWUgYmFzaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYmVmb3JlIHdyaXRpbmcgYW55dGhpbmcgdG9vIHNwZWNpZmljLCBzbyBpdCBjb3VsZCBzYXZlIGEgbG90IG9mIHRpbWUgdG8gc3RhcnQgd2l0aCBzb21lIGV4aXN0aW5nIHNjYWZmb2xkaW5nLiBPa2F5LCBsZXQncyBzZWUuLi4gYSBsaWtlbHkgcGxhY2Ugd291bGQgYmUgd2l0aGluIHRoZSBOVEIgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSwgc28gSSdsbCBjaGVjayBpbiB0aGUgYGRyaXZlcnMvbnRiL2h3L2VwZi9gIGRpcmVjdG9yeS4gTWF5YmUgdGhlcmUncyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvciBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiB0dWNrZWQgYXdheSBpbiB0aGVyZS4gR29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo1OS42ODYwNzM1MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODgyODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEJfRVBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL2h3L2VwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWc6MTpjb25maWcgTlRCX0VQRlxcbmRyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgRVBGIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTM6NTkuNzQ2OTU5NTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1MTg0OTU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIGBudGJfbmV0ZGV2YCBUZXN0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHN5emthbGxlciBjYW4gdGVzdCB0aGlzIGBudGJfbmV0ZGV2YCB0aGluZy4gRmlyc3QgdGhvdWdodCBpcywgKm1heWJlKiB0aGVyZSdzIGEgdmlydHVhbCBkcml2ZXIgZm9yIGl0LCBhbmQgdGhlbiBpdCdzIHRlc3RhYmxlLCBvciBtYXliZSBpdCdzIGNvbXBsZXRlbHkgb3V0IG9mIHRoZSBxdWVzdGlvbi4gSSBzaG91bGQgY2hlY2sgaWYgYG50Yl9uZXRkZXZgIGl0c2VsZiBpcyBldmVuIGEgY2FuZGlkYXRlIGZvciB0ZXN0aW5nLlxuXG5UaGUgcG90ZW50aWFsIHdyaW5rbGUgaXMgdGhhdCBpdCdzIGEgUENJZSBkZXZpY2UsIGFuZCBRRU1VJ3MgUENJZSBlbXVsYXRpb24gY2FuIGJlIHNwb3R0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgUUVNVSBlbXVsYXRlcyBOVEIgYXQgYWxsLiBSaWdodCwgc28gSSdsbCBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgXCJudGJcIiBvciBqdXN0IHNlZSBpZiB0aGVyZSdzIGFueSBtZW50aW9uIG9mIGl0IGJlaW5nIHRlc3RhYmxlLlxuXG5IYW5nIG9uLCB0aGUgaW5zdHJ1Y3Rpb25zIGhhZCBzb21ldGhpbmcsIGxldCBtZSBsb29rLi4uIEFoLCBoZXJlIGl0IGlzOiBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuLi5cIiBidXQgd2FpdCwgYG50Yl9uZXRkZXZgIGlzbid0IG9uZSBvZiB0aG9zZSEgSXQncyBzdXBwb3NlZCB0byBiZSBhICp2aXJ0dWFsIGV0aGVybmV0IG92ZXIgTlRCKiDigJMgYSBnZW5lcmljIHN1YnN5c3RlbSBkcml2ZXIuIFNvIHRoYXQgKnNob3VsZCogbWVhbiBpdCdzIGRpZmZlcmVudC5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgKmlzKiBOVEIgdGVzdGFibGUgaW4gUUVNVSwgaW4gZ2VuZXJhbD8gTGV0J3Mgc2VlLi4uIEkgc2VlIGBkcml2ZXJzL250Yi9ody9lcGYvbnRiX2h3X2VwZi5jYCwgc28gRVBGIGlzIEVuZHBvaW50IEZyYW1ld29yay4gQWxzbywgYG50Yl9uZXRkZXYuY2AgYW5kIGBudGJfdHJhbnNwb3J0LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBzeXprYWxsZXIgY2FuIHJlYWNoIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgLlxuXG5JZiBpdCdzIG5vdCBjbGVhciwgaXQncyBzYWZlciB0byBhc3N1bWUgYSBnZW5lcmljIHN1YnN5c3RlbSBpcyB0ZXN0YWJsZSB1bmxlc3MgaXQgKnNwZWNpZmljYWxseSogcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblJpZ2h0LCBzbyB3aGF0IGFib3V0IFFFTVU/IEkga25vdyBpdCBoYXMgc3R1ZmYgbGlrZSBgaHcvcGNpLWJyaWRnZS94aW8zMTMwX2Rvd25zdHJlYW0uY2AsIGV0Yy4gRG9lcyBpdCBoYXZlIGFuICphY3R1YWwqIE5UQiBkZXZpY2U/IEhtbW0sIHdhaXQsIG5vLCBgbnRiX25ldGRldmAgaXMgYSAqbmV0d29yayogZGV2aWNlIVxuXG5Pa2F5LCBsZXQncyBnbyBiYWNrIHRvIGJhc2ljcywgYXJlIHRoZXJlIGFueSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBOVEI/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6MDcuODk4ODExMjk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ2NjAzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuYz0yMzUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgrMV0gPSB7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzYxLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNjMtXFx0W05EVFBBX0lGSU5ERVhdXFx0XFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MjM4MT1zdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTI0MzctXFx0XFx0XFx0XFx0XFx0XFx0ICB0YltORFRBX1BBUk1TXSxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyNDM4OlxcdFxcdFxcdFxcdFxcdFxcdCAgbmxfbnRibF9wYXJtX3BvbGljeSwgZXh0YWNrKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNDM5LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDM9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY1NC1cXHRib29sIGJ5X21lID0gZmFsc2U7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2NTU6XFx0aW50IG50Ymw7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02NTYtXFx0aW50IGRpcjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjY5LVxcdGhuID0gZGlyID8gXFx1MDAyNmNwLVxcdTAwM2VobjEgOiBcXHUwMDI2Y3AtXFx1MDAzZWhuMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY3MDpcXHRudGJsID0gMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY3MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjgwLVxcdFxcdHQgPSByY3VfZGVyZWZlcmVuY2UodC1cXHUwMDNlbmV3X3RibCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2ODE6XFx0XFx0bnRibCsrO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjgyLVxcdFxcdC8qIFdlIGFyZSBsb3N0PyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjgzOlxcdFxcdGlmIChudGJsIFxcdTAwM2U9IDIpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjQ4MD1ubDgwMjExX3NlbmRfcG1zcl9mdG1fY2FwYShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfcG1zcl9jYXBhYmlsaXRpZXMgKmNhcCxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU0Ni1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI1NDc6XFx0aWYgKGNhcC1cXHUwMDNlZnRtLmlzdGEuc3VwcG9ydF9udGIgfHwgY2FwLVxcdTAwM2VmdG0uaXN0YS5zdXBwb3J0X3RiIHx8XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTQ4LVxcdCAgICBjYXAtXFx1MDAzZWZ0bS5pc3RhLnN1cHBvcnRfZWRjYSkge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTU0LVxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI1NTU6XFx0XFx0aWYgKGNhcC1cXHUwMDNlZnRtLmlzdGEuc3VwcG9ydF9udGIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI1NTYtXFx0XFx0ICAgIG5sYV9wdXRfZmxhZyhtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX1NVUFBPUlRfTlRCKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU3MC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI1NzE6XFx0aWYgKGNhcC1cXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9udGIgfHwgY2FwLVxcdTAwM2VmdG0ucnN0YS5zdXBwb3J0X3RiIHx8XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTcyLVxcdCAgICBjYXAtXFx1MDAzZWZ0bS5yc3RhLnN1cHBvcnRfZWRjYSkge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTg2LVxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI1ODc6XFx0XFx0aWYgKGNhcC1cXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9udGIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI1ODgtXFx0XFx0ICAgIG5sYV9wdXRfZmxhZyhtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX1NVUFBPUlRfTlRCKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjYxNy1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI2MTg6XFx0aWYgKGNhcC1cXHUwMDNlZnRtLm1pbl9hbGxvd2VkX3JhbmdpbmdfaW50ZXJ2YWxfbnRiIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNjE5LVxcdCAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX01JTl9JTlRFUlZBTF9OVEIsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyNjIwOlxcdFxcdFxcdGNhcC1cXHUwMDNlZnRtLm1pbl9hbGxvd2VkX3JhbmdpbmdfaW50ZXJ2YWxfbnRiKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI2MjEtXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjI0NT1zdGF0aWMgaW50IG5sODAyMTFfc2VuZF9ic3Moc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjI0OC1cXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMjQ5OlxcdFxcdFxcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppbnRic3MpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjI1MC17XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjI1MTpcXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpyZXMgPSBcXHUwMDI2aW50YnNzLVxcdTAwM2VwdWI7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjI1Mi1cXHRjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfYnNzX2llcyAqaWVzO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyMC1cXHQgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0JTU19TRUVOX01TX0FHTyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzIxOlxcdFxcdFxcdGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGludGJzcy1cXHUwMDNldHMpKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzIyLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMjMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMyNDpcXHRpZiAoaW50YnNzLVxcdTAwM2VwYXJlbnRfdHNmIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyNS1cXHQgICAgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgTkw4MDIxMV9CU1NfUEFSRU5UX1RTRixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzI2OlxcdFxcdFxcdCAgICAgICBpbnRic3MtXFx1MDAzZXBhcmVudF90c2YsIE5MODAyMTFfQlNTX1BBRCkgfHxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzI3LVxcdCAgICAgbmxhX3B1dChtc2csIE5MODAyMTFfQlNTX1BBUkVOVF9CU1NJRCwgRVRIX0FMRU4sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMyODpcXHRcXHQgICAgIGludGJzcy1cXHUwMDNlcGFyZW50X2Jzc2lkKSkpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyOS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMzUtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMzNjpcXHRpZiAoIW5sODAyMTFfcHV0X3NpZ25hbChtc2csIGludGJzcy1cXHUwMDNlcHViLmNoYWlucyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzM3OlxcdFxcdFxcdFxcdGludGJzcy1cXHUwMDNlcHViLmNoYWluX3NpZ25hbCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzM4LVxcdFxcdFxcdFxcdE5MODAyMTFfQlNTX0NIQUlOX1NJR05BTCkpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzQwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzNDE6XFx0aWYgKGludGJzcy1cXHUwMDNlYnNzX3NvdXJjZSAhPSBCU1NfU09VUkNFX1NUQV9QUk9GSUxFKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM0Mi1cXHRcXHRzd2l0Y2ggKHJkZXYtXFx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzYxLVxcdFxcdGZvcl9lYWNoX3ZhbGlkX2xpbmsod2RldiwgbGlua19pZCkge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzNjI6XFx0XFx0XFx0aWYgKGludGJzcyA9PSB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5jbGllbnQuY3VycmVudF9ic3MgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzYzLVxcdFxcdFxcdCAgICAobmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0JTU19TVEFUVVMsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzczLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjM3NDpcXHRcXHRpZiAoaW50YnNzID09IHdkZXYtXFx1MDAzZXUuaWJzcy5jdXJyZW50X2JzcyBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzNzUtXFx0XFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9CU1NfU1RBVFVTLFxcbi0tXFxubmV0L3dpcmVsZXNzL3Btc3IuYz0xMD1zdGF0aWMgaW50IHBtc3JfcGFyc2VfZnRtKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9wbXNyLmMtMjI1LVxcdGlmIChvdXQtXFx1MDAzZWZ0bS5yc3RhIFxcdTAwMjZcXHUwMDI2IG91dC1cXHUwMDNlZnRtLm5vbl90cmlnZ2VyX2Jhc2VkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL3Btc3IuYzoyMjY6XFx0ICAgICFjYXBhLVxcdTAwM2VmdG0ucnN0YS5zdXBwb3J0X250Yikge1xcbm5ldC93aXJlbGVzcy9wbXNyLmMtMjI3LVxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz04NDQ9c3RhdGljIGludCBjZmc4MDIxMV9zY2FuXzZnaHooc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy04NjktXFx0aWYgKHJkZXZfcmVxLVxcdTAwM2VyZXEuZmxhZ3MgXFx1MDAyNiBOTDgwMjExX1NDQU5fRkxBR19DT0xPQ0FURURfNkdIWikge1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6ODcwOlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmludGJzcztcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg3MS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg3Mi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJkZXYtXFx1MDAzZWJzc19sb2NrKTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjg3MzpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGJzcywgXFx1MDAyNnJkZXYtXFx1MDAzZWJzc19saXN0LCBsaXN0KSB7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzo4NzQ6XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2JzcyAqcmVzID0gXFx1MDAyNmludGJzcy1cXHUwMDNlcHViO1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtODc1LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9ic3NfaWVzICppZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjA3Ljk2ODI4Mjc0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMwMDg4MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTeXprYWxsZXItRm91bmQgTlRCIEJ1ZyoqXG5cbk9rYXksIHNvIGBudGJfbmV0ZGV2YCBpcyBhIG5ldHdvcmsgZHJpdmVyLCBjb25maXJtZWQuIFRoZSBjb21taXQgbWVzc2FnZSBwb2ludHMgdG8gYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGF0J3Mgc2lnbmlmaWNhbnQ7IHN5emthbGxlcidzIGZpbmRpbmcgaW1wbGllcyB0aGUgY29kZSBpcyByZWFjaGFibGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBob3cgZG9lcyBzeXprYWxsZXIgZXZlbiB0ZXN0IHRoaXMgcGFydGljdWxhciBkcml2ZXI/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSB1bmRlcmx5aW5nIHRlc3Qgc2V0dXAuIExldCBtZSBjaGVjayB0aGUgb2J2aW91cyBsb2NhdGlvbnM6IGBkcml2ZXJzL250Yi90ZXN0L2AsIGBkcml2ZXJzL250Yi9ody9lcGYvYCwgbWF5YmUgZXZlbiBhIG5ldGxpbmsgaW50ZXJmYWNlIGluc3RhbnRpYXRpb24uXG5cblRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGZvdW5kIHNvbWV0aGluZyBtZWFucyB0aGVyZSdzIGEgcGF0aCB0aHJvdWdoIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBhdGguIFRoZSBwYXRjaCBtb2RpZmllcyBgbnRiX25ldGRldi5jYCBhbmQgYG50Yl90cmFuc3BvcnQuY2AsIHNvIEkgc2hvdWxkIGZvY3VzIG9uIHRob3NlLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0IGFwcGVhcnMgd2UgaGF2ZSBmdW5jdGlvbmFsIGNoYW5nZXMuIEluIGBudGJfbmV0ZGV2LmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAsIGFuZCBgbnRiX25ldGRldl9zdGFydF94bWl0YCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgdGhlIHJlc3VsdCBvZiBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YC4gSW4gYG50Yl90cmFuc3BvcnQuY2AsIHRoZXJlJ3MgYSBuZXcgY2hlY2sgZm9yIGBsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKWAgYW5kIHJldHVybnMgYC1FTk9MSU5LYCBpZiBgcXAtXHUwMDNlbGlua19pc191cGAgaXMgZmFsc2UuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXJzLlxuXG5HaXZlbiBzeXprYWxsZXIncyBzdWNjZXNzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlci4gSG93IGRvZXMgc3l6a2FsbGVyIGdldCBgbnRiX25ldGRldmAgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZz8gRG9lcyBpdCB1c2UgYSBkdW1teSBOVEIgZHJpdmVyIHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZT8gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvbnRiL2h3L2ludGVsL250Yl9od19nZW4xLmNgIGZvciBhbnkgY2x1ZXMsIG9yIHBlcmhhcHMgYGRyaXZlcnMvbnRiL3Rlc3QvbnRiX3Bpbmdwb25nLmNgLiBJdCdzIGxpa2VseSBzeXprYWxsZXIgdXRpbGl6ZXMgYSBzaW1wbGlmaWVkIG9yIHZpcnR1YWwgTlRCIGVudmlyb25tZW50LiBTbyBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHRlc3Qgb3IgZHVtbXkgZHJpdmVycyBpbiB0aGUgYGRyaXZlcnMvbnRiL3Rlc3QvYCBvciBgZHJpdmVycy9udGIvaHcvYCBkaXJlY3Rvcmllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjE5LjI2OTE2NzY3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3ODU4MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6MTkuMzI0OTYxMzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjkxMjU2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydHVhbCBOVEIgRHJpdmVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gcG90ZW50aWFsIHZpcnR1YWwgZHJpdmVycyByZWxhdGVkIHRvIE5ldHdvcmstQXR0YWNoZWQgQnJpZGdlIChOVEIpIGZ1bmN0aW9uYWxpdHkuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL250Yi9ody9gIGRpcmVjdG9yeSBmaXJzdC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSwgd2hpY2ggdmlydHVhbCBkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9mdGVuIG1pbWljIG9yIGFic3RyYWN0LCBpcyBsb2NhdGVkLiBJJ20gdGhpbmtpbmcsIGJ5IGV4YW1pbmluZyB0aGUgZmlsZXMgdGhlcmUsIEkgbWlnaHQgYmUgYWJsZSB0byBzcG90IHBhdHRlcm5zIG9yIHRlY2huaXF1ZXMgY29tbW9ubHkgdXNlZCBpbiB2aXJ0dWFsaXphdGlvbiBvZiB0aGUgTlRCIGhhcmR3YXJlLiBJJ20gZXhwZWN0aW5nIHRvIHBvdGVudGlhbGx5IGZpbmQgdGhlIGtleSBzb3VyY2Ugb3IgYSBwb2ludGVyIHRvIGl0IHRoYXQgZGVtb25zdHJhdGVzIGhvdyB0aGV5IGFyZSBoYW5kbGVkLCBvciBhdCBsZWFzdCBwcm92aWRlcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBpbnZvbHZlZCBpbiB2aXJ0dWFsaXppbmcgdGhlIE5UQi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NDoyMy4xNTQwODkwMzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbnRiL2h3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IG51bGwsXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJhbWRcIixcbiAgICBcImVwZlwiLFxuICAgIFwiaWR0XCIsXG4gICAgXCJpbnRlbFwiLFxuICAgIFwibXNjY1wiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjIzLjE1NDE0MTA0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDgzNzY4MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gYGVwZmAgaXMgRW5kcG9pbnQgRnJhbWV3b3JrLCBhbmQgSSdtIHByZXR0eSBzdXJlIHRoYXQgY2FuIGJlIGxldmVyYWdlZCB3aXRoIGBwY2ktZXBmLXRlc3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCBjb3VsZCBldmVuIGJlIHZpcnR1YWwuIEFuZCBoZXksIHRoZXJlJ3MgYWxzbyBgbnRiX25ldGRldmAsIHdoaWNoIGlzIGEgbmV0ZGV2IGRyaXZlci4gSWYgSSBjYW4gcmVhY2ggaXQsIHRoZW4gaXQncyBhIGRlZmluaXRlIGNhbmRpZGF0ZSwgc28gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIHNlZW0gdG8gYmU6XG4qICAgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGBcbiogICBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYFxuKiAgIGBudGJfdHhfY29weV9jYWxsYmFja2BcbiogICBBbmQgbWF5YmUgYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAsIGFsdGhvdWdoIHRoYXQgb25lJ3Mgc3RhdGljLCBzbyBpdCdzIHByb2JhYmx5IG5vdCBhcyBpbnRlcmVzdGluZy5cblxuTGV0J3MgY2hlY2sgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgYW5kIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgLiBXYWl0LCB0aGUgYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAgb25lIGlzIHN0YXRpYywgc28gSSBzaG91bGQgcHJvYmFibHkgc2tpcCB0aGF0LiBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpcyBleHBvcnRlZCwgdGhvdWdoLCBzbyBpdCdzIGEgZ29vZCB0YXJnZXQuIExldCdzIGRpZyBpbnRvIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGluIGBkcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6MjkuMjM3OTEwOTQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY3ODE5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MjMyMz1FWFBPUlRfU1lNQk9MX0dQTChudGJfdHJhbnNwb3J0X3J4X2VucXVldWUpO1xcbi0tXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMjUtLyoqXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jOjIzMjY6ICogbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlIC0gRW5xdWV1ZSBhIG5ldyBOVEIgcXVldWUgZW50cnlcXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMjMyNy0gKiBAcXA6IE5UQiB0cmFuc3BvcnQgbGF5ZXIgcXVldWUgdGhlIGVudHJ5IGlzIHRvIGJlIGVucXVldWVkIG9uXFxuLS1cXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMjMzNy0gKi9cXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM6MjMzODppbnQgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMzktXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzNzItfVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoyMzczOkVYUE9SVF9TWU1CT0xfR1BMKG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZSk7XFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzNzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjI5LjU0NDcwMDM3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzkxOTc2MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVEIgTmV0d29yayBEZXZpY2UgVHJhbnNtaXQgUGF0aCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE5UQiBuZXR3b3JrIGRldmljZSB0cmFuc21pdCBwYXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGluIGBkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNgLiBJIGV4cGVjdCB0aGlzIGlzIHRoZSBrZXkgZnVuY3Rpb24gd2hlcmUgdGhlIHBhY2tldCB0cmFuc21pc3Npb24gaXMgaW5pdGlhdGVkLCBzbyBpdOKAmXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgTmV0RGV2aWNlIGxheWVyIGRvd24gdG8gdGhlIE5UQiBoYXJkd2FyZSBpbnRlcmZhY2UuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIE5UQiBjb3JlIHdpbGwgYmUgY3J1Y2lhbCwgcGFydGljdWxhcmx5IGhvdyBETUEgaXMgY29uZmlndXJlZCBhbmQgdXNlZCB0byBnZXQgcGFja2V0cyBhY3Jvc3MgdGhlIGxpbmsuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIG1hbmFnZW1lbnQgYXMgd2VsbCwgZ2l2ZW4gdGhhdCBpdCdzIGEgc2hhcmVkIHJlc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjM0LjkzNjY3OTI5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMTQxMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRiX25ldGRldl9zdGFydF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L250Yl9uZXRkZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnRiX3F1ZXVlX2hhbmRsZXJzIG50Yl9uZXRkZXZfaGFuZGxlcnMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMtMjUwLVxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYzoyNTE6c3RhdGljIG5ldGRldl90eF90IG50Yl9uZXRkZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYy0yNTItXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbnRiX25ldGRldi5jPTQzMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG50Yl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbnRiX25ldGRldi5jLTQzNS1cXHQubmRvX3N0b3AgPSBudGJfbmV0ZGV2X2Nsb3NlLFxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYzo0MzY6XFx0Lm5kb19zdGFydF94bWl0ID0gbnRiX25ldGRldl9zdGFydF94bWl0LFxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYy00MzctXFx0Lm5kb19jaGFuZ2VfbXR1ID0gbnRiX25ldGRldl9jaGFuZ2VfbXR1LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NDozNC45ODU5OTg1MTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwMzAzNzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgYG50Yl9uZXRkZXZgIFRYIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbnRiX25ldGRldl9zdGFydF94bWl0YC4gSXQncyBhIGBuZXRkZXZgIG9wZXJhdGlvbiwgYW5kIHRlY2huaWNhbGx5IHN0YXRpYywgYnV0IGl0J3MgYW4gQVBJIGVudHJ5IHBvaW50LCBzcGVjaWZpY2FsbHkgYG5kb19zdGFydF94bWl0YC4gVGhlIGluc3RydWN0aW9ucyBJJ3ZlIGJlZW4gZm9sbG93aW5nIGFkdm9jYXRlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBtZSBxdWVzdGlvbiB3aGV0aGVyIHRvIGZhdm9yIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGluc3RlYWQgb2YgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAuIEhvd2V2ZXIsIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGluIGBudGJfbmV0ZGV2LmNgLiBJdCAqaXMqIGEgY2FsbGJhY2ssIGFuIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBtYXR0ZXJzIGZvciBob3cgd2UncmUgYnVpbGRpbmcgdGhlIGFic3RyYWN0aW9uIGhlcmUuIFNvIGl0J3MgZmluZSB0byBrZWVwIGl0LiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBudGJfdHhfY29weV9jYWxsYmFja2AgaW4gYG50Yl90cmFuc3BvcnQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjQwLjI4OTAzODQ2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1ODU4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRiX3R4X2NvcHlfY2FsbGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYz0xNjgwPXN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0xNzE4LVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoxNzE5OnN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE3MjAtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpXFxuLS1cXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MTc4Nz1zdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldClcXG4tLVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0xODAyLVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoxODAzOlxcdG50Yl90eF9jb3B5X2NhbGxiYWNrKGVudHJ5LCBOVUxMKTtcXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMTgwNC19XFxuLS1cXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MTg1ND1zdGF0aWMgaW50IG50Yl9hc3luY190eF9zdWJtaXQoc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwLFxcbi0tXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE4OTEtXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jOjE4OTI6XFx0dHhkLVxcdTAwM2VjYWxsYmFja19yZXN1bHQgPSBudGJfdHhfY29weV9jYWxsYmFjaztcXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMTg5My1cXHR0eGQtXFx1MDAzZWNhbGxiYWNrX3BhcmFtID0gZW50cnk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjQwLjMzNDYyNzQ2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIwNzMwOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBLY29uZmlnIG9wdGlvbnM6XG5cbioqQ2hlY2tpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIE5UQiBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhY3R1YWxseSBidWlsZGluZyB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IG15IEtjb25maWcgZHVja3MgaW4gYSByb3cuIEl0J3MgdGltZSB0byB2ZXJpZnkgdGhlIHByZXJlcXVpc2l0ZXMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYE5UQl9ORVRERVZgIGFuZCBgTlRCX1RSQU5TUE9SVGAgYXJlIHByb3Blcmx5IGVuYWJsZWQgYW5kIHNldCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoZXNlIGFyZSB0aGUgZnVuZGFtZW50YWwgZmxhZ3MgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgdGhlIE5UQiBuZXR3b3JrIGRldmljZSBzdXBwb3J0IGFuZCB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIuIEkgY2FuJ3QgZXZlbiAqdGhpbmsqIGFib3V0IGNvbXBpbGluZyB0aGlzIGNvZGUgaWYgdGhvc2UgZXNzZW50aWFsIGJ1aWxkaW5nIGJsb2NrcyBhcmUgbWlzc2luZyBvciBtaXNjb25maWd1cmVkLiBTbywgbGV0J3MgaGVhZCB0byB0aGUgS2NvbmZpZyBhbmQgZW5zdXJlIHRob3NlIG9wdGlvbnMgYXJlIHNldCBhcyByZXF1aXJlZC4gSXQncyBhIHF1aWNrIGJ1dCBlc3NlbnRpYWwgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NDo0My4zNTUzNjE0NzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQzNTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEJfVFJBTlNQT1JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udGIvS2NvbmZpZz0yOT1zb3VyY2UgXFxcImRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbnRiL0tjb25maWc6MzE6Y29uZmlnIE5UQl9UUkFOU1BPUlRcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJOVEIgVHJhbnNwb3J0IENsaWVudFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6NDMuNDAzNDA5OTI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjMzMTg3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIG9mIGBOVEJfVFJBTlNQT1JUYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IGFzc2VzcyB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgTlRCX1RSQU5TUE9SVGAuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIG1vZHVsZSAqcmVsaWVzKiBvbiBhbmQsIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBpdCAqZG9lc24ndCogZGVwZW5kIG9uLCBidXQgd2hpY2ggd2UgbWF5IGhhdmUgYXNzdW1lZCBpdCBkaWQuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIGRlcGVuZGVuY3kgZ3JhcGggaW4gbXkgbWluZCwgb3IgYmV0dGVyIHlldCwgYSB2aXN1YWxpemF0aW9uIGlmIG9uZSBkb2Vzbid0IGV4aXN0LiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IG1lYW5pbmdmdWwgaW1wYWN0LlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIOKAkyB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlcywgdGhlIHNlY29uZC1vcmRlciByZWxhdGlvbnNoaXBzIHRoYXQgb2Z0ZW4gYml0ZSB5b3UgbGF0ZXIuIEkgbmVlZCB0byBrbm93IG5vdCBqdXN0IHRoZSBkaXJlY3QgdXBzdHJlYW0gbW9kdWxlcywgYnV0IGFsc28gdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgdGhlaXJzLCBhbmQgc28gb24uIEFueSB1bmV4cGVjdGVkIGNvbm5lY3Rpb24gY291bGQgcG90ZW50aWFsbHkgbWFuaWZlc3QgaW4gc3VidGxlIGJ1Z3MsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBjb21wYXRpYmlsaXR5IGlzc3VlcyBkb3duIHRoZSByb2FkLlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgKm5hdHVyZSogb2YgdGhlc2UgZGVwZW5kZW5jaWVzLiBBcmUgdGhleSBoYXJkLCBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhleSBtb3JlIGZsZXhpYmxlLCBwZXJoYXBzIHJ1bnRpbWUgbGlua3Mgb3IgaW50ZXJmYWNlcz8gVGhlIHR5cGUgb2YgZGVwZW5kZW5jeSB3aWxsIGdyZWF0bHkgaW5mbHVlbmNlIGhvdyBjaGFuZ2VzIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uXG5cbkkgd2FudCB0byBrbm93IGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBsdXJraW5nLiBBIGNpcmN1bGFyIGRlcGVuZGVuY3kgd291bGQgYmUgYW4gYWJzb2x1dGUgbmlnaHRtYXJlIHdoZW4gdHJ5aW5nIHRvIHJlZmFjdG9yLiBJIGFtIHdvbmRlcmluZyBob3cgdGhpcyB0aWVzIGluIHdpdGggYW55IG5ldyB3b3JrIG9yIGZlYXR1cmVzIHdlIGFyZSB0cnlpbmcgdG8gaW5jb3Jwb3JhdGUuXG5cbkZpbmFsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgdG9vbHMgYXQgbXkgZGlzcG9zYWwuIERvIEkgaGF2ZSBhIHJlbGlhYmxlIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCB0aGF0IGNhbiBnZW5lcmF0ZSBhIGNvbXByZWhlbnNpdmUgcmVwb3J0PyBDYW4gSSB0cmFjZSB0aGUgY29ubmVjdGlvbnMgbWFudWFsbHkgaWYgdGhlIHRvb2xpbmcgaXMgaW5hZGVxdWF0ZT8gVGhlIHNwZWVkIGFuZCBhY2N1cmFjeSBvZiBteSBhbmFseXNpcyB3aWxsIGRlcGVuZCBvbiBob3cgZWZmaWNpZW50bHkgSSBjYW4gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjQ3LjE2NjczMTA4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMzQ5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5UQl9UUkFOU1BPUlR8ZGVwZW5kcyBvbi4qTlRCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udGIvS2NvbmZpZz0yOT1zb3VyY2UgXFxcImRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbnRiL0tjb25maWc6MzE6Y29uZmlnIE5UQl9UUkFOU1BPUlRcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJOVEIgVHJhbnNwb3J0IENsaWVudFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6NDcuMjE0MDY4ODI5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTA4MzMzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIGRlcGVuZGVuY3kgeW91J3ZlIGlkZW50aWZpZWQ6XG5cbioqRGVwZW5kZW5jeSBEZWR1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgb3Igc2V0dXAuLi4gYW5kIEknbSBzZWVpbmcgYE5UQl9UUkFOU1BPUlRgIGFuZCBhIGNvbmRpdGlvbmFsIGBpZiBOVEJgLiBJdCdzIGltbWVkaWF0ZWx5IGNsZWFyLiBgTlRCX1RSQU5TUE9SVGAncyB2ZXJ5IGV4aXN0ZW5jZSAqZGVwZW5kcyogb24gYE5UQmAgYmVpbmcgZGVmaW5lZC4gSXQncyBuZXN0ZWQgcmlnaHQgaW5zaWRlIHRoYXQgY29uZGl0aW9uYWwgYmxvY2ssIHNvIGlmIGBOVEJgIGlzbid0IHNldCwgYE5UQl9UUkFOU1BPUlRgIHNpbXBseSAqd29uJ3QqIGV4aXN0LiBJdCdzIGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeS4gVGhlcmUncyBubyB3YXkgYXJvdW5kIGl0LiBNeSBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbSBuZWVkcyB0byByZWZsZWN0IHRoaXMgaGFyZHdpcmVkIHJlbGF0aW9uc2hpcC4gSWYgSSdtIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmluZywgdGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNoZWNrLiBUaGlzIGlzIG5vdCBhIGNob2ljZSwgaXQncyBhIGJ1aWx0LWluIGNvbnN0cmFpbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6NTAuNDA0OTA1ODg0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM4NDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBOVEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udGIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL250Yi9LY29uZmlnPTI9bWVudWNvbmZpZyBOVEJcXG4tLVxcbmRyaXZlcnMvbnRiL0tjb25maWctMTMtXFxuZHJpdmVycy9udGIvS2NvbmZpZzoxNDppZiBOVEJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NDo1MC40NDkyOTQ2MDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1NTM2MDM4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgRGVwZW5kZW5jaWVzIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHN0YXJ0aW5nIGEgbmV3IGludGVncmF0aW9uIG9yIHByb2plY3QsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBzcXVhcmVseSBvbiB0aGUgbmVjZXNzYXJ5IGNvcmUgY29tcG9uZW50cy4gUmlnaHQgbm93LCBJJ20gdGhpbmtpbmcgd2UncmUgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGBOVEJgLCB0aGF0J3MgYSBnaXZlbi4gVGhlbiB0aGVyZSdzIGBOVEJfVFJBTlNQT1JUYCDigJMgb2J2aW91c2x5IGVzc2VudGlhbCBmb3IgZGF0YSBtb3ZlbWVudC4gQW5kIG9mIGNvdXJzZSwgd2UnbGwgbmVlZCBgTlRCX05FVERFVmAgdG8gZGVhbCB3aXRoIG5ldHdvcmsgZGV2aWNlIGFzcGVjdHMuXG5cbkJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVzdCBhc3N1bWUgdGhvc2UgYXJlIHRoZSAqb25seSogcGllY2VzIHdlJ2xsIG5lZWQuIE15IGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0aGF0IGRlcGVuZGVuY2llcyBjYW4gYmUgc25lYWt5LCBwb3BwaW5nIHVwIGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZG8gYSB0aG9yb3VnaCBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgdml0YWwgY29tcG9uZW50cyB0aGF0IHRoZXNlIHRocmVlIG1pZ2h0IHJlbHkgb24sIG9yIHRoYXQgdGhpcyBzZXR1cCBtaWdodCByZXF1aXJlLiBOZWVkIHRvIGRvdCBteSBpJ3MgYW5kIGNyb3NzIG15IHQncyBvbiB0aGlzLiBHb3R0YSBiZSBjb21wbGV0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NTo1NC4wMDI5MDE2N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg3ODk5MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBORVRERVZJQ0VTXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03LVxcdGRlZmF1bHQgeSBpZiBVTUxcXG5kcml2ZXJzL25ldC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTktXFx0Ym9vbCBcXFwiTmV0d29yayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDE9Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDpcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NzQ9Y29uZmlnIFdJUkVHVUFSRFxcbmRyaXZlcnMvbmV0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo3NjpcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03Ny1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9OTI9Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xcbmRyaXZlcnMvbmV0L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gV0lSRUdVQVJEXFxuZHJpdmVycy9uZXQvS2NvbmZpZy05NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTEwMz1jb25maWcgT1ZQTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTA1OlxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNi1cXHRzZWxlY3QgRFNUX0NBQ0hFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTEzNj1jb25maWcgTkVUX0ZDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzctXFx0Ym9vbCBcXFwiRmlicmUgQ2hhbm5lbCBkcml2ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjEzODpcXHRkZXBlbmRzIG9uIFNDU0kgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0xNDk9Y29uZmlnIElGQlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTUwLVxcdHRyaXN0YXRlIFxcXCJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTUxOlxcdGRlcGVuZHMgb24gTkVUX0FDVF9NSVJSRUQgfHwgTkZUX0ZXRF9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1Mi1cXHRzZWxlY3QgTkVUX1JFRElSRUNUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTE3OT1jb25maWcgTUFDVlRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVxcdHRyaXN0YXRlIFxcXCJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgxOlxcdGRlcGVuZHMgb24gTUFDVkxBTlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgyOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgzLVxcdHNlbGVjdCBUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MTkzPWNvbmZpZyBJUFZMQU5fTDNTXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTQ6XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5NTpcXHRkZXBlbmRzIG9uIElQVkxBTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTk2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MTk5PWNvbmZpZyBJUFZMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVAtVkxBTiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjAxOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjAyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIxNy1cXHR0cmlzdGF0ZSBcXFwiSVAtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjE4OlxcdGRlcGVuZHMgb24gSVBWTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTk6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMjAtXFx0c2VsZWN0IFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMjpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMy1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjQ1PWNvbmZpZyBHRU5FVkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0Ni1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNDc6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDgtXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYxLVxcdHRyaXN0YXRlIFxcXCJCYXJlIFVEUCBFbmNhcHN1bGF0aW9uXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjYyOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYzLVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNzI9Y29uZmlnIEdUUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVxcdHRyaXN0YXRlIFxcXCJHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mjc0OlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjc1LVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yODk9Y29uZmlnIFBGQ1BcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI5MC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IEZvcndhcmRpbmcgQ29udHJvbCBQcm90b2NvbCAoUEZDUClcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyOTE6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yOTItXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMwMj1jb25maWcgQU1UXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzA0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUF9NVUxUSUNBU1RcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwNS1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzI3PWNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjk6XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMzND1jb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM2OlxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzctXFx0XFx0XFx0IShORVRDT05TT0xFPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzQ1PWNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ2LVxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ3OlxcdGRlcGVuZHMgb24gTkVUQ09OU09MRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ4LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNTU9Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXFx0Ym9vbCBcXFwiUHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNTc6XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzU4LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzM9Y29uZmlnIE5UQl9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3NC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBFdGhlcm5ldCBvdmVyIE5UQiBUcmFuc3BvcnRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNzU6XFx0ZGVwZW5kcyBvbiBOVEJfVFJBTlNQT1JUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzc9Y29uZmlnIFJJT05FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzc4LVxcdHRyaXN0YXRlIFxcXCJSYXBpZElPIEV0aGVybmV0IG92ZXIgbWVzc2FnaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc5OlxcdGRlcGVuZHMgb24gUkFQSURJT1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzgwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzgxPWNvbmZpZyBSSU9ORVRfVFhfU0laRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzgyLVxcdGludCBcXFwiTnVtYmVyIG9mIG91dGJvdW5kIHF1ZXVlIGVudHJpZXNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozODM6XFx0ZGVwZW5kcyBvbiBSSU9ORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4NC1cXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4Ny1cXHRpbnQgXFxcIk51bWJlciBvZiBpbmJvdW5kIHF1ZXVlIGVudHJpZXNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozODg6XFx0ZGVwZW5kcyBvbiBSSU9ORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4OS1cXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM5MT1jb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5NC1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDQtXFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0NTpcXHRkZXBlbmRzIG9uIFZJUlRJT1xcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ2LVxcdHNlbGVjdCBORVRfRkFJTE9WRVJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDYzPWNvbmZpZyBORVRLSVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cXHRib29sIFxcXCJCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDY1OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ3Mj1jb25maWcgTkVUX1ZSRlxcbmRyaXZlcnMvbmV0L0tjb25maWctNDczLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc0OlxcdGRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NzU6XFx0ZGVwZW5kcyBvbiBORVRfTDNfTUFTVEVSX0RFVlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc2OlxcdGRlcGVuZHMgb24gSVBWNl9NVUxUSVBMRV9UQUJMRVMgfHwgSVBWNj1uXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00ODE9Y29uZmlnIFZTT0NLTU9OXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00ODItXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgdnNvY2sgbW9uaXRvcmluZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0ODM6XFx0ZGVwZW5kcyBvbiBWSE9TVF9WU09DS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNDg0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDg5PWNvbmZpZyBNSElfTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00OTAtXFx0dHJpc3RhdGUgXFxcIk1ISSBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ5MTpcXHRkZXBlbmRzIG9uIE1ISV9CVVNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ5Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTU0ND1jb25maWcgWEVOX05FVERFVl9GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ1LVxcdHRyaXN0YXRlIFxcXCJYZW4gbmV0d29yayBkZXZpY2UgZnJvbnRlbmQgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ2OlxcdGRlcGVuZHMgb24gWEVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXFx0c2VsZWN0IFhFTl9YRU5CVVNfRlJPTlRFTkRcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTYyPWNvbmZpZyBYRU5fTkVUREVWX0JBQ0tFTkRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU2My1cXHR0cmlzdGF0ZSBcXFwiWGVuIGJhY2tlbmQgbmV0d29yayBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NjQ6XFx0ZGVwZW5kcyBvbiBYRU5fQkFDS0VORFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTY1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODUtXFx0dHJpc3RhdGUgXFxcIlZNd2FyZSBWTVhORVQzIGV0aGVybmV0IGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4NjpcXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODc6XFx0ZGVwZW5kcyBvbiBQQUdFX1NJWkVfTEVTU19USEFOXzY0S0JcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OC1cXHRzZWxlY3QgUEFHRV9QT09MXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTU5ND1jb25maWcgRlVKSVRTVV9FU1xcbmRyaXZlcnMvbmV0L0tjb25maWctNTk1LVxcdHRyaXN0YXRlIFxcXCJGVUpJVFNVIEV4dGVuZGVkIFNvY2tldCBOZXR3b3JrIERldmljZSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1OTY6XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01OTctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDY6XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA3OlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA4OlxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwOTpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTAtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU1OjU0LjM5MDgwNjEwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ3OTgxOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBOVEJgIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBsb29raW5nIGxpa2UgYE5UQl9ORVRERVZgIHJlbGllcyBkaXJlY3RseSBvbiBgTlRCX1RSQU5TUE9SVGAuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgbmV0d29yayBkZXZpY2UgbmVlZHMgYSB0cmFuc3BvcnQgbGF5ZXIuIE5vdywgYE5UQl9UUkFOU1BPUlRgIGl0c2VsZiBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIGJhc2UgYE5UQmAgbW9kdWxlLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgc28gZmFyLCB0aGUgcmVsYXRpb25zaGlwcyBhcmUgY2xlYXI6IE5FVERFViAtXHUwMDNlIFRSQU5TUE9SVCAtXHUwMDNlIE5UQi4gQnV0IEkgYWx3YXlzIGxpa2UgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncy4gRGVwZW5kZW5jaWVzIGNhbiBiZSBzbmVha3ksIGVzcGVjaWFsbHkgaW4gc29tZXRoaW5nIGFzIGNvbXBsZXggYXMgYSBrZXJuZWwgZHJpdmVyLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSBzaG91bGQgcHJvYmFibHkgb3BlbiB1cCBgZHJpdmVycy9udGIvS2NvbmZpZ2AgYW5kIHNjYW4gdGhyb3VnaCB0aGUgb3B0aW9ucyB0aGVyZSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFNvbWV0aW1lcyB0aGVyZSBhcmUgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCByZXF1aXJlbWVudHMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQgZnJvbSBhIGN1cnNvcnkgZ2xhbmNlLiBCZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gZnVuZGFtZW50YWwgZHJpdmVyIGJ1aWxkaW5nIGJsb2Nrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NTo1OC4yMzg3OTE0NDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTI3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udGIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL250Yi9LY29uZmlnPTI9bWVudWNvbmZpZyBOVEJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL250Yi9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL250Yi9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9udGIvS2NvbmZpZz0xNj1jb25maWcgTlRCX01TSVxcbmRyaXZlcnMvbnRiL0tjb25maWctMTctXFx0Ym9vbCBcXFwiTVNJIEludGVycnVwdCBTdXBwb3J0XFxcIlxcbmRyaXZlcnMvbnRiL0tjb25maWc6MTg6XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuZHJpdmVycy9udGIvS2NvbmZpZy0xOS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU1OjU4LjI4NTcyNzgwOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM3OTQ0NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5UQiBDb25maWd1cmF0aW9uIERpbGVtbWEqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBOVEIgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIHRoZSBkZXBlbmRlbmN5IOKAkyBgTlRCYCByZWxpZXMgb24gYFBDSWAuIE1ha2VzIHNlbnNlLCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaW5jbHVkZSBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgdG8gZ2V0IHRoaXMgdGhpbmcgdXAgYW5kIHJ1bm5pbmcgcHJvcGVybHkuIExldCdzIGFkZCBgTlRCYCwgYE5UQl9UUkFOU1BPUlRgLCBhbmQgYE5UQl9ORVRERVZgIHRvIHRoZSBtaXguIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBjb21wb25lbnRzLlxuXG5XYWl0IGEgc2Vjb25k4oCmIHdhc24ndCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGhhdmluZyBhIGR1bW15IE5UQiBkcml2ZXI/IEkgY291bGQgYmUgaW1hZ2luaW5nIHRoaW5ncywgYnV0IGl0J3Mgd29ydGggYSBkb3VibGUtY2hlY2suIE9rYXksIHllYWgsIGxldCdzIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdGVzdCBkcml2ZXIgYW5kIGl0cyByZWxhdGVkIGNvbmZpZyBvcHRpb25zIGJ5IGNoZWNraW5nIGBkcml2ZXJzL250Yi90ZXN0L0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXprYWxsZXIgZHJpdmVyIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBteSBjb25maWd1cmF0aW9uLiBJIGhvcGUgdGhpcyBjb3ZlcnMgZXZlcnl0aGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NjowMi40MjM2NzUyMDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzAzNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL250Yi90ZXN0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnOjI6Y29uZmlnIE5UQl9QSU5HUE9OR1xcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEIgUGluZyBQb25nIFRlc3QgQ2xpZW50XFxcIlxcbi0tXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoxMTpjb25maWcgTlRCX1RPT0xcXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMTItXFx0dHJpc3RhdGUgXFxcIk5UQiBEZWJ1Z2dpbmcgVG9vbCBUZXN0IENsaWVudFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MjI6Y29uZmlnIE5UQl9QRVJGXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJOVEIgUkFXIFBlcmYgTWVhc3VyaW5nIFRvb2xcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjktXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnOjMwOmNvbmZpZyBOVEJfTVNJX1RFU1RcXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMzEtXFx0dHJpc3RhdGUgXFxcIk5UQiBNU0kgVGVzdCBDbGllbnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjAyLjQ2Nzk4NDA5NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ2NjQ0MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEJ1ZyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIERpZCBJIGp1c3Qgc2VlIHNvbWV0aGluZyBhYm91dCBgc3l6X250YmA/IFRoYXQgY2FuJ3QgYmUgcmlnaHQuIFRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgdGhpcyB0b29sICpjYW5ub3QqIGJlIHVzZWQgZm9yIGxvb2tpbmcgYXQgc3l6a2FsbGVyJ3Mgb3duIHBzZXVkby1zeXNjYWxscyBsaWtlIGFueXRoaW5nIHByZWZpeGVkIHdpdGggYHN5el9gLiBUaGV5IGFyZW4ndCBpbiB0aGUga2VybmVsLCBzbyB3aGF0J3MgZ29pbmcgb24/IElmIHN5emthbGxlciBmb3VuZCBhIGJ1ZyByZWxhdGVkIHRvIE5UQiwgaXQgbXVzdCBiZSB0ZXN0YWJsZSBzb21laG93LlxuXG5SaWdodCwgdGhlcmUgaGFzIHRvIGJlIGEgcmVhbCBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgdGhpbmsuLi4gYSB2aXJ0dWFsIE5UQiBkcml2ZXI/IFRoYXQncyBwbGF1c2libGUuIFdoZXJlIHdvdWxkIHRoYXQgbGl2ZT8gQWgsIHByb2JhYmx5IGluIGBkcml2ZXJzL250Yi9ody9lcGYvYC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoYXQgZGlyZWN0b3J5IGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgdXMgdGhlIGNvbnRleHQgd2UgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTY6MDYuMjE0NjMxMjcyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMxMDA1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL250Yi9ody9lcGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTY6MDYuMjYwOTQ1OTE3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTYzNzQwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBFUEYgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRVBGIGhhcmR3YXJlIHdpdGhpbiB0aGUgTlRCIGRyaXZlci4gTXkgZmlyc3Qgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgZm9yIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgYXJlIGxpa2VseSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBlYWNoIG9wdGlvbiBoYXMgb24gdGhlIGRyaXZlcidzIGJlaGF2aW9yIGFuZCBwZXJmb3JtYW5jZS4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgcGllY2UgaXMgY29udHJvbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwOTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NjowOS4yNzczMjI3NjlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIE5UQl9FUEZcXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEVQRiBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcXFwiXFxuICAgMzpcXHRcXHRoZWxwXFxuICAgNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEVQRiBOVEIgb24gY29uZmlndXJhYmxlIGVuZHBvaW50LlxcbiAgIDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NjowOS4yNzczODAyMzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MTI0NDczMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBOVEI6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIGBOVEJfRVBGYCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzLiBUaGF0J3MgZ29vZC4gQW5kIHNpbmNlIHN5emthbGxlciBmb3VuZCBhIGJ1ZywgdGhlIGFmZmVjdGVkIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRpbWUgdG8gYnJlYWsgdGhpcyBkb3duIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNheSB0aGF0IGlmIHRoZXJlJ3MgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLCB0aGVuIHdlIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuICBTaW5jZSB0aGVyZSdzIGEgYnVnLCB0aGF0J3Mgd2hhdCB3ZSBoYXZlIGhlcmUuIFNvLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgd2UgbmVlZCB0byBleHRyYWN0IHRoZSBpbXBvcnRhbnQga2VybmVsIGZ1bmN0aW9ucyBmb3IgYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZS4uLiAgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAsIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgLCBhbmQgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgSSBoYXZlIGNvbmZpcm1lZCB0aGF0LlxuXG5OZXh0IHVwIGFyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBuZWVkIHRvIGRlZmluZSB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkLiBUaGUgb2J2aW91cyBvbmVzIGhlcmUgYXJlIGBOVEJgLCBgTlRCX1RSQU5TUE9SVGAsIGFuZCBgTlRCX05FVERFVmAuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBmdW5jdGlvbnMgd2UgaWRlbnRpZmllZC4gIGBudGJfdHhfY29weV9jYWxsYmFja2AgaXMgc3RhdGljLiBUaGF0J3MgYSBwb3RlbnRpYWwgaXNzdWUuICBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBIb3dldmVyLCBpdCAqaXMqIHVzZWQgYXMgYSBjYWxsYmFjazogYHR4ZC1cdTAwM2VjYWxsYmFja19yZXN1bHQgPSBudGJfdHhfY29weV9jYWxsYmFjaztgLiBUaGF0IG1lYW5zIGl0J3MgcHJvYmFibHkgbm90IGlubGluZWQgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLCBzbyBpdCBzaG91bGQgYmUgZmluZS4gIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGlzIGV4cG9ydGVkLCB0aGF0J3MgcGVyZmVjdC4gIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGlzIHN0YXRpYywgYnV0IGlzIGEgbmV0ZGV2IG9wOiBgLm5kb19zdGFydF94bWl0ID0gbnRiX25ldGRldl9zdGFydF94bWl0LGAgc28gaXQncyBwcm9iYWJseSBub3QgaW5saW5lZCwgYW5kIGl0J3MgZGVmaW5pdGVseSBhbiBlbnRyeSBwb2ludC5cblxuT2theSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkPyBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBkaXJlY3RseSwgd2hpY2ggbWFrZXMgaXQgYSBjYW5kaWRhdGUgZm9yIGlubGluaW5nLiBXZSAqZG9uJ3QqIHdhbnQgdGhhdC4gU28gbGV0J3Mgc2tpcCB0aGF0LlxuXG5IbW0sIGBudGJfcHJvY2Vzc190eGAgaW4gYGRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY2AuLi4gVGhhdCdzIGJlZW4gbW9kaWZpZWQhIExldCdzIGV4YW1pbmUgdGhlIGRpZmYuIEFoLCBzb21lIGxpbmVzIHdlcmUgcmVtb3ZlZC4gVGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBzdGF0aWMuICBJcyBpdCBhbiBlbnRyeSBwb2ludD8gTm8sIGl0J3MgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb25zLCBsaWtlIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgbWFpbiBlbnRyeSBwb2ludC4gU28sIHdlIGFscmVhZHkgaGF2ZSB0aGF0LlxuXG5Ob3cgbGV0J3MgY2hlY2sgYG50Yl9uZXRkZXZfdHhfdGltZXJgIGluIGBkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNgLiBXYWl0ISBgbnRiX25ldGRldl9zdGFydF94bWl0YCBpcyBtb2RpZmllZC4gQW5kIHRoZSBkaWZmIHNob3dzIGEgY29kZSBjaGFuZ2UgaGVyZS5cblxuU28sIGxldCdzIHJldmlldzogT3VyIGBGb2N1c1N5bWJvbHNgOiBgbnRiX25ldGRldl9zdGFydF94bWl0YCwgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAsIGBudGJfdHhfY29weV9jYWxsYmFja2AuIGFuZCBvdXIgYEVuYWJsZUNvbmZpZ3NgOiBgTlRCYCwgYE5UQl9UUkFOU1BPUlRgLCBgTlRCX05FVERFVmAuXG5cbkFueXRoaW5nIGVsc2U/IElzIGBOVEJfRVBGYCByZWxldmFudD8gIFdlIGRvbid0IGtub3cgZm9yIHN1cmUsIGFzIHN5emthbGxlciBjb3VsZCBiZSB1c2luZyBzb21ldGhpbmcgZWxzZS4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhIGR1bW15IE5UQiBkcml2ZXI/ICBMZXQncyBjaGVjayBgZHJpdmVycy9udGIvaHcvYC4gIGBOVEJfUElOR1BPTkdgPyAgTm8sIHRoYXQncyBhIHRlc3QgY2xpZW50LCBub3QgYSBoYXJkd2FyZSBkcml2ZXIuICBgTlRCX05FVERFVmAgaXMgYSBjbGllbnQuIFdoYXQncyB0aGUgaGFyZHdhcmU/IEkgc2hvdWxkIGxvb2sgZm9yIGhhcmR3YXJlLCBvciBhIGBkdW1teWAgZHJpdmVyIGluIGBkcml2ZXJzL250Yi9ody9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM2MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NjoyMi43ODk4MzAxMzZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTk5Nzk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdW1teVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL250Yi9ody9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjIyLjgzNjAzNTIyMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI4MzY1Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlRCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTlRCIChOb24tVHJhbnNwYXJlbnQgQnJpZGdlKSBkcml2ZXIgcGF0Y2gsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdHJhbnNtaXQgcGF0aC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgYW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCB0ZXN0aW5nLCBlc3BlY2lhbGx5IGZ1enppbmcgd2l0aCB0b29scyBsaWtlIHN5emthbGxlci5cblxuRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGhhcmR3YXJlIHZhcmlhdGlvbnMuIEknbSB3b25kZXJpbmcgd2hpY2ggc3BlY2lmaWMgTlRCIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyBhcmUgYWZmZWN0ZWQ6IGBkcml2ZXJzL250Yi9ody9pZHQvYCwgYGRyaXZlcnMvbnRiL2h3L2ludGVsL2AsIGBkcml2ZXJzL250Yi9ody9hbWQvYCwgYGRyaXZlcnMvbnRiL2h3L21zY2MvYCwgYGRyaXZlcnMvbnRiL2h3L2VwZi9gLiBUaGUgcGF0Y2ggZG9lc24ndCBzcGVjaWZ5IGEgXCJkdW1teVwiIGRyaXZlciwgc28gaXQgcHJvYmFibHkgaXMgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgdmlydHVhbCBQQ0kgZnJhbWV3b3JrIG9yIHRoZSBnZW5lcmljIGBOVEJfRVBGYCBtb2R1bGUuXG5cblRoZSBmYWN0IHRoYXQgdGhlIGJ1ZyByZXBvcnQgY2FtZSBmcm9tIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAgaXMgc2lnbmlmaWNhbnQuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBzeXprYWxsZXIgKmlzKiBjYXBhYmxlIG9mIHRlc3RpbmcgdGhpcyBOVEIgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZ3JlYXQuIEkganVzdCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb3ZlcmFnZSwgYW5kIHRoZSBvYnZpb3VzIG9uZXMgYXJlIGBOVEJgLCBgTlRCX1RSQU5TUE9SVGAsIGFuZCBgTlRCX05FVERFVmAuIEknbGwgcHJvdmlkZSB0aG9zZSBjb25maWd1cmF0aW9ucyBpbiB0aGUgcmVzdWx0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgYE5UQl9ORVRERVZgIHJlbGllcyBvbiBgTlRCX1RSQU5TUE9SVGAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGBOVEJgLCBhbmQgYE5UQmAgZGVwZW5kcyBvbiBgUENJYC4gVGhlIGBQQ0lgIGNvbmZpZyBzaG91bGQgYmUgc3RhbmRhcmQsIGJ1dCBJIHdpbGwgbWFrZSBub3RlIG9mIGl0LlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzeW1ib2xzIHRoYXQgYXJlIGNoYW5nZWQgaW4gdGhlIHBhdGNoLiBJJ2xsIGNoZWNrIHdoaWNoIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBwb3RlbnRpYWxseSByZWFjaGFibGUuIExldCdzIHNlZS4uLiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGlzbid0IGV4cG9ydGVkLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gaXQgaXNuJ3QgcmVsZXZhbnQsIHNpbmNlIGl0J3MgdXNlZCB3aXRoaW4gZXhwb3J0ZWQgZnVuY3Rpb25zLiBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpcyBleHBvcnRlZC4gQW5kIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGlzbid0IGRpcmVjdGx5IGV4cG9ydGVkLCBidXQgaXQncyBhIGBuZG9fc3RhcnRfeG1pdGAgY2FsbGJhY2ssIHNvIGl0ICppcyogcmVhY2hhYmxlLlxuXG5TbywgYmFzZWQgb24gdGhlIHBhdGNoIGRlc2NyaXB0aW9uIGFuZCBteSBjb2RlIGFuYWx5c2lzLCB0aGUga2V5IHN5bWJvbHMgdGhhdCByZXByZXNlbnQgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIGFyZTogYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAsIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgLCBhbmQgYG50Yl90eF9jb3B5X2NhbGxiYWNrYC4gVGhlc2UgYXJlIHRoZSBvbmVzIEknbGwgaGlnaGxpZ2h0IGFzIFwiRm9jdXNTeW1ib2xzXCIgZm9yIGZ1enppbmcgYW5kIHRlc3RpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGFuZCB0aGUgaGFuZGxpbmcgb2YgcXVldWUgc3RvcHMsIGVycm9ycywgbGluayBzdGF0dXMgYW5kIGZyYW1lIHNpemUgbGltaXRzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb24gbmFtZXMgb25lIGxhc3QgdGltZS4gWWVwLCBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGlzIGluZGVlZCBgc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlcylgLiBBbmQgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaXMgYHN0YXRpYyBuZXRkZXZfdHhfdCBudGJfbmV0ZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpYC4gQW5kIGZpbmFsbHksIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGlzIGBpbnQgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pYC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gSSdsbCBjb25maWd1cmUgbXkgcmVzdWx0IHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ1MCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTY6MzQuMTE5Njk2NTc4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczNTQ0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5UQlwiLFxuICAgIFwiTlRCX1RSQU5TUE9SVFwiLFxuICAgIFwiTlRCX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50Yl9uZXRkZXZfc3RhcnRfeG1pdFwiLFxuICAgIFwibnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlXCIsXG4gICAgXCJudGJfdHhfY29weV9jYWxsYmFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVEIgKE5vbi1UcmFuc3BhcmVudCBCcmlkZ2UpIG5ldGRldiBkcml2ZXIgYW5kIHRyYW5zcG9ydCBsYXllciB0byBmaXggYSBidWcgaW4gdGhlIHRyYW5zbWl0IHBhdGguIEl0IGNoYW5nZXMgaG93IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGhhbmRsZXMgcXVldWUgc3RvcHMgYW5kIGVycm9ycywgYW5kIG1vZGlmaWVzIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIHRvIGNoZWNrIGZvciBsaW5rIHN0YXR1cyBhbmQgZnJhbWUgc2l6ZSBsaW1pdHMuIEl0IGFsc28gdXBkYXRlcyBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGNvcnJlY3RseSBoYW5kbGUgRE1BIGNvcHkgcmVzdWx0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgbmV0d29yayB0cmFuc21pdCBwYXRocyBvdmVyIE5UQiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEJcIixcbiAgICBcIk5UQl9UUkFOU1BPUlRcIixcbiAgICBcIk5UQl9ORVRERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGJfbmV0ZGV2X3N0YXJ0X3htaXRcIixcbiAgICBcIm50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZVwiLFxuICAgIFwibnRiX3R4X2NvcHlfY2FsbGJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRCIChOb24tVHJhbnNwYXJlbnQgQnJpZGdlKSBuZXRkZXYgZHJpdmVyIGFuZCB0cmFuc3BvcnQgbGF5ZXIgdG8gZml4IGEgYnVnIGluIHRoZSB0cmFuc21pdCBwYXRoLiBJdCBjaGFuZ2VzIGhvdyBgbnRiX25ldGRldl9zdGFydF94bWl0YCBoYW5kbGVzIHF1ZXVlIHN0b3BzIGFuZCBlcnJvcnMsIGFuZCBtb2RpZmllcyBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCB0byBjaGVjayBmb3IgbGluayBzdGF0dXMgYW5kIGZyYW1lIHNpemUgbGltaXRzLiBJdCBhbHNvIHVwZGF0ZXMgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBjb3JyZWN0bHkgaGFuZGxlIERNQSBjb3B5IHJlc3VsdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgdHJhbnNtaXQgcGF0aHMgb3ZlciBOVEIsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjM0LjE5NzA1NzI1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY4Nzg1MjQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjM0LjE5NzYzNjI3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE5Njg3MjY5OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbG9naWMgYnVncywgcXVldWUgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBxdWV1ZSBzdGFydmF0aW9uIGlzc3VlcyBpbiB0aGUgTlRCIG5ldGRldiBkcml2ZXIuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCBtb3ZlcyBhIGZyYW1lIHNpemUgY2hlY2sgdG8gYW4gZWFybGllciBzeW5jaHJvbm91cyBzdGFnZSAoYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWApLCBhbmQgY2hhbmdlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGFkZCB0aGUgZW50cnkgYmFjayB0byB0aGUgZnJlZSBxdWV1ZSBiZWZvcmUgaW52b2tpbmcgdGhlIHRyYW5zbWlzc2lvbiBoYW5kbGVyLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjZmNTVlZjU2Yjc5YTI5ZTc1ZjgxMWJiYTlhMDdkZmJiYzZhMTVlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA1OjUzOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXG5pbmRleCAwMjlhNGE1MzJhMTA0Li4wMmIzNWNmNTNhNjIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXG4rKysgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcbkBAIC0xOTksOCArMTk5LDEwIEBAIHN0YXRpYyBpbnQgX19udGJfbmV0ZGV2X21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBzdGF0aWMgaW50IG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbnRiX25ldGRldl9xdWV1ZSAqcSwgaW50IHNpemUpXG4ge1xuLVx0aWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChuZGV2LCBxLVx1MDAzZXFpZCkgfHxcbi1cdCAgICAobnRiX3RyYW5zcG9ydF90eF9mcmVlX2VudHJ5KHEtXHUwMDNlcXApIFx1MDAzZT0gc2l6ZSkpXG4rXHRpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5kZXYsIHEtXHUwMDNlcWlkKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdGlmIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS1cdTAwM2VxcCkgXHUwMDNlPSBzaXplKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldHVybiBfX250Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCBzaXplKTtcbkBAIC0yNTYsMjEgKzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRxID0gXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlc1txaWRdO1xuIFxuLVx0bnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApO1xuK1x0aWYgKHVubGlrZWx5KG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCB0eF9zdG9wKSkpXG4rXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcbiBcdHJjID0gbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHEtXHUwMDNlcXAsIHNrYiwgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4pO1xuLVx0aWYgKHJjKVxuLVx0XHRnb3RvIGVycjtcbitcdGlmIChyYykge1xuK1x0XHRpZiAocmMgPT0gLUVBR0FJTiB8fCByYyA9PSAtRUJVU1kpIHtcbitcdFx0XHRuZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHEtXHUwMDNlcWlkKTtcbitcdFx0XHRtb2RfdGltZXIoXHUwMDI2cS1cdTAwM2V0eF90aW1lcixcbitcdFx0XHRcdCAgamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXModHhfdGltZSkpO1xuK1x0XHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbitcdFx0fVxuK1xuK1x0XHRnb3RvIGRyb3A7XG4rXHR9XG4gXG4gXHQvKiBjaGVjayBmb3IgbmV4dCBzdWJtaXQgKi9cbiBcdG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCB0eF9zdG9wKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG4tZXJyOlxuK2Ryb3A6XG4rXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4tXHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuLVx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG4gc3RhdGljIHZvaWQgbnRiX25ldGRldl90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNcbmluZGV4IGY1OWY5MjZkNGJmYWEuLmY5Y2FhMWE2NTNjNWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNcbisrKyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuQEAgLTE3MTksOSArMTcxOSwxNiBAQCBzdGF0aWMgdm9pZCBudGJfdHJhbnNwb3J0X3J4Y19kYih1bnNpZ25lZCBsb25nIGRhdGEpXG4gc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzKVxuIHtcbitcdHN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIgX19pb21lbSAqaGRyO1xuIFx0c3RydWN0IG50Yl9xdWV1ZV9lbnRyeSAqZW50cnkgPSBkYXRhO1xuLVx0c3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwID0gZW50cnktXHUwMDNlcXA7XG4tXHRzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyIF9faW9tZW0gKmhkciA9IGVudHJ5LVx1MDAzZXR4X2hkcjtcbitcdHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcDtcbitcdHVuc2lnbmVkIGludCBsZW47XG4rXHR2b2lkICpjYl9kYXRhO1xuK1xuK1x0cXAgPSBlbnRyeS1cdTAwM2VxcDtcbitcdGhkciA9IGVudHJ5LVx1MDAzZXR4X2hkcjtcbitcdGNiX2RhdGEgPSBlbnRyeS1cdTAwM2VjYl9kYXRhO1xuK1x0bGVuID0gZW50cnktXHUwMDNlbGVuO1xuIFxuIFx0Lyogd2UgbmVlZCB0byBjaGVjayBETUEgcmVzdWx0cyBpZiB3ZSBhcmUgdXNpbmcgRE1BICovXG4gXHRpZiAocmVzKSB7XG5AQCAtMTc2OCwxNSArMTc3NSwxMyBAQCBzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLFxuIFx0ICogXCJsaW5rIGRvd25cIiBvciBzaW1pbGFyLiAgU2luY2Ugbm8gcGF5bG9hZCBpcyBiZWluZyBzZW50IGluIHRoZXNlXG4gXHQgKiBjYXNlcywgdGhlcmUgaXMgbm90aGluZyB0byBhZGQgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUuXG4gXHQgKi9cbi1cdGlmIChlbnRyeS1cdTAwM2VsZW4gXHUwMDNlIDApIHtcbi1cdFx0cXAtXHUwMDNldHhfYnl0ZXMgKz0gZW50cnktXHUwMDNlbGVuO1xuLVxuLVx0XHRpZiAocXAtXHUwMDNldHhfaGFuZGxlcilcbi1cdFx0XHRxcC1cdTAwM2V0eF9oYW5kbGVyKHFwLCBxcC1cdTAwM2VjYl9kYXRhLCBlbnRyeS1cdTAwM2VjYl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGVudHJ5LVx1MDAzZWxlbik7XG4tXHR9XG4rXHRpZiAobGVuIFx1MDAzZSAwKVxuK1x0XHRxcC1cdTAwM2V0eF9ieXRlcyArPSBsZW47XG4gXG4gXHRudGJfbGlzdF9hZGQoXHUwMDI2cXAtXHUwMDNlbnRiX3R4X2ZyZWVfcV9sb2NrLCBcdTAwMjZlbnRyeS1cdTAwM2VlbnRyeSwgXHUwMDI2cXAtXHUwMDNldHhfZnJlZV9xKTtcbitcbitcdGlmIChsZW4gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHFwLVx1MDAzZXR4X2hhbmRsZXIpXG4rXHRcdHFwLVx1MDAzZXR4X2hhbmRsZXIocXAsIHFwLVx1MDAzZWNiX2RhdGEsIGNiX2RhdGEsIGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG50Yl9tZW1jcHlfdHhfb25fc3RhY2soc3RydWN0IG50Yl9xdWV1ZV9lbnRyeSAqZW50cnksIHZvaWQgX19pb21lbSAqb2Zmc2V0KVxuQEAgLTE5NTAsMTUgKzE5NTUsNiBAQCBzdGF0aWMgaW50IG50Yl9wcm9jZXNzX3R4KHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCxcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAoZW50cnktXHUwMDNlbGVuIFx1MDAzZSBxcC1cdTAwM2V0eF9tYXhfZnJhbWUgLSBzaXplb2Yoc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlcikpIHtcbi1cdFx0aWYgKHFwLVx1MDAzZXR4X2hhbmRsZXIpXG4tXHRcdFx0cXAtXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXHUwMDNlY2JfZGF0YSwgTlVMTCwgLUVJTyk7XG4tXG4tXHRcdG50Yl9saXN0X2FkZChcdTAwMjZxcC1cdTAwM2VudGJfdHhfZnJlZV9xX2xvY2ssIFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LFxuLVx0XHRcdCAgICAgXHUwMDI2cXAtXHUwMDNldHhfZnJlZV9xKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4gXHRudGJfYXN5bmNfdHgocXAsIGVudHJ5KTtcbiBcbiBcdHFwLVx1MDAzZXR4X3BrdHMrKztcbkBAIC0yMzQ4LDkgKzIzNDQsMTEgQEAgaW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLFxuIFx0aWYgKCFxcCB8fCAhbGVuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qIElmIHRoZSBxcCBsaW5rIGlzIGRvd24gYWxyZWFkeSwganVzdCBpZ25vcmUuICovXG4gXHRpZiAoIXFwLVx1MDAzZWxpbmtfaXNfdXApXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gLUVOT0xJTks7XG4rXG4rXHRpZiAobGVuIFx1MDAzZSBxcC1cdTAwM2V0eF9tYXhfZnJhbWUgLSBzaXplb2Yoc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlcikpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHRlbnRyeSA9IG50Yl9saXN0X3JtKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2cXAtXHUwMDNldHhfZnJlZV9xKTtcbiBcdGlmICghZW50cnkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjM0LjE5NzYzNzI3OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTY4NzI0ODY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQWRkcmVzc2luZyBRdWV1ZSBNYW5hZ2VtZW50IGFuZCBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgaW4gTlRCIERyaXZlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgdGhlIE5UQiBuZXR3b3JrIGRldmljZSBhbmQgdHJhbnNwb3J0IGRyaXZlcnMuIExldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyBzeXN0ZW1hdGljYWxseS4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgYWltZWQgYXQgcmVmaW5pbmcgcXVldWUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBwYWNrZXQgZW5xdWV1ZWluZywgdHJhbnNtaXNzaW9uLCBhbmQgY29tcGxldGlvbi4gVGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGZvY3VzZWQgb24gdGhlIGNoYW5nZXMgYWNyb3NzIGBudGJfbmV0ZGV2LmNgIGFuZCBgbnRiX3RyYW5zcG9ydC5jYC5cblxuRmlyc3QsIGluIGBudGJfbmV0ZGV2LmNgLCB0aGUgcmV2aXNlZCBsb2dpYyB3aXRoaW4gYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAgc2VlbXMgdG8gdGlnaHRlbiB1cCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhIHRyYW5zbWlzc2lvbiBxdWV1ZSBpcyBoYWx0ZWQuIEJlZm9yZSwgdGhlcmUgd2FzIGEgZG91YmxlIGNoZWNrIG9mIHRoZSBzdWJxdWV1ZSBzdGF0ZSwgYW5kIGF2YWlsYWJsZSBxdWV1ZSBlbnRyaWVzLCBub3cgaXQgb25seSBjaGVja3MgdGhlIHN1YnF1ZXVlIHN0YXRlLCBhbmQgcmV0dXJucyBpZiBzdG9wcGVkLiBgbnRiX25ldGRldl9zdGFydF94bWl0YCBub3cgYWNjb3VudHMgZm9yIHRoZSByZXR1cm4gb2YgYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAsIGFuZCBhcHByb3ByaWF0ZWx5IGhhbmRsZXMgYnVzeSBjb25kaXRpb25zLiBgbnRiX25ldGRldl9zdGFydF94bWl0YCBub3cgYWNjb3VudHMgZm9yIGEgYnVzeSByZXR1cm4uXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgaW4gYG50Yl90cmFuc3BvcnQuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCBhbmQgYG50Yl9wcm9jZXNzX3R4YC4gRXhhbWluaW5nIGBudGJfdHhfY29weV9jYWxsYmFja2AsIEkgemVyb2VkIGluIG9uIHRoZSByZW9yZGVyaW5nIG9mIHRoZSBvcGVyYXRpb25zIGludm9sdmluZyB0aGUgYG50Yl9saXN0X2FkZGAgYW5kIHRoZSBjYWxsIHRvIGBxcC1cdTAwM2V0eF9oYW5kbGVyYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoZSBwb3RlbnRpYWwgZm9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBoYW5kbGVyIG1pZ2h0IGZyZWUgb3IgYWNjZXNzIGRhdGEgd2l0aGluIHRoZSBlbnRyeSwgYWZ0ZXIgd2hpY2ggdGhlIGxpc3QgYWRkaXRpb24gb2NjdXJzLiBIb3dldmVyLCB0aGlzIHBhdGNoIGNvcnJlY3RseSBwbGFjZXMgYG50Yl9saXN0X2FkZGAgKmJlZm9yZSogdGhlIGhhbmRsZXIgY2FsbC4gV2h5PyBUaGUgYHR4X2hhbmRsZXJgIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgcXVldWUgZW50cnkgaXMgcmVhZHkgZm9yIHJlLXVzZS4gVGhpcyBmaXhlcyB0aGUgb3JpZ2luYWwgYnVnLiBJdCdzIGEgY2xhc3NpY2FsIHF1ZXVlaW5nL2xvZ2ljIGVycm9yLlxuXG5BZGRpdGlvbmFsbHksIGBudGJfcHJvY2Vzc190eGAgaGFkIGEgY2hlY2sgb24gdGhlIHBhY2tldCdzIGxlbmd0aCBjb21wYXJlZCB0byBgcXAtXHUwMDNldHhfbWF4X2ZyYW1lYCBhbmQgY2FsbHMgYSBgdHhfaGFuZGxlcmAgd2l0aCBgLUVJT2AgaWYgaXQgZmFpbHMsIHdoaWNoIG1heSBjYXVzZSBpdCB0byBkcm9wIHBhY2tldHMuIFRoZSBwYXRjaCBtb3ZlcyB0aGlzIGNoZWNrIGRpcmVjdGx5IGludG8gYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAsIGFuZCB0aGUgcmV0dXJuIHZhbHVlcyBhcmUgaGFuZGxlZCBhdCB0aGUgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgbGV2ZWwuXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGlzbid0IGFib3V0IEtNU0FOIChrZXJuZWwgbWVtb3J5IHNhbml0aXplcikgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgYWJvdXQgZW5zdXJpbmcgcHJvcGVyIHF1ZXVlIG1hbmFnZW1lbnQsIGF2b2lkaW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGFuZCBwcmV2ZW50aW5nIHBhY2tldCBkcm9wcyBkdWUgdG8gaW1wcm9wZXIgbGVuZ3RoIGNoZWNraW5nLlxuXG5JIHdpbGwgZG91YmxlLWNoZWNrIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ29pbmcgdG8gdXNlciBzcGFjZSBvciBoYXJkd2FyZS4gSG93ZXZlciwgSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgbW9zdGx5IGludm9sdmUgdGhlIHBhY2tldCBsZW5ndGggY2hlY2sgbW92aW5nIGZyb20gYSBsYXRlciBwcm9jZXNzaW5nIHN0YWdlIHRvIGVhcmx5IGVucXVldWVpbmcsIHdoaWNoIGp1c3QgcmVmaW5lcyBlcnJvciBoYW5kbGluZy4gQWRkaXRpb25hbGx5LCB0aGUgcmVvcmRlcmluZyBvZiB0aGUgYG50Yl9saXN0X2FkZGAgY2FsbCBhbmQgdGhlIGB0eF9oYW5kbGVyYCBjYWxsIHdpdGhpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGNsZWFybHkgYWRkcmVzc2VzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQvb3IgcXVldWVpbmcgbG9naWMgYnVncy5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRhcmdldGVkIGF0IGFkZHJlc3NpbmcgcXVldWUgbWFuYWdlbWVudCBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdpdGhpbiB0aGUgTlRCIGRyaXZlci4gU28gSSdsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNSwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTY6NTMuODg0ODg4NzA3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbG9naWMgYnVncywgcXVldWUgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBxdWV1ZSBzdGFydmF0aW9uIGlzc3VlcyBpbiB0aGUgTlRCIG5ldGRldiBkcml2ZXIuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCBtb3ZlcyBhIGZyYW1lIHNpemUgY2hlY2sgdG8gYW4gZWFybGllciBzeW5jaHJvbm91cyBzdGFnZSAoYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWApLCBhbmQgY2hhbmdlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGFkZCB0aGUgZW50cnkgYmFjayB0byB0aGUgZnJlZSBxdWV1ZSBiZWZvcmUgaW52b2tpbmcgdGhlIHRyYW5zbWlzc2lvbiBoYW5kbGVyLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvZ2ljIGJ1Z3MsIHF1ZXVlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcXVldWUgc3RhcnZhdGlvbiBpc3N1ZXMgaW4gdGhlIE5UQiBuZXRkZXYgZHJpdmVyLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgbW92ZXMgYSBmcmFtZSBzaXplIGNoZWNrIHRvIGFuIGVhcmxpZXIgc3luY2hyb25vdXMgc3RhZ2UgKGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgKSwgYW5kIGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBhZGQgdGhlIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgcXVldWUgYmVmb3JlIGludm9raW5nIHRoZSB0cmFuc21pc3Npb24gaGFuZGxlci4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowknqd2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 05:52:19 +0000 UTC FinishedAt: 2026-08-17 05:56:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTB", "NTB_TRANSPORT", "NTB_NETDEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTB", "NTB_TRANSPORT", "NTB_NETDEV" ], "series_id": "81b36320-b33c-49b9-9af2-412446ccd577" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ntb_netdev_start_xmit", "ntb_transport_tx_enqueue", "ntb_tx_copy_callback" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05UQiYjMzQ7LAogICAgJiMzNDtOVEJfVFJBTlNQT1JUJiMzNDssCiAgICAmIzM0O05UQl9ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGJfbmV0ZGV2X3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7bnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O250Yl90eF9jb3B5X2NhbGxiYWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvZ2ljIGJ1Z3MsIHF1ZXVlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcXVldWUgc3RhcnZhdGlvbiBpc3N1ZXMgaW4gdGhlIE5UQiBuZXRkZXYgZHJpdmVyLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgbW92ZXMgYSBmcmFtZSBzaXplIGNoZWNrIHRvIGFuIGVhcmxpZXIgc3luY2hyb25vdXMgc3RhZ2UgKGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgKSwgYW5kIGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBhZGQgdGhlIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgcXVldWUgYmVmb3JlIGludm9raW5nIHRoZSB0cmFuc21pc3Npb24gaGFuZGxlci4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRCIChOb24tVHJhbnNwYXJlbnQgQnJpZGdlKSBuZXRkZXYgZHJpdmVyIGFuZCB0cmFuc3BvcnQgbGF5ZXIgdG8gZml4IGEgYnVnIGluIHRoZSB0cmFuc21pdCBwYXRoLiBJdCBjaGFuZ2VzIGhvdyBgbnRiX25ldGRldl9zdGFydF94bWl0YCBoYW5kbGVzIHF1ZXVlIHN0b3BzIGFuZCBlcnJvcnMsIGFuZCBtb2RpZmllcyBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCB0byBjaGVjayBmb3IgbGluayBzdGF0dXMgYW5kIGZyYW1lIHNpemUgbGltaXRzLiBJdCBhbHNvIHVwZGF0ZXMgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBjb3JyZWN0bHkgaGFuZGxlIERNQSBjb3B5IHJlc3VsdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgdHJhbnNtaXQgcGF0aHMgb3ZlciBOVEIsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNmY1NWVmNTZiNzlhMjllNzVmODExYmJhOWEwN2RmYmJjNmExNWU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDU6NTM6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXG5pbmRleCAwMjlhNGE1MzJhMTA0Li4wMmIzNWNmNTNhNjIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcbkBAIC0xOTksOCAmIzQzOzE5OSwxMCBAQCBzdGF0aWMgaW50IF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gc3RhdGljIGludCBudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdFx0XHQgICAgc3RydWN0IG50Yl9uZXRkZXZfcXVldWUgKnEsIGludCBzaXplKVxuIHtcbi1cdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cdTAwM2VxaWQpIHx8XG4tXHQgICAgKG50Yl90cmFuc3BvcnRfdHhfZnJlZV9lbnRyeShxLVx1MDAzZXFwKSBcdTAwM2U9IHNpemUpKVxuJiM0MztcdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cdTAwM2VxaWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0aWYgKG50Yl90cmFuc3BvcnRfdHhfZnJlZV9lbnRyeShxLVx1MDAzZXFwKSBcdTAwM2U9IHNpemUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0dXJuIF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHNpemUpO1xuQEAgLTI1NiwyMSAmIzQzOzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRxID0gXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlc1txaWRdO1xuIFxuLVx0bnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApO1xuJiM0MztcdGlmICh1bmxpa2VseShudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCkpKVxuJiM0MztcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuIFxuIFx0cmMgPSBudGJfdHJhbnNwb3J0X3R4X2VucXVldWUocS1cdTAwM2VxcCwgc2tiLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0aWYgKHJjID09IC1FQUdBSU4gfHwgcmMgPT0gLUVCVVNZKSB7XG4mIzQzO1x0XHRcdG5ldGlmX3N0b3Bfc3VicXVldWUobmRldiwgcS1cdTAwM2VxaWQpO1xuJiM0MztcdFx0XHRtb2RfdGltZXIoXHUwMDI2cS1cdTAwM2V0eF90aW1lcixcbiYjNDM7XHRcdFx0XHQgIGppZmZpZXMgJiM0MzsgdXNlY3NfdG9famlmZmllcyh0eF90aW1lKSk7XG4mIzQzO1x0XHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRnb3RvIGRyb3A7XG4mIzQzO1x0fVxuIFxuIFx0LyogY2hlY2sgZm9yIG5leHQgc3VibWl0ICovXG4gXHRudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuLWVycjpcbiYjNDM7ZHJvcDpcbiYjNDM7XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOztcbi1cdG5kZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOztcbi1cdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiYjNDM7XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBudGJfbmV0ZGV2X3R4X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuaW5kZXggZjU5ZjkyNmQ0YmZhYS4uZjljYWExYTY1M2M1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jXG5AQCAtMTcxOSw5ICYjNDM7MTcxOSwxNiBAQCBzdGF0aWMgdm9pZCBudGJfdHJhbnNwb3J0X3J4Y19kYih1bnNpZ25lZCBsb25nIGRhdGEpXG4gc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyIF9faW9tZW0gKmhkcjtcbiBcdHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5ID0gZGF0YTtcbi1cdHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCA9IGVudHJ5LVx1MDAzZXFwO1xuLVx0c3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHIgPSBlbnRyeS1cdTAwM2V0eF9oZHI7XG4mIzQzO1x0c3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwO1xuJiM0MztcdHVuc2lnbmVkIGludCBsZW47XG4mIzQzO1x0dm9pZCAqY2JfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cXAgPSBlbnRyeS1cdTAwM2VxcDtcbiYjNDM7XHRoZHIgPSBlbnRyeS1cdTAwM2V0eF9oZHI7XG4mIzQzO1x0Y2JfZGF0YSA9IGVudHJ5LVx1MDAzZWNiX2RhdGE7XG4mIzQzO1x0bGVuID0gZW50cnktXHUwMDNlbGVuO1xuIFxuIFx0Lyogd2UgbmVlZCB0byBjaGVjayBETUEgcmVzdWx0cyBpZiB3ZSBhcmUgdXNpbmcgRE1BICovXG4gXHRpZiAocmVzKSB7XG5AQCAtMTc2OCwxNSAmIzQzOzE3NzUsMTMgQEAgc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSxcbiBcdCAqIFwmIzM0O2xpbmsgZG93blwmIzM0OyBvciBzaW1pbGFyLiAgU2luY2Ugbm8gcGF5bG9hZCBpcyBiZWluZyBzZW50IGluIHRoZXNlXG4gXHQgKiBjYXNlcywgdGhlcmUgaXMgbm90aGluZyB0byBhZGQgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUuXG4gXHQgKi9cbi1cdGlmIChlbnRyeS1cdTAwM2VsZW4gXHUwMDNlIDApIHtcbi1cdFx0cXAtXHUwMDNldHhfYnl0ZXMgJiM0Mzs9IGVudHJ5LVx1MDAzZWxlbjtcbi1cbi1cdFx0aWYgKHFwLVx1MDAzZXR4X2hhbmRsZXIpXG4tXHRcdFx0cXAtXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXHUwMDNlY2JfZGF0YSwgZW50cnktXHUwMDNlY2JfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBlbnRyeS1cdTAwM2VsZW4pO1xuLVx0fVxuJiM0MztcdGlmIChsZW4gXHUwMDNlIDApXG4mIzQzO1x0XHRxcC1cdTAwM2V0eF9ieXRlcyAmIzQzOz0gbGVuO1xuIFxuIFx0bnRiX2xpc3RfYWRkKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2ZW50cnktXHUwMDNlZW50cnksIFx1MDAyNnFwLVx1MDAzZXR4X2ZyZWVfcSk7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHFwLVx1MDAzZXR4X2hhbmRsZXIpXG4mIzQzO1x0XHRxcC1cdTAwM2V0eF9oYW5kbGVyKHFwLCBxcC1cdTAwM2VjYl9kYXRhLCBjYl9kYXRhLCBsZW4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldClcbkBAIC0xOTUwLDE1ICYjNDM7MTk1NSw2IEBAIHN0YXRpYyBpbnQgbnRiX3Byb2Nlc3NfdHgoc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwLFxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkge1xuLVx0XHRpZiAocXAtXHUwMDNldHhfaGFuZGxlcilcbi1cdFx0XHRxcC1cdTAwM2V0eF9oYW5kbGVyKHFwLCBxcC1cdTAwM2VjYl9kYXRhLCBOVUxMLCAtRUlPKTtcbi1cbi1cdFx0bnRiX2xpc3RfYWRkKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2ZW50cnktXHUwMDNlZW50cnksXG4tXHRcdFx0ICAgICBcdTAwMjZxcC1cdTAwM2V0eF9mcmVlX3EpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbiBcdG50Yl9hc3luY190eChxcCwgZW50cnkpO1xuIFxuIFx0cXAtXHUwMDNldHhfcGt0cyYjNDM7JiM0Mzs7XG5AQCAtMjM0OCw5ICYjNDM7MjM0NCwxMSBAQCBpbnQgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsXG4gXHRpZiAoIXFwIHx8ICFsZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0LyogSWYgdGhlIHFwIGxpbmsgaXMgZG93biBhbHJlYWR5LCBqdXN0IGlnbm9yZS4gKi9cbiBcdGlmICghcXAtXHUwMDNlbGlua19pc191cClcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0xJTks7XG4mIzQzO1xuJiM0MztcdGlmIChsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHRlbnRyeSA9IG50Yl9saXN0X3JtKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2cXAtXHUwMDNldHhfZnJlZV9xKTtcbiBcdGlmICghZW50cnkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRCJiMzNDssCiAgICAmIzM0O05UQl9UUkFOU1BPUlQmIzM0OywKICAgICYjMzQ7TlRCX05FVERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250Yl9uZXRkZXZfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtudGJfdHJhbnNwb3J0X3R4X2VucXVldWUmIzM0OywKICAgICYjMzQ7bnRiX3R4X2NvcHlfY2FsbGJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5UQiAoTm9uLVRyYW5zcGFyZW50IEJyaWRnZSkgbmV0ZGV2IGRyaXZlciBhbmQgdHJhbnNwb3J0IGxheWVyIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgdHJhbnNtaXQgcGF0aC4gSXQgY2hhbmdlcyBob3cgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaGFuZGxlcyBxdWV1ZSBzdG9wcyBhbmQgZXJyb3JzLCBhbmQgbW9kaWZpZXMgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgdG8gY2hlY2sgZm9yIGxpbmsgc3RhdHVzIGFuZCBmcmFtZSBzaXplIGxpbWl0cy4gSXQgYWxzbyB1cGRhdGVzIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gY29ycmVjdGx5IGhhbmRsZSBETUEgY29weSByZXN1bHRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGhzIG92ZXIgTlRCLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjZmNTVlZjU2Yjc5YTI5ZTc1ZjgxMWJiYTlhMDdkZmJiYzZhMTVlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA1OjUzOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jCmluZGV4IDAyOWE0YTUzMmExMDQuLjAyYjM1Y2Y1M2E2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L250Yl9uZXRkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMKQEAgLTE5OSw4ICYjNDM7MTk5LDEwIEBAIHN0YXRpYyBpbnQgX19udGJfbmV0ZGV2X21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIHN0YXRpYyBpbnQgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJCSAgICBzdHJ1Y3QgbnRiX25ldGRldl9xdWV1ZSAqcSwgaW50IHNpemUpCiB7Ci0JaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChuZGV2LCBxLSZndDtxaWQpIHx8Ci0JICAgIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS0mZ3Q7cXApICZndDs9IHNpemUpKQomIzQzOwlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5kZXYsIHEtJmd0O3FpZCkpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAobnRiX3RyYW5zcG9ydF90eF9mcmVlX2VudHJ5KHEtJmd0O3FwKSAmZ3Q7PSBzaXplKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBfX250Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCBzaXplKTsKQEAgLTI1NiwyMSAmIzQzOzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAKIAlxID0gJmFtcDtkZXYtJmd0O3F1ZXVlc1txaWRdOwogCi0JbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApOwomIzQzOwlpZiAodW5saWtlbHkobnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApKSkKJiM0MzsJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCXJjID0gbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHEtJmd0O3FwLCBza2IsIHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtsZW4pOwotCWlmIChyYykKLQkJZ290byBlcnI7CiYjNDM7CWlmIChyYykgewomIzQzOwkJaWYgKHJjID09IC1FQUdBSU4gfHwgcmMgPT0gLUVCVVNZKSB7CiYjNDM7CQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZGV2LCBxLSZndDtxaWQpOwomIzQzOwkJCW1vZF90aW1lcigmYW1wO3EtJmd0O3R4X3RpbWVyLAomIzQzOwkJCQkgIGppZmZpZXMgJiM0MzsgdXNlY3NfdG9famlmZmllcyh0eF90aW1lKSk7CiYjNDM7CQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZ290byBkcm9wOwomIzQzOwl9CiAKIAkvKiBjaGVjayBmb3IgbmV4dCBzdWJtaXQgKi8KIAludGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCi1lcnI6CiYjNDM7ZHJvcDoKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAluZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKLQluZGV2LSZndDtzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7OwotCXJldHVybiBORVRERVZfVFhfQlVTWTsKJiM0MzsJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgbnRiX25ldGRldl90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYwppbmRleCBmNTlmOTI2ZDRiZmFhLi5mOWNhYTFhNjUzYzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jCkBAIC0xNzE5LDkgJiM0MzsxNzE5LDE2IEBAIHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsCiAJCQkJIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpCiB7CiYjNDM7CXN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIgX19pb21lbSAqaGRyOwogCXN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5ID0gZGF0YTsKLQlzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAgPSBlbnRyeS0mZ3Q7cXA7Ci0Jc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHIgPSBlbnRyeS0mZ3Q7dHhfaGRyOwomIzQzOwlzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXA7CiYjNDM7CXVuc2lnbmVkIGludCBsZW47CiYjNDM7CXZvaWQgKmNiX2RhdGE7CiYjNDM7CiYjNDM7CXFwID0gZW50cnktJmd0O3FwOwomIzQzOwloZHIgPSBlbnRyeS0mZ3Q7dHhfaGRyOwomIzQzOwljYl9kYXRhID0gZW50cnktJmd0O2NiX2RhdGE7CiYjNDM7CWxlbiA9IGVudHJ5LSZndDtsZW47CiAKIAkvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEgKi8KIAlpZiAocmVzKSB7CkBAIC0xNzY4LDE1ICYjNDM7MTc3NSwxMyBAQCBzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLAogCSAqICYjMzQ7bGluayBkb3duJiMzNDsgb3Igc2ltaWxhci4gIFNpbmNlIG5vIHBheWxvYWQgaXMgYmVpbmcgc2VudCBpbiB0aGVzZQogCSAqIGNhc2VzLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZCB0byB0aGUgY29tcGxldGlvbiBxdWV1ZS4KIAkgKi8KLQlpZiAoZW50cnktJmd0O2xlbiAmZ3Q7IDApIHsKLQkJcXAtJmd0O3R4X2J5dGVzICYjNDM7PSBlbnRyeS0mZ3Q7bGVuOwotCi0JCWlmIChxcC0mZ3Q7dHhfaGFuZGxlcikKLQkJCXFwLSZndDt0eF9oYW5kbGVyKHFwLCBxcC0mZ3Q7Y2JfZGF0YSwgZW50cnktJmd0O2NiX2RhdGEsCi0JCQkJICAgICAgIGVudHJ5LSZndDtsZW4pOwotCX0KJiM0MzsJaWYgKGxlbiAmZ3Q7IDApCiYjNDM7CQlxcC0mZ3Q7dHhfYnl0ZXMgJiM0Mzs9IGxlbjsKIAogCW50Yl9saXN0X2FkZCgmYW1wO3FwLSZndDtudGJfdHhfZnJlZV9xX2xvY2ssICZhbXA7ZW50cnktJmd0O2VudHJ5LCAmYW1wO3FwLSZndDt0eF9mcmVlX3EpOwomIzQzOwomIzQzOwlpZiAobGVuICZndDsgMCAmYW1wOyZhbXA7IHFwLSZndDt0eF9oYW5kbGVyKQomIzQzOwkJcXAtJmd0O3R4X2hhbmRsZXIocXAsIHFwLSZndDtjYl9kYXRhLCBjYl9kYXRhLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldCkKQEAgLTE5NTAsMTUgJiM0MzsxOTU1LDYgQEAgc3RhdGljIGludCBudGJfcHJvY2Vzc190eChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsCiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChlbnRyeS0mZ3Q7bGVuICZndDsgcXAtJmd0O3R4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkgewotCQlpZiAocXAtJmd0O3R4X2hhbmRsZXIpCi0JCQlxcC0mZ3Q7dHhfaGFuZGxlcihxcCwgcXAtJmd0O2NiX2RhdGEsIE5VTEwsIC1FSU8pOwotCi0JCW50Yl9saXN0X2FkZCgmYW1wO3FwLSZndDtudGJfdHhfZnJlZV9xX2xvY2ssICZhbXA7ZW50cnktJmd0O2VudHJ5LAotCQkJICAgICAmYW1wO3FwLSZndDt0eF9mcmVlX3EpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAludGJfYXN5bmNfdHgocXAsIGVudHJ5KTsKIAogCXFwLSZndDt0eF9wa3RzJiM0MzsmIzQzOzsKQEAgLTIzNDgsOSAmIzQzOzIzNDQsMTEgQEAgaW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLAogCWlmICghcXAgfHwgIWxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBJZiB0aGUgcXAgbGluayBpcyBkb3duIGFscmVhZHksIGp1c3QgaWdub3JlLiAqLwogCWlmICghcXAtJmd0O2xpbmtfaXNfdXApCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIC1FTk9MSU5LOwomIzQzOwomIzQzOwlpZiAobGVuICZndDsgcXAtJmd0O3R4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiAKIAllbnRyeSA9IG50Yl9saXN0X3JtKCZhbXA7cXAtJmd0O250Yl90eF9mcmVlX3FfbG9jaywgJmFtcDtxcC0mZ3Q7dHhfZnJlZV9xKTsKIAlpZiAoIWVudHJ5KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBOZWVkIGZvciBGdXp6aW5nIHRoaXMgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbGFuZGVkLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZz8gV2UgaGF2ZSBtb2RpZmljYXRpb25zIGluIGBkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNgIGFuZCBgZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jYC4gUmlnaHQsIE5UQiwgTm9uLVRyYW5zcGFyZW50IEJyaWRnZS4gSXQgZGVhbHMgd2l0aCB0aGUgTlRCIG5ldGRldiBkcml2ZXIgYW5kIHRoZSBOVEIgdHJhbnNwb3J0LCBib3RoIHJlbGF0ZWQgdG8gYSBQQ0llIGZlYXR1cmUuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHJpbmdpbmcgc29tZSBiZWxscy4gVGhleSBtZW50aW9uIG5lZWRpbmcgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBmb3IgY2VydGFpbiBkcml2ZXJzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBQQ0llIGhlcmUsIGFuZCBOVEIgKmlzKiBhIFBDSWUgc3Vic3lzdGVtLiBIbW0sIGlzIE5UQiBlbXVsYXRlZCBpbiBRRU1VPyBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSYjMzk7cyBhIFFFTVUgTlRCIGRldmljZSBvciBpZiB3ZSBjYW4gdGVzdCBpdCBhdCBhbGwuIEl0IG1pZ2h0IG5vdCBiZSB0ZXN0YWJsZSBhbmQgdGhlbiB0aGVyZSBpcyBub3QgbXVjaCBwb2ludC4KCkFoLCB3YWl0IGEgc2Vjb25kLCBOVEIgaXMgYSBzdWJzeXN0ZW0sIHNvIGl0IGlzIGxpa2VseSB0byBoYXZlIGl0cyBvd24gaW50ZXJuYWwgdGVzdGluZyBmcmFtZXdvcmsuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGluIGBkcml2ZXJzL250Yi90ZXN0L2AuIExldCYjMzk7cyBhbHNvIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hlcmUgZWxzZSBOVEIgaXMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiBmdXp6IHRoaXMgZWZmZWN0aXZlbHksIG9yIGlmIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGEgaGFyZHdhcmUtZ2F0ZWQgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5UQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL250Yi9LY29uZmlnOjI6bWVudWNvbmZpZyBOVEJcbmRyaXZlcnMvbnRiL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL0tjb25maWc9MTQ9aWYgTlRCXG5kcml2ZXJzL250Yi9LY29uZmlnLTE1LVxuZHJpdmVycy9udGIvS2NvbmZpZzoxNjpjb25maWcgTlRCX01TSVxuZHJpdmVycy9udGIvS2NvbmZpZy0xNy1cdGJvb2wgXCYjMzQ7TVNJIEludGVycnVwdCBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udGIvS2NvbmZpZz0yOT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9udGIvdGVzdC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL250Yi9LY29uZmlnLTMwLVxuZHJpdmVycy9udGIvS2NvbmZpZzozMTpjb25maWcgTlRCX1RSQU5TUE9SVFxuZHJpdmVycy9udGIvS2NvbmZpZy0zMi1cdHRyaXN0YXRlIFwmIzM0O05UQiBUcmFuc3BvcnQgQ2xpZW50XCYjMzQ7XG4tLVxuZHJpdmVycy9udGIvaHcvYW1kL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnRiL2h3L2FtZC9LY29uZmlnOjI6Y29uZmlnIE5UQl9BTURcbmRyaXZlcnMvbnRiL2h3L2FtZC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBTUQgTm9uLVRyYW5zcGFyZW50IEJyaWRnZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWc6MTpjb25maWcgTlRCX0VQRlxuZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgRVBGIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL2h3L2lkdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL250Yi9ody9pZHQvS2NvbmZpZzoyOmNvbmZpZyBOVEJfSURUXG5kcml2ZXJzL250Yi9ody9pZHQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SURUIFBDSWUtc3dpdGNoIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL2h3L2ludGVsL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnRiL2h3L2ludGVsL0tjb25maWc6Mjpjb25maWcgTlRCX0lOVEVMXG5kcml2ZXJzL250Yi9ody9pbnRlbC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL250Yi9ody9tc2NjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnRiL2h3L21zY2MvS2NvbmZpZzoyOmNvbmZpZyBOVEJfU1dJVENIVEVDXG5kcml2ZXJzL250Yi9ody9tc2NjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3JvU2VtaSBTd2l0Y2h0ZWMgTm9uLVRyYW5zcGFyZW50IEJyaWRnZSBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6Mjpjb25maWcgTlRCX1BJTkdQT05HXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05UQiBQaW5nIFBvbmcgVGVzdCBDbGllbnRcJiMzNDtcbi0tXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMTAtXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MTE6Y29uZmlnIE5UQl9UT09MXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMTItXHR0cmlzdGF0ZSBcJiMzNDtOVEIgRGVidWdnaW5nIFRvb2wgVGVzdCBDbGllbnRcJiMzNDtcbi0tXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjEtXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MjI6Y29uZmlnIE5UQl9QRVJGXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtOVEIgUkFXIFBlcmYgTWVhc3VyaW5nIFRvb2xcJiMzNDtcbi0tXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjktXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MzA6Y29uZmlnIE5UQl9NU0lfVEVTVFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTMxLVx0dHJpc3RhdGUgXCYjMzQ7TlRCIE1TSSBUZXN0IENsaWVudFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTlRCIEludmVzdGlnYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSBoYXZlIGEgdmlydHVhbCBOVEIgZGV2aWNlIGF2YWlsYWJsZSBmb3IgdGVzdGluZy4gSG1tbSwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbnl0aGluZyByZWxhdGVkIHRvIE5UQj8gQSBxdWljayBzZWFyY2jigKZ3YWl0LCB0aGVyZSYjMzk7cyBhICYjMzQ7c3l6LWNsdXN0ZXImIzM0OyB0YWchIE9rYXksIGRvZXMgdGhhdCBtZWFuIHN5emthbGxlciB0ZXN0cyBOVEI/IExldCYjMzk7cyBrZWVwIGRpZ2dpbmcuIEkgc2VlIGEgZGlyZWN0b3J5IGNhbGxlZCBgZHJpdmVycy9udGIvaHcvZXBmL2AsIGJ1dCBob2xkIG9u4oCmZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgdGhhdCBgc3l6X250YmAgcHNldWRvLXN5c2NhbGw/IE5vLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBJIGhhdmUsIEkmIzM5O20gbG9va2luZyBhdCBkcml2ZXJzIHRoYXQgKm5lZWQqIHJlYWwgaGFyZHdhcmUsIHNwZWNpZmljYWxseSB0aG9zZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBsaWtlIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgb3IgYW1kZ3B1IHdoaWNoIGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkFscmlnaHQsIGJhY2sgdG8gdGhlIGVtdWxhdGlvbiBxdWVzdGlvbi4gSXMgTlRCIGFjdHVhbGx5IGVtdWxhdGVkIGluIFFFTVU/IEkgd2FzIHRoaW5raW5nIGFib3V0IGBpdnNobWVtYCBvciBzb21ldGhpbmcgc2ltaWxhci4uLiBub3BlLiBIbW0sIEkgc2VlIGBody9taXNjL3NnYS5jYCwgdGhhdCYjMzk7cyBub3QgaXQsIGFuZCBgaHcvcGNpLWJyaWRnZS9kZWMuY2AsIHN0aWxsIG5vLiBEb2VzIFFFTVUgZXZlbiAqaGF2ZSogYW4gTlRCIGRldmljZT8gV2FpdCBhIG1pbnV0ZS4uLiBgbnRiX25ldGRldmAhIFRoYXQmIzM5O3MgYSBuZXR3b3JrIGRldmljZSBkcml2ZXIgKm92ZXIqIE5UQi4gQmluZ28hIFRoYXQmIzM5O3Mgb3VyIHZpcnR1YWwgaW50ZXJmYWNlLiBOb3csIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoYXQmIzM5O3MgZGVmaW5lZC4gTGV0JiMzOTtzIHNlYXJjaCBmb3IgYG50Yl9uZXRkZXZgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUgYW5kIGZpbmQgb3V0IHdoYXQgdGhhdCYjMzk7cyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5UQl9ORVRERVYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zNzA9Y29uZmlnIE5FVF9QT0xMX0NPTlRST0xMRVJcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3Mi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzczOmNvbmZpZyBOVEJfTkVUREVWXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3NC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgTlRCX05FVERFVmAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTlRCX05FVERFVmAuIEkmIzM5O2xsIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGNvZGViYXNlIOKAkyBwcm9iYWJseSBhIGBtYWtlIG1lbnVjb25maWdgIG9yIGEgc2ltaWxhciB0b29sIHRvIHNlZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCByZWxhdGlvbnNoaXBzLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgZGVwZW5kZW5jaWVzLCBwb3NzaWJseSBzb21lIFBDSS1yZWxhdGVkIGNvbXBvbmVudHMsIGFuZCBsaWtlbHkgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyBpZiBpdCYjMzk7cyB0aWVkIHRvIGEgcGFydGljdWxhciBOZXR3b3JrIFRyYW5zcG9ydCBCcmlkZ2UgKE5UQikgaW1wbGVtZW50YXRpb24uIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGdlbmVyaWMgTlRCIG5ldGRldiBkcml2ZXIsIG9yIHNvbWV0aGluZyB2ZXJ5IHRhcmdldGVkLiBLbm93aW5nIHRoZSBhcmNoaXRlY3R1cmUsIEkmIzM5O2xsIGhhdmUgYSBiZXR0ZXIgaWRlYSBvZiB3aGF0IHRvIGV4cGVjdC4gVGhpcyBkZXBlbmRlbmN5IGludmVzdGlnYXRpb24gaXMgY3J1Y2lhbCBiZWZvcmUgSSBtYWtlIGFueSBtb2RpZmljYXRpb25zLCB0cm91Ymxlc2hvb3QgaXNzdWVzLCBvciBldmFsdWF0ZSBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIG5ldHdvcmsgZnVuY3Rpb25hbGl0aWVzIGluIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGJvdGggZGlyZWN0IGRlcGVuZGVuY2llcyBhbmQgYW55IGluZGlyZWN0IG9uZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRCX05FVERFVnxkZXBlbmRzIG9uLipOVEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzcwPWNvbmZpZyBORVRfUE9MTF9DT05UUk9MTEVSXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzItXG5kcml2ZXJzL25ldC9LY29uZmlnOjM3Mzpjb25maWcgTlRCX05FVERFVlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzQtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIEV0aGVybmV0IG92ZXIgTlRCIFRyYW5zcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozNzU6XHRkZXBlbmRzIG9uIE5UQl9UUkFOU1BPUlRcbmRyaXZlcnMvbmV0L0tjb25maWctMzc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBOVEIgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGZ1enppbmcgTlRCLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IFN5emthbGxlciBpcyByZWxldmFudCBoZXJlIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGNhcGFibGUgb2YgZnV6emluZyBOVEIsIGlzbiYjMzk7dCBpdD8gRG9lcyBpdCBoYXZlIGEgc3lzY2FsbCBsaWtlIGBzeXpfbnRiYD8gSG1tLCBtYXliZSBub3QgZXhwbGljaXRseSwgYnV0IFN5emthbGxlciBpcyBhIHBvd2VyZnVsIHRvb2wuIEl0IG1pZ2h0IGJlIGdvaW5nIHRocm91Z2ggYSBkaWZmZXJlbnQgcm91dGUsIHV0aWxpemluZyBzb21ldGhpbmcgbGlrZSBgdmttc2AsIGB2Z2VtYCwgYGR1bW15YCwgYG1hYzgwMjExX2h3c2ltYCwgb3IgZXZlbiBsZXZlcmFnaW5nIGBudGJfbmV0ZGV2YCBpbiBzb21lIGluZGlyZWN0IG1hbm5lci4gVGhhdOKAmXMgYSBwb3NzaWJpbGl0eS4gTm93LCBob3cgdGhlIGhlY2sgZG9lcyBTeXprYWxsZXIgKnRlc3QqIGBudGJfbmV0ZGV2YCwgc3BlY2lmaWNhbGx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBBbmQgd2FpdCBhIHNlY29uZCwgaXMgdGhlcmUgZXZlbiBhIGR1bW15IE5UQiBkcml2ZXIgYXZhaWxhYmxlPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb2J2aW91cyBwbGFjZSBmaXJzdCDigJMgbGV0JiMzOTtzIHBva2UgYXJvdW5kIGluIGBkcml2ZXJzL250Yi9ody9gLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgbXkgYW5zd2Vycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvaHcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogbnVsbCwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDthbWQmIzM0OywKICAgICYjMzQ7ZXBmJiMzNDssCiAgICAmIzM0O2lkdCYjMzQ7LAogICAgJiMzNDtpbnRlbCYjMzQ7LAogICAgJiMzNDttc2NjJiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBmb3IgYSBQbGFjZWhvbGRlciBOVEIgRHJpdmVyKioKCkhtbSwgaXMgdGhlcmUgYSBiYXNpYyBvciAmIzM0O2R1bW15JiMzNDsgTlRCIGRyaXZlciBhdmFpbGFibGU/IEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHNvbWUgYmFzaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYmVmb3JlIHdyaXRpbmcgYW55dGhpbmcgdG9vIHNwZWNpZmljLCBzbyBpdCBjb3VsZCBzYXZlIGEgbG90IG9mIHRpbWUgdG8gc3RhcnQgd2l0aCBzb21lIGV4aXN0aW5nIHNjYWZmb2xkaW5nLiBPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGEgbGlrZWx5IHBsYWNlIHdvdWxkIGJlIHdpdGhpbiB0aGUgTlRCIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUsIHNvIEkmIzM5O2xsIGNoZWNrIGluIHRoZSBgZHJpdmVycy9udGIvaHcvZXBmL2AgZGlyZWN0b3J5LiBNYXliZSB0aGVyZSYjMzk7cyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvciBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiB0dWNrZWQgYXdheSBpbiB0aGVyZS4gR29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5UQl9FUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9ody9lcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnOjE6Y29uZmlnIE5UQl9FUEZcbmRyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIEVQRiBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIGBudGJfbmV0ZGV2YCBUZXN0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgc3l6a2FsbGVyIGNhbiB0ZXN0IHRoaXMgYG50Yl9uZXRkZXZgIHRoaW5nLiBGaXJzdCB0aG91Z2h0IGlzLCAqbWF5YmUqIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBkcml2ZXIgZm9yIGl0LCBhbmQgdGhlbiBpdCYjMzk7cyB0ZXN0YWJsZSwgb3IgbWF5YmUgaXQmIzM5O3MgY29tcGxldGVseSBvdXQgb2YgdGhlIHF1ZXN0aW9uLiBJIHNob3VsZCBjaGVjayBpZiBgbnRiX25ldGRldmAgaXRzZWxmIGlzIGV2ZW4gYSBjYW5kaWRhdGUgZm9yIHRlc3RpbmcuCgpUaGUgcG90ZW50aWFsIHdyaW5rbGUgaXMgdGhhdCBpdCYjMzk7cyBhIFBDSWUgZGV2aWNlLCBhbmQgUUVNVSYjMzk7cyBQQ0llIGVtdWxhdGlvbiBjYW4gYmUgc3BvdHR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBRRU1VIGVtdWxhdGVzIE5UQiBhdCBhbGwuIFJpZ2h0LCBzbyBJJiMzOTtsbCBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgJiMzNDtudGImIzM0OyBvciBqdXN0IHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgbWVudGlvbiBvZiBpdCBiZWluZyB0ZXN0YWJsZS4KCkhhbmcgb24sIHRoZSBpbnN0cnVjdGlvbnMgaGFkIHNvbWV0aGluZywgbGV0IG1lIGxvb2suLi4gQWgsIGhlcmUgaXQgaXM6ICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4uLiYjMzQ7IGJ1dCB3YWl0LCBgbnRiX25ldGRldmAgaXNuJiMzOTt0IG9uZSBvZiB0aG9zZSEgSXQmIzM5O3Mgc3VwcG9zZWQgdG8gYmUgYSAqdmlydHVhbCBldGhlcm5ldCBvdmVyIE5UQiog4oCTIGEgZ2VuZXJpYyBzdWJzeXN0ZW0gZHJpdmVyLiBTbyB0aGF0ICpzaG91bGQqIG1lYW4gaXQmIzM5O3MgZGlmZmVyZW50LgoKU28sIHRoZSBxdWVzdGlvbiBpcywgKmlzKiBOVEIgdGVzdGFibGUgaW4gUUVNVSwgaW4gZ2VuZXJhbD8gTGV0JiMzOTtzIHNlZS4uLiBJIHNlZSBgZHJpdmVycy9udGIvaHcvZXBmL250Yl9od19lcGYuY2AsIHNvIEVQRiBpcyBFbmRwb2ludCBGcmFtZXdvcmsuIEFsc28sIGBudGJfbmV0ZGV2LmNgIGFuZCBgbnRiX3RyYW5zcG9ydC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBgbnRiX25ldGRldl9zdGFydF94bWl0YC4KCklmIGl0JiMzOTtzIG5vdCBjbGVhciwgaXQmIzM5O3Mgc2FmZXIgdG8gYXNzdW1lIGEgZ2VuZXJpYyBzdWJzeXN0ZW0gaXMgdGVzdGFibGUgdW5sZXNzIGl0ICpzcGVjaWZpY2FsbHkqIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlLgoKUmlnaHQsIHNvIHdoYXQgYWJvdXQgUUVNVT8gSSBrbm93IGl0IGhhcyBzdHVmZiBsaWtlIGBody9wY2ktYnJpZGdlL3hpbzMxMzBfZG93bnN0cmVhbS5jYCwgZXRjLiBEb2VzIGl0IGhhdmUgYW4gKmFjdHVhbCogTlRCIGRldmljZT8gSG1tbSwgd2FpdCwgbm8sIGBudGJfbmV0ZGV2YCBpcyBhICpuZXR3b3JrKiBkZXZpY2UhCgpPa2F5LCBsZXQmIzM5O3MgZ28gYmFjayB0byBiYXNpY3MsIGFyZSB0aGVyZSBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgTlRCPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL25laWdoYm91ci5jPTIzNTM9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX25laWdodGJsX3BvbGljeVtORFRBX01BWCYjNDM7MV0gPSB7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMjM2MS1cbm5ldC9jb3JlL25laWdoYm91ci5jOjIzNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYJiM0MzsxXSA9IHtcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNjMtXHRbTkRUUEFfSUZJTkRFWF1cdFx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MjM4MT1zdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNDM3LVx0XHRcdFx0XHRcdCAgdGJbTkRUQV9QQVJNU10sXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyNDM4Olx0XHRcdFx0XHRcdCAgbmxfbnRibF9wYXJtX3BvbGljeSwgZXh0YWNrKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTI0MzktXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDM9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02NTQtXHRib29sIGJ5X21lID0gZmFsc2U7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY1NTpcdGludCBudGJsO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02NTYtXHRpbnQgZGlyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjY5LVx0aG4gPSBkaXIgPyBcdTAwMjZjcC1cdTAwM2VobjEgOiBcdTAwMjZjcC1cdTAwM2VobjA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY3MDpcdG50YmwgPSAwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02NzEtXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02ODAtXHRcdHQgPSByY3VfZGVyZWZlcmVuY2UodC1cdTAwM2VuZXdfdGJsKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjgxOlx0XHRudGJsJiM0MzsmIzQzOztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjgyLVx0XHQvKiBXZSBhcmUgbG9zdD8gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjgzOlx0XHRpZiAobnRibCBcdTAwM2U9IDIpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjg0LVx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjcC1cdTAwM2Vsb2NrKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTI0ODA9bmw4MDIxMV9zZW5kX3Btc3JfZnRtX2NhcGEoY29uc3Qgc3RydWN0IGNmZzgwMjExX3Btc3JfY2FwYWJpbGl0aWVzICpjYXAsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTQ2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyNTQ3Olx0aWYgKGNhcC1cdTAwM2VmdG0uaXN0YS5zdXBwb3J0X250YiB8fCBjYXAtXHUwMDNlZnRtLmlzdGEuc3VwcG9ydF90YiB8fFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTQ4LVx0ICAgIGNhcC1cdTAwM2VmdG0uaXN0YS5zdXBwb3J0X2VkY2EpIHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI1NTQtXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyNTU1Olx0XHRpZiAoY2FwLVx1MDAzZWZ0bS5pc3RhLnN1cHBvcnRfbnRiIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTU2LVx0XHQgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9QTVNSX0ZUTV9DQVBBX0FUVFJfU1VQUE9SVF9OVEIpKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU3MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjU3MTpcdGlmIChjYXAtXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9udGIgfHwgY2FwLVx1MDAzZWZ0bS5yc3RhLnN1cHBvcnRfdGIgfHxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU3Mi1cdCAgICBjYXAtXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9lZGNhKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTg2LVx0XHRcdHJldHVybiAtRU5PQlVGUztcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjU4NzpcdFx0aWYgKGNhcC1cdTAwM2VmdG0ucnN0YS5zdXBwb3J0X250YiBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU4OC1cdFx0ICAgIG5sYV9wdXRfZmxhZyhtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX1NVUFBPUlRfTlRCKSlcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI2MTctXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI2MTg6XHRpZiAoY2FwLVx1MDAzZWZ0bS5taW5fYWxsb3dlZF9yYW5naW5nX2ludGVydmFsX250YiBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjYxOS1cdCAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX01JTl9JTlRFUlZBTF9OVEIsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI2MjA6XHRcdFx0Y2FwLVx1MDAzZWZ0bS5taW5fYWxsb3dlZF9yYW5naW5nX2ludGVydmFsX250YikpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI2MjEtXHRcdHJldHVybiAtRU5PQlVGUztcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEyMjQ1PXN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2JzcyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjI0OC1cdFx0XHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIyNDk6XHRcdFx0ICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmludGJzcylcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIyNTAte1xubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjI1MTpcdHN0cnVjdCBjZmc4MDIxMV9ic3MgKnJlcyA9IFx1MDAyNmludGJzcy1cdTAwM2VwdWI7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMjUyLVx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX2Jzc19pZXMgKmllcztcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzIwLVx0ICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9CU1NfU0VFTl9NU19BR08sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzIxOlx0XHRcdGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGludGJzcy1cdTAwM2V0cykpKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyMi1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzIzLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMyNDpcdGlmIChpbnRic3MtXHUwMDNlcGFyZW50X3RzZiBcdTAwMjZcdTAwMjZcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMjUtXHQgICAgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgTkw4MDIxMV9CU1NfUEFSRU5UX1RTRixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzMjY6XHRcdFx0ICAgICAgIGludGJzcy1cdTAwM2VwYXJlbnRfdHNmLCBOTDgwMjExX0JTU19QQUQpIHx8XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzI3LVx0ICAgICBubGFfcHV0KG1zZywgTkw4MDIxMV9CU1NfUEFSRU5UX0JTU0lELCBFVEhfQUxFTixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzMjg6XHRcdCAgICAgaW50YnNzLVx1MDAzZXBhcmVudF9ic3NpZCkpKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyOS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMzNS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzMzY6XHRpZiAoIW5sODAyMTFfcHV0X3NpZ25hbChtc2csIGludGJzcy1cdTAwM2VwdWIuY2hhaW5zLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMzNzpcdFx0XHRcdGludGJzcy1cdTAwM2VwdWIuY2hhaW5fc2lnbmFsLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMzOC1cdFx0XHRcdE5MODAyMTFfQlNTX0NIQUlOX1NJR05BTCkpXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM0MC1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzNDE6XHRpZiAoaW50YnNzLVx1MDAzZWJzc19zb3VyY2UgIT0gQlNTX1NPVVJDRV9TVEFfUFJPRklMRSkge1xubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM0Mi1cdFx0c3dpdGNoIChyZGV2LVx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM2MS1cdFx0Zm9yX2VhY2hfdmFsaWRfbGluayh3ZGV2LCBsaW5rX2lkKSB7XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzYyOlx0XHRcdGlmIChpbnRic3MgPT0gd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5jbGllbnQuY3VycmVudF9ic3MgXHUwMDI2XHUwMDI2XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzYzLVx0XHRcdCAgICAobmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0JTU19TVEFUVVMsXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM3My1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzc0Olx0XHRpZiAoaW50YnNzID09IHdkZXYtXHUwMDNldS5pYnNzLmN1cnJlbnRfYnNzIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM3NS1cdFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9CU1NfU1RBVFVTLFxuLS1cbm5ldC93aXJlbGVzcy9wbXNyLmM9MTA9c3RhdGljIGludCBwbXNyX3BhcnNlX2Z0bShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXG4tLVxubmV0L3dpcmVsZXNzL3Btc3IuYy0yMjUtXHRpZiAob3V0LVx1MDAzZWZ0bS5yc3RhIFx1MDAyNlx1MDAyNiBvdXQtXHUwMDNlZnRtLm5vbl90cmlnZ2VyX2Jhc2VkIFx1MDAyNlx1MDAyNlxubmV0L3dpcmVsZXNzL3Btc3IuYzoyMjY6XHQgICAgIWNhcGEtXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9udGIpIHtcbm5ldC93aXJlbGVzcy9wbXNyLmMtMjI3LVx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLFxuLS1cbm5ldC93aXJlbGVzcy9zY2FuLmM9ODQ0PXN0YXRpYyBpbnQgY2ZnODAyMTFfc2Nhbl82Z2h6KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbi0tXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg2OS1cdGlmIChyZGV2X3JlcS1cdTAwM2VyZXEuZmxhZ3MgXHUwMDI2IE5MODAyMTFfU0NBTl9GTEFHX0NPTE9DQVRFRF82R0haKSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjg3MDpcdFx0c3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqaW50YnNzO1xubmV0L3dpcmVsZXNzL3NjYW4uYy04NzEtXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg3Mi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJkZXYtXHUwMDNlYnNzX2xvY2spO1xubmV0L3dpcmVsZXNzL3NjYW4uYzo4NzM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW50YnNzLCBcdTAwMjZyZGV2LVx1MDAzZWJzc19saXN0LCBsaXN0KSB7XG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjg3NDpcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpyZXMgPSBcdTAwMjZpbnRic3MtXHUwMDNlcHViO1xubmV0L3dpcmVsZXNzL3NjYW4uYy04NzUtXHRcdFx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX2Jzc19pZXMgKmllcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMTQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxMDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5emthbGxlci1Gb3VuZCBOVEIgQnVnKioKCk9rYXksIHNvIGBudGJfbmV0ZGV2YCBpcyBhIG5ldHdvcmsgZHJpdmVyLCBjb25maXJtZWQuIFRoZSBjb21taXQgbWVzc2FnZSBwb2ludHMgdG8gYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGF0JiMzOTtzIHNpZ25pZmljYW50OyBzeXprYWxsZXImIzM5O3MgZmluZGluZyBpbXBsaWVzIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGhvdyBkb2VzIHN5emthbGxlciBldmVuIHRlc3QgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlcj8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHVuZGVybHlpbmcgdGVzdCBzZXR1cC4gTGV0IG1lIGNoZWNrIHRoZSBvYnZpb3VzIGxvY2F0aW9uczogYGRyaXZlcnMvbnRiL3Rlc3QvYCwgYGRyaXZlcnMvbnRiL2h3L2VwZi9gLCBtYXliZSBldmVuIGEgbmV0bGluayBpbnRlcmZhY2UgaW5zdGFudGlhdGlvbi4KClRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGZvdW5kIHNvbWV0aGluZyBtZWFucyB0aGVyZSYjMzk7cyBhIHBhdGggdGhyb3VnaCB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBwYXRoLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG50Yl9uZXRkZXYuY2AgYW5kIGBudGJfdHJhbnNwb3J0LmNgLCBzbyBJIHNob3VsZCBmb2N1cyBvbiB0aG9zZS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgaXQgYXBwZWFycyB3ZSBoYXZlIGZ1bmN0aW9uYWwgY2hhbmdlcy4gSW4gYG50Yl9uZXRkZXYuY2AsIHRoZSBwYXRjaCBtb2RpZmllcyBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCwgYW5kIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciB0aGUgcmVzdWx0IG9mIGBudGJfbmV0ZGV2X21heWJlX3N0b3BfdHhgLiBJbiBgbnRiX3RyYW5zcG9ydC5jYCwgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgZm9yIGBsZW4gJmd0OyBxcC0mZ3Q7dHhfbWF4X2ZyYW1lIC0gc2l6ZW9mKHN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIpYCBhbmQgcmV0dXJucyBgLUVOT0xJTktgIGlmIGBxcC0mZ3Q7bGlua19pc191cGAgaXMgZmFsc2UuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXJzLgoKR2l2ZW4gc3l6a2FsbGVyJiMzOTtzIHN1Y2Nlc3MsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmlnZ2VyLiBIb3cgZG9lcyBzeXprYWxsZXIgZ2V0IGBudGJfbmV0ZGV2YCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nPyBEb2VzIGl0IHVzZSBhIGR1bW15IE5UQiBkcml2ZXIgdG8gc2ltdWxhdGUgdGhlIGhhcmR3YXJlPyBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9udGIvaHcvaW50ZWwvbnRiX2h3X2dlbjEuY2AgZm9yIGFueSBjbHVlcywgb3IgcGVyaGFwcyBgZHJpdmVycy9udGIvdGVzdC9udGJfcGluZ3BvbmcuY2AuIEl0JiMzOTtzIGxpa2VseSBzeXprYWxsZXIgdXRpbGl6ZXMgYSBzaW1wbGlmaWVkIG9yIHZpcnR1YWwgTlRCIGVudmlyb25tZW50LiBTbyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSB0ZXN0IG9yIGR1bW15IGRyaXZlcnMgaW4gdGhlIGBkcml2ZXJzL250Yi90ZXN0L2Agb3IgYGRyaXZlcnMvbnRiL2h3L2AgZGlyZWN0b3JpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL250Yi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6CgoqKkludmVzdGlnYXRpbmcgVmlydHVhbCBOVEIgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBwb3RlbnRpYWwgdmlydHVhbCBkcml2ZXJzIHJlbGF0ZWQgdG8gTmV0d29yay1BdHRhY2hlZCBCcmlkZ2UgKE5UQikgZnVuY3Rpb25hbGl0eS4gTXkgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGRyaXZlcnMvbnRiL2h3L2AgZGlyZWN0b3J5IGZpcnN0LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSwgd2hpY2ggdmlydHVhbCBkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9mdGVuIG1pbWljIG9yIGFic3RyYWN0LCBpcyBsb2NhdGVkLiBJJiMzOTttIHRoaW5raW5nLCBieSBleGFtaW5pbmcgdGhlIGZpbGVzIHRoZXJlLCBJIG1pZ2h0IGJlIGFibGUgdG8gc3BvdCBwYXR0ZXJucyBvciB0ZWNobmlxdWVzIGNvbW1vbmx5IHVzZWQgaW4gdmlydHVhbGl6YXRpb24gb2YgdGhlIE5UQiBoYXJkd2FyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gcG90ZW50aWFsbHkgZmluZCB0aGUga2V5IHNvdXJjZSBvciBhIHBvaW50ZXIgdG8gaXQgdGhhdCBkZW1vbnN0cmF0ZXMgaG93IHRoZXkgYXJlIGhhbmRsZWQsIG9yIGF0IGxlYXN0IHByb3ZpZGVzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYXJjaGl0ZWN0dXJlIGludm9sdmVkIGluIHZpcnR1YWxpemluZyB0aGUgTlRCLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL2h3JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IG51bGwsCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7YW1kJiMzNDssCiAgICAmIzM0O2VwZiYjMzQ7LAogICAgJiMzNDtpZHQmIzM0OywKICAgICYjMzQ7aW50ZWwmIzM0OywKICAgICYjMzQ7bXNjYyYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTA3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIGBlcGZgIGlzIEVuZHBvaW50IEZyYW1ld29yaywgYW5kIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCBjYW4gYmUgbGV2ZXJhZ2VkIHdpdGggYHBjaS1lcGYtdGVzdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIGNvdWxkIGV2ZW4gYmUgdmlydHVhbC4gQW5kIGhleSwgdGhlcmUmIzM5O3MgYWxzbyBgbnRiX25ldGRldmAsIHdoaWNoIGlzIGEgbmV0ZGV2IGRyaXZlci4gSWYgSSBjYW4gcmVhY2ggaXQsIHRoZW4gaXQmIzM5O3MgYSBkZWZpbml0ZSBjYW5kaWRhdGUsIHNvIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gc2VlbSB0byBiZToKKiAgIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgCiogICBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYAoqICAgYG50Yl90eF9jb3B5X2NhbGxiYWNrYAoqICAgQW5kIG1heWJlIGBudGJfbmV0ZGV2X21heWJlX3N0b3BfdHhgLCBhbHRob3VnaCB0aGF0IG9uZSYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBhcyBpbnRlcmVzdGluZy4KCkxldCYjMzk7cyBjaGVjayBgbnRiX25ldGRldl9zdGFydF94bWl0YCBhbmQgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAuIFdhaXQsIHRoZSBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCBvbmUgaXMgc3RhdGljLCBzbyBJIHNob3VsZCBwcm9iYWJseSBza2lwIHRoYXQuIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGlzIGV4cG9ydGVkLCB0aG91Z2gsIHNvIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQuIExldCYjMzk7cyBkaWcgaW50byBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpbiBgZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYz0yMzIzPUVYUE9SVF9TWU1CT0xfR1BMKG50Yl90cmFuc3BvcnRfcnhfZW5xdWV1ZSk7XG4tLVxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMjUtLyoqXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM6MjMyNjogKiBudGJfdHJhbnNwb3J0X3R4X2VucXVldWUgLSBFbnF1ZXVlIGEgbmV3IE5UQiBxdWV1ZSBlbnRyeVxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMjctICogQHFwOiBOVEIgdHJhbnNwb3J0IGxheWVyIHF1ZXVlIHRoZSBlbnRyeSBpcyB0byBiZSBlbnF1ZXVlZCBvblxuLS1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0yMzM3LSAqL1xuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jOjIzMzg6aW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMzktXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0yMzcyLX1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoyMzczOkVYUE9SVF9TWU1CT0xfR1BMKG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZSk7XG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMjM3NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NjUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBOVEIgTmV0d29yayBEZXZpY2UgVHJhbnNtaXQgUGF0aCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBOVEIgbmV0d29yayBkZXZpY2UgdHJhbnNtaXQgcGF0aC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaW4gYGRyaXZlcnMvbmV0L250Yl9uZXRkZXYuY2AuIEkgZXhwZWN0IHRoaXMgaXMgdGhlIGtleSBmdW5jdGlvbiB3aGVyZSB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBpcyBpbml0aWF0ZWQsIHNvIGl04oCZcyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgTmV0RGV2aWNlIGxheWVyIGRvd24gdG8gdGhlIE5UQiBoYXJkd2FyZSBpbnRlcmZhY2UuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIE5UQiBjb3JlIHdpbGwgYmUgY3J1Y2lhbCwgcGFydGljdWxhcmx5IGhvdyBETUEgaXMgY29uZmlndXJlZCBhbmQgdXNlZCB0byBnZXQgcGFja2V0cyBhY3Jvc3MgdGhlIGxpbmsuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBtYW5hZ2VtZW50IGFzIHdlbGwsIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBzaGFyZWQgcmVzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250Yl9uZXRkZXZfc3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L250Yl9uZXRkZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnRiX3F1ZXVlX2hhbmRsZXJzIG50Yl9uZXRkZXZfaGFuZGxlcnMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbnRiX25ldGRldi5jLTI1MC1cbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYzoyNTE6c3RhdGljIG5ldGRldl90eF90IG50Yl9uZXRkZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbnRiX25ldGRldi5jLTI1Mi1cdFx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYz00MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBudGJfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMtNDM1LVx0Lm5kb19zdG9wID0gbnRiX25ldGRldl9jbG9zZSxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYzo0MzY6XHQubmRvX3N0YXJ0X3htaXQgPSBudGJfbmV0ZGV2X3N0YXJ0X3htaXQsXG5kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMtNDM3LVx0Lm5kb19jaGFuZ2VfbXR1ID0gbnRiX25ldGRldl9jaGFuZ2VfbXR1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgYG50Yl9uZXRkZXZgIFRYIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgLiBJdCYjMzk7cyBhIGBuZXRkZXZgIG9wZXJhdGlvbiwgYW5kIHRlY2huaWNhbGx5IHN0YXRpYywgYnV0IGl0JiMzOTtzIGFuIEFQSSBlbnRyeSBwb2ludCwgc3BlY2lmaWNhbGx5IGBuZG9fc3RhcnRfeG1pdGAuIFRoZSBpbnN0cnVjdGlvbnMgSSYjMzk7dmUgYmVlbiBmb2xsb3dpbmcgYWR2b2NhdGUgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIG1lIHF1ZXN0aW9uIHdoZXRoZXIgdG8gZmF2b3IgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgaW5zdGVhZCBvZiBgbnRiX25ldGRldl9zdGFydF94bWl0YC4gSG93ZXZlciwgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gbW9kaWZpZWQgaW4gYG50Yl9uZXRkZXYuY2AuIEl0ICppcyogYSBjYWxsYmFjaywgYW4gZW50cnkgcG9pbnQsIGFuZCB0aGF0IG1hdHRlcnMgZm9yIGhvdyB3ZSYjMzk7cmUgYnVpbGRpbmcgdGhlIGFic3RyYWN0aW9uIGhlcmUuIFNvIGl0JiMzOTtzIGZpbmUgdG8ga2VlcCBpdC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGluIGBudGJfdHJhbnNwb3J0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGJfdHhfY29weV9jYWxsYmFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MTY4MD1zdGF0aWMgdm9pZCBudGJfdHJhbnNwb3J0X3J4Y19kYih1bnNpZ25lZCBsb25nIGRhdGEpXG4tLVxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE3MTgtXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM6MTcxOTpzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE3MjAtXHRcdFx0XHQgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlcylcbi0tXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MTc4Nz1zdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldClcbi0tXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMTgwMi1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoxODAzOlx0bnRiX3R4X2NvcHlfY2FsbGJhY2soZW50cnksIE5VTEwpO1xuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE4MDQtfVxuLS1cbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYz0xODU0PXN0YXRpYyBpbnQgbnRiX2FzeW5jX3R4X3N1Ym1pdChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsXG4tLVxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE4OTEtXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM6MTg5MjpcdHR4ZC1cdTAwM2VjYWxsYmFja19yZXN1bHQgPSBudGJfdHhfY29weV9jYWxsYmFjaztcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0xODkzLVx0dHhkLVx1MDAzZWNhbGxiYWNrX3BhcmFtID0gZW50cnk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBLY29uZmlnIG9wdGlvbnM6CgoqKkNoZWNraW5nIEtjb25maWcgRGVwZW5kZW5jaWVzIGZvciBOVEIgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGFjdHVhbGx5IGJ1aWxkaW5nIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IG15IEtjb25maWcgZHVja3MgaW4gYSByb3cuIEl0JiMzOTtzIHRpbWUgdG8gdmVyaWZ5IHRoZSBwcmVyZXF1aXNpdGVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBOVEJfTkVUREVWYCBhbmQgYE5UQl9UUkFOU1BPUlRgIGFyZSBwcm9wZXJseSBlbmFibGVkIGFuZCBzZXQgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoZSBOVEIgbmV0d29yayBkZXZpY2Ugc3VwcG9ydCBhbmQgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVyLiBJIGNhbiYjMzk7dCBldmVuICp0aGluayogYWJvdXQgY29tcGlsaW5nIHRoaXMgY29kZSBpZiB0aG9zZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzIGFyZSBtaXNzaW5nIG9yIG1pc2NvbmZpZ3VyZWQuIFNvLCBsZXQmIzM5O3MgaGVhZCB0byB0aGUgS2NvbmZpZyBhbmQgZW5zdXJlIHRob3NlIG9wdGlvbnMgYXJlIHNldCBhcyByZXF1aXJlZC4gSXQmIzM5O3MgYSBxdWljayBidXQgZXNzZW50aWFsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEJfVFJBTlNQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnPTI5PXNvdXJjZSBcJiMzNDtkcml2ZXJzL250Yi90ZXN0L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbnRiL0tjb25maWctMzAtXG5kcml2ZXJzL250Yi9LY29uZmlnOjMxOmNvbmZpZyBOVEJfVFJBTlNQT1JUXG5kcml2ZXJzL250Yi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TlRCIFRyYW5zcG9ydCBDbGllbnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBgTlRCX1RSQU5TUE9SVGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IGFzc2VzcyB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgTlRCX1RSQU5TUE9SVGAuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIG1vZHVsZSAqcmVsaWVzKiBvbiBhbmQsIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBpdCAqZG9lc24mIzM5O3QqIGRlcGVuZCBvbiwgYnV0IHdoaWNoIHdlIG1heSBoYXZlIGFzc3VtZWQgaXQgZGlkLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBkZXBlbmRlbmN5IGdyYXBoIGluIG15IG1pbmQsIG9yIGJldHRlciB5ZXQsIGEgdmlzdWFsaXphdGlvbiBpZiBvbmUgZG9lc24mIzM5O3QgZXhpc3QuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgbWVhbmluZ2Z1bCBpbXBhY3QuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGluZGlyZWN0IGRlcGVuZGVuY2llcyDigJMgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZXMsIHRoZSBzZWNvbmQtb3JkZXIgcmVsYXRpb25zaGlwcyB0aGF0IG9mdGVuIGJpdGUgeW91IGxhdGVyLiBJIG5lZWQgdG8ga25vdyBub3QganVzdCB0aGUgZGlyZWN0IHVwc3RyZWFtIG1vZHVsZXMsIGJ1dCBhbHNvIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIHRoZWlycywgYW5kIHNvIG9uLiBBbnkgdW5leHBlY3RlZCBjb25uZWN0aW9uIGNvdWxkIHBvdGVudGlhbGx5IG1hbmlmZXN0IGluIHN1YnRsZSBidWdzLCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgZG93biB0aGUgcm9hZC4KCkkmIzM5O20gYWxzbyBjb25zaWRlcmluZyB0aGUgKm5hdHVyZSogb2YgdGhlc2UgZGVwZW5kZW5jaWVzLiBBcmUgdGhleSBoYXJkLCBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhleSBtb3JlIGZsZXhpYmxlLCBwZXJoYXBzIHJ1bnRpbWUgbGlua3Mgb3IgaW50ZXJmYWNlcz8gVGhlIHR5cGUgb2YgZGVwZW5kZW5jeSB3aWxsIGdyZWF0bHkgaW5mbHVlbmNlIGhvdyBjaGFuZ2VzIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uCgpJIHdhbnQgdG8ga25vdyBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbHVya2luZy4gQSBjaXJjdWxhciBkZXBlbmRlbmN5IHdvdWxkIGJlIGFuIGFic29sdXRlIG5pZ2h0bWFyZSB3aGVuIHRyeWluZyB0byByZWZhY3Rvci4gSSBhbSB3b25kZXJpbmcgaG93IHRoaXMgdGllcyBpbiB3aXRoIGFueSBuZXcgd29yayBvciBmZWF0dXJlcyB3ZSBhcmUgdHJ5aW5nIHRvIGluY29ycG9yYXRlLgoKRmluYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdG9vbHMgYXQgbXkgZGlzcG9zYWwuIERvIEkgaGF2ZSBhIHJlbGlhYmxlIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCB0aGF0IGNhbiBnZW5lcmF0ZSBhIGNvbXByZWhlbnNpdmUgcmVwb3J0PyBDYW4gSSB0cmFjZSB0aGUgY29ubmVjdGlvbnMgbWFudWFsbHkgaWYgdGhlIHRvb2xpbmcgaXMgaW5hZGVxdWF0ZT8gVGhlIHNwZWVkIGFuZCBhY2N1cmFjeSBvZiBteSBhbmFseXNpcyB3aWxsIGRlcGVuZCBvbiBob3cgZWZmaWNpZW50bHkgSSBjYW4gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5UQl9UUkFOU1BPUlR8ZGVwZW5kcyBvbi4qTlRCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnPTI5PXNvdXJjZSBcJiMzNDtkcml2ZXJzL250Yi90ZXN0L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbnRiL0tjb25maWctMzAtXG5kcml2ZXJzL250Yi9LY29uZmlnOjMxOmNvbmZpZyBOVEJfVFJBTlNQT1JUXG5kcml2ZXJzL250Yi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TlRCIFRyYW5zcG9ydCBDbGllbnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIGRlcGVuZGVuY3kgeW91JiMzOTt2ZSBpZGVudGlmaWVkOgoKKipEZXBlbmRlbmN5IERlZHVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIG9yIHNldHVwLi4uIGFuZCBJJiMzOTttIHNlZWluZyBgTlRCX1RSQU5TUE9SVGAgYW5kIGEgY29uZGl0aW9uYWwgYGlmIE5UQmAuIEl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyLiBgTlRCX1RSQU5TUE9SVGAmIzM5O3MgdmVyeSBleGlzdGVuY2UgKmRlcGVuZHMqIG9uIGBOVEJgIGJlaW5nIGRlZmluZWQuIEl0JiMzOTtzIG5lc3RlZCByaWdodCBpbnNpZGUgdGhhdCBjb25kaXRpb25hbCBibG9jaywgc28gaWYgYE5UQmAgaXNuJiMzOTt0IHNldCwgYE5UQl9UUkFOU1BPUlRgIHNpbXBseSAqd29uJiMzOTt0KiBleGlzdC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LiBUaGVyZSYjMzk7cyBubyB3YXkgYXJvdW5kIGl0LiBNeSBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbSBuZWVkcyB0byByZWZsZWN0IHRoaXMgaGFyZHdpcmVkIHJlbGF0aW9uc2hpcC4gSWYgSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgb3IgY29uZmlndXJpbmcsIHRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBjaGVjay4gVGhpcyBpcyBub3QgYSBjaG9pY2UsIGl0JiMzOTtzIGEgYnVpbHQtaW4gY29uc3RyYWludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWYgTlRCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnPTI9bWVudWNvbmZpZyBOVEJcbi0tXG5kcml2ZXJzL250Yi9LY29uZmlnLTEzLVxuZHJpdmVycy9udGIvS2NvbmZpZzoxNDppZiBOVEJcbmRyaXZlcnMvbnRiL0tjb25maWctMTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDM1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBEZXBlbmRlbmNpZXMgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gc3RhcnRpbmcgYSBuZXcgaW50ZWdyYXRpb24gb3IgcHJvamVjdCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIHNxdWFyZWx5IG9uIHRoZSBuZWNlc3NhcnkgY29yZSBjb21wb25lbnRzLiBSaWdodCBub3csIEkmIzM5O20gdGhpbmtpbmcgd2UmIzM5O3JlIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBgTlRCYCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBUaGVuIHRoZXJlJiMzOTtzIGBOVEJfVFJBTlNQT1JUYCDigJMgb2J2aW91c2x5IGVzc2VudGlhbCBmb3IgZGF0YSBtb3ZlbWVudC4gQW5kIG9mIGNvdXJzZSwgd2UmIzM5O2xsIG5lZWQgYE5UQl9ORVRERVZgIHRvIGRlYWwgd2l0aCBuZXR3b3JrIGRldmljZSBhc3BlY3RzLgoKQnV0IEkga25vdyBiZXR0ZXIgdGhhbiB0byBqdXN0IGFzc3VtZSB0aG9zZSBhcmUgdGhlICpvbmx5KiBwaWVjZXMgd2UmIzM5O2xsIG5lZWQuIE15IGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0aGF0IGRlcGVuZGVuY2llcyBjYW4gYmUgc25lYWt5LCBwb3BwaW5nIHVwIGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZG8gYSB0aG9yb3VnaCBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHZpdGFsIGNvbXBvbmVudHMgdGhhdCB0aGVzZSB0aHJlZSBtaWdodCByZWx5IG9uLCBvciB0aGF0IHRoaXMgc2V0dXAgbWlnaHQgcmVxdWlyZS4gTmVlZCB0byBkb3QgbXkgaSYjMzk7cyBhbmQgY3Jvc3MgbXkgdCYjMzk7cyBvbiB0aGlzLiBHb3R0YSBiZSBjb21wbGV0ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz02PW1lbnVjb25maWcgTkVUREVWSUNFU1xuZHJpdmVycy9uZXQvS2NvbmZpZy03LVx0ZGVmYXVsdCB5IGlmIFVNTFxuZHJpdmVycy9uZXQvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBORVRcbmRyaXZlcnMvbmV0L0tjb25maWctOS1cdGJvb2wgXCYjMzQ7TmV0d29yayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDE9Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQzOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0Olx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NzQ9Y29uZmlnIFdJUkVHVUFSRFxuZHJpdmVycy9uZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O1dpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NzY6XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy03Ny1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9OTI9Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xuZHJpdmVycy9uZXQvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo5NDpcdGRlcGVuZHMgb24gV0lSRUdVQVJEXG5kcml2ZXJzL25ldC9LY29uZmlnLTk1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MTAzPWNvbmZpZyBPVlBOXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNC1cdHRyaXN0YXRlIFwmIzM0O09wZW5WUE4gZGF0YSBjaGFubmVsIG9mZmxvYWRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MTA1Olx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMTA2LVx0c2VsZWN0IERTVF9DQUNIRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MTM2PWNvbmZpZyBORVRfRkNcbmRyaXZlcnMvbmV0L0tjb25maWctMTM3LVx0Ym9vbCBcJiMzNDtGaWJyZSBDaGFubmVsIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjEzODpcdGRlcGVuZHMgb24gU0NTSSBcdTAwMjZcdTAwMjYgUENJXG5kcml2ZXJzL25ldC9LY29uZmlnLTEzOS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTE0OT1jb25maWcgSUZCXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1MC1cdHRyaXN0YXRlIFwmIzM0O0ludGVybWVkaWF0ZSBGdW5jdGlvbmFsIEJsb2NrIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MTUxOlx0ZGVwZW5kcyBvbiBORVRfQUNUX01JUlJFRCB8fCBORlRfRldEX05FVERFVlxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNTItXHRzZWxlY3QgTkVUX1JFRElSRUNUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0xNzk9Y29uZmlnIE1BQ1ZUQVBcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVx0dHJpc3RhdGUgXCYjMzQ7TUFDLVZMQU4gYmFzZWQgdGFwIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoxODE6XHRkZXBlbmRzIG9uIE1BQ1ZMQU5cbmRyaXZlcnMvbmV0L0tjb25maWc6MTgyOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTE4My1cdHNlbGVjdCBUQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTE5Mz1jb25maWcgSVBWTEFOX0wzU1xuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTQ6XHRkZXBlbmRzIG9uIE5FVEZJTFRFUlxuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTU6XHRkZXBlbmRzIG9uIElQVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0xOTYtXHRkZWZfYm9vbCB5XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0xOTk9Y29uZmlnIElQVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMDAtXHR0cmlzdGF0ZSBcJiMzNDtJUC1WTEFOIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjAxOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTIwMi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXG5kcml2ZXJzL25ldC9LY29uZmlnLTIxNy1cdHRyaXN0YXRlIFwmIzM0O0lQLVZMQU4gYmFzZWQgdGFwIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTg6XHRkZXBlbmRzIG9uIElQVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTk6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjIwLVx0c2VsZWN0IFRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjMwPWNvbmZpZyBWWExBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjMyOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMy1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjQ1PWNvbmZpZyBHRU5FVkVcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ2LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjQ3Olx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0OC1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2MS1cdHRyaXN0YXRlIFwmIzM0O0JhcmUgVURQIEVuY2Fwc3VsYXRpb25cJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjYyOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2My1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjcyPWNvbmZpZyBHVFBcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVx0dHJpc3RhdGUgXCYjMzQ7R1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyNzQ6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjc1LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yODk9Y29uZmlnIFBGQ1BcbmRyaXZlcnMvbmV0L0tjb25maWctMjkwLVx0dHJpc3RhdGUgXCYjMzQ7UGFja2V0IEZvcndhcmRpbmcgQ29udHJvbCBQcm90b2NvbCAoUEZDUClcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MjkxOlx0ZGVwZW5kcyBvbiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTI5Mi1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzAyPWNvbmZpZyBBTVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzAzLVx0dHJpc3RhdGUgXCYjMzQ7QXV0b21hdGljIE11bHRpY2FzdCBUdW5uZWxpbmcgKEFNVClcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MzA0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJUF9NVUxUSUNBU1RcbmRyaXZlcnMvbmV0L0tjb25maWctMzA1LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMjc9Y29uZmlnIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzI4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozMjk6XHRkZXBlbmRzIG9uIFBSSU5US1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMzQ9Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozMzY6XHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUyBcdTAwMjZcdTAwMjYgXFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzM3LVx0XHRcdCEoTkVUQ09OU09MRT15IFx1MDAyNlx1MDAyNiBDT05GSUdGU19GUz1tKVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzQ1PWNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDgtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM1NT1jb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozNTc6XHRkZXBlbmRzIG9uIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1OC1cdGRlZmF1bHQgblxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzczPWNvbmZpZyBOVEJfTkVUREVWXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3NC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjM3NTpcdGRlcGVuZHMgb24gTlRCX1RSQU5TUE9SVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzYtXG5kcml2ZXJzL25ldC9LY29uZmlnPTM3Nz1jb25maWcgUklPTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3OC1cdHRyaXN0YXRlIFwmIzM0O1JhcGlkSU8gRXRoZXJuZXQgb3ZlciBtZXNzYWdpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc5Olx0ZGVwZW5kcyBvbiBSQVBJRElPXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4MC1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzgxPWNvbmZpZyBSSU9ORVRfVFhfU0laRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zODItXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIG91dGJvdW5kIHF1ZXVlIGVudHJpZXNcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MzgzOlx0ZGVwZW5kcyBvbiBSSU9ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzg0LVx0ZGVmYXVsdCBcJiMzNDsxMjhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcbmRyaXZlcnMvbmV0L0tjb25maWctMzg3LVx0aW50IFwmIzM0O051bWJlciBvZiBpbmJvdW5kIHF1ZXVlIGVudHJpZXNcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzg4Olx0ZGVwZW5kcyBvbiBSSU9ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzg5LVx0ZGVmYXVsdCBcJiMzNDsxMjhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTM5MT1jb25maWcgVFVOXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozOTM6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzk0LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00NDM9Y29uZmlnIFZJUlRJT19ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ0LVx0dHJpc3RhdGUgXCYjMzQ7VmlydGlvIG5ldHdvcmsgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0NTpcdGRlcGVuZHMgb24gVklSVElPXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ni1cdHNlbGVjdCBORVRfRkFJTE9WRVJcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ2Mz1jb25maWcgTkVUS0lUXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cdGJvb2wgXCYjMzQ7QlBGLXByb2dyYW1tYWJsZSBuZXR3b3JrIGRldmljZVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo0NjU6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2Ni1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ3Mj1jb25maWcgTkVUX1ZSRlxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzMtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ3NDpcdGRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ3NTpcdGRlcGVuZHMgb24gTkVUX0wzX01BU1RFUl9ERVZcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc2Olx0ZGVwZW5kcyBvbiBJUFY2X01VTFRJUExFX1RBQkxFUyB8fCBJUFY2PW5cbmRyaXZlcnMvbmV0L0tjb25maWctNDc3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDgxPWNvbmZpZyBWU09DS01PTlxuZHJpdmVycy9uZXQvS2NvbmZpZy00ODItXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIHZzb2NrIG1vbml0b3JpbmcgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ4MzpcdGRlcGVuZHMgb24gVkhPU1RfVlNPQ0tcbmRyaXZlcnMvbmV0L0tjb25maWctNDg0LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDg5PWNvbmZpZyBNSElfTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ5MC1cdHRyaXN0YXRlIFwmIzM0O01ISSBuZXR3b3JrIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo0OTE6XHRkZXBlbmRzIG9uIE1ISV9CVVNcbmRyaXZlcnMvbmV0L0tjb25maWctNDkyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0NS1cdHRyaXN0YXRlIFwmIzM0O1hlbiBuZXR3b3JrIGRldmljZSBmcm9udGVuZCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ2Olx0ZGVwZW5kcyBvbiBYRU5cbmRyaXZlcnMvbmV0L0tjb25maWctNTQ3LVx0c2VsZWN0IFhFTl9YRU5CVVNfRlJPTlRFTkRcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTU2Mj1jb25maWcgWEVOX05FVERFVl9CQUNLRU5EXG5kcml2ZXJzL25ldC9LY29uZmlnLTU2My1cdHRyaXN0YXRlIFwmIzM0O1hlbiBiYWNrZW5kIG5ldHdvcmsgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjU2NDpcdGRlcGVuZHMgb24gWEVOX0JBQ0tFTkRcbmRyaXZlcnMvbmV0L0tjb25maWctNTY1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4NS1cdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBWTVhORVQzIGV0aGVybmV0IGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODY6XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODc6XHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODgtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01OTQ9Y29uZmlnIEZVSklUU1VfRVNcbmRyaXZlcnMvbmV0L0tjb25maWctNTk1LVx0dHJpc3RhdGUgXCYjMzQ7RlVKSVRTVSBFeHRlbmRlZCBTb2NrZXQgTmV0d29yayBEZXZpY2UgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjU5NjpcdGRlcGVuZHMgb24gQUNQSVxuZHJpdmVycy9uZXQvS2NvbmZpZy01OTctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA2Olx0ZGVwZW5kcyBvbiBERUJVR19GU1xuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDc6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA4Olx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDk6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cdHNlbGVjdCBORVRfREVWTElOS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODczMwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYE5UQmAgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYE5UQl9ORVRERVZgIHJlbGllcyBkaXJlY3RseSBvbiBgTlRCX1RSQU5TUE9SVGAuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgbmV0d29yayBkZXZpY2UgbmVlZHMgYSB0cmFuc3BvcnQgbGF5ZXIuIE5vdywgYE5UQl9UUkFOU1BPUlRgIGl0c2VsZiBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIGJhc2UgYE5UQmAgbW9kdWxlLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgc28gZmFyLCB0aGUgcmVsYXRpb25zaGlwcyBhcmUgY2xlYXI6IE5FVERFViAtJmd0OyBUUkFOU1BPUlQgLSZndDsgTlRCLiBCdXQgSSBhbHdheXMgbGlrZSB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLiBEZXBlbmRlbmNpZXMgY2FuIGJlIHNuZWFreSwgZXNwZWNpYWxseSBpbiBzb21ldGhpbmcgYXMgY29tcGxleCBhcyBhIGtlcm5lbCBkcml2ZXIuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkgc2hvdWxkIHByb2JhYmx5IG9wZW4gdXAgYGRyaXZlcnMvbnRiL0tjb25maWdgIGFuZCBzY2FuIHRocm91Z2ggdGhlIG9wdGlvbnMgdGhlcmUgdG8gYmUgY29tcGxldGVseSBzdXJlLiBTb21ldGltZXMgdGhlcmUgYXJlIGhpZGRlbiBkZXBlbmRlbmNpZXMgb3IgY29uZGl0aW9uYWwgcmVxdWlyZW1lbnRzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBhcHBhcmVudCBmcm9tIGEgY3Vyc29yeSBnbGFuY2UuIEJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBmdW5kYW1lbnRhbCBkcml2ZXIgYnVpbGRpbmcgYmxvY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9LY29uZmlnPTI9bWVudWNvbmZpZyBOVEJcbmRyaXZlcnMvbnRiL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9udGIvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbnRiL0tjb25maWctNS1cdGhlbHBcbi0tXG5kcml2ZXJzL250Yi9LY29uZmlnPTE2PWNvbmZpZyBOVEJfTVNJXG5kcml2ZXJzL250Yi9LY29uZmlnLTE3LVx0Ym9vbCBcJiMzNDtNU0kgSW50ZXJydXB0IFN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbnRiL0tjb25maWc6MTg6XHRkZXBlbmRzIG9uIFBDSV9NU0lcbmRyaXZlcnMvbnRiL0tjb25maWctMTktXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTU4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTlRCIENvbmZpZ3VyYXRpb24gRGlsZW1tYSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgTlRCIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGUgZGVwZW5kZW5jeSDigJMgYE5UQmAgcmVsaWVzIG9uIGBQQ0lgLiBNYWtlcyBzZW5zZSwgdGhlIGhhcmR3YXJlIGludGVyZmFjZS4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGluY2x1ZGUgYWxsIHRoZSByZWxldmFudCBvcHRpb25zIHRvIGdldCB0aGlzIHRoaW5nIHVwIGFuZCBydW5uaW5nIHByb3Blcmx5LiBMZXQmIzM5O3MgYWRkIGBOVEJgLCBgTlRCX1RSQU5TUE9SVGAsIGFuZCBgTlRCX05FVERFVmAgdG8gdGhlIG1peC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGNvbXBvbmVudHMuCgpXYWl0IGEgc2Vjb25k4oCmIHdhc24mIzM5O3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IHN5emthbGxlciBoYXZpbmcgYSBkdW1teSBOVEIgZHJpdmVyPyBJIGNvdWxkIGJlIGltYWdpbmluZyB0aGluZ3MsIGJ1dCBpdCYjMzk7cyB3b3J0aCBhIGRvdWJsZS1jaGVjay4gT2theSwgeWVhaCwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdGVzdCBkcml2ZXIgYW5kIGl0cyByZWxhdGVkIGNvbmZpZyBvcHRpb25zIGJ5IGNoZWNraW5nIGBkcml2ZXJzL250Yi90ZXN0L0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXprYWxsZXIgZHJpdmVyIGRvZXNuJiMzOTt0IGNvbmZsaWN0IHdpdGggbXkgY29uZmlndXJhdGlvbi4gSSBob3BlIHRoaXMgY292ZXJzIGV2ZXJ5dGhpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL250Yi90ZXN0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoyOmNvbmZpZyBOVEJfUElOR1BPTkdcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRCIFBpbmcgUG9uZyBUZXN0IENsaWVudFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0xMC1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoxMTpjb25maWcgTlRCX1RPT0xcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0xMi1cdHRyaXN0YXRlIFwmIzM0O05UQiBEZWJ1Z2dpbmcgVG9vbCBUZXN0IENsaWVudFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoyMjpjb25maWcgTlRCX1BFUkZcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O05UQiBSQVcgUGVyZiBNZWFzdXJpbmcgVG9vbFwmIzM0O1xuLS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yOS1cbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzozMDpjb25maWcgTlRCX01TSV9URVNUXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMzEtXHR0cmlzdGF0ZSBcJiMzNDtOVEIgTVNJIFRlc3QgQ2xpZW50XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEJ1ZyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBEaWQgSSBqdXN0IHNlZSBzb21ldGhpbmcgYWJvdXQgYHN5el9udGJgPyBUaGF0IGNhbiYjMzk7dCBiZSByaWdodC4gVGhlIGRvY3VtZW50YXRpb24gZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGlzIHRvb2wgKmNhbm5vdCogYmUgdXNlZCBmb3IgbG9va2luZyBhdCBzeXprYWxsZXImIzM5O3Mgb3duIHBzZXVkby1zeXNjYWxscyBsaWtlIGFueXRoaW5nIHByZWZpeGVkIHdpdGggYHN5el9gLiBUaGV5IGFyZW4mIzM5O3QgaW4gdGhlIGtlcm5lbCwgc28gd2hhdCYjMzk7cyBnb2luZyBvbj8gSWYgc3l6a2FsbGVyIGZvdW5kIGEgYnVnIHJlbGF0ZWQgdG8gTlRCLCBpdCBtdXN0IGJlIHRlc3RhYmxlIHNvbWVob3cuCgpSaWdodCwgdGhlcmUgaGFzIHRvIGJlIGEgcmVhbCBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHRoaW5rLi4uIGEgdmlydHVhbCBOVEIgZHJpdmVyPyBUaGF0JiMzOTtzIHBsYXVzaWJsZS4gV2hlcmUgd291bGQgdGhhdCBsaXZlPyBBaCwgcHJvYmFibHkgaW4gYGRyaXZlcnMvbnRiL2h3L2VwZi9gLiBUaGF0IG1ha2VzIHNlbnNlLgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeSBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSG9wZWZ1bGx5LCB0aGF0IGdpdmVzIHVzIHRoZSBjb250ZXh0IHdlIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwOTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRVBGIEtjb25maWcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBFUEYgaGFyZHdhcmUgd2l0aGluIHRoZSBOVEIgZHJpdmVyLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkcml2ZXJzL250Yi9ody9lcGYvS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIGRlY2lzaW9ucyBmb3IgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBhcmUgbGlrZWx5IGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBlYWNoIG9wdGlvbiBoYXMgb24gdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvciBhbmQgcGVyZm9ybWFuY2UuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGdyYXNwaW5nIGhvdyB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIHBpZWNlIGlzIGNvbnRyb2xsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIE5UQl9FUEZcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgRVBGIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFwmIzM0O1xuICAgMzpcdFx0aGVscFxuICAgNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBFUEYgTlRCIG9uIGNvbmZpZ3VyYWJsZSBlbmRwb2ludC5cbiAgIDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgTlRCOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKT2theSwgc28gYE5UQl9FUEZgIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzLiBUaGF0JiMzOTtzIGdvb2QuIEFuZCBzaW5jZSBzeXprYWxsZXIgZm91bmQgYSBidWcsIHRoZSBhZmZlY3RlZCBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaW1lIHRvIGJyZWFrIHRoaXMgZG93biBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucy4KClRoZSBpbnN0cnVjdGlvbnMgc2F5IHRoYXQgaWYgdGhlcmUmIzM5O3MgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLCB0aGVuIHdlIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuICBTaW5jZSB0aGVyZSYjMzk7cyBhIGJ1ZywgdGhhdCYjMzk7cyB3aGF0IHdlIGhhdmUgaGVyZS4gU28sIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk5vdywgd2UgbmVlZCB0byBleHRyYWN0IHRoZSBpbXBvcnRhbnQga2VybmVsIGZ1bmN0aW9ucyBmb3IgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBzZWUuLi4gIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgLCBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCwgYW5kIGBudGJfdHhfY29weV9jYWxsYmFja2Agc2VlbSBsaWtlIHRoZSBrZXkgcGxheWVycyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIEkgaGF2ZSBjb25maXJtZWQgdGhhdC4KCk5leHQgdXAgYXJlIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFdlIG5lZWQgdG8gZGVmaW5lIHdoaWNoIGNvbmZpZyBvcHRpb25zIGFyZSBuZWVkZWQuIFRoZSBvYnZpb3VzIG9uZXMgaGVyZSBhcmUgYE5UQmAsIGBOVEJfVFJBTlNQT1JUYCwgYW5kIGBOVEJfTkVUREVWYC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHdlIGlkZW50aWZpZWQuICBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGlzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZS4gIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIEhvd2V2ZXIsIGl0ICppcyogdXNlZCBhcyBhIGNhbGxiYWNrOiBgdHhkLSZndDtjYWxsYmFja19yZXN1bHQgPSBudGJfdHhfY29weV9jYWxsYmFjaztgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBpbmxpbmVkIGFuZCBoYXMgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgc28gaXQgc2hvdWxkIGJlIGZpbmUuICBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBwZXJmZWN0LiAgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaXMgc3RhdGljLCBidXQgaXMgYSBuZXRkZXYgb3A6IGAubmRvX3N0YXJ0X3htaXQgPSBudGJfbmV0ZGV2X3N0YXJ0X3htaXQsYCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgaW5saW5lZCwgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgYW4gZW50cnkgcG9pbnQuCgpPa2F5LCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQ/IGBudGJfbmV0ZGV2X21heWJlX3N0b3BfdHhgIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGRpcmVjdGx5LCB3aGljaCBtYWtlcyBpdCBhIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcuIFdlICpkb24mIzM5O3QqIHdhbnQgdGhhdC4gU28gbGV0JiMzOTtzIHNraXAgdGhhdC4KCkhtbSwgYG50Yl9wcm9jZXNzX3R4YCBpbiBgZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jYC4uLiBUaGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQhIExldCYjMzk7cyBleGFtaW5lIHRoZSBkaWZmLiBBaCwgc29tZSBsaW5lcyB3ZXJlIHJlbW92ZWQuIFRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgc3RhdGljLiAgSXMgaXQgYW4gZW50cnkgcG9pbnQ/IE5vLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBvdGhlciBmdW5jdGlvbnMsIGxpa2UgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAsIHdoaWNoIGlzIHByb2JhYmx5IHRoZSBtYWluIGVudHJ5IHBvaW50LiBTbywgd2UgYWxyZWFkeSBoYXZlIHRoYXQuCgpOb3cgbGV0JiMzOTtzIGNoZWNrIGBudGJfbmV0ZGV2X3R4X3RpbWVyYCBpbiBgZHJpdmVycy9uZXQvbnRiX25ldGRldi5jYC4gV2FpdCEgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaXMgbW9kaWZpZWQuIEFuZCB0aGUgZGlmZiBzaG93cyBhIGNvZGUgY2hhbmdlIGhlcmUuCgpTbywgbGV0JiMzOTtzIHJldmlldzogT3VyIGBGb2N1c1N5bWJvbHNgOiBgbnRiX25ldGRldl9zdGFydF94bWl0YCwgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAsIGBudGJfdHhfY29weV9jYWxsYmFja2AuIGFuZCBvdXIgYEVuYWJsZUNvbmZpZ3NgOiBgTlRCYCwgYE5UQl9UUkFOU1BPUlRgLCBgTlRCX05FVERFVmAuCgpBbnl0aGluZyBlbHNlPyBJcyBgTlRCX0VQRmAgcmVsZXZhbnQ/ICBXZSBkb24mIzM5O3Qga25vdyBmb3Igc3VyZSwgYXMgc3l6a2FsbGVyIGNvdWxkIGJlIHVzaW5nIHNvbWV0aGluZyBlbHNlLiBEb2VzIHN5emthbGxlciBoYXZlIGEgZHVtbXkgTlRCIGRyaXZlcj8gIExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9udGIvaHcvYC4gIGBOVEJfUElOR1BPTkdgPyAgTm8sIHRoYXQmIzM5O3MgYSB0ZXN0IGNsaWVudCwgbm90IGEgaGFyZHdhcmUgZHJpdmVyLiAgYE5UQl9ORVRERVZgIGlzIGEgY2xpZW50LiBXaGF0JiMzOTtzIHRoZSBoYXJkd2FyZT8gSSBzaG91bGQgbG9vayBmb3IgaGFyZHdhcmUsIG9yIGEgYGR1bW15YCBkcml2ZXIgaW4gYGRyaXZlcnMvbnRiL2h3L2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL250Yi9ody8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ1MAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA3MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5UQiBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTlRCIChOb24tVHJhbnNwYXJlbnQgQnJpZGdlKSBkcml2ZXIgcGF0Y2gsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdHJhbnNtaXQgcGF0aC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgYW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCB0ZXN0aW5nLCBlc3BlY2lhbGx5IGZ1enppbmcgd2l0aCB0b29scyBsaWtlIHN5emthbGxlci4KCkZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBoYXJkd2FyZSB2YXJpYXRpb25zLiBJJiMzOTttIHdvbmRlcmluZyB3aGljaCBzcGVjaWZpYyBOVEIgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zIGFyZSBhZmZlY3RlZDogYGRyaXZlcnMvbnRiL2h3L2lkdC9gLCBgZHJpdmVycy9udGIvaHcvaW50ZWwvYCwgYGRyaXZlcnMvbnRiL2h3L2FtZC9gLCBgZHJpdmVycy9udGIvaHcvbXNjYy9gLCBgZHJpdmVycy9udGIvaHcvZXBmL2AuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBzcGVjaWZ5IGEgJiMzNDtkdW1teSYjMzQ7IGRyaXZlciwgc28gaXQgcHJvYmFibHkgaXMgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgdmlydHVhbCBQQ0kgZnJhbWV3b3JrIG9yIHRoZSBnZW5lcmljIGBOVEJfRVBGYCBtb2R1bGUuCgpUaGUgZmFjdCB0aGF0IHRoZSBidWcgcmVwb3J0IGNhbWUgZnJvbSBgc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0O2AgaXMgc2lnbmlmaWNhbnQuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBzeXprYWxsZXIgKmlzKiBjYXBhYmxlIG9mIHRlc3RpbmcgdGhpcyBOVEIgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZ3JlYXQuIEkganVzdCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb3ZlcmFnZSwgYW5kIHRoZSBvYnZpb3VzIG9uZXMgYXJlIGBOVEJgLCBgTlRCX1RSQU5TUE9SVGAsIGFuZCBgTlRCX05FVERFVmAuIEkmIzM5O2xsIHByb3ZpZGUgdGhvc2UgY29uZmlndXJhdGlvbnMgaW4gdGhlIHJlc3VsdC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biBkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgYE5UQl9ORVRERVZgIHJlbGllcyBvbiBgTlRCX1RSQU5TUE9SVGAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGBOVEJgLCBhbmQgYE5UQmAgZGVwZW5kcyBvbiBgUENJYC4gVGhlIGBQQ0lgIGNvbmZpZyBzaG91bGQgYmUgc3RhbmRhcmQsIGJ1dCBJIHdpbGwgbWFrZSBub3RlIG9mIGl0LgoKTmV4dCwgSSBuZWVkIHRvIGRlZmluZSB0aGUgc3ltYm9scyB0aGF0IGFyZSBjaGFuZ2VkIGluIHRoZSBwYXRjaC4gSSYjMzk7bGwgY2hlY2sgd2hpY2ggZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IHJlYWNoYWJsZS4gTGV0JiMzOTtzIHNlZS4uLiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGlzbiYjMzk7dCBleHBvcnRlZCwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBpdCBpc24mIzM5O3QgcmVsZXZhbnQsIHNpbmNlIGl0JiMzOTtzIHVzZWQgd2l0aGluIGV4cG9ydGVkIGZ1bmN0aW9ucy4gYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgaXMgZXhwb3J0ZWQuIEFuZCBgbnRiX25ldGRldl9zdGFydF94bWl0YCBpc24mIzM5O3QgZGlyZWN0bHkgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBhIGBuZG9fc3RhcnRfeG1pdGAgY2FsbGJhY2ssIHNvIGl0ICppcyogcmVhY2hhYmxlLgoKU28sIGJhc2VkIG9uIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBhbmQgbXkgY29kZSBhbmFseXNpcywgdGhlIGtleSBzeW1ib2xzIHRoYXQgcmVwcmVzZW50IHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBhcmU6IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgLCBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCwgYW5kIGBudGJfdHhfY29weV9jYWxsYmFja2AuIFRoZXNlIGFyZSB0aGUgb25lcyBJJiMzOTtsbCBoaWdobGlnaHQgYXMgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbmV0d29yayB0cmFuc21pc3Npb24gYW5kIHRoZSBoYW5kbGluZyBvZiBxdWV1ZSBzdG9wcywgZXJyb3JzLCBsaW5rIHN0YXR1cyBhbmQgZnJhbWUgc2l6ZSBsaW1pdHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGZ1bmN0aW9uIG5hbWVzIG9uZSBsYXN0IHRpbWUuIFllcCwgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCBpcyBpbmRlZWQgYHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpYC4gQW5kIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGlzIGBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KWAuIEFuZCBmaW5hbGx5LCBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpcyBgaW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKWAuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gSSYjMzk7bGwgY29uZmlndXJlIG15IHJlc3VsdCB1c2luZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05UQiYjMzQ7LAogICAgJiMzNDtOVEJfVFJBTlNQT1JUJiMzNDssCiAgICAmIzM0O05UQl9ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGJfbmV0ZGV2X3N0YXJ0X3htaXQmIzM0OywKICAgICYjMzQ7bnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlJiMzNDssCiAgICAmIzM0O250Yl90eF9jb3B5X2NhbGxiYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVEIgKE5vbi1UcmFuc3BhcmVudCBCcmlkZ2UpIG5ldGRldiBkcml2ZXIgYW5kIHRyYW5zcG9ydCBsYXllciB0byBmaXggYSBidWcgaW4gdGhlIHRyYW5zbWl0IHBhdGguIEl0IGNoYW5nZXMgaG93IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGhhbmRsZXMgcXVldWUgc3RvcHMgYW5kIGVycm9ycywgYW5kIG1vZGlmaWVzIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIHRvIGNoZWNrIGZvciBsaW5rIHN0YXR1cyBhbmQgZnJhbWUgc2l6ZSBsaW1pdHMuIEl0IGFsc28gdXBkYXRlcyBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGNvcnJlY3RseSBoYW5kbGUgRE1BIGNvcHkgcmVzdWx0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgbmV0d29yayB0cmFuc21pdCBwYXRocyBvdmVyIE5UQiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRCJiMzNDssCiAgICAmIzM0O05UQl9UUkFOU1BPUlQmIzM0OywKICAgICYjMzQ7TlRCX05FVERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250Yl9uZXRkZXZfc3RhcnRfeG1pdCYjMzQ7LAogICAgJiMzNDtudGJfdHJhbnNwb3J0X3R4X2VucXVldWUmIzM0OywKICAgICYjMzQ7bnRiX3R4X2NvcHlfY2FsbGJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5UQiAoTm9uLVRyYW5zcGFyZW50IEJyaWRnZSkgbmV0ZGV2IGRyaXZlciBhbmQgdHJhbnNwb3J0IGxheWVyIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgdHJhbnNtaXQgcGF0aC4gSXQgY2hhbmdlcyBob3cgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaGFuZGxlcyBxdWV1ZSBzdG9wcyBhbmQgZXJyb3JzLCBhbmQgbW9kaWZpZXMgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgdG8gY2hlY2sgZm9yIGxpbmsgc3RhdHVzIGFuZCBmcmFtZSBzaXplIGxpbWl0cy4gSXQgYWxzbyB1cGRhdGVzIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gY29ycmVjdGx5IGhhbmRsZSBETUEgY29weSByZXN1bHRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGhzIG92ZXIgTlRCLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA1OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsb2dpYyBidWdzLCBxdWV1ZSBtYW5hZ2VtZW50LCBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHF1ZXVlIHN0YXJ2YXRpb24gaXNzdWVzIGluIHRoZSBOVEIgbmV0ZGV2IGRyaXZlci4gSXQgbW9kaWZpZXMgZXJyb3IgaGFuZGxpbmcgZm9yIHBhY2tldCB0cmFuc21pc3Npb24sIG1vdmVzIGEgZnJhbWUgc2l6ZSBjaGVjayB0byBhbiBlYXJsaWVyIHN5bmNocm9ub3VzIHN0YWdlIChgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCksIGFuZCBjaGFuZ2VzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gYWRkIHRoZSBlbnRyeSBiYWNrIHRvIHRoZSBmcmVlIHF1ZXVlIGJlZm9yZSBpbnZva2luZyB0aGUgdHJhbnNtaXNzaW9uIGhhbmRsZXIuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkIGluIGNvbnRyb2wgZmxvdyBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjZmNTVlZjU2Yjc5YTI5ZTc1ZjgxMWJiYTlhMDdkZmJiYzZhMTVlNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA1OjUzOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jCmluZGV4IDAyOWE0YTUzMmExMDQuLjAyYjM1Y2Y1M2E2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L250Yl9uZXRkZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMKQEAgLTE5OSw4ICYjNDM7MTk5LDEwIEBAIHN0YXRpYyBpbnQgX19udGJfbmV0ZGV2X21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIHN0YXRpYyBpbnQgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJCSAgICBzdHJ1Y3QgbnRiX25ldGRldl9xdWV1ZSAqcSwgaW50IHNpemUpCiB7Ci0JaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChuZGV2LCBxLSZndDtxaWQpIHx8Ci0JICAgIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS0mZ3Q7cXApICZndDs9IHNpemUpKQomIzQzOwlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5kZXYsIHEtJmd0O3FpZCkpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAobnRiX3RyYW5zcG9ydF90eF9mcmVlX2VudHJ5KHEtJmd0O3FwKSAmZ3Q7PSBzaXplKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBfX250Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCBzaXplKTsKQEAgLTI1NiwyMSAmIzQzOzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAKIAlxID0gJmFtcDtkZXYtJmd0O3F1ZXVlc1txaWRdOwogCi0JbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApOwomIzQzOwlpZiAodW5saWtlbHkobnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApKSkKJiM0MzsJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCXJjID0gbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHEtJmd0O3FwLCBza2IsIHNrYi0mZ3Q7ZGF0YSwgc2tiLSZndDtsZW4pOwotCWlmIChyYykKLQkJZ290byBlcnI7CiYjNDM7CWlmIChyYykgewomIzQzOwkJaWYgKHJjID09IC1FQUdBSU4gfHwgcmMgPT0gLUVCVVNZKSB7CiYjNDM7CQkJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZGV2LCBxLSZndDtxaWQpOwomIzQzOwkJCW1vZF90aW1lcigmYW1wO3EtJmd0O3R4X3RpbWVyLAomIzQzOwkJCQkgIGppZmZpZXMgJiM0MzsgdXNlY3NfdG9famlmZmllcyh0eF90aW1lKSk7CiYjNDM7CQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZ290byBkcm9wOwomIzQzOwl9CiAKIAkvKiBjaGVjayBmb3IgbmV4dCBzdWJtaXQgKi8KIAludGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCi1lcnI6CiYjNDM7ZHJvcDoKJiM0MzsJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAluZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKLQluZGV2LSZndDtzdGF0cy50eF9lcnJvcnMmIzQzOyYjNDM7OwotCXJldHVybiBORVRERVZfVFhfQlVTWTsKJiM0MzsJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgbnRiX25ldGRldl90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYwppbmRleCBmNTlmOTI2ZDRiZmFhLi5mOWNhYTFhNjUzYzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jCkBAIC0xNzE5LDkgJiM0MzsxNzE5LDE2IEBAIHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsCiAJCQkJIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpCiB7CiYjNDM7CXN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIgX19pb21lbSAqaGRyOwogCXN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5ID0gZGF0YTsKLQlzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAgPSBlbnRyeS0mZ3Q7cXA7Ci0Jc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHIgPSBlbnRyeS0mZ3Q7dHhfaGRyOwomIzQzOwlzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXA7CiYjNDM7CXVuc2lnbmVkIGludCBsZW47CiYjNDM7CXZvaWQgKmNiX2RhdGE7CiYjNDM7CiYjNDM7CXFwID0gZW50cnktJmd0O3FwOwomIzQzOwloZHIgPSBlbnRyeS0mZ3Q7dHhfaGRyOwomIzQzOwljYl9kYXRhID0gZW50cnktJmd0O2NiX2RhdGE7CiYjNDM7CWxlbiA9IGVudHJ5LSZndDtsZW47CiAKIAkvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEgKi8KIAlpZiAocmVzKSB7CkBAIC0xNzY4LDE1ICYjNDM7MTc3NSwxMyBAQCBzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLAogCSAqICYjMzQ7bGluayBkb3duJiMzNDsgb3Igc2ltaWxhci4gIFNpbmNlIG5vIHBheWxvYWQgaXMgYmVpbmcgc2VudCBpbiB0aGVzZQogCSAqIGNhc2VzLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZCB0byB0aGUgY29tcGxldGlvbiBxdWV1ZS4KIAkgKi8KLQlpZiAoZW50cnktJmd0O2xlbiAmZ3Q7IDApIHsKLQkJcXAtJmd0O3R4X2J5dGVzICYjNDM7PSBlbnRyeS0mZ3Q7bGVuOwotCi0JCWlmIChxcC0mZ3Q7dHhfaGFuZGxlcikKLQkJCXFwLSZndDt0eF9oYW5kbGVyKHFwLCBxcC0mZ3Q7Y2JfZGF0YSwgZW50cnktJmd0O2NiX2RhdGEsCi0JCQkJICAgICAgIGVudHJ5LSZndDtsZW4pOwotCX0KJiM0MzsJaWYgKGxlbiAmZ3Q7IDApCiYjNDM7CQlxcC0mZ3Q7dHhfYnl0ZXMgJiM0Mzs9IGxlbjsKIAogCW50Yl9saXN0X2FkZCgmYW1wO3FwLSZndDtudGJfdHhfZnJlZV9xX2xvY2ssICZhbXA7ZW50cnktJmd0O2VudHJ5LCAmYW1wO3FwLSZndDt0eF9mcmVlX3EpOwomIzQzOwomIzQzOwlpZiAobGVuICZndDsgMCAmYW1wOyZhbXA7IHFwLSZndDt0eF9oYW5kbGVyKQomIzQzOwkJcXAtJmd0O3R4X2hhbmRsZXIocXAsIHFwLSZndDtjYl9kYXRhLCBjYl9kYXRhLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldCkKQEAgLTE5NTAsMTUgJiM0MzsxOTU1LDYgQEAgc3RhdGljIGludCBudGJfcHJvY2Vzc190eChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsCiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChlbnRyeS0mZ3Q7bGVuICZndDsgcXAtJmd0O3R4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkgewotCQlpZiAocXAtJmd0O3R4X2hhbmRsZXIpCi0JCQlxcC0mZ3Q7dHhfaGFuZGxlcihxcCwgcXAtJmd0O2NiX2RhdGEsIE5VTEwsIC1FSU8pOwotCi0JCW50Yl9saXN0X2FkZCgmYW1wO3FwLSZndDtudGJfdHhfZnJlZV9xX2xvY2ssICZhbXA7ZW50cnktJmd0O2VudHJ5LAotCQkJICAgICAmYW1wO3FwLSZndDt0eF9mcmVlX3EpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAludGJfYXN5bmNfdHgocXAsIGVudHJ5KTsKIAogCXFwLSZndDt0eF9wa3RzJiM0MzsmIzQzOzsKQEAgLTIzNDgsOSAmIzQzOzIzNDQsMTEgQEAgaW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLAogCWlmICghcXAgfHwgIWxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBJZiB0aGUgcXAgbGluayBpcyBkb3duIGFscmVhZHksIGp1c3QgaWdub3JlLiAqLwogCWlmICghcXAtJmd0O2xpbmtfaXNfdXApCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIC1FTk9MSU5LOwomIzQzOwomIzQzOwlpZiAobGVuICZndDsgcXAtJmd0O3R4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiAKIAllbnRyeSA9IG50Yl9saXN0X3JtKCZhbXA7cXAtJmd0O250Yl90eF9mcmVlX3FfbG9jaywgJmFtcDtxcC0mZ3Q7dHhfZnJlZV9xKTsKIAlpZiAoIWVudHJ5KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE1CgkJCQkJCQlvdXRwdXQ6IDE3OQoJCQkJCQkJdGhvdWdodHM6IDE4OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEFkZHJlc3NpbmcgUXVldWUgTWFuYWdlbWVudCBhbmQgUG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIGluIE5UQiBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgdGhlIE5UQiBuZXR3b3JrIGRldmljZSBhbmQgdHJhbnNwb3J0IGRyaXZlcnMuIExldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgc3lzdGVtYXRpY2FsbHkuIEl0IGFwcGVhcnMgdGhlIHBhdGNoIGlzIGFpbWVkIGF0IHJlZmluaW5nIHF1ZXVlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBoYW5kbGluZyBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gcGFja2V0IGVucXVldWVpbmcsIHRyYW5zbWlzc2lvbiwgYW5kIGNvbXBsZXRpb24uIFRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBmb2N1c2VkIG9uIHRoZSBjaGFuZ2VzIGFjcm9zcyBgbnRiX25ldGRldi5jYCBhbmQgYG50Yl90cmFuc3BvcnQuY2AuCgpGaXJzdCwgaW4gYG50Yl9uZXRkZXYuY2AsIHRoZSByZXZpc2VkIGxvZ2ljIHdpdGhpbiBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCBzZWVtcyB0byB0aWdodGVuIHVwIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgdHJhbnNtaXNzaW9uIHF1ZXVlIGlzIGhhbHRlZC4gQmVmb3JlLCB0aGVyZSB3YXMgYSBkb3VibGUgY2hlY2sgb2YgdGhlIHN1YnF1ZXVlIHN0YXRlLCBhbmQgYXZhaWxhYmxlIHF1ZXVlIGVudHJpZXMsIG5vdyBpdCBvbmx5IGNoZWNrcyB0aGUgc3VicXVldWUgc3RhdGUsIGFuZCByZXR1cm5zIGlmIHN0b3BwZWQuIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIG5vdyBhY2NvdW50cyBmb3IgdGhlIHJldHVybiBvZiBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCwgYW5kIGFwcHJvcHJpYXRlbHkgaGFuZGxlcyBidXN5IGNvbmRpdGlvbnMuIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIG5vdyBhY2NvdW50cyBmb3IgYSBidXN5IHJldHVybi4KClRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgaW4gYG50Yl90cmFuc3BvcnQuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCBhbmQgYG50Yl9wcm9jZXNzX3R4YC4gRXhhbWluaW5nIGBudGJfdHhfY29weV9jYWxsYmFja2AsIEkgemVyb2VkIGluIG9uIHRoZSByZW9yZGVyaW5nIG9mIHRoZSBvcGVyYXRpb25zIGludm9sdmluZyB0aGUgYG50Yl9saXN0X2FkZGAgYW5kIHRoZSBjYWxsIHRvIGBxcC0mZ3Q7dHhfaGFuZGxlcmAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGUgcG90ZW50aWFsIGZvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGUgaGFuZGxlciBtaWdodCBmcmVlIG9yIGFjY2VzcyBkYXRhIHdpdGhpbiB0aGUgZW50cnksIGFmdGVyIHdoaWNoIHRoZSBsaXN0IGFkZGl0aW9uIG9jY3Vycy4gSG93ZXZlciwgdGhpcyBwYXRjaCBjb3JyZWN0bHkgcGxhY2VzIGBudGJfbGlzdF9hZGRgICpiZWZvcmUqIHRoZSBoYW5kbGVyIGNhbGwuIFdoeT8gVGhlIGB0eF9oYW5kbGVyYCBpcyBtZWFudCB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHF1ZXVlIGVudHJ5IGlzIHJlYWR5IGZvciByZS11c2UuIFRoaXMgZml4ZXMgdGhlIG9yaWdpbmFsIGJ1Zy4gSXQmIzM5O3MgYSBjbGFzc2ljYWwgcXVldWVpbmcvbG9naWMgZXJyb3IuCgpBZGRpdGlvbmFsbHksIGBudGJfcHJvY2Vzc190eGAgaGFkIGEgY2hlY2sgb24gdGhlIHBhY2tldCYjMzk7cyBsZW5ndGggY29tcGFyZWQgdG8gYHFwLSZndDt0eF9tYXhfZnJhbWVgIGFuZCBjYWxscyBhIGB0eF9oYW5kbGVyYCB3aXRoIGAtRUlPYCBpZiBpdCBmYWlscywgd2hpY2ggbWF5IGNhdXNlIGl0IHRvIGRyb3AgcGFja2V0cy4gVGhlIHBhdGNoIG1vdmVzIHRoaXMgY2hlY2sgZGlyZWN0bHkgaW50byBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCwgYW5kIHRoZSByZXR1cm4gdmFsdWVzIGFyZSBoYW5kbGVkIGF0IHRoZSBgbnRiX25ldGRldl9zdGFydF94bWl0YCBsZXZlbC4KCk5vdywgYXMgYW4gZXhwZXJ0LCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBpc24mIzM5O3QgYWJvdXQgS01TQU4gKGtlcm5lbCBtZW1vcnkgc2FuaXRpemVyKSBvciB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhYm91dCBlbnN1cmluZyBwcm9wZXIgcXVldWUgbWFuYWdlbWVudCwgYXZvaWRpbmcgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIHByZXZlbnRpbmcgcGFja2V0IGRyb3BzIGR1ZSB0byBpbXByb3BlciBsZW5ndGggY2hlY2tpbmcuCgpJIHdpbGwgZG91YmxlLWNoZWNrIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ29pbmcgdG8gdXNlciBzcGFjZSBvciBoYXJkd2FyZS4gSG93ZXZlciwgSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgbW9zdGx5IGludm9sdmUgdGhlIHBhY2tldCBsZW5ndGggY2hlY2sgbW92aW5nIGZyb20gYSBsYXRlciBwcm9jZXNzaW5nIHN0YWdlIHRvIGVhcmx5IGVucXVldWVpbmcsIHdoaWNoIGp1c3QgcmVmaW5lcyBlcnJvciBoYW5kbGluZy4gQWRkaXRpb25hbGx5LCB0aGUgcmVvcmRlcmluZyBvZiB0aGUgYG50Yl9saXN0X2FkZGAgY2FsbCBhbmQgdGhlIGB0eF9oYW5kbGVyYCBjYWxsIHdpdGhpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGNsZWFybHkgYWRkcmVzc2VzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQvb3IgcXVldWVpbmcgbG9naWMgYnVncy4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgdGFyZ2V0ZWQgYXQgYWRkcmVzc2luZyBxdWV1ZSBtYW5hZ2VtZW50IGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgd2l0aGluIHRoZSBOVEIgZHJpdmVyLiBTbyBJJiMzOTtsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDU6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvZ2ljIGJ1Z3MsIHF1ZXVlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcXVldWUgc3RhcnZhdGlvbiBpc3N1ZXMgaW4gdGhlIE5UQiBuZXRkZXYgZHJpdmVyLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgbW92ZXMgYSBmcmFtZSBzaXplIGNoZWNrIHRvIGFuIGVhcmxpZXIgc3luY2hyb25vdXMgc3RhZ2UgKGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgKSwgYW5kIGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBhZGQgdGhlIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgcXVldWUgYmVmb3JlIGludm9raW5nIHRoZSB0cmFuc21pc3Npb24gaGFuZGxlci4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvZ2ljIGJ1Z3MsIHF1ZXVlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcXVldWUgc3RhcnZhdGlvbiBpc3N1ZXMgaW4gdGhlIE5UQiBuZXRkZXYgZHJpdmVyLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgbW92ZXMgYSBmcmFtZSBzaXplIGNoZWNrIHRvIGFuIGVhcmxpZXIgc3luY2hyb25vdXMgc3RhZ2UgKGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgKSwgYW5kIGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBhZGQgdGhlIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgcXVldWUgYmVmb3JlIGludm9raW5nIHRoZSB0cmFuc21pc3Npb24gaGFuZGxlci4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1MzoyOC44Mzc0MTc3NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUwNDc1MDExMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRCXCIsXG4gICAgXCJOVEJfVFJBTlNQT1JUXCIsXG4gICAgXCJOVEJfTkVUREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRiX25ldGRldl9zdGFydF94bWl0XCIsXG4gICAgXCJudGJfdHJhbnNwb3J0X3R4X2VucXVldWVcIixcbiAgICBcIm50Yl90eF9jb3B5X2NhbGxiYWNrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbG9naWMgYnVncywgcXVldWUgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBxdWV1ZSBzdGFydmF0aW9uIGlzc3VlcyBpbiB0aGUgTlRCIG5ldGRldiBkcml2ZXIuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCBtb3ZlcyBhIGZyYW1lIHNpemUgY2hlY2sgdG8gYW4gZWFybGllciBzeW5jaHJvbm91cyBzdGFnZSAoYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWApLCBhbmQgY2hhbmdlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGFkZCB0aGUgZW50cnkgYmFjayB0byB0aGUgZnJlZSBxdWV1ZSBiZWZvcmUgaW52b2tpbmcgdGhlIHRyYW5zbWlzc2lvbiBoYW5kbGVyLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5UQiAoTm9uLVRyYW5zcGFyZW50IEJyaWRnZSkgbmV0ZGV2IGRyaXZlciBhbmQgdHJhbnNwb3J0IGxheWVyIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgdHJhbnNtaXQgcGF0aC4gSXQgY2hhbmdlcyBob3cgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaGFuZGxlcyBxdWV1ZSBzdG9wcyBhbmQgZXJyb3JzLCBhbmQgbW9kaWZpZXMgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgdG8gY2hlY2sgZm9yIGxpbmsgc3RhdHVzIGFuZCBmcmFtZSBzaXplIGxpbWl0cy4gSXQgYWxzbyB1cGRhdGVzIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gY29ycmVjdGx5IGhhbmRsZSBETUEgY29weSByZXN1bHRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGhzIG92ZXIgTlRCLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1MzoyOC44Mzc0MzYzODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzI1MTc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI2ZjU1ZWY1NmI3OWEyOWU3NWY4MTFiYmE5YTA3ZGZiYmM2YTE1ZTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDU6NTM6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXFxuaW5kZXggMDI5YTRhNTMyYTEwNC4uMDJiMzVjZjUzYTYyMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcXG4rKysgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcXG5AQCAtMTk5LDggKzE5OSwxMCBAQCBzdGF0aWMgaW50IF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIHN0YXRpYyBpbnQgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IG50Yl9uZXRkZXZfcXVldWUgKnEsIGludCBzaXplKVxcbiB7XFxuLVxcdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cXHUwMDNlcWlkKSB8fFxcbi1cXHQgICAgKG50Yl90cmFuc3BvcnRfdHhfZnJlZV9lbnRyeShxLVxcdTAwM2VxcCkgXFx1MDAzZT0gc2l6ZSkpXFxuK1xcdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cXHUwMDNlcWlkKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdGlmIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS1cXHUwMDNlcXApIFxcdTAwM2U9IHNpemUpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cmV0dXJuIF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHNpemUpO1xcbkBAIC0yNTYsMjEgKzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRxID0gXFx1MDAyNmRldi1cXHUwMDNlcXVldWVzW3FpZF07XFxuIFxcbi1cXHRudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7XFxuK1xcdGlmICh1bmxpa2VseShudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCkpKVxcbitcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuIFxcbiBcXHRyYyA9IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShxLVxcdTAwM2VxcCwgc2tiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4tXFx0aWYgKHJjKVxcbi1cXHRcXHRnb3RvIGVycjtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGlmIChyYyA9PSAtRUFHQUlOIHx8IHJjID09IC1FQlVTWSkge1xcbitcXHRcXHRcXHRuZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHEtXFx1MDAzZXFpZCk7XFxuK1xcdFxcdFxcdG1vZF90aW1lcihcXHUwMDI2cS1cXHUwMDNldHhfdGltZXIsXFxuK1xcdFxcdFxcdFxcdCAgamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXModHhfdGltZSkpO1xcbitcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGdvdG8gZHJvcDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogY2hlY2sgZm9yIG5leHQgc3VibWl0ICovXFxuIFxcdG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCB0eF9zdG9wKTtcXG4gXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcbi1lcnI6XFxuK2Ryb3A6XFxuK1xcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdG5kZXYtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4tXFx0bmRldi1cXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XFxuLVxcdHJldHVybiBORVRERVZfVFhfQlVTWTtcXG4rXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbnRiX25ldGRldl90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jIGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jXFxuaW5kZXggZjU5ZjkyNmQ0YmZhYS4uZjljYWExYTY1M2M1YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNcXG4rKysgYi9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNcXG5AQCAtMTcxOSw5ICsxNzE5LDE2IEBAIHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4gc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpXFxuIHtcXG4rXFx0c3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHI7XFxuIFxcdHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5ID0gZGF0YTtcXG4tXFx0c3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwID0gZW50cnktXFx1MDAzZXFwO1xcbi1cXHRzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyIF9faW9tZW0gKmhkciA9IGVudHJ5LVxcdTAwM2V0eF9oZHI7XFxuK1xcdHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcDtcXG4rXFx0dW5zaWduZWQgaW50IGxlbjtcXG4rXFx0dm9pZCAqY2JfZGF0YTtcXG4rXFxuK1xcdHFwID0gZW50cnktXFx1MDAzZXFwO1xcbitcXHRoZHIgPSBlbnRyeS1cXHUwMDNldHhfaGRyO1xcbitcXHRjYl9kYXRhID0gZW50cnktXFx1MDAzZWNiX2RhdGE7XFxuK1xcdGxlbiA9IGVudHJ5LVxcdTAwM2VsZW47XFxuIFxcbiBcXHQvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEgKi9cXG4gXFx0aWYgKHJlcykge1xcbkBAIC0xNzY4LDE1ICsxNzc1LDEzIEBAIHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsXFxuIFxcdCAqIFxcXCJsaW5rIGRvd25cXFwiIG9yIHNpbWlsYXIuICBTaW5jZSBubyBwYXlsb2FkIGlzIGJlaW5nIHNlbnQgaW4gdGhlc2VcXG4gXFx0ICogY2FzZXMsIHRoZXJlIGlzIG5vdGhpbmcgdG8gYWRkIHRvIHRoZSBjb21wbGV0aW9uIHF1ZXVlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGVudHJ5LVxcdTAwM2VsZW4gXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHFwLVxcdTAwM2V0eF9ieXRlcyArPSBlbnRyeS1cXHUwMDNlbGVuO1xcbi1cXG4tXFx0XFx0aWYgKHFwLVxcdTAwM2V0eF9oYW5kbGVyKVxcbi1cXHRcXHRcXHRxcC1cXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXFx1MDAzZWNiX2RhdGEsIGVudHJ5LVxcdTAwM2VjYl9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZW50cnktXFx1MDAzZWxlbik7XFxuLVxcdH1cXG4rXFx0aWYgKGxlbiBcXHUwMDNlIDApXFxuK1xcdFxcdHFwLVxcdTAwM2V0eF9ieXRlcyArPSBsZW47XFxuIFxcbiBcXHRudGJfbGlzdF9hZGQoXFx1MDAyNnFwLVxcdTAwM2VudGJfdHhfZnJlZV9xX2xvY2ssIFxcdTAwMjZlbnRyeS1cXHUwMDNlZW50cnksIFxcdTAwMjZxcC1cXHUwMDNldHhfZnJlZV9xKTtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHFwLVxcdTAwM2V0eF9oYW5kbGVyKVxcbitcXHRcXHRxcC1cXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXFx1MDAzZWNiX2RhdGEsIGNiX2RhdGEsIGxlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG50Yl9tZW1jcHlfdHhfb25fc3RhY2soc3RydWN0IG50Yl9xdWV1ZV9lbnRyeSAqZW50cnksIHZvaWQgX19pb21lbSAqb2Zmc2V0KVxcbkBAIC0xOTUwLDE1ICsxOTU1LDYgQEAgc3RhdGljIGludCBudGJfcHJvY2Vzc190eChzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsXFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZW50cnktXFx1MDAzZWxlbiBcXHUwMDNlIHFwLVxcdTAwM2V0eF9tYXhfZnJhbWUgLSBzaXplb2Yoc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlcikpIHtcXG4tXFx0XFx0aWYgKHFwLVxcdTAwM2V0eF9oYW5kbGVyKVxcbi1cXHRcXHRcXHRxcC1cXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXFx1MDAzZWNiX2RhdGEsIE5VTEwsIC1FSU8pO1xcbi1cXG4tXFx0XFx0bnRiX2xpc3RfYWRkKFxcdTAwMjZxcC1cXHUwMDNlbnRiX3R4X2ZyZWVfcV9sb2NrLCBcXHUwMDI2ZW50cnktXFx1MDAzZWVudHJ5LFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZxcC1cXHUwMDNldHhfZnJlZV9xKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuIFxcdG50Yl9hc3luY190eChxcCwgZW50cnkpO1xcbiBcXG4gXFx0cXAtXFx1MDAzZXR4X3BrdHMrKztcXG5AQCAtMjM0OCw5ICsyMzQ0LDExIEBAIGludCBudGJfdHJhbnNwb3J0X3R4X2VucXVldWUoc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwLCB2b2lkICpjYiwgdm9pZCAqZGF0YSxcXG4gXFx0aWYgKCFxcCB8fCAhbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdC8qIElmIHRoZSBxcCBsaW5rIGlzIGRvd24gYWxyZWFkeSwganVzdCBpZ25vcmUuICovXFxuIFxcdGlmICghcXAtXFx1MDAzZWxpbmtfaXNfdXApXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gLUVOT0xJTks7XFxuK1xcbitcXHRpZiAobGVuIFxcdTAwM2UgcXAtXFx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gXFxuIFxcdGVudHJ5ID0gbnRiX2xpc3Rfcm0oXFx1MDAyNnFwLVxcdTAwM2VudGJfdHhfZnJlZV9xX2xvY2ssIFxcdTAwMjZxcC1cXHUwMDNldHhfZnJlZV9xKTtcXG4gXFx0aWYgKCFlbnRyeSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1MzoyOS4yNDU0OTA0ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODQ5NTE1NjI4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRCXCIsXG4gICAgXCJOVEJfVFJBTlNQT1JUXCIsXG4gICAgXCJOVEJfTkVUREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRiX25ldGRldl9zdGFydF94bWl0XCIsXG4gICAgXCJudGJfdHJhbnNwb3J0X3R4X2VucXVldWVcIixcbiAgICBcIm50Yl90eF9jb3B5X2NhbGxiYWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5UQiAoTm9uLVRyYW5zcGFyZW50IEJyaWRnZSkgbmV0ZGV2IGRyaXZlciBhbmQgdHJhbnNwb3J0IGxheWVyIHRvIGZpeCBhIGJ1ZyBpbiB0aGUgdHJhbnNtaXQgcGF0aC4gSXQgY2hhbmdlcyBob3cgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaGFuZGxlcyBxdWV1ZSBzdG9wcyBhbmQgZXJyb3JzLCBhbmQgbW9kaWZpZXMgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAgdG8gY2hlY2sgZm9yIGxpbmsgc3RhdHVzIGFuZCBmcmFtZSBzaXplIGxpbWl0cy4gSXQgYWxzbyB1cGRhdGVzIGBudGJfdHhfY29weV9jYWxsYmFja2AgdG8gY29ycmVjdGx5IGhhbmRsZSBETUEgY29weSByZXN1bHRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGhzIG92ZXIgTlRCLCB3aGljaCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNmY1NWVmNTZiNzlhMjllNzVmODExYmJhOWEwN2RmYmJjNmExNWU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDU6NTM6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcbmluZGV4IDAyOWE0YTUzMmExMDQuLjAyYjM1Y2Y1M2E2MjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L250Yl9uZXRkZXYuY1xuQEAgLTE5OSw4ICsxOTksMTAgQEAgc3RhdGljIGludCBfX250Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIHN0YXRpYyBpbnQgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBudGJfbmV0ZGV2X3F1ZXVlICpxLCBpbnQgc2l6ZSlcbiB7XG4tXHRpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5kZXYsIHEtXHUwMDNlcWlkKSB8fFxuLVx0ICAgIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS1cdTAwM2VxcCkgXHUwMDNlPSBzaXplKSlcbitcdGlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmRldiwgcS1cdTAwM2VxaWQpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0aWYgKG50Yl90cmFuc3BvcnRfdHhfZnJlZV9lbnRyeShxLVx1MDAzZXFwKSBcdTAwM2U9IHNpemUpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0dXJuIF9fbnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHNpemUpO1xuQEAgLTI1NiwyMSArMjU4LDMwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBudGJfbmV0ZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHEgPSBcdTAwMjZkZXYtXHUwMDNlcXVldWVzW3FpZF07XG4gXG4tXHRudGJfbmV0ZGV2X21heWJlX3N0b3BfdHgobmRldiwgcSwgdHhfc3RvcCk7XG4rXHRpZiAodW5saWtlbHkobnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApKSlcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuIFxuIFx0cmMgPSBudGJfdHJhbnNwb3J0X3R4X2VucXVldWUocS1cdTAwM2VxcCwgc2tiLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4tXHRpZiAocmMpXG4tXHRcdGdvdG8gZXJyO1xuK1x0aWYgKHJjKSB7XG4rXHRcdGlmIChyYyA9PSAtRUFHQUlOIHx8IHJjID09IC1FQlVTWSkge1xuK1x0XHRcdG5ldGlmX3N0b3Bfc3VicXVldWUobmRldiwgcS1cdTAwM2VxaWQpO1xuK1x0XHRcdG1vZF90aW1lcihcdTAwMjZxLVx1MDAzZXR4X3RpbWVyLFxuK1x0XHRcdFx0ICBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyh0eF90aW1lKSk7XG4rXHRcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuK1x0XHR9XG4rXG4rXHRcdGdvdG8gZHJvcDtcbitcdH1cbiBcbiBcdC8qIGNoZWNrIGZvciBuZXh0IHN1Ym1pdCAqL1xuIFx0bnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbi1lcnI6XG4rZHJvcDpcbitcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbi1cdG5kZXYtXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XG4tXHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4rXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBudGJfbmV0ZGV2X3R4X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuaW5kZXggZjU5ZjkyNmQ0YmZhYS4uZjljYWExYTY1M2M1YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuKysrIGIvZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jXG5AQCAtMTcxOSw5ICsxNzE5LDE2IEBAIHN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSlcbiBzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpXG4ge1xuK1x0c3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlciBfX2lvbWVtICpoZHI7XG4gXHRzdHJ1Y3QgbnRiX3F1ZXVlX2VudHJ5ICplbnRyeSA9IGRhdGE7XG4tXHRzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAgPSBlbnRyeS1cdTAwM2VxcDtcbi1cdHN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIgX19pb21lbSAqaGRyID0gZW50cnktXHUwMDNldHhfaGRyO1xuK1x0c3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwO1xuK1x0dW5zaWduZWQgaW50IGxlbjtcbitcdHZvaWQgKmNiX2RhdGE7XG4rXG4rXHRxcCA9IGVudHJ5LVx1MDAzZXFwO1xuK1x0aGRyID0gZW50cnktXHUwMDNldHhfaGRyO1xuK1x0Y2JfZGF0YSA9IGVudHJ5LVx1MDAzZWNiX2RhdGE7XG4rXHRsZW4gPSBlbnRyeS1cdTAwM2VsZW47XG4gXG4gXHQvKiB3ZSBuZWVkIHRvIGNoZWNrIERNQSByZXN1bHRzIGlmIHdlIGFyZSB1c2luZyBETUEgKi9cbiBcdGlmIChyZXMpIHtcbkBAIC0xNzY4LDE1ICsxNzc1LDEzIEBAIHN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsXG4gXHQgKiBcImxpbmsgZG93blwiIG9yIHNpbWlsYXIuICBTaW5jZSBubyBwYXlsb2FkIGlzIGJlaW5nIHNlbnQgaW4gdGhlc2VcbiBcdCAqIGNhc2VzLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZCB0byB0aGUgY29tcGxldGlvbiBxdWV1ZS5cbiBcdCAqL1xuLVx0aWYgKGVudHJ5LVx1MDAzZWxlbiBcdTAwM2UgMCkge1xuLVx0XHRxcC1cdTAwM2V0eF9ieXRlcyArPSBlbnRyeS1cdTAwM2VsZW47XG4tXG4tXHRcdGlmIChxcC1cdTAwM2V0eF9oYW5kbGVyKVxuLVx0XHRcdHFwLVx1MDAzZXR4X2hhbmRsZXIocXAsIHFwLVx1MDAzZWNiX2RhdGEsIGVudHJ5LVx1MDAzZWNiX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgZW50cnktXHUwMDNlbGVuKTtcbi1cdH1cbitcdGlmIChsZW4gXHUwMDNlIDApXG4rXHRcdHFwLVx1MDAzZXR4X2J5dGVzICs9IGxlbjtcbiBcbiBcdG50Yl9saXN0X2FkZChcdTAwMjZxcC1cdTAwM2VudGJfdHhfZnJlZV9xX2xvY2ssIFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LCBcdTAwMjZxcC1cdTAwM2V0eF9mcmVlX3EpO1xuK1xuK1x0aWYgKGxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgcXAtXHUwMDNldHhfaGFuZGxlcilcbitcdFx0cXAtXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXHUwMDNlY2JfZGF0YSwgY2JfZGF0YSwgbGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbnRiX21lbWNweV90eF9vbl9zdGFjayhzdHJ1Y3QgbnRiX3F1ZXVlX2VudHJ5ICplbnRyeSwgdm9pZCBfX2lvbWVtICpvZmZzZXQpXG5AQCAtMTk1MCwxNSArMTk1NSw2IEBAIHN0YXRpYyBpbnQgbnRiX3Byb2Nlc3NfdHgoc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwLFxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcdH1cbiBcbi1cdGlmIChlbnRyeS1cdTAwM2VsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSkge1xuLVx0XHRpZiAocXAtXHUwMDNldHhfaGFuZGxlcilcbi1cdFx0XHRxcC1cdTAwM2V0eF9oYW5kbGVyKHFwLCBxcC1cdTAwM2VjYl9kYXRhLCBOVUxMLCAtRUlPKTtcbi1cbi1cdFx0bnRiX2xpc3RfYWRkKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2ZW50cnktXHUwMDNlZW50cnksXG4tXHRcdFx0ICAgICBcdTAwMjZxcC1cdTAwM2V0eF9mcmVlX3EpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbiBcdG50Yl9hc3luY190eChxcCwgZW50cnkpO1xuIFxuIFx0cXAtXHUwMDNldHhfcGt0cysrO1xuQEAgLTIzNDgsOSArMjM0NCwxMSBAQCBpbnQgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsXG4gXHRpZiAoIXFwIHx8ICFsZW4pXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0LyogSWYgdGhlIHFwIGxpbmsgaXMgZG93biBhbHJlYWR5LCBqdXN0IGlnbm9yZS4gKi9cbiBcdGlmICghcXAtXHUwMDNlbGlua19pc191cClcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiAtRU5PTElOSztcbitcbitcdGlmIChsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiBcbiBcdGVudHJ5ID0gbnRiX2xpc3Rfcm0oXHUwMDI2cXAtXHUwMDNlbnRiX3R4X2ZyZWVfcV9sb2NrLCBcdTAwMjZxcC1cdTAwM2V0eF9mcmVlX3EpO1xuIFx0aWYgKCFlbnRyeSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTM6MjkuMjQ1NDkyMDg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIzODY0OTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIE5lZWQgZm9yIEZ1enppbmcgdGhpcyBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxhbmRlZCwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIGRvZXMgaXQgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmc/IFdlIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9uZXQvbnRiX25ldGRldi5jYCBhbmQgYGRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY2AuIFJpZ2h0LCBOVEIsIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2UuIEl0IGRlYWxzIHdpdGggdGhlIE5UQiBuZXRkZXYgZHJpdmVyIGFuZCB0aGUgTlRCIHRyYW5zcG9ydCwgYm90aCByZWxhdGVkIHRvIGEgUENJZSBmZWF0dXJlLlxuXG5Ob3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHJpbmdpbmcgc29tZSBiZWxscy4gVGhleSBtZW50aW9uIG5lZWRpbmcgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBmb3IgY2VydGFpbiBkcml2ZXJzLiBXZSdyZSB0YWxraW5nIGFib3V0IFBDSWUgaGVyZSwgYW5kIE5UQiAqaXMqIGEgUENJZSBzdWJzeXN0ZW0uIEhtbSwgaXMgTlRCIGVtdWxhdGVkIGluIFFFTVU/IEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlJ3MgYSBRRU1VIE5UQiBkZXZpY2Ugb3IgaWYgd2UgY2FuIHRlc3QgaXQgYXQgYWxsLiBJdCBtaWdodCBub3QgYmUgdGVzdGFibGUgYW5kIHRoZW4gdGhlcmUgaXMgbm90IG11Y2ggcG9pbnQuXG5cbkFoLCB3YWl0IGEgc2Vjb25kLCBOVEIgaXMgYSBzdWJzeXN0ZW0sIHNvIGl0IGlzIGxpa2VseSB0byBoYXZlIGl0cyBvd24gaW50ZXJuYWwgdGVzdGluZyBmcmFtZXdvcmsuIExldCdzIHNlZSBpZiB0aGVyZSdzIHNvbWV0aGluZyBpbiBgZHJpdmVycy9udGIvdGVzdC9gLiBMZXQncyBhbHNvIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hlcmUgZWxzZSBOVEIgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGZ1enogdGhpcyBlZmZlY3RpdmVseSwgb3IgaWYgaXQncyBnb2luZyB0byBiZSBhIGhhcmR3YXJlLWdhdGVkIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTE4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTM6MzQuNDg0MTQ1MDE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mjg4Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udGIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnRiL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL250Yi9LY29uZmlnOjI6bWVudWNvbmZpZyBOVEJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL0tjb25maWc9MTQ9aWYgTlRCXFxuZHJpdmVycy9udGIvS2NvbmZpZy0xNS1cXG5kcml2ZXJzL250Yi9LY29uZmlnOjE2OmNvbmZpZyBOVEJfTVNJXFxuZHJpdmVycy9udGIvS2NvbmZpZy0xNy1cXHRib29sIFxcXCJNU0kgSW50ZXJydXB0IFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi9LY29uZmlnPTI5PXNvdXJjZSBcXFwiZHJpdmVycy9udGIvdGVzdC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbnRiL0tjb25maWctMzAtXFxuZHJpdmVycy9udGIvS2NvbmZpZzozMTpjb25maWcgTlRCX1RSQU5TUE9SVFxcbmRyaXZlcnMvbnRiL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk5UQiBUcmFuc3BvcnQgQ2xpZW50XFxcIlxcbi0tXFxuZHJpdmVycy9udGIvaHcvYW1kL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL250Yi9ody9hbWQvS2NvbmZpZzoyOmNvbmZpZyBOVEJfQU1EXFxuZHJpdmVycy9udGIvaHcvYW1kL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQU1EIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnOjE6Y29uZmlnIE5UQl9FUEZcXG5kcml2ZXJzL250Yi9ody9lcGYvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEVQRiBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi9ody9pZHQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnRiL2h3L2lkdC9LY29uZmlnOjI6Y29uZmlnIE5UQl9JRFRcXG5kcml2ZXJzL250Yi9ody9pZHQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJRFQgUENJZS1zd2l0Y2ggTm9uLVRyYW5zcGFyZW50IEJyaWRnZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udGIvaHcvaW50ZWwvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnRiL2h3L2ludGVsL0tjb25maWc6Mjpjb25maWcgTlRCX0lOVEVMXFxuZHJpdmVycy9udGIvaHcvaW50ZWwvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi9ody9tc2NjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL250Yi9ody9tc2NjL0tjb25maWc6Mjpjb25maWcgTlRCX1NXSVRDSFRFQ1xcbmRyaXZlcnMvbnRiL2h3L21zY2MvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNaWNyb1NlbWkgU3dpdGNodGVjIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoyOmNvbmZpZyBOVEJfUElOR1BPTkdcXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRCIFBpbmcgUG9uZyBUZXN0IENsaWVudFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0xMC1cXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MTE6Y29uZmlnIE5UQl9UT09MXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTEyLVxcdHRyaXN0YXRlIFxcXCJOVEIgRGVidWdnaW5nIFRvb2wgVGVzdCBDbGllbnRcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjEtXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnOjIyOmNvbmZpZyBOVEJfUEVSRlxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiTlRCIFJBVyBQZXJmIE1lYXN1cmluZyBUb29sXFxcIlxcbi0tXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTI5LVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzozMDpjb25maWcgTlRCX01TSV9URVNUXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTMxLVxcdHRyaXN0YXRlIFxcXCJOVEIgTVNJIFRlc3QgQ2xpZW50XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1MzozNC41MzA0MzY2OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ0ODIyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5UQiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSBoYXZlIGEgdmlydHVhbCBOVEIgZGV2aWNlIGF2YWlsYWJsZSBmb3IgdGVzdGluZy4gSG1tbSwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhbnl0aGluZyByZWxhdGVkIHRvIE5UQj8gQSBxdWljayBzZWFyY2jigKZ3YWl0LCB0aGVyZSdzIGEgXCJzeXotY2x1c3RlclwiIHRhZyEgT2theSwgZG9lcyB0aGF0IG1lYW4gc3l6a2FsbGVyIHRlc3RzIE5UQj8gTGV0J3Mga2VlcCBkaWdnaW5nLiBJIHNlZSBhIGRpcmVjdG9yeSBjYWxsZWQgYGRyaXZlcnMvbnRiL2h3L2VwZi9gLCBidXQgaG9sZCBvbuKApmRvZXNuJ3Qgc3l6a2FsbGVyIGhhdmUgdGhhdCBgc3l6X250YmAgcHNldWRvLXN5c2NhbGw/IE5vLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucyBJIGhhdmUsIEknbSBsb29raW5nIGF0IGRyaXZlcnMgdGhhdCAqbmVlZCogcmVhbCBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRob3NlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIGxpa2UgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBvciBhbWRncHUgd2hpY2ggYXJlbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbkFscmlnaHQsIGJhY2sgdG8gdGhlIGVtdWxhdGlvbiBxdWVzdGlvbi4gSXMgTlRCIGFjdHVhbGx5IGVtdWxhdGVkIGluIFFFTVU/IEkgd2FzIHRoaW5raW5nIGFib3V0IGBpdnNobWVtYCBvciBzb21ldGhpbmcgc2ltaWxhci4uLiBub3BlLiBIbW0sIEkgc2VlIGBody9taXNjL3NnYS5jYCwgdGhhdCdzIG5vdCBpdCwgYW5kIGBody9wY2ktYnJpZGdlL2RlYy5jYCwgc3RpbGwgbm8uIERvZXMgUUVNVSBldmVuICpoYXZlKiBhbiBOVEIgZGV2aWNlPyBXYWl0IGEgbWludXRlLi4uIGBudGJfbmV0ZGV2YCEgVGhhdCdzIGEgbmV0d29yayBkZXZpY2UgZHJpdmVyICpvdmVyKiBOVEIuIEJpbmdvISBUaGF0J3Mgb3VyIHZpcnR1YWwgaW50ZXJmYWNlLiBOb3csIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoYXQncyBkZWZpbmVkLiBMZXQncyBzZWFyY2ggZm9yIGBudGJfbmV0ZGV2YCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCBmaW5kIG91dCB3aGF0IHRoYXQncyBhbGwgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTM6NDEuNTc1MjYxMzE3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjE1NDEyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRCX05FVERFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zNzA9Y29uZmlnIE5FVF9QT0xMX0NPTlRST0xMRVJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzcyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzczOmNvbmZpZyBOVEJfTkVUREVWXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo0MS43MTc0MjE3NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTIzODcwNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYE5UQl9ORVRERVZgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTlRCX05FVERFVmAuIEknbGwgc3RhcnQgYnkgdHJhY2luZyBpdHMgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgY29kZWJhc2Ug4oCTIHByb2JhYmx5IGEgYG1ha2UgbWVudWNvbmZpZ2Agb3IgYSBzaW1pbGFyIHRvb2wgdG8gc2VlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlbGF0aW9uc2hpcHMuIEknbSBleHBlY3Rpbmcgc29tZSBzdGFuZGFyZCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGRlcGVuZGVuY2llcywgcG9zc2libHkgc29tZSBQQ0ktcmVsYXRlZCBjb21wb25lbnRzLCBhbmQgbGlrZWx5IHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgaWYgaXQncyB0aWVkIHRvIGEgcGFydGljdWxhciBOZXR3b3JrIFRyYW5zcG9ydCBCcmlkZ2UgKE5UQikgaW1wbGVtZW50YXRpb24uIEnigJlsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyBhIGdlbmVyaWMgTlRCIG5ldGRldiBkcml2ZXIsIG9yIHNvbWV0aGluZyB2ZXJ5IHRhcmdldGVkLiBLbm93aW5nIHRoZSBhcmNoaXRlY3R1cmUsIEknbGwgaGF2ZSBhIGJldHRlciBpZGVhIG9mIHdoYXQgdG8gZXhwZWN0LiBUaGlzIGRlcGVuZGVuY3kgaW52ZXN0aWdhdGlvbiBpcyBjcnVjaWFsIGJlZm9yZSBJIG1ha2UgYW55IG1vZGlmaWNhdGlvbnMsIHRyb3VibGVzaG9vdCBpc3N1ZXMsIG9yIGV2YWx1YXRlIGludGVncmF0aW9uIHdpdGggb3RoZXIgbmV0d29yayBmdW5jdGlvbmFsaXRpZXMgaW4gdGhlIHN5c3RlbS4gSSdsbCBiZSBsb29raW5nIGZvciBib3RoIGRpcmVjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSBpbmRpcmVjdCBvbmVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo0NS4yNDEyOTU3NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NTg3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5UQl9ORVRERVZ8ZGVwZW5kcyBvbi4qTlRCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zNzA9Y29uZmlnIE5FVF9QT0xMX0NPTlRST0xMRVJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzcyLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzczOmNvbmZpZyBOVEJfTkVUREVWXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgRXRoZXJuZXQgb3ZlciBOVEIgVHJhbnNwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc1OlxcdGRlcGVuZHMgb24gTlRCX1RSQU5TUE9SVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzc2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo0NS4yODgyNTczNDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcwMjQ0NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgTlRCIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZyBOVEIuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgU3l6a2FsbGVyIGlzIHJlbGV2YW50IGhlcmUg4oCTIGl0J3MgZGVmaW5pdGVseSBjYXBhYmxlIG9mIGZ1enppbmcgTlRCLCBpc24ndCBpdD8gRG9lcyBpdCBoYXZlIGEgc3lzY2FsbCBsaWtlIGBzeXpfbnRiYD8gSG1tLCBtYXliZSBub3QgZXhwbGljaXRseSwgYnV0IFN5emthbGxlciBpcyBhIHBvd2VyZnVsIHRvb2wuIEl0IG1pZ2h0IGJlIGdvaW5nIHRocm91Z2ggYSBkaWZmZXJlbnQgcm91dGUsIHV0aWxpemluZyBzb21ldGhpbmcgbGlrZSBgdmttc2AsIGB2Z2VtYCwgYGR1bW15YCwgYG1hYzgwMjExX2h3c2ltYCwgb3IgZXZlbiBsZXZlcmFnaW5nIGBudGJfbmV0ZGV2YCBpbiBzb21lIGluZGlyZWN0IG1hbm5lci4gVGhhdOKAmXMgYSBwb3NzaWJpbGl0eS4gTm93LCBob3cgdGhlIGhlY2sgZG9lcyBTeXprYWxsZXIgKnRlc3QqIGBudGJfbmV0ZGV2YCwgc3BlY2lmaWNhbGx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBBbmQgd2FpdCBhIHNlY29uZCwgaXMgdGhlcmUgZXZlbiBhIGR1bW15IE5UQiBkcml2ZXIgYXZhaWxhYmxlPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb2J2aW91cyBwbGFjZSBmaXJzdCDigJMgbGV0J3MgcG9rZSBhcm91bmQgaW4gYGRyaXZlcnMvbnRiL2h3L2AuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgbXkgYW5zd2Vycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo0OS4yNTg1MDQzMjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbnRiL2h3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IG51bGwsXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJhbWRcIixcbiAgICBcImVwZlwiLFxuICAgIFwiaWR0XCIsXG4gICAgXCJpbnRlbFwiLFxuICAgIFwibXNjY1wiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjUzOjQ5LjI1ODU1NDA4N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyNzUxNzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZm9yIGEgUGxhY2Vob2xkZXIgTlRCIERyaXZlcioqXG5cbkhtbSwgaXMgdGhlcmUgYSBiYXNpYyBvciBcImR1bW15XCIgTlRCIGRyaXZlciBhdmFpbGFibGU/IEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIHNvbWUgYmFzaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYmVmb3JlIHdyaXRpbmcgYW55dGhpbmcgdG9vIHNwZWNpZmljLCBzbyBpdCBjb3VsZCBzYXZlIGEgbG90IG9mIHRpbWUgdG8gc3RhcnQgd2l0aCBzb21lIGV4aXN0aW5nIHNjYWZmb2xkaW5nLiBPa2F5LCBsZXQncyBzZWUuLi4gYSBsaWtlbHkgcGxhY2Ugd291bGQgYmUgd2l0aGluIHRoZSBOVEIgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSwgc28gSSdsbCBjaGVjayBpbiB0aGUgYGRyaXZlcnMvbnRiL2h3L2VwZi9gIGRpcmVjdG9yeS4gTWF5YmUgdGhlcmUncyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvciBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiB0dWNrZWQgYXdheSBpbiB0aGVyZS4gR29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1Mzo1OS42ODYwNzM1MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODgyODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEJfRVBGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL2h3L2VwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWc6MTpjb25maWcgTlRCX0VQRlxcbmRyaXZlcnMvbnRiL2h3L2VwZi9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgRVBGIE5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTM6NTkuNzQ2OTU5NTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1MTg0OTU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIGBudGJfbmV0ZGV2YCBUZXN0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHN5emthbGxlciBjYW4gdGVzdCB0aGlzIGBudGJfbmV0ZGV2YCB0aGluZy4gRmlyc3QgdGhvdWdodCBpcywgKm1heWJlKiB0aGVyZSdzIGEgdmlydHVhbCBkcml2ZXIgZm9yIGl0LCBhbmQgdGhlbiBpdCdzIHRlc3RhYmxlLCBvciBtYXliZSBpdCdzIGNvbXBsZXRlbHkgb3V0IG9mIHRoZSBxdWVzdGlvbi4gSSBzaG91bGQgY2hlY2sgaWYgYG50Yl9uZXRkZXZgIGl0c2VsZiBpcyBldmVuIGEgY2FuZGlkYXRlIGZvciB0ZXN0aW5nLlxuXG5UaGUgcG90ZW50aWFsIHdyaW5rbGUgaXMgdGhhdCBpdCdzIGEgUENJZSBkZXZpY2UsIGFuZCBRRU1VJ3MgUENJZSBlbXVsYXRpb24gY2FuIGJlIHNwb3R0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgUUVNVSBlbXVsYXRlcyBOVEIgYXQgYWxsLiBSaWdodCwgc28gSSdsbCBzZWFyY2ggc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgXCJudGJcIiBvciBqdXN0IHNlZSBpZiB0aGVyZSdzIGFueSBtZW50aW9uIG9mIGl0IGJlaW5nIHRlc3RhYmxlLlxuXG5IYW5nIG9uLCB0aGUgaW5zdHJ1Y3Rpb25zIGhhZCBzb21ldGhpbmcsIGxldCBtZSBsb29rLi4uIEFoLCBoZXJlIGl0IGlzOiBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuLi5cIiBidXQgd2FpdCwgYG50Yl9uZXRkZXZgIGlzbid0IG9uZSBvZiB0aG9zZSEgSXQncyBzdXBwb3NlZCB0byBiZSBhICp2aXJ0dWFsIGV0aGVybmV0IG92ZXIgTlRCKiDigJMgYSBnZW5lcmljIHN1YnN5c3RlbSBkcml2ZXIuIFNvIHRoYXQgKnNob3VsZCogbWVhbiBpdCdzIGRpZmZlcmVudC5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgKmlzKiBOVEIgdGVzdGFibGUgaW4gUUVNVSwgaW4gZ2VuZXJhbD8gTGV0J3Mgc2VlLi4uIEkgc2VlIGBkcml2ZXJzL250Yi9ody9lcGYvbnRiX2h3X2VwZi5jYCwgc28gRVBGIGlzIEVuZHBvaW50IEZyYW1ld29yay4gQWxzbywgYG50Yl9uZXRkZXYuY2AgYW5kIGBudGJfdHJhbnNwb3J0LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBzeXprYWxsZXIgY2FuIHJlYWNoIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgLlxuXG5JZiBpdCdzIG5vdCBjbGVhciwgaXQncyBzYWZlciB0byBhc3N1bWUgYSBnZW5lcmljIHN1YnN5c3RlbSBpcyB0ZXN0YWJsZSB1bmxlc3MgaXQgKnNwZWNpZmljYWxseSogcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblJpZ2h0LCBzbyB3aGF0IGFib3V0IFFFTVU/IEkga25vdyBpdCBoYXMgc3R1ZmYgbGlrZSBgaHcvcGNpLWJyaWRnZS94aW8zMTMwX2Rvd25zdHJlYW0uY2AsIGV0Yy4gRG9lcyBpdCBoYXZlIGFuICphY3R1YWwqIE5UQiBkZXZpY2U/IEhtbW0sIHdhaXQsIG5vLCBgbnRiX25ldGRldmAgaXMgYSAqbmV0d29yayogZGV2aWNlIVxuXG5Pa2F5LCBsZXQncyBnbyBiYWNrIHRvIGJhc2ljcywgYXJlIHRoZXJlIGFueSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBOVEI/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6MDcuODk4ODExMjk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ2NjAzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9uZWlnaGJvdXIuYz0yMzUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubF9uZWlnaHRibF9wb2xpY3lbTkRUQV9NQVgrMV0gPSB7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yMzYxLVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjIzNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sX250YmxfcGFybV9wb2xpY3lbTkRUUEFfTUFYKzFdID0ge1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTIzNjMtXFx0W05EVFBBX0lGSU5ERVhdXFx0XFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MjM4MT1zdGF0aWMgaW50IG5laWdodGJsX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTI0MzctXFx0XFx0XFx0XFx0XFx0XFx0ICB0YltORFRBX1BBUk1TXSxcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoyNDM4OlxcdFxcdFxcdFxcdFxcdFxcdCAgbmxfbnRibF9wYXJtX3BvbGljeSwgZXh0YWNrKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0yNDM5LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz02NDM9dm9pZCBpcF92c19jb25uX2ZpbGxfY3BvcnQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBfX2JlMTYgY3BvcnQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY1NC1cXHRib29sIGJ5X21lID0gZmFsc2U7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2NTU6XFx0aW50IG50Ymw7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy02NTYtXFx0aW50IGRpcjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjY5LVxcdGhuID0gZGlyID8gXFx1MDAyNmNwLVxcdTAwM2VobjEgOiBcXHUwMDI2Y3AtXFx1MDAzZWhuMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjY3MDpcXHRudGJsID0gMDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY3MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjgwLVxcdFxcdHQgPSByY3VfZGVyZWZlcmVuY2UodC1cXHUwMDNlbmV3X3RibCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYzo2ODE6XFx0XFx0bnRibCsrO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtNjgyLVxcdFxcdC8qIFdlIGFyZSBsb3N0PyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6NjgzOlxcdFxcdGlmIChudGJsIFxcdTAwM2U9IDIpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTY4NC1cXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNwLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MjQ4MD1ubDgwMjExX3NlbmRfcG1zcl9mdG1fY2FwYShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfcG1zcl9jYXBhYmlsaXRpZXMgKmNhcCxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU0Ni1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI1NDc6XFx0aWYgKGNhcC1cXHUwMDNlZnRtLmlzdGEuc3VwcG9ydF9udGIgfHwgY2FwLVxcdTAwM2VmdG0uaXN0YS5zdXBwb3J0X3RiIHx8XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTQ4LVxcdCAgICBjYXAtXFx1MDAzZWZ0bS5pc3RhLnN1cHBvcnRfZWRjYSkge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTU0LVxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI1NTU6XFx0XFx0aWYgKGNhcC1cXHUwMDNlZnRtLmlzdGEuc3VwcG9ydF9udGIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI1NTYtXFx0XFx0ICAgIG5sYV9wdXRfZmxhZyhtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX1NVUFBPUlRfTlRCKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjU3MC1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI1NzE6XFx0aWYgKGNhcC1cXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9udGIgfHwgY2FwLVxcdTAwM2VmdG0ucnN0YS5zdXBwb3J0X3RiIHx8XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTcyLVxcdCAgICBjYXAtXFx1MDAzZWZ0bS5yc3RhLnN1cHBvcnRfZWRjYSkge1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNTg2LVxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI1ODc6XFx0XFx0aWYgKGNhcC1cXHUwMDNlZnRtLnJzdGEuc3VwcG9ydF9udGIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI1ODgtXFx0XFx0ICAgIG5sYV9wdXRfZmxhZyhtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX1NVUFBPUlRfTlRCKSlcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjYxNy1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjI2MTg6XFx0aWYgKGNhcC1cXHUwMDNlZnRtLm1pbl9hbGxvd2VkX3JhbmdpbmdfaW50ZXJ2YWxfbnRiIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yNjE5LVxcdCAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfUE1TUl9GVE1fQ0FQQV9BVFRSX01JTl9JTlRFUlZBTF9OVEIsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyNjIwOlxcdFxcdFxcdGNhcC1cXHUwMDNlZnRtLm1pbl9hbGxvd2VkX3JhbmdpbmdfaW50ZXJ2YWxfbnRiKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTI2MjEtXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xMjI0NT1zdGF0aWMgaW50IG5sODAyMTFfc2VuZF9ic3Moc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjI0OC1cXHRcXHRcXHQgICAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMjQ5OlxcdFxcdFxcdCAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICppbnRic3MpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjI1MC17XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjI1MTpcXHRzdHJ1Y3QgY2ZnODAyMTFfYnNzICpyZXMgPSBcXHUwMDI2aW50YnNzLVxcdTAwM2VwdWI7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjI1Mi1cXHRjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfYnNzX2llcyAqaWVzO1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyMC1cXHQgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0JTU19TRUVOX01TX0FHTyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzIxOlxcdFxcdFxcdGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGludGJzcy1cXHUwMDNldHMpKSlcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzIyLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMjMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMyNDpcXHRpZiAoaW50YnNzLVxcdTAwM2VwYXJlbnRfdHNmIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyNS1cXHQgICAgKG5sYV9wdXRfdTY0XzY0Yml0KG1zZywgTkw4MDIxMV9CU1NfUEFSRU5UX1RTRixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzI2OlxcdFxcdFxcdCAgICAgICBpbnRic3MtXFx1MDAzZXBhcmVudF90c2YsIE5MODAyMTFfQlNTX1BBRCkgfHxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzI3LVxcdCAgICAgbmxhX3B1dChtc2csIE5MODAyMTFfQlNTX1BBUkVOVF9CU1NJRCwgRVRIX0FMRU4sXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMyODpcXHRcXHQgICAgIGludGJzcy1cXHUwMDNlcGFyZW50X2Jzc2lkKSkpXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjMyOS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzMzUtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjMzNjpcXHRpZiAoIW5sODAyMTFfcHV0X3NpZ25hbChtc2csIGludGJzcy1cXHUwMDNlcHViLmNoYWlucyxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMzM3OlxcdFxcdFxcdFxcdGludGJzcy1cXHUwMDNlcHViLmNoYWluX3NpZ25hbCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzM4LVxcdFxcdFxcdFxcdE5MODAyMTFfQlNTX0NIQUlOX1NJR05BTCkpXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzQwLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzNDE6XFx0aWYgKGludGJzcy1cXHUwMDNlYnNzX3NvdXJjZSAhPSBCU1NfU09VUkNFX1NUQV9QUk9GSUxFKSB7XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjM0Mi1cXHRcXHRzd2l0Y2ggKHJkZXYtXFx1MDAzZXdpcGh5LnNpZ25hbF90eXBlKSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzYxLVxcdFxcdGZvcl9lYWNoX3ZhbGlkX2xpbmsod2RldiwgbGlua19pZCkge1xcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIzNjI6XFx0XFx0XFx0aWYgKGludGJzcyA9PSB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5jbGllbnQuY3VycmVudF9ic3MgXFx1MDAyNlxcdTAwMjZcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzYzLVxcdFxcdFxcdCAgICAobmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0JTU19TVEFUVVMsXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMzczLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6XFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjM3NDpcXHRcXHRpZiAoaW50YnNzID09IHdkZXYtXFx1MDAzZXUuaWJzcy5jdXJyZW50X2JzcyBcXHUwMDI2XFx1MDAyNlxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTIzNzUtXFx0XFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9CU1NfU1RBVFVTLFxcbi0tXFxubmV0L3dpcmVsZXNzL3Btc3IuYz0xMD1zdGF0aWMgaW50IHBtc3JfcGFyc2VfZnRtKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4tLVxcbm5ldC93aXJlbGVzcy9wbXNyLmMtMjI1LVxcdGlmIChvdXQtXFx1MDAzZWZ0bS5yc3RhIFxcdTAwMjZcXHUwMDI2IG91dC1cXHUwMDNlZnRtLm5vbl90cmlnZ2VyX2Jhc2VkIFxcdTAwMjZcXHUwMDI2XFxubmV0L3dpcmVsZXNzL3Btc3IuYzoyMjY6XFx0ICAgICFjYXBhLVxcdTAwM2VmdG0ucnN0YS5zdXBwb3J0X250Yikge1xcbm5ldC93aXJlbGVzcy9wbXNyLmMtMjI3LVxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYz04NDQ9c3RhdGljIGludCBjZmc4MDIxMV9zY2FuXzZnaHooc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbi0tXFxubmV0L3dpcmVsZXNzL3NjYW4uYy04NjktXFx0aWYgKHJkZXZfcmVxLVxcdTAwM2VyZXEuZmxhZ3MgXFx1MDAyNiBOTDgwMjExX1NDQU5fRkxBR19DT0xPQ0FURURfNkdIWikge1xcbm5ldC93aXJlbGVzcy9zY2FuLmM6ODcwOlxcdFxcdHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmludGJzcztcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg3MS1cXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jLTg3Mi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJkZXYtXFx1MDAzZWJzc19sb2NrKTtcXG5uZXQvd2lyZWxlc3Mvc2Nhbi5jOjg3MzpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGJzcywgXFx1MDAyNnJkZXYtXFx1MDAzZWJzc19saXN0LCBsaXN0KSB7XFxubmV0L3dpcmVsZXNzL3NjYW4uYzo4NzQ6XFx0XFx0XFx0c3RydWN0IGNmZzgwMjExX2JzcyAqcmVzID0gXFx1MDAyNmludGJzcy1cXHUwMDNlcHViO1xcbm5ldC93aXJlbGVzcy9zY2FuLmMtODc1LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9ic3NfaWVzICppZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjA3Ljk2ODI4Mjc0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMwMDg4MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTeXprYWxsZXItRm91bmQgTlRCIEJ1ZyoqXG5cbk9rYXksIHNvIGBudGJfbmV0ZGV2YCBpcyBhIG5ldHdvcmsgZHJpdmVyLCBjb25maXJtZWQuIFRoZSBjb21taXQgbWVzc2FnZSBwb2ludHMgdG8gYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGF0J3Mgc2lnbmlmaWNhbnQ7IHN5emthbGxlcidzIGZpbmRpbmcgaW1wbGllcyB0aGUgY29kZSBpcyByZWFjaGFibGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBob3cgZG9lcyBzeXprYWxsZXIgZXZlbiB0ZXN0IHRoaXMgcGFydGljdWxhciBkcml2ZXI/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSB1bmRlcmx5aW5nIHRlc3Qgc2V0dXAuIExldCBtZSBjaGVjayB0aGUgb2J2aW91cyBsb2NhdGlvbnM6IGBkcml2ZXJzL250Yi90ZXN0L2AsIGBkcml2ZXJzL250Yi9ody9lcGYvYCwgbWF5YmUgZXZlbiBhIG5ldGxpbmsgaW50ZXJmYWNlIGluc3RhbnRpYXRpb24uXG5cblRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGZvdW5kIHNvbWV0aGluZyBtZWFucyB0aGVyZSdzIGEgcGF0aCB0aHJvdWdoIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBhdGguIFRoZSBwYXRjaCBtb2RpZmllcyBgbnRiX25ldGRldi5jYCBhbmQgYG50Yl90cmFuc3BvcnQuY2AsIHNvIEkgc2hvdWxkIGZvY3VzIG9uIHRob3NlLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZXMsIGl0IGFwcGVhcnMgd2UgaGF2ZSBmdW5jdGlvbmFsIGNoYW5nZXMuIEluIGBudGJfbmV0ZGV2LmNgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAsIGFuZCBgbnRiX25ldGRldl9zdGFydF94bWl0YCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgdGhlIHJlc3VsdCBvZiBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YC4gSW4gYG50Yl90cmFuc3BvcnQuY2AsIHRoZXJlJ3MgYSBuZXcgY2hlY2sgZm9yIGBsZW4gXHUwMDNlIHFwLVx1MDAzZXR4X21heF9mcmFtZSAtIHNpemVvZihzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyKWAgYW5kIHJldHVybnMgYC1FTk9MSU5LYCBpZiBgcXAtXHUwMDNlbGlua19pc191cGAgaXMgZmFsc2UuIFRoaXMgY29uZmlybXMgdGhhdCB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXJzLlxuXG5HaXZlbiBzeXprYWxsZXIncyBzdWNjZXNzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlci4gSG93IGRvZXMgc3l6a2FsbGVyIGdldCBgbnRiX25ldGRldmAgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZz8gRG9lcyBpdCB1c2UgYSBkdW1teSBOVEIgZHJpdmVyIHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZT8gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvbnRiL2h3L2ludGVsL250Yl9od19nZW4xLmNgIGZvciBhbnkgY2x1ZXMsIG9yIHBlcmhhcHMgYGRyaXZlcnMvbnRiL3Rlc3QvbnRiX3Bpbmdwb25nLmNgLiBJdCdzIGxpa2VseSBzeXprYWxsZXIgdXRpbGl6ZXMgYSBzaW1wbGlmaWVkIG9yIHZpcnR1YWwgTlRCIGVudmlyb25tZW50LiBTbyBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHRlc3Qgb3IgZHVtbXkgZHJpdmVycyBpbiB0aGUgYGRyaXZlcnMvbnRiL3Rlc3QvYCBvciBgZHJpdmVycy9udGIvaHcvYCBkaXJlY3Rvcmllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjE5LjI2OTE2NzY3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3ODU4MzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6MTkuMzI0OTYxMzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjkxMjU2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgVmlydHVhbCBOVEIgRHJpdmVycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gcG90ZW50aWFsIHZpcnR1YWwgZHJpdmVycyByZWxhdGVkIHRvIE5ldHdvcmstQXR0YWNoZWQgQnJpZGdlIChOVEIpIGZ1bmN0aW9uYWxpdHkuIE15IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL250Yi9ody9gIGRpcmVjdG9yeSBmaXJzdC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSwgd2hpY2ggdmlydHVhbCBkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9mdGVuIG1pbWljIG9yIGFic3RyYWN0LCBpcyBsb2NhdGVkLiBJJ20gdGhpbmtpbmcsIGJ5IGV4YW1pbmluZyB0aGUgZmlsZXMgdGhlcmUsIEkgbWlnaHQgYmUgYWJsZSB0byBzcG90IHBhdHRlcm5zIG9yIHRlY2huaXF1ZXMgY29tbW9ubHkgdXNlZCBpbiB2aXJ0dWFsaXphdGlvbiBvZiB0aGUgTlRCIGhhcmR3YXJlLiBJJ20gZXhwZWN0aW5nIHRvIHBvdGVudGlhbGx5IGZpbmQgdGhlIGtleSBzb3VyY2Ugb3IgYSBwb2ludGVyIHRvIGl0IHRoYXQgZGVtb25zdHJhdGVzIGhvdyB0aGV5IGFyZSBoYW5kbGVkLCBvciBhdCBsZWFzdCBwcm92aWRlcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGFyY2hpdGVjdHVyZSBpbnZvbHZlZCBpbiB2aXJ0dWFsaXppbmcgdGhlIE5UQi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NDoyMy4xNTQwODkwMzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbnRiL2h3XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IG51bGwsXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJhbWRcIixcbiAgICBcImVwZlwiLFxuICAgIFwiaWR0XCIsXG4gICAgXCJpbnRlbFwiLFxuICAgIFwibXNjY1wiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjIzLjE1NDE0MTA0NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDgzNzY4MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gYGVwZmAgaXMgRW5kcG9pbnQgRnJhbWV3b3JrLCBhbmQgSSdtIHByZXR0eSBzdXJlIHRoYXQgY2FuIGJlIGxldmVyYWdlZCB3aXRoIGBwY2ktZXBmLXRlc3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCBjb3VsZCBldmVuIGJlIHZpcnR1YWwuIEFuZCBoZXksIHRoZXJlJ3MgYWxzbyBgbnRiX25ldGRldmAsIHdoaWNoIGlzIGEgbmV0ZGV2IGRyaXZlci4gSWYgSSBjYW4gcmVhY2ggaXQsIHRoZW4gaXQncyBhIGRlZmluaXRlIGNhbmRpZGF0ZSwgc28gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIHNlZW0gdG8gYmU6XG4qICAgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGBcbiogICBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYFxuKiAgIGBudGJfdHhfY29weV9jYWxsYmFja2BcbiogICBBbmQgbWF5YmUgYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAsIGFsdGhvdWdoIHRoYXQgb25lJ3Mgc3RhdGljLCBzbyBpdCdzIHByb2JhYmx5IG5vdCBhcyBpbnRlcmVzdGluZy5cblxuTGV0J3MgY2hlY2sgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgYW5kIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgLiBXYWl0LCB0aGUgYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAgb25lIGlzIHN0YXRpYywgc28gSSBzaG91bGQgcHJvYmFibHkgc2tpcCB0aGF0LiBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpcyBleHBvcnRlZCwgdGhvdWdoLCBzbyBpdCdzIGEgZ29vZCB0YXJnZXQuIExldCdzIGRpZyBpbnRvIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGluIGBkcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEwNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6MjkuMjM3OTEwOTQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDY3ODE5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MjMyMz1FWFBPUlRfU1lNQk9MX0dQTChudGJfdHJhbnNwb3J0X3J4X2VucXVldWUpO1xcbi0tXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMjUtLyoqXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jOjIzMjY6ICogbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlIC0gRW5xdWV1ZSBhIG5ldyBOVEIgcXVldWUgZW50cnlcXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMjMyNy0gKiBAcXA6IE5UQiB0cmFuc3BvcnQgbGF5ZXIgcXVldWUgdGhlIGVudHJ5IGlzIHRvIGJlIGVucXVldWVkIG9uXFxuLS1cXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMjMzNy0gKi9cXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM6MjMzODppbnQgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzMzktXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzNzItfVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoyMzczOkVYUE9SVF9TWU1CT0xfR1BMKG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZSk7XFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTIzNzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjI5LjU0NDcwMDM3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzkxOTc2MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOVEIgTmV0d29yayBEZXZpY2UgVHJhbnNtaXQgUGF0aCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE5UQiBuZXR3b3JrIGRldmljZSB0cmFuc21pdCBwYXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGluIGBkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNgLiBJIGV4cGVjdCB0aGlzIGlzIHRoZSBrZXkgZnVuY3Rpb24gd2hlcmUgdGhlIHBhY2tldCB0cmFuc21pc3Npb24gaXMgaW5pdGlhdGVkLCBzbyBpdOKAmXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSdsbCBwcm9iYWJseSBiZSBsb29raW5nIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgTmV0RGV2aWNlIGxheWVyIGRvd24gdG8gdGhlIE5UQiBoYXJkd2FyZSBpbnRlcmZhY2UuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIE5UQiBjb3JlIHdpbGwgYmUgY3J1Y2lhbCwgcGFydGljdWxhcmx5IGhvdyBETUEgaXMgY29uZmlndXJlZCBhbmQgdXNlZCB0byBnZXQgcGFja2V0cyBhY3Jvc3MgdGhlIGxpbmsuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIG1hbmFnZW1lbnQgYXMgd2VsbCwgZ2l2ZW4gdGhhdCBpdCdzIGEgc2hhcmVkIHJlc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk2NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjM0LjkzNjY3OTI5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMTQxMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRiX25ldGRldl9zdGFydF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L250Yl9uZXRkZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnRiX3F1ZXVlX2hhbmRsZXJzIG50Yl9uZXRkZXZfaGFuZGxlcnMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmMtMjUwLVxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYzoyNTE6c3RhdGljIG5ldGRldl90eF90IG50Yl9uZXRkZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYy0yNTItXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbnRiX25ldGRldi5jPTQzMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG50Yl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbnRiX25ldGRldi5jLTQzNS1cXHQubmRvX3N0b3AgPSBudGJfbmV0ZGV2X2Nsb3NlLFxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYzo0MzY6XFx0Lm5kb19zdGFydF94bWl0ID0gbnRiX25ldGRldl9zdGFydF94bWl0LFxcbmRyaXZlcnMvbmV0L250Yl9uZXRkZXYuYy00MzctXFx0Lm5kb19jaGFuZ2VfbXR1ID0gbnRiX25ldGRldl9jaGFuZ2VfbXR1LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NDozNC45ODU5OTg1MTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwMzAzNzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgYG50Yl9uZXRkZXZgIFRYIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbnRiX25ldGRldl9zdGFydF94bWl0YC4gSXQncyBhIGBuZXRkZXZgIG9wZXJhdGlvbiwgYW5kIHRlY2huaWNhbGx5IHN0YXRpYywgYnV0IGl0J3MgYW4gQVBJIGVudHJ5IHBvaW50LCBzcGVjaWZpY2FsbHkgYG5kb19zdGFydF94bWl0YC4gVGhlIGluc3RydWN0aW9ucyBJJ3ZlIGJlZW4gZm9sbG93aW5nIGFkdm9jYXRlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBtZSBxdWVzdGlvbiB3aGV0aGVyIHRvIGZhdm9yIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGluc3RlYWQgb2YgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAuIEhvd2V2ZXIsIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGluIGBudGJfbmV0ZGV2LmNgLiBJdCAqaXMqIGEgY2FsbGJhY2ssIGFuIGVudHJ5IHBvaW50LCBhbmQgdGhhdCBtYXR0ZXJzIGZvciBob3cgd2UncmUgYnVpbGRpbmcgdGhlIGFic3RyYWN0aW9uIGhlcmUuIFNvIGl0J3MgZmluZSB0byBrZWVwIGl0LiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBudGJfdHhfY29weV9jYWxsYmFja2AgaW4gYG50Yl90cmFuc3BvcnQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTA5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjQwLjI4OTAzODQ2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1ODU4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRiX3R4X2NvcHlfY2FsbGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYz0xNjgwPXN0YXRpYyB2b2lkIG50Yl90cmFuc3BvcnRfcnhjX2RiKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0xNzE4LVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoxNzE5OnN0YXRpYyB2b2lkIG50Yl90eF9jb3B5X2NhbGxiYWNrKHZvaWQgKmRhdGEsXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE3MjAtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXMpXFxuLS1cXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MTc4Nz1zdGF0aWMgdm9pZCBudGJfbWVtY3B5X3R4X29uX3N0YWNrKHN0cnVjdCBudGJfcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkIF9faW9tZW0gKm9mZnNldClcXG4tLVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYy0xODAyLVxcbmRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuYzoxODAzOlxcdG50Yl90eF9jb3B5X2NhbGxiYWNrKGVudHJ5LCBOVUxMKTtcXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMTgwNC19XFxuLS1cXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmM9MTg1ND1zdGF0aWMgaW50IG50Yl9hc3luY190eF9zdWJtaXQoc3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwLFxcbi0tXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jLTE4OTEtXFxuZHJpdmVycy9udGIvbnRiX3RyYW5zcG9ydC5jOjE4OTI6XFx0dHhkLVxcdTAwM2VjYWxsYmFja19yZXN1bHQgPSBudGJfdHhfY29weV9jYWxsYmFjaztcXG5kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMtMTg5My1cXHR0eGQtXFx1MDAzZWNhbGxiYWNrX3BhcmFtID0gZW50cnk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjQwLjMzNDYyNzQ2MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIwNzMwOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBLY29uZmlnIG9wdGlvbnM6XG5cbioqQ2hlY2tpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgZm9yIE5UQiBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhY3R1YWxseSBidWlsZGluZyB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IG15IEtjb25maWcgZHVja3MgaW4gYSByb3cuIEl0J3MgdGltZSB0byB2ZXJpZnkgdGhlIHByZXJlcXVpc2l0ZXMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYE5UQl9ORVRERVZgIGFuZCBgTlRCX1RSQU5TUE9SVGAgYXJlIHByb3Blcmx5IGVuYWJsZWQgYW5kIHNldCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoZXNlIGFyZSB0aGUgZnVuZGFtZW50YWwgZmxhZ3MgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gb2YgdGhlIE5UQiBuZXR3b3JrIGRldmljZSBzdXBwb3J0IGFuZCB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgbGF5ZXIuIEkgY2FuJ3QgZXZlbiAqdGhpbmsqIGFib3V0IGNvbXBpbGluZyB0aGlzIGNvZGUgaWYgdGhvc2UgZXNzZW50aWFsIGJ1aWxkaW5nIGJsb2NrcyBhcmUgbWlzc2luZyBvciBtaXNjb25maWd1cmVkLiBTbywgbGV0J3MgaGVhZCB0byB0aGUgS2NvbmZpZyBhbmQgZW5zdXJlIHRob3NlIG9wdGlvbnMgYXJlIHNldCBhcyByZXF1aXJlZC4gSXQncyBhIHF1aWNrIGJ1dCBlc3NlbnRpYWwgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NDo0My4zNTUzNjE0NzVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQzNTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEJfVFJBTlNQT1JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udGIvS2NvbmZpZz0yOT1zb3VyY2UgXFxcImRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbnRiL0tjb25maWc6MzE6Y29uZmlnIE5UQl9UUkFOU1BPUlRcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJOVEIgVHJhbnNwb3J0IENsaWVudFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6NDMuNDAzNDA5OTI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjMzMTg3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIG9mIGBOVEJfVFJBTlNQT1JUYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IGFzc2VzcyB0aGUgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBgTlRCX1RSQU5TUE9SVGAuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIG1vZHVsZSAqcmVsaWVzKiBvbiBhbmQsIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBpdCAqZG9lc24ndCogZGVwZW5kIG9uLCBidXQgd2hpY2ggd2UgbWF5IGhhdmUgYXNzdW1lZCBpdCBkaWQuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIGRlcGVuZGVuY3kgZ3JhcGggaW4gbXkgbWluZCwgb3IgYmV0dGVyIHlldCwgYSB2aXN1YWxpemF0aW9uIGlmIG9uZSBkb2Vzbid0IGV4aXN0LiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYW55IG1lYW5pbmdmdWwgaW1wYWN0LlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIOKAkyB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlcywgdGhlIHNlY29uZC1vcmRlciByZWxhdGlvbnNoaXBzIHRoYXQgb2Z0ZW4gYml0ZSB5b3UgbGF0ZXIuIEkgbmVlZCB0byBrbm93IG5vdCBqdXN0IHRoZSBkaXJlY3QgdXBzdHJlYW0gbW9kdWxlcywgYnV0IGFsc28gdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgdGhlaXJzLCBhbmQgc28gb24uIEFueSB1bmV4cGVjdGVkIGNvbm5lY3Rpb24gY291bGQgcG90ZW50aWFsbHkgbWFuaWZlc3QgaW4gc3VidGxlIGJ1Z3MsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBjb21wYXRpYmlsaXR5IGlzc3VlcyBkb3duIHRoZSByb2FkLlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgKm5hdHVyZSogb2YgdGhlc2UgZGVwZW5kZW5jaWVzLiBBcmUgdGhleSBoYXJkLCBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzLCBvciBhcmUgdGhleSBtb3JlIGZsZXhpYmxlLCBwZXJoYXBzIHJ1bnRpbWUgbGlua3Mgb3IgaW50ZXJmYWNlcz8gVGhlIHR5cGUgb2YgZGVwZW5kZW5jeSB3aWxsIGdyZWF0bHkgaW5mbHVlbmNlIGhvdyBjaGFuZ2VzIHJpcHBsZSB0aHJvdWdoIHRoZSBzeXN0ZW0uXG5cbkkgd2FudCB0byBrbm93IGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBsdXJraW5nLiBBIGNpcmN1bGFyIGRlcGVuZGVuY3kgd291bGQgYmUgYW4gYWJzb2x1dGUgbmlnaHRtYXJlIHdoZW4gdHJ5aW5nIHRvIHJlZmFjdG9yLiBJIGFtIHdvbmRlcmluZyBob3cgdGhpcyB0aWVzIGluIHdpdGggYW55IG5ldyB3b3JrIG9yIGZlYXR1cmVzIHdlIGFyZSB0cnlpbmcgdG8gaW5jb3Jwb3JhdGUuXG5cbkZpbmFsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgdG9vbHMgYXQgbXkgZGlzcG9zYWwuIERvIEkgaGF2ZSBhIHJlbGlhYmxlIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCB0aGF0IGNhbiBnZW5lcmF0ZSBhIGNvbXByZWhlbnNpdmUgcmVwb3J0PyBDYW4gSSB0cmFjZSB0aGUgY29ubmVjdGlvbnMgbWFudWFsbHkgaWYgdGhlIHRvb2xpbmcgaXMgaW5hZGVxdWF0ZT8gVGhlIHNwZWVkIGFuZCBhY2N1cmFjeSBvZiBteSBhbmFseXNpcyB3aWxsIGRlcGVuZCBvbiBob3cgZWZmaWNpZW50bHkgSSBjYW4gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU0OjQ3LjE2NjczMTA4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczMzQ5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5UQl9UUkFOU1BPUlR8ZGVwZW5kcyBvbi4qTlRCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbnRiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udGIvS2NvbmZpZz0yOT1zb3VyY2UgXFxcImRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbnRiL0tjb25maWc6MzE6Y29uZmlnIE5UQl9UUkFOU1BPUlRcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJOVEIgVHJhbnNwb3J0IENsaWVudFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6NDcuMjE0MDY4ODI5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTA4MzMzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhlIGRlcGVuZGVuY3kgeW91J3ZlIGlkZW50aWZpZWQ6XG5cbioqRGVwZW5kZW5jeSBEZWR1Y3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgb3Igc2V0dXAuLi4gYW5kIEknbSBzZWVpbmcgYE5UQl9UUkFOU1BPUlRgIGFuZCBhIGNvbmRpdGlvbmFsIGBpZiBOVEJgLiBJdCdzIGltbWVkaWF0ZWx5IGNsZWFyLiBgTlRCX1RSQU5TUE9SVGAncyB2ZXJ5IGV4aXN0ZW5jZSAqZGVwZW5kcyogb24gYE5UQmAgYmVpbmcgZGVmaW5lZC4gSXQncyBuZXN0ZWQgcmlnaHQgaW5zaWRlIHRoYXQgY29uZGl0aW9uYWwgYmxvY2ssIHNvIGlmIGBOVEJgIGlzbid0IHNldCwgYE5UQl9UUkFOU1BPUlRgIHNpbXBseSAqd29uJ3QqIGV4aXN0LiBJdCdzIGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeS4gVGhlcmUncyBubyB3YXkgYXJvdW5kIGl0LiBNeSBtZW50YWwgbW9kZWwgb2YgdGhlIHN5c3RlbSBuZWVkcyB0byByZWZsZWN0IHRoaXMgaGFyZHdpcmVkIHJlbGF0aW9uc2hpcC4gSWYgSSdtIHRyb3VibGVzaG9vdGluZyBvciBjb25maWd1cmluZywgdGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNoZWNrLiBUaGlzIGlzIG5vdCBhIGNob2ljZSwgaXQncyBhIGJ1aWx0LWluIGNvbnN0cmFpbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTQ6NTAuNDA0OTA1ODg0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM4NDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBOVEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udGIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL250Yi9LY29uZmlnPTI9bWVudWNvbmZpZyBOVEJcXG4tLVxcbmRyaXZlcnMvbnRiL0tjb25maWctMTMtXFxuZHJpdmVycy9udGIvS2NvbmZpZzoxNDppZiBOVEJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NDo1MC40NDkyOTQ2MDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1NTM2MDM4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgRGVwZW5kZW5jaWVzIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHN0YXJ0aW5nIGEgbmV3IGludGVncmF0aW9uIG9yIHByb2plY3QsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBzcXVhcmVseSBvbiB0aGUgbmVjZXNzYXJ5IGNvcmUgY29tcG9uZW50cy4gUmlnaHQgbm93LCBJJ20gdGhpbmtpbmcgd2UncmUgZGVmaW5pdGVseSBnb2luZyB0byBuZWVkIGBOVEJgLCB0aGF0J3MgYSBnaXZlbi4gVGhlbiB0aGVyZSdzIGBOVEJfVFJBTlNQT1JUYCDigJMgb2J2aW91c2x5IGVzc2VudGlhbCBmb3IgZGF0YSBtb3ZlbWVudC4gQW5kIG9mIGNvdXJzZSwgd2UnbGwgbmVlZCBgTlRCX05FVERFVmAgdG8gZGVhbCB3aXRoIG5ldHdvcmsgZGV2aWNlIGFzcGVjdHMuXG5cbkJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8ganVzdCBhc3N1bWUgdGhvc2UgYXJlIHRoZSAqb25seSogcGllY2VzIHdlJ2xsIG5lZWQuIE15IGV4cGVyaWVuY2UgaGFzIHRhdWdodCBtZSB0aGF0IGRlcGVuZGVuY2llcyBjYW4gYmUgc25lYWt5LCBwb3BwaW5nIHVwIGluIHVuZXhwZWN0ZWQgcGxhY2VzLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZG8gYSB0aG9yb3VnaCBjaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgdml0YWwgY29tcG9uZW50cyB0aGF0IHRoZXNlIHRocmVlIG1pZ2h0IHJlbHkgb24sIG9yIHRoYXQgdGhpcyBzZXR1cCBtaWdodCByZXF1aXJlLiBOZWVkIHRvIGRvdCBteSBpJ3MgYW5kIGNyb3NzIG15IHQncyBvbiB0aGlzLiBHb3R0YSBiZSBjb21wbGV0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NTo1NC4wMDI5MDE2N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg3ODk5MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBORVRERVZJQ0VTXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03LVxcdGRlZmF1bHQgeSBpZiBVTUxcXG5kcml2ZXJzL25ldC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTktXFx0Ym9vbCBcXFwiTmV0d29yayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDE9Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDpcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NzQ9Y29uZmlnIFdJUkVHVUFSRFxcbmRyaXZlcnMvbmV0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo3NjpcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03Ny1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9OTI9Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xcbmRyaXZlcnMvbmV0L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gV0lSRUdVQVJEXFxuZHJpdmVycy9uZXQvS2NvbmZpZy05NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTEwMz1jb25maWcgT1ZQTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTA1OlxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNi1cXHRzZWxlY3QgRFNUX0NBQ0hFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTEzNj1jb25maWcgTkVUX0ZDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzctXFx0Ym9vbCBcXFwiRmlicmUgQ2hhbm5lbCBkcml2ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjEzODpcXHRkZXBlbmRzIG9uIFNDU0kgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0xNDk9Y29uZmlnIElGQlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTUwLVxcdHRyaXN0YXRlIFxcXCJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTUxOlxcdGRlcGVuZHMgb24gTkVUX0FDVF9NSVJSRUQgfHwgTkZUX0ZXRF9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1Mi1cXHRzZWxlY3QgTkVUX1JFRElSRUNUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTE3OT1jb25maWcgTUFDVlRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVxcdHRyaXN0YXRlIFxcXCJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgxOlxcdGRlcGVuZHMgb24gTUFDVkxBTlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgyOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgzLVxcdHNlbGVjdCBUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MTkzPWNvbmZpZyBJUFZMQU5fTDNTXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTQ6XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5NTpcXHRkZXBlbmRzIG9uIElQVkxBTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTk2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MTk5PWNvbmZpZyBJUFZMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVAtVkxBTiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjAxOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjAyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIxNy1cXHR0cmlzdGF0ZSBcXFwiSVAtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjE4OlxcdGRlcGVuZHMgb24gSVBWTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTk6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMjAtXFx0c2VsZWN0IFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMjpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMy1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjQ1PWNvbmZpZyBHRU5FVkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0Ni1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNDc6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDgtXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYxLVxcdHRyaXN0YXRlIFxcXCJCYXJlIFVEUCBFbmNhcHN1bGF0aW9uXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjYyOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYzLVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNzI9Y29uZmlnIEdUUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVxcdHRyaXN0YXRlIFxcXCJHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mjc0OlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjc1LVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yODk9Y29uZmlnIFBGQ1BcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI5MC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IEZvcndhcmRpbmcgQ29udHJvbCBQcm90b2NvbCAoUEZDUClcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyOTE6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yOTItXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMwMj1jb25maWcgQU1UXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzA0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUF9NVUxUSUNBU1RcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwNS1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzI3PWNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjk6XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMzND1jb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM2OlxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzctXFx0XFx0XFx0IShORVRDT05TT0xFPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzQ1PWNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ2LVxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ3OlxcdGRlcGVuZHMgb24gTkVUQ09OU09MRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ4LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNTU9Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXFx0Ym9vbCBcXFwiUHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNTc6XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzU4LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzM9Y29uZmlnIE5UQl9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3NC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBFdGhlcm5ldCBvdmVyIE5UQiBUcmFuc3BvcnRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNzU6XFx0ZGVwZW5kcyBvbiBOVEJfVFJBTlNQT1JUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzc9Y29uZmlnIFJJT05FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzc4LVxcdHRyaXN0YXRlIFxcXCJSYXBpZElPIEV0aGVybmV0IG92ZXIgbWVzc2FnaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc5OlxcdGRlcGVuZHMgb24gUkFQSURJT1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzgwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzgxPWNvbmZpZyBSSU9ORVRfVFhfU0laRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzgyLVxcdGludCBcXFwiTnVtYmVyIG9mIG91dGJvdW5kIHF1ZXVlIGVudHJpZXNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozODM6XFx0ZGVwZW5kcyBvbiBSSU9ORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4NC1cXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4Ny1cXHRpbnQgXFxcIk51bWJlciBvZiBpbmJvdW5kIHF1ZXVlIGVudHJpZXNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozODg6XFx0ZGVwZW5kcyBvbiBSSU9ORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4OS1cXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM5MT1jb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5NC1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDQtXFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0NTpcXHRkZXBlbmRzIG9uIFZJUlRJT1xcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ2LVxcdHNlbGVjdCBORVRfRkFJTE9WRVJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDYzPWNvbmZpZyBORVRLSVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cXHRib29sIFxcXCJCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDY1OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ3Mj1jb25maWcgTkVUX1ZSRlxcbmRyaXZlcnMvbmV0L0tjb25maWctNDczLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc0OlxcdGRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NzU6XFx0ZGVwZW5kcyBvbiBORVRfTDNfTUFTVEVSX0RFVlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc2OlxcdGRlcGVuZHMgb24gSVBWNl9NVUxUSVBMRV9UQUJMRVMgfHwgSVBWNj1uXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00ODE9Y29uZmlnIFZTT0NLTU9OXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00ODItXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgdnNvY2sgbW9uaXRvcmluZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0ODM6XFx0ZGVwZW5kcyBvbiBWSE9TVF9WU09DS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNDg0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDg5PWNvbmZpZyBNSElfTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00OTAtXFx0dHJpc3RhdGUgXFxcIk1ISSBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ5MTpcXHRkZXBlbmRzIG9uIE1ISV9CVVNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ5Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTU0ND1jb25maWcgWEVOX05FVERFVl9GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ1LVxcdHRyaXN0YXRlIFxcXCJYZW4gbmV0d29yayBkZXZpY2UgZnJvbnRlbmQgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ2OlxcdGRlcGVuZHMgb24gWEVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXFx0c2VsZWN0IFhFTl9YRU5CVVNfRlJPTlRFTkRcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTYyPWNvbmZpZyBYRU5fTkVUREVWX0JBQ0tFTkRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU2My1cXHR0cmlzdGF0ZSBcXFwiWGVuIGJhY2tlbmQgbmV0d29yayBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NjQ6XFx0ZGVwZW5kcyBvbiBYRU5fQkFDS0VORFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTY1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODUtXFx0dHJpc3RhdGUgXFxcIlZNd2FyZSBWTVhORVQzIGV0aGVybmV0IGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4NjpcXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODc6XFx0ZGVwZW5kcyBvbiBQQUdFX1NJWkVfTEVTU19USEFOXzY0S0JcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OC1cXHRzZWxlY3QgUEFHRV9QT09MXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTU5ND1jb25maWcgRlVKSVRTVV9FU1xcbmRyaXZlcnMvbmV0L0tjb25maWctNTk1LVxcdHRyaXN0YXRlIFxcXCJGVUpJVFNVIEV4dGVuZGVkIFNvY2tldCBOZXR3b3JrIERldmljZSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1OTY6XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01OTctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDY6XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA3OlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA4OlxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwOTpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTAtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU1OjU0LjM5MDgwNjEwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ3OTgxOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBOVEJgIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgaXQncyBsb29raW5nIGxpa2UgYE5UQl9ORVRERVZgIHJlbGllcyBkaXJlY3RseSBvbiBgTlRCX1RSQU5TUE9SVGAuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgbmV0d29yayBkZXZpY2UgbmVlZHMgYSB0cmFuc3BvcnQgbGF5ZXIuIE5vdywgYE5UQl9UUkFOU1BPUlRgIGl0c2VsZiBpcyBidWlsdCBvbiB0b3Agb2YgdGhlIGJhc2UgYE5UQmAgbW9kdWxlLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgc28gZmFyLCB0aGUgcmVsYXRpb25zaGlwcyBhcmUgY2xlYXI6IE5FVERFViAtXHUwMDNlIFRSQU5TUE9SVCAtXHUwMDNlIE5UQi4gQnV0IEkgYWx3YXlzIGxpa2UgdG8gZG91YmxlLWNoZWNrIHRoZXNlIHRoaW5ncy4gRGVwZW5kZW5jaWVzIGNhbiBiZSBzbmVha3ksIGVzcGVjaWFsbHkgaW4gc29tZXRoaW5nIGFzIGNvbXBsZXggYXMgYSBrZXJuZWwgZHJpdmVyLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSBzaG91bGQgcHJvYmFibHkgb3BlbiB1cCBgZHJpdmVycy9udGIvS2NvbmZpZ2AgYW5kIHNjYW4gdGhyb3VnaCB0aGUgb3B0aW9ucyB0aGVyZSB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFNvbWV0aW1lcyB0aGVyZSBhcmUgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBjb25kaXRpb25hbCByZXF1aXJlbWVudHMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQgZnJvbSBhIGN1cnNvcnkgZ2xhbmNlLiBCZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gZnVuZGFtZW50YWwgZHJpdmVyIGJ1aWxkaW5nIGJsb2Nrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NTo1OC4yMzg3OTE0NDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTI3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9udGIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL250Yi9LY29uZmlnPTI9bWVudWNvbmZpZyBOVEJcXG5kcml2ZXJzL250Yi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5vbi1UcmFuc3BhcmVudCBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL250Yi9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL250Yi9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9udGIvS2NvbmZpZz0xNj1jb25maWcgTlRCX01TSVxcbmRyaXZlcnMvbnRiL0tjb25maWctMTctXFx0Ym9vbCBcXFwiTVNJIEludGVycnVwdCBTdXBwb3J0XFxcIlxcbmRyaXZlcnMvbnRiL0tjb25maWc6MTg6XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuZHJpdmVycy9udGIvS2NvbmZpZy0xOS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU1OjU4LjI4NTcyNzgwOVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM3OTQ0NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5UQiBDb25maWd1cmF0aW9uIERpbGVtbWEqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBOVEIgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGF0IG1lIGlzIHRoZSBkZXBlbmRlbmN5IOKAkyBgTlRCYCByZWxpZXMgb24gYFBDSWAuIE1ha2VzIHNlbnNlLCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaW5jbHVkZSBhbGwgdGhlIHJlbGV2YW50IG9wdGlvbnMgdG8gZ2V0IHRoaXMgdGhpbmcgdXAgYW5kIHJ1bm5pbmcgcHJvcGVybHkuIExldCdzIGFkZCBgTlRCYCwgYE5UQl9UUkFOU1BPUlRgLCBhbmQgYE5UQl9ORVRERVZgIHRvIHRoZSBtaXguIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBjb21wb25lbnRzLlxuXG5XYWl0IGEgc2Vjb25k4oCmIHdhc24ndCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgc3l6a2FsbGVyIGhhdmluZyBhIGR1bW15IE5UQiBkcml2ZXI/IEkgY291bGQgYmUgaW1hZ2luaW5nIHRoaW5ncywgYnV0IGl0J3Mgd29ydGggYSBkb3VibGUtY2hlY2suIE9rYXksIHllYWgsIGxldCdzIGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdGVzdCBkcml2ZXIgYW5kIGl0cyByZWxhdGVkIGNvbmZpZyBvcHRpb25zIGJ5IGNoZWNraW5nIGBkcml2ZXJzL250Yi90ZXN0L0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXprYWxsZXIgZHJpdmVyIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBteSBjb25maWd1cmF0aW9uLiBJIGhvcGUgdGhpcyBjb3ZlcnMgZXZlcnl0aGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NjowMi40MjM2NzUyMDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzAzNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL250Yi90ZXN0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnOjI6Y29uZmlnIE5UQl9QSU5HUE9OR1xcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEIgUGluZyBQb25nIFRlc3QgQ2xpZW50XFxcIlxcbi0tXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZzoxMTpjb25maWcgTlRCX1RPT0xcXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMTItXFx0dHJpc3RhdGUgXFxcIk5UQiBEZWJ1Z2dpbmcgVG9vbCBUZXN0IENsaWVudFxcXCJcXG4tLVxcbmRyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWc6MjI6Y29uZmlnIE5UQl9QRVJGXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJOVEIgUkFXIFBlcmYgTWVhc3VyaW5nIFRvb2xcXFwiXFxuLS1cXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMjktXFxuZHJpdmVycy9udGIvdGVzdC9LY29uZmlnOjMwOmNvbmZpZyBOVEJfTVNJX1RFU1RcXG5kcml2ZXJzL250Yi90ZXN0L0tjb25maWctMzEtXFx0dHJpc3RhdGUgXFxcIk5UQiBNU0kgVGVzdCBDbGllbnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjAyLjQ2Nzk4NDA5NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQ2NjQ0MDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgU3l6a2FsbGVyIEJ1ZyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIERpZCBJIGp1c3Qgc2VlIHNvbWV0aGluZyBhYm91dCBgc3l6X250YmA/IFRoYXQgY2FuJ3QgYmUgcmlnaHQuIFRoZSBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgdGhpcyB0b29sICpjYW5ub3QqIGJlIHVzZWQgZm9yIGxvb2tpbmcgYXQgc3l6a2FsbGVyJ3Mgb3duIHBzZXVkby1zeXNjYWxscyBsaWtlIGFueXRoaW5nIHByZWZpeGVkIHdpdGggYHN5el9gLiBUaGV5IGFyZW4ndCBpbiB0aGUga2VybmVsLCBzbyB3aGF0J3MgZ29pbmcgb24/IElmIHN5emthbGxlciBmb3VuZCBhIGJ1ZyByZWxhdGVkIHRvIE5UQiwgaXQgbXVzdCBiZSB0ZXN0YWJsZSBzb21laG93LlxuXG5SaWdodCwgdGhlcmUgaGFzIHRvIGJlIGEgcmVhbCBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgdGhpbmsuLi4gYSB2aXJ0dWFsIE5UQiBkcml2ZXI/IFRoYXQncyBwbGF1c2libGUuIFdoZXJlIHdvdWxkIHRoYXQgbGl2ZT8gQWgsIHByb2JhYmx5IGluIGBkcml2ZXJzL250Yi9ody9lcGYvYC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoYXQgZGlyZWN0b3J5IGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBIb3BlZnVsbHksIHRoYXQgZ2l2ZXMgdXMgdGhlIGNvbnRleHQgd2UgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTY6MDYuMjE0NjMxMjcyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjMxMDA1NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL250Yi9ody9lcGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTY6MDYuMjYwOTQ1OTE3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTYzNzQwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBFUEYgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRVBGIGhhcmR3YXJlIHdpdGhpbiB0aGUgTlRCIGRyaXZlci4gTXkgZmlyc3Qgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgZm9yIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgYXJlIGxpa2VseSBkZWZpbmVkLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBlYWNoIG9wdGlvbiBoYXMgb24gdGhlIGRyaXZlcidzIGJlaGF2aW9yIGFuZCBwZXJmb3JtYW5jZS4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgcGllY2UgaXMgY29udHJvbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwOTMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NjowOS4yNzczMjI3NjlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9udGIvaHcvZXBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIE5UQl9FUEZcXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEVQRiBOb24tVHJhbnNwYXJlbnQgQnJpZGdlIHN1cHBvcnRcXFwiXFxuICAgMzpcXHRcXHRoZWxwXFxuICAgNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEVQRiBOVEIgb24gY29uZmlndXJhYmxlIGVuZHBvaW50LlxcbiAgIDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NjowOS4yNzczODAyMzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MTI0NDczMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBOVEI6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIGBOVEJfRVBGYCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzLiBUaGF0J3MgZ29vZC4gQW5kIHNpbmNlIHN5emthbGxlciBmb3VuZCBhIGJ1ZywgdGhlIGFmZmVjdGVkIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRpbWUgdG8gYnJlYWsgdGhpcyBkb3duIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIHNheSB0aGF0IGlmIHRoZXJlJ3MgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBhbmQgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLCB0aGVuIHdlIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuICBTaW5jZSB0aGVyZSdzIGEgYnVnLCB0aGF0J3Mgd2hhdCB3ZSBoYXZlIGhlcmUuIFNvLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk5vdywgd2UgbmVlZCB0byBleHRyYWN0IHRoZSBpbXBvcnRhbnQga2VybmVsIGZ1bmN0aW9ucyBmb3IgYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZS4uLiAgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAsIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgLCBhbmQgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCBzZWVtIGxpa2UgdGhlIGtleSBwbGF5ZXJzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgSSBoYXZlIGNvbmZpcm1lZCB0aGF0LlxuXG5OZXh0IHVwIGFyZSB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBXZSBuZWVkIHRvIGRlZmluZSB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkLiBUaGUgb2J2aW91cyBvbmVzIGhlcmUgYXJlIGBOVEJgLCBgTlRCX1RSQU5TUE9SVGAsIGFuZCBgTlRCX05FVERFVmAuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBmdW5jdGlvbnMgd2UgaWRlbnRpZmllZC4gIGBudGJfdHhfY29weV9jYWxsYmFja2AgaXMgc3RhdGljLiBUaGF0J3MgYSBwb3RlbnRpYWwgaXNzdWUuICBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBIb3dldmVyLCBpdCAqaXMqIHVzZWQgYXMgYSBjYWxsYmFjazogYHR4ZC1cdTAwM2VjYWxsYmFja19yZXN1bHQgPSBudGJfdHhfY29weV9jYWxsYmFjaztgLiBUaGF0IG1lYW5zIGl0J3MgcHJvYmFibHkgbm90IGlubGluZWQgYW5kIGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLCBzbyBpdCBzaG91bGQgYmUgZmluZS4gIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGlzIGV4cG9ydGVkLCB0aGF0J3MgcGVyZmVjdC4gIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGlzIHN0YXRpYywgYnV0IGlzIGEgbmV0ZGV2IG9wOiBgLm5kb19zdGFydF94bWl0ID0gbnRiX25ldGRldl9zdGFydF94bWl0LGAgc28gaXQncyBwcm9iYWJseSBub3QgaW5saW5lZCwgYW5kIGl0J3MgZGVmaW5pdGVseSBhbiBlbnRyeSBwb2ludC5cblxuT2theSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkPyBgbnRiX25ldGRldl9tYXliZV9zdG9wX3R4YCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBkaXJlY3RseSwgd2hpY2ggbWFrZXMgaXQgYSBjYW5kaWRhdGUgZm9yIGlubGluaW5nLiBXZSAqZG9uJ3QqIHdhbnQgdGhhdC4gU28gbGV0J3Mgc2tpcCB0aGF0LlxuXG5IbW0sIGBudGJfcHJvY2Vzc190eGAgaW4gYGRyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY2AuLi4gVGhhdCdzIGJlZW4gbW9kaWZpZWQhIExldCdzIGV4YW1pbmUgdGhlIGRpZmYuIEFoLCBzb21lIGxpbmVzIHdlcmUgcmVtb3ZlZC4gVGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBzdGF0aWMuICBJcyBpdCBhbiBlbnRyeSBwb2ludD8gTm8sIGl0J3MgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb25zLCBsaWtlIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgLCB3aGljaCBpcyBwcm9iYWJseSB0aGUgbWFpbiBlbnRyeSBwb2ludC4gU28sIHdlIGFscmVhZHkgaGF2ZSB0aGF0LlxuXG5Ob3cgbGV0J3MgY2hlY2sgYG50Yl9uZXRkZXZfdHhfdGltZXJgIGluIGBkcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNgLiBXYWl0ISBgbnRiX25ldGRldl9zdGFydF94bWl0YCBpcyBtb2RpZmllZC4gQW5kIHRoZSBkaWZmIHNob3dzIGEgY29kZSBjaGFuZ2UgaGVyZS5cblxuU28sIGxldCdzIHJldmlldzogT3VyIGBGb2N1c1N5bWJvbHNgOiBgbnRiX25ldGRldl9zdGFydF94bWl0YCwgYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAsIGBudGJfdHhfY29weV9jYWxsYmFja2AuIGFuZCBvdXIgYEVuYWJsZUNvbmZpZ3NgOiBgTlRCYCwgYE5UQl9UUkFOU1BPUlRgLCBgTlRCX05FVERFVmAuXG5cbkFueXRoaW5nIGVsc2U/IElzIGBOVEJfRVBGYCByZWxldmFudD8gIFdlIGRvbid0IGtub3cgZm9yIHN1cmUsIGFzIHN5emthbGxlciBjb3VsZCBiZSB1c2luZyBzb21ldGhpbmcgZWxzZS4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhIGR1bW15IE5UQiBkcml2ZXI/ICBMZXQncyBjaGVjayBgZHJpdmVycy9udGIvaHcvYC4gIGBOVEJfUElOR1BPTkdgPyAgTm8sIHRoYXQncyBhIHRlc3QgY2xpZW50LCBub3QgYSBoYXJkd2FyZSBkcml2ZXIuICBgTlRCX05FVERFVmAgaXMgYSBjbGllbnQuIFdoYXQncyB0aGUgaGFyZHdhcmU/IEkgc2hvdWxkIGxvb2sgZm9yIGhhcmR3YXJlLCBvciBhIGBkdW1teWAgZHJpdmVyIGluIGBkcml2ZXJzL250Yi9ody9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM2MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNTo1NjoyMi43ODk4MzAxMzZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTk5Nzk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdW1teVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL250Yi9ody9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjIyLjgzNjAzNTIyMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI4MzY1Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlRCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTlRCIChOb24tVHJhbnNwYXJlbnQgQnJpZGdlKSBkcml2ZXIgcGF0Y2gsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdHJhbnNtaXQgcGF0aC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMgYW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCB0ZXN0aW5nLCBlc3BlY2lhbGx5IGZ1enppbmcgd2l0aCB0b29scyBsaWtlIHN5emthbGxlci5cblxuRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGhhcmR3YXJlIHZhcmlhdGlvbnMuIEknbSB3b25kZXJpbmcgd2hpY2ggc3BlY2lmaWMgTlRCIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyBhcmUgYWZmZWN0ZWQ6IGBkcml2ZXJzL250Yi9ody9pZHQvYCwgYGRyaXZlcnMvbnRiL2h3L2ludGVsL2AsIGBkcml2ZXJzL250Yi9ody9hbWQvYCwgYGRyaXZlcnMvbnRiL2h3L21zY2MvYCwgYGRyaXZlcnMvbnRiL2h3L2VwZi9gLiBUaGUgcGF0Y2ggZG9lc24ndCBzcGVjaWZ5IGEgXCJkdW1teVwiIGRyaXZlciwgc28gaXQgcHJvYmFibHkgaXMgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgbWF5YmUgd2l0aCBzb21lIGtpbmQgb2YgdmlydHVhbCBQQ0kgZnJhbWV3b3JrIG9yIHRoZSBnZW5lcmljIGBOVEJfRVBGYCBtb2R1bGUuXG5cblRoZSBmYWN0IHRoYXQgdGhlIGJ1ZyByZXBvcnQgY2FtZSBmcm9tIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAgaXMgc2lnbmlmaWNhbnQuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBzeXprYWxsZXIgKmlzKiBjYXBhYmxlIG9mIHRlc3RpbmcgdGhpcyBOVEIgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZ3JlYXQuIEkganVzdCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb3ZlcmFnZSwgYW5kIHRoZSBvYnZpb3VzIG9uZXMgYXJlIGBOVEJgLCBgTlRCX1RSQU5TUE9SVGAsIGFuZCBgTlRCX05FVERFVmAuIEknbGwgcHJvdmlkZSB0aG9zZSBjb25maWd1cmF0aW9ucyBpbiB0aGUgcmVzdWx0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBkZXBlbmRlbmNpZXMuIEkgc2VlIHRoYXQgYE5UQl9ORVRERVZgIHJlbGllcyBvbiBgTlRCX1RSQU5TUE9SVGAsIHdoaWNoIGluIHR1cm4gcmVsaWVzIG9uIGBOVEJgLCBhbmQgYE5UQmAgZGVwZW5kcyBvbiBgUENJYC4gVGhlIGBQQ0lgIGNvbmZpZyBzaG91bGQgYmUgc3RhbmRhcmQsIGJ1dCBJIHdpbGwgbWFrZSBub3RlIG9mIGl0LlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBzeW1ib2xzIHRoYXQgYXJlIGNoYW5nZWQgaW4gdGhlIHBhdGNoLiBJJ2xsIGNoZWNrIHdoaWNoIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBwb3RlbnRpYWxseSByZWFjaGFibGUuIExldCdzIHNlZS4uLiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGlzbid0IGV4cG9ydGVkLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gaXQgaXNuJ3QgcmVsZXZhbnQsIHNpbmNlIGl0J3MgdXNlZCB3aXRoaW4gZXhwb3J0ZWQgZnVuY3Rpb25zLiBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCBpcyBleHBvcnRlZC4gQW5kIGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGlzbid0IGRpcmVjdGx5IGV4cG9ydGVkLCBidXQgaXQncyBhIGBuZG9fc3RhcnRfeG1pdGAgY2FsbGJhY2ssIHNvIGl0ICppcyogcmVhY2hhYmxlLlxuXG5TbywgYmFzZWQgb24gdGhlIHBhdGNoIGRlc2NyaXB0aW9uIGFuZCBteSBjb2RlIGFuYWx5c2lzLCB0aGUga2V5IHN5bWJvbHMgdGhhdCByZXByZXNlbnQgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIGFyZTogYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAsIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgLCBhbmQgYG50Yl90eF9jb3B5X2NhbGxiYWNrYC4gVGhlc2UgYXJlIHRoZSBvbmVzIEknbGwgaGlnaGxpZ2h0IGFzIFwiRm9jdXNTeW1ib2xzXCIgZm9yIGZ1enppbmcgYW5kIHRlc3RpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGFuZCB0aGUgaGFuZGxpbmcgb2YgcXVldWUgc3RvcHMsIGVycm9ycywgbGluayBzdGF0dXMgYW5kIGZyYW1lIHNpemUgbGltaXRzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb24gbmFtZXMgb25lIGxhc3QgdGltZS4gWWVwLCBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGlzIGluZGVlZCBgc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlcylgLiBBbmQgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgaXMgYHN0YXRpYyBuZXRkZXZfdHhfdCBudGJfbmV0ZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpYC4gQW5kIGZpbmFsbHksIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIGlzIGBpbnQgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCwgdm9pZCAqY2IsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pYC5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gSSdsbCBjb25maWd1cmUgbXkgcmVzdWx0IHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ1MCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTY6MzQuMTE5Njk2NTc4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczNTQ0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5UQlwiLFxuICAgIFwiTlRCX1RSQU5TUE9SVFwiLFxuICAgIFwiTlRCX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50Yl9uZXRkZXZfc3RhcnRfeG1pdFwiLFxuICAgIFwibnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlXCIsXG4gICAgXCJudGJfdHhfY29weV9jYWxsYmFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOVEIgKE5vbi1UcmFuc3BhcmVudCBCcmlkZ2UpIG5ldGRldiBkcml2ZXIgYW5kIHRyYW5zcG9ydCBsYXllciB0byBmaXggYSBidWcgaW4gdGhlIHRyYW5zbWl0IHBhdGguIEl0IGNoYW5nZXMgaG93IGBudGJfbmV0ZGV2X3N0YXJ0X3htaXRgIGhhbmRsZXMgcXVldWUgc3RvcHMgYW5kIGVycm9ycywgYW5kIG1vZGlmaWVzIGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgIHRvIGNoZWNrIGZvciBsaW5rIHN0YXR1cyBhbmQgZnJhbWUgc2l6ZSBsaW1pdHMuIEl0IGFsc28gdXBkYXRlcyBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGNvcnJlY3RseSBoYW5kbGUgRE1BIGNvcHkgcmVzdWx0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgbmV0d29yayB0cmFuc21pdCBwYXRocyBvdmVyIE5UQiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEJcIixcbiAgICBcIk5UQl9UUkFOU1BPUlRcIixcbiAgICBcIk5UQl9ORVRERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGJfbmV0ZGV2X3N0YXJ0X3htaXRcIixcbiAgICBcIm50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZVwiLFxuICAgIFwibnRiX3R4X2NvcHlfY2FsbGJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlRCIChOb24tVHJhbnNwYXJlbnQgQnJpZGdlKSBuZXRkZXYgZHJpdmVyIGFuZCB0cmFuc3BvcnQgbGF5ZXIgdG8gZml4IGEgYnVnIGluIHRoZSB0cmFuc21pdCBwYXRoLiBJdCBjaGFuZ2VzIGhvdyBgbnRiX25ldGRldl9zdGFydF94bWl0YCBoYW5kbGVzIHF1ZXVlIHN0b3BzIGFuZCBlcnJvcnMsIGFuZCBtb2RpZmllcyBgbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlYCB0byBjaGVjayBmb3IgbGluayBzdGF0dXMgYW5kIGZyYW1lIHNpemUgbGltaXRzLiBJdCBhbHNvIHVwZGF0ZXMgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBjb3JyZWN0bHkgaGFuZGxlIERNQSBjb3B5IHJlc3VsdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgdHJhbnNtaXQgcGF0aHMgb3ZlciBOVEIsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjM0LjE5NzA1NzI1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY4Nzg1MjQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjM0LjE5NzYzNjI3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE5Njg3MjY5OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbG9naWMgYnVncywgcXVldWUgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBxdWV1ZSBzdGFydmF0aW9uIGlzc3VlcyBpbiB0aGUgTlRCIG5ldGRldiBkcml2ZXIuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCBtb3ZlcyBhIGZyYW1lIHNpemUgY2hlY2sgdG8gYW4gZWFybGllciBzeW5jaHJvbm91cyBzdGFnZSAoYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWApLCBhbmQgY2hhbmdlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGFkZCB0aGUgZW50cnkgYmFjayB0byB0aGUgZnJlZSBxdWV1ZSBiZWZvcmUgaW52b2tpbmcgdGhlIHRyYW5zbWlzc2lvbiBoYW5kbGVyLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjZmNTVlZjU2Yjc5YTI5ZTc1ZjgxMWJiYTlhMDdkZmJiYzZhMTVlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDA1OjUzOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXG5pbmRleCAwMjlhNGE1MzJhMTA0Li4wMmIzNWNmNTNhNjIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbnRiX25ldGRldi5jXG4rKysgYi9kcml2ZXJzL25ldC9udGJfbmV0ZGV2LmNcbkBAIC0xOTksOCArMTk5LDEwIEBAIHN0YXRpYyBpbnQgX19udGJfbmV0ZGV2X21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBzdGF0aWMgaW50IG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgbnRiX25ldGRldl9xdWV1ZSAqcSwgaW50IHNpemUpXG4ge1xuLVx0aWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChuZGV2LCBxLVx1MDAzZXFpZCkgfHxcbi1cdCAgICAobnRiX3RyYW5zcG9ydF90eF9mcmVlX2VudHJ5KHEtXHUwMDNlcXApIFx1MDAzZT0gc2l6ZSkpXG4rXHRpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKG5kZXYsIHEtXHUwMDNlcWlkKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdGlmIChudGJfdHJhbnNwb3J0X3R4X2ZyZWVfZW50cnkocS1cdTAwM2VxcCkgXHUwMDNlPSBzaXplKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldHVybiBfX250Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCBzaXplKTtcbkBAIC0yNTYsMjEgKzI1OCwzMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgbnRiX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRxID0gXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlc1txaWRdO1xuIFxuLVx0bnRiX25ldGRldl9tYXliZV9zdG9wX3R4KG5kZXYsIHEsIHR4X3N0b3ApO1xuK1x0aWYgKHVubGlrZWx5KG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCB0eF9zdG9wKSkpXG4rXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcbiBcdHJjID0gbnRiX3RyYW5zcG9ydF90eF9lbnF1ZXVlKHEtXHUwMDNlcXAsIHNrYiwgc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VsZW4pO1xuLVx0aWYgKHJjKVxuLVx0XHRnb3RvIGVycjtcbitcdGlmIChyYykge1xuK1x0XHRpZiAocmMgPT0gLUVBR0FJTiB8fCByYyA9PSAtRUJVU1kpIHtcbitcdFx0XHRuZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHEtXHUwMDNlcWlkKTtcbitcdFx0XHRtb2RfdGltZXIoXHUwMDI2cS1cdTAwM2V0eF90aW1lcixcbitcdFx0XHRcdCAgamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXModHhfdGltZSkpO1xuK1x0XHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbitcdFx0fVxuK1xuK1x0XHRnb3RvIGRyb3A7XG4rXHR9XG4gXG4gXHQvKiBjaGVjayBmb3IgbmV4dCBzdWJtaXQgKi9cbiBcdG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eChuZGV2LCBxLCB0eF9zdG9wKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG4tZXJyOlxuK2Ryb3A6XG4rXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4tXHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuLVx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG4gc3RhdGljIHZvaWQgbnRiX25ldGRldl90eF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbmRpZmYgLS1naXQgYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNcbmluZGV4IGY1OWY5MjZkNGJmYWEuLmY5Y2FhMWE2NTNjNWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL250Yi9udGJfdHJhbnNwb3J0LmNcbisrKyBiL2RyaXZlcnMvbnRiL250Yl90cmFuc3BvcnQuY1xuQEAgLTE3MTksOSArMTcxOSwxNiBAQCBzdGF0aWMgdm9pZCBudGJfdHJhbnNwb3J0X3J4Y19kYih1bnNpZ25lZCBsb25nIGRhdGEpXG4gc3RhdGljIHZvaWQgbnRiX3R4X2NvcHlfY2FsbGJhY2sodm9pZCAqZGF0YSxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzKVxuIHtcbitcdHN0cnVjdCBudGJfcGF5bG9hZF9oZWFkZXIgX19pb21lbSAqaGRyO1xuIFx0c3RydWN0IG50Yl9xdWV1ZV9lbnRyeSAqZW50cnkgPSBkYXRhO1xuLVx0c3RydWN0IG50Yl90cmFuc3BvcnRfcXAgKnFwID0gZW50cnktXHUwMDNlcXA7XG4tXHRzdHJ1Y3QgbnRiX3BheWxvYWRfaGVhZGVyIF9faW9tZW0gKmhkciA9IGVudHJ5LVx1MDAzZXR4X2hkcjtcbitcdHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcDtcbitcdHVuc2lnbmVkIGludCBsZW47XG4rXHR2b2lkICpjYl9kYXRhO1xuK1xuK1x0cXAgPSBlbnRyeS1cdTAwM2VxcDtcbitcdGhkciA9IGVudHJ5LVx1MDAzZXR4X2hkcjtcbitcdGNiX2RhdGEgPSBlbnRyeS1cdTAwM2VjYl9kYXRhO1xuK1x0bGVuID0gZW50cnktXHUwMDNlbGVuO1xuIFxuIFx0Lyogd2UgbmVlZCB0byBjaGVjayBETUEgcmVzdWx0cyBpZiB3ZSBhcmUgdXNpbmcgRE1BICovXG4gXHRpZiAocmVzKSB7XG5AQCAtMTc2OCwxNSArMTc3NSwxMyBAQCBzdGF0aWMgdm9pZCBudGJfdHhfY29weV9jYWxsYmFjayh2b2lkICpkYXRhLFxuIFx0ICogXCJsaW5rIGRvd25cIiBvciBzaW1pbGFyLiAgU2luY2Ugbm8gcGF5bG9hZCBpcyBiZWluZyBzZW50IGluIHRoZXNlXG4gXHQgKiBjYXNlcywgdGhlcmUgaXMgbm90aGluZyB0byBhZGQgdG8gdGhlIGNvbXBsZXRpb24gcXVldWUuXG4gXHQgKi9cbi1cdGlmIChlbnRyeS1cdTAwM2VsZW4gXHUwMDNlIDApIHtcbi1cdFx0cXAtXHUwMDNldHhfYnl0ZXMgKz0gZW50cnktXHUwMDNlbGVuO1xuLVxuLVx0XHRpZiAocXAtXHUwMDNldHhfaGFuZGxlcilcbi1cdFx0XHRxcC1cdTAwM2V0eF9oYW5kbGVyKHFwLCBxcC1cdTAwM2VjYl9kYXRhLCBlbnRyeS1cdTAwM2VjYl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGVudHJ5LVx1MDAzZWxlbik7XG4tXHR9XG4rXHRpZiAobGVuIFx1MDAzZSAwKVxuK1x0XHRxcC1cdTAwM2V0eF9ieXRlcyArPSBsZW47XG4gXG4gXHRudGJfbGlzdF9hZGQoXHUwMDI2cXAtXHUwMDNlbnRiX3R4X2ZyZWVfcV9sb2NrLCBcdTAwMjZlbnRyeS1cdTAwM2VlbnRyeSwgXHUwMDI2cXAtXHUwMDNldHhfZnJlZV9xKTtcbitcbitcdGlmIChsZW4gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHFwLVx1MDAzZXR4X2hhbmRsZXIpXG4rXHRcdHFwLVx1MDAzZXR4X2hhbmRsZXIocXAsIHFwLVx1MDAzZWNiX2RhdGEsIGNiX2RhdGEsIGxlbik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG50Yl9tZW1jcHlfdHhfb25fc3RhY2soc3RydWN0IG50Yl9xdWV1ZV9lbnRyeSAqZW50cnksIHZvaWQgX19pb21lbSAqb2Zmc2V0KVxuQEAgLTE5NTAsMTUgKzE5NTUsNiBAQCBzdGF0aWMgaW50IG50Yl9wcm9jZXNzX3R4KHN0cnVjdCBudGJfdHJhbnNwb3J0X3FwICpxcCxcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAoZW50cnktXHUwMDNlbGVuIFx1MDAzZSBxcC1cdTAwM2V0eF9tYXhfZnJhbWUgLSBzaXplb2Yoc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlcikpIHtcbi1cdFx0aWYgKHFwLVx1MDAzZXR4X2hhbmRsZXIpXG4tXHRcdFx0cXAtXHUwMDNldHhfaGFuZGxlcihxcCwgcXAtXHUwMDNlY2JfZGF0YSwgTlVMTCwgLUVJTyk7XG4tXG4tXHRcdG50Yl9saXN0X2FkZChcdTAwMjZxcC1cdTAwM2VudGJfdHhfZnJlZV9xX2xvY2ssIFx1MDAyNmVudHJ5LVx1MDAzZWVudHJ5LFxuLVx0XHRcdCAgICAgXHUwMDI2cXAtXHUwMDNldHhfZnJlZV9xKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4tXG4gXHRudGJfYXN5bmNfdHgocXAsIGVudHJ5KTtcbiBcbiBcdHFwLVx1MDAzZXR4X3BrdHMrKztcbkBAIC0yMzQ4LDkgKzIzNDQsMTEgQEAgaW50IG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZShzdHJ1Y3QgbnRiX3RyYW5zcG9ydF9xcCAqcXAsIHZvaWQgKmNiLCB2b2lkICpkYXRhLFxuIFx0aWYgKCFxcCB8fCAhbGVuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdC8qIElmIHRoZSBxcCBsaW5rIGlzIGRvd24gYWxyZWFkeSwganVzdCBpZ25vcmUuICovXG4gXHRpZiAoIXFwLVx1MDAzZWxpbmtfaXNfdXApXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gLUVOT0xJTks7XG4rXG4rXHRpZiAobGVuIFx1MDAzZSBxcC1cdTAwM2V0eF9tYXhfZnJhbWUgLSBzaXplb2Yoc3RydWN0IG50Yl9wYXlsb2FkX2hlYWRlcikpXG4rXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4gXHRlbnRyeSA9IG50Yl9saXN0X3JtKFx1MDAyNnFwLVx1MDAzZW50Yl90eF9mcmVlX3FfbG9jaywgXHUwMDI2cXAtXHUwMDNldHhfZnJlZV9xKTtcbiBcdGlmICghZW50cnkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA1OjU2OjM0LjE5NzYzNzI3OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTY4NzI0ODY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQWRkcmVzc2luZyBRdWV1ZSBNYW5hZ2VtZW50IGFuZCBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgaW4gTlRCIERyaXZlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSBtb2RpZnlpbmcgdGhlIE5UQiBuZXR3b3JrIGRldmljZSBhbmQgdHJhbnNwb3J0IGRyaXZlcnMuIExldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyBzeXN0ZW1hdGljYWxseS4gSXQgYXBwZWFycyB0aGUgcGF0Y2ggaXMgYWltZWQgYXQgcmVmaW5pbmcgcXVldWUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byBwYWNrZXQgZW5xdWV1ZWluZywgdHJhbnNtaXNzaW9uLCBhbmQgY29tcGxldGlvbi4gVGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGZvY3VzZWQgb24gdGhlIGNoYW5nZXMgYWNyb3NzIGBudGJfbmV0ZGV2LmNgIGFuZCBgbnRiX3RyYW5zcG9ydC5jYC5cblxuRmlyc3QsIGluIGBudGJfbmV0ZGV2LmNgLCB0aGUgcmV2aXNlZCBsb2dpYyB3aXRoaW4gYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAgc2VlbXMgdG8gdGlnaHRlbiB1cCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhIHRyYW5zbWlzc2lvbiBxdWV1ZSBpcyBoYWx0ZWQuIEJlZm9yZSwgdGhlcmUgd2FzIGEgZG91YmxlIGNoZWNrIG9mIHRoZSBzdWJxdWV1ZSBzdGF0ZSwgYW5kIGF2YWlsYWJsZSBxdWV1ZSBlbnRyaWVzLCBub3cgaXQgb25seSBjaGVja3MgdGhlIHN1YnF1ZXVlIHN0YXRlLCBhbmQgcmV0dXJucyBpZiBzdG9wcGVkLiBgbnRiX25ldGRldl9zdGFydF94bWl0YCBub3cgYWNjb3VudHMgZm9yIHRoZSByZXR1cm4gb2YgYG50Yl9uZXRkZXZfbWF5YmVfc3RvcF90eGAsIGFuZCBhcHByb3ByaWF0ZWx5IGhhbmRsZXMgYnVzeSBjb25kaXRpb25zLiBgbnRiX25ldGRldl9zdGFydF94bWl0YCBub3cgYWNjb3VudHMgZm9yIGEgYnVzeSByZXR1cm4uXG5cblRoZSBtZWF0IG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgaW4gYG50Yl90cmFuc3BvcnQuY2AsIGFuZCBzcGVjaWZpY2FsbHkgYG50Yl90eF9jb3B5X2NhbGxiYWNrYCBhbmQgYG50Yl9wcm9jZXNzX3R4YC4gRXhhbWluaW5nIGBudGJfdHhfY29weV9jYWxsYmFja2AsIEkgemVyb2VkIGluIG9uIHRoZSByZW9yZGVyaW5nIG9mIHRoZSBvcGVyYXRpb25zIGludm9sdmluZyB0aGUgYG50Yl9saXN0X2FkZGAgYW5kIHRoZSBjYWxsIHRvIGBxcC1cdTAwM2V0eF9oYW5kbGVyYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoZSBwb3RlbnRpYWwgZm9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBoYW5kbGVyIG1pZ2h0IGZyZWUgb3IgYWNjZXNzIGRhdGEgd2l0aGluIHRoZSBlbnRyeSwgYWZ0ZXIgd2hpY2ggdGhlIGxpc3QgYWRkaXRpb24gb2NjdXJzLiBIb3dldmVyLCB0aGlzIHBhdGNoIGNvcnJlY3RseSBwbGFjZXMgYG50Yl9saXN0X2FkZGAgKmJlZm9yZSogdGhlIGhhbmRsZXIgY2FsbC4gV2h5PyBUaGUgYHR4X2hhbmRsZXJgIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgcXVldWUgZW50cnkgaXMgcmVhZHkgZm9yIHJlLXVzZS4gVGhpcyBmaXhlcyB0aGUgb3JpZ2luYWwgYnVnLiBJdCdzIGEgY2xhc3NpY2FsIHF1ZXVlaW5nL2xvZ2ljIGVycm9yLlxuXG5BZGRpdGlvbmFsbHksIGBudGJfcHJvY2Vzc190eGAgaGFkIGEgY2hlY2sgb24gdGhlIHBhY2tldCdzIGxlbmd0aCBjb21wYXJlZCB0byBgcXAtXHUwMDNldHhfbWF4X2ZyYW1lYCBhbmQgY2FsbHMgYSBgdHhfaGFuZGxlcmAgd2l0aCBgLUVJT2AgaWYgaXQgZmFpbHMsIHdoaWNoIG1heSBjYXVzZSBpdCB0byBkcm9wIHBhY2tldHMuIFRoZSBwYXRjaCBtb3ZlcyB0aGlzIGNoZWNrIGRpcmVjdGx5IGludG8gYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWAsIGFuZCB0aGUgcmV0dXJuIHZhbHVlcyBhcmUgaGFuZGxlZCBhdCB0aGUgYG50Yl9uZXRkZXZfc3RhcnRfeG1pdGAgbGV2ZWwuXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBUaGlzIGlzbid0IGFib3V0IEtNU0FOIChrZXJuZWwgbWVtb3J5IHNhbml0aXplcikgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgYWJvdXQgZW5zdXJpbmcgcHJvcGVyIHF1ZXVlIG1hbmFnZW1lbnQsIGF2b2lkaW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGFuZCBwcmV2ZW50aW5nIHBhY2tldCBkcm9wcyBkdWUgdG8gaW1wcm9wZXIgbGVuZ3RoIGNoZWNraW5nLlxuXG5JIHdpbGwgZG91YmxlLWNoZWNrIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ29pbmcgdG8gdXNlciBzcGFjZSBvciBoYXJkd2FyZS4gSG93ZXZlciwgSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgbW9zdGx5IGludm9sdmUgdGhlIHBhY2tldCBsZW5ndGggY2hlY2sgbW92aW5nIGZyb20gYSBsYXRlciBwcm9jZXNzaW5nIHN0YWdlIHRvIGVhcmx5IGVucXVldWVpbmcsIHdoaWNoIGp1c3QgcmVmaW5lcyBlcnJvciBoYW5kbGluZy4gQWRkaXRpb25hbGx5LCB0aGUgcmVvcmRlcmluZyBvZiB0aGUgYG50Yl9saXN0X2FkZGAgY2FsbCBhbmQgdGhlIGB0eF9oYW5kbGVyYCBjYWxsIHdpdGhpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIGNsZWFybHkgYWRkcmVzc2VzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBhbmQvb3IgcXVldWVpbmcgbG9naWMgYnVncy5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRhcmdldGVkIGF0IGFkZHJlc3NpbmcgcXVldWUgbWFuYWdlbWVudCBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIHdpdGhpbiB0aGUgTlRCIGRyaXZlci4gU28gSSdsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxNSwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDU6NTY6NTMuODg0ODg4NzA3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbG9naWMgYnVncywgcXVldWUgbWFuYWdlbWVudCwgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBxdWV1ZSBzdGFydmF0aW9uIGlzc3VlcyBpbiB0aGUgTlRCIG5ldGRldiBkcml2ZXIuIEl0IG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCBtb3ZlcyBhIGZyYW1lIHNpemUgY2hlY2sgdG8gYW4gZWFybGllciBzeW5jaHJvbm91cyBzdGFnZSAoYG50Yl90cmFuc3BvcnRfdHhfZW5xdWV1ZWApLCBhbmQgY2hhbmdlcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBgbnRiX3R4X2NvcHlfY2FsbGJhY2tgIHRvIGFkZCB0aGUgZW50cnkgYmFjayB0byB0aGUgZnJlZSBxdWV1ZSBiZWZvcmUgaW52b2tpbmcgdGhlIHRyYW5zbWlzc2lvbiBoYW5kbGVyLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxvZ2ljIGJ1Z3MsIHF1ZXVlIG1hbmFnZW1lbnQsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcXVldWUgc3RhcnZhdGlvbiBpc3N1ZXMgaW4gdGhlIE5UQiBuZXRkZXYgZHJpdmVyLiBJdCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgbW92ZXMgYSBmcmFtZSBzaXplIGNoZWNrIHRvIGFuIGVhcmxpZXIgc3luY2hyb25vdXMgc3RhZ2UgKGBudGJfdHJhbnNwb3J0X3R4X2VucXVldWVgKSwgYW5kIGNoYW5nZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYG50Yl90eF9jb3B5X2NhbGxiYWNrYCB0byBhZGQgdGhlIGVudHJ5IGJhY2sgdG8gdGhlIGZyZWUgcXVldWUgYmVmb3JlIGludm9raW5nIHRoZSB0cmFuc21pc3Npb24gaGFuZGxlci4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowknqd2[1] Phase: Succeeded StartedAt: 2026-08-17 05:57:05 +0000 UTC FinishedAt: 2026-08-17 05:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 05:57:05 +0000 UTC FinishedAt: 2026-08-17 05:57:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2] Phase: Succeeded StartedAt: 2026-08-17 05:57:05 +0000 UTC FinishedAt: 2026-08-17 07:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 05:57:05 +0000 UTC FinishedAt: 2026-08-17 07:29:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 05:57:05 +0000 UTC FinishedAt: 2026-08-17 05:57:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 05:57:05 +0000 UTC FinishedAt: 2026-08-17 05:57:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknqd2/series-workflowknqd2-convert-artifact-3987317349/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 05:57:15 +0000 UTC FinishedAt: 2026-08-17 06:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 05:57:15 +0000 UTC FinishedAt: 2026-08-17 06:14:05 +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:*16810d5c-8277-4281-a82d-bf93b1f16e8b,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-workflowknqd2/series-workflowknqd2-convert-artifact-3987317349/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": "38230a51-bc3a-4c3f-b322-1f32f99c9c2c", "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-workflowknqd2/series-workflowknqd2-build-action-472686219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 05:57:15 +0000 UTC FinishedAt: 2026-08-17 06:13:55 +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:*16810d5c-8277-4281-a82d-bf93b1f16e8b,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-workflowknqd2/series-workflowknqd2-convert-artifact-3987317349/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": "38230a51-bc3a-4c3f-b322-1f32f99c9c2c", "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-workflowknqd2/series-workflowknqd2-build-action-472686219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 06:14:05 +0000 UTC FinishedAt: 2026-08-17 06:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 06:14:05 +0000 UTC FinishedAt: 2026-08-17 06:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 06:14:05 +0000 UTC FinishedAt: 2026-08-17 06:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 06:14:05 +0000 UTC FinishedAt: 2026-08-17 06:14:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknqd2/series-workflowknqd2-convert-artifact-2360896320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 06:14:15 +0000 UTC FinishedAt: 2026-08-17 06:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 06:14:15 +0000 UTC FinishedAt: 2026-08-17 06:16:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*38230a51-bc3a-4c3f-b322-1f32f99c9c2c,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-workflowknqd2/series-workflowknqd2-build-action-472686219/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-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 06:16:22 +0000 UTC FinishedAt: 2026-08-17 06:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 06:16:22 +0000 UTC FinishedAt: 2026-08-17 06:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 06:16:22 +0000 UTC FinishedAt: 2026-08-17 06:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 06:16:22 +0000 UTC FinishedAt: 2026-08-17 06:33:00 +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:*16810d5c-8277-4281-a82d-bf93b1f16e8b,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-workflowknqd2/series-workflowknqd2-convert-artifact-2360896320/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": "bdc4ce40-26b4-4b6d-a0d6-85407dff2ae5", "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-workflowknqd2/series-workflowknqd2-build-action-3679705340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 06:16:22 +0000 UTC FinishedAt: 2026-08-17 06:32:50 +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:*16810d5c-8277-4281-a82d-bf93b1f16e8b,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-workflowknqd2/series-workflowknqd2-convert-artifact-2360896320/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": "bdc4ce40-26b4-4b6d-a0d6-85407dff2ae5", "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-workflowknqd2/series-workflowknqd2-build-action-3679705340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 06:33:00 +0000 UTC FinishedAt: 2026-08-17 06:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 06:33:00 +0000 UTC FinishedAt: 2026-08-17 06:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 06:33:00 +0000 UTC FinishedAt: 2026-08-17 06:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 06:33:00 +0000 UTC FinishedAt: 2026-08-17 06:34:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bdc4ce40-26b4-4b6d-a0d6-85407dff2ae5,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-workflowknqd2/series-workflowknqd2-build-action-3679705340/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-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 06:35:02 +0000 UTC FinishedAt: 2026-08-17 07:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 06:35:02 +0000 UTC FinishedAt: 2026-08-17 07:29:36 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*38230a51-bc3a-4c3f-b322-1f32f99c9c2c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bdc4ce40-26b4-4b6d-a0d6-85407dff2ae5,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-workflowknqd2/series-workflowknqd2-build-action-472686219/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-workflowknqd2/series-workflowknqd2-build-action-3679705340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 06:35:02 +0000 UTC FinishedAt: 2026-08-17 06:35:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 06:35:02 +0000 UTC FinishedAt: 2026-08-17 06:35:07 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowknqd2/series-workflowknqd2-convert-artifact-2518456985/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 06:35:02 +0000 UTC FinishedAt: 2026-08-17 06:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 06:35:02 +0000 UTC FinishedAt: 2026-08-17 06:35:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 06:35:03 +0000 UTC FinishedAt: 2026-08-17 06:35:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 06:35:13 +0000 UTC FinishedAt: 2026-08-17 07:29:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowknqd2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ntb_netdev_start_xmit","ntb_transport_tx_enqueue","ntb_tx_copy_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTB","NTB_TRANSPORT","NTB_NETDEV"],"series_id":"81b36320-b33c-49b9-9af2-412446ccd577","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 06:35:13 +0000 UTC FinishedAt: 2026-08-17 07:29:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*38230a51-bc3a-4c3f-b322-1f32f99c9c2c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bdc4ce40-26b4-4b6d-a0d6-85407dff2ae5,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-workflowknqd2/series-workflowknqd2-build-action-472686219/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-workflowknqd2/series-workflowknqd2-build-action-3679705340/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-workflowknqd2/series-workflowknqd2-convert-artifact-2518456985/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,}