Name: series-workflow72txw Phase: Running StartedAt: 2026-07-30 02:58:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72txw[0] Phase: Running StartedAt: 2026-07-30 02:58:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72txw[0].run-triage Phase: Running StartedAt: 2026-07-30 02:58:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow72txw[0].run-triage(0) Phase: Running StartedAt: 2026-07-30 02:58:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "e5f87b0667448b28005d8de98e7d0abbc25ae9c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DMA_SHARED_BUFFER", "BLK_DEV_NVME", "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "e5f87b0667448b28005d8de98e7d0abbc25ae9c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DMA_SHARED_BUFFER", "BLK_DEV_NVME", "IO_URING" ], "series_id": "8d8cbfeb-0692-476b-ac72-e0fcce858dc5" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "io_uring" ], "focus_symbols": [ "dma_buf_io_init_map", "dma_buf_io_create_map", "dma_buf_io_invalidate_mappings", "dma_buf_io_ctx_release", "dma_buf_io_ctx_create", "io_drop_dmabuf_node", "__io_import_reg_buf", "__io_import_reg_vec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RtYV9idWZfaW9faW5pdF9tYXAmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9pb19jcmVhdGVfbWFwJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2N0eF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9fY3R4X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpb19kcm9wX2RtYWJ1Zl9ub2RlJiMzNDssCiAgICAmIzM0O19faW9faW1wb3J0X3JlZ19idWYmIzM0OywKICAgICYjMzQ7X19pb19pbXBvcnRfcmVnX3ZlYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIERNQS1idWYgc3VwcG9ydCBmb3IgaW9fdXJpbmcgYW5kIE5WTWUgYmxvY2sgZGV2aWNlcy4gSXQgYWRkcyBuZXcgY29yZSBpbmZyYXN0cnVjdHVyZSBpbiBkbWEtYnVmLWlvLmMsIG1vZGlmaWVzIGlvX3VyaW5nIHRvIHN1cHBvcnQgcmVnaXN0ZXJpbmcgYW5kIGltcG9ydGluZyBkbWFidWZzLCBhbmQgdXBkYXRlcyB0aGUgTlZNZSBQQ0kgZHJpdmVyIHRvIGhhbmRsZSBkbWFidWYtYmFja2VkIHJlcXVlc3RzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTNjN2JhOTVkOTk2MWU3MzI2Y2JlNThkYTU2ZjA3OTgzZGYxNjgzN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDAzOjIxOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0XG5pbmRleCAxMTEyNmVkNmY0MGY3Li40OWRhMjE0N2I3ZDg2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxuQEAgLTE2LDE2ICYjNDM7MTYsMTYgQEAgYnZfbGVuIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgY29tcGxldGVkIGluIHRoYXQgYmlvdmVjLlxuIEluIHRoZSBuZXcgc2NoZW1lIG9mIHRoaW5ncywgZXZlcnl0aGluZyB0aGF0IG11c3QgYmUgbXV0YXRlZCBpbiBvcmRlciB0b1xuIHBhcnRpYWxseSBjb21wbGV0ZSBhIGJpbyBpcyBzZWdyZWdhdGVkIGludG8gc3RydWN0IGJ2ZWNfaXRlcjogYmlfc2VjdG9yLFxuIGJpX3NpemUgYW5kIGJpX2lkeCBoYXZlIGJlZW4gbW92ZWQgdGhlcmU7IGFuZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBidl9vZmZzZXRcbi1hbmQgYnZfbGVuLCBzdHJ1Y3QgYnZlY19pdGVyIGhhcyBiaV9idmVjX2RvbmUsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZlxuJiM0MzthbmQgYnZfbGVuLCBzdHJ1Y3QgYnZlY19pdGVyIGhhcyBiaV9vZmZzZXQsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZlxuIGJ5dGVzIGNvbXBsZXRlZCBpbiB0aGUgY3VycmVudCBidmVjLlxuIFxuIFRoZXJlIGFyZSBhIGJ1bmNoIG9mIG5ldyBoZWxwZXIgbWFjcm9zIGZvciBoaWRpbmcgdGhlIGdvcnkgZGV0YWlscyAtIGluXG4gcGFydGljdWxhciwgcHJlc2VudGluZyB0aGUgaWxsdXNpb24gb2YgcGFydGlhbGx5IGNvbXBsZXRlZCBiaW92ZWNzIHNvIHRoYXRcbi1ub3JtYWwgY29kZSBkb2VzbiYjMzk7dCBoYXZlIHRvIGRlYWwgd2l0aCBiaV9idmVjX2RvbmUuXG4mIzQzO25vcm1hbCBjb2RlIGRvZXNuJiMzOTt0IGhhdmUgdG8gZGVhbCB3aXRoIGJpX29mZnNldC5cbiBcbiAgKiBEcml2ZXIgY29kZSBzaG91bGQgbm8gbG9uZ2VyIHJlZmVyIHRvIGJpb3ZlY3MgZGlyZWN0bHk7IHdlIG5vdyBoYXZlXG4gICAgYmlvX2lvdmVjKCkgYW5kIGJpb19pdGVyX2lvdmVjKCkgbWFjcm9zIHRoYXQgcmV0dXJuIGxpdGVyYWwgc3RydWN0IGJpb3ZlY3MsXG4tICAgY29uc3RydWN0ZWQgZnJvbSB0aGUgcmF3IGJpb3ZlY3MgYnV0IHRha2luZyBpbnRvIGFjY291bnQgYmlfYnZlY19kb25lIGFuZFxuJiM0MzsgICBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByYXcgYmlvdmVjcyBidXQgdGFraW5nIGludG8gYWNjb3VudCBiaV9vZmZzZXQgYW5kXG4gICAgYmlfc2l6ZS5cbiBcbiAgICBiaW9fZm9yX2VhY2hfc2VnbWVudCgpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSBhIGJ2ZWNfaXRlciBhcmd1bWVudFxuQEAgLTEwMSw3ICYjNDM7MTAxLDcgQEAgT3RoZXIgaW1wbGljYXRpb25zOlxuICAgIEkuZS4gaW5zdGVhZCBvZiB1c2luZyBiaW9faW92ZWNfaWR4KCkgKG9yIGJpby1cdTAwM2ViaV9pb3ZlY1tiaW8tXHUwMDNlYmlfaWR4XSksIHlvdVxuICAgIG5vdyB1c2UgYmlvX2l0ZXJfaW92ZWMoKSwgd2hpY2ggdGFrZXMgYSBidmVjX2l0ZXIgYW5kIHJldHVybnMgYVxuICAgIGxpdGVyYWwgc3RydWN0IGJpb192ZWMgLSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5IGZyb20gdGhlIHJhdyBiaW92ZWMgYnV0XG4tICAgdGFraW5nIGludG8gYWNjb3VudCBiaV9idmVjX2RvbmUgKGFuZCBiaV9zaXplKS5cbiYjNDM7ICAgdGFraW5nIGludG8gYWNjb3VudCBiaV9vZmZzZXQgKGFuZCBiaV9zaXplKS5cbiBcbiAgKiBiaV92Y250IGNhbiYjMzk7dCBiZSB0cnVzdGVkIG9yIHJlbGllZCB1cG9uIGJ5IGRyaXZlciBjb2RlIC0gaS5lLiBhbnl0aGluZyB0aGF0XG4gICAgZG9lc24mIzM5O3QgYWN0dWFsbHkgb3duIHRoZSBiaW8uIFRoZSByZWFzb24gaXMgdHdvZm9sZDogZmlyc3RseSwgaXQmIzM5O3Mgbm90XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xuaW5kZXggNmEyZjZmYzM0MTNlOC4uY2MyYmI5MTgzYzFhNyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9iaW8uY1xuQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgdm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gMDtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX2lkeCA9IDA7XG4tXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUgPSAwO1xuJiM0MztcdGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldCA9IDA7XG4gXHRiaW8tXHUwMDNlYmlfZW5kX2lvID0gTlVMTDtcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gTlVMTDtcbiAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbkBAIC04NjEsNiAmIzQzOzg2MSwxMiBAQCBzdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxuIFx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIgPSBiaW9fc3JjLVx1MDAzZWJpX2l0ZXI7XG4gXG4mIzQzO1x0aWYgKG9wX2lzX2RtYWJ1ZihiaW8tXHUwMDNlYmlfb3BmKSkge1xuJiM0MztcdFx0YmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXAgPSBiaW9fc3JjLVx1MDAzZWJpX2RtYWJ1Zl9tYXA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9pb192ZWMgPSBiaW9fc3JjLVx1MDAzZWJpX2lvX3ZlYztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGJpby1cdTAwM2ViaV9iZGV2KSB7XG4gXHRcdGlmIChiaW8tXHUwMDNlYmlfYmRldiA9PSBiaW9fc3JjLVx1MDAzZWJpX2JkZXYgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBiaW9fZmxhZ2dlZChiaW9fc3JjLCBCSU9fUkVNQVBQRUQpKVxuQEAgLTkwMiw4ICYjNDM7OTA4LDYgQEAgc3RydWN0IGJpbyAqYmlvX2FsbG9jX2Nsb25lKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW8gKmJpb19zcmMsXG4gXHRcdGJpb19wdXQoYmlvKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4tXHRiaW8tXHUwMDNlYmlfaW9fdmVjID0gYmlvX3NyYy1cdTAwM2ViaV9pb192ZWM7XG4tXG4gXHRyZXR1cm4gYmlvO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGJpb19hbGxvY19jbG9uZSk7XG5AQCAtOTIzLDcgJiM0Mzs5MjcsNyBAQCBpbnQgYmlvX2luaXRfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRiaW9faW5pdChiaW8sIGJkZXYsIGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjLCAwLCBiaW9fc3JjLVx1MDAzZWJpX29wZik7XG4mIzQzO1x0YmlvX2luaXQoYmlvLCBiZGV2LCBOVUxMLCAwLCBiaW9fc3JjLVx1MDAzZWJpX29wZik7XG4gXHRyZXQgPSBfX2Jpb19jbG9uZShiaW8sIGJpb19zcmMsIGdmcCk7XG4gXHRpZiAocmV0KVxuIFx0XHRiaW9fdW5pbml0KGJpbyk7XG5AQCAtMTE4OCwxMSAmIzQzOzExOTIsMjIgQEAgdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIFxuIFx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IChzdHJ1Y3QgYmlvX3ZlYyAqKWl0ZXItXHUwMDNlYnZlYztcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX2lkeCA9IDA7XG4tXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUgPSBpdGVyLVx1MDAzZWlvdl9vZmZzZXQ7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0ID0gaXRlci1cdTAwM2Vpb3Zfb2Zmc2V0O1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuIFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NMT05FRCk7XG4gfVxuIFxuJiM0Mzt2b2lkIGJpb19kbWFidWZfbWFwX3NldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdFdBUk5fT05fT05DRShiaW8tXHUwMDNlYmlfbWF4X3ZlY3MpO1xuJiM0MztcbiYjNDM7XHRiaW8tXHUwMDNlYmlfZG1hYnVmX21hcCA9IGl0ZXItXHUwMDNlZG1hYnVmX21hcDtcbiYjNDM7XHRiaW8tXHUwMDNlYmlfdmNudCA9IDA7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0ID0gaXRlci1cdTAwM2Vpb3Zfb2Zmc2V0O1xuJiM0MztcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiYjNDM7XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFIHwgUkVRX0RNQUJVRjtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEFsaWducyB0aGUgYmlvIHNpemUgdG8gdGhlIGxlbl9hbGlnbl9tYXNrLCByZWxlYXNpbmcgZXhjZXNzaXZlIGJpbyB2ZWNzIHRoYXRcbiAgKiBfX2Jpb19pb3ZfaXRlcl9nZXRfcGFnZXMgbWF5IGhhdmUgaW5zZXJ0ZWQsIGFuZCByZXZlcnRzIHRoZSB0cmltbWVkIGxlbmd0aFxuQEAgLTEyNTUsNiAmIzQzOzEyNzAsMTEgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuJiM0MztcdGlmIChpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGl0ZXIpKSB7XG4mIzQzO1x0XHRiaW9fZG1hYnVmX21hcF9zZXQoYmlvLCBpdGVyKTtcbiYjNDM7XHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAoaW92X2l0ZXJfZXh0cmFjdF93aWxsX3BpbihpdGVyKSlcbiBcdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX1BBR0VfUElOTkVEKTtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWVyZ2UuYyBiL2Jsb2NrL2Jsay1tZXJnZS5jXG5pbmRleCBhYjExNjFjYTY5ZjFlLi42ZjBjYWJmZTI1ZWY3IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1lcmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1tZXJnZS5jXG5AQCAtMzMsNyAmIzQzOzMzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KVxuIFxuIFx0YmlvX2FkdmFuY2VfaXRlcihiaW8sIFx1MDAyNml0ZXIsIGl0ZXIuYmlfc2l6ZSk7XG4gXG4tXHRpZiAoIWl0ZXIuYmlfYnZlY19kb25lKVxuJiM0MztcdGlmICghaXRlci5iaV9vZmZzZXQpXG4gXHRcdGlkeCA9IGl0ZXIuYmlfaWR4IC0gMTtcbiBcdGVsc2VcdC8qIGluIHRoZSBtaWRkbGUgb2YgYnZlYyAqL1xuIFx0XHRpZHggPSBpdGVyLmJpX2lkeDtcbkBAIC00MSwxMSAmIzQzOzQxLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fZ2V0X2xhc3RfYnZlYyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fdmVjICpidilcbiBcdCpidiA9IGJpby1cdTAwM2ViaV9pb192ZWNbaWR4XTtcbiBcbiBcdC8qXG4tXHQgKiBpdGVyLmJpX2J2ZWNfZG9uZSByZWNvcmRzIGFjdHVhbCBsZW5ndGggb2YgdGhlIGxhc3QgYnZlY1xuJiM0MztcdCAqIGl0ZXIuYmlfb2Zmc2V0IHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjXG4gXHQgKiBpZiB0aGlzIGJpbyBlbmRzIGluIHRoZSBtaWRkbGUgb2Ygb25lIGlvIHZlY3RvclxuIFx0ICovXG4tXHRpZiAoaXRlci5iaV9idmVjX2RvbmUpXG4tXHRcdGJ2LVx1MDAzZWJ2X2xlbiA9IGl0ZXIuYmlfYnZlY19kb25lO1xuJiM0MztcdGlmIChpdGVyLmJpX29mZnNldClcbiYjNDM7XHRcdGJ2LVx1MDAzZWJ2X2xlbiA9IGl0ZXIuYmlfb2Zmc2V0O1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3dpbGxfZ2FwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuQEAgLTM0Niw2ICYjNDM7MzQ2LDIwIEBAIGludCBiaW9fc3BsaXRfaW9fYXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRcdGxlbl9hbGlnbl9tYXNrIHw9IChiYy1cdTAwM2ViY19rZXktXHUwMDNlY3J5cHRvX2NmZy5kYXRhX3VuaXRfc2l6ZSAtIDEpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChvcF9pc19kbWFidWYoYmlvLVx1MDAzZWJpX29wZikpIHtcbiYjNDM7XHRcdC8qIHNpbmdsZSBjb250aWd1b3VzIHJhbmdlIGludG8gdGhlIGRtYS1idWYgKi9cbiYjNDM7XHRcdG5zZWdzID0gMTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldCBcdTAwMjYgc3RhcnRfYWxpZ25fbWFzaykgfHxcbiYjNDM7XHRcdCAgICAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcdTAwMjYgbGVuX2FsaWduX21hc2spKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGlmIChiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplIFx1MDAzZSBtYXhfYnl0ZXMpIHtcbiYjNDM7XHRcdFx0Ynl0ZXMgPSBtYXhfYnl0ZXM7XG4mIzQzO1x0XHRcdGdvdG8gc3BsaXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0YmlvX2Zvcl9lYWNoX2J2ZWMoYnYsIGJpbywgaXRlcikge1xuIFx0XHRpZiAoYnYuYnZfb2Zmc2V0IFx1MDAyNiBzdGFydF9hbGlnbl9tYXNrIHx8XG4gXHRcdCAgICBidi5idl9sZW4gXHUwMDI2IGxlbl9hbGlnbl9tYXNrKVxuQEAgLTM3Niw2ICYjNDM7MzkwLDcgQEAgaW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbiBcdFx0YnZwcnZwID0gXHUwMDI2YnZwcnY7XG4gXHR9XG4gXG4mIzQzO291dDpcbiBcdCpzZWdzID0gbnNlZ3M7XG4gXHRiaW8tXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gZmZzKGdhcHMpO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jXG5pbmRleCBiZmRiOWVkNzA3NDExLi44OGZkOWNiYzk1MWY0IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLW1xLWRtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEtZG1hLmNcbkBAIC00NCw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgYm9vbCBibGtfbWFwX2l0ZXJfbmV4dChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgYmxrX21hcF9pdGVyICppdGVyLFxuIFx0ICogb25lIGNvdWxkIGJlIG1lcmdlZCBpbnRvIGl0LiAgVGhpcyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIG1vdmluZyB0b1xuIFx0ICogdGhlIG5leHQgYmlvLCBidXQgc29tZSBjYWxsZXJzIGFsc28gZG9uJiMzOTt0IHBhY2sgYnZlY3MgdGlnaHQuXG4gXHQgKi9cbi1cdHdoaWxlICghaXRlci1cdTAwM2VpdGVyLmJpX3NpemUgfHwgIWl0ZXItXHUwMDNlaXRlci5iaV9idmVjX2RvbmUpIHtcbiYjNDM7XHR3aGlsZSAoIWl0ZXItXHUwMDNlaXRlci5iaV9zaXplIHx8ICFpdGVyLVx1MDAzZWl0ZXIuYmlfb2Zmc2V0KSB7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIG5leHQ7XG4gXG4gXHRcdGlmICghX19ibGtfbWFwX2l0ZXJfbmV4dChpdGVyKSlcbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCBlYWFjMDU4MTVjYjAzLi41MGFiZmQ5MzI4ODYxIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oXG5AQCAtNDA2LDcgJiM0Mzs0MDYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX21heV9uZWVkX3NwbGl0KHN0cnVjdCBiaW8gKmJpbyxcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRidiA9IF9fYnZlY19pdGVyX2J2ZWMoYmlvLVx1MDAzZWJpX2lvX3ZlYywgYmlvLVx1MDAzZWJpX2l0ZXIpO1xuLVx0aWYgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgXHUwMDNlIGJ2LVx1MDAzZWJ2X2xlbiAtIGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZSlcbiYjNDM7XHRpZiAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcdTAwM2UgYnYtXHUwMDNlYnZfbGVuIC0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGlmICgoYnYtXHUwMDNlYnZfb2Zmc2V0IHwgYnYtXHUwMDNlYnZfbGVuKSBcdTAwMjYgbGltLVx1MDAzZWRtYV9hbGlnbm1lbnQpXG4gXHRcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuY1xuaW5kZXggMTU3ODNhNjE4MGRlYy4uZDgzY2RiYWI2NWE2YSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2ZvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZm9wcy5jXG5AQCAtMzQ4LDYgJiM0MzszNDgsOCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHQgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkgYW5kIHNldCB0aGUgYnZlYyBkaXJlY3RseS5cbiBcdFx0ICovXG4gXHRcdGJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTtcbiYjNDM7XHR9IGVsc2UgaWYgKGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpIHtcbiYjNDM7XHRcdGJpb19kbWFidWZfbWFwX3NldChiaW8sIGl0ZXIpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpO1xuIFx0XHRpZiAodW5saWtlbHkocmV0KSlcbkBAIC05MjQsNiAmIzQzOzkyNiwxOSBAQCBzdGF0aWMgaW50IGJsa2Rldl9tbWFwX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbiBcdHJldHVybiBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlKGRlc2MpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBibGtkZXZfaW5pdF9kbWFfYnVmX2lvX2N0eChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBmaWxlX2JkZXYoZmlsZSk7XG4mIzQzO1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LVx1MDAzZWJkX2Rpc2s7XG4mIzQzO1xuJiM0MztcdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFkaXNrLVx1MDAzZWZvcHMtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiBkaXNrLVx1MDAzZWZvcHMtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChiZGV2LCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuIFx0Lm9wZW5cdFx0PSBibGtkZXZfb3BlbixcbiBcdC5yZWxlYXNlXHQ9IGJsa2Rldl9yZWxlYXNlLFxuQEAgLTk0Miw2ICYjNDM7OTU3LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7XG4gXHQuZmFsbG9jYXRlXHQ9IGJsa2Rldl9mYWxsb2NhdGUsXG4gXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG4gXHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DLFxuJiM0MztcdC5pbml0X2RtYV9idWZfaW9fY3R4ID0gYmxrZGV2X2luaXRfZG1hX2J1Zl9pb19jdHgsXG4gfTtcbiBcbiBzdGF0aWMgX19pbml0IGludCBibGtkZXZfaW5pdCh2b2lkKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDFmYWVjZWYzMzAwOTIuLjBiMTI1Y2NiMjY2MzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC0zNzgsNyAmIzQzOzM3OCw3IEBAIHN0YXRpYyBpbnQgbG9fcndfYWlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBsb29wX2NtZCAqY21kLFxuIFx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNml0ZXIsIHJ3LFxuIFx0XHRcdF9fYnZlY19pdGVyX2J2ZWMocnEtXHUwMDNlYmlvLVx1MDAzZWJpX2lvX3ZlYywgcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIpLFxuIFx0XHRcdG5yX2J2ZWMsIGJsa19ycV9ieXRlcyhycSkpO1xuLVx0XHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XG4mIzQzO1x0XHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHR9XG4gXHRhdG9taWNfc2V0KFx1MDAyNmNtZC1cdTAwM2VyZWYsIDIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhMy4uNmY0YjQ0YTFlZTJmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtNTUzLDcgJiM0Mzs1NTMsNyBAQCBzdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbiBcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBydyxcbiBcdFx0XHRfX2J2ZWNfaXRlcl9idmVjKHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pb192ZWMsIHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pdGVyKSxcbiBcdFx0XHRcdFx0bnJfYnZlYywgYmxrX3JxX2J5dGVzKHJxKSk7XG4tXHRcdGl0ZXIuaW92X29mZnNldCA9IHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcbiYjNDM7XHRcdGl0ZXIuaW92X29mZnNldCA9IHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiBcdH1cbiBcbiBcdGNtZC1cdTAwM2Vpb2NiLmtpX3BvcyA9IChjbWQtXHUwMDNlc2VjdG9yIC0gem9uZS1cdTAwM2VzdGFydCkgXHUwMDNjXHUwMDNjIFNFQ1RPUl9TSElGVDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVcbmluZGV4IGIyNWQ3NTUwYmFjZmQuLjUyMzczMWIwZjgzZWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZVxuQEAgLTEsNiAmIzQzOzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIG9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcXFxuLVx0IGRtYS1mZW5jZS11bndyYXAubyBkbWEtcmVzdi5vIGRtYS1idWYtbWFwcGluZy5vXG4mIzQzO1x0IGRtYS1mZW5jZS11bndyYXAubyBkbWEtcmVzdi5vIGRtYS1idWYtbWFwcGluZy5vIGRtYS1idWYtaW8ub1xuIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpXHQmIzQzOz0gZG1hLWhlYXAub1xuIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpXHQmIzQzOz0gaGVhcHMvXG4gb2JqLSQoQ09ORklHX1NZTkNfRklMRSlcdFx0JiM0Mzs9IHN5bmNfZmlsZS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41ZjU0NWExYmNmMzIzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jXG5AQCAtMCwwICYjNDM7MSwyNzUgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29tbW9uIGluZnJhc3RydWN0dXJlIGZvciBzdXBwb3JpbmcgZG1hLWJ1ZiBpbiB0aGUgSS9PIHBhdGguXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBQYXZlbCBCZWd1bmtvdiBcdTAwM2Nhc21sLnNpbGVuY2VAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLWlvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fZmVuY2Uge1xuJiM0MztcdHN0cnVjdCBkbWFfZmVuY2UgYmFzZTtcbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqZG1hX2J1Zl9pb19mZW5jZV9kcnZfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSlcbiYjNDM7e1xuJiM0MztcdC8qIGRlZmF1bHQgZmVuY2UgcmVsZWFzZSBrZnJlZSYjMzk7cyB0aGUgYmFzZSBwb2ludGVyICovXG4mIzQzO1x0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlLCBiYXNlKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcJiMzNDtkbWEtYnVmLWlvLWN0eFwmIzM0OztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmRtYV9idWZfaW9fZmVuY2VfdGltZWxpbmVfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBcJiMzNDtkbWEtYnVmLWlvLWN0eFwmIzM0OztcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGRtYV9mZW5jZV9vcHMgZG1hX2J1Zl9pb19mZW5jZV9vcHMgPSB7XG4mIzQzO1x0LmdldF9kcml2ZXJfbmFtZSA9IGRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUsXG4mIzQzO1x0LmdldF90aW1lbGluZV9uYW1lID0gZG1hX2J1Zl9pb19mZW5jZV90aW1lbGluZV9uYW1lLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCxcbiYjNDM7XHRcdFx0XHRcdFx0ICByZWxlYXNlX3dvcmspO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHJlZmNvdW50X3JlYWQoXHUwMDI2Y3R4LVx1MDAzZXJlZnMpKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlcmVsZWFzZShjdHgpO1xuJiM0MztcdGRtYV9idWZfcHV0KGN0eC1cdTAwM2VkbWFidWYpO1xuJiM0MztcdGtmcmVlKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fbWFwX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgcmVsZWFzZV93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSAqZmVuY2UgPSBtYXAtXHUwMDNlZmVuY2U7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBtYXAtXHUwMDNlY3R4O1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXHUwMDNlZG1hYnVmO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgcmVsZWFzZSBwYXRoIG11c3Qgd2FpdCBmb3IgZmVuY2VzICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKFx1MDAyNmN0eC1cdTAwM2VyZWZzKSA9PSAwKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogUHJldmVudCBmcm9tIGRlc3RveWluZyB0aGUgY3R4IHdoaWxlIHVubWFwcGluZyAqL1xuJiM0MztcdHJlZmNvdW50X2luYyhcdTAwMjZjdHgtXHUwMDNlcmVmcyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlcmUgYXJlIG5vIG1vcmUgcmVxdWVzdHMgdXNpbmcgdGhlIG1hcCwgd2UgY2FuIHNpZ25hbCB0aGUgZmVuY2UuXG4mIzQzO1x0ICogSXQgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRha2luZyB0aGUgcmVzdiBsb2NrIGFzIHNvbWVvbmUgY291bGQgYmVcbiYjNDM7XHQgKiB3YWl0aW5nIGZvciB0aGUgZmVuY2Ugd2hpbGUgaG9sZGluZyB0aGUgbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkbWFfZmVuY2Vfc2lnbmFsKFx1MDAyNmZlbmNlLVx1MDAzZWJhc2UpO1xuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbiYjNDM7XHRjdHgtXHUwMDNlZGV2X29wcy1cdTAwM2V1bm1hcChjdHgsIG1hcCk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0ZG1hX2ZlbmNlX3B1dChcdTAwMjZmZW5jZS1cdTAwM2ViYXNlKTtcbiYjNDM7XHRwZXJjcHVfcmVmX2V4aXQoXHUwMDI2bWFwLVx1MDAzZXJlZnMpO1xuJiM0MztcdGtmcmVlKG1hcCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Y3R4LVx1MDAzZXJlZnMpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRGVzdHJ1Y3Rpb24gbmVlZHMgdG8gd2FpdCBmb3IgSS9PIGFuZCBkbWEgZmVuY2VzLiBEZWZlciBpdCB0b1xuJiM0MztcdFx0ICogc2ltcGxpZnkgbG9ja2luZy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0SU5JVF9XT1JLKFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmssIGRtYV9idWZfaW9fY3R4X2Rlc3Ryb3lfd29yayk7XG4mIzQzO1x0XHRxdWV1ZV93b3JrKHN5c3RlbV93cSwgXHUwMDI2Y3R4LVx1MDAzZXJlbGVhc2Vfd29yayk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGRtYV9idWZfaW9fbWFwLCByZWZzKTtcbiYjNDM7XG4mIzQzO1x0LyogbWlnaHQgc2xlZXAsIHVzZSBhIHdvcmtlciAqL1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZtYXAtXHUwMDNlcmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX21hcF9yZWxlYXNlX3dvcmspO1xuJiM0MztcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcdTAwMjZtYXAtXHUwMDNlcmVsZWFzZV93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGRtYV9idWZfaW9faW5pdF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fZmVuY2UgKmZlbmNlID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmZW5jZSA9IGt6YWxsb2Moc2l6ZW9mKCpmZW5jZSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZmVuY2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGVyY3B1X3JlZl9pbml0KFx1MDAyNm1hcC1cdTAwM2VyZWZzLCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2UsIDAsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGtmcmVlKGZlbmNlKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZmZW5jZS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRkbWFfZmVuY2VfaW5pdChcdTAwMjZmZW5jZS1cdTAwM2ViYXNlLCBcdTAwMjZkbWFfYnVmX2lvX2ZlbmNlX29wcywgXHUwMDI2ZmVuY2UtXHUwMDNlbG9jayxcbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZWZlbmNlX2N0eCwgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2Y3R4LVx1MDAzZWZlbmNlX3NlcSkpO1xuJiM0MztcdG1hcC1cdTAwM2VmZW5jZSA9IGZlbmNlO1xuJiM0MztcdG1hcC1cdTAwM2VjdHggPSBjdHg7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9pb19pbml0X21hcCwgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKmRtYV9idWZfaW9fY3JlYXRlX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXHUwMDNlZG1hYnVmO1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xuJiM0MztcdGxvbmcgcmV0O1xuJiM0MztcbiYjNDM7cmV0cnk6XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAtXHUwMDNlZG1hYnVmX21hcCgpIHdpbGwgYmUgY2FsbGluZyBkbWFfYnVmX21hcF9hdHRhY2htZW50KCksIGZvciB3aGljaFxuJiM0MztcdCAqIHdlJiMzOTtsbCBuZWVkIHRvIHdhaXQgZm9yIGZlbmNlcy4gRG8gYSBiaXQgbmljZXIgYW5kIHRyeSB0byB3YWl0XG4mIzQzO1x0ICogd2l0aG91dCB0aGUgcmVzdiBsb2NrIGZpcnN0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxuJiM0MztcdFx0XHRcdCAgICB0cnVlLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRyZXQgPSAtRUFHQUlOO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcbiYjNDM7XHRtYXAgPSBkbWFfYnVmX2lvX2dldF9tYXAoY3R4KTtcbiYjNDM7XHRpZiAobWFwKSB7XG4mIzQzO1x0XHRyZXQgPSAwO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KGRtYWJ1Zi1cdTAwM2VyZXN2LCBETUFfUkVTVl9VU0FHRV9LRVJORUwsXG4mIzQzO1x0XHRcdFx0ICB0cnVlLCAwKSBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXAgPSBjdHgtXHUwMDNlZGV2X29wcy1cdTAwM2VtYXAoY3R4KTtcbiYjNDM7XHRpZiAoSVNfRVJSKG1hcCkpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIobWFwKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGVyY3B1X3JlZl9nZXQoXHUwMDI2bWFwLVx1MDAzZXJlZnMpO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXHUwMDNlbWFwLCBtYXApO1xuJiM0MztvdXQ6XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7XHRyZXR1cm4gbWFwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2Ryb3BfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGN0eC1cdTAwM2VkbWFidWY7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcbiYjNDM7XHRtYXAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC1cdTAwM2VtYXAsXG4mIzQzO1x0XHRcdFx0XHRkbWFfcmVzdl9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KSk7XG4mIzQzO1x0aWYgKCFtYXApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKGN0eC1cdTAwM2VtYXAsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkbWFfcmVzdl9yZXNlcnZlX2ZlbmNlcyhkbWFidWYtXHUwMDNlcmVzdiwgMSk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShyZXQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IFx1MDAyNm1hcC1cdTAwM2VmZW5jZS1cdTAwM2ViYXNlO1xuJiM0MztcbiYjNDM7XHRcdGRtYV9mZW5jZV9nZXQoZmVuY2UpO1xuJiM0MztcdFx0cGVyY3B1X3JlZl9raWxsKFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbiYjNDM7XHRcdGRtYV9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7XG4mIzQzO1x0XHRkbWFfZmVuY2VfcHV0KGZlbmNlKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2FkZF9mZW5jZShkbWFidWYtXHUwMDNlcmVzdiwgXHUwMDI2bWFwLVx1MDAzZWZlbmNlLVx1MDAzZWJhc2UsXG4mIzQzO1x0XHRcdCAgIERNQV9SRVNWX1VTQUdFX0tFUk5FTCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEZWxheSBkZXN0cnVjdGlvbiB1bnRpbCBhbGwgaW5mbGlnaHQgcmVxdWVzdHMgdXNpbmcgdGhlIG1hcCBhcmVcbiYjNDM7XHQgKiBnb25lLiBJdCYjMzk7bGwgYWxzbyBzaWduYWwgdGhlIGZlbmNlIHRoZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0cGVyY3B1X3JlZl9raWxsKFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRkbWFfYnVmX2lvX2Ryb3BfbWFwKGN0eCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzLCBcJiMzNDtETUFfQlVGXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgcmVsZWFzZV93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVx1MDAzZWRtYWJ1ZjtcbiYjNDM7XHRsb25nIHJldDtcbiYjNDM7XG4mIzQzO1x0ZG1hX3Jlc3ZfbG9jayhkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4mIzQzO1x0LyogUmVtb3ZlIHRoZSBsYXN0IG1hcCwgdGhlcmUgc2hvdWxkIGJlIG5vIG5ldyBvbmVzIGdvaW5nIGZvcndhcmQuICovXG4mIzQzO1x0ZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpO1xuJiM0MztcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgdW50aWwgYWxsIG1hcHMgYXJlIGRlc3Ryb3llZC4gKi9cbiYjNDM7XHRyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXQoZG1hYnVmLVx1MDAzZXJlc3YsIERNQV9SRVNWX1VTQUdFX0tFUk5FTCxcbiYjNDM7XHRcdFx0XHQgICAgZmFsc2UsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShyZXQgXHUwMDNjPSAwKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LVx1MDAzZW1hcCwgdHJ1ZSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZzKSlcbiYjNDM7XHRcdGRtYV9idWZfaW9fY3R4X2Rlc3Ryb3lfd29yayhcdTAwMjZjdHgtXHUwMDNlcmVsZWFzZV93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEZXN0cnVjdGlvbiBuZWVkcyB0byB3YWl0IGZvciBJL08gYW5kIGRtYSBmZW5jZXMuIERlZmVyIGl0IHRvXG4mIzQzO1x0ICogc2ltcGxpZnkgbG9ja2luZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2Y3R4LVx1MDAzZXJlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZV93b3JrKTtcbiYjNDM7XHRxdWV1ZV93b3JrKHN5c3RlbV93cSwgXHUwMDI2Y3R4LVx1MDAzZXJlbGVhc2Vfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBkbWFfYnVmX2lvX2N0eF9jcmVhdGUoc3RydWN0IGZpbGUgKmZpbGUsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuJiM0MztcdFx0XHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpO1xuJiM0MztcdGN0eC1cdTAwM2VmZW5jZV9jdHggPSBkbWFfZmVuY2VfY29udGV4dF9hbGxvYygxKTtcbiYjNDM7XHRjdHgtXHUwMDNlZGlyID0gZGlyO1xuJiM0MztcdGN0eC1cdTAwM2VkbWFidWYgPSBkbWFidWY7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNmN0eC1cdTAwM2VyZWZzLCAxKTtcbiYjNDM7XHRnZXRfZG1hX2J1ZihkbWFidWYpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBmaWxlLVx1MDAzZWZfb3AtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChmaWxlLCBjdHgpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7XG4mIzQzO1x0XHRkbWFfYnVmX3B1dChkbWFidWYpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWN0eC1cdTAwM2VkZXZfb3BzIHx8XG4mIzQzO1x0XHRcdCAhY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlbWFwIHx8XG4mIzQzO1x0XHRcdCAhY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNldW5tYXAgfHxcbiYjNDM7XHRcdFx0ICFjdHgtXHUwMDNlZGV2X29wcy1cdTAwM2VyZWxlYXNlKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuYyBiL2RyaXZlcnMvbWQvZG0taW8tcmV3aW5kLmNcbmluZGV4IDYxNTViMDExN2M5ZDYuLmIyMjcxOWM2NDExY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXG5AQCAtMTYsMTIgJiM0MzsxNiwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1fYnZlY19pdGVyX3Jld2luZChjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRpbnQgaWR4O1xuIFxuIFx0aXRlci1cdTAwM2ViaV9zaXplICYjNDM7PSBieXRlcztcbi1cdGlmIChieXRlcyBcdTAwM2M9IGl0ZXItXHUwMDNlYmlfYnZlY19kb25lKSB7XG4tXHRcdGl0ZXItXHUwMDNlYmlfYnZlY19kb25lIC09IGJ5dGVzO1xuJiM0MztcdGlmIChieXRlcyBcdTAwM2M9IGl0ZXItXHUwMDNlYmlfb2Zmc2V0KSB7XG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCAtPSBieXRlcztcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRieXRlcyAtPSBpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZTtcbiYjNDM7XHRieXRlcyAtPSBpdGVyLVx1MDAzZWJpX29mZnNldDtcbiBcdGlkeCA9IGl0ZXItXHUwMDNlYmlfaWR4IC0gMTtcbiBcbiBcdHdoaWxlIChpZHggXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBieXRlcyBcdTAwMjZcdTAwMjYgYnl0ZXMgXHUwMDNlIGJ2W2lkeF0uYnZfbGVuKSB7XG5AQCAtMzIsMTMgJiM0MzszMiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1fYnZlY19pdGVyX3Jld2luZChjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRpZiAoV0FSTl9PTkNFKGlkeCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgYnl0ZXMsXG4gXHRcdCAgICAgIFwmIzM0O0F0dGVtcHRlZCB0byByZXdpbmQgaXRlciBiZXlvbmQgYnZlYyYjMzk7cyBib3VuZGFyaWVzXFxuXCYjMzQ7KSkge1xuIFx0XHRpdGVyLVx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XG4tXHRcdGl0ZXItXHUwMDNlYmlfYnZlY19kb25lID0gMDtcbiYjNDM7XHRcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ID0gMDtcbiBcdFx0aXRlci1cdTAwM2ViaV9pZHggPSAwO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRpdGVyLVx1MDAzZWJpX2lkeCA9IGlkeDtcbi1cdGl0ZXItXHUwMDNlYmlfYnZlY19kb25lID0gYnZbaWR4XS5idl9sZW4gLSBieXRlcztcbiYjNDM7XHRpdGVyLVx1MDAzZWJpX29mZnNldCA9IGJ2W2lkeF0uYnZfbGVuIC0gYnl0ZXM7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMTEzLDEwICYjNDM7MTEzLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbV9iaW9fcmV3aW5kX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuIFx0aXRlci1cdTAwM2ViaV9zZWN0b3IgLT0gYnl0ZXMgXHUwMDNlXHUwMDNlIDk7XG4gXG4gXHQvKiBObyBhZHZhbmNlIG1lYW5zIG5vIHJld2luZCAqL1xuLVx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSlcbiYjNDM7XHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKSB7XG4gXHRcdGl0ZXItXHUwMDNlYmlfc2l6ZSAmIzQzOz0gYnl0ZXM7XG4tXHRlbHNlXG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCAtPSBieXRlcztcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRkbV9idmVjX2l0ZXJfcmV3aW5kKGJpby1cdTAwM2ViaV9pb192ZWMsIGl0ZXIsIGJ5dGVzKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuYyBiL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuY1xuaW5kZXggN2U5ODE4NzAxNDQ1MS4uOGY4ODE2ZTFjNTM5ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9kbS1wY2FjaGUvc2VnbWVudC5jXG5AQCAtMTQsNyAmIzQzOzE0LDcgQEAgaW50IHNlZ21lbnRfY29weV90b19iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LFxuIFxuIFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX2l0ZXIuYmlfaWR4XSxcbiBcdFx0XHRiaW9fc2VnbWVudHMoYmlvKSwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4tXHRpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XG4mIzQzO1x0aXRlci5pb3Zfb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuIFx0aWYgKGJpb19vZmYpXG4gXHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2aXRlciwgYmlvX29mZik7XG4gXG5AQCAtMzUsNyAmIzQzOzM1LDcgQEAgaW50IHNlZ21lbnRfY29weV9mcm9tX2JpbyhzdHJ1Y3QgcGNhY2hlX3NlZ21lbnQgKnNlZ21lbnQsXG4gXG4gXHRpb3ZfaXRlcl9idmVjKFx1MDAyNml0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZiaW8tXHUwMDNlYmlfaW9fdmVjW2Jpby1cdTAwM2ViaV9pdGVyLmJpX2lkeF0sXG4gXHRcdFx0YmlvX3NlZ21lbnRzKGJpbyksIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuLVx0aXRlci5pb3Zfb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xuJiM0MztcdGl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiBcdGlmIChiaW9fb2ZmKVxuIFx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNml0ZXIsIGJpb19vZmYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL2J0dC5jIGIvZHJpdmVycy9udmRpbW0vYnR0LmNcbmluZGV4IDdlMTExMjk2MGQ3ZjguLjVkOTEwYTY0NTAzZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9idHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vYnR0LmNcbkBAIC0xMTU1LDcgJiM0MzsxMTU1LDcgQEAgc3RhdGljIGludCBidHRfcndfaW50ZWdyaXR5KHN0cnVjdCBidHQgKmJ0dCwgc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwLFxuIFx0XHRidiA9IGJ2ZWNfaXRlcl9idmVjKGJpcC1cdTAwM2ViaXBfdmVjLCBiaXAtXHUwMDNlYmlwX2l0ZXIpO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgJiMzOTtidiYjMzk7IG9idGFpbmVkIGZyb20gYnZlY19pdGVyX2J2ZWMgaGFzIGl0cyAuYnZfbGVuIGFuZFxuLVx0XHQgKiAuYnZfb2Zmc2V0IGFscmVhZHkgYWRqdXN0ZWQgZm9yIGl0ZXItXHUwMDNlYmlfYnZlY19kb25lLCBhbmQgd2VcbiYjNDM7XHRcdCAqIC5idl9vZmZzZXQgYWxyZWFkeSBhZGp1c3RlZCBmb3IgaXRlci1cdTAwM2ViaV9vZmZzZXQsIGFuZCB3ZVxuIFx0XHQgKiBjYW4gdXNlIHRob3NlIGRpcmVjdGx5XG4gXHRcdCAqL1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuaW5kZXggNDUzYzFmMGIyZGQwOS4uY2U2NmExODQzYmVjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5AQCAtMjY3Niw2ICYjNDM7MjY3NiwxNyBAQCBzdGF0aWMgaW50IG52bWVfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG4gI2RlZmluZSBudm1lX3JlcG9ydF96b25lc1x0TlVMTFxuICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqL1xuIFxuJiM0MztzdGF0aWMgaW50IG52bWVfaW5pdF9kbWFfYnVmX2lvX2N0eChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lX25zICpucyA9IGJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IG52bWVfY3RybCAqY3RybCA9IG5zLVx1MDAzZWN0cmw7XG4mIzQzO1xuJiM0MztcdGlmICghY3RybC1cdTAwM2VvcHMtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHJldHVybiBjdHJsLVx1MDAzZW9wcy1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KGN0cmwsIGN0eCk7XG4mIzQzO31cbiYjNDM7XG4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfYmRldl9vcHMgPSB7XG4gXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5pb2N0bFx0XHQ9IG52bWVfaW9jdGwsXG5AQCAtMjY4Niw2ICYjNDM7MjY5Nyw3IEBAIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBudm1lX2JkZXZfb3BzID0ge1xuIFx0LmdldF91bmlxdWVfaWRcdD0gbnZtZV9nZXRfdW5pcXVlX2lkLFxuIFx0LnJlcG9ydF96b25lc1x0PSBudm1lX3JlcG9ydF96b25lcyxcbiBcdC5wcl9vcHNcdFx0PSBcdTAwMjZudm1lX3ByX29wcyxcbiYjNDM7XHQuaW5pdF9kbWFfYnVmX2lvX2N0eCA9IG52bWVfaW5pdF9kbWFfYnVmX2lvX2N0eCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbnZtZV93YWl0X3JlYWR5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiBtYXNrLCB1MzIgdmFsLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuaW5kZXggODI0NjUxY2M4OThkYi4uMDM0YzMxYWY4ZmVjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5AQCAtNjUyLDYgJiM0Mzs2NTIsOCBAQCBzdHJ1Y3QgbnZtZV9jdHJsX29wcyB7XG4gXHRpbnQgKCpnZXRfYWRkcmVzcykoc3RydWN0IG52bWVfY3RybCAqY3RybCwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7XG4gXHR2b2lkICgqcHJpbnRfZGV2aWNlX2luZm8pKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xuIFx0Ym9vbCAoKnN1cHBvcnRzX3BjaV9wMnBkbWEpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xuJiM0MztcdGludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xuIFx0dW5zaWduZWQgbG9uZyAoKmdldF92aXJ0X2JvdW5kYXJ5KShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIGlzX2FkbWluKTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbmluZGV4IDY5OTMyZDY0MGI1MzcuLmNiYjMyMWZiN2M1MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbkBAIC0yNyw2ICYjNDM7MjcsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLTY0LW5vbmF0b21pYy1sby1oaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8tNjQtbm9uYXRvbWljLWhpLWxvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWQtb3BhbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtcmVzdi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dHJhY2UuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O252bWUuaFwmIzM0O1xuQEAgLTM5Myw2ICYjNDM7Mzk1LDEzIEBAIHN0cnVjdCBudm1lX3F1ZXVlIHtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGRlbGV0ZV9kb25lO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBudm1lX2RtYWJ1Zl9tYXAge1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCBiYXNlO1xuJiM0MztcdHN0cnVjdCBzZ190YWJsZSAqc2d0O1xuJiM0MztcdHVuc2lnbmVkIG5yX2VudHJpZXM7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfbGlzdFtdO1xuJiM0Mzt9O1xuJiM0MztcbiAvKiBiaXRzIGZvciBpb2QtXHUwMDNlZmxhZ3MgKi9cbiBlbnVtIG52bWVfaW9kX2ZsYWdzIHtcbiBcdC8qIHRoaXMgY29tbWFuZCBoYXMgYmVlbiBhYm9ydGVkIGJ5IHRoZSB0aW1lb3V0IGhhbmRsZXIgKi9cbkBAIC04NTksNiAmIzQzOzg2OCwxMzggQEAgc3RhdGljIHZvaWQgbnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKlxuJiM0Mzt0b19udm1lX2RtYWJ1Zl9tYXAoc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IG52bWVfZG1hYnVmX21hcCwgYmFzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9jcHUoc3RydWN0IG52bWVfZGV2ICpudm1lX2RldixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gbnZtZV9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7XG4mIzQzO1x0c3RydWN0IGJpbyAqYmlvID0gcmVxLVx1MDAzZWJpbztcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xuJiM0MztcdGRtYV9hZGRyX3QgKmRtYV9saXN0ID0gbWFwLVx1MDAzZWRtYV9saXN0O1xuJiM0MztcdHVuc2lnbmVkIG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiYjNDM7XHR1bnNpZ25lZCBtYXBfaWR4ID0gb2Zmc2V0IC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcbiYjNDM7XHRpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSAmIzQzO1xuJiM0MztcdFx0ICAgICAob2Zmc2V0IFx1MDAyNiAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpKTtcbiYjNDM7XG4mIzQzO1x0ZG1hX2RpciA9IHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW5ndGggXHUwMDNlIDApIHtcbiYjNDM7XHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2xpc3RbbWFwX2lkeCYjNDM7JiM0MztdLFxuJiM0MztcdFx0XHRcdFx0TlZNRV9DVFJMX1BBR0VfU0laRSwgZG1hX2Rpcik7XG4mIzQzO1x0XHRsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IG52bWVfZGV2ICpudm1lX2RldixcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gbnZtZV9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7XG4mIzQzO1x0c3RydWN0IGJpbyAqYmlvID0gcmVxLVx1MDAzZWJpbztcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xuJiM0MztcdGRtYV9hZGRyX3QgKmRtYV9saXN0ID0gbWFwLVx1MDAzZWRtYV9saXN0O1xuJiM0MztcdHVuc2lnbmVkIG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiYjNDM7XHR1bnNpZ25lZCBtYXBfaWR4ID0gb2Zmc2V0IC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcbiYjNDM7XHRpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSAmIzQzO1xuJiM0MztcdFx0ICAgICAob2Zmc2V0IFx1MDAyNiAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpKTtcbiYjNDM7XG4mIzQzO1x0ZG1hX2RpciA9IHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW5ndGggXHUwMDNlIDApIHtcbiYjNDM7XHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2xpc3RbbWFwX2lkeCYjNDM7JiM0MztdLFxuJiM0MztcdFx0XHRcdFx0ICAgTlZNRV9DVFJMX1BBR0VfU0laRSwgZG1hX2Rpcik7XG4mIzQzO1x0XHRsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWVfcnFfY2xlYW5fZG1hYnVmX21hcChzdHJ1Y3QgbnZtZV9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7XG4mIzQzO1xuJiM0MztcdG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9jcHUoZGV2LCByZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShpb2QtXHUwMDNlZmxhZ3MgXHUwMDI2IElPRF9TSU5HTEVfU0VHTUVOVCkpXG4mIzQzO1x0XHRudm1lX2ZyZWVfZGVzY3JpcHRvcnMocmVxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IG52bWVfcXVldWUgKm52bWVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7XG4mIzQzO1x0c3RydWN0IGJpbyAqYmlvID0gcmVxLVx1MDAzZWJpbztcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xuJiM0MztcdHVuc2lnbmVkIGJ2ZWNfZG9uZSA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiYjNDM7XHR1bnNpZ25lZCBtYXBfaWR4ID0gYnZlY19kb25lIC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcbiYjNDM7XHR1bnNpZ25lZCBvZmZzZXQgPSBidmVjX2RvbmUgXHUwMDI2IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSk7XG4mIzQzO1x0aW50IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSkgLSAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIG9mZnNldCk7XG4mIzQzO1x0ZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtXHUwMDNlZG1hX2xpc3Q7XG4mIzQzO1x0dTY0IHBycDFfZG1hID0gZG1hX2xpc3RbbWFwX2lkeCYjNDM7JiM0MztdICYjNDM7IG9mZnNldDtcbiYjNDM7XHR1NjQgZG1hX2FkZHIsIHBycDJfZG1hO1xuJiM0MztcdGRtYV9hZGRyX3QgcHJwX2RtYTtcbiYjNDM7XHRfX2xlNjQgKnBycF9saXN0O1xuJiM0MztcdHVuc2lnbmVkIGk7XG4mIzQzO1xuJiM0MztcdG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2UobnZtZXEtXHUwMDNlZGV2LCByZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAobGVuZ3RoIFx1MDAzYz0gMCkge1xuJiM0MztcdFx0cHJwMl9kbWEgPSAwO1xuJiM0MztcdFx0Z290byBkb25lO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGxlbmd0aCBcdTAwM2M9IE5WTUVfQ1RSTF9QQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHBycDJfZG1hID0gZG1hX2xpc3RbbWFwX2lkeF07XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoRElWX1JPVU5EX1VQKGxlbmd0aCwgTlZNRV9DVFJMX1BBR0VfU0laRSkgXHUwMDNjPVxuJiM0MztcdCAgICBOVk1FX1NNQUxMX1BPT0xfU0laRSAvIHNpemVvZihfX2xlNjQpKVxuJiM0MztcdFx0aW9kLVx1MDAzZWZsYWdzIHw9IElPRF9TTUFMTF9ERVNDUklQVE9SO1xuJiM0MztcbiYjNDM7XHRwcnBfbGlzdCA9IGRtYV9wb29sX2FsbG9jKG52bWVfZG1hX3Bvb2wobnZtZXEsIGlvZCksIEdGUF9BVE9NSUMsXG4mIzQzO1x0XHRcdFx1MDAyNnBycF9kbWEpO1xuJiM0MztcdGlmICghcHJwX2xpc3QpXG4mIzQzO1x0XHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcbiYjNDM7XG4mIzQzO1x0aW9kLVx1MDAzZWRlc2NyaXB0b3JzW2lvZC1cdTAwM2Vucl9kZXNjcmlwdG9ycyYjNDM7JiM0MztdID0gcHJwX2xpc3Q7XG4mIzQzO1x0cHJwMl9kbWEgPSBwcnBfZG1hO1xuJiM0MztcdGkgPSAwO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdGlmIChpID09IE5WTUVfQ1RSTF9QQUdFX1NJWkUgXHUwMDNlXHUwMDNlIDMpIHtcbiYjNDM7XHRcdFx0X19sZTY0ICpvbGRfcHJwX2xpc3QgPSBwcnBfbGlzdDtcbiYjNDM7XG4mIzQzO1x0XHRcdHBycF9saXN0ID0gZG1hX3Bvb2xfYWxsb2MobnZtZXEtXHUwMDNlZGVzY3JpcHRvcl9wb29scy5sYXJnZSxcbiYjNDM7XHRcdFx0XHRcdEdGUF9BVE9NSUMsIFx1MDAyNnBycF9kbWEpO1xuJiM0MztcdFx0XHRpZiAoIXBycF9saXN0KVxuJiM0MztcdFx0XHRcdGdvdG8gZnJlZV9wcnBzO1xuJiM0MztcdFx0XHRpb2QtXHUwMDNlZGVzY3JpcHRvcnNbaW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzJiM0MzsmIzQzO10gPSBwcnBfbGlzdDtcbiYjNDM7XHRcdFx0cHJwX2xpc3RbMF0gPSBvbGRfcHJwX2xpc3RbaSAtIDFdO1xuJiM0MztcdFx0XHRvbGRfcHJwX2xpc3RbaSAtIDFdID0gY3B1X3RvX2xlNjQocHJwX2RtYSk7XG4mIzQzO1x0XHRcdGkgPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGRtYV9hZGRyID0gZG1hX2xpc3RbbWFwX2lkeCYjNDM7JiM0MztdO1xuJiM0MztcdFx0cHJwX2xpc3RbaSYjNDM7JiM0MztdID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpO1xuJiM0MztcbiYjNDM7XHRcdGxlbmd0aCAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuJiM0MztcdFx0aWYgKGxlbmd0aCBcdTAwM2M9IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7ZG9uZTpcbiYjNDM7XHRpb2QtXHUwMDNlY21kLmNvbW1vbi5kcHRyLnBycDEgPSBjcHVfdG9fbGU2NChwcnAxX2RtYSk7XG4mIzQzO1x0aW9kLVx1MDAzZWNtZC5jb21tb24uZHB0ci5wcnAyID0gY3B1X3RvX2xlNjQocHJwMl9kbWEpO1xuJiM0MztcdHJldHVybiBCTEtfU1RTX09LO1xuJiM0MztmcmVlX3BycHM6XG4mIzQzO1x0bnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHJlcSk7XG4mIzQzO1x0cmV0dXJuIEJMS19TVFNfUkVTT1VSQ0U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbnZtZV9mcmVlX3BycHMoc3RydWN0IHJlcXVlc3QgKnJlcSwgdW5zaWduZWQgaW50IGF0dHJzKVxuIHtcbiBcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xuQEAgLTkzNyw2ICYjNDM7MTA3OCwxMSBAQCBzdGF0aWMgdm9pZCBudm1lX3VubWFwX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSBudm1lcS1cdTAwM2VkZXYtXHUwMDNlZGV2O1xuIFx0dW5zaWduZWQgaW50IGF0dHJzID0gMDtcbiBcbiYjNDM7XHRpZiAoYmxrX21xX3JxX2lzX2RtYWJ1ZihyZXEpKSB7XG4mIzQzO1x0XHRudm1lX3JxX2NsZWFuX2RtYWJ1Zl9tYXAobnZtZXEtXHUwMDNlZGV2LCByZXEpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaW9kLVx1MDAzZWZsYWdzIFx1MDAyNiBJT0RfU0lOR0xFX1NFR01FTlQpIHtcbiBcdFx0c3RhdGljX2Fzc2VydChvZmZzZXRvZih1bmlvbiBudm1lX2RhdGFfcHRyLCBwcnAxKSA9PVxuIFx0XHRcdFx0b2Zmc2V0b2YodW5pb24gbnZtZV9kYXRhX3B0ciwgc2dsLmFkZHIpKTtcbkBAIC0xMTQxLDEyICYjNDM7MTI4NywxOCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfcHJwKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfZGF0YV9hZGRyKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGRtYV9hZGRyX3QgYWRkciwgdTMyIGxlbilcbiYjNDM7e1xuJiM0MztcdHNnZS1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQoYWRkcik7XG4mIzQzO1x0c2dlLVx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTMyKGxlbik7XG4mIzQzO1x0c2dlLVx1MDAzZXR5cGUgPSBOVk1FX1NHTF9GTVRfREFUQV9ERVNDIFx1MDAzY1x1MDAzYyA0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfZGF0YShzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuIFx0XHRzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKVxuIHtcbi1cdHNnZS1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQoaXRlci1cdTAwM2VhZGRyKTtcbi1cdHNnZS1cdTAwM2VsZW5ndGggPSBjcHVfdG9fbGUzMihpdGVyLVx1MDAzZWxlbik7XG4tXHRzZ2UtXHUwMDNldHlwZSA9IE5WTUVfU0dMX0ZNVF9EQVRBX0RFU0MgXHUwMDNjXHUwMDNjIDQ7XG4mIzQzO1x0bnZtZV9wY2lfc2dsX3NldF9kYXRhX2FkZHIoc2dlLCBpdGVyLVx1MDAzZWFkZHIsIGl0ZXItXHUwMDNlbGVuKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbnZtZV9wY2lfc2dsX3NldF9zZWcoc3RydWN0IG52bWVfc2dsX2Rlc2MgKnNnZSxcbkBAIC0xMTU3LDYgJiM0MzsxMzA5LDE1OCBAQCBzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X3NlZyhzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuIFx0c2dlLVx1MDAzZXR5cGUgPSBOVk1FX1NHTF9GTVRfTEFTVF9TRUdfREVTQyBcdTAwM2NcdTAwM2MgNDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZG1hX2FkZHJfdCAqZmlyc3RfZG1hLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgdTMyICpmaXJzdF9sZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXHUwMDNlYmlvO1xuJiM0MztcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXHUwMDNlYmlfZG1hYnVmX21hcCk7XG4mIzQzO1x0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRtcDtcbiYjNDM7XHRzaXplX3Qgb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuJiM0MztcdHNpemVfdCByZW1haW5pbmcgPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpO1xuJiM0MztcdGRtYV9hZGRyX3QgbGFzdF9lbmQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBuZW50cyA9IDA7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWEgPSAwO1xuJiM0MztcdHUzMiBsZW4gPSAwO1xuJiM0MztcdGJvb2wgaGF2ZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhtYXAtXHUwMDNlc2d0LCBzZywgdG1wKSB7XG4mIzQzO1x0XHRzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XG4mIzQzO1x0XHRkbWFfYWRkcl90IGFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyZW1haW5pbmcpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKG9mZnNldCBcdTAwM2U9IHNnX2xlbikge1xuJiM0MztcdFx0XHRvZmZzZXQgLT0gc2dfbGVuO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRhZGRyICYjNDM7PSBvZmZzZXQ7XG4mIzQzO1x0XHRzZ19sZW4gLT0gb2Zmc2V0O1xuJiM0MztcdFx0b2Zmc2V0ID0gMDtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoc2dfbGVuIFx1MDAyNlx1MDAyNiByZW1haW5pbmcpIHtcbiYjNDM7XHRcdFx0dTMyIGNodW5rID0gbWluX3Qoc2l6ZV90LCByZW1haW5pbmcsIHNnX2xlbik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWhhdmUgfHwgbGFzdF9lbmQgIT0gYWRkcikge1xuJiM0MztcdFx0XHRcdG5lbnRzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0XHRpZiAobmVudHMgPT0gMSkge1xuJiM0MztcdFx0XHRcdFx0ZG1hID0gYWRkcjtcbiYjNDM7XHRcdFx0XHRcdGxlbiA9IGNodW5rO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChuZW50cyA9PSAxKSB7XG4mIzQzO1x0XHRcdFx0bGVuICYjNDM7PSBjaHVuaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0aGF2ZSA9IHRydWU7XG4mIzQzO1x0XHRcdGxhc3RfZW5kID0gYWRkciAmIzQzOyBjaHVuaztcbiYjNDM7XHRcdFx0YWRkciAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRcdHNnX2xlbiAtPSBjaHVuaztcbiYjNDM7XHRcdFx0cmVtYWluaW5nIC09IGNodW5rO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHJlbWFpbmluZykpXG4mIzQzO1x0ICAgICAgIHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQqZmlyc3RfZG1hID0gZG1hO1xuJiM0MztcdCpmaXJzdF9sZW4gPSBsZW47XG4mIzQzO1x0cmV0dXJuIG5lbnRzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBlbnRyaWVzLFxuJiM0MztcdFx0XHRcdFx0ICAgICBkbWFfYWRkcl90IGZpcnN0X2RtYSwgdTMyIGZpcnN0X2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xuJiM0MztcdHN0cnVjdCBiaW8gKmJpbyA9IHJlcS1cdTAwM2ViaW87XG4mIzQzO1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cdTAwM2ViaV9kbWFidWZfbWFwKTtcbiYjNDM7XHRzaXplX3QgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dfbGlzdCA9IE5VTEw7XG4mIzQzO1x0ZG1hX2FkZHJfdCBzZ2xfZG1hID0gMCwgbGFzdF9lbmQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXBwZWQgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdG1wO1xuJiM0MztcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4mIzQzO1x0c2l6ZV90IG9mZnNldCwgcmVtYWluaW5nO1xuJiM0MztcdGJvb2wgaGF2ZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVudHJpZXMpXG4mIzQzO1x0XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbiYjNDM7XHRpZiAoZW50cmllcyBcdTAwM2UgTlZNRV9NQVhfU0VHUylcbiYjNDM7XHRcdHJldHVybiBCTEtfU1RTX0FHQUlOO1xuJiM0MztcbiYjNDM7XHRpb2QtXHUwMDNlY21kLmNvbW1vbi5mbGFncyA9IE5WTUVfQ01EX1NHTF9NRVRBQlVGO1xuJiM0MztcdGlvZC1cdTAwM2V0b3RhbF9sZW4gPSBsZW5ndGg7XG4mIzQzO1xuJiM0MztcdG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2UobnZtZXEtXHUwMDNlZGV2LCByZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAoZW50cmllcyA9PSAxKSB7XG4mIzQzO1x0XHRudm1lX3BjaV9zZ2xfc2V0X2RhdGFfYWRkcihcdTAwMjZpb2QtXHUwMDNlY21kLmNvbW1vbi5kcHRyLnNnbCwgZmlyc3RfZG1hLFxuJiM0MztcdFx0XHRcdFx0ICAgZmlyc3RfbGVuKTtcbiYjNDM7XHRcdHJldHVybiBCTEtfU1RTX09LO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVudHJpZXMgXHUwMDNjPSBOVk1FX1NNQUxMX1BPT0xfU0laRSAvIHNpemVvZigqc2dfbGlzdCkpXG4mIzQzO1x0XHRpb2QtXHUwMDNlZmxhZ3MgfD0gSU9EX1NNQUxMX0RFU0NSSVBUT1I7XG4mIzQzO1xuJiM0MztcdHNnX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBHRlBfQVRPTUlDLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZzZ2xfZG1hKTtcbiYjNDM7XHRpZiAoIXNnX2xpc3QpXG4mIzQzO1x0XHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcbiYjNDM7XHRpb2QtXHUwMDNlZGVzY3JpcHRvcnNbaW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzJiM0MzsmIzQzO10gPSBzZ19saXN0O1xuJiM0MztcbiYjNDM7XHRvZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4mIzQzO1x0cmVtYWluaW5nID0gbGVuZ3RoO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhtYXAtXHUwMDNlc2d0LCBzZywgdG1wKSB7XG4mIzQzO1x0XHRzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XG4mIzQzO1x0XHRkbWFfYWRkcl90IGFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyZW1haW5pbmcpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKG9mZnNldCBcdTAwM2U9IHNnX2xlbikge1xuJiM0MztcdFx0XHRvZmZzZXQgLT0gc2dfbGVuO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRhZGRyICYjNDM7PSBvZmZzZXQ7XG4mIzQzO1x0XHRzZ19sZW4gLT0gb2Zmc2V0O1xuJiM0MztcdFx0b2Zmc2V0ID0gMDtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoc2dfbGVuIFx1MDAyNlx1MDAyNiByZW1haW5pbmcpIHtcbiYjNDM7XHRcdFx0dTMyIGNodW5rID0gbWluX3Qoc2l6ZV90LCByZW1haW5pbmcsIHNnX2xlbik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoaGF2ZSBcdTAwMjZcdTAwMjYgbGFzdF9lbmQgPT0gYWRkcikge1xuJiM0MztcdFx0XHRcdHUzMiBvbGQgPSBsZTMyX3RvX2NwdShzZ19saXN0W21hcHBlZCAtIDFdLmxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdHNnX2xpc3RbbWFwcGVkIC0gMV0ubGVuZ3RoID0gY3B1X3RvX2xlMzIob2xkICYjNDM7IGNodW5rKTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKG1hcHBlZCA9PSBlbnRyaWVzKSlcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1x0XHRcdFx0bnZtZV9wY2lfc2dsX3NldF9kYXRhX2FkZHIoXHUwMDI2c2dfbGlzdFttYXBwZWQmIzQzOyYjNDM7XSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBhZGRyLCBjaHVuayk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aGF2ZSA9IHRydWU7XG4mIzQzO1x0XHRcdGxhc3RfZW5kID0gYWRkciAmIzQzOyBjaHVuaztcbiYjNDM7XHRcdFx0YWRkciAmIzQzOz0gY2h1bms7XG4mIzQzO1x0XHRcdHNnX2xlbiAtPSBjaHVuaztcbiYjNDM7XHRcdFx0cmVtYWluaW5nIC09IGNodW5rO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHJlbWFpbmluZykpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcbiYjNDM7XHRudm1lX3BjaV9zZ2xfc2V0X3NlZyhcdTAwMjZpb2QtXHUwMDNlY21kLmNvbW1vbi5kcHRyLnNnbCwgc2dsX2RtYSwgbWFwcGVkKTtcbiYjNDM7XHRyZXR1cm4gQkxLX1NUU19PSztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0aW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzLS07XG4mIzQzO1x0ZG1hX3Bvb2xfZnJlZShudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBzZ19saXN0LCBzZ2xfZG1hKTtcbiYjNDM7XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHRcdHN0cnVjdCBibGtfZG1hX2l0ZXIgKml0ZXIpXG4ge1xuQEAgLTEyNTEsNiAmIzQzOzE1NTUsMzQgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX21hcF9kYXRhKHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4gXHRzdHJ1Y3QgYmxrX2RtYV9pdGVyIGl0ZXI7XG4gXHRibGtfc3RhdHVzX3QgcmV0O1xuIFxuJiM0MztcdGlmIChibGtfbXFfcnFfaXNfZG1hYnVmKHJlcSkpIHtcbiYjNDM7XHRcdGlmICh1c2Vfc2dsICE9IFNHTF9VTlNVUFBPUlRFRCkge1xuJiM0MztcdFx0XHRkbWFfYWRkcl90IGZpcnN0X2RtYTtcbiYjNDM7XHRcdFx0dTMyIGZpcnN0X2xlbjtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGVudHJpZXM7XG4mIzQzO1xuJiM0MztcdFx0XHRlbnRyaWVzID0gbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhyZXEsIFx1MDAyNmZpcnN0X2RtYSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Zmlyc3RfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh1c2Vfc2dsID09IFNHTF9GT1JDRUQpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2wocmVxLCBudm1lcSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdGVudHJpZXMsIGZpcnN0X2RtYSwgZmlyc3RfbGVuKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0ID09IEJMS19TVFNfQUdBSU4gPyBCTEtfU1RTX0lPRVJSIDogcmV0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoc2dsX3RocmVzaG9sZCBcdTAwMjZcdTAwMjYgZW50cmllcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIERJVl9ST1VORF9VUChibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpLCBlbnRyaWVzKSBcdTAwM2U9XG4mIzQzO1x0XHRcdCAgICBzZ2xfdGhyZXNob2xkKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHJlcSwgbnZtZXEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRlbnRyaWVzLCBmaXJzdF9kbWEsIGZpcnN0X2xlbik7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCAhPSBCTEtfU1RTX0FHQUlOKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAocmVxLCBudm1lcSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qXG4gXHQgKiBUcnkgdG8gc2tpcCB0aGUgRE1BIGl0ZXJhdG9yIGZvciBzaW5nbGUgc2VnbWVudCByZXF1ZXN0cywgYXMgdGhhdFxuIFx0ICogc2lnbmlmaWNhbnRseSBpbXByb3ZlcyBwZXJmb3JtYW5jZXMgZm9yIHNtYWxsIEkvTyBzaXplcy5cbkBAIC0yMjY5LDYgJiM0MzsyNjAxLDExMiBAQCBzdGF0aWMgaW50IG52bWVfY3JlYXRlX3F1ZXVlKHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSwgaW50IHFpZCwgYm9vbCBwb2xsZWQpXG4gXHRyZXR1cm4gcmVzdWx0O1xuIH1cbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKVxuJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gYXR0YWNoLVx1MDAzZWltcG9ydGVyX3ByaXY7XG4mIzQzO1xuJiM0MztcdGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG52bWVfZG1hYnVmX2ltcG9ydGVyX29wcyA9IHtcbiYjNDM7XHQuaW52YWxpZGF0ZV9tYXBwaW5nc1x0PSBudm1lX2RtYWJ1Zl9pbnZhbGlkYXRlX21hcHBpbmdzLFxuJiM0MztcdC5hbGxvd19wZWVyMnBlZXJcdD0gdHJ1ZSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm52bWVfZG1hX2J1Zl9pb19tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBucl9lbnRyaWVzID0gY3R4LVx1MDAzZWRtYWJ1Zi1cdTAwM2VzaXplIC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2ggPSBjdHgtXHUwMDNlZGV2X3ByaXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0bXAsIGkgPSAwO1xuJiM0MztcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcDtcbiYjNDM7XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuJiM0MztcdHN0cnVjdCBzZ190YWJsZSAqc2d0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdG1hcCA9IGttYWxsb2NfZmxleCgqbWFwLCBkbWFfbGlzdCwgbnJfZW50cmllcyk7XG4mIzQzO1x0aWYgKCFtYXApXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0c2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2gsIGN0eC1cdTAwM2VkaXIpO1xuJiM0MztcdGlmIChJU19FUlIoc2d0KSkge1xuJiM0MztcdFx0cmV0ID0gUFRSX0VSUihzZ3QpO1xuJiM0MztcdFx0c2d0ID0gTlVMTDtcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2d0YWJsZV9kbWFfc2coc2d0LCBzZywgdG1wKSB7XG4mIzQzO1x0XHRkbWFfYWRkcl90IGRtYV9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2dfbGVuICUgTlZNRV9DVFJMX1BBR0VfU0laRSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAoc2dfbGVuKSB7XG4mIzQzO1x0XHRcdG1hcC1cdTAwM2VkbWFfbGlzdFtpJiM0MzsmIzQzO10gPSBkbWFfYWRkcjtcbiYjNDM7XHRcdFx0ZG1hX2FkZHIgJiM0Mzs9IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4mIzQzO1x0XHRcdHNnX2xlbiAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1hX2J1Zl9pb19pbml0X21hcChjdHgsIFx1MDAyNm1hcC1cdTAwM2ViYXNlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0bWFwLVx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuJiM0MztcdG1hcC1cdTAwM2VzZ3QgPSBzZ3Q7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNm1hcC1cdTAwM2ViYXNlO1xuJiM0MztlcnI6XG4mIzQzO1x0aWYgKHNndClcbiYjNDM7XHRcdGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIHNndCwgY3R4LVx1MDAzZWRpcik7XG4mIzQzO1x0a2ZyZWUobWFwKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fdW5tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcF9iYXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVx1MDAzZWRldl9wcml2O1xuJiM0MztcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChtYXBfYmFzZSk7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIG1hcC1cdTAwM2VzZ3QsIGN0eC1cdTAwM2VkaXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fcmVsZWFzZShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGN0eC1cdTAwM2VkZXZfcHJpdjtcbiYjNDM7XG4mIzQzO1x0ZG1hX2J1Zl9kZXRhY2goY3R4LVx1MDAzZWRtYWJ1ZiwgYXR0YWNoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzIG52bWVfZG1hX2J1Zl9pb19vcHMgPSB7XG4mIzQzO1x0Lm1hcFx0XHQ9IG52bWVfZG1hX2J1Zl9pb19tYXAsXG4mIzQzO1x0LnVubWFwXHRcdD0gbnZtZV9kbWFfYnVmX2lvX3VubWFwLFxuJiM0MztcdC5yZWxlYXNlXHQ9IG52bWVfZG1hX2J1Zl9pb19yZWxlYXNlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDtcbiYjNDM7XHRzdHJ1Y3QgbnZtZV9kZXYgKmRldiA9IHRvX252bWVfZGV2KGN0cmwpO1xuJiM0MztcbiYjNDM7XHRhdHRhY2ggPSBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGN0eC1cdTAwM2VkbWFidWYsIGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZudm1lX2RtYWJ1Zl9pbXBvcnRlcl9vcHMsIGN0eCk7XG4mIzQzO1x0aWYgKElTX0VSUihhdHRhY2gpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYXR0YWNoKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWRldl9wcml2ID0gYXR0YWNoO1xuJiM0MztcdGN0eC1cdTAwM2VkZXZfb3BzID0gXHUwMDI2bnZtZV9kbWFfYnVmX2lvX29wcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIG52bWVfbXFfYWRtaW5fb3BzID0ge1xuIFx0LnF1ZXVlX3JxXHQ9IG52bWVfcXVldWVfcnEsXG4gXHQuY29tcGxldGVcdD0gbnZtZV9wY2lfY29tcGxldGVfcnEsXG5AQCAtMzU2Myw2ICYjNDM7NDAwMSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZV9jdHJsX29wcyBudm1lX3BjaV9jdHJsX29wcyA9IHtcbiBcdC5wcmludF9kZXZpY2VfaW5mb1x0PSBudm1lX3BjaV9wcmludF9kZXZpY2VfaW5mbyxcbiBcdC5zdXBwb3J0c19wY2lfcDJwZG1hXHQ9IG52bWVfcGNpX3N1cHBvcnRzX3BjaV9wMnBkbWEsXG4gXHQuZ2V0X3ZpcnRfYm91bmRhcnlcdD0gbnZtZV9wY2lfZ2V0X3ZpcnRfYm91bmRhcnksXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUilcbiYjNDM7XHQuaW5pdF9kbWFfYnVmX2lvX2N0eFx0PSBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4LFxuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbnZtZV9kZXZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2KVxuQEAgLTQzMjcsNSAmIzQzOzQ3NjgsNiBAQCBNT0RVTEVfQVVUSE9SKFwmIzM0O01hdHRoZXcgV2lsY294IFx1MDAzY3dpbGx5QGxpbnV4LmludGVsLmNvbVx1MDAzZVwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBNT0RVTEVfVkVSU0lPTihcJiMzNDsxLjBcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOVk1lIGhvc3QgUENJZSB0cmFuc3BvcnQgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtETUFfQlVGXCYjMzQ7KTtcbiBtb2R1bGVfaW5pdChudm1lX2luaXQpO1xuIG1vZHVsZV9leGl0KG52bWVfZXhpdCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuaW5kZXggYmE1YzdiM2UyYTdjNi4uY2UwM2EwZWE0ZGVkNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuQEAgLTM1Nyw3ICYjNDM7MzU3LDcgQEAgc3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXG4gXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2cmVxLVx1MDAzZWl0ZXIsIGRpcixcbiBcdFx0XHRfX2J2ZWNfaXRlcl9idmVjKGJpby1cdTAwM2ViaV9pb192ZWMsIGJpby1cdTAwM2ViaV9pdGVyKSwgbnJfYnZlYyxcbiBcdFx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbi1cdFx0cmVxLVx1MDAzZWl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHR9XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL21pc2MuaCBiL2ZzL2J0cmZzL21pc2MuaFxuaW5kZXggNjk0YmU2ZDA1NjJhNC4uODAyMDYwOTQzMTgwMSAxMDA2NDRcbi0tLSBhL2ZzL2J0cmZzL21pc2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvbWlzYy5oXG5AQCAtNzQsNyAmIzQzOzc0LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnZlY19pdGVyIGluaXRfYnZlY19pdGVyX2Zvcl9iaW8oc3RydWN0IGJpbyAqYmlvKVxuIFx0XHQuYmlfc2VjdG9yID0gMCxcbiBcdFx0LmJpX3NpemUgPSBiaW9fc2l6ZSxcbiBcdFx0LmJpX2lkeCA9IDAsXG4tXHRcdC5iaV9idmVjX2RvbmUgPSAwLFxuJiM0MztcdFx0LmJpX29mZnNldCA9IDAsXG4gXHR9O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggOGYzM2Y3MTdiMTRmNS4uYzA1M2U5NDQ0NTE0NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC04MCw3ICYjNDM7ODAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX25vX2FkdmFuY2VfaXRlcihjb25zdCBzdHJ1Y3QgYmlvICpiaW8pXG4ge1xuIFx0cmV0dXJuIGJpb19vcChiaW8pID09IFJFUV9PUF9ESVNDQVJEIHx8XG4gXHQgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1NFQ1VSRV9FUkFTRSB8fFxuLVx0ICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9XUklURV9aRVJPRVM7XG4mIzQzO1x0ICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9XUklURV9aRVJPRVMgfHxcbiYjNDM7XHQgICAgICAgb3BfaXNfZG1hYnVmKGJpby1cdTAwM2ViaV9vcGYpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmJpb19kYXRhKHN0cnVjdCBiaW8gKmJpbylcbkBAIC0xMTMsMTEgJiM0MzsxMTQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19hZHZhbmNlX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuIHtcbiBcdGl0ZXItXHUwMDNlYmlfc2VjdG9yICYjNDM7PSBieXRlcyBcdTAwM2VcdTAwM2UgOTtcbiBcbi1cdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpXG4mIzQzO1x0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkge1xuIFx0XHRpdGVyLVx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XG4tXHRlbHNlXG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCAmIzQzOz0gYnl0ZXM7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0YnZlY19pdGVyX2FkdmFuY2UoYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xuIFx0XHQvKiBUT0RPOiBJdCBpcyByZWFzb25hYmxlIHRvIGNvbXBsZXRlIGJpbyB3aXRoIGVycm9yIGhlcmUuICovXG4mIzQzO1x0fVxuIH1cbiBcbiAvKiBAYnl0ZXMgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgdG8gYnZlY1tpLVx1MDAzZWJpX2lkeF0uYnZfbGVuICovXG5AQCAtMTI3LDEwICYjNDM7MTMwLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fYWR2YW5jZV9pdGVyX3NpbmdsZShjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4ge1xuIFx0aXRlci1cdTAwM2ViaV9zZWN0b3IgJiM0Mzs9IGJ5dGVzIFx1MDAzZVx1MDAzZSA5O1xuIFxuLVx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSlcbiYjNDM7XHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKSB7XG4gXHRcdGl0ZXItXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcbi1cdGVsc2VcbiYjNDM7XHRcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ICYjNDM7PSBieXRlcztcbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRidmVjX2l0ZXJfYWR2YW5jZV9zaW5nbGUoYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCBfX2Jpb19hZHZhbmNlKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgYnl0ZXMpO1xuQEAgLTM5NSwxMiAmIzQzOzQwMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX3dvdWxkYmxvY2tfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxuIFxuIC8qXG4gICogQ2FsY3VsYXRlIG51bWJlciBvZiBidmVjIHNlZ21lbnRzIHRoYXQgc2hvdWxkIGJlIGFsbG9jYXRlZCB0byBmaXQgZGF0YVxuLSAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBidmVjIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHJldXNlZFxuLSAqIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIG5ldyBvbmUuXG4mIzQzOyAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBhIGJ2ZWMgb3IgYSBkbWFidWYsIHRoZSBidmVjIGFycmF5IC9cbiYjNDM7ICogdGhlIGRtYSBtYXAgYXJlIGdvaW5nIHRvIGJlIHJldXNlZCwgYW5kIHNvIG5vIGV4dHJhIGFsbG9jYXRpb24gaXMgcmVxdWlyZWQuXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgaW50IG1heF9zZWdzKVxuIHtcbi1cdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKVxuJiM0MztcdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIGlvdl9pdGVyX25wYWdlcyhpdGVyLCBtYXhfc2Vncyk7XG4gfVxuQEAgLTQ4MCw2ICYjNDM7NDg1LDcgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdHVuc2lnbmVkIGxlbl9hbGlnbl9tYXNrKTtcbiBcbiB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xuJiM0Mzt2b2lkIGJpb19kbWFidWZfbWFwX3NldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4gdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTtcbiBleHRlcm4gdm9pZCBiaW9fc2V0X3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7XG4gZXh0ZXJuIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstbXEuaCBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcbmluZGV4IGFmODc4NTk3YWZiOGMuLjdjNzUwNGM4NGUwOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oXG5AQCAtMTAxNyw2ICYjNDM7MTAxNywxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKmJsa19tcV9ycV90b19wZHUoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFx0cmV0dXJuIHJxICYjNDM7IDE7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX3JxX2lzX2RtYWJ1ZihzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gcnEtXHUwMDNlYmlvIFx1MDAyNlx1MDAyNiBvcF9pc19kbWFidWYocnEtXHUwMDNlYmlvLVx1MDAzZWJpX29wZik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqcXVldWVfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGlkKVxuIHtcbiBcdHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG5pbmRleCA4ODA4ZWU3NmU3M2MwLi5kNjA1ZTMxNzEyZDQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuQEAgLTIzMyw3ICYjNDM7MjMzLDEyIEBAIHN0cnVjdCBiaW8ge1xuIFx0YXRvbWljX3RcdFx0X19iaV9yZW1haW5pbmc7XG4gXG4gXHQvKiBUaGUgYWN0dWFsIHZlYyBsaXN0LCBwcmVzZXJ2ZWQgYnkgYmlvX3Jlc2V0KCkgKi9cbi1cdHN0cnVjdCBiaW9fdmVjXHRcdCpiaV9pb192ZWM7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IGJpb192ZWNcdFx0KmJpX2lvX3ZlYztcbiYjNDM7XHRcdC8qIERyaXZlciBzcGVjaWZpYyBkbWEgbWFwLCB2YWxpZCBJRkYgUkVRX0RNQUJVRiBpcyBzZXQgKi9cbiYjNDM7XHRcdHN0cnVjdCBkbWFfYnVmX2lvX21hcFx0KmJpX2RtYWJ1Zl9tYXA7XG4mIzQzO1x0fTtcbiYjNDM7XG4gXHRzdHJ1Y3QgYnZlY19pdGVyXHRiaV9pdGVyO1xuIFxuIFx0dW5pb24ge1xuQEAgLTQwMSw2ICYjNDM7NDA2LDcgQEAgZW51bSByZXFfZmxhZ19iaXRzIHtcbiBcdF9fUkVRX0RSVixcdFx0LyogZm9yIGRyaXZlciB1c2UgKi9cbiBcdF9fUkVRX0ZTX1BSSVZBVEUsXHQvKiBmb3IgZmlsZSBzeXN0ZW0gKHN1Ym1pdHRlcikgdXNlICovXG4gXHRfX1JFUV9BVE9NSUMsXHRcdC8qIGZvciBhdG9taWMgd3JpdGUgb3BlcmF0aW9ucyAqL1xuJiM0MztcdF9fUkVRX0RNQUJVRixcdFx0LyogVXNpbmcgcHJlbW1hcGVkIGRtYSBidWZmZXJzICovXG4gXHQvKlxuIFx0ICogQ29tbWFuZCBzcGVjaWZpYyBmbGFncywga2VlcCBsYXN0OlxuIFx0ICovXG5AQCAtNDMzLDYgJiM0Mzs0MzksNyBAQCBlbnVtIHJlcV9mbGFnX2JpdHMge1xuICNkZWZpbmUgUkVRX0RSVlx0XHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXHUwMDNjXHUwMDNjIF9fUkVRX0RSVilcbiAjZGVmaW5lIFJFUV9GU19QUklWQVRFXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXHUwMDNjXHUwMDNjIF9fUkVRX0ZTX1BSSVZBVEUpXG4gI2RlZmluZSBSRVFfQVRPTUlDXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXHUwMDNjXHUwMDNjIF9fUkVRX0FUT01JQylcbiYjNDM7I2RlZmluZSBSRVFfRE1BQlVGXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXHUwMDNjXHUwMDNjIF9fUkVRX0RNQUJVRilcbiBcbiAjZGVmaW5lIFJFUV9OT1VOTUFQXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXHUwMDNjXHUwMDNjIF9fUkVRX05PVU5NQVApXG4gXG5AQCAtNDg2LDYgJiM0Mzs0OTMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG9wX2lzX2Rpc2NhcmQoYmxrX29wZl90IG9wKVxuIFx0cmV0dXJuIChvcCBcdTAwMjYgUkVRX09QX01BU0spID09IFJFUV9PUF9ESVNDQVJEO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG9wX2lzX2RtYWJ1ZihibGtfb3BmX3Qgb3ApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb3AgXHUwMDI2IFJFUV9ETUFCVUY7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDaGVjayBpZiBhIGJpbyBvciByZXF1ZXN0IG9wZXJhdGlvbiBpcyBhIHpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb24uXG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDkyMTNhNTcxNmY5NWEuLjlmNGM5MmU1MWRjOTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTY4Miw2ICYjNDM7MTY4Miw4IEBAIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7XG4gXHQvKiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGlkZW50aWZpZXIgb3IgYSBuZWdhdGl2ZSBlcnJubzogKi9cbiBcdGludCAoKmdldF91bmlxdWVfaWQpKHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBpZFsxNl0sXG4gXHRcdFx0ZW51bSBibGtfdW5pcXVlX2lkIGlkX3R5cGUpO1xuJiM0MztcdGludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBibG9ja19kZXZpY2UgKixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKik7XG4gXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiBcdGNvbnN0IHN0cnVjdCBwcl9vcHMgKnByX29wcztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J2ZWMuaCBiL2luY2x1ZGUvbGludXgvYnZlYy5oXG5pbmRleCA5MjgzN2UyNzQzZjE5Li5iNjM5MTRmZjU2ZTMzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idmVjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnZlYy5oXG5AQCAtMTA4LDkgJiM0MzsxMDgsMTAgQEAgc3RydWN0IGJ2ZWNfaXRlciB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0YmlfaWR4O1xuIFxuIFx0Lypcbi1cdCAqIEN1cnJlbnQgb2Zmc2V0IGluIHRoZSBidmVjIGVudHJ5IHBvaW50ZWQgdG8gYnkgYGJpX2lkeGAuXG4mIzQzO1x0ICogQ3VycmVudCBvZmZzZXQgaW4gdGhlIGJ2ZWMgZW50cnkgcG9pbnRlZCB0byBieSBgYmlfaWR4YCBvciBpbnRvXG4mIzQzO1x0ICogYSBkbWEtYnVmIG1hcC5cbiBcdCAqL1xuLVx0dW5zaWduZWQgaW50XHRcdGJpX2J2ZWNfZG9uZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0Ymlfb2Zmc2V0O1xuIH0gX19wYWNrZWQgX19hbGlnbmVkKDQpO1xuIFxuIHN0cnVjdCBidmVjX2l0ZXJfYWxsIHtcbkBAIC0xMzUsMTQgJiM0MzsxMzYsMTQgQEAgbXBfYnZlY19pdGVyX3BhZ2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWNzLCBjb25zdCBzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIpXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnRcbiBtcF9idmVjX2l0ZXJfbGVuKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjcywgY29uc3Qgc3RydWN0IGJ2ZWNfaXRlciBpdGVyKVxuIHtcbi1cdHJldHVybiBtaW4oX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktXHUwMDNlYnZfbGVuIC0gaXRlci5iaV9idmVjX2RvbmUsXG4mIzQzO1x0cmV0dXJuIG1pbihfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS1cdTAwM2Vidl9sZW4gLSBpdGVyLmJpX29mZnNldCxcbiBcdFx0XHRpdGVyLmJpX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludFxuIG1wX2J2ZWNfaXRlcl9vZmZzZXQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWNzLCBjb25zdCBzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIpXG4ge1xuLVx0cmV0dXJuIF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVx1MDAzZWJ2X29mZnNldCAmIzQzOyBpdGVyLmJpX2J2ZWNfZG9uZTtcbiYjNDM7XHRyZXR1cm4gX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktXHUwMDNlYnZfb2Zmc2V0ICYjNDM7IGl0ZXIuYmlfb2Zmc2V0O1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludFxuQEAgLTIwNCw3ICYjNDM7MjA1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBcdH1cbiBcbiBcdGl0ZXItXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcbi1cdGJ5dGVzICYjNDM7PSBpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZTtcbiYjNDM7XHRieXRlcyAmIzQzOz0gaXRlci1cdTAwM2ViaV9vZmZzZXQ7XG4gXG4gXHR3aGlsZSAoYnl0ZXMgXHUwMDI2XHUwMDI2IGJ5dGVzIFx1MDAzZT0gYnZbaWR4XS5idl9sZW4pIHtcbiBcdFx0Ynl0ZXMgLT0gYnZbaWR4XS5idl9sZW47XG5AQCAtMjEyLDcgJiM0MzsyMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnZlY19pdGVyX2FkdmFuY2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxuIFx0fVxuIFxuIFx0aXRlci1cdTAwM2ViaV9pZHggPSBpZHg7XG4tXHRpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSA9IGJ5dGVzO1xuJiM0MztcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ID0gYnl0ZXM7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG5AQCAtMjIzLDEzICYjNDM7MjI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidmVjX2l0ZXJfYWR2YW5jZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gc3RhdGljIGlubGluZSB2b2lkIGJ2ZWNfaXRlcl9hZHZhbmNlX3NpbmdsZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRcdFx0XHRzdHJ1Y3QgYnZlY19pdGVyICppdGVyLCB1bnNpZ25lZCBpbnQgYnl0ZXMpXG4ge1xuLVx0dW5zaWduZWQgaW50IGRvbmUgPSBpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSAmIzQzOyBieXRlcztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZG9uZSA9IGl0ZXItXHUwMDNlYmlfb2Zmc2V0ICYjNDM7IGJ5dGVzO1xuIFxuIFx0aWYgKGRvbmUgPT0gYnZbaXRlci1cdTAwM2ViaV9pZHhdLmJ2X2xlbikge1xuIFx0XHRkb25lID0gMDtcbiBcdFx0aXRlci1cdTAwM2ViaV9pZHgmIzQzOyYjNDM7O1xuIFx0fVxuLVx0aXRlci1cdTAwM2ViaV9idmVjX2RvbmUgPSBkb25lO1xuJiM0MztcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ID0gZG9uZTtcbiBcdGl0ZXItXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJjZmZjNjIwMjU1NmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oXG5AQCAtMCwwICYjNDM7MSw5MSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fRE1BX0JVRl9JT19IX19cbiYjNDM7I2RlZmluZSBfX0RNQV9CVUZfSU9fSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlO1xuJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19jdHg7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcDtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX29wcyB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDcmVhdGUgYSBuZXcgbWFwIGZvciB0aGUgZ2l2ZW4gY3R4LiBDYWxsZWQgd2l0aCB0aGUgcmVzZXJ2YXRpb25cbiYjNDM7XHQgKiBsb2NrIGhlbGQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fbWFwICooKm1hcCkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENsZWFuIHVwIGRldmljZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgQG1hcC4gQ2FsbGVkIHdpdGggdGhlXG4mIzQzO1x0ICogcmVzZXJ2YXRpb24gbG9jayBoZWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdHZvaWQgKCp1bm1hcCkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgdXNlciB0cmllcyB0byBkZXN0cm95IHRoZSBjdHguIFJlbGVhc2UgYWxsIGRldmljZSBzcGVjaWZpY1xuJiM0MztcdCAqIHBhcnRzIG9mIHRoZSB0b2tlbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICopO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fbWFwIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvdW50cyBhdHRhY2hlZCByZXF1ZXN0cyBhbmQgb3RoZXIgdXNlcnMuIERldmljZSBzcGVjaWZpYyB1bm1hcHBpbmdcbiYjNDM7XHQgKiBpcyBkZWZlcnJlZCB1bnRpbCBhbGwgcmVmcyBhcmUgZHJvcHBlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3QgcGVyY3B1X3JlZlx0XHRyZWZzO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdFx0cmVsZWFzZV93b3JrO1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlXHRcdCpmZW5jZTtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHhcdFx0KmN0eDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2N0eCB7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZfaW9fbWFwIF9fcmN1XHRcdCptYXA7XG4mIzQzO1x0c3RydWN0IGRtYV9idWZcdFx0XHRcdCpkbWFidWY7XG4mIzQzO1x0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb25cdFx0XHRkaXI7XG4mIzQzO1xuJiM0MztcdGF0b21pY190XHRcdFx0XHRmZW5jZV9zZXE7XG4mIzQzO1x0dTY0XHRcdFx0XHRcdGZlbmNlX2N0eDtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdFx0XHRyZWxlYXNlX3dvcms7XG4mIzQzO1x0cmVmY291bnRfdFx0XHRcdFx0cmVmcztcbiYjNDM7XG4mIzQzO1x0dm9pZFx0XHRcdFx0XHQqZGV2X3ByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzXHRcdCpkZXZfb3BzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IGRtYV9idWZfaW9fY3R4X2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4mIzQzO1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XG4mIzQzO3ZvaWQgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKmRtYV9idWZfaW9fY3JlYXRlX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqXG4mIzQzO2RtYV9idWZfaW9fZ2V0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xuJiM0MztcbiYjNDM7XHRndWFyZChyY3UpKCk7XG4mIzQzO1xuJiM0MztcdG1hcCA9IHJjdV9kZXJlZmVyZW5jZShjdHgtXHUwMDNlbWFwKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIW1hcCB8fCAhcGVyY3B1X3JlZl90cnlnZXRfbGl2ZV9yY3UoXHUwMDI2bWFwLVx1MDAzZXJlZnMpKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWFwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2J1Zl9pb19tYXBfZHJvcChzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcClcbiYjNDM7e1xuJiM0MztcdHBlcmNwdV9yZWZfcHV0KFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRGV2aWNlIEFQSVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3ZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcbiYjNDM7aW50IGRtYV9idWZfaW9faW5pdF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggZDEwODk3YjNhMWUzNS4uOWZlMzQ5YTI3OWM3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mcy5oXG5AQCAtMTkxNCw2ICYjNDM7MTkxNCw3IEBAIHN0cnVjdCBkaXJfY29udGV4dCB7XG4gI2RlZmluZSBDT1BZX0ZJTEVfU1BMSUNFXHRcdCgxIFx1MDAzY1x1MDAzYyAwKVxuIFxuIHN0cnVjdCBpb191cmluZ19jbWQ7XG4mIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2N0eDtcbiBzdHJ1Y3Qgb2Zmc2V0X2N0eDtcbiBcbiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZm9wX2ZsYWdzX3Q7XG5AQCAtMTk2Miw2ICYjNDM7MTk2Myw3IEBAIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMge1xuIFx0aW50ICgqdXJpbmdfY21kX2lvcG9sbCkoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqLFxuIFx0XHRcdFx0dW5zaWduZWQgaW50IHBvbGxfZmxhZ3MpO1xuIFx0aW50ICgqbW1hcF9wcmVwYXJlKShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICopO1xuJiM0MztcdGludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTtcbiB9IF9fcmFuZG9taXplX2xheW91dDtcbiBcbiAvKiBTdXBwb3J0cyBhc3luYyBidWZmZXJlZCByZWFkcyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuaW5kZXggYTJjNjIzYTY3YTI1MS4uZjkwNTg2ZDM1M2MxYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiBcbiBzdHJ1Y3QgaW91X2xvb3BfcGFyYW1zO1xuIHN0cnVjdCBpb191cmluZ19icGZfb3BzO1xuJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19tYXA7XG4gXG4gZW51bSB7XG4gXHQvKlxuQEAgLTU5NCw2ICYjNDM7NTk1LDcgQEAgZW51bSB7XG4gXHRSRVFfRl9JTVBPUlRfQlVGRkVSX0JJVCxcbiBcdFJFUV9GX1NRRV9DT1BJRURfQklULFxuIFx0UkVRX0ZfSU9QT0xMX0JJVCxcbiYjNDM7XHRSRVFfRl9EUk9QX0RNQUJVRl9CSVQsXG4gXG4gXHQvKiBub3QgYSByZWFsIGJpdCwganVzdCB0byBjaGVjayB3ZSYjMzk7cmUgbm90IG92ZXJmbG93aW5nIHRoZSBzcGFjZSAqL1xuIFx0X19SRVFfRl9MQVNUX0JJVCxcbkBAIC02ODksNiAmIzQzOzY5MSw4IEBAIGVudW0ge1xuIFx0UkVRX0ZfU1FFX0NPUElFRFx0PSBJT19SRVFfRkxBRyhSRVFfRl9TUUVfQ09QSUVEX0JJVCksXG4gXHQvKiByZXF1ZXN0IG11c3QgYmUgaW9wb2xsZWQgdG8gY29tcGxldGlvbiAoc2V0IGluIC1cdTAwM2Vpc3N1ZSgpKSAqL1xuIFx0UkVRX0ZfSU9QT0xMXHRcdD0gSU9fUkVRX0ZMQUcoUkVRX0ZfSU9QT0xMX0JJVCksXG4mIzQzO1x0LyogdGhlcmUgaXMgYSBkbWEgbWFwIGF0dGFjaGVkIHRvIHJlcXVlc3QgdGhhdCBuZWVkcyB0byBiZSBkcm9wcGVkICovXG4mIzQzO1x0UkVRX0ZfRFJPUF9ETUFCVUZcdD0gSU9fUkVRX0ZMQUcoUkVRX0ZfRFJPUF9ETUFCVUZfQklUKSxcbiB9O1xuIFxuIHN0cnVjdCBpb190d19yZXEge1xuQEAgLTgxMSw2ICYjNDM7ODE1LDcgQEAgc3RydWN0IGlvX2tpb2NiIHtcbiBcdC8qIGN1c3RvbSBjcmVkZW50aWFscywgdmFsaWQgSUZGIFJFUV9GX0NSRURTIGlzIHNldCAqL1xuIFx0Y29uc3Qgc3RydWN0IGNyZWRcdFx0KmNyZWRzO1xuIFx0c3RydWN0IGlvX3dxX3dvcmtcdFx0d29yaztcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXBcdFx0KmRtYWJ1Zl9tYXA7XG4gXG4gXHRzdHJ1Y3QgaW9fYmlnX2NxZSB7XG4gXHRcdHU2NFx0XHRcdGV4dHJhMTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaFxuaW5kZXggYTliYzViMzA2N2UzMi4uNmMzMWVjMTMxYTcxZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdWlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWlvLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuIFxuIHN0cnVjdCBwYWdlO1xuIHN0cnVjdCBmb2xpb19xdWV1ZTtcbiYjNDM7c3RydWN0IGRtYV9idWZfaW9fbWFwO1xuIFxuIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBpb3ZfaXRlcl9leHRyYWN0aW9uX3Q7XG4gXG5AQCAtMjksNiAmIzQzOzMwLDcgQEAgZW51bSBpdGVyX3R5cGUge1xuIFx0SVRFUl9GT0xJT1EsXG4gXHRJVEVSX1hBUlJBWSxcbiBcdElURVJfRElTQ0FSRCxcbiYjNDM7XHRJVEVSX0RNQUJVRl9NQVAsXG4gfTtcbiBcbiAjZGVmaW5lIElURVJfU09VUkNFXHQxXHQvLyA9PSBXUklURVxuQEAgLTcxLDYgJiM0Mzs3Myw3IEBAIHN0cnVjdCBpb3ZfaXRlciB7XG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgZm9saW9fcXVldWUgKmZvbGlvcTtcbiBcdFx0XHRcdHN0cnVjdCB4YXJyYXkgKnhhcnJheTtcbiBcdFx0XHRcdHZvaWQgX191c2VyICp1YnVmO1xuJiM0MztcdFx0XHRcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hYnVmX21hcDtcbiBcdFx0XHR9O1xuIFx0XHRcdHNpemVfdCBjb3VudDtcbiBcdFx0fTtcbkBAIC0xNTUsNiAmIzQzOzE1OCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW92X2l0ZXJfaXNfeGFycmF5KGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcbiBcdHJldHVybiBpb3ZfaXRlcl90eXBlKGkpID09IElURVJfWEFSUkFZO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGlvdl9pdGVyX3R5cGUoaSkgPT0gSVRFUl9ETUFCVUZfTUFQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpb3ZfaXRlcl9ydyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4ge1xuIFx0cmV0dXJuIGktXHUwMDNlZGF0YV9zb3VyY2UgPyBXUklURSA6IFJFQUQ7XG5AQCAtMzAwLDYgJiM0MzszMDgsOSBAQCB2b2lkIGlvdl9pdGVyX2ZvbGlvX3F1ZXVlKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbixcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmaXJzdF9zbG90LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpO1xuIHZvaWQgaW92X2l0ZXJfeGFycmF5KHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwgc3RydWN0IHhhcnJheSAqeGFycmF5LFxuIFx0XHQgICAgIGxvZmZfdCBzdGFydCwgc2l6ZV90IGNvdW50KTtcbiYjNDM7dm9pZCBpb3ZfaXRlcl9kbWFidWZfbWFwKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbixcbiYjNDM7XHRcdFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAsXG4mIzQzO1x0XHRcdGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCk7XG4gc3NpemVfdCBpb3ZfaXRlcl9nZXRfcGFnZXMyKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdFx0XHRzaXplX3QgbWF4c2l6ZSwgdW5zaWduZWQgbWF4cGFnZXMsIHNpemVfdCAqc3RhcnQpO1xuIHNzaXplX3QgaW92X2l0ZXJfZ2V0X3BhZ2VzX2FsbG9jMihzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBwYWdlICoqKnBhZ2VzLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcbmluZGV4IDkwOWZiN2FlYTYzOGUuLmMzOTI5N2U4YmViNmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcbkBAIC03OTAsMTMgJiM0Mzs3OTAsNDIgQEAgc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlIHtcbiBcbiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyIHtcbiBcdF9fdTMyIG9mZnNldDtcbi1cdF9fdTMyIHJlc3Y7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4gXHRfX2FsaWduZWRfdTY0IGRhdGE7XG4gXHRfX2FsaWduZWRfdTY0IHRhZ3M7XG4gXHRfX3UzMiBucjtcbiBcdF9fdTMyIHJlc3YyO1xuIH07XG4gXG4mIzQzOy8qIHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZTI6OmZsYWdzICovXG4mIzQzO2VudW0gaW9fdXJpbmdfcnNyY19yZWdfZmxhZ3Mge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIHRoZSBleHRlbmRlZCBkZXNjcmlwdG9yIGZvcm1hdCBmb3IgYnVmZmVyIHVwZGF0ZXMsXG4mIzQzO1x0ICogc2VlIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzY1xuJiM0MztcdCAqL1xuJiM0MztcdElPUklOR19SU1JDX1VQREFURV9FWFRFTkRFRFx0XHQ9IDFVIFx1MDAzY1x1MDAzYyAxLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogQnVmZmVyIHJlZ2lzdHJhdGlvbiB0eXBlLCBwYXNzZWQgaW4gc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjOjp0eXBlICovXG4mIzQzO2VudW0gaW9fdXJpbmdfcmVnYnVmX3R5cGUge1xuJiM0MztcdElPX1JFR0JVRl9UWVBFX0VNUFRZLFxuJiM0MztcdElPX1JFR0JVRl9UWVBFX1VBRERSLFxuJiM0MztcdElPX1JFR0JVRl9UWVBFX0RNQUJVRixcbiYjNDM7XG4mIzQzO1x0X19JT19SRUdCVUZfVFlQRV9NQVgsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2Mge1xuJiM0MztcdF9fdTMyIHR5cGU7IC8qIGVudW0gaW9fdXJpbmdfcmVnYnVmX3R5cGUgKi9cbiYjNDM7XHRfX3UzMiBmbGFncztcbiYjNDM7XHRfX3U2NCBzaXplO1xuJiM0MztcdF9fdTY0IHVhZGRyO1xuJiM0MztcbiYjNDM7XHRfX3MzMiBkbWFidWZfZmQ7XG4mIzQzO1x0X19zMzIgdGFyZ2V0X2ZkO1xuJiM0MztcdF9fdTY0IF9fcmVzdls2XTtcbiYjNDM7fTtcbiYjNDM7XG4gLyogU2tpcCB1cGRhdGluZyBmZCBpbmRleGVzIHNldCB0byB0aGlzIHZhbHVlIGluIHRoZSBmZCB0YWJsZSAqL1xuICNkZWZpbmUgSU9SSU5HX1JFR0lTVEVSX0ZJTEVTX1NLSVBcdCgtMilcbiBcbmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuaW5kZXggMTI3OWUyN2MyYzZkMi4uY2I4OGQxOWM4ZmIyYyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvX3VyaW5nLmNcbkBAIC0xMDksNyAmIzQzOzEwOSw3IEBAXG4gXG4gI2RlZmluZSBJT19SRVFfQ0xFQU5fU0xPV19GTEFHUyAoUkVRX0ZfUkVGQ09VTlQgfCBJT19SRVFfTElOS19GTEFHUyB8IFxcXG4gXHRcdFx0XHQgUkVRX0ZfUkVJU1NVRSB8IFJFUV9GX1BPTExFRCB8IFxcXG4tXHRcdFx0XHQgSU9fUkVRX0NMRUFOX0ZMQUdTKVxuJiM0MztcdFx0XHRcdCBJT19SRVFfQ0xFQU5fRkxBR1MgfCBSRVFfRl9EUk9QX0RNQUJVRilcbiBcbiAjZGVmaW5lIElPX1RDVFhfUkVGU19DQUNIRV9OUlx0KDFVIFx1MDAzY1x1MDAzYyAxMClcbiBcbkBAIC0xMTI1LDYgJiM0MzsxMTI1LDcgQEAgc3RhdGljIHZvaWQgaW9fZnJlZV9iYXRjaF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRcdFx0aW9fcXVldWVfbmV4dChyZXEpO1xuIFx0XHRcdGlmICh1bmxpa2VseShyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFUV9DTEVBTl9GTEFHUykpXG4gXHRcdFx0XHRpb19jbGVhbl9vcChyZXEpO1xuJiM0MztcdFx0XHRpb19yZXFfZHJvcF9kbWFidWYocmVxKTtcbiBcdFx0fVxuIFx0XHRpb19wdXRfZmlsZShyZXEpO1xuIFx0XHRpb19yZXFfcHV0X3JzcmNfbm9kZXMocmVxKTtcbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXG5pbmRleCBhNzRkMTVmN2I3ZDJiLi40MzljOTlhZDE4ODQxIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jXG5AQCAtMTQ3MSw3ICYjNDM7MTQ3MSw3IEBAIHN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xuIFxuIFx0YmkuYmlfc2l6ZSA9IG1pbihmcm9tLVx1MDAzZWNvdW50LCBsZW5ndGgpO1xuLVx0YmkuYmlfYnZlY19kb25lID0gZnJvbS1cdTAwM2Vpb3Zfb2Zmc2V0O1xuJiM0MztcdGJpLmJpX29mZnNldCA9IGZyb20tXHUwMDNlaW92X29mZnNldDtcbiBcdGJpLmJpX2lkeCA9IDA7XG4gXG4gXHR3aGlsZSAoYmkuYmlfc2l6ZSBcdTAwMjZcdTAwMjYgZnJhZyBcdTAwM2MgTUFYX1NLQl9GUkFHUykge1xuQEAgLTE0OTAsNyAmIzQzOzE0OTAsNyBAQCBzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZnJvbS1cdTAwM2VidmVjICYjNDM7PSBiaS5iaV9pZHg7XG4gXHRmcm9tLVx1MDAzZW5yX3NlZ3MgLT0gYmkuYmlfaWR4O1xuIFx0ZnJvbS1cdTAwM2Vjb3VudCAtPSBjb3BpZWQ7XG4tXHRmcm9tLVx1MDAzZWlvdl9vZmZzZXQgPSBiaS5iaV9idmVjX2RvbmU7XG4mIzQzO1x0ZnJvbS1cdTAwM2Vpb3Zfb2Zmc2V0ID0gYmkuYmlfb2Zmc2V0O1xuIFxuIFx0c2tiLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBjb3BpZWQ7XG4gXHRza2ItXHUwMDNlbGVuICYjNDM7PSBjb3BpZWQ7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcnNyYy5jIGIvaW9fdXJpbmcvcnNyYy5jXG5pbmRleCA4ZDBmMmVlMjRlMGMyLi5kMjNkYmIwZGQ2YjhlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmNcbkBAIC0xMCw2ICYjNDM7MTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9fdXJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nL2NtZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtaW8uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaW9fdXJpbmcuaFx1MDAzZVxuIFxuQEAgLTI4LDcgJiM0MzsyOSw3IEBAIHN0cnVjdCBpb19yc3JjX3VwZGF0ZSB7XG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92ZWMgKmlvdik7XG4mIzQzO1x0XHRcdFx0XHRcdCAgIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyAqZGVzYyk7XG4gXG4gc3RhdGljIGludCBocGFnZV9hY2N0X3JlZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHBhZ2UgKmhwYWdlLFxuIFx0XHRcdCAgYm9vbCAqYWNjdF9uZXcpXG5AQCAtODEsNiAmIzQzOzgyLDE4IEBAIHN0YXRpYyBib29sIGhwYWdlX2FjY3RfdW5yZWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBwYWdlICpocGFnZSlcbiBcbiAjZGVmaW5lIElPX0NBQ0hFRF9CVkVDU19TRUdTXHQzMlxuIFxuJiM0MztzdGF0aWMgdm9pZCBpb19pb3ZfdG9fcmVnYnVmX2Rlc2MoY29uc3Qgc3RydWN0IGlvdmVjICppb3YsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpXG4mIzQzO3tcbiYjNDM7XHQqZGVzYyA9IChzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MpIHtcbiYjNDM7XHRcdC50eXBlID0gSU9fUkVHQlVGX1RZUEVfVUFERFIsXG4mIzQzO1x0XHQudWFkZHIgPSAodTY0KSh1aW50cHRyX3QpaW92LVx1MDAzZWlvdl9iYXNlLFxuJiM0MztcdFx0LnNpemUgPSBpb3YtXHUwMDNlaW92X2xlbixcbiYjNDM7XHR9O1xuJiM0MztcdGlmICghZGVzYy1cdTAwM2V1YWRkcilcbiYjNDM7XHRcdGRlc2MtXHUwMDNldHlwZSA9IElPX1JFR0JVRl9UWVBFX0VNUFRZO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX2lvX2FjY291bnRfbWVtKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfbGltaXQsIGN1cl9wYWdlcywgbmV3X3BhZ2VzO1xuQEAgLTMwOSw2ICYjNDM7MzIyLDggQEAgc3RhdGljIGludCBfX2lvX3NxZV9maWxlc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXHRpZiAodXAtXHUwMDNlb2Zmc2V0ICYjNDM7IG5yX2FyZ3MgXHUwMDNlIGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICh1cC1cdTAwM2VmbGFncylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Zm9yIChkb25lID0gMDsgZG9uZSBcdTAwM2MgbnJfYXJnczsgZG9uZSYjNDM7JiM0MzspIHtcbiBcdFx0dTY0IHRhZyA9IDA7XG5AQCAtMzY4LDkgJiM0MzszODMsOCBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMiAqdXAsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfYXJncylcbiB7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZCA9IHVwLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUlNSQ19VUERBVEVfRVhURU5ERUQ7XG4gXHR1NjQgX191c2VyICp0YWdzID0gdTY0X3RvX3VzZXJfcHRyKHVwLVx1MDAzZXRhZ3MpO1xuLVx0c3RydWN0IGlvdmVjIGZhc3RfaW92LCAqaW92O1xuLVx0c3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYztcbiBcdHU2NCB1c2VyX2RhdGEgPSB1cC1cdTAwM2VkYXRhO1xuIFx0X191MzIgZG9uZTtcbiBcdGludCBpLCBlcnI7XG5AQCAtMzc5LDI2ICYjNDM7MzkzLDQ5IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdHJldHVybiAtRU5YSU87XG4gXHRpZiAodXAtXHUwMDNlb2Zmc2V0ICYjNDM7IG5yX2FyZ3MgXHUwMDNlIGN0eC1cdTAwM2VidWZfdGFibGUubnIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICh1cC1cdTAwM2VmbGFncyBcdTAwMjYgfklPUklOR19SU1JDX1VQREFURV9FWFRFTkRFRClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0Zm9yIChkb25lID0gMDsgZG9uZSBcdTAwM2MgbnJfYXJnczsgZG9uZSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyBkZXNjO1xuIFx0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xuIFx0XHR1NjQgdGFnID0gMDtcbiBcbi1cdFx0dXZlYyA9IHU2NF90b191c2VyX3B0cih1c2VyX2RhdGEpO1xuLVx0XHRpb3YgPSBpb3ZlY19mcm9tX3VzZXIodXZlYywgMSwgMSwgXHUwMDI2ZmFzdF9pb3YsIGlvX2lzX2NvbXBhdChjdHgpKTtcbi1cdFx0aWYgKElTX0VSUihpb3YpKSB7XG4tXHRcdFx0ZXJyID0gUFRSX0VSUihpb3YpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHRcdGlmICh0YWdzIFx1MDAyNlx1MDAyNiBjb3B5X2Zyb21fdXNlcihcdTAwMjZ0YWcsIFx1MDAyNnRhZ3NbZG9uZV0sIHNpemVvZih0YWcpKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbi1cdFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBpb3YpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChleHRlbmRlZCkge1xuJiM0MztcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2ZGVzYywgdTY0X3RvX3VzZXJfcHRyKHVzZXJfZGF0YSksXG4mIzQzO1x0XHRcdFx0XHQgICBzaXplb2YoZGVzYykpKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHR1c2VyX2RhdGEgJiM0Mzs9IHNpemVvZihkZXNjKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWMgPSB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKTtcbiYjNDM7XHRcdFx0c3RydWN0IGlvdmVjIGZhc3RfaW92LCAqaW92O1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGlvX2lzX2NvbXBhdChjdHgpKVxuJiM0MztcdFx0XHRcdHVzZXJfZGF0YSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfaW92ZWMpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0dXNlcl9kYXRhICYjNDM7PSBzaXplb2Yoc3RydWN0IGlvdmVjKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlvdiA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCAxLCAxLCBcdTAwMjZmYXN0X2lvdiwgaW9faXNfY29tcGF0KGN0eCkpO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKGlvdikpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSBQVFJfRVJSKGlvdik7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aW9faW92X3RvX3JlZ2J1Zl9kZXNjKGlvdiwgXHUwMDI2ZGVzYyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBcdTAwMjZkZXNjKTtcbiBcdFx0aWYgKElTX0VSUihub2RlKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIobm9kZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiYjNDM7XG4gXHRcdGlmICh0YWcpIHtcbiBcdFx0XHRpZiAoIW5vZGUpIHtcbiBcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG5AQCAtNDA5LDEwICYjNDM7NDQ2LDYgQEAgc3RhdGljIGludCBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0aSA9IGFycmF5X2luZGV4X25vc3BlYyh1cC1cdTAwM2VvZmZzZXQgJiM0MzsgZG9uZSwgY3R4LVx1MDAzZWJ1Zl90YWJsZS5ucik7XG4gXHRcdGlvX3Jlc2V0X3JzcmNfbm9kZShjdHgsIFx1MDAyNmN0eC1cdTAwM2VidWZfdGFibGUsIGkpO1xuIFx0XHRjdHgtXHUwMDNlYnVmX3RhYmxlLm5vZGVzW2ldID0gbm9kZTtcbi1cdFx0aWYgKGlvX2lzX2NvbXBhdChjdHgpKVxuLVx0XHRcdHVzZXJfZGF0YSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfaW92ZWMpO1xuLVx0XHRlbHNlXG4tXHRcdFx0dXNlcl9kYXRhICYjNDM7PSBzaXplb2Yoc3RydWN0IGlvdmVjKTtcbiBcdH1cbiBcdHJldHVybiBkb25lID8gZG9uZSA6IGVycjtcbiB9XG5AQCAtNDQ3LDcgJiM0Mzs0ODAsNyBAQCBpbnQgaW9fcmVnaXN0ZXJfZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0bWVtc2V0KFx1MDAyNnVwLCAwLCBzaXplb2YodXApKTtcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ1cCwgYXJnLCBzaXplb2Yoc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKHVwLnJlc3YgfHwgdXAucmVzdjIpXG4mIzQzO1x0aWYgKHVwLnJlc3YyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHJldHVybiBfX2lvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKGN0eCwgSU9SSU5HX1JTUkNfRklMRSwgXHUwMDI2dXAsIG5yX2FyZ3MpO1xuIH1cbkBAIC00NjEsNyAmIzQzOzQ5NCw3IEBAIGludCBpb19yZWdpc3Rlcl9yc3JjX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dXAsIGFyZywgc2l6ZW9mKHVwKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKCF1cC5uciB8fCB1cC5yZXN2IHx8IHVwLnJlc3YyKVxuJiM0MztcdGlmICghdXAubnIgfHwgdXAucmVzdjIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0cmV0dXJuIF9faW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoY3R4LCB0eXBlLCBcdTAwMjZ1cCwgdXAubnIpO1xuIH1cbkBAIC01NjEsMTIgJiM0Mzs1OTQsOSBAQCBpbnQgaW9fZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4gXHRzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyIHVwMjtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0bWVtc2V0KFx1MDAyNnVwMiwgMCwgc2l6ZW9mKHVwMikpO1xuIFx0dXAyLm9mZnNldCA9IHVwLVx1MDAzZW9mZnNldDtcbiBcdHVwMi5kYXRhID0gdXAtXHUwMDNlYXJnO1xuLVx0dXAyLm5yID0gMDtcbi1cdHVwMi50YWdzID0gMDtcbi1cdHVwMi5yZXN2ID0gMDtcbi1cdHVwMi5yZXN2MiA9IDA7XG4gXG4gXHRpZiAodXAtXHUwMDNlb2Zmc2V0ID09IElPUklOR19GSUxFX0lOREVYX0FMTE9DKSB7XG4gXHRcdHJldCA9IGlvX2ZpbGVzX3VwZGF0ZV93aXRoX2luZGV4X2FsbG9jKHJlcSwgaXNzdWVfZmxhZ3MpO1xuQEAgLTg1MiwyNyAmIzQzOzg4MiwxMjcgQEAgYm9vbCBpb19jaGVja19jb2FsZXNjZV9idWZmZXIoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCBpbnQgbnJfcGFnZXMsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0cnVjdCBpb19yZWdidWZfZG1hIHtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHhcdFx0Y3R4O1xuJiM0MztcdHN0cnVjdCBmaWxlXHRcdFx0KnRhcmdldF9maWxlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW9fcmVsZWFzZV9yZWdfZG1hYnVmKHZvaWQgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqZGIgPSBwcml2O1xuJiM0MztcbiYjNDM7XHRmcHV0KGRiLVx1MDAzZXRhcmdldF9maWxlKTtcbiYjNDM7XHRkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKFx1MDAyNmRiLVx1MDAzZWN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19yZWdpc3Rlcl9kbWFidWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGUgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11ID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqcmVnYnVmID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqdGFyZ2V0X2ZpbGUgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBOVUxMO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuJiM0MztcdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IElPUklOR19TRVRVUF9JT1BPTEwpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNldWFkZHIgfHwgZGVzYy1cdTAwM2VzaXplKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0bm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7XG4mIzQzO1x0aWYgKCFub2RlKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0aW11ID0gaW9fYWxsb2NfaW11KGN0eCwgMCk7XG4mIzQzO1x0aWYgKCFpbXUpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRyZWdidWYgPSBremFsbG9jKHNpemVvZigqcmVnYnVmKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFyZWdidWYpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gLUVCQURGO1xuJiM0MztcdHRhcmdldF9maWxlID0gZmdldChkZXNjLVx1MDAzZXRhcmdldF9mZCk7XG4mIzQzO1x0aWYgKCF0YXJnZXRfZmlsZSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRkbWFidWYgPSBkbWFfYnVmX2dldChkZXNjLVx1MDAzZWRtYWJ1Zl9mZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGRtYWJ1Zik7XG4mIzQzO1x0XHRkbWFidWYgPSBOVUxMO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkbWFidWYtXHUwMDNlc2l6ZSBcdTAwM2UgU1pfMUcpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9idWZfaW9fY3R4X2NyZWF0ZSh0YXJnZXRfZmlsZSwgXHUwMDI2cmVnYnVmLVx1MDAzZWN0eCwgZG1hYnVmLFxuJiM0MztcdFx0XHRcdCAgICBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZWdidWYtXHUwMDNldGFyZ2V0X2ZpbGUgPSB0YXJnZXRfZmlsZTtcbiYjNDM7XHRpbXUtXHUwMDNlbnJfYnZlY3MgPSAxO1xuJiM0MztcdGltdS1cdTAwM2V1YnVmID0gMDtcbiYjNDM7XHRpbXUtXHUwMDNlbGVuID0gZG1hYnVmLVx1MDAzZXNpemU7XG4mIzQzO1x0aW11LVx1MDAzZWZvbGlvX3NoaWZ0ID0gMDtcbiYjNDM7XHRpbXUtXHUwMDNlcmVsZWFzZSA9IGlvX3JlbGVhc2VfcmVnX2RtYWJ1ZjtcbiYjNDM7XHRpbXUtXHUwMDNlcHJpdiA9IHJlZ2J1ZjtcbiYjNDM7XHRpbXUtXHUwMDNlZmxhZ3MgPSBJT19SRUdCVUZfRl9ETUFCVUY7XG4mIzQzO1x0aW11LVx1MDAzZWRpciA9IElPX0lNVV9ERVNUIHwgSU9fSU1VX1NPVVJDRTtcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2aW11LVx1MDAzZXJlZnMsIDEpO1xuJiM0MztcdG5vZGUtXHUwMDNlYnVmID0gaW11O1xuJiM0MztcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XG4mIzQzO1x0cmV0dXJuIG5vZGU7XG4mIzQzO2VycjpcbiYjNDM7XHRrZnJlZShyZWdidWYpO1xuJiM0MztcdGlmIChpbXUpXG4mIzQzO1x0XHRpb19mcmVlX2ltdShjdHgsIGltdSk7XG4mIzQzO1x0aWYgKG5vZGUpXG4mIzQzO1x0XHRpb19jYWNoZV9mcmVlKFx1MDAyNmN0eC1cdTAwM2Vub2RlX2NhY2hlLCBub2RlKTtcbiYjNDM7XHRpZiAodGFyZ2V0X2ZpbGUpXG4mIzQzO1x0XHRmcHV0KHRhcmdldF9maWxlKTtcbiYjNDM7XHRpZiAoZG1hYnVmKVxuJiM0MztcdFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztcbiBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi1cdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92ZWMgKmlvdilcbiYjNDM7XHRcdFx0XHRcdFx0ICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHVhZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYy1cdTAwM2V1YWRkcjtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IGRlc2MtXHUwMDNlc2l6ZTtcbiBcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11ID0gTlVMTDtcbiBcdHN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMO1xuIFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTtcbiBcdHVuc2lnbmVkIGxvbmcgb2ZmO1xuLVx0c2l6ZV90IHNpemU7XG4gXHRpbnQgcmV0LCBucl9wYWdlcywgaTtcbiBcdHN0cnVjdCBpb19pbXVfZm9saW9fZGF0YSBkYXRhO1xuIFx0Ym9vbCBjb2FsZXNjZWQgPSBmYWxzZTtcbiBcbi1cdGlmICghaW92LVx1MDAzZWlvdl9iYXNlKSB7XG4tXHRcdGlmIChpb3YtXHUwMDNlaW92X2xlbilcbiYjNDM7XHRpZiAoZGVzYy1cdTAwM2V0eXBlIFx1MDAzZT0gX19JT19SRUdCVUZfVFlQRV9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XHRpZiAoIW1lbV9pc196ZXJvKFx1MDAyNmRlc2MtXHUwMDNlX19yZXN2LCBzaXplb2YoZGVzYy1cdTAwM2VfX3Jlc3YpKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRpZiAoZGVzYy1cdTAwM2V0eXBlID09IElPX1JFR0JVRl9UWVBFX0RNQUJVRilcbiYjNDM7XHRcdHJldHVybiBpb19yZWdpc3Rlcl9kbWFidWYoY3R4LCBkZXNjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRlc2MtXHUwMDNlZG1hYnVmX2ZkIHx8IGRlc2MtXHUwMDNldGFyZ2V0X2ZkKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdGlmIChkZXNjLVx1MDAzZXR5cGUgPT0gSU9fUkVHQlVGX1RZUEVfRU1QVFkpIHtcbiYjNDM7XHRcdGlmICh1YWRkciB8fCBzaXplKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xuIFx0XHQvKiByZW1vdmUgdGhlIGJ1ZmZlciB3aXRob3V0IGluc3RhbGxpbmcgYSBuZXcgb25lICovXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0cmV0ID0gaW9fdmFsaWRhdGVfdXNlcl9idWZfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpaW92LVx1MDAzZWlvdl9iYXNlLFxuLVx0XHRcdFx0XHQgaW92LVx1MDAzZWlvdl9sZW4pO1xuJiM0MztcdHJldCA9IGlvX3ZhbGlkYXRlX3VzZXJfYnVmX3JhbmdlKHVhZGRyLCBzaXplKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4gXG5AQCAtODgxLDggJiM0MzsxMDExLDcgQEAgc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuIFx0cmV0ID0gLUVOT01FTTtcbi1cdHBhZ2VzID0gaW9fcGluX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBpb3YtXHUwMDNlaW92X2Jhc2UsIGlvdi1cdTAwM2Vpb3ZfbGVuLFxuLVx0XHRcdFx0XHUwMDI2bnJfcGFnZXMpO1xuJiM0MztcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHVhZGRyLCBzaXplLCBcdTAwMjZucl9wYWdlcyk7XG4gXHRpZiAoSVNfRVJSKHBhZ2VzKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKHBhZ2VzKTtcbiBcdFx0cGFnZXMgPSBOVUxMO1xuQEAgLTkwNCwxMCAmIzQzOzEwMzMsOSBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdHNpemUgPSBpb3YtXHUwMDNlaW92X2xlbjtcbiBcdC8qIHN0b3JlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGxhdGVyIHZlcmlmaWNhdGlvbiAqL1xuLVx0aW11LVx1MDAzZXVidWYgPSAodW5zaWduZWQgbG9uZykgaW92LVx1MDAzZWlvdl9iYXNlO1xuLVx0aW11LVx1MDAzZWxlbiA9IGlvdi1cdTAwM2Vpb3ZfbGVuO1xuJiM0MztcdGltdS1cdTAwM2V1YnVmID0gdWFkZHI7XG4mIzQzO1x0aW11LVx1MDAzZWxlbiA9IHNpemU7XG4gXHRpbXUtXHUwMDNlZm9saW9fc2hpZnQgPSBQQUdFX1NISUZUO1xuIFx0aW11LVx1MDAzZXJlbGVhc2UgPSBpb19yZWxlYXNlX3VidWY7XG4gXHRpbXUtXHUwMDNlcHJpdiA9IGltdTtcbkBAIC05MTcsNyAmIzQzOzEwNDUsNyBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0aW11LVx1MDAzZWZvbGlvX3NoaWZ0ID0gZGF0YS5mb2xpb19zaGlmdDtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZpbXUtXHUwMDNlcmVmcywgMSk7XG4gXG4tXHRvZmYgPSAodW5zaWduZWQgbG9uZylpb3YtXHUwMDNlaW92X2Jhc2UgXHUwMDI2IH5QQUdFX01BU0s7XG4mIzQzO1x0b2ZmID0gdWFkZHIgXHUwMDI2IH5QQUdFX01BU0s7XG4gXHRpZiAoY29hbGVzY2VkKVxuIFx0XHRvZmYgJiM0Mzs9IGRhdGEuZmlyc3RfZm9saW9fcGFnZV9pZHggXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXG5AQCAtOTY5LDYgJiM0MzsxMDk3LDcgQEAgaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRtZW1zZXQoaW92LCAwLCBzaXplb2YoKmlvdikpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfYXJnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyBkZXNjO1xuIFx0XHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xuIFx0XHR1NjQgdGFnID0gMDtcbiBcbkBAIC05OTIsNyAmIzQzOzExMjEsOCBAQCBpbnQgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG4tXHRcdG5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgaW92KTtcbiYjNDM7XHRcdGlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsIFx1MDAyNmRlc2MpO1xuJiM0MztcdFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBcdTAwMjZkZXNjKTtcbiBcdFx0aWYgKElTX0VSUihub2RlKSkge1xuIFx0XHRcdHJldCA9IFBUUl9FUlIobm9kZSk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMTEzNiw5ICYjNDM7MTI2Niw2NCBAQCBzdGF0aWMgaW50IGlvX2ltcG9ydF9rYnVmKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiYjNDM7dm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UocmVxLVx1MDAzZWJ1Zl9ub2RlLVx1MDAzZXR5cGUgIT0gSU9SSU5HX1JTUkNfQlVGRkVSKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpbXUgPSByZXEtXHUwMDNlYnVmX25vZGUtXHUwMDNlYnVmO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIShpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0RNQUJVRikpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGRtYV9idWZfaW9fbWFwX2Ryb3AocmVxLVx1MDAzZWRtYWJ1Zl9tYXApO1xuJiM0MztcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9EUk9QX0RNQUJVRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpb19pbXBvcnRfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuJiM0MztcdFx0XHQgICBpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcbiYjNDM7XHRcdFx0ICAgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCxcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqZGIgPSBpbXUtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0aWYgKCFsZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRpZiAocmVxLVx1MDAzZWZpbGUgIT0gZGItXHUwMDNldGFyZ2V0X2ZpbGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVCQURGO1xuJiM0MztcbiYjNDM7XHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9EUk9QX0RNQUJVRikge1xuJiM0MztcdFx0bWFwID0gcmVxLVx1MDAzZWRtYWJ1Zl9tYXA7XG4mIzQzO1x0XHRnb3RvIGluaXRfaXRlcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hcCA9IGRtYV9idWZfaW9fZ2V0X21hcChcdTAwMjZkYi1cdTAwM2VjdHgpO1xuJiM0MztcdGlmICh1bmxpa2VseSghbWFwKSkge1xuJiM0MztcdFx0aWYgKCEoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfSU9XUSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcdFx0bWFwID0gZG1hX2J1Zl9pb19jcmVhdGVfbWFwKFx1MDAyNmRiLVx1MDAzZWN0eCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG1hcCkpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKG1hcCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlZG1hYnVmX21hcCA9IG1hcDtcbiYjNDM7XHRyZXEtXHUwMDNlZmxhZ3MgfD0gUkVRX0ZfRFJPUF9ETUFCVUY7XG4mIzQzO2luaXRfaXRlcjpcbiYjNDM7XHRpb3ZfaXRlcl9kbWFidWZfbWFwKGl0ZXIsIGRkaXIsIG1hcCwgb2Zmc2V0LCBsZW4pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlvX2ltcG9ydF9maXhlZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiYjNDM7XHRcdFx0ICAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHQgICBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcbi1cdFx0XHQgICB1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4pXG4mIzQzO1x0XHRcdCAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbixcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MsXG4mIzQzO1x0XHRcdCAgIHVuc2lnbmVkIGltcG9ydF9mbGFncylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYztcbiBcdHNpemVfdCBmb2xpb19tYXNrO1xuQEAgLTExNTgsNiAmIzQzOzEzNDMsMTIgQEAgc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdG9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LVx1MDAzZXVidWY7XG4gXG4mIzQzO1x0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfRE1BQlVGKSB7XG4mIzQzO1x0XHRpZiAoIShpbXBvcnRfZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRyZXR1cm4gaW9faW1wb3J0X2RtYWJ1ZihyZXEsIGRkaXIsIGl0ZXIsIGltdSwgbGVuLCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHRpc3N1ZV9mbGFncyk7XG4mIzQzO1x0fVxuIFx0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRilcbiBcdFx0cmV0dXJuIGlvX2ltcG9ydF9rYnVmKGRkaXIsIGl0ZXIsIGltdSwgbGVuLCBvZmZzZXQpO1xuIFxuQEAgLTEyMTEsMTYgJiM0MzsxNDAyLDE3IEBAIGlubGluZSBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19maW5kX2J1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuJiM0MztpbnQgX19pb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsXG4tXHRcdFx0dW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTtcbiBcbiBcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xuIFx0aWYgKCFub2RlKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiBpb19pbXBvcnRfZml4ZWQoZGRpciwgaXRlciwgbm9kZS1cdTAwM2VidWYsIGJ1Zl9hZGRyLCBsZW4pO1xuJiM0MztcdHJldHVybiBpb19pbXBvcnRfZml4ZWQocmVxLCBkZGlyLCBpdGVyLCBub2RlLVx1MDAzZWJ1ZiwgYnVmX2FkZHIsIGxlbixcbiYjNDM7XHRcdFx0XHRpc3N1ZV9mbGFncywgaW1wb3J0X2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGludCBpb19idWZmZXJfYWNjdF9jbG9uZWRfaHBhZ2VzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuQEAgLTEzNDcsNiAmIzQzOzE1MzksMTEgQEAgc3RhdGljIGludCBpb19jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHhcbiBcdFx0aWYgKCFzcmNfbm9kZSkge1xuIFx0XHRcdGRzdF9ub2RlID0gTlVMTDtcbiBcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aWYgKHNyY19ub2RlLVx1MDAzZWJ1Zi1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfVU5DTE9ORUFCTEUpIHtcbiYjNDM7XHRcdFx0XHRpb19yc3JjX2RhdGFfZnJlZShjdHgsIFx1MDAyNmRhdGEpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuIFx0XHRcdGRzdF9ub2RlID0gaW9fcnNyY19ub2RlX2FsbG9jKGN0eCwgSU9SSU5HX1JTUkNfQlVGRkVSKTtcbiBcdFx0XHRpZiAoIWRzdF9ub2RlKSB7XG4gXHRcdFx0XHRpb19yc3JjX2RhdGFfZnJlZShjdHgsIFx1MDAyNmRhdGEpO1xuQEAgLTE2MTcsOSAmIzQzOzE4MTQsOSBAQCBzdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuJiM0MztpbnQgX19pb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxuLVx0XHRcdHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuJiM0MztcdFx0XHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncywgdW5zaWduZWQgaW1wb3J0X2ZsYWdzKVxuIHtcbiBcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4gXHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTtcbkBAIC0xNjM3LDcgJiM0MzsxODM0LDkgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRpb3ZlY19vZmYgPSB2ZWMtXHUwMDNlbnIgLSBucl9pb3ZzO1xuIFx0aW92ID0gdmVjLVx1MDAzZWlvdmVjICYjNDM7IGlvdmVjX29mZjtcbiBcbi1cdGlmIChpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0tCVUYpIHtcbiYjNDM7XHRpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9ETUFCVUYpIHtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9IGVsc2UgaWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xuIFx0XHRpbnQgcmV0ID0gaW9fa2Vybl9idmVjX3NpemUoaW92LCBucl9pb3ZzLCBpbXUsIFx1MDAyNm5yX3NlZ3MpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkocmV0KSlcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmggYi9pb191cmluZy9yc3JjLmhcbmluZGV4IDk4YWU4ZWY1MTAwOWQuLjNjYjliNTdmMTU5YjYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JzcmMuaFxuQEAgLTI5LDcgJiM0MzsyOSwxMyBAQCBlbnVtIHtcbiB9O1xuIFxuIGVudW0ge1xuLVx0SU9fUkVHQlVGX0ZfS0JVRlx0XHQ9IDEsXG4mIzQzO1x0SU9fUkVHQlVGX0ZfS0JVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDAsXG4mIzQzO1x0SU9fUkVHQlVGX0ZfVU5DTE9ORUFCTEVcdFx0PSAxIFx1MDAzY1x1MDAzYyAxLFxuJiM0MztcdElPX1JFR0JVRl9GX0RNQUJVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDMsXG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRJT19SRUdCVUZfSU1QT1JUX0FMTE9XX0RNQUJVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDEsXG4gfTtcbiBcbiBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYge1xuQEAgLTY0LDEyICYjNDM7NzAsMjggQEAgaW50IGlvX3JzcmNfZGF0YV9hbGxvYyhzdHJ1Y3QgaW9fcnNyY19kYXRhICpkYXRhLCB1bnNpZ25lZCBucik7XG4gXG4gc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fZmluZF9idWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcbi1pbnQgaW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiYjNDM7aW50IF9faW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHR1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sIGludCBkZGlyLFxuLVx0XHRcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcbi1pbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiYjNDM7XHRcdFx0dW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncyk7XG4mIzQzO2ludCBfX2lvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4tXHRcdFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyxcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW1wb3J0X2ZsYWdzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4mIzQzO1x0XHRcdFx0ICAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBpdGVyLCBidWZfYWRkciwgbGVuLCBkZGlyLCBpc3N1ZV9mbGFncywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2lvX2ltcG9ydF9yZWdfdmVjKGRkaXIsIGl0ZXIsIHJlcSwgdmVjLCBucl9pb3ZzLCBpc3N1ZV9mbGFncywgMCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGlvX3ByZXBfcmVnX2lvdmVjKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqaXYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2Vncyk7XG4gXG5AQCAtMTU2LDQgJiM0MzsxNzgsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlvX2FsbG9jX2NhY2hlX3ZlY19rYXNhbihzdHJ1Y3QgaW91X3ZlYyAqaXYpXG4gXHRcdGlvX3ZlY19mcmVlKGl2KTtcbiB9XG4gXG4mIzQzO3ZvaWQgaW9fZHJvcF9kbWFidWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX2Ryb3BfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9EUk9QX0RNQUJVRikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfQlVGX05PREUpKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpb19kcm9wX2RtYWJ1Zl9ub2RlKHJlcSk7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcncuYyBiL2lvX3VyaW5nL3J3LmNcbmluZGV4IDk1MDM4Y2ZkYTYxNTMuLjExZmY3YjVhMTE2NDcgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9ydy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9ydy5jXG5AQCAtMzgwLDggJiM0MzszODAsOCBAQCBzdGF0aWMgaW50IGlvX2luaXRfcndfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcbiBcdGlmIChpby1cdTAwM2VieXRlc19kb25lKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgXHUwMDI2aW8tXHUwMDNlaXRlciwgcnctXHUwMDNlYWRkciwgcnctXHUwMDNlbGVuLCBkZGlyLFxuLVx0XHRcdFx0aXNzdWVfZmxhZ3MpO1xuJiM0MztcdHJldCA9IF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBcdTAwMjZpby1cdTAwM2VpdGVyLCBydy1cdTAwM2VhZGRyLCBydy1cdTAwM2VsZW4sIGRkaXIsXG4mIzQzO1x0XHRcdFx0ICBpc3N1ZV9mbGFncywgSU9fUkVHQlVGX0lNUE9SVF9BTExPV19ETUFCVUYpO1xuIFx0aW92X2l0ZXJfc2F2ZV9zdGF0ZShcdTAwMjZpby1cdTAwM2VpdGVyLCBcdTAwMjZpby1cdTAwM2VpdGVyX3N0YXRlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTU5MSw2ICYjNDM7NTkxLDggQEAgc3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG4gXHRzdHJ1Y3QgaW9fcncgKnJ3ID0gY29udGFpbmVyX29mKGtpb2NiLCBzdHJ1Y3QgaW9fcncsIGtpb2NiKTtcbiBcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKHJ3KTtcbiBcbiYjNDM7XHRpb19yZXFfZHJvcF9kbWFidWYocmVxKTtcbiYjNDM7XG4gXHRfX2lvX2NvbXBsZXRlX3J3X2NvbW1vbihyZXEsIHJlcyk7XG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIGlvX2ZpeHVwX3J3X3JlcyhyZXEsIHJlcyksIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fcmVxX3J3X2NvbXBsZXRlO1xuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcbmluZGV4IDI3MzkxOWIxNjE2MTcuLjE0NmU1ZWQ4MGM3Y2QgMTAwNjQ0XG4tLS0gYS9saWIvaW92X2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmNcbkBAIC01NzUsNyAmIzQzOzU3NSw4IEBAIHZvaWQgaW92X2l0ZXJfYWR2YW5jZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxuIHtcbiBcdGlmICh1bmxpa2VseShpLVx1MDAzZWNvdW50IFx1MDAzYyBzaXplKSlcbiBcdFx0c2l6ZSA9IGktXHUwMDNlY291bnQ7XG4tXHRpZiAobGlrZWx5KGl0ZXJfaXNfdWJ1ZihpKSkgfHwgdW5saWtlbHkoaW92X2l0ZXJfaXNfeGFycmF5KGkpKSkge1xuJiM0MztcdGlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCB1bmxpa2VseShpb3ZfaXRlcl9pc194YXJyYXkoaSkpIHx8XG4mIzQzO1x0ICAgIHVubGlrZWx5KGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpKSB7XG4gXHRcdGktXHUwMDNlaW92X29mZnNldCAmIzQzOz0gc2l6ZTtcbiBcdFx0aS1cdTAwM2Vjb3VudCAtPSBzaXplO1xuIFx0fSBlbHNlIGlmIChsaWtlbHkoaXRlcl9pc19pb3ZlYyhpKSB8fCBpb3ZfaXRlcl9pc19rdmVjKGkpKSkge1xuQEAgLTYzMSw3ICYjNDM7NjMyLDggQEAgdm9pZCBpb3ZfaXRlcl9yZXZlcnQoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgdW5yb2xsKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXHR1bnJvbGwgLT0gaS1cdTAwM2Vpb3Zfb2Zmc2V0O1xuLVx0aWYgKGlvdl9pdGVyX2lzX3hhcnJheShpKSB8fCBpdGVyX2lzX3VidWYoaSkpIHtcbiYjNDM7XHRpZiAoaW92X2l0ZXJfaXNfeGFycmF5KGkpIHx8IGl0ZXJfaXNfdWJ1ZihpKSB8fFxuJiM0MztcdCAgICBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSB7XG4gXHRcdEJVRygpOyAvKiBXZSBzaG91bGQgbmV2ZXIgZ28gYmV5b25kIHRoZSBzdGFydCBvZiB0aGUgc3BlY2lmaWVkXG4gXHRcdFx0KiByYW5nZSBzaW5jZSB3ZSBtaWdodCB0aGVuIGJlIHN0cmF5aW5nIGludG8gcGFnZXMgdGhhdFxuIFx0XHRcdCogYXJlbiYjMzk7dCBwaW5uZWQuXG5AQCAtNzc1LDYgJiM0Mzs3NzcsMjAgQEAgdm9pZCBpb3ZfaXRlcl94YXJyYXkoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGlvdl9pdGVyX3hhcnJheSk7XG4gXG4mIzQzO3ZvaWQgaW92X2l0ZXJfZG1hYnVmX21hcChzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCxcbiYjNDM7XHRcdFx0IGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudClcbiYjNDM7e1xuJiM0MztcdFdBUk5fT04oZGlyZWN0aW9uIFx1MDAyNiB+KFJFQUQgfCBXUklURSkpO1xuJiM0MztcdCppID0gKHN0cnVjdCBpb3ZfaXRlcil7XG4mIzQzO1x0XHQuaXRlcl90eXBlID0gSVRFUl9ETUFCVUZfTUFQLFxuJiM0MztcdFx0LmRhdGFfc291cmNlID0gZGlyZWN0aW9uLFxuJiM0MztcdFx0LmRtYWJ1Zl9tYXAgPSBtYXAsXG4mIzQzO1x0XHQuY291bnQgPSBjb3VudCxcbiYjNDM7XHRcdC5pb3Zfb2Zmc2V0ID0gb2ZmLFxuJiM0MztcdH07XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaW92X2l0ZXJfZGlzY2FyZCAtIEluaXRpYWxpc2UgYW4gSS9PIGl0ZXJhdG9yIHRoYXQgZGlzY2FyZHMgZGF0YVxuICAqIEBpOiBUaGUgaXRlcmF0b3IgdG8gaW5pdGlhbGlzZS5cbkBAIC04NDEsNyAmIzQzOzg1Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2FsaWdubWVudF9idmVjKGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcbiBcbiB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4ge1xuLVx0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpKSB7XG4mIzQzO1x0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpIHtcbiBcdFx0c2l6ZV90IHNpemUgPSBpLVx1MDAzZWNvdW50O1xuIFx0XHRpZiAoc2l6ZSlcbiBcdFx0XHRyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWktXHUwMDNldWJ1ZiAmIzQzOyBpLVx1MDAzZWlvdl9vZmZzZXQpIHwgc2l6ZTtcbkBAIC04NzIsNyAmIzQzOzg4OCw3IEBAIHVuc2lnbmVkIGxvbmcgaW92X2l0ZXJfZ2FwX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4gXHRzaXplX3Qgc2l6ZSA9IGktXHUwMDNlY291bnQ7XG4gXHR1bnNpZ25lZCBrO1xuIFxuLVx0aWYgKGl0ZXJfaXNfdWJ1ZihpKSlcbiYjNDM7XHRpZiAoaXRlcl9pc191YnVmKGkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKFdBUk5fT04oIWl0ZXJfaXNfaW92ZWMoaSkpKVxuQEAgLTE0NjksMTEgJiM0MzsxNDg1LDEyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGltcG9ydF91YnVmKTtcbiB2b2lkIGlvdl9pdGVyX3Jlc3RvcmUoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgaW92X2l0ZXJfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdGlmIChXQVJOX09OX09OQ0UoIWlvdl9pdGVyX2lzX2J2ZWMoaSkgXHUwMDI2XHUwMDI2ICFpdGVyX2lzX2lvdmVjKGkpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAhaXRlcl9pc191YnVmKGkpKSBcdTAwMjZcdTAwMjYgIWlvdl9pdGVyX2lzX2t2ZWMoaSkpXG4mIzQzO1x0XHRcdCAhaXRlcl9pc191YnVmKGkpIFx1MDAyNlx1MDAyNiAhaW92X2l0ZXJfaXNfa3ZlYyhpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICFpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSlcbiBcdFx0cmV0dXJuO1xuIFx0aS1cdTAwM2Vpb3Zfb2Zmc2V0ID0gc3RhdGUtXHUwMDNlaW92X29mZnNldDtcbiBcdGktXHUwMDNlY291bnQgPSBzdGF0ZS1cdTAwM2Vjb3VudDtcbi1cdGlmIChpdGVyX2lzX3VidWYoaSkpXG4mIzQzO1x0aWYgKGl0ZXJfaXNfdWJ1ZihpKSB8fCBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKVxuIFx0XHRyZXR1cm47XG4gXHQvKlxuIFx0ICogRm9yIHRoZSAqdmVjIGl0ZXJzLCBucl9zZWdzICYjNDM7IGlvdiBpcyBjb25zdGFudCAtIGlmIHdlIGluY3JlbWVudFxuQEAgLTE2MjUsNyAmIzQzOzE2NDIsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0fVxuIFx0YmkuYmlfaWR4ID0gMDtcbiBcdGJpLmJpX3NpemUgPSBtYXhzaXplO1xuLVx0YmkuYmlfYnZlY19kb25lID0gc2tpcDtcbiYjNDM7XHRiaS5iaV9vZmZzZXQgPSBza2lwO1xuIFxuIFx0bWF4cGFnZXMgPSB3YW50X3BhZ2VzX2FycmF5KHBhZ2VzLCBtYXhzaXplLCBza2lwLCBtYXhwYWdlcyk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXIuY1xuaW5kZXggMzRiMzA5N2I0YzdiOS4uOWMxYjZjZjhjMzZmZSAxMDA2NDRcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2VwaC9tZXNzZW5nZXIuY1xuQEAgLTc2Miw3ICYjNDM7NzYyLDcgQEAgc3RhdGljIGJvb2wgY2VwaF9tc2dfZGF0YV9iaW9fYWR2YW5jZShzdHJ1Y3QgY2VwaF9tc2dfZGF0YV9jdXJzb3IgKmN1cnNvcixcbiBcdGlmICghY3Vyc29yLVx1MDAzZXJlc2lkKVxuIFx0XHRyZXR1cm4gZmFsc2U7ICAgLyogbm8gbW9yZSBkYXRhICovXG4gXG4tXHRpZiAoIWJ5dGVzIHx8IChpdC1cdTAwM2VpdGVyLmJpX3NpemUgXHUwMDI2XHUwMDI2IGl0LVx1MDAzZWl0ZXIuYmlfYnZlY19kb25lIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmICghYnl0ZXMgfHwgKGl0LVx1MDAzZWl0ZXIuYmlfc2l6ZSBcdTAwMjZcdTAwMjYgaXQtXHUwMDNlaXRlci5iaV9vZmZzZXQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgICBwYWdlID09IGJpb19pdGVyX3BhZ2UoaXQtXHUwMDNlYmlvLCBpdC1cdTAwM2VpdGVyKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcdC8qIG1vcmUgYnl0ZXMgdG8gcHJvY2VzcyBpbiB0aGlzIHNlZ21lbnQgKi9cbiBcbkBAIC04MTcsNyAmIzQzOzgxNyw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYnZlY3NfYWR2YW5jZShzdHJ1Y3QgY2VwaF9tc2dfZGF0YV9jdXJzb3IgKmN1cnNvcixcbiBcdGlmICghY3Vyc29yLVx1MDAzZXJlc2lkKVxuIFx0XHRyZXR1cm4gZmFsc2U7ICAgLyogbm8gbW9yZSBkYXRhICovXG4gXG4tXHRpZiAoIWJ5dGVzIHx8IChjdXJzb3ItXHUwMDNlYnZlY19pdGVyLmJpX2J2ZWNfZG9uZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoIWJ5dGVzIHx8IChjdXJzb3ItXHUwMDNlYnZlY19pdGVyLmJpX29mZnNldCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAgIHBhZ2UgPT0gYnZlY19pdGVyX3BhZ2UoYnZlY3MsIGN1cnNvci1cdTAwM2VidmVjX2l0ZXIpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1x0LyogbW9yZSBieXRlcyB0byBwcm9jZXNzIGluIHRoaXMgc2VnbWVudCAqL1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05WTUUmIzM0OywKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbWFfYnVmX2lvX2luaXRfbWFwJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9fY3JlYXRlX21hcCYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9pb19jdHhfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2N0eF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aW9fZHJvcF9kbWFidWZfbm9kZSYjMzQ7LAogICAgJiMzNDtfX2lvX2ltcG9ydF9yZWdfYnVmJiMzNDssCiAgICAmIzM0O19faW9faW1wb3J0X3JlZ192ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBETUEtYnVmIHN1cHBvcnQgZm9yIGlvX3VyaW5nIGFuZCBOVk1lIGJsb2NrIGRldmljZXMuIEl0IGFkZHMgbmV3IGNvcmUgaW5mcmFzdHJ1Y3R1cmUgaW4gZG1hLWJ1Zi1pby5jLCBtb2RpZmllcyBpb191cmluZyB0byBzdXBwb3J0IHJlZ2lzdGVyaW5nIGFuZCBpbXBvcnRpbmcgZG1hYnVmcywgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgUENJIGRyaXZlciB0byBoYW5kbGUgZG1hYnVmLWJhY2tlZCByZXF1ZXN0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUzYzdiYTk1ZDk5NjFlNzMyNmNiZTU4ZGE1NmYwNzk4M2RmMTY4MzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwMzoyMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0CmluZGV4IDExMTI2ZWQ2ZjQwZjcuLjQ5ZGEyMTQ3YjdkODYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdApAQCAtMTYsMTYgJiM0MzsxNiwxNiBAQCBidl9sZW4gYnkgdGhlIG51bWJlciBvZiBieXRlcyBjb21wbGV0ZWQgaW4gdGhhdCBiaW92ZWMuCiBJbiB0aGUgbmV3IHNjaGVtZSBvZiB0aGluZ3MsIGV2ZXJ5dGhpbmcgdGhhdCBtdXN0IGJlIG11dGF0ZWQgaW4gb3JkZXIgdG8KIHBhcnRpYWxseSBjb21wbGV0ZSBhIGJpbyBpcyBzZWdyZWdhdGVkIGludG8gc3RydWN0IGJ2ZWNfaXRlcjogYmlfc2VjdG9yLAogYmlfc2l6ZSBhbmQgYmlfaWR4IGhhdmUgYmVlbiBtb3ZlZCB0aGVyZTsgYW5kIGluc3RlYWQgb2YgbW9kaWZ5aW5nIGJ2X29mZnNldAotYW5kIGJ2X2xlbiwgc3RydWN0IGJ2ZWNfaXRlciBoYXMgYmlfYnZlY19kb25lLCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YKJiM0MzthbmQgYnZfbGVuLCBzdHJ1Y3QgYnZlY19pdGVyIGhhcyBiaV9vZmZzZXQsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgogYnl0ZXMgY29tcGxldGVkIGluIHRoZSBjdXJyZW50IGJ2ZWMuCiAKIFRoZXJlIGFyZSBhIGJ1bmNoIG9mIG5ldyBoZWxwZXIgbWFjcm9zIGZvciBoaWRpbmcgdGhlIGdvcnkgZGV0YWlscyAtIGluCiBwYXJ0aWN1bGFyLCBwcmVzZW50aW5nIHRoZSBpbGx1c2lvbiBvZiBwYXJ0aWFsbHkgY29tcGxldGVkIGJpb3ZlY3Mgc28gdGhhdAotbm9ybWFsIGNvZGUgZG9lc24mIzM5O3QgaGF2ZSB0byBkZWFsIHdpdGggYmlfYnZlY19kb25lLgomIzQzO25vcm1hbCBjb2RlIGRvZXNuJiMzOTt0IGhhdmUgdG8gZGVhbCB3aXRoIGJpX29mZnNldC4KIAogICogRHJpdmVyIGNvZGUgc2hvdWxkIG5vIGxvbmdlciByZWZlciB0byBiaW92ZWNzIGRpcmVjdGx5OyB3ZSBub3cgaGF2ZQogICAgYmlvX2lvdmVjKCkgYW5kIGJpb19pdGVyX2lvdmVjKCkgbWFjcm9zIHRoYXQgcmV0dXJuIGxpdGVyYWwgc3RydWN0IGJpb3ZlY3MsCi0gICBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByYXcgYmlvdmVjcyBidXQgdGFraW5nIGludG8gYWNjb3VudCBiaV9idmVjX2RvbmUgYW5kCiYjNDM7ICAgY29uc3RydWN0ZWQgZnJvbSB0aGUgcmF3IGJpb3ZlY3MgYnV0IHRha2luZyBpbnRvIGFjY291bnQgYmlfb2Zmc2V0IGFuZAogICAgYmlfc2l6ZS4KIAogICAgYmlvX2Zvcl9lYWNoX3NlZ21lbnQoKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHRha2UgYSBidmVjX2l0ZXIgYXJndW1lbnQKQEAgLTEwMSw3ICYjNDM7MTAxLDcgQEAgT3RoZXIgaW1wbGljYXRpb25zOgogICAgSS5lLiBpbnN0ZWFkIG9mIHVzaW5nIGJpb19pb3ZlY19pZHgoKSAob3IgYmlvLSZndDtiaV9pb3ZlY1tiaW8tJmd0O2JpX2lkeF0pLCB5b3UKICAgIG5vdyB1c2UgYmlvX2l0ZXJfaW92ZWMoKSwgd2hpY2ggdGFrZXMgYSBidmVjX2l0ZXIgYW5kIHJldHVybnMgYQogICAgbGl0ZXJhbCBzdHJ1Y3QgYmlvX3ZlYyAtIGNvbnN0cnVjdGVkIG9uIHRoZSBmbHkgZnJvbSB0aGUgcmF3IGJpb3ZlYyBidXQKLSAgIHRha2luZyBpbnRvIGFjY291bnQgYmlfYnZlY19kb25lIChhbmQgYmlfc2l6ZSkuCiYjNDM7ICAgdGFraW5nIGludG8gYWNjb3VudCBiaV9vZmZzZXQgKGFuZCBiaV9zaXplKS4KIAogICogYmlfdmNudCBjYW4mIzM5O3QgYmUgdHJ1c3RlZCBvciByZWxpZWQgdXBvbiBieSBkcml2ZXIgY29kZSAtIGkuZS4gYW55dGhpbmcgdGhhdAogICAgZG9lc24mIzM5O3QgYWN0dWFsbHkgb3duIHRoZSBiaW8uIFRoZSByZWFzb24gaXMgdHdvZm9sZDogZmlyc3RseSwgaXQmIzM5O3Mgbm90CmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jCmluZGV4IDZhMmY2ZmMzNDEzZTguLmNjMmJiOTE4M2MxYTcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jpby5jCkBAIC0yMjksNyAmIzQzOzIyOSw3IEBAIHZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsCiAJYmlvLSZndDtiaV9pdGVyLmJpX3NlY3RvciA9IDA7CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgPSAwOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9pZHggPSAwOwotCWJpby0mZ3Q7YmlfaXRlci5iaV9idmVjX2RvbmUgPSAwOwomIzQzOwliaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0ID0gMDsKIAliaW8tJmd0O2JpX2VuZF9pbyA9IE5VTEw7CiAJYmlvLSZndDtiaV9wcml2YXRlID0gTlVMTDsKICNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUApAQCAtODYxLDYgJiM0Mzs4NjEsMTIgQEAgc3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcCkKIAliaW8tJmd0O2JpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtJmd0O2JpX3dyaXRlX3N0cmVhbTsKIAliaW8tJmd0O2JpX2l0ZXIgPSBiaW9fc3JjLSZndDtiaV9pdGVyOwogCiYjNDM7CWlmIChvcF9pc19kbWFidWYoYmlvLSZndDtiaV9vcGYpKSB7CiYjNDM7CQliaW8tJmd0O2JpX2RtYWJ1Zl9tYXAgPSBiaW9fc3JjLSZndDtiaV9kbWFidWZfbWFwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJYmlvLSZndDtiaV9pb192ZWMgPSBiaW9fc3JjLSZndDtiaV9pb192ZWM7CiYjNDM7CX0KJiM0MzsKIAlpZiAoYmlvLSZndDtiaV9iZGV2KSB7CiAJCWlmIChiaW8tJmd0O2JpX2JkZXYgPT0gYmlvX3NyYy0mZ3Q7YmlfYmRldiAmYW1wOyZhbXA7CiAJCSAgICBiaW9fZmxhZ2dlZChiaW9fc3JjLCBCSU9fUkVNQVBQRUQpKQpAQCAtOTAyLDggJiM0Mzs5MDgsNiBAQCBzdHJ1Y3QgYmlvICpiaW9fYWxsb2NfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvX3NyYywKIAkJYmlvX3B1dChiaW8pOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JYmlvLSZndDtiaV9pb192ZWMgPSBiaW9fc3JjLSZndDtiaV9pb192ZWM7Ci0KIAlyZXR1cm4gYmlvOwogfQogRVhQT1JUX1NZTUJPTChiaW9fYWxsb2NfY2xvbmUpOwpAQCAtOTIzLDcgJiM0Mzs5MjcsNyBAQCBpbnQgYmlvX2luaXRfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvLAogewogCWludCByZXQ7CiAKLQliaW9faW5pdChiaW8sIGJkZXYsIGJpb19zcmMtJmd0O2JpX2lvX3ZlYywgMCwgYmlvX3NyYy0mZ3Q7Ymlfb3BmKTsKJiM0MzsJYmlvX2luaXQoYmlvLCBiZGV2LCBOVUxMLCAwLCBiaW9fc3JjLSZndDtiaV9vcGYpOwogCXJldCA9IF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKTsKIAlpZiAocmV0KQogCQliaW9fdW5pbml0KGJpbyk7CkBAIC0xMTg4LDExICYjNDM7MTE5MiwyMiBAQCB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiAKIAliaW8tJmd0O2JpX2lvX3ZlYyA9IChzdHJ1Y3QgYmlvX3ZlYyAqKWl0ZXItJmd0O2J2ZWM7CiAJYmlvLSZndDtiaV9pdGVyLmJpX2lkeCA9IDA7Ci0JYmlvLSZndDtiaV9pdGVyLmJpX2J2ZWNfZG9uZSA9IGl0ZXItJmd0O2lvdl9vZmZzZXQ7CiYjNDM7CWJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQgPSBpdGVyLSZndDtpb3Zfb2Zmc2V0OwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zaXplID0gaW92X2l0ZXJfY291bnQoaXRlcik7CiAJYmlvX3NldF9mbGFnKGJpbywgQklPX0NMT05FRCk7CiB9CiAKJiM0Mzt2b2lkIGJpb19kbWFidWZfbWFwX3NldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRShiaW8tJmd0O2JpX21heF92ZWNzKTsKJiM0MzsKJiM0MzsJYmlvLSZndDtiaV9kbWFidWZfbWFwID0gaXRlci0mZ3Q7ZG1hYnVmX21hcDsKJiM0MzsJYmlvLSZndDtiaV92Y250ID0gMDsKJiM0MzsJYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldCA9IGl0ZXItJmd0O2lvdl9vZmZzZXQ7CiYjNDM7CWJpby0mZ3Q7YmlfaXRlci5iaV9zaXplID0gaW92X2l0ZXJfY291bnQoaXRlcik7CiYjNDM7CWJpby0mZ3Q7Ymlfb3BmIHw9IFJFUV9OT01FUkdFIHwgUkVRX0RNQUJVRjsKJiM0Mzt9CiYjNDM7CiAvKgogICogQWxpZ25zIHRoZSBiaW8gc2l6ZSB0byB0aGUgbGVuX2FsaWduX21hc2ssIHJlbGVhc2luZyBleGNlc3NpdmUgYmlvIHZlY3MgdGhhdAogICogX19iaW9faW92X2l0ZXJfZ2V0X3BhZ2VzIG1heSBoYXZlIGluc2VydGVkLCBhbmQgcmV2ZXJ0cyB0aGUgdHJpbW1lZCBsZW5ndGgKQEAgLTEyNTUsNiAmIzQzOzEyNzAsMTEgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCWlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLSZndDtiaV9pdGVyLmJpX3NpemUpOwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CWlmIChpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGl0ZXIpKSB7CiYjNDM7CQliaW9fZG1hYnVmX21hcF9zZXQoYmlvLCBpdGVyKTsKJiM0MzsJCWlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLSZndDtiaV9pdGVyLmJpX3NpemUpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCWlmIChpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluKGl0ZXIpKQogCQliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUEFHRV9QSU5ORUQpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCBhYjExNjFjYTY5ZjFlLi42ZjBjYWJmZTI1ZWY3IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtMzMsNyAmIzQzOzMzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KQogCiAJYmlvX2FkdmFuY2VfaXRlcihiaW8sICZhbXA7aXRlciwgaXRlci5iaV9zaXplKTsKIAotCWlmICghaXRlci5iaV9idmVjX2RvbmUpCiYjNDM7CWlmICghaXRlci5iaV9vZmZzZXQpCiAJCWlkeCA9IGl0ZXIuYmlfaWR4IC0gMTsKIAllbHNlCS8qIGluIHRoZSBtaWRkbGUgb2YgYnZlYyAqLwogCQlpZHggPSBpdGVyLmJpX2lkeDsKQEAgLTQxLDExICYjNDM7NDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KQogCSpidiA9IGJpby0mZ3Q7YmlfaW9fdmVjW2lkeF07CiAKIAkvKgotCSAqIGl0ZXIuYmlfYnZlY19kb25lIHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjCiYjNDM7CSAqIGl0ZXIuYmlfb2Zmc2V0IHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjCiAJICogaWYgdGhpcyBiaW8gZW5kcyBpbiB0aGUgbWlkZGxlIG9mIG9uZSBpbyB2ZWN0b3IKIAkgKi8KLQlpZiAoaXRlci5iaV9idmVjX2RvbmUpCi0JCWJ2LSZndDtidl9sZW4gPSBpdGVyLmJpX2J2ZWNfZG9uZTsKJiM0MzsJaWYgKGl0ZXIuYmlfb2Zmc2V0KQomIzQzOwkJYnYtJmd0O2J2X2xlbiA9IGl0ZXIuYmlfb2Zmc2V0OwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgYmlvX3dpbGxfZ2FwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLApAQCAtMzQ2LDYgJiM0MzszNDYsMjAgQEAgaW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSwKIAkJbGVuX2FsaWduX21hc2sgfD0gKGJjLSZndDtiY19rZXktJmd0O2NyeXB0b19jZmcuZGF0YV91bml0X3NpemUgLSAxKTsKIAl9CiAKJiM0MzsJaWYgKG9wX2lzX2RtYWJ1ZihiaW8tJmd0O2JpX29wZikpIHsKJiM0MzsJCS8qIHNpbmdsZSBjb250aWd1b3VzIHJhbmdlIGludG8gdGhlIGRtYS1idWYgKi8KJiM0MzsJCW5zZWdzID0gMTsKJiM0MzsKJiM0MzsJCWlmICgoYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldCAmYW1wOyBzdGFydF9hbGlnbl9tYXNrKSB8fAomIzQzOwkJICAgIChiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSAmYW1wOyBsZW5fYWxpZ25fbWFzaykpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlpZiAoYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgJmd0OyBtYXhfYnl0ZXMpIHsKJiM0MzsJCQlieXRlcyA9IG1heF9ieXRlczsKJiM0MzsJCQlnb3RvIHNwbGl0OwomIzQzOwkJfQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAliaW9fZm9yX2VhY2hfYnZlYyhidiwgYmlvLCBpdGVyKSB7CiAJCWlmIChidi5idl9vZmZzZXQgJmFtcDsgc3RhcnRfYWxpZ25fbWFzayB8fAogCQkgICAgYnYuYnZfbGVuICZhbXA7IGxlbl9hbGlnbl9tYXNrKQpAQCAtMzc2LDYgJiM0MzszOTAsNyBAQCBpbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLAogCQlidnBydnAgPSAmYW1wO2J2cHJ2OwogCX0KIAomIzQzO291dDoKIAkqc2VncyA9IG5zZWdzOwogCWJpby0mZ3Q7YmlfYnZlY19nYXBfYml0ID0gZmZzKGdhcHMpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jCmluZGV4IGJmZGI5ZWQ3MDc0MTEuLjg4ZmQ5Y2JjOTUxZjQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tcS1kbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstbXEtZG1hLmMKQEAgLTQ0LDcgJiM0Mzs0NCw3IEBAIHN0YXRpYyBib29sIGJsa19tYXBfaXRlcl9uZXh0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIHN0cnVjdCBibGtfbWFwX2l0ZXIgKml0ZXIsCiAJICogb25lIGNvdWxkIGJlIG1lcmdlZCBpbnRvIGl0LiAgVGhpcyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIG1vdmluZyB0bwogCSAqIHRoZSBuZXh0IGJpbywgYnV0IHNvbWUgY2FsbGVycyBhbHNvIGRvbiYjMzk7dCBwYWNrIGJ2ZWNzIHRpZ2h0LgogCSAqLwotCXdoaWxlICghaXRlci0mZ3Q7aXRlci5iaV9zaXplIHx8ICFpdGVyLSZndDtpdGVyLmJpX2J2ZWNfZG9uZSkgewomIzQzOwl3aGlsZSAoIWl0ZXItJmd0O2l0ZXIuYmlfc2l6ZSB8fCAhaXRlci0mZ3Q7aXRlci5iaV9vZmZzZXQpIHsKIAkJc3RydWN0IGJpb192ZWMgbmV4dDsKIAogCQlpZiAoIV9fYmxrX21hcF9pdGVyX25leHQoaXRlcikpCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IGVhYWMwNTgxNWNiMDMuLjUwYWJmZDkzMjg4NjEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oCkBAIC00MDYsNyAmIzQzOzQwNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fbWF5X25lZWRfc3BsaXQoc3RydWN0IGJpbyAqYmlvLAogCQlyZXR1cm4gdHJ1ZTsKIAogCWJ2ID0gX19idmVjX2l0ZXJfYnZlYyhiaW8tJmd0O2JpX2lvX3ZlYywgYmlvLSZndDtiaV9pdGVyKTsKLQlpZiAoYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgJmd0OyBidi0mZ3Q7YnZfbGVuIC0gYmlvLSZndDtiaV9pdGVyLmJpX2J2ZWNfZG9uZSkKJiM0MzsJaWYgKGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplICZndDsgYnYtJmd0O2J2X2xlbiAtIGJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQpCiAJCXJldHVybiB0cnVlOwogCWlmICgoYnYtJmd0O2J2X29mZnNldCB8IGJ2LSZndDtidl9sZW4pICZhbXA7IGxpbS0mZ3Q7ZG1hX2FsaWdubWVudCkKIAkJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmMKaW5kZXggMTU3ODNhNjE4MGRlYy4uZDgzY2RiYWI2NWE2YSAxMDA2NDQKLS0tIGEvYmxvY2svZm9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2ZvcHMuYwpAQCAtMzQ4LDYgJiM0MzszNDgsOCBAQCBzdGF0aWMgc3NpemVfdCBfX2Jsa2Rldl9kaXJlY3RfSU9fYXN5bmMoc3RydWN0IGtpb2NiICppb2NiLAogCQkgKiBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKCkgYW5kIHNldCB0aGUgYnZlYyBkaXJlY3RseS4KIAkJICovCiAJCWJpb19pb3ZfYnZlY19zZXQoYmlvLCBpdGVyKTsKJiM0MzsJfSBlbHNlIGlmIChpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGl0ZXIpKSB7CiYjNDM7CQliaW9fZG1hYnVmX21hcF9zZXQoYmlvLCBpdGVyKTsKIAl9IGVsc2UgewogCQlyZXQgPSBibGtkZXZfaW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYmRldik7CiAJCWlmICh1bmxpa2VseShyZXQpKQpAQCAtOTI0LDYgJiM0Mzs5MjYsMTkgQEAgc3RhdGljIGludCBibGtkZXZfbW1hcF9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpCiAJcmV0dXJuIGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUoZGVzYyk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJsa2Rldl9pbml0X2RtYV9idWZfaW9fY3R4KHN0cnVjdCBmaWxlICpmaWxlLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBmaWxlX2JkZXYoZmlsZSk7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0mZ3Q7YmRfZGlzazsKJiM0MzsKJiM0MzsJaWYgKCEoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX0RJUkVDVCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFkaXNrLSZndDtmb3BzLSZndDtpbml0X2RtYV9idWZfaW9fY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiBkaXNrLSZndDtmb3BzLSZndDtpbml0X2RtYV9idWZfaW9fY3R4KGJkZXYsIGN0eCk7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7CiAJLm9wZW4JCT0gYmxrZGV2X29wZW4sCiAJLnJlbGVhc2UJPSBibGtkZXZfcmVsZWFzZSwKQEAgLTk0Miw2ICYjNDM7OTU3LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7CiAJLmZhbGxvY2F0ZQk9IGJsa2Rldl9mYWxsb2NhdGUsCiAJLnVyaW5nX2NtZAk9IGJsa2Rldl91cmluZ19jbWQsCiAJLmZvcF9mbGFncwk9IEZPUF9CVUZGRVJfUkFTWU5DLAomIzQzOwkuaW5pdF9kbWFfYnVmX2lvX2N0eCA9IGJsa2Rldl9pbml0X2RtYV9idWZfaW9fY3R4LAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgYmxrZGV2X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggMWZhZWNlZjMzMDA5Mi4uMGIxMjVjY2IyNjYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTM3OCw3ICYjNDM7Mzc4LDcgQEAgc3RhdGljIGludCBsb19yd19haW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGxvb3BfY21kICpjbWQsCiAJCWlvdl9pdGVyX2J2ZWMoJmFtcDtpdGVyLCBydywKIAkJCV9fYnZlY19pdGVyX2J2ZWMocnEtJmd0O2Jpby0mZ3Q7YmlfaW9fdmVjLCBycS0mZ3Q7YmlvLSZndDtiaV9pdGVyKSwKIAkJCW5yX2J2ZWMsIGJsa19ycV9ieXRlcyhycSkpOwotCQlpdGVyLmlvdl9vZmZzZXQgPSBycS0mZ3Q7YmlvLSZndDtiaV9pdGVyLmJpX2J2ZWNfZG9uZTsKJiM0MzsJCWl0ZXIuaW92X29mZnNldCA9IHJxLSZndDtiaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0OwogCX0KIAlhdG9taWNfc2V0KCZhbXA7Y21kLSZndDtyZWYsIDIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmMKaW5kZXggNTVlZWI2YWFjMGVhMy4uNmY0YjQ0YTFlZTJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtNTUzLDcgJiM0Mzs1NTMsNyBAQCBzdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZCkKIAkJaW92X2l0ZXJfYnZlYygmYW1wO2l0ZXIsIHJ3LAogCQkJX19idmVjX2l0ZXJfYnZlYyhycS0mZ3Q7YmlvLSZndDtiaV9pb192ZWMsIHJxLSZndDtiaW8tJmd0O2JpX2l0ZXIpLAogCQkJCQlucl9idmVjLCBibGtfcnFfYnl0ZXMocnEpKTsKLQkJaXRlci5pb3Zfb2Zmc2V0ID0gcnEtJmd0O2Jpby0mZ3Q7YmlfaXRlci5iaV9idmVjX2RvbmU7CiYjNDM7CQlpdGVyLmlvdl9vZmZzZXQgPSBycS0mZ3Q7YmlvLSZndDtiaV9pdGVyLmJpX29mZnNldDsKIAl9CiAKIAljbWQtJmd0O2lvY2Iua2lfcG9zID0gKGNtZC0mZ3Q7c2VjdG9yIC0gem9uZS0mZ3Q7c3RhcnQpICZsdDsmbHQ7IFNFQ1RPUl9TSElGVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQppbmRleCBiMjVkNzU1MGJhY2ZkLi41MjM3MzFiMGY4M2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlCkBAIC0xLDYgJiM0MzsxLDYgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogb2JqLXkgOj0gZG1hLWJ1Zi5vIGRtYS1mZW5jZS5vIGRtYS1mZW5jZS1hcnJheS5vIGRtYS1mZW5jZS1jaGFpbi5vIFwKLQkgZG1hLWZlbmNlLXVud3JhcC5vIGRtYS1yZXN2Lm8gZG1hLWJ1Zi1tYXBwaW5nLm8KJiM0MzsJIGRtYS1mZW5jZS11bndyYXAubyBkbWEtcmVzdi5vIGRtYS1idWYtbWFwcGluZy5vIGRtYS1idWYtaW8ubwogb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQUykJJiM0Mzs9IGRtYS1oZWFwLm8KIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpCSYjNDM7PSBoZWFwcy8KIG9iai0kKENPTkZJR19TWU5DX0ZJTEUpCQkmIzQzOz0gc3luY19maWxlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjVmNTQ1YTFiY2YzMjMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jCkBAIC0wLDAgJiM0MzsxLDI3NSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBDb21tb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIHN1cHBvcmluZyBkbWEtYnVmIGluIHRoZSBJL08gcGF0aC4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBQYXZlbCBCZWd1bmtvdiAmbHQ7YXNtbC5zaWxlbmNlQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi1pby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlIHsKJiM0MzsJc3RydWN0IGRtYV9mZW5jZSBiYXNlOwomIzQzOwlzcGlubG9ja190IGxvY2s7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqZG1hX2J1Zl9pb19mZW5jZV9kcnZfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKJiM0Mzt7CiYjNDM7CS8qIGRlZmF1bHQgZmVuY2UgcmVsZWFzZSBrZnJlZSYjMzk7cyB0aGUgYmFzZSBwb2ludGVyICovCiYjNDM7CUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSwgYmFzZSkpOwomIzQzOwomIzQzOwlyZXR1cm4gJiMzNDtkbWEtYnVmLWlvLWN0eCYjMzQ7OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqZG1hX2J1Zl9pb19mZW5jZV90aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQomIzQzO3sKJiM0MzsJcmV0dXJuICYjMzQ7ZG1hLWJ1Zi1pby1jdHgmIzM0OzsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGRtYV9mZW5jZV9vcHMgZG1hX2J1Zl9pb19mZW5jZV9vcHMgPSB7CiYjNDM7CS5nZXRfZHJpdmVyX25hbWUgPSBkbWFfYnVmX2lvX2ZlbmNlX2Rydl9uYW1lLAomIzQzOwkuZ2V0X3RpbWVsaW5lX25hbWUgPSBkbWFfYnVmX2lvX2ZlbmNlX3RpbWVsaW5lX25hbWUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fY3R4LAomIzQzOwkJCQkJCSAgcmVsZWFzZV93b3JrKTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKCZhbXA7Y3R4LSZndDtyZWZzKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7ZGV2X29wcy0mZ3Q7cmVsZWFzZShjdHgpOwomIzQzOwlkbWFfYnVmX3B1dChjdHgtJmd0O2RtYWJ1Zik7CiYjNDM7CWtmcmVlKGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fbWFwX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAsCiYjNDM7CQkJCQkJICByZWxlYXNlX3dvcmspOwomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSAqZmVuY2UgPSBtYXAtJmd0O2ZlbmNlOwomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IG1hcC0mZ3Q7Y3R4OwomIzQzOwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LSZndDtkbWFidWY7CiYjNDM7CiYjNDM7CS8qIHRoZSByZWxlYXNlIHBhdGggbXVzdCB3YWl0IGZvciBmZW5jZXMgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKCZhbXA7Y3R4LSZndDtyZWZzKSA9PSAwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogUHJldmVudCBmcm9tIGRlc3RveWluZyB0aGUgY3R4IHdoaWxlIHVubWFwcGluZyAqLwomIzQzOwlyZWZjb3VudF9pbmMoJmFtcDtjdHgtJmd0O3JlZnMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBhcmUgbm8gbW9yZSByZXF1ZXN0cyB1c2luZyB0aGUgbWFwLCB3ZSBjYW4gc2lnbmFsIHRoZSBmZW5jZS4KJiM0MzsJICogSXQgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRha2luZyB0aGUgcmVzdiBsb2NrIGFzIHNvbWVvbmUgY291bGQgYmUKJiM0MzsJICogd2FpdGluZyBmb3IgdGhlIGZlbmNlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlkbWFfZmVuY2Vfc2lnbmFsKCZhbXA7ZmVuY2UtJmd0O2Jhc2UpOwomIzQzOwomIzQzOwlkbWFfcmVzdl9sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdiwgTlVMTCk7CiYjNDM7CWN0eC0mZ3Q7ZGV2X29wcy0mZ3Q7dW5tYXAoY3R4LCBtYXApOwomIzQzOwlkbWFfcmVzdl91bmxvY2soZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJZG1hX2ZlbmNlX3B1dCgmYW1wO2ZlbmNlLSZndDtiYXNlKTsKJiM0MzsJcGVyY3B1X3JlZl9leGl0KCZhbXA7bWFwLSZndDtyZWZzKTsKJiM0MzsJa2ZyZWUobWFwKTsKJiM0MzsKJiM0MzsJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2N0eC0mZ3Q7cmVmcykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBEZXN0cnVjdGlvbiBuZWVkcyB0byB3YWl0IGZvciBJL08gYW5kIGRtYSBmZW5jZXMuIERlZmVyIGl0IHRvCiYjNDM7CQkgKiBzaW1wbGlmeSBsb2NraW5nLgomIzQzOwkJICovCiYjNDM7CQlJTklUX1dPUksoJmFtcDtjdHgtJmd0O3JlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKTsKJiM0MzsJCXF1ZXVlX3dvcmsoc3lzdGVtX3dxLCAmYW1wO2N0eC0mZ3Q7cmVsZWFzZV93b3JrKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGRtYV9idWZfaW9fbWFwLCByZWZzKTsKJiM0MzsKJiM0MzsJLyogbWlnaHQgc2xlZXAsIHVzZSBhIHdvcmtlciAqLwomIzQzOwlJTklUX1dPUksoJmFtcDttYXAtJmd0O3JlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19tYXBfcmVsZWFzZV93b3JrKTsKJiM0MzsJcXVldWVfd29yayhzeXN0ZW1fd3EsICZhbXA7bWFwLSZndDtyZWxlYXNlX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztpbnQgZG1hX2J1Zl9pb19pbml0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSAqZmVuY2UgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlmZW5jZSA9IGt6YWxsb2Moc2l6ZW9mKCpmZW5jZSksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWZlbmNlKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IHBlcmNwdV9yZWZfaW5pdCgmYW1wO21hcC0mZ3Q7cmVmcywgZG1hX2J1Zl9pb19tYXBfcmVmc19yZWxlYXNlLCAwLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJa2ZyZWUoZmVuY2UpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2ZlbmNlLSZndDtsb2NrKTsKJiM0MzsJZG1hX2ZlbmNlX2luaXQoJmFtcDtmZW5jZS0mZ3Q7YmFzZSwgJmFtcDtkbWFfYnVmX2lvX2ZlbmNlX29wcywgJmFtcDtmZW5jZS0mZ3Q7bG9jaywKJiM0MzsJCQljdHgtJmd0O2ZlbmNlX2N0eCwgYXRvbWljX2luY19yZXR1cm4oJmFtcDtjdHgtJmd0O2ZlbmNlX3NlcSkpOwomIzQzOwltYXAtJmd0O2ZlbmNlID0gZmVuY2U7CiYjNDM7CW1hcC0mZ3Q7Y3R4ID0gY3R4OwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9pb19pbml0X21hcCwgJiMzNDtETUFfQlVGJiMzNDspOwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGN0eC0mZ3Q7ZG1hYnVmOwomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CS8qCiYjNDM7CSAqIC0mZ3Q7ZG1hYnVmX21hcCgpIHdpbGwgYmUgY2FsbGluZyBkbWFfYnVmX21hcF9hdHRhY2htZW50KCksIGZvciB3aGljaAomIzQzOwkgKiB3ZSYjMzk7bGwgbmVlZCB0byB3YWl0IGZvciBmZW5jZXMuIERvIGEgYml0IG5pY2VyIGFuZCB0cnkgdG8gd2FpdAomIzQzOwkgKiB3aXRob3V0IHRoZSByZXN2IGxvY2sgZmlyc3QuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXQoZG1hYnVmLSZndDtyZXN2LCBETUFfUkVTVl9VU0FHRV9LRVJORUwsCiYjNDM7CQkJCSAgICB0cnVlLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CiYjNDM7CW1hcCA9IGRtYV9idWZfaW9fZ2V0X21hcChjdHgpOwomIzQzOwlpZiAobWFwKSB7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtJmd0O3Jlc3YsIERNQV9SRVNWX1VTQUdFX0tFUk5FTCwKJiM0MzsJCQkJICB0cnVlLCAwKSAmbHQ7IDApIHsKJiM0MzsJCWRtYV9yZXN2X3VubG9jayhkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwomIzQzOwltYXAgPSBjdHgtJmd0O2Rldl9vcHMtJmd0O21hcChjdHgpOwomIzQzOwlpZiAoSVNfRVJSKG1hcCkpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIobWFwKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBlcmNwdV9yZWZfZ2V0KCZhbXA7bWFwLSZndDtyZWZzKTsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGN0eC0mZ3Q7bWFwLCBtYXApOwomIzQzO291dDoKJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsJcmV0dXJuIG1hcDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG1hX2J1Zl9pb19kcm9wX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtJmd0O2RtYWJ1ZjsKJiM0MzsJc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CW1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LSZndDttYXAsCiYjNDM7CQkJCQlkbWFfcmVzdl9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdikpOwomIzQzOwlpZiAoIW1hcCkKJiM0MzsJCXJldHVybjsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGN0eC0mZ3Q7bWFwLCBOVUxMKTsKJiM0MzsKJiM0MzsJcmV0ID0gZG1hX3Jlc3ZfcmVzZXJ2ZV9mZW5jZXMoZG1hYnVmLSZndDtyZXN2LCAxKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShyZXQpKSB7CiYjNDM7CQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9ICZhbXA7bWFwLSZndDtmZW5jZS0mZ3Q7YmFzZTsKJiM0MzsKJiM0MzsJCWRtYV9mZW5jZV9nZXQoZmVuY2UpOwomIzQzOwkJcGVyY3B1X3JlZl9raWxsKCZhbXA7bWFwLSZndDtyZWZzKTsKJiM0MzsJCWRtYV9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7CiYjNDM7CQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlkbWFfcmVzdl9hZGRfZmVuY2UoZG1hYnVmLSZndDtyZXN2LCAmYW1wO21hcC0mZ3Q7ZmVuY2UtJmd0O2Jhc2UsCiYjNDM7CQkJICAgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMKTsKJiM0MzsJLyoKJiM0MzsJICogRGVsYXkgZGVzdHJ1Y3Rpb24gdW50aWwgYWxsIGluZmxpZ2h0IHJlcXVlc3RzIHVzaW5nIHRoZSBtYXAgYXJlCiYjNDM7CSAqIGdvbmUuIEl0JiMzOTtsbCBhbHNvIHNpZ25hbCB0aGUgZmVuY2UgdGhlbi4KJiM0MzsJICovCiYjNDM7CXBlcmNwdV9yZWZfa2lsbCgmYW1wO21hcC0mZ3Q7cmVmcyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MsICYjMzQ7RE1BX0JVRiYjMzQ7KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fY3R4LAomIzQzOwkJCQkJCSAgcmVsZWFzZV93b3JrKTsKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGN0eC0mZ3Q7ZG1hYnVmOwomIzQzOwlsb25nIHJldDsKJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfbG9jayhkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwkvKiBSZW1vdmUgdGhlIGxhc3QgbWFwLCB0aGVyZSBzaG91bGQgYmUgbm8gbmV3IG9uZXMgZ29pbmcgZm9yd2FyZC4gKi8KJiM0MzsJZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpOwomIzQzOwlkbWFfcmVzdl91bmxvY2soZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJLyogV2FpdCB1bnRpbCBhbGwgbWFwcyBhcmUgZGVzdHJveWVkLiAqLwomIzQzOwlyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXQoZG1hYnVmLSZndDtyZXN2LCBETUFfUkVTVl9VU0FHRV9LRVJORUwsCiYjNDM7CQkJCSAgICBmYWxzZSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHJldCAmbHQ7PSAwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0mZ3Q7bWFwLCB0cnVlKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtjdHgtJmd0O3JlZnMpKQomIzQzOwkJZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKCZhbXA7Y3R4LSZndDtyZWxlYXNlX3dvcmspOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBEZXN0cnVjdGlvbiBuZWVkcyB0byB3YWl0IGZvciBJL08gYW5kIGRtYSBmZW5jZXMuIERlZmVyIGl0IHRvCiYjNDM7CSAqIHNpbXBsaWZ5IGxvY2tpbmcuCiYjNDM7CSAqLwomIzQzOwlJTklUX1dPUksoJmFtcDtjdHgtJmd0O3JlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZV93b3JrKTsKJiM0MzsJcXVldWVfd29yayhzeXN0ZW1fd3EsICZhbXA7Y3R4LSZndDtyZWxlYXNlX3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLAomIzQzOwkJCSAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LAomIzQzOwkJCSAgIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiYjNDM7CQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFmaWxlLSZndDtmX29wLSZndDtpbml0X2RtYV9idWZfaW9fY3R4KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwomIzQzOwljdHgtJmd0O2ZlbmNlX2N0eCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOwomIzQzOwljdHgtJmd0O2RpciA9IGRpcjsKJiM0MzsJY3R4LSZndDtkbWFidWYgPSBkbWFidWY7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2N0eC0mZ3Q7cmVmcywgMSk7CiYjNDM7CWdldF9kbWFfYnVmKGRtYWJ1Zik7CiYjNDM7CiYjNDM7CXJldCA9IGZpbGUtJmd0O2Zfb3AtJmd0O2luaXRfZG1hX2J1Zl9pb19jdHgoZmlsZSwgY3R4KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKJiM0MzsJCWRtYV9idWZfcHV0KGRtYWJ1Zik7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWN0eC0mZ3Q7ZGV2X29wcyB8fAomIzQzOwkJCSAhY3R4LSZndDtkZXZfb3BzLSZndDttYXAgfHwKJiM0MzsJCQkgIWN0eC0mZ3Q7ZGV2X29wcy0mZ3Q7dW5tYXAgfHwKJiM0MzsJCQkgIWN0eC0mZ3Q7ZGV2X29wcy0mZ3Q7cmVsZWFzZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jIGIvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuYwppbmRleCA2MTU1YjAxMTdjOWQ2Li5iMjI3MTljNjQxMWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbWQvZG0taW8tcmV3aW5kLmMKQEAgLTE2LDEyICYjNDM7MTYsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGRtX2J2ZWNfaXRlcl9yZXdpbmQoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LAogCWludCBpZHg7CiAKIAlpdGVyLSZndDtiaV9zaXplICYjNDM7PSBieXRlczsKLQlpZiAoYnl0ZXMgJmx0Oz0gaXRlci0mZ3Q7YmlfYnZlY19kb25lKSB7Ci0JCWl0ZXItJmd0O2JpX2J2ZWNfZG9uZSAtPSBieXRlczsKJiM0MzsJaWYgKGJ5dGVzICZsdDs9IGl0ZXItJmd0O2JpX29mZnNldCkgewomIzQzOwkJaXRlci0mZ3Q7Ymlfb2Zmc2V0IC09IGJ5dGVzOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQlieXRlcyAtPSBpdGVyLSZndDtiaV9idmVjX2RvbmU7CiYjNDM7CWJ5dGVzIC09IGl0ZXItJmd0O2JpX29mZnNldDsKIAlpZHggPSBpdGVyLSZndDtiaV9pZHggLSAxOwogCiAJd2hpbGUgKGlkeCAmZ3Q7PSAwICZhbXA7JmFtcDsgYnl0ZXMgJmFtcDsmYW1wOyBieXRlcyAmZ3Q7IGJ2W2lkeF0uYnZfbGVuKSB7CkBAIC0zMiwxMyAmIzQzOzMyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbV9idmVjX2l0ZXJfcmV3aW5kKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidiwKIAlpZiAoV0FSTl9PTkNFKGlkeCAmbHQ7IDAgJmFtcDsmYW1wOyBieXRlcywKIAkJICAgICAgJiMzNDtBdHRlbXB0ZWQgdG8gcmV3aW5kIGl0ZXIgYmV5b25kIGJ2ZWMmIzM5O3MgYm91bmRhcmllc1xuJiMzNDspKSB7CiAJCWl0ZXItJmd0O2JpX3NpemUgLT0gYnl0ZXM7Ci0JCWl0ZXItJmd0O2JpX2J2ZWNfZG9uZSA9IDA7CiYjNDM7CQlpdGVyLSZndDtiaV9vZmZzZXQgPSAwOwogCQlpdGVyLSZndDtiaV9pZHggPSAwOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaXRlci0mZ3Q7YmlfaWR4ID0gaWR4OwotCWl0ZXItJmd0O2JpX2J2ZWNfZG9uZSA9IGJ2W2lkeF0uYnZfbGVuIC0gYnl0ZXM7CiYjNDM7CWl0ZXItJmd0O2JpX29mZnNldCA9IGJ2W2lkeF0uYnZfbGVuIC0gYnl0ZXM7CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMywxMCAmIzQzOzExMywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG1fYmlvX3Jld2luZF9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbywKIAlpdGVyLSZndDtiaV9zZWN0b3IgLT0gYnl0ZXMgJmd0OyZndDsgOTsKIAogCS8qIE5vIGFkdmFuY2UgbWVhbnMgbm8gcmV3aW5kICovCi0JaWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkKJiM0MzsJaWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkgewogCQlpdGVyLSZndDtiaV9zaXplICYjNDM7PSBieXRlczsKLQllbHNlCiYjNDM7CQlpdGVyLSZndDtiaV9vZmZzZXQgLT0gYnl0ZXM7CiYjNDM7CX0gZWxzZSB7CiAJCWRtX2J2ZWNfaXRlcl9yZXdpbmQoYmlvLSZndDtiaV9pb192ZWMsIGl0ZXIsIGJ5dGVzKTsKJiM0MzsJfQogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuYyBiL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuYwppbmRleCA3ZTk4MTg3MDE0NDUxLi44Zjg4MTZlMWM1MzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9tZC9kbS1wY2FjaGUvc2VnbWVudC5jCkBAIC0xNCw3ICYjNDM7MTQsNyBAQCBpbnQgc2VnbWVudF9jb3B5X3RvX2JpbyhzdHJ1Y3QgcGNhY2hlX3NlZ21lbnQgKnNlZ21lbnQsCiAKIAlpb3ZfaXRlcl9idmVjKCZhbXA7aXRlciwgSVRFUl9ERVNULCAmYW1wO2Jpby0mZ3Q7YmlfaW9fdmVjW2Jpby0mZ3Q7YmlfaXRlci5iaV9pZHhdLAogCQkJYmlvX3NlZ21lbnRzKGJpbyksIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKLQlpdGVyLmlvdl9vZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfYnZlY19kb25lOwomIzQzOwlpdGVyLmlvdl9vZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0OwogCWlmIChiaW9fb2ZmKQogCQlpb3ZfaXRlcl9hZHZhbmNlKCZhbXA7aXRlciwgYmlvX29mZik7CiAKQEAgLTM1LDcgJiM0MzszNSw3IEBAIGludCBzZWdtZW50X2NvcHlfZnJvbV9iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LAogCiAJaW92X2l0ZXJfYnZlYygmYW1wO2l0ZXIsIElURVJfU09VUkNFLCAmYW1wO2Jpby0mZ3Q7YmlfaW9fdmVjW2Jpby0mZ3Q7YmlfaXRlci5iaV9pZHhdLAogCQkJYmlvX3NlZ21lbnRzKGJpbyksIGJpby0mZ3Q7YmlfaXRlci5iaV9zaXplKTsKLQlpdGVyLmlvdl9vZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfYnZlY19kb25lOwomIzQzOwlpdGVyLmlvdl9vZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0OwogCWlmIChiaW9fb2ZmKQogCQlpb3ZfaXRlcl9hZHZhbmNlKCZhbXA7aXRlciwgYmlvX29mZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL2J0dC5jIGIvZHJpdmVycy9udmRpbW0vYnR0LmMKaW5kZXggN2UxMTEyOTYwZDdmOC4uNWQ5MTBhNjQ1MDNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9udmRpbW0vYnR0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vYnR0LmMKQEAgLTExNTUsNyAmIzQzOzExNTUsNyBAQCBzdGF0aWMgaW50IGJ0dF9yd19pbnRlZ3JpdHkoc3RydWN0IGJ0dCAqYnR0LCBzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXAsCiAJCWJ2ID0gYnZlY19pdGVyX2J2ZWMoYmlwLSZndDtiaXBfdmVjLCBiaXAtJmd0O2JpcF9pdGVyKTsKIAkJLyoKIAkJICogVGhlICYjMzk7YnYmIzM5OyBvYnRhaW5lZCBmcm9tIGJ2ZWNfaXRlcl9idmVjIGhhcyBpdHMgLmJ2X2xlbiBhbmQKLQkJICogLmJ2X29mZnNldCBhbHJlYWR5IGFkanVzdGVkIGZvciBpdGVyLSZndDtiaV9idmVjX2RvbmUsIGFuZCB3ZQomIzQzOwkJICogLmJ2X29mZnNldCBhbHJlYWR5IGFkanVzdGVkIGZvciBpdGVyLSZndDtiaV9vZmZzZXQsIGFuZCB3ZQogCQkgKiBjYW4gdXNlIHRob3NlIGRpcmVjdGx5CiAJCSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMKaW5kZXggNDUzYzFmMGIyZGQwOS4uY2U2NmExODQzYmVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYwpAQCAtMjY3Niw2ICYjNDM7MjY3NiwxNyBAQCBzdGF0aWMgaW50IG52bWVfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsCiAjZGVmaW5lIG52bWVfcmVwb3J0X3pvbmVzCU5VTEwKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqLwogCiYjNDM7c3RhdGljIGludCBudm1lX2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVfbnMgKm5zID0gYmRldi0mZ3Q7YmRfZGlzay0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0gbnMtJmd0O2N0cmw7CiYjNDM7CiYjNDM7CWlmICghY3RybC0mZ3Q7b3BzLSZndDtpbml0X2RtYV9idWZfaW9fY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiBjdHJsLSZndDtvcHMtJmd0O2luaXRfZG1hX2J1Zl9pb19jdHgoY3RybCwgY3R4KTsKJiM0Mzt9CiYjNDM7CiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9iZGV2X29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IG52bWVfaW9jdGwsCkBAIC0yNjg2LDYgJiM0MzsyNjk3LDcgQEAgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG52bWVfYmRldl9vcHMgPSB7CiAJLmdldF91bmlxdWVfaWQJPSBudm1lX2dldF91bmlxdWVfaWQsCiAJLnJlcG9ydF96b25lcwk9IG52bWVfcmVwb3J0X3pvbmVzLAogCS5wcl9vcHMJCT0gJmFtcDtudm1lX3ByX29wcywKJiM0MzsJLmluaXRfZG1hX2J1Zl9pb19jdHggPSBudm1lX2luaXRfZG1hX2J1Zl9pb19jdHgsCiB9OwogCiBzdGF0aWMgaW50IG52bWVfd2FpdF9yZWFkeShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB1MzIgbWFzaywgdTMyIHZhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaAppbmRleCA4MjQ2NTFjYzg5OGRiLi4wMzRjMzFhZjhmZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCkBAIC02NTIsNiAmIzQzOzY1Miw4IEBAIHN0cnVjdCBudm1lX2N0cmxfb3BzIHsKIAlpbnQgKCpnZXRfYWRkcmVzcykoc3RydWN0IG52bWVfY3RybCAqY3RybCwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7CiAJdm9pZCAoKnByaW50X2RldmljZV9pbmZvKShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKTsKIAlib29sICgqc3VwcG9ydHNfcGNpX3AycGRtYSkoc3RydWN0IG52bWVfY3RybCAqY3RybCk7CiYjNDM7CWludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsCiYjNDM7CQkJCSAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTsKIAl1bnNpZ25lZCBsb25nICgqZ2V0X3ZpcnRfYm91bmRhcnkpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGJvb2wgaXNfYWRtaW4pOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmMgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwppbmRleCA2OTkzMmQ2NDBiNTM3Li5jYmIzMjFmYjdjNTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvaG9zdC9wY2kuYwpAQCAtMjcsNiAmIzQzOzI3LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9pby02NC1ub25hdG9taWMtbG8taGkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pby02NC1ub25hdG9taWMtaGktbG8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZWQtb3BhbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtYnVmLWlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7dHJhY2UuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O252bWUuaCYjMzQ7CkBAIC0zOTMsNiAmIzQzOzM5NSwxMyBAQCBzdHJ1Y3QgbnZtZV9xdWV1ZSB7CiAJc3RydWN0IGNvbXBsZXRpb24gZGVsZXRlX2RvbmU7CiB9OwogCiYjNDM7c3RydWN0IG52bWVfZG1hYnVmX21hcCB7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX21hcCBiYXNlOwomIzQzOwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKJiM0MzsJdW5zaWduZWQgbnJfZW50cmllczsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfbGlzdFtdOwomIzQzO307CiYjNDM7CiAvKiBiaXRzIGZvciBpb2QtJmd0O2ZsYWdzICovCiBlbnVtIG52bWVfaW9kX2ZsYWdzIHsKIAkvKiB0aGlzIGNvbW1hbmQgaGFzIGJlZW4gYWJvcnRlZCBieSB0aGUgdGltZW91dCBoYW5kbGVyICovCkBAIC04NTksNiAmIzQzOzg2OCwxMzggQEAgc3RhdGljIHZvaWQgbnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiAJfQogfQogCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICoKJiM0Mzt0b19udm1lX2RtYWJ1Zl9tYXAoc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IG52bWVfZG1hYnVmX21hcCwgYmFzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9jcHUoc3RydWN0IG52bWVfZGV2ICpudm1lX2RldiwKJiM0MzsJCQkJCSBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gbnZtZV9kZXYtJmd0O2RldjsKJiM0MzsJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjsKJiM0MzsJc3RydWN0IGJpbyAqYmlvID0gcmVxLSZndDtiaW87CiYjNDM7CXN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tJmd0O2JpX2RtYWJ1Zl9tYXApOwomIzQzOwlkbWFfYWRkcl90ICpkbWFfbGlzdCA9IG1hcC0mZ3Q7ZG1hX2xpc3Q7CiYjNDM7CXVuc2lnbmVkIG9mZnNldCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQ7CiYjNDM7CXVuc2lnbmVkIG1hcF9pZHggPSBvZmZzZXQgLyBOVk1FX0NUUkxfUEFHRV9TSVpFOwomIzQzOwlpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSAmIzQzOwomIzQzOwkJICAgICAob2Zmc2V0ICZhbXA7IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSkpOwomIzQzOwomIzQzOwlkbWFfZGlyID0gcnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTsKJiM0MzsKJiM0MzsJd2hpbGUgKGxlbmd0aCAmZ3Q7IDApIHsKJiM0MzsJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2xpc3RbbWFwX2lkeCYjNDM7JiM0MztdLAomIzQzOwkJCQkJTlZNRV9DVFJMX1BBR0VfU0laRSwgZG1hX2Rpcik7CiYjNDM7CQlsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBudm1lX2RldiAqbnZtZV9kZXYsCiYjNDM7CQkJCQkgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IG52bWVfZGV2LSZndDtkZXY7CiYjNDM7CWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7CiYjNDM7CXN0cnVjdCBiaW8gKmJpbyA9IHJlcS0mZ3Q7YmlvOwomIzQzOwlzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLSZndDtiaV9kbWFidWZfbWFwKTsKJiM0MzsJZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtJmd0O2RtYV9saXN0OwomIzQzOwl1bnNpZ25lZCBvZmZzZXQgPSBiaW8tJmd0O2JpX2l0ZXIuYmlfb2Zmc2V0OwomIzQzOwl1bnNpZ25lZCBtYXBfaWR4ID0gb2Zmc2V0IC8gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJaW50IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSkgJiM0MzsKJiM0MzsJCSAgICAgKG9mZnNldCAmYW1wOyAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpKTsKJiM0MzsKJiM0MzsJZG1hX2RpciA9IHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW5ndGggJmd0OyAwKSB7CiYjNDM7CQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9saXN0W21hcF9pZHgmIzQzOyYjNDM7XSwKJiM0MzsJCQkJCSAgIE5WTUVfQ1RSTF9QQUdFX1NJWkUsIGRtYV9kaXIpOwomIzQzOwkJbGVuZ3RoIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbnZtZV9ycV9jbGVhbl9kbWFidWZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7CiYjNDM7CiYjNDM7CW52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9jcHUoZGV2LCByZXEpOwomIzQzOwomIzQzOwlpZiAoIShpb2QtJmd0O2ZsYWdzICZhbXA7IElPRF9TSU5HTEVfU0VHTUVOVCkpCiYjNDM7CQludm1lX2ZyZWVfZGVzY3JpcHRvcnMocmVxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAoc3RydWN0IHJlcXVlc3QgKnJlcSwKJiM0MzsJCQkJCSAgICAgc3RydWN0IG52bWVfcXVldWUgKm52bWVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7CiYjNDM7CXN0cnVjdCBiaW8gKmJpbyA9IHJlcS0mZ3Q7YmlvOwomIzQzOwlzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLSZndDtiaV9kbWFidWZfbWFwKTsKJiM0MzsJdW5zaWduZWQgYnZlY19kb25lID0gYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldDsKJiM0MzsJdW5zaWduZWQgbWFwX2lkeCA9IGJ2ZWNfZG9uZSAvIE5WTUVfQ1RSTF9QQUdFX1NJWkU7CiYjNDM7CXVuc2lnbmVkIG9mZnNldCA9IGJ2ZWNfZG9uZSAmYW1wOyAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpOwomIzQzOwlpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSAtIChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gb2Zmc2V0KTsKJiM0MzsJZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtJmd0O2RtYV9saXN0OwomIzQzOwl1NjQgcHJwMV9kbWEgPSBkbWFfbGlzdFttYXBfaWR4JiM0MzsmIzQzO10gJiM0Mzsgb2Zmc2V0OwomIzQzOwl1NjQgZG1hX2FkZHIsIHBycDJfZG1hOwomIzQzOwlkbWFfYWRkcl90IHBycF9kbWE7CiYjNDM7CV9fbGU2NCAqcHJwX2xpc3Q7CiYjNDM7CXVuc2lnbmVkIGk7CiYjNDM7CiYjNDM7CW52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2UobnZtZXEtJmd0O2RldiwgcmVxKTsKJiM0MzsKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7PSAwKSB7CiYjNDM7CQlwcnAyX2RtYSA9IDA7CiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7PSBOVk1FX0NUUkxfUEFHRV9TSVpFKSB7CiYjNDM7CQlwcnAyX2RtYSA9IGRtYV9saXN0W21hcF9pZHhdOwomIzQzOwkJZ290byBkb25lOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChESVZfUk9VTkRfVVAobGVuZ3RoLCBOVk1FX0NUUkxfUEFHRV9TSVpFKSAmbHQ7PQomIzQzOwkgICAgTlZNRV9TTUFMTF9QT09MX1NJWkUgLyBzaXplb2YoX19sZTY0KSkKJiM0MzsJCWlvZC0mZ3Q7ZmxhZ3MgfD0gSU9EX1NNQUxMX0RFU0NSSVBUT1I7CiYjNDM7CiYjNDM7CXBycF9saXN0ID0gZG1hX3Bvb2xfYWxsb2MobnZtZV9kbWFfcG9vbChudm1lcSwgaW9kKSwgR0ZQX0FUT01JQywKJiM0MzsJCQkmYW1wO3BycF9kbWEpOwomIzQzOwlpZiAoIXBycF9saXN0KQomIzQzOwkJcmV0dXJuIEJMS19TVFNfUkVTT1VSQ0U7CiYjNDM7CiYjNDM7CWlvZC0mZ3Q7ZGVzY3JpcHRvcnNbaW9kLSZndDtucl9kZXNjcmlwdG9ycyYjNDM7JiM0MztdID0gcHJwX2xpc3Q7CiYjNDM7CXBycDJfZG1hID0gcHJwX2RtYTsKJiM0MzsJaSA9IDA7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWlmIChpID09IE5WTUVfQ1RSTF9QQUdFX1NJWkUgJmd0OyZndDsgMykgewomIzQzOwkJCV9fbGU2NCAqb2xkX3BycF9saXN0ID0gcHJwX2xpc3Q7CiYjNDM7CiYjNDM7CQkJcHJwX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lcS0mZ3Q7ZGVzY3JpcHRvcl9wb29scy5sYXJnZSwKJiM0MzsJCQkJCUdGUF9BVE9NSUMsICZhbXA7cHJwX2RtYSk7CiYjNDM7CQkJaWYgKCFwcnBfbGlzdCkKJiM0MzsJCQkJZ290byBmcmVlX3BycHM7CiYjNDM7CQkJaW9kLSZndDtkZXNjcmlwdG9yc1tpb2QtJmd0O25yX2Rlc2NyaXB0b3JzJiM0MzsmIzQzO10gPSBwcnBfbGlzdDsKJiM0MzsJCQlwcnBfbGlzdFswXSA9IG9sZF9wcnBfbGlzdFtpIC0gMV07CiYjNDM7CQkJb2xkX3BycF9saXN0W2kgLSAxXSA9IGNwdV90b19sZTY0KHBycF9kbWEpOwomIzQzOwkJCWkgPSAxOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZG1hX2FkZHIgPSBkbWFfbGlzdFttYXBfaWR4JiM0MzsmIzQzO107CiYjNDM7CQlwcnBfbGlzdFtpJiM0MzsmIzQzO10gPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7CiYjNDM7CiYjNDM7CQlsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJCWlmIChsZW5ndGggJmx0Oz0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzO2RvbmU6CiYjNDM7CWlvZC0mZ3Q7Y21kLmNvbW1vbi5kcHRyLnBycDEgPSBjcHVfdG9fbGU2NChwcnAxX2RtYSk7CiYjNDM7CWlvZC0mZ3Q7Y21kLmNvbW1vbi5kcHRyLnBycDIgPSBjcHVfdG9fbGU2NChwcnAyX2RtYSk7CiYjNDM7CXJldHVybiBCTEtfU1RTX09LOwomIzQzO2ZyZWVfcHJwczoKJiM0MzsJbnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHJlcSk7CiYjNDM7CXJldHVybiBCTEtfU1RTX1JFU09VUkNFOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG52bWVfZnJlZV9wcnBzKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIGludCBhdHRycykKIHsKIAlzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTsKQEAgLTkzNyw2ICYjNDM7MTA3OCwxMSBAQCBzdGF0aWMgdm9pZCBudm1lX3VubWFwX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIAlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gbnZtZXEtJmd0O2Rldi0mZ3Q7ZGV2OwogCXVuc2lnbmVkIGludCBhdHRycyA9IDA7CiAKJiM0MzsJaWYgKGJsa19tcV9ycV9pc19kbWFidWYocmVxKSkgewomIzQzOwkJbnZtZV9ycV9jbGVhbl9kbWFidWZfbWFwKG52bWVxLSZndDtkZXYsIHJlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlpZiAoaW9kLSZndDtmbGFncyAmYW1wOyBJT0RfU0lOR0xFX1NFR01FTlQpIHsKIAkJc3RhdGljX2Fzc2VydChvZmZzZXRvZih1bmlvbiBudm1lX2RhdGFfcHRyLCBwcnAxKSA9PQogCQkJCW9mZnNldG9mKHVuaW9uIG52bWVfZGF0YV9wdHIsIHNnbC5hZGRyKSk7CkBAIC0xMTQxLDEyICYjNDM7MTI4NywxOCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfcHJwKHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJcmV0dXJuIEJMS19TVFNfSU9FUlI7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X2RhdGFfYWRkcihzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLAomIzQzOwkJCQkgICAgICAgZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuKQomIzQzO3sKJiM0MzsJc2dlLSZndDthZGRyID0gY3B1X3RvX2xlNjQoYWRkcik7CiYjNDM7CXNnZS0mZ3Q7bGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuKTsKJiM0MzsJc2dlLSZndDt0eXBlID0gTlZNRV9TR0xfRk1UX0RBVEFfREVTQyAmbHQ7Jmx0OyA0OwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfZGF0YShzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLAogCQlzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKQogewotCXNnZS0mZ3Q7YWRkciA9IGNwdV90b19sZTY0KGl0ZXItJmd0O2FkZHIpOwotCXNnZS0mZ3Q7bGVuZ3RoID0gY3B1X3RvX2xlMzIoaXRlci0mZ3Q7bGVuKTsKLQlzZ2UtJmd0O3R5cGUgPSBOVk1FX1NHTF9GTVRfREFUQV9ERVNDICZsdDsmbHQ7IDQ7CiYjNDM7CW52bWVfcGNpX3NnbF9zZXRfZGF0YV9hZGRyKHNnZSwgaXRlci0mZ3Q7YWRkciwgaXRlci0mZ3Q7bGVuKTsKIH0KIAogc3RhdGljIHZvaWQgbnZtZV9wY2lfc2dsX3NldF9zZWcoc3RydWN0IG52bWVfc2dsX2Rlc2MgKnNnZSwKQEAgLTExNTcsNiAmIzQzOzEzMDksMTU4IEBAIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfc2VnKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsCiAJc2dlLSZndDt0eXBlID0gTlZNRV9TR0xfRk1UX0xBU1RfU0VHX0RFU0MgJmx0OyZsdDsgNDsKIH0KIAomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLAomIzQzOwkJCQkJICAgICAgZG1hX2FkZHJfdCAqZmlyc3RfZG1hLAomIzQzOwkJCQkJICAgICAgdTMyICpmaXJzdF9sZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmlvICpiaW8gPSByZXEtJmd0O2JpbzsKJiM0MzsJc3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby0mZ3Q7YmlfZG1hYnVmX21hcCk7CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG1wOwomIzQzOwlzaXplX3Qgb2Zmc2V0ID0gYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldDsKJiM0MzsJc2l6ZV90IHJlbWFpbmluZyA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSk7CiYjNDM7CWRtYV9hZGRyX3QgbGFzdF9lbmQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgbmVudHMgPSAwOwomIzQzOwlkbWFfYWRkcl90IGRtYSA9IDA7CiYjNDM7CXUzMiBsZW4gPSAwOwomIzQzOwlib29sIGhhdmUgPSBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfc2d0YWJsZV9kbWFfc2cobWFwLSZndDtzZ3QsIHNnLCB0bXApIHsKJiM0MzsJCXNpemVfdCBzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKJiM0MzsJCWRtYV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKJiM0MzsKJiM0MzsJCWlmICghcmVtYWluaW5nKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJaWYgKG9mZnNldCAmZ3Q7PSBzZ19sZW4pIHsKJiM0MzsJCQlvZmZzZXQgLT0gc2dfbGVuOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYWRkciAmIzQzOz0gb2Zmc2V0OwomIzQzOwkJc2dfbGVuIC09IG9mZnNldDsKJiM0MzsJCW9mZnNldCA9IDA7CiYjNDM7CiYjNDM7CQl3aGlsZSAoc2dfbGVuICZhbXA7JmFtcDsgcmVtYWluaW5nKSB7CiYjNDM7CQkJdTMyIGNodW5rID0gbWluX3Qoc2l6ZV90LCByZW1haW5pbmcsIHNnX2xlbik7CiYjNDM7CiYjNDM7CQkJaWYgKCFoYXZlIHx8IGxhc3RfZW5kICE9IGFkZHIpIHsKJiM0MzsJCQkJbmVudHMmIzQzOyYjNDM7OwomIzQzOwkJCQlpZiAobmVudHMgPT0gMSkgewomIzQzOwkJCQkJZG1hID0gYWRkcjsKJiM0MzsJCQkJCWxlbiA9IGNodW5rOwomIzQzOwkJCQl9CiYjNDM7CQkJfSBlbHNlIGlmIChuZW50cyA9PSAxKSB7CiYjNDM7CQkJCWxlbiAmIzQzOz0gY2h1bms7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWhhdmUgPSB0cnVlOwomIzQzOwkJCWxhc3RfZW5kID0gYWRkciAmIzQzOyBjaHVuazsKJiM0MzsJCQlhZGRyICYjNDM7PSBjaHVuazsKJiM0MzsJCQlzZ19sZW4gLT0gY2h1bms7CiYjNDM7CQkJcmVtYWluaW5nIC09IGNodW5rOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShyZW1haW5pbmcpKQomIzQzOwkgICAgICAgcmV0dXJuIDA7CiYjNDM7CiYjNDM7CSpmaXJzdF9kbWEgPSBkbWE7CiYjNDM7CSpmaXJzdF9sZW4gPSBsZW47CiYjNDM7CXJldHVybiBuZW50czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2woc3RydWN0IHJlcXVlc3QgKnJlcSwKJiM0MzsJCQkJCSAgICAgc3RydWN0IG52bWVfcXVldWUgKm52bWVxLAomIzQzOwkJCQkJICAgICB1bnNpZ25lZCBpbnQgZW50cmllcywKJiM0MzsJCQkJCSAgICAgZG1hX2FkZHJfdCBmaXJzdF9kbWEsIHUzMiBmaXJzdF9sZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTsKJiM0MzsJc3RydWN0IGJpbyAqYmlvID0gcmVxLSZndDtiaW87CiYjNDM7CXN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tJmd0O2JpX2RtYWJ1Zl9tYXApOwomIzQzOwlzaXplX3QgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKTsKJiM0MzsJc3RydWN0IG52bWVfc2dsX2Rlc2MgKnNnX2xpc3QgPSBOVUxMOwomIzQzOwlkbWFfYWRkcl90IHNnbF9kbWEgPSAwLCBsYXN0X2VuZCA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCBtYXBwZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHRtcDsKJiM0MzsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKJiM0MzsJc2l6ZV90IG9mZnNldCwgcmVtYWluaW5nOwomIzQzOwlib29sIGhhdmUgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFlbnRyaWVzKQomIzQzOwkJcmV0dXJuIEJMS19TVFNfSU9FUlI7CiYjNDM7CWlmIChlbnRyaWVzICZndDsgTlZNRV9NQVhfU0VHUykKJiM0MzsJCXJldHVybiBCTEtfU1RTX0FHQUlOOwomIzQzOwomIzQzOwlpb2QtJmd0O2NtZC5jb21tb24uZmxhZ3MgPSBOVk1FX0NNRF9TR0xfTUVUQUJVRjsKJiM0MzsJaW9kLSZndDt0b3RhbF9sZW4gPSBsZW5ndGg7CiYjNDM7CiYjNDM7CW52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2UobnZtZXEtJmd0O2RldiwgcmVxKTsKJiM0MzsKJiM0MzsJaWYgKGVudHJpZXMgPT0gMSkgewomIzQzOwkJbnZtZV9wY2lfc2dsX3NldF9kYXRhX2FkZHIoJmFtcDtpb2QtJmd0O2NtZC5jb21tb24uZHB0ci5zZ2wsIGZpcnN0X2RtYSwKJiM0MzsJCQkJCSAgIGZpcnN0X2xlbik7CiYjNDM7CQlyZXR1cm4gQkxLX1NUU19PSzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZW50cmllcyAmbHQ7PSBOVk1FX1NNQUxMX1BPT0xfU0laRSAvIHNpemVvZigqc2dfbGlzdCkpCiYjNDM7CQlpb2QtJmd0O2ZsYWdzIHw9IElPRF9TTUFMTF9ERVNDUklQVE9SOwomIzQzOwomIzQzOwlzZ19saXN0ID0gZG1hX3Bvb2xfYWxsb2MobnZtZV9kbWFfcG9vbChudm1lcSwgaW9kKSwgR0ZQX0FUT01JQywKJiM0MzsJCQkJICZhbXA7c2dsX2RtYSk7CiYjNDM7CWlmICghc2dfbGlzdCkKJiM0MzsJCXJldHVybiBCTEtfU1RTX1JFU09VUkNFOwomIzQzOwlpb2QtJmd0O2Rlc2NyaXB0b3JzW2lvZC0mZ3Q7bnJfZGVzY3JpcHRvcnMmIzQzOyYjNDM7XSA9IHNnX2xpc3Q7CiYjNDM7CiYjNDM7CW9mZnNldCA9IGJpby0mZ3Q7YmlfaXRlci5iaV9vZmZzZXQ7CiYjNDM7CXJlbWFpbmluZyA9IGxlbmd0aDsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfc2d0YWJsZV9kbWFfc2cobWFwLSZndDtzZ3QsIHNnLCB0bXApIHsKJiM0MzsJCXNpemVfdCBzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKJiM0MzsJCWRtYV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKJiM0MzsKJiM0MzsJCWlmICghcmVtYWluaW5nKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJaWYgKG9mZnNldCAmZ3Q7PSBzZ19sZW4pIHsKJiM0MzsJCQlvZmZzZXQgLT0gc2dfbGVuOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJYWRkciAmIzQzOz0gb2Zmc2V0OwomIzQzOwkJc2dfbGVuIC09IG9mZnNldDsKJiM0MzsJCW9mZnNldCA9IDA7CiYjNDM7CiYjNDM7CQl3aGlsZSAoc2dfbGVuICZhbXA7JmFtcDsgcmVtYWluaW5nKSB7CiYjNDM7CQkJdTMyIGNodW5rID0gbWluX3Qoc2l6ZV90LCByZW1haW5pbmcsIHNnX2xlbik7CiYjNDM7CiYjNDM7CQkJaWYgKGhhdmUgJmFtcDsmYW1wOyBsYXN0X2VuZCA9PSBhZGRyKSB7CiYjNDM7CQkJCXUzMiBvbGQgPSBsZTMyX3RvX2NwdShzZ19saXN0W21hcHBlZCAtIDFdLmxlbmd0aCk7CiYjNDM7CiYjNDM7CQkJCXNnX2xpc3RbbWFwcGVkIC0gMV0ubGVuZ3RoID0gY3B1X3RvX2xlMzIob2xkICYjNDM7IGNodW5rKTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlpZiAoV0FSTl9PTl9PTkNFKG1hcHBlZCA9PSBlbnRyaWVzKSkKJiM0MzsJCQkJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CQkJCW52bWVfcGNpX3NnbF9zZXRfZGF0YV9hZGRyKCZhbXA7c2dfbGlzdFttYXBwZWQmIzQzOyYjNDM7XSwKJiM0MzsJCQkJCQkJICAgYWRkciwgY2h1bmspOwomIzQzOwkJCX0KJiM0MzsJCQloYXZlID0gdHJ1ZTsKJiM0MzsJCQlsYXN0X2VuZCA9IGFkZHIgJiM0MzsgY2h1bms7CiYjNDM7CQkJYWRkciAmIzQzOz0gY2h1bms7CiYjNDM7CQkJc2dfbGVuIC09IGNodW5rOwomIzQzOwkJCXJlbWFpbmluZyAtPSBjaHVuazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodW5saWtlbHkocmVtYWluaW5nKSkKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CW52bWVfcGNpX3NnbF9zZXRfc2VnKCZhbXA7aW9kLSZndDtjbWQuY29tbW9uLmRwdHIuc2dsLCBzZ2xfZG1hLCBtYXBwZWQpOwomIzQzOwlyZXR1cm4gQkxLX1NUU19PSzsKJiM0MztlcnJfZnJlZToKJiM0MzsJaW9kLSZndDtucl9kZXNjcmlwdG9ycy0tOwomIzQzOwlkbWFfcG9vbF9mcmVlKG52bWVfZG1hX3Bvb2wobnZtZXEsIGlvZCksIHNnX2xpc3QsIHNnbF9kbWEpOwomIzQzOwlyZXR1cm4gQkxLX1NUU19JT0VSUjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJCXN0cnVjdCBibGtfZG1hX2l0ZXIgKml0ZXIpCiB7CkBAIC0xMjUxLDYgJiM0MzsxNTU1LDM0IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9tYXBfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogCXN0cnVjdCBibGtfZG1hX2l0ZXIgaXRlcjsKIAlibGtfc3RhdHVzX3QgcmV0OwogCiYjNDM7CWlmIChibGtfbXFfcnFfaXNfZG1hYnVmKHJlcSkpIHsKJiM0MzsJCWlmICh1c2Vfc2dsICE9IFNHTF9VTlNVUFBPUlRFRCkgewomIzQzOwkJCWRtYV9hZGRyX3QgZmlyc3RfZG1hOwomIzQzOwkJCXUzMiBmaXJzdF9sZW47CiYjNDM7CQkJdW5zaWduZWQgaW50IGVudHJpZXM7CiYjNDM7CiYjNDM7CQkJZW50cmllcyA9IG52bWVfcGNpX2RtYWJ1Zl9zZ2xfbmVudHMocmVxLCAmYW1wO2ZpcnN0X2RtYSwKJiM0MzsJCQkJCQkJICAgICZhbXA7Zmlyc3RfbGVuKTsKJiM0MzsKJiM0MzsJCQlpZiAodXNlX3NnbCA9PSBTR0xfRk9SQ0VEKSB7CiYjNDM7CQkJCXJldCA9IG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChyZXEsIG52bWVxLAomIzQzOwkJCQkJCQkJZW50cmllcywgZmlyc3RfZG1hLCBmaXJzdF9sZW4pOwomIzQzOwkJCQlyZXR1cm4gcmV0ID09IEJMS19TVFNfQUdBSU4gPyBCTEtfU1RTX0lPRVJSIDogcmV0OwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlpZiAoc2dsX3RocmVzaG9sZCAmYW1wOyZhbXA7IGVudHJpZXMgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBESVZfUk9VTkRfVVAoYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSwgZW50cmllcykgJmd0Oz0KJiM0MzsJCQkgICAgc2dsX3RocmVzaG9sZCkgewomIzQzOwkJCQlyZXQgPSBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2wocmVxLCBudm1lcSwKJiM0MzsJCQkJCQkJCWVudHJpZXMsIGZpcnN0X2RtYSwgZmlyc3RfbGVuKTsKJiM0MzsJCQkJaWYgKHJldCAhPSBCTEtfU1RTX0FHQUlOKQomIzQzOwkJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwKHJlcSwgbnZtZXEpOwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUcnkgdG8gc2tpcCB0aGUgRE1BIGl0ZXJhdG9yIGZvciBzaW5nbGUgc2VnbWVudCByZXF1ZXN0cywgYXMgdGhhdAogCSAqIHNpZ25pZmljYW50bHkgaW1wcm92ZXMgcGVyZm9ybWFuY2VzIGZvciBzbWFsbCBJL08gc2l6ZXMuCkBAIC0yMjY5LDYgJiM0MzsyNjAxLDExMiBAQCBzdGF0aWMgaW50IG52bWVfY3JlYXRlX3F1ZXVlKHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSwgaW50IHFpZCwgYm9vbCBwb2xsZWQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikKJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gYXR0YWNoLSZndDtpbXBvcnRlcl9wcml2OwomIzQzOwomIzQzOwlkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MoY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGRtYV9idWZfYXR0YWNoX29wcyBudm1lX2RtYWJ1Zl9pbXBvcnRlcl9vcHMgPSB7CiYjNDM7CS5pbnZhbGlkYXRlX21hcHBpbmdzCT0gbnZtZV9kbWFidWZfaW52YWxpZGF0ZV9tYXBwaW5ncywKJiM0MzsJLmFsbG93X3BlZXIycGVlcgk9IHRydWUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRtYV9idWZfaW9fbWFwICpudm1lX2RtYV9idWZfaW9fbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbnJfZW50cmllcyA9IGN0eC0mZ3Q7ZG1hYnVmLSZndDtzaXplIC8gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LSZndDtkZXZfcHJpdjsKJiM0MzsJdW5zaWduZWQgbG9uZyB0bXAsIGkgPSAwOwomIzQzOwlzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXA7CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiYjNDM7CXN0cnVjdCBzZ190YWJsZSAqc2d0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkbWFfcmVzdl9hc3NlcnRfaGVsZChjdHgtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CW1hcCA9IGttYWxsb2NfZmxleCgqbWFwLCBkbWFfbGlzdCwgbnJfZW50cmllcyk7CiYjNDM7CWlmICghbWFwKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXNndCA9IGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBjdHgtJmd0O2Rpcik7CiYjNDM7CWlmIChJU19FUlIoc2d0KSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihzZ3QpOwomIzQzOwkJc2d0ID0gTlVMTDsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NndGFibGVfZG1hX3NnKHNndCwgc2csIHRtcCkgewomIzQzOwkJZG1hX2FkZHJfdCBkbWFfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CiYjNDM7CiYjNDM7CQlpZiAoc2dfbGVuICUgTlZNRV9DVFJMX1BBR0VfU0laRSkgewomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl3aGlsZSAoc2dfbGVuKSB7CiYjNDM7CQkJbWFwLSZndDtkbWFfbGlzdFtpJiM0MzsmIzQzO10gPSBkbWFfYWRkcjsKJiM0MzsJCQlkbWFfYWRkciAmIzQzOz0gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJCQlzZ19sZW4gLT0gTlZNRV9DVFJMX1BBR0VfU0laRTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkbWFfYnVmX2lvX2luaXRfbWFwKGN0eCwgJmFtcDttYXAtJmd0O2Jhc2UpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnI7CiYjNDM7CW1hcC0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CW1hcC0mZ3Q7c2d0ID0gc2d0OwomIzQzOwlyZXR1cm4gJmFtcDttYXAtJmd0O2Jhc2U7CiYjNDM7ZXJyOgomIzQzOwlpZiAoc2d0KQomIzQzOwkJZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGF0dGFjaCwgc2d0LCBjdHgtJmd0O2Rpcik7CiYjNDM7CWtmcmVlKG1hcCk7CiYjNDM7CXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWVfZG1hX2J1Zl9pb191bm1hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwKJiM0MzsJCQkJICBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcF9iYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LSZndDtkZXZfcHJpdjsKJiM0MzsJc3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKG1hcF9iYXNlKTsKJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoY3R4LSZndDtkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwomIzQzOwlkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBtYXAtJmd0O3NndCwgY3R4LSZndDtkaXIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fcmVsZWFzZShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGN0eC0mZ3Q7ZGV2X3ByaXY7CiYjNDM7CiYjNDM7CWRtYV9idWZfZGV0YWNoKGN0eC0mZ3Q7ZG1hYnVmLCBhdHRhY2gpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9pb19vcHMgbnZtZV9kbWFfYnVmX2lvX29wcyA9IHsKJiM0MzsJLm1hcAkJPSBudm1lX2RtYV9idWZfaW9fbWFwLAomIzQzOwkudW5tYXAJCT0gbnZtZV9kbWFfYnVmX2lvX3VubWFwLAomIzQzOwkucmVsZWFzZQk9IG52bWVfZG1hX2J1Zl9pb19yZWxlYXNlLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsCiYjNDM7CQkJCQlzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKJiM0MzsJc3RydWN0IG52bWVfZGV2ICpkZXYgPSB0b19udm1lX2RldihjdHJsKTsKJiM0MzsKJiM0MzsJYXR0YWNoID0gZG1hX2J1Zl9keW5hbWljX2F0dGFjaChjdHgtJmd0O2RtYWJ1ZiwgZGV2LSZndDtkZXYsCiYjNDM7CQkJCQkmYW1wO252bWVfZG1hYnVmX2ltcG9ydGVyX29wcywgY3R4KTsKJiM0MzsJaWYgKElTX0VSUihhdHRhY2gpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoYXR0YWNoKTsKJiM0MzsKJiM0MzsJY3R4LSZndDtkZXZfcHJpdiA9IGF0dGFjaDsKJiM0MzsJY3R4LSZndDtkZXZfb3BzID0gJmFtcDtudm1lX2RtYV9idWZfaW9fb3BzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbnZtZV9tcV9hZG1pbl9vcHMgPSB7CiAJLnF1ZXVlX3JxCT0gbnZtZV9xdWV1ZV9ycSwKIAkuY29tcGxldGUJPSBudm1lX3BjaV9jb21wbGV0ZV9ycSwKQEAgLTM1NjMsNiAmIzQzOzQwMDEsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG52bWVfY3RybF9vcHMgbnZtZV9wY2lfY3RybF9vcHMgPSB7CiAJLnByaW50X2RldmljZV9pbmZvCT0gbnZtZV9wY2lfcHJpbnRfZGV2aWNlX2luZm8sCiAJLnN1cHBvcnRzX3BjaV9wMnBkbWEJPSBudm1lX3BjaV9zdXBwb3J0c19wY2lfcDJwZG1hLAogCS5nZXRfdmlydF9ib3VuZGFyeQk9IG52bWVfcGNpX2dldF92aXJ0X2JvdW5kYXJ5LAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikKJiM0MzsJLmluaXRfZG1hX2J1Zl9pb19jdHgJPSBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4LAomIzQzOyNlbmRpZgogfTsKIAogc3RhdGljIGludCBudm1lX2Rldl9tYXAoc3RydWN0IG52bWVfZGV2ICpkZXYpCkBAIC00MzI3LDUgJiM0Mzs0NzY4LDYgQEAgTU9EVUxFX0FVVEhPUigmIzM0O01hdHRoZXcgV2lsY294ICZsdDt3aWxseUBsaW51eC5pbnRlbC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfVkVSU0lPTigmIzM0OzEuMCYjMzQ7KTsKIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O05WTWUgaG9zdCBQQ0llIHRyYW5zcG9ydCBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0lNUE9SVF9OUygmIzM0O0RNQV9CVUYmIzM0Oyk7CiBtb2R1bGVfaW5pdChudm1lX2luaXQpOwogbW9kdWxlX2V4aXQobnZtZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMKaW5kZXggYmE1YzdiM2UyYTdjNi4uY2UwM2EwZWE0ZGVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMKQEAgLTM1Nyw3ICYjNDM7MzU3LDcgQEAgc3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsCiAJCWlvdl9pdGVyX2J2ZWMoJmFtcDtyZXEtJmd0O2l0ZXIsIGRpciwKIAkJCV9fYnZlY19pdGVyX2J2ZWMoYmlvLSZndDtiaV9pb192ZWMsIGJpby0mZ3Q7YmlfaXRlciksIG5yX2J2ZWMsCiAJCQliaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSk7Ci0JCXJlcS0mZ3Q7aXRlci5pb3Zfb2Zmc2V0ID0gYmlvLSZndDtiaV9pdGVyLmJpX2J2ZWNfZG9uZTsKJiM0MzsJCXJlcS0mZ3Q7aXRlci5pb3Zfb2Zmc2V0ID0gYmlvLSZndDtiaV9pdGVyLmJpX29mZnNldDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL21pc2MuaCBiL2ZzL2J0cmZzL21pc2MuaAppbmRleCA2OTRiZTZkMDU2MmE0Li44MDIwNjA5NDMxODAxIDEwMDY0NAotLS0gYS9mcy9idHJmcy9taXNjLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvbWlzYy5oCkBAIC03NCw3ICYjNDM7NzQsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBidmVjX2l0ZXIgaW5pdF9idmVjX2l0ZXJfZm9yX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCiAJCS5iaV9zZWN0b3IgPSAwLAogCQkuYmlfc2l6ZSA9IGJpb19zaXplLAogCQkuYmlfaWR4ID0gMCwKLQkJLmJpX2J2ZWNfZG9uZSA9IDAsCiYjNDM7CQkuYmlfb2Zmc2V0ID0gMCwKIAl9OwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaAppbmRleCA4ZjMzZjcxN2IxNGY1Li5jMDUzZTk0NDQ1MTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTgwLDcgJiM0Mzs4MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fbm9fYWR2YW5jZV9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbykKIHsKIAlyZXR1cm4gYmlvX29wKGJpbykgPT0gUkVRX09QX0RJU0NBUkQgfHwKIAkgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1NFQ1VSRV9FUkFTRSB8fAotCSAgICAgICBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEVfWkVST0VTOwomIzQzOwkgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFX1pFUk9FUyB8fAomIzQzOwkgICAgICAgb3BfaXNfZG1hYnVmKGJpby0mZ3Q7Ymlfb3BmKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICpiaW9fZGF0YShzdHJ1Y3QgYmlvICpiaW8pCkBAIC0xMTMsMTEgJiM0MzsxMTQsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19hZHZhbmNlX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAogewogCWl0ZXItJmd0O2JpX3NlY3RvciAmIzQzOz0gYnl0ZXMgJmd0OyZndDsgOTsKIAotCWlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpCiYjNDM7CWlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpIHsKIAkJaXRlci0mZ3Q7Ymlfc2l6ZSAtPSBieXRlczsKLQllbHNlCiYjNDM7CQlpdGVyLSZndDtiaV9vZmZzZXQgJiM0Mzs9IGJ5dGVzOwomIzQzOwl9IGVsc2UgewogCQlidmVjX2l0ZXJfYWR2YW5jZShiaW8tJmd0O2JpX2lvX3ZlYywgaXRlciwgYnl0ZXMpOwogCQkvKiBUT0RPOiBJdCBpcyByZWFzb25hYmxlIHRvIGNvbXBsZXRlIGJpbyB3aXRoIGVycm9yIGhlcmUuICovCiYjNDM7CX0KIH0KIAogLyogQGJ5dGVzIHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRvIGJ2ZWNbaS0mZ3Q7YmlfaWR4XS5idl9sZW4gKi8KQEAgLTEyNywxMCAmIzQzOzEzMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2FkdmFuY2VfaXRlcl9zaW5nbGUoY29uc3Qgc3RydWN0IGJpbyAqYmlvLAogewogCWl0ZXItJmd0O2JpX3NlY3RvciAmIzQzOz0gYnl0ZXMgJmd0OyZndDsgOTsKIAotCWlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpCiYjNDM7CWlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpIHsKIAkJaXRlci0mZ3Q7Ymlfc2l6ZSAtPSBieXRlczsKLQllbHNlCiYjNDM7CQlpdGVyLSZndDtiaV9vZmZzZXQgJiM0Mzs9IGJ5dGVzOwomIzQzOwl9IGVsc2UgewogCQlidmVjX2l0ZXJfYWR2YW5jZV9zaW5nbGUoYmlvLSZndDtiaV9pb192ZWMsIGl0ZXIsIGJ5dGVzKTsKJiM0MzsJfQogfQogCiB2b2lkIF9fYmlvX2FkdmFuY2Uoc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBieXRlcyk7CkBAIC0zOTUsMTIgJiM0Mzs0MDAsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb193b3VsZGJsb2NrX2Vycm9yKHN0cnVjdCBiaW8gKmJpbykKIAogLyoKICAqIENhbGN1bGF0ZSBudW1iZXIgb2YgYnZlYyBzZWdtZW50cyB0aGF0IHNob3VsZCBiZSBhbGxvY2F0ZWQgdG8gZml0IGRhdGEKLSAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBidmVjIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHJldXNlZAotICogaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGEgbmV3IG9uZS4KJiM0MzsgKiBwb2ludGVkIGJ5IEBpdGVyLiBJZiBAaXRlciBpcyBiYWNrZWQgYnkgYSBidmVjIG9yIGEgZG1hYnVmLCB0aGUgYnZlYyBhcnJheSAvCiYjNDM7ICogdGhlIGRtYSBtYXAgYXJlIGdvaW5nIHRvIGJlIHJldXNlZCwgYW5kIHNvIG5vIGV4dHJhIGFsbG9jYXRpb24gaXMgcmVxdWlyZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGJpb19pb3ZfdmVjc190b19hbGxvYyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGludCBtYXhfc2VncykKIHsKLQlpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSkKJiM0MzsJaWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikgfHwgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIGlvdl9pdGVyX25wYWdlcyhpdGVyLCBtYXhfc2Vncyk7CiB9CkBAIC00ODAsNiAmIzQzOzQ4NSw3IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQl1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7CiAKIHZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7CiYjNDM7dm9pZCBiaW9fZG1hYnVmX21hcF9zZXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpOwogdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTsKIGV4dGVybiB2b2lkIGJpb19zZXRfcGFnZXNfZGlydHkoc3RydWN0IGJpbyAqYmlvKTsKIGV4dGVybiB2b2lkIGJpb19jaGVja19wYWdlc19kaXJ0eShzdHJ1Y3QgYmlvICpiaW8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstbXEuaCBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmgKaW5kZXggYWY4Nzg1OTdhZmI4Yy4uN2M3NTA0Yzg0ZTA5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGstbXEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oCkBAIC0xMDE3LDYgJiM0MzsxMDE3LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqYmxrX21xX3JxX3RvX3BkdShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAJcmV0dXJuIHJxICYjNDM7IDE7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX3JxX2lzX2RtYWJ1ZihzdHJ1Y3QgcmVxdWVzdCAqcnEpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIHJxLSZndDtiaW8gJmFtcDsmYW1wOyBvcF9pc19kbWFidWYocnEtJmd0O2Jpby0mZ3Q7Ymlfb3BmKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfbXFfaHdfY3R4ICpxdWV1ZV9oY3R4KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgaWQpCiB7CiAJc3RydWN0IGJsa19tcV9od19jdHggKmhjdHg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaAppbmRleCA4ODA4ZWU3NmU3M2MwLi5kNjA1ZTMxNzEyZDQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKQEAgLTIzMyw3ICYjNDM7MjMzLDEyIEBAIHN0cnVjdCBiaW8gewogCWF0b21pY190CQlfX2JpX3JlbWFpbmluZzsKIAogCS8qIFRoZSBhY3R1YWwgdmVjIGxpc3QsIHByZXNlcnZlZCBieSBiaW9fcmVzZXQoKSAqLwotCXN0cnVjdCBiaW9fdmVjCQkqYmlfaW9fdmVjOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgYmlvX3ZlYwkJKmJpX2lvX3ZlYzsKJiM0MzsJCS8qIERyaXZlciBzcGVjaWZpYyBkbWEgbWFwLCB2YWxpZCBJRkYgUkVRX0RNQUJVRiBpcyBzZXQgKi8KJiM0MzsJCXN0cnVjdCBkbWFfYnVmX2lvX21hcAkqYmlfZG1hYnVmX21hcDsKJiM0MzsJfTsKJiM0MzsKIAlzdHJ1Y3QgYnZlY19pdGVyCWJpX2l0ZXI7CiAKIAl1bmlvbiB7CkBAIC00MDEsNiAmIzQzOzQwNiw3IEBAIGVudW0gcmVxX2ZsYWdfYml0cyB7CiAJX19SRVFfRFJWLAkJLyogZm9yIGRyaXZlciB1c2UgKi8KIAlfX1JFUV9GU19QUklWQVRFLAkvKiBmb3IgZmlsZSBzeXN0ZW0gKHN1Ym1pdHRlcikgdXNlICovCiAJX19SRVFfQVRPTUlDLAkJLyogZm9yIGF0b21pYyB3cml0ZSBvcGVyYXRpb25zICovCiYjNDM7CV9fUkVRX0RNQUJVRiwJCS8qIFVzaW5nIHByZW1tYXBlZCBkbWEgYnVmZmVycyAqLwogCS8qCiAJICogQ29tbWFuZCBzcGVjaWZpYyBmbGFncywga2VlcCBsYXN0OgogCSAqLwpAQCAtNDMzLDYgJiM0Mzs0MzksNyBAQCBlbnVtIHJlcV9mbGFnX2JpdHMgewogI2RlZmluZSBSRVFfRFJWCQkoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgJmx0OyZsdDsgX19SRVFfRFJWKQogI2RlZmluZSBSRVFfRlNfUFJJVkFURQkoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgJmx0OyZsdDsgX19SRVFfRlNfUFJJVkFURSkKICNkZWZpbmUgUkVRX0FUT01JQwkoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgJmx0OyZsdDsgX19SRVFfQVRPTUlDKQomIzQzOyNkZWZpbmUgUkVRX0RNQUJVRgkoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgJmx0OyZsdDsgX19SRVFfRE1BQlVGKQogCiAjZGVmaW5lIFJFUV9OT1VOTUFQCShfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCAmbHQ7Jmx0OyBfX1JFUV9OT1VOTUFQKQogCkBAIC00ODYsNiAmIzQzOzQ5MywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgb3BfaXNfZGlzY2FyZChibGtfb3BmX3Qgb3ApCiAJcmV0dXJuIChvcCAmYW1wOyBSRVFfT1BfTUFTSykgPT0gUkVRX09QX0RJU0NBUkQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgb3BfaXNfZG1hYnVmKGJsa19vcGZfdCBvcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBvcCAmYW1wOyBSRVFfRE1BQlVGOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDaGVjayBpZiBhIGJpbyBvciByZXF1ZXN0IG9wZXJhdGlvbiBpcyBhIHpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDkyMTNhNTcxNmY5NWEuLjlmNGM5MmU1MWRjOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMTY4Miw2ICYjNDM7MTY4Miw4IEBAIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CiAJLyogcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBpZGVudGlmaWVyIG9yIGEgbmVnYXRpdmUgZXJybm86ICovCiAJaW50ICgqZ2V0X3VuaXF1ZV9pZCkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IGlkWzE2XSwKIAkJCWVudW0gYmxrX3VuaXF1ZV9pZCBpZF90eXBlKTsKJiM0MzsJaW50ICgqaW5pdF9kbWFfYnVmX2lvX2N0eCkoc3RydWN0IGJsb2NrX2RldmljZSAqLAomIzQzOwkJCQkgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKik7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJY29uc3Qgc3RydWN0IHByX29wcyAqcHJfb3BzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J2ZWMuaCBiL2luY2x1ZGUvbGludXgvYnZlYy5oCmluZGV4IDkyODM3ZTI3NDNmMTkuLmI2MzkxNGZmNTZlMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnZlYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnZlYy5oCkBAIC0xMDgsOSAmIzQzOzEwOCwxMCBAQCBzdHJ1Y3QgYnZlY19pdGVyIHsKIAl1bnNpZ25lZCBpbnQJCWJpX2lkeDsKIAogCS8qCi0JICogQ3VycmVudCBvZmZzZXQgaW4gdGhlIGJ2ZWMgZW50cnkgcG9pbnRlZCB0byBieSBgYmlfaWR4YC4KJiM0MzsJICogQ3VycmVudCBvZmZzZXQgaW4gdGhlIGJ2ZWMgZW50cnkgcG9pbnRlZCB0byBieSBgYmlfaWR4YCBvciBpbnRvCiYjNDM7CSAqIGEgZG1hLWJ1ZiBtYXAuCiAJICovCi0JdW5zaWduZWQgaW50CQliaV9idmVjX2RvbmU7CiYjNDM7CXVuc2lnbmVkIGludAkJYmlfb2Zmc2V0OwogfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CiAKIHN0cnVjdCBidmVjX2l0ZXJfYWxsIHsKQEAgLTEzNSwxNCAmIzQzOzEzNiwxNCBAQCBtcF9idmVjX2l0ZXJfcGFnZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY3MsIGNvbnN0IHN0cnVjdCBidmVjX2l0ZXIgaXRlcikKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50CiBtcF9idmVjX2l0ZXJfbGVuKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjcywgY29uc3Qgc3RydWN0IGJ2ZWNfaXRlciBpdGVyKQogewotCXJldHVybiBtaW4oX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktJmd0O2J2X2xlbiAtIGl0ZXIuYmlfYnZlY19kb25lLAomIzQzOwlyZXR1cm4gbWluKF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLSZndDtidl9sZW4gLSBpdGVyLmJpX29mZnNldCwKIAkJCWl0ZXIuYmlfc2l6ZSk7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50CiBtcF9idmVjX2l0ZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjcywgY29uc3Qgc3RydWN0IGJ2ZWNfaXRlciBpdGVyKQogewotCXJldHVybiBfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS0mZ3Q7YnZfb2Zmc2V0ICYjNDM7IGl0ZXIuYmlfYnZlY19kb25lOwomIzQzOwlyZXR1cm4gX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktJmd0O2J2X29mZnNldCAmIzQzOyBpdGVyLmJpX29mZnNldDsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKQEAgLTIwNCw3ICYjNDM7MjA1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidiwKIAl9CiAKIAlpdGVyLSZndDtiaV9zaXplIC09IGJ5dGVzOwotCWJ5dGVzICYjNDM7PSBpdGVyLSZndDtiaV9idmVjX2RvbmU7CiYjNDM7CWJ5dGVzICYjNDM7PSBpdGVyLSZndDtiaV9vZmZzZXQ7CiAKIAl3aGlsZSAoYnl0ZXMgJmFtcDsmYW1wOyBieXRlcyAmZ3Q7PSBidltpZHhdLmJ2X2xlbikgewogCQlieXRlcyAtPSBidltpZHhdLmJ2X2xlbjsKQEAgLTIxMiw3ICYjNDM7MjEzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidiwKIAl9CiAKIAlpdGVyLSZndDtiaV9pZHggPSBpZHg7Ci0JaXRlci0mZ3Q7YmlfYnZlY19kb25lID0gYnl0ZXM7CiYjNDM7CWl0ZXItJmd0O2JpX29mZnNldCA9IGJ5dGVzOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0yMjMsMTMgJiM0MzsyMjQsMTMgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidiwKIHN0YXRpYyBpbmxpbmUgdm9pZCBidmVjX2l0ZXJfYWR2YW5jZV9zaW5nbGUoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LAogCQkJCXN0cnVjdCBidmVjX2l0ZXIgKml0ZXIsIHVuc2lnbmVkIGludCBieXRlcykKIHsKLQl1bnNpZ25lZCBpbnQgZG9uZSA9IGl0ZXItJmd0O2JpX2J2ZWNfZG9uZSAmIzQzOyBieXRlczsKJiM0MzsJdW5zaWduZWQgaW50IGRvbmUgPSBpdGVyLSZndDtiaV9vZmZzZXQgJiM0MzsgYnl0ZXM7CiAKIAlpZiAoZG9uZSA9PSBidltpdGVyLSZndDtiaV9pZHhdLmJ2X2xlbikgewogCQlkb25lID0gMDsKIAkJaXRlci0mZ3Q7YmlfaWR4JiM0MzsmIzQzOzsKIAl9Ci0JaXRlci0mZ3Q7YmlfYnZlY19kb25lID0gZG9uZTsKJiM0MzsJaXRlci0mZ3Q7Ymlfb2Zmc2V0ID0gZG9uZTsKIAlpdGVyLSZndDtiaV9zaXplIC09IGJ5dGVzOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJjZmZjNjIwMjU1NmUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaApAQCAtMCwwICYjNDM7MSw5MSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7I2lmbmRlZiBfX0RNQV9CVUZfSU9fSF9fCiYjNDM7I2RlZmluZSBfX0RNQV9CVUZfSU9fSF9fCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZTsKJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19jdHg7CiYjNDM7c3RydWN0IGRtYV9idWZfaW9fbWFwOwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX29wcyB7CiYjNDM7CS8qCiYjNDM7CSAqIENyZWF0ZSBhIG5ldyBtYXAgZm9yIHRoZSBnaXZlbiBjdHguIENhbGxlZCB3aXRoIHRoZSByZXNlcnZhdGlvbgomIzQzOwkgKiBsb2NrIGhlbGQuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKigqbWFwKShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIENsZWFuIHVwIGRldmljZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgQG1hcC4gQ2FsbGVkIHdpdGggdGhlCiYjNDM7CSAqIHJlc2VydmF0aW9uIGxvY2sgaGVsZC4KJiM0MzsJICovCiYjNDM7CXZvaWQgKCp1bm1hcCkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHVzZXIgdHJpZXMgdG8gZGVzdHJveSB0aGUgY3R4LiBSZWxlYXNlIGFsbCBkZXZpY2Ugc3BlY2lmaWMKJiM0MzsJICogcGFydHMgb2YgdGhlIHRva2VuLgomIzQzOwkgKi8KJiM0MzsJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcCB7CiYjNDM7CS8qCiYjNDM7CSAqIENvdW50cyBhdHRhY2hlZCByZXF1ZXN0cyBhbmQgb3RoZXIgdXNlcnMuIERldmljZSBzcGVjaWZpYyB1bm1hcHBpbmcKJiM0MzsJICogaXMgZGVmZXJyZWQgdW50aWwgYWxsIHJlZnMgYXJlIGRyb3BwZWQuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgcGVyY3B1X3JlZgkJcmVmczsKJiM0MzsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CQlyZWxlYXNlX3dvcms7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlCQkqZmVuY2U7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2N0eAkJKmN0eDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2N0eCB7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX21hcCBfX3JjdQkJKm1hcDsKJiM0MzsJc3RydWN0IGRtYV9idWYJCQkJKmRtYWJ1ZjsKJiM0MzsJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24JCQlkaXI7CiYjNDM7CiYjNDM7CWF0b21pY190CQkJCWZlbmNlX3NlcTsKJiM0MzsJdTY0CQkJCQlmZW5jZV9jdHg7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdAkJCXJlbGVhc2Vfd29yazsKJiM0MzsJcmVmY291bnRfdAkJCQlyZWZzOwomIzQzOwomIzQzOwl2b2lkCQkJCQkqZGV2X3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBkbWFfYnVmX2lvX29wcwkJKmRldl9vcHM7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLAomIzQzOwkJCSAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LAomIzQzOwkJCSAgIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiYjNDM7CQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKJiM0Mzt2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpOwomIzQzOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqCiYjNDM7ZG1hX2J1Zl9pb19nZXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7CiYjNDM7CiYjNDM7CWd1YXJkKHJjdSkoKTsKJiM0MzsKJiM0MzsJbWFwID0gcmN1X2RlcmVmZXJlbmNlKGN0eC0mZ3Q7bWFwKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFtYXAgfHwgIXBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmVfcmN1KCZhbXA7bWFwLSZndDtyZWZzKSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hcDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGRtYV9idWZfaW9fbWFwX2Ryb3Aoc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApCiYjNDM7ewomIzQzOwlwZXJjcHVfcmVmX3B1dCgmYW1wO21hcC0mZ3Q7cmVmcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogRGV2aWNlIEFQSQomIzQzOyAqLwomIzQzOwomIzQzO3ZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTsKJiM0MztpbnQgZG1hX2J1Zl9pb19pbml0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApOwomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGQxMDg5N2IzYTFlMzUuLjlmZTM0OWEyNzljNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTE5MTQsNiAmIzQzOzE5MTQsNyBAQCBzdHJ1Y3QgZGlyX2NvbnRleHQgewogI2RlZmluZSBDT1BZX0ZJTEVfU1BMSUNFCQkoMSAmbHQ7Jmx0OyAwKQogCiBzdHJ1Y3QgaW9fdXJpbmdfY21kOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX2N0eDsKIHN0cnVjdCBvZmZzZXRfY3R4OwogCiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2JpdHdpc2UgZm9wX2ZsYWdzX3Q7CkBAIC0xOTYyLDYgJiM0MzsxOTYzLDcgQEAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7CiAJaW50ICgqdXJpbmdfY21kX2lvcG9sbCkoc3RydWN0IGlvX3VyaW5nX2NtZCAqLCBzdHJ1Y3QgaW9fY29tcF9iYXRjaCAqLAogCQkJCXVuc2lnbmVkIGludCBwb2xsX2ZsYWdzKTsKIAlpbnQgKCptbWFwX3ByZXBhcmUpKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKik7CiYjNDM7CWludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTsKIH0gX19yYW5kb21pemVfbGF5b3V0OwogCiAvKiBTdXBwb3J0cyBhc3luYyBidWZmZXJlZCByZWFkcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCmluZGV4IGEyYzYyM2E2N2EyNTEuLmY5MDU4NmQzNTNjMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAKIHN0cnVjdCBpb3VfbG9vcF9wYXJhbXM7CiBzdHJ1Y3QgaW9fdXJpbmdfYnBmX29wczsKJiM0MztzdHJ1Y3QgZG1hX2J1Zl9pb19tYXA7CiAKIGVudW0gewogCS8qCkBAIC01OTQsNiAmIzQzOzU5NSw3IEBAIGVudW0gewogCVJFUV9GX0lNUE9SVF9CVUZGRVJfQklULAogCVJFUV9GX1NRRV9DT1BJRURfQklULAogCVJFUV9GX0lPUE9MTF9CSVQsCiYjNDM7CVJFUV9GX0RST1BfRE1BQlVGX0JJVCwKIAogCS8qIG5vdCBhIHJlYWwgYml0LCBqdXN0IHRvIGNoZWNrIHdlJiMzOTtyZSBub3Qgb3ZlcmZsb3dpbmcgdGhlIHNwYWNlICovCiAJX19SRVFfRl9MQVNUX0JJVCwKQEAgLTY4OSw2ICYjNDM7NjkxLDggQEAgZW51bSB7CiAJUkVRX0ZfU1FFX0NPUElFRAk9IElPX1JFUV9GTEFHKFJFUV9GX1NRRV9DT1BJRURfQklUKSwKIAkvKiByZXF1ZXN0IG11c3QgYmUgaW9wb2xsZWQgdG8gY29tcGxldGlvbiAoc2V0IGluIC0mZ3Q7aXNzdWUoKSkgKi8KIAlSRVFfRl9JT1BPTEwJCT0gSU9fUkVRX0ZMQUcoUkVRX0ZfSU9QT0xMX0JJVCksCiYjNDM7CS8qIHRoZXJlIGlzIGEgZG1hIG1hcCBhdHRhY2hlZCB0byByZXF1ZXN0IHRoYXQgbmVlZHMgdG8gYmUgZHJvcHBlZCAqLwomIzQzOwlSRVFfRl9EUk9QX0RNQUJVRgk9IElPX1JFUV9GTEFHKFJFUV9GX0RST1BfRE1BQlVGX0JJVCksCiB9OwogCiBzdHJ1Y3QgaW9fdHdfcmVxIHsKQEAgLTgxMSw2ICYjNDM7ODE1LDcgQEAgc3RydWN0IGlvX2tpb2NiIHsKIAkvKiBjdXN0b20gY3JlZGVudGlhbHMsIHZhbGlkIElGRiBSRVFfRl9DUkVEUyBpcyBzZXQgKi8KIAljb25zdCBzdHJ1Y3QgY3JlZAkJKmNyZWRzOwogCXN0cnVjdCBpb193cV93b3JrCQl3b3JrOwomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAJCSpkbWFidWZfbWFwOwogCiAJc3RydWN0IGlvX2JpZ19jcWUgewogCQl1NjQJCQlleHRyYTE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaAppbmRleCBhOWJjNWIzMDY3ZTMyLi42YzMxZWMxMzFhNzFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWlvLmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAKIHN0cnVjdCBwYWdlOwogc3RydWN0IGZvbGlvX3F1ZXVlOwomIzQzO3N0cnVjdCBkbWFfYnVmX2lvX21hcDsKIAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19iaXR3aXNlIGlvdl9pdGVyX2V4dHJhY3Rpb25fdDsKIApAQCAtMjksNiAmIzQzOzMwLDcgQEAgZW51bSBpdGVyX3R5cGUgewogCUlURVJfRk9MSU9RLAogCUlURVJfWEFSUkFZLAogCUlURVJfRElTQ0FSRCwKJiM0MzsJSVRFUl9ETUFCVUZfTUFQLAogfTsKIAogI2RlZmluZSBJVEVSX1NPVVJDRQkxCS8vID09IFdSSVRFCkBAIC03MSw2ICYjNDM7NzMsNyBAQCBzdHJ1Y3QgaW92X2l0ZXIgewogCQkJCWNvbnN0IHN0cnVjdCBmb2xpb19xdWV1ZSAqZm9saW9xOwogCQkJCXN0cnVjdCB4YXJyYXkgKnhhcnJheTsKIAkJCQl2b2lkIF9fdXNlciAqdWJ1ZjsKJiM0MzsJCQkJc3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFidWZfbWFwOwogCQkJfTsKIAkJCXNpemVfdCBjb3VudDsKIAkJfTsKQEAgLTE1NSw2ICYjNDM7MTU4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpb3ZfaXRlcl9pc194YXJyYXkoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKQogCXJldHVybiBpb3ZfaXRlcl90eXBlKGkpID09IElURVJfWEFSUkFZOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKQomIzQzO3sKJiM0MzsJcmV0dXJuIGlvdl9pdGVyX3R5cGUoaSkgPT0gSVRFUl9ETUFCVUZfTUFQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpb3ZfaXRlcl9ydyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCiB7CiAJcmV0dXJuIGktJmd0O2RhdGFfc291cmNlID8gV1JJVEUgOiBSRUFEOwpAQCAtMzAwLDYgJiM0MzszMDgsOSBAQCB2b2lkIGlvdl9pdGVyX2ZvbGlvX3F1ZXVlKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwKIAkJCSAgdW5zaWduZWQgaW50IGZpcnN0X3Nsb3QsIHVuc2lnbmVkIGludCBvZmZzZXQsIHNpemVfdCBjb3VudCk7CiB2b2lkIGlvdl9pdGVyX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sIHN0cnVjdCB4YXJyYXkgKnhhcnJheSwKIAkJICAgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBjb3VudCk7CiYjNDM7dm9pZCBpb3ZfaXRlcl9kbWFidWZfbWFwKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwKJiM0MzsJCQlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCwKJiM0MzsJCQlsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpOwogc3NpemVfdCBpb3ZfaXRlcl9nZXRfcGFnZXMyKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IHBhZ2UgKipwYWdlcywKIAkJCXNpemVfdCBtYXhzaXplLCB1bnNpZ25lZCBtYXhwYWdlcywgc2l6ZV90ICpzdGFydCk7CiBzc2l6ZV90IGlvdl9pdGVyX2dldF9wYWdlc19hbGxvYzIoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgKaW5kZXggOTA5ZmI3YWVhNjM4ZS4uYzM5Mjk3ZThiZWI2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmgKQEAgLTc5MCwxMyAmIzQzOzc5MCw0MiBAQCBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUgewogCiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyIHsKIAlfX3UzMiBvZmZzZXQ7Ci0JX191MzIgcmVzdjsKJiM0MzsJX191MzIgZmxhZ3M7CiAJX19hbGlnbmVkX3U2NCBkYXRhOwogCV9fYWxpZ25lZF91NjQgdGFnczsKIAlfX3UzMiBucjsKIAlfX3UzMiByZXN2MjsKIH07CiAKJiM0MzsvKiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyOjpmbGFncyAqLwomIzQzO2VudW0gaW9fdXJpbmdfcnNyY19yZWdfZmxhZ3MgewomIzQzOwkvKgomIzQzOwkgKiBVc2UgdGhlIGV4dGVuZGVkIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBidWZmZXIgdXBkYXRlcywKJiM0MzsJICogc2VlIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYwomIzQzOwkgKi8KJiM0MzsJSU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVECQk9IDFVICZsdDsmbHQ7IDEsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBCdWZmZXIgcmVnaXN0cmF0aW9uIHR5cGUsIHBhc3NlZCBpbiBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2M6OnR5cGUgKi8KJiM0MztlbnVtIGlvX3VyaW5nX3JlZ2J1Zl90eXBlIHsKJiM0MzsJSU9fUkVHQlVGX1RZUEVfRU1QVFksCiYjNDM7CUlPX1JFR0JVRl9UWVBFX1VBRERSLAomIzQzOwlJT19SRUdCVUZfVFlQRV9ETUFCVUYsCiYjNDM7CiYjNDM7CV9fSU9fUkVHQlVGX1RZUEVfTUFYLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIHsKJiM0MzsJX191MzIgdHlwZTsgLyogZW51bSBpb191cmluZ19yZWdidWZfdHlwZSAqLwomIzQzOwlfX3UzMiBmbGFnczsKJiM0MzsJX191NjQgc2l6ZTsKJiM0MzsJX191NjQgdWFkZHI7CiYjNDM7CiYjNDM7CV9fczMyIGRtYWJ1Zl9mZDsKJiM0MzsJX19zMzIgdGFyZ2V0X2ZkOwomIzQzOwlfX3U2NCBfX3Jlc3ZbNl07CiYjNDM7fTsKJiM0MzsKIC8qIFNraXAgdXBkYXRpbmcgZmQgaW5kZXhlcyBzZXQgdG8gdGhpcyB2YWx1ZSBpbiB0aGUgZmQgdGFibGUgKi8KICNkZWZpbmUgSU9SSU5HX1JFR0lTVEVSX0ZJTEVTX1NLSVAJKC0yKQogCmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuYwppbmRleCAxMjc5ZTI3YzJjNmQyLi5jYjg4ZDE5YzhmYjJjIDEwMDY0NAotLS0gYS9pb191cmluZy9pb191cmluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvX3VyaW5nLmMKQEAgLTEwOSw3ICYjNDM7MTA5LDcgQEAKIAogI2RlZmluZSBJT19SRVFfQ0xFQU5fU0xPV19GTEFHUyAoUkVRX0ZfUkVGQ09VTlQgfCBJT19SRVFfTElOS19GTEFHUyB8IFwKIAkJCQkgUkVRX0ZfUkVJU1NVRSB8IFJFUV9GX1BPTExFRCB8IFwKLQkJCQkgSU9fUkVRX0NMRUFOX0ZMQUdTKQomIzQzOwkJCQkgSU9fUkVRX0NMRUFOX0ZMQUdTIHwgUkVRX0ZfRFJPUF9ETUFCVUYpCiAKICNkZWZpbmUgSU9fVENUWF9SRUZTX0NBQ0hFX05SCSgxVSAmbHQ7Jmx0OyAxMCkKIApAQCAtMTEyNSw2ICYjNDM7MTEyNSw3IEBAIHN0YXRpYyB2b2lkIGlvX2ZyZWVfYmF0Y2hfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAkJCQlpb19xdWV1ZV9uZXh0KHJlcSk7CiAJCQlpZiAodW5saWtlbHkocmVxLSZndDtmbGFncyAmYW1wOyBJT19SRVFfQ0xFQU5fRkxBR1MpKQogCQkJCWlvX2NsZWFuX29wKHJlcSk7CiYjNDM7CQkJaW9fcmVxX2Ryb3BfZG1hYnVmKHJlcSk7CiAJCX0KIAkJaW9fcHV0X2ZpbGUocmVxKTsKIAkJaW9fcmVxX3B1dF9yc3JjX25vZGVzKHJlcSk7CmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jCmluZGV4IGE3NGQxNWY3YjdkMmIuLjQzOWM5OWFkMTg4NDEgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL25ldC5jCkBAIC0xNDcxLDcgJiM0MzsxNDcxLDcgQEAgc3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIHplcm9jb3B5X2ZpbGxfc2tiX2Zyb21faXRlcihza2IsIGZyb20sIGxlbmd0aCk7CiAKIAliaS5iaV9zaXplID0gbWluKGZyb20tJmd0O2NvdW50LCBsZW5ndGgpOwotCWJpLmJpX2J2ZWNfZG9uZSA9IGZyb20tJmd0O2lvdl9vZmZzZXQ7CiYjNDM7CWJpLmJpX29mZnNldCA9IGZyb20tJmd0O2lvdl9vZmZzZXQ7CiAJYmkuYmlfaWR4ID0gMDsKIAogCXdoaWxlIChiaS5iaV9zaXplICZhbXA7JmFtcDsgZnJhZyAmbHQ7IE1BWF9TS0JfRlJBR1MpIHsKQEAgLTE0OTAsNyAmIzQzOzE0OTAsNyBAQCBzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWZyb20tJmd0O2J2ZWMgJiM0Mzs9IGJpLmJpX2lkeDsKIAlmcm9tLSZndDtucl9zZWdzIC09IGJpLmJpX2lkeDsKIAlmcm9tLSZndDtjb3VudCAtPSBjb3BpZWQ7Ci0JZnJvbS0mZ3Q7aW92X29mZnNldCA9IGJpLmJpX2J2ZWNfZG9uZTsKJiM0MzsJZnJvbS0mZ3Q7aW92X29mZnNldCA9IGJpLmJpX29mZnNldDsKIAogCXNrYi0mZ3Q7ZGF0YV9sZW4gJiM0Mzs9IGNvcGllZDsKIAlza2ItJmd0O2xlbiAmIzQzOz0gY29waWVkOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcnNyYy5jIGIvaW9fdXJpbmcvcnNyYy5jCmluZGV4IDhkMGYyZWUyNGUwYzIuLmQyM2RiYjBkZDZiOGUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3JzcmMuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmMKQEAgLTEwLDYgJiM0MzsxMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGF0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9fdXJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb191cmluZy9jbWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi1pby5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9pb191cmluZy5oJmd0OwogCkBAIC0yOCw3ICYjNDM7MjksNyBAQCBzdHJ1Y3QgaW9fcnNyY191cGRhdGUgewogfTsKIAogc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCi0JCQkJCQkgICBzdHJ1Y3QgaW92ZWMgKmlvdik7CiYjNDM7CQkJCQkJICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKTsKIAogc3RhdGljIGludCBocGFnZV9hY2N0X3JlZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHBhZ2UgKmhwYWdlLAogCQkJICBib29sICphY2N0X25ldykKQEAgLTgxLDYgJiM0Mzs4MiwxOCBAQCBzdGF0aWMgYm9vbCBocGFnZV9hY2N0X3VucmVmKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgcGFnZSAqaHBhZ2UpCiAKICNkZWZpbmUgSU9fQ0FDSEVEX0JWRUNTX1NFR1MJMzIKIAomIzQzO3N0YXRpYyB2b2lkIGlvX2lvdl90b19yZWdidWZfZGVzYyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKJiM0MzsJCQkJICBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpCiYjNDM7ewomIzQzOwkqZGVzYyA9IChzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MpIHsKJiM0MzsJCS50eXBlID0gSU9fUkVHQlVGX1RZUEVfVUFERFIsCiYjNDM7CQkudWFkZHIgPSAodTY0KSh1aW50cHRyX3QpaW92LSZndDtpb3ZfYmFzZSwKJiM0MzsJCS5zaXplID0gaW92LSZndDtpb3ZfbGVuLAomIzQzOwl9OwomIzQzOwlpZiAoIWRlc2MtJmd0O3VhZGRyKQomIzQzOwkJZGVzYy0mZ3Q7dHlwZSA9IElPX1JFR0JVRl9UWVBFX0VNUFRZOwomIzQzO30KJiM0MzsKIGludCBfX2lvX2FjY291bnRfbWVtKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAl1bnNpZ25lZCBsb25nIHBhZ2VfbGltaXQsIGN1cl9wYWdlcywgbmV3X3BhZ2VzOwpAQCAtMzA5LDYgJiM0MzszMjIsOCBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2ZpbGVzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAodXAtJmd0O29mZnNldCAmIzQzOyBucl9hcmdzICZndDsgY3R4LSZndDtmaWxlX3RhYmxlLmRhdGEubnIpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAodXAtJmd0O2ZsYWdzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlmb3IgKGRvbmUgPSAwOyBkb25lICZsdDsgbnJfYXJnczsgZG9uZSYjNDM7JiM0MzspIHsKIAkJdTY0IHRhZyA9IDA7CkBAIC0zNjgsOSAmIzQzOzM4Myw4IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCiAJCQkJICAgc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMiAqdXAsCiAJCQkJICAgdW5zaWduZWQgaW50IG5yX2FyZ3MpCiB7CiYjNDM7CWJvb2wgZXh0ZW5kZWQgPSB1cC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEOwogCXU2NCBfX3VzZXIgKnRhZ3MgPSB1NjRfdG9fdXNlcl9wdHIodXAtJmd0O3RhZ3MpOwotCXN0cnVjdCBpb3ZlYyBmYXN0X2lvdiwgKmlvdjsKLQlzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjOwogCXU2NCB1c2VyX2RhdGEgPSB1cC0mZ3Q7ZGF0YTsKIAlfX3UzMiBkb25lOwogCWludCBpLCBlcnI7CkBAIC0zNzksMjYgJiM0MzszOTMsNDkgQEAgc3RhdGljIGludCBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAodXAtJmd0O29mZnNldCAmIzQzOyBucl9hcmdzICZndDsgY3R4LSZndDtidWZfdGFibGUubnIpCiAJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAodXAtJmd0O2ZsYWdzICZhbXA7IH5JT1JJTkdfUlNSQ19VUERBVEVfRVhURU5ERUQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAoZG9uZSA9IDA7IGRvbmUgJmx0OyBucl9hcmdzOyBkb25lJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIGRlc2M7CiAJCXN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7CiAJCXU2NCB0YWcgPSAwOwogCi0JCXV2ZWMgPSB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKTsKLQkJaW92ID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIDEsIDEsICZhbXA7ZmFzdF9pb3YsIGlvX2lzX2NvbXBhdChjdHgpKTsKLQkJaWYgKElTX0VSUihpb3YpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKGlvdik7Ci0JCQlicmVhazsKLQkJfQogCQlpZiAodGFncyAmYW1wOyZhbXA7IGNvcHlfZnJvbV91c2VyKCZhbXA7dGFnLCAmYW1wO3RhZ3NbZG9uZV0sIHNpemVvZih0YWcpKSkgewogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9Ci0JCW5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgaW92KTsKJiM0MzsKJiM0MzsJCWlmIChleHRlbmRlZCkgewomIzQzOwkJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2Rlc2MsIHU2NF90b191c2VyX3B0cih1c2VyX2RhdGEpLAomIzQzOwkJCQkJICAgc2l6ZW9mKGRlc2MpKSkgewomIzQzOwkJCQllcnIgPSAtRUZBVUxUOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJdXNlcl9kYXRhICYjNDM7PSBzaXplb2YoZGVzYyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWMgPSB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKTsKJiM0MzsJCQlzdHJ1Y3QgaW92ZWMgZmFzdF9pb3YsICppb3Y7CiYjNDM7CiYjNDM7CQkJaWYgKGlvX2lzX2NvbXBhdChjdHgpKQomIzQzOwkJCQl1c2VyX2RhdGEgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lvdmVjKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCXVzZXJfZGF0YSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpb3ZlYyk7CiYjNDM7CiYjNDM7CQkJaW92ID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIDEsIDEsICZhbXA7ZmFzdF9pb3YsIGlvX2lzX2NvbXBhdChjdHgpKTsKJiM0MzsJCQlpZiAoSVNfRVJSKGlvdikpIHsKJiM0MzsJCQkJZXJyID0gUFRSX0VSUihpb3YpOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQkJaW9faW92X3RvX3JlZ2J1Zl9kZXNjKGlvdiwgJmFtcDtkZXNjKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgJmFtcDtkZXNjKTsKIAkJaWYgKElTX0VSUihub2RlKSkgewogCQkJZXJyID0gUFRSX0VSUihub2RlKTsKIAkJCWJyZWFrOwogCQl9CiYjNDM7CiAJCWlmICh0YWcpIHsKIAkJCWlmICghbm9kZSkgewogCQkJCWVyciA9IC1FSU5WQUw7CkBAIC00MDksMTAgJiM0Mzs0NDYsNiBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAogCQlpID0gYXJyYXlfaW5kZXhfbm9zcGVjKHVwLSZndDtvZmZzZXQgJiM0MzsgZG9uZSwgY3R4LSZndDtidWZfdGFibGUubnIpOwogCQlpb19yZXNldF9yc3JjX25vZGUoY3R4LCAmYW1wO2N0eC0mZ3Q7YnVmX3RhYmxlLCBpKTsKIAkJY3R4LSZndDtidWZfdGFibGUubm9kZXNbaV0gPSBub2RlOwotCQlpZiAoaW9faXNfY29tcGF0KGN0eCkpCi0JCQl1c2VyX2RhdGEgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lvdmVjKTsKLQkJZWxzZQotCQkJdXNlcl9kYXRhICYjNDM7PSBzaXplb2Yoc3RydWN0IGlvdmVjKTsKIAl9CiAJcmV0dXJuIGRvbmUgPyBkb25lIDogZXJyOwogfQpAQCAtNDQ3LDcgJiM0Mzs0ODAsNyBAQCBpbnQgaW9fcmVnaXN0ZXJfZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLAogCW1lbXNldCgmYW1wO3VwLCAwLCBzaXplb2YodXApKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDt1cCwgYXJnLCBzaXplb2Yoc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmICh1cC5yZXN2IHx8IHVwLnJlc3YyKQomIzQzOwlpZiAodXAucmVzdjIpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBfX2lvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKGN0eCwgSU9SSU5HX1JTUkNfRklMRSwgJmFtcDt1cCwgbnJfYXJncyk7CiB9CkBAIC00NjEsNyAmIzQzOzQ5NCw3IEBAIGludCBpb19yZWdpc3Rlcl9yc3JjX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZywKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dXAsIGFyZywgc2l6ZW9mKHVwKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmICghdXAubnIgfHwgdXAucmVzdiB8fCB1cC5yZXN2MikKJiM0MzsJaWYgKCF1cC5uciB8fCB1cC5yZXN2MikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIF9faW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoY3R4LCB0eXBlLCAmYW1wO3VwLCB1cC5ucik7CiB9CkBAIC01NjEsMTIgJiM0Mzs1OTQsOSBAQCBpbnQgaW9fZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiAJc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMiB1cDI7CiAJaW50IHJldDsKIAomIzQzOwltZW1zZXQoJmFtcDt1cDIsIDAsIHNpemVvZih1cDIpKTsKIAl1cDIub2Zmc2V0ID0gdXAtJmd0O29mZnNldDsKIAl1cDIuZGF0YSA9IHVwLSZndDthcmc7Ci0JdXAyLm5yID0gMDsKLQl1cDIudGFncyA9IDA7Ci0JdXAyLnJlc3YgPSAwOwotCXVwMi5yZXN2MiA9IDA7CiAKIAlpZiAodXAtJmd0O29mZnNldCA9PSBJT1JJTkdfRklMRV9JTkRFWF9BTExPQykgewogCQlyZXQgPSBpb19maWxlc191cGRhdGVfd2l0aF9pbmRleF9hbGxvYyhyZXEsIGlzc3VlX2ZsYWdzKTsKQEAgLTg1MiwyNyAmIzQzOzg4MiwxMjcgQEAgYm9vbCBpb19jaGVja19jb2FsZXNjZV9idWZmZXIoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCBpbnQgbnJfcGFnZXMsCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdHJ1Y3QgaW9fcmVnYnVmX2RtYSB7CiYjNDM7CXN0cnVjdCBkbWFfYnVmX2lvX2N0eAkJY3R4OwomIzQzOwlzdHJ1Y3QgZmlsZQkJCSp0YXJnZXRfZmlsZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlbGVhc2VfcmVnX2RtYWJ1Zih2b2lkICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGlvX3JlZ2J1Zl9kbWEgKmRiID0gcHJpdjsKJiM0MzsKJiM0MzsJZnB1dChkYi0mZ3Q7dGFyZ2V0X2ZpbGUpOwomIzQzOwlkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKCZhbXA7ZGItJmd0O2N0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19yZWdpc3Rlcl9kbWFidWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCiYjNDM7CQkJCQkJc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11ID0gTlVMTDsKJiM0MzsJc3RydWN0IGlvX3JlZ2J1Zl9kbWEgKnJlZ2J1ZiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBmaWxlICp0YXJnZXRfZmlsZSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKJiM0MzsJaWYgKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgSU9SSU5HX1NFVFVQX0lPUE9MTCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKJiM0MzsJaWYgKGRlc2MtJmd0O3VhZGRyIHx8IGRlc2MtJmd0O3NpemUpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJcmV0ID0gLUVOT01FTTsKJiM0MzsJbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7CiYjNDM7CWlmICghbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwlpbXUgPSBpb19hbGxvY19pbXUoY3R4LCAwKTsKJiM0MzsJaWYgKCFpbXUpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJcmVnYnVmID0ga3phbGxvYyhzaXplb2YoKnJlZ2J1ZiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJlZ2J1ZikKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXQgPSAtRUJBREY7CiYjNDM7CXRhcmdldF9maWxlID0gZmdldChkZXNjLSZndDt0YXJnZXRfZmQpOwomIzQzOwlpZiAoIXRhcmdldF9maWxlKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGRlc2MtJmd0O2RtYWJ1Zl9mZCk7CiYjNDM7CWlmIChJU19FUlIoZG1hYnVmKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihkbWFidWYpOwomIzQzOwkJZG1hYnVmID0gTlVMTDsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CWlmIChkbWFidWYtJmd0O3NpemUgJmd0OyBTWl8xRykgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtYV9idWZfaW9fY3R4X2NyZWF0ZSh0YXJnZXRfZmlsZSwgJmFtcDtyZWdidWYtJmd0O2N0eCwgZG1hYnVmLAomIzQzOwkJCQkgICAgRE1BX0JJRElSRUNUSU9OQUwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CXJlZ2J1Zi0mZ3Q7dGFyZ2V0X2ZpbGUgPSB0YXJnZXRfZmlsZTsKJiM0MzsJaW11LSZndDtucl9idmVjcyA9IDE7CiYjNDM7CWltdS0mZ3Q7dWJ1ZiA9IDA7CiYjNDM7CWltdS0mZ3Q7bGVuID0gZG1hYnVmLSZndDtzaXplOwomIzQzOwlpbXUtJmd0O2ZvbGlvX3NoaWZ0ID0gMDsKJiM0MzsJaW11LSZndDtyZWxlYXNlID0gaW9fcmVsZWFzZV9yZWdfZG1hYnVmOwomIzQzOwlpbXUtJmd0O3ByaXYgPSByZWdidWY7CiYjNDM7CWltdS0mZ3Q7ZmxhZ3MgPSBJT19SRUdCVUZfRl9ETUFCVUY7CiYjNDM7CWltdS0mZ3Q7ZGlyID0gSU9fSU1VX0RFU1QgfCBJT19JTVVfU09VUkNFOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtpbXUtJmd0O3JlZnMsIDEpOwomIzQzOwlub2RlLSZndDtidWYgPSBpbXU7CiYjNDM7CWRtYV9idWZfcHV0KGRtYWJ1Zik7CiYjNDM7CXJldHVybiBub2RlOwomIzQzO2VycjoKJiM0MzsJa2ZyZWUocmVnYnVmKTsKJiM0MzsJaWYgKGltdSkKJiM0MzsJCWlvX2ZyZWVfaW11KGN0eCwgaW11KTsKJiM0MzsJaWYgKG5vZGUpCiYjNDM7CQlpb19jYWNoZV9mcmVlKCZhbXA7Y3R4LSZndDtub2RlX2NhY2hlLCBub2RlKTsKJiM0MzsJaWYgKHRhcmdldF9maWxlKQomIzQzOwkJZnB1dCh0YXJnZXRfZmlsZSk7CiYjNDM7CWlmIChkbWFidWYpCiYjNDM7CQlkbWFfYnVmX3B1dChkbWFidWYpOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KJiM0MzsKJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAotCQkJCQkJICAgc3RydWN0IGlvdmVjICppb3YpCiYjNDM7CQkJCQkJICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKQogewomIzQzOwl1bnNpZ25lZCBsb25nIHVhZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzYy0mZ3Q7dWFkZHI7CiYjNDM7CXNpemVfdCBzaXplID0gZGVzYy0mZ3Q7c2l6ZTsKIAlzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9IE5VTEw7CiAJc3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7CiAJc3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTsKIAl1bnNpZ25lZCBsb25nIG9mZjsKLQlzaXplX3Qgc2l6ZTsKIAlpbnQgcmV0LCBucl9wYWdlcywgaTsKIAlzdHJ1Y3QgaW9faW11X2ZvbGlvX2RhdGEgZGF0YTsKIAlib29sIGNvYWxlc2NlZCA9IGZhbHNlOwogCi0JaWYgKCFpb3YtJmd0O2lvdl9iYXNlKSB7Ci0JCWlmIChpb3YtJmd0O2lvdl9sZW4pCiYjNDM7CWlmIChkZXNjLSZndDt0eXBlICZndDs9IF9fSU9fUkVHQlVGX1RZUEVfTUFYKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CWlmICghbWVtX2lzX3plcm8oJmFtcDtkZXNjLSZndDtfX3Jlc3YsIHNpemVvZihkZXNjLSZndDtfX3Jlc3YpKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwlpZiAoZGVzYy0mZ3Q7dHlwZSA9PSBJT19SRUdCVUZfVFlQRV9ETUFCVUYpCiYjNDM7CQlyZXR1cm4gaW9fcmVnaXN0ZXJfZG1hYnVmKGN0eCwgZGVzYyk7CiYjNDM7CiYjNDM7CWlmIChkZXNjLSZndDtkbWFidWZfZmQgfHwgZGVzYy0mZ3Q7dGFyZ2V0X2ZkKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CWlmIChkZXNjLSZndDt0eXBlID09IElPX1JFR0JVRl9UWVBFX0VNUFRZKSB7CiYjNDM7CQlpZiAodWFkZHIgfHwgc2l6ZSkKIAkJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCQkvKiByZW1vdmUgdGhlIGJ1ZmZlciB3aXRob3V0IGluc3RhbGxpbmcgYSBuZXcgb25lICovCiAJCXJldHVybiBOVUxMOwogCX0KIAotCXJldCA9IGlvX3ZhbGlkYXRlX3VzZXJfYnVmX3JhbmdlKCh1bnNpZ25lZCBsb25nKWlvdi0mZ3Q7aW92X2Jhc2UsCi0JCQkJCSBpb3YtJmd0O2lvdl9sZW4pOwomIzQzOwlyZXQgPSBpb192YWxpZGF0ZV91c2VyX2J1Zl9yYW5nZSh1YWRkciwgc2l6ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIApAQCAtODgxLDggJiM0MzsxMDExLDcgQEAgc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJcmV0ID0gLUVOT01FTTsKLQlwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LSZndDtpb3ZfYmFzZSwgaW92LSZndDtpb3ZfbGVuLAotCQkJCSZhbXA7bnJfcGFnZXMpOwomIzQzOwlwYWdlcyA9IGlvX3Bpbl9wYWdlcyh1YWRkciwgc2l6ZSwgJmFtcDtucl9wYWdlcyk7CiAJaWYgKElTX0VSUihwYWdlcykpIHsKIAkJcmV0ID0gUFRSX0VSUihwYWdlcyk7CiAJCXBhZ2VzID0gTlVMTDsKQEAgLTkwNCwxMCAmIzQzOzEwMzMsOSBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAlpZiAocmV0KQogCQlnb3RvIGRvbmU7CiAKLQlzaXplID0gaW92LSZndDtpb3ZfbGVuOwogCS8qIHN0b3JlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGxhdGVyIHZlcmlmaWNhdGlvbiAqLwotCWltdS0mZ3Q7dWJ1ZiA9ICh1bnNpZ25lZCBsb25nKSBpb3YtJmd0O2lvdl9iYXNlOwotCWltdS0mZ3Q7bGVuID0gaW92LSZndDtpb3ZfbGVuOwomIzQzOwlpbXUtJmd0O3VidWYgPSB1YWRkcjsKJiM0MzsJaW11LSZndDtsZW4gPSBzaXplOwogCWltdS0mZ3Q7Zm9saW9fc2hpZnQgPSBQQUdFX1NISUZUOwogCWltdS0mZ3Q7cmVsZWFzZSA9IGlvX3JlbGVhc2VfdWJ1ZjsKIAlpbXUtJmd0O3ByaXYgPSBpbXU7CkBAIC05MTcsNyAmIzQzOzEwNDUsNyBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwKIAkJaW11LSZndDtmb2xpb19zaGlmdCA9IGRhdGEuZm9saW9fc2hpZnQ7CiAJcmVmY291bnRfc2V0KCZhbXA7aW11LSZndDtyZWZzLCAxKTsKIAotCW9mZiA9ICh1bnNpZ25lZCBsb25nKWlvdi0mZ3Q7aW92X2Jhc2UgJmFtcDsgflBBR0VfTUFTSzsKJiM0MzsJb2ZmID0gdWFkZHIgJmFtcDsgflBBR0VfTUFTSzsKIAlpZiAoY29hbGVzY2VkKQogCQlvZmYgJiM0Mzs9IGRhdGEuZmlyc3RfZm9saW9fcGFnZV9pZHggJmx0OyZsdDsgUEFHRV9TSElGVDsKIApAQCAtOTY5LDYgJiM0MzsxMDk3LDcgQEAgaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLAogCQltZW1zZXQoaW92LCAwLCBzaXplb2YoKmlvdikpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgZGVzYzsKIAkJc3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTsKIAkJdTY0IHRhZyA9IDA7CiAKQEAgLTk5Miw3ICYjNDM7MTEyMSw4IEBAIGludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZywKIAkJCX0KIAkJfQogCi0JCW5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgaW92KTsKJiM0MzsJCWlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsICZhbXA7ZGVzYyk7CiYjNDM7CQlub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsICZhbXA7ZGVzYyk7CiAJCWlmIChJU19FUlIobm9kZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIobm9kZSk7CiAJCQlicmVhazsKQEAgLTExMzYsOSAmIzQzOzEyNjYsNjQgQEAgc3RhdGljIGludCBpb19pbXBvcnRfa2J1ZihpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlvX2ltcG9ydF9maXhlZChpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAomIzQzO3ZvaWQgaW9fZHJvcF9kbWFidWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11OwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShyZXEtJmd0O2J1Zl9ub2RlLSZndDt0eXBlICE9IElPUklOR19SU1JDX0JVRkZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWltdSA9IHJlcS0mZ3Q7YnVmX25vZGUtJmd0O2J1ZjsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghKGltdS0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHQlVGX0ZfRE1BQlVGKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWRtYV9idWZfaW9fbWFwX2Ryb3AocmVxLSZndDtkbWFidWZfbWFwKTsKJiM0MzsJcmVxLSZndDtmbGFncyAmYW1wOz0gflJFUV9GX0RST1BfRE1BQlVGOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlvX2ltcG9ydF9kbWFidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsCiYjNDM7CQkJICAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKJiM0MzsJCQkgICBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSwKJiM0MzsJCQkgICBzaXplX3QgbGVuLCBzaXplX3Qgb2Zmc2V0LAomIzQzOwkJCSAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvX3JlZ2J1Zl9kbWEgKmRiID0gaW11LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CWlmICghbGVuKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CWlmIChyZXEtJmd0O2ZpbGUgIT0gZGItJmd0O3RhcmdldF9maWxlKQomIzQzOwkJcmV0dXJuIC1FQkFERjsKJiM0MzsKJiM0MzsJaWYgKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfRFJPUF9ETUFCVUYpIHsKJiM0MzsJCW1hcCA9IHJlcS0mZ3Q7ZG1hYnVmX21hcDsKJiM0MzsJCWdvdG8gaW5pdF9pdGVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hcCA9IGRtYV9idWZfaW9fZ2V0X21hcCgmYW1wO2RiLSZndDtjdHgpOwomIzQzOwlpZiAodW5saWtlbHkoIW1hcCkpIHsKJiM0MzsJCWlmICghKGlzc3VlX2ZsYWdzICZhbXA7IElPX1VSSU5HX0ZfSU9XUSkpCiYjNDM7CQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CQltYXAgPSBkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoJmFtcDtkYi0mZ3Q7Y3R4KTsKJiM0MzsJCWlmIChJU19FUlIobWFwKSkKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUihtYXApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7ZG1hYnVmX21hcCA9IG1hcDsKJiM0MzsJcmVxLSZndDtmbGFncyB8PSBSRVFfRl9EUk9QX0RNQUJVRjsKJiM0Mztpbml0X2l0ZXI6CiYjNDM7CWlvdl9pdGVyX2RtYWJ1Zl9tYXAoaXRlciwgZGRpciwgbWFwLCBvZmZzZXQsIGxlbik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlvX2ltcG9ydF9maXhlZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKJiM0MzsJCQkgICBpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJICAgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsCi0JCQkgICB1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4pCiYjNDM7CQkJICAgdTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuLAomIzQzOwkJCSAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLAomIzQzOwkJCSAgIHVuc2lnbmVkIGltcG9ydF9mbGFncykKIHsKIAljb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKIAlzaXplX3QgZm9saW9fbWFzazsKQEAgLTExNTgsNiAmIzQzOzEzNDMsMTIgQEAgc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAogCW9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LSZndDt1YnVmOwogCiYjNDM7CWlmIChpbXUtJmd0O2ZsYWdzICZhbXA7IElPX1JFR0JVRl9GX0RNQUJVRikgewomIzQzOwkJaWYgKCEoaW1wb3J0X2ZsYWdzICZhbXA7IElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJCXJldHVybiBpb19pbXBvcnRfZG1hYnVmKHJlcSwgZGRpciwgaXRlciwgaW11LCBsZW4sIG9mZnNldCwKJiM0MzsJCQkJCWlzc3VlX2ZsYWdzKTsKJiM0MzsJfQogCWlmIChpbXUtJmd0O2ZsYWdzICZhbXA7IElPX1JFR0JVRl9GX0tCVUYpCiAJCXJldHVybiBpb19pbXBvcnRfa2J1ZihkZGlyLCBpdGVyLCBpbXUsIGxlbiwgb2Zmc2V0KTsKIApAQCAtMTIxMSwxNiAmIzQzOzE0MDIsMTcgQEAgaW5saW5lIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX2ZpbmRfYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJcmV0dXJuIE5VTEw7CiB9CiAKLWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLAomIzQzO2ludCBfX2lvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQl1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sIGludCBkZGlyLAotCQkJdW5zaWduZWQgaXNzdWVfZmxhZ3MpCiYjNDM7CQkJdW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncykKIHsKIAlzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlOwogCiAJbm9kZSA9IGlvX2ZpbmRfYnVmX25vZGUocmVxLCBpc3N1ZV9mbGFncyk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gaW9faW1wb3J0X2ZpeGVkKGRkaXIsIGl0ZXIsIG5vZGUtJmd0O2J1ZiwgYnVmX2FkZHIsIGxlbik7CiYjNDM7CXJldHVybiBpb19pbXBvcnRfZml4ZWQocmVxLCBkZGlyLCBpdGVyLCBub2RlLSZndDtidWYsIGJ1Zl9hZGRyLCBsZW4sCiYjNDM7CQkJCWlzc3VlX2ZsYWdzLCBpbXBvcnRfZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGlvX2J1ZmZlcl9hY2N0X2Nsb25lZF9ocGFnZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsCkBAIC0xMzQ3LDYgJiM0MzsxNTM5LDExIEBAIHN0YXRpYyBpbnQgaW9fY2xvbmVfYnVmZmVycyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3JpbmdfY3R4ICpzcmNfY3R4CiAJCWlmICghc3JjX25vZGUpIHsKIAkJCWRzdF9ub2RlID0gTlVMTDsKIAkJfSBlbHNlIHsKJiM0MzsJCQlpZiAoc3JjX25vZGUtJmd0O2J1Zi0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHQlVGX0ZfVU5DTE9ORUFCTEUpIHsKJiM0MzsJCQkJaW9fcnNyY19kYXRhX2ZyZWUoY3R4LCAmYW1wO2RhdGEpOwomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7CiAJCQlpZiAoIWRzdF9ub2RlKSB7CiAJCQkJaW9fcnNyY19kYXRhX2ZyZWUoY3R4LCAmYW1wO2RhdGEpOwpAQCAtMTYxNyw5ICYjNDM7MTgxNCw5IEBAIHN0YXRpYyBpbnQgaW9fa2Vybl9idmVjX3NpemUoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIG5yX2lvdnMsCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAomIzQzO2ludCBfX2lvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQlzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYywKLQkJCXVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzOwkJCXVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpCiB7CiAJc3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTsKQEAgLTE2MzcsNyAmIzQzOzE4MzQsOSBAQCBpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAlpb3ZlY19vZmYgPSB2ZWMtJmd0O25yIC0gbnJfaW92czsKIAlpb3YgPSB2ZWMtJmd0O2lvdmVjICYjNDM7IGlvdmVjX29mZjsKIAotCWlmIChpbXUtJmd0O2ZsYWdzICZhbXA7IElPX1JFR0JVRl9GX0tCVUYpIHsKJiM0MzsJaWYgKGltdS0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHQlVGX0ZfRE1BQlVGKSB7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0gZWxzZSBpZiAoaW11LSZndDtmbGFncyAmYW1wOyBJT19SRUdCVUZfRl9LQlVGKSB7CiAJCWludCByZXQgPSBpb19rZXJuX2J2ZWNfc2l6ZShpb3YsIG5yX2lvdnMsIGltdSwgJmFtcDtucl9zZWdzKTsKIAogCQlpZiAodW5saWtlbHkocmV0KSkKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaAppbmRleCA5OGFlOGVmNTEwMDlkLi4zY2I5YjU3ZjE1OWI2IDEwMDY0NAotLS0gYS9pb191cmluZy9yc3JjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvcnNyYy5oCkBAIC0yOSw3ICYjNDM7MjksMTMgQEAgZW51bSB7CiB9OwogCiBlbnVtIHsKLQlJT19SRUdCVUZfRl9LQlVGCQk9IDEsCiYjNDM7CUlPX1JFR0JVRl9GX0tCVUYJCT0gMSAmbHQ7Jmx0OyAwLAomIzQzOwlJT19SRUdCVUZfRl9VTkNMT05FQUJMRQkJPSAxICZsdDsmbHQ7IDEsCiYjNDM7CUlPX1JFR0JVRl9GX0RNQUJVRgkJPSAxICZsdDsmbHQ7IDMsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJSU9fUkVHQlVGX0lNUE9SVF9BTExPV19ETUFCVUYJCT0gMSAmbHQ7Jmx0OyAxLAogfTsKIAogc3RydWN0IGlvX21hcHBlZF91YnVmIHsKQEAgLTY0LDEyICYjNDM7NzAsMjggQEAgaW50IGlvX3JzcmNfZGF0YV9hbGxvYyhzdHJ1Y3QgaW9fcnNyY19kYXRhICpkYXRhLCB1bnNpZ25lZCBucik7CiAKIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX2ZpbmRfYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJCQkJICAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpOwotaW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiYjNDM7aW50IF9faW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJCXU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsCi0JCQl1bnNpZ25lZCBpc3N1ZV9mbGFncyk7Ci1pbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKJiM0MzsJCQl1bnNpZ25lZCBpc3N1ZV9mbGFncywgdW5zaWduZWQgaW1wb3J0X2ZsYWdzKTsKJiM0MztpbnQgX19pb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsCi0JCQl1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7CiYjNDM7CQkJdW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MsCiYjNDM7CQkJdW5zaWduZWQgaW1wb3J0X2ZsYWdzKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLAomIzQzOwkJCQkgICAgdTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuLCBpbnQgZGRpciwKJiM0MzsJCQkJICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBpdGVyLCBidWZfYWRkciwgbGVuLCBkZGlyLCBpc3N1ZV9mbGFncywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYywKJiM0MzsJCQkJICAgIHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faW9faW1wb3J0X3JlZ192ZWMoZGRpciwgaXRlciwgcmVxLCB2ZWMsIG5yX2lvdnMsIGlzc3VlX2ZsYWdzLCAwKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaW9fcHJlcF9yZWdfaW92ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICppdiwKIAkJCWNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWMsIHNpemVfdCB1dmVjX3NlZ3MpOwogCkBAIC0xNTYsNCAmIzQzOzE3OCwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW9fYWxsb2NfY2FjaGVfdmVjX2thc2FuKHN0cnVjdCBpb3VfdmVjICppdikKIAkJaW9fdmVjX2ZyZWUoaXYpOwogfQogCiYjNDM7dm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX2Ryb3BfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxKQomIzQzO3sKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfRFJPUF9ETUFCVUYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCEocmVxLSZndDtmbGFncyAmYW1wOyBSRVFfRl9CVUZfTk9ERSkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpb19kcm9wX2RtYWJ1Zl9ub2RlKHJlcSk7CiYjNDM7fQomIzQzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pb191cmluZy9ydy5jIGIvaW9fdXJpbmcvcncuYwppbmRleCA5NTAzOGNmZGE2MTUzLi4xMWZmN2I1YTExNjQ3IDEwMDY0NAotLS0gYS9pb191cmluZy9ydy5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3J3LmMKQEAgLTM4MCw4ICYjNDM7MzgwLDggQEAgc3RhdGljIGludCBpb19pbml0X3J3X2ZpeGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MsCiAJaWYgKGlvLSZndDtieXRlc19kb25lKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgJmFtcDtpby0mZ3Q7aXRlciwgcnctJmd0O2FkZHIsIHJ3LSZndDtsZW4sIGRkaXIsCi0JCQkJaXNzdWVfZmxhZ3MpOwomIzQzOwlyZXQgPSBfX2lvX2ltcG9ydF9yZWdfYnVmKHJlcSwgJmFtcDtpby0mZ3Q7aXRlciwgcnctJmd0O2FkZHIsIHJ3LSZndDtsZW4sIGRkaXIsCiYjNDM7CQkJCSAgaXNzdWVfZmxhZ3MsIElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKTsKIAlpb3ZfaXRlcl9zYXZlX3N0YXRlKCZhbXA7aW8tJmd0O2l0ZXIsICZhbXA7aW8tJmd0O2l0ZXJfc3RhdGUpOwogCXJldHVybiByZXQ7CiB9CkBAIC01OTEsNiAmIzQzOzU5MSw4IEBAIHN0YXRpYyB2b2lkIGlvX2NvbXBsZXRlX3J3KHN0cnVjdCBraW9jYiAqa2lvY2IsIGxvbmcgcmVzKQogCXN0cnVjdCBpb19ydyAqcncgPSBjb250YWluZXJfb2Yoa2lvY2IsIHN0cnVjdCBpb19ydywga2lvY2IpOwogCXN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKHJ3KTsKIAomIzQzOwlpb19yZXFfZHJvcF9kbWFidWYocmVxKTsKJiM0MzsKIAlfX2lvX2NvbXBsZXRlX3J3X2NvbW1vbihyZXEsIHJlcyk7CiAJaW9fcmVxX3NldF9yZXMocmVxLCBpb19maXh1cF9yd19yZXMocmVxLCByZXMpLCAwKTsKIAlyZXEtJmd0O2lvX3Rhc2tfd29yay5mdW5jID0gaW9fcmVxX3J3X2NvbXBsZXRlOwpkaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuYwppbmRleCAyNzM5MTliMTYxNjE3Li4xNDZlNWVkODBjN2NkIDEwMDY0NAotLS0gYS9saWIvaW92X2l0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvaW92X2l0ZXIuYwpAQCAtNTc1LDcgJiM0Mzs1NzUsOCBAQCB2b2lkIGlvdl9pdGVyX2FkdmFuY2Uoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3Qgc2l6ZSkKIHsKIAlpZiAodW5saWtlbHkoaS0mZ3Q7Y291bnQgJmx0OyBzaXplKSkKIAkJc2l6ZSA9IGktJmd0O2NvdW50OwotCWlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCB1bmxpa2VseShpb3ZfaXRlcl9pc194YXJyYXkoaSkpKSB7CiYjNDM7CWlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSB8fCB1bmxpa2VseShpb3ZfaXRlcl9pc194YXJyYXkoaSkpIHx8CiYjNDM7CSAgICB1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSkgewogCQlpLSZndDtpb3Zfb2Zmc2V0ICYjNDM7PSBzaXplOwogCQlpLSZndDtjb3VudCAtPSBzaXplOwogCX0gZWxzZSBpZiAobGlrZWx5KGl0ZXJfaXNfaW92ZWMoaSkgfHwgaW92X2l0ZXJfaXNfa3ZlYyhpKSkpIHsKQEAgLTYzMSw3ICYjNDM7NjMyLDggQEAgdm9pZCBpb3ZfaXRlcl9yZXZlcnQoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgdW5yb2xsKQogCQlyZXR1cm47CiAJfQogCXVucm9sbCAtPSBpLSZndDtpb3Zfb2Zmc2V0OwotCWlmIChpb3ZfaXRlcl9pc194YXJyYXkoaSkgfHwgaXRlcl9pc191YnVmKGkpKSB7CiYjNDM7CWlmIChpb3ZfaXRlcl9pc194YXJyYXkoaSkgfHwgaXRlcl9pc191YnVmKGkpIHx8CiYjNDM7CSAgICBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSB7CiAJCUJVRygpOyAvKiBXZSBzaG91bGQgbmV2ZXIgZ28gYmV5b25kIHRoZSBzdGFydCBvZiB0aGUgc3BlY2lmaWVkCiAJCQkqIHJhbmdlIHNpbmNlIHdlIG1pZ2h0IHRoZW4gYmUgc3RyYXlpbmcgaW50byBwYWdlcyB0aGF0CiAJCQkqIGFyZW4mIzM5O3QgcGlubmVkLgpAQCAtNzc1LDYgJiM0Mzs3NzcsMjAgQEAgdm9pZCBpb3ZfaXRlcl94YXJyYXkoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLAogfQogRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl94YXJyYXkpOwogCiYjNDM7dm9pZCBpb3ZfaXRlcl9kbWFidWZfbWFwKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwKJiM0MzsJCQkgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAsCiYjNDM7CQkJIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKJiM0Mzt7CiYjNDM7CVdBUk5fT04oZGlyZWN0aW9uICZhbXA7IH4oUkVBRCB8IFdSSVRFKSk7CiYjNDM7CSppID0gKHN0cnVjdCBpb3ZfaXRlcil7CiYjNDM7CQkuaXRlcl90eXBlID0gSVRFUl9ETUFCVUZfTUFQLAomIzQzOwkJLmRhdGFfc291cmNlID0gZGlyZWN0aW9uLAomIzQzOwkJLmRtYWJ1Zl9tYXAgPSBtYXAsCiYjNDM7CQkuY291bnQgPSBjb3VudCwKJiM0MzsJCS5pb3Zfb2Zmc2V0ID0gb2ZmLAomIzQzOwl9OwomIzQzO30KJiM0MzsKIC8qKgogICogaW92X2l0ZXJfZGlzY2FyZCAtIEluaXRpYWxpc2UgYW4gSS9PIGl0ZXJhdG9yIHRoYXQgZGlzY2FyZHMgZGF0YQogICogQGk6IFRoZSBpdGVyYXRvciB0byBpbml0aWFsaXNlLgpAQCAtODQxLDcgJiM0Mzs4NTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3ZfaXRlcl9hbGlnbm1lbnRfYnZlYyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpCiAKIHVuc2lnbmVkIGxvbmcgaW92X2l0ZXJfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSkKIHsKLQlpZiAobGlrZWx5KGl0ZXJfaXNfdWJ1ZihpKSkpIHsKJiM0MzsJaWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpIHsKIAkJc2l6ZV90IHNpemUgPSBpLSZndDtjb3VudDsKIAkJaWYgKHNpemUpCiAJCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWktJmd0O3VidWYgJiM0MzsgaS0mZ3Q7aW92X29mZnNldCkgfCBzaXplOwpAQCAtODcyLDcgJiM0Mzs4ODgsNyBAQCB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2dhcF9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKQogCXNpemVfdCBzaXplID0gaS0mZ3Q7Y291bnQ7CiAJdW5zaWduZWQgazsKIAotCWlmIChpdGVyX2lzX3VidWYoaSkpCiYjNDM7CWlmIChpdGVyX2lzX3VidWYoaSkgfHwgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoV0FSTl9PTighaXRlcl9pc19pb3ZlYyhpKSkpCkBAIC0xNDY5LDExICYjNDM7MTQ4NSwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChpbXBvcnRfdWJ1Zik7CiB2b2lkIGlvdl9pdGVyX3Jlc3RvcmUoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgaW92X2l0ZXJfc3RhdGUgKnN0YXRlKQogewogCWlmIChXQVJOX09OX09OQ0UoIWlvdl9pdGVyX2lzX2J2ZWMoaSkgJmFtcDsmYW1wOyAhaXRlcl9pc19pb3ZlYyhpKSAmYW1wOyZhbXA7Ci0JCQkgIWl0ZXJfaXNfdWJ1ZihpKSkgJmFtcDsmYW1wOyAhaW92X2l0ZXJfaXNfa3ZlYyhpKSkKJiM0MzsJCQkgIWl0ZXJfaXNfdWJ1ZihpKSAmYW1wOyZhbXA7ICFpb3ZfaXRlcl9pc19rdmVjKGkpICZhbXA7JmFtcDsKJiM0MzsJCQkgIWlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpKQogCQlyZXR1cm47CiAJaS0mZ3Q7aW92X29mZnNldCA9IHN0YXRlLSZndDtpb3Zfb2Zmc2V0OwogCWktJmd0O2NvdW50ID0gc3RhdGUtJmd0O2NvdW50OwotCWlmIChpdGVyX2lzX3VidWYoaSkpCiYjNDM7CWlmIChpdGVyX2lzX3VidWYoaSkgfHwgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpKSkKIAkJcmV0dXJuOwogCS8qCiAJICogRm9yIHRoZSAqdmVjIGl0ZXJzLCBucl9zZWdzICYjNDM7IGlvdiBpcyBjb25zdGFudCAtIGlmIHdlIGluY3JlbWVudApAQCAtMTYyNSw3ICYjNDM7MTY0Miw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksCiAJfQogCWJpLmJpX2lkeCA9IDA7CiAJYmkuYmlfc2l6ZSA9IG1heHNpemU7Ci0JYmkuYmlfYnZlY19kb25lID0gc2tpcDsKJiM0MzsJYmkuYmlfb2Zmc2V0ID0gc2tpcDsKIAogCW1heHBhZ2VzID0gd2FudF9wYWdlc19hcnJheShwYWdlcywgbWF4c2l6ZSwgc2tpcCwgbWF4cGFnZXMpOwogCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXIuYyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCmluZGV4IDM0YjMwOTdiNGM3YjkuLjljMWI2Y2Y4YzM2ZmUgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCkBAIC03NjIsNyAmIzQzOzc2Miw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYmlvX2FkdmFuY2Uoc3RydWN0IGNlcGhfbXNnX2RhdGFfY3Vyc29yICpjdXJzb3IsCiAJaWYgKCFjdXJzb3ItJmd0O3Jlc2lkKQogCQlyZXR1cm4gZmFsc2U7ICAgLyogbm8gbW9yZSBkYXRhICovCiAKLQlpZiAoIWJ5dGVzIHx8IChpdC0mZ3Q7aXRlci5iaV9zaXplICZhbXA7JmFtcDsgaXQtJmd0O2l0ZXIuYmlfYnZlY19kb25lICZhbXA7JmFtcDsKJiM0MzsJaWYgKCFieXRlcyB8fCAoaXQtJmd0O2l0ZXIuYmlfc2l6ZSAmYW1wOyZhbXA7IGl0LSZndDtpdGVyLmJpX29mZnNldCAmYW1wOyZhbXA7CiAJCSAgICAgICBwYWdlID09IGJpb19pdGVyX3BhZ2UoaXQtJmd0O2JpbywgaXQtJmd0O2l0ZXIpKSkKIAkJcmV0dXJuIGZhbHNlOwkvKiBtb3JlIGJ5dGVzIHRvIHByb2Nlc3MgaW4gdGhpcyBzZWdtZW50ICovCiAKQEAgLTgxNyw3ICYjNDM7ODE3LDcgQEAgc3RhdGljIGJvb2wgY2VwaF9tc2dfZGF0YV9idmVjc19hZHZhbmNlKHN0cnVjdCBjZXBoX21zZ19kYXRhX2N1cnNvciAqY3Vyc29yLAogCWlmICghY3Vyc29yLSZndDtyZXNpZCkKIAkJcmV0dXJuIGZhbHNlOyAgIC8qIG5vIG1vcmUgZGF0YSAqLwogCi0JaWYgKCFieXRlcyB8fCAoY3Vyc29yLSZndDtidmVjX2l0ZXIuYmlfYnZlY19kb25lICZhbXA7JmFtcDsKJiM0MzsJaWYgKCFieXRlcyB8fCAoY3Vyc29yLSZndDtidmVjX2l0ZXIuYmlfb2Zmc2V0ICZhbXA7JmFtcDsKIAkJICAgICAgIHBhZ2UgPT0gYnZlY19pdGVyX3BhZ2UoYnZlY3MsIGN1cnNvci0mZ3Q7YnZlY19pdGVyKSkpCiAJCXJldHVybiBmYWxzZTsJLyogbW9yZSBieXRlcyB0byBwcm9jZXNzIGluIHRoaXMgc2VnbWVudCAqLwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NDczCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERNQS1CdWYgSW50ZWdyYXRpb24gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IGludGVncmF0ZXMgRE1BLWJ1ZiBzdXBwb3J0IHdpdGggaW9fdXJpbmcgYW5kIE5WTWUuICBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IHRvdWNoZXMgc29tZSBjcml0aWNhbCBhcmVhczogdGhlIGJsb2NrIGxheWVyLCB0aGUgTlZNZSBkcml2ZXIgaXRzZWxmLCBpb191cmluZywgYW5kIHRoZSBkbWEtYnVmIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgYWJzb2x1dGVseSBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLiAgVGhlcmUmIzM5O3MgYSBsb3Qgb2YgcG90ZW50aWFsIGZvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIGFuZCBlZGdlIGNhc2VzIGhlcmUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlcyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIG5ldyBzdHJ1Y3R1cmVzIGxpa2UgYGRtYV9idWZfaW9fY3R4YCBhbmQgZnVuY3Rpb25zIHN1Y2ggYXMgYGRtYV9idWZfaW9fbWFwYC4gV2UmIzM5O3JlIGFkZGluZyBhbiBgaW5pdF9kbWFfYnVmX2lvX2N0eGAgbWV0aG9kIHRvIGBmaWxlX29wZXJhdGlvbnNgIGFuZCBgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnNgLCB3aGljaCBpcyBhIGtleSBpbnRlZ3JhdGlvbiBwb2ludC4gVGhlIGBzdHJ1Y3QgYmlvYCBoYXMgYmVlbiBtb2RpZmllZCB0byBzdXBwb3J0IGBiaV9kbWFidWZfbWFwYCwgYW5kIGEgbmV3IGBSRVFfRE1BQlVGYCByZXF1ZXN0IHR5cGUgaXMgYmVpbmcgaW50cm9kdWNlZC4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIHRoZSBgc3RydWN0IGlvdl9pdGVyYCBiZWluZyB1cGRhdGVkIHdpdGggYElURVJfRE1BQlVGX01BUGAsIGluZGljYXRpbmcgRE1BLWJ1ZiBzdXBwb3J0IGZvciBzY2F0dGVyLWdhdGhlciBsaXN0cy4gVGhlIGlvX3VyaW5nIGNoYW5nZXMgYXJlIGludGVyZXN0aW5nLCBhbGxvd2luZyBmb3IgcmVnaXN0cmF0aW9uIGFuZCBpbXBvcnRpbmcgb2YgZG1hYnVmcyB3aXRoIGBJT19SRUdCVUZfVFlQRV9ETUFCVUZgLiAgRmluYWxseSwgdGhlIE5WTWUgZHJpdmVyIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGZvY3VzZWQgb24gaW5jb3Jwb3JhdGluZyB0aGUgYGluaXRfZG1hX2J1Zl9pb19jdHhgIGZ1bmN0aW9uIGFuZCBoYW5kbGluZyB0aG9zZSBgUkVRX0RNQUJVRmAgYmlvcy4KCkdpdmVuIHRoZSBzY29wZSwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiAgSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhlc2UgYXJlYXM6CgoqICAgKippb191cmluZyAocnNyYy5jKToqKiAgYGlvX3JlZ2lzdGVyX2RtYWJ1ZmAsIGBpb19pbXBvcnRfZG1hYnVmYCwgYW5kIGBpb19kcm9wX2RtYWJ1Zl9ub2RlYCBhcmUgYWxsIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0cy4gIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciBkbWFidWYgaW50ZWdyYXRpb24gd2l0aGluIGlvX3VyaW5nLgoqICAgKipOVk1lIChkcml2ZXJzL252bWUvaG9zdC9wY2kuYyk6KiogIFRoZSBOVk1lIHNpZGUgaXMganVzdCBhcyBjcml0aWNhbDogSSBuZWVkIHRvIGZvY3VzIG9uIGBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXBgLCBgbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsYCwgYG52bWVfcGNpX2RtYWJ1Zl9zZ2xfbmVudHNgLCBgbnZtZV9kbWFfYnVmX2lvX21hcGAsIGBudm1lX2RtYV9idWZfaW9fdW5tYXBgLCBhbmQgYG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHhgLiAgVGhlc2UgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiBETUEgbWFwcGluZywgc2NhdHRlci1nYXRoZXIgbGlzdCBzZXR1cCwgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBOVk1lIGRyaXZlci4KKiAgICoqZG1hLWJ1ZiAoZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYyk6KiogIEluIHRoZSBkbWEtYnVmIHN1YnN5c3RlbSBpdHNlbGYsIGZ1bmN0aW9ucyBsaWtlIGBkbWFfYnVmX2lvX2luaXRfbWFwYCwgYGRtYV9idWZfaW9fY3JlYXRlX21hcGAsIGBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3NgLCBgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZWAsIGFuZCBgZG1hX2J1Zl9pb19jdHhfY3JlYXRlYCBuZWVkIHRvIGJlIHNjcnV0aW5pemVkIGZvciB0aGVpciBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgYmVoYXZpb3VyLgoKQmVmb3JlIEkgZXZlbiBiZWdpbiBmdXp6aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIHZlcmlmeSB0aGUgZW5hYmxpbmcgZGVwZW5kZW5jaWVzOiBgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSYCBpcyByZXF1aXJlZC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19OVk1FX0NPUkVgIGFuZCBgQ09ORklHX0JMS19ERVZfTlZNRWAgYXJlIGVuYWJsZWQgZm9yIE5WTWUgUENJLCBhbmQgb2J2aW91c2x5IGBDT05GSUdfSU9fVVJJTkdgIGlzIGNyaXRpY2FsIGZvciB0aGlzIHBhdGNoIHNlcmllcy4gSSYjMzk7bGwgdXNlIHNvbWUgdG9vbHMgdG8gdmVyaWZ5IHRoZXNlIG9wdGlvbnMgYXJlIHNldCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9LY29uZmlnPTIxMz1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTQtXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU5MjYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBETUEtQlVGIE1ha2VmaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBETUEtQlVGIGZyYW1ld29yay4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIGBkcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVgIGZpbGUgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzdWJzeXN0ZW0uIFRoYXQgTWFrZWZpbGUgaXMgbGlrZWx5IHRoZSBsaW5jaHBpbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHZhcmlvdXMgRE1BLUJVRiBjb21wb25lbnRzIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gSXQgc2hvdWxkIHJldmVhbCB0aGluZ3MgbGlrZSB3aGF0IGRyaXZlcnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgaG93IHRoZXkmIzM5O3JlIGJ1aWx0LCBhbnkgbmVjZXNzYXJ5IGluY2x1ZGUgcGF0aHMsIGFuZCBwb3RlbnRpYWxseSBhbnkgc3BlY2lhbCBjb21waWxhdGlvbiBmbGFncy4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGRpc3NlY3RpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIERNQS1CVUYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1hLWJ1Zi1pby5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZT0yPW9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcXFxuZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlOjM6XHQgZG1hLWZlbmNlLXVud3JhcC5vIGRtYS1yZXN2Lm8gZG1hLWJ1Zi1tYXBwaW5nLm8gZG1hLWJ1Zi1pby5vXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUtNC1vYmotJChDT05GSUdfRE1BQlVGX0hFQVBTKVx0JiM0Mzs9IGRtYS1oZWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjI1NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcyBpcyBjZW50ZXJlZCBhcm91bmQgdGhlIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcyBvZiBgZG1hLWJ1Zi1pby5vYC4gSSYjMzk7bSBvYnNlcnZpbmcgdGhhdCBpdHMgb2JqZWN0IGZpbGUsIGBkbWEtYnVmLWlvLm9gLCBpcyBidWlsdCBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IGEgY29uZGl0aW9uYWwgY2hlY2ssIGFzIGxvbmcgYXMgdGhlIHBhcmVudCBkaXJlY3RvcnksIGBkcml2ZXJzL2RtYS1idWZgLCBpcyBjb21waWxlZC4KCioqSW52ZXN0aWdhdGluZyBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKgoKU28sIHRoZSBrZXkgaGVyZSBpcyB0byBjb25maXJtIHRoaXMgaW4gdGhlIGBkcml2ZXJzL01ha2VmaWxlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBkbWEtYnVmYCBwcmVzZW5jZSB0cmlnZ2VycyB0aGUgYnVpbGQgb2YgYGRtYS1idWYtaW8ub2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgdmFyaWFibGUgb3IgZGVwZW5kZW5jeSBkZWZpbml0aW9uIGluIHRoYXQgTWFrZWZpbGUgZ292ZXJucyB0aGlzIGJlaGF2aW9yLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBNYWtlZmlsZSBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIGNvbnN0cnVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhIG1vcmUgc3VidGxlIGRlcGVuZGVuY3kgb3IgYSBjb25kaXRpb25hbCBjb25zdHJ1Y3Qgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIHByb2Nlc3MuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBoYXBwZW5zIGJ5IGRlZmF1bHQgc28gSSBhbSBjb25maXJtaW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qZG1hLWJ1ZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL01ha2VmaWxlPTc4PW9iai15XHRcdFx0XHQmIzQzOz0gZGF4L1xuZHJpdmVycy9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpICYjNDM7PSBkbWEtYnVmL1xuZHJpdmVycy9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfTlVCVVMpXHRcdCYjNDM7PSBudWJ1cy9cbi0tXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZToyOm9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcXFxuZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlLTMtXHQgZG1hLWZlbmNlLXVud3JhcC5vIGRtYS1yZXN2Lm8gZG1hLWJ1Zi1tYXBwaW5nLm8gZG1hLWJ1Zi1pby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3MDQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBOVk1lIENvbXBhdGliaWxpdHkgZm9yIFNoYXJlZCBETUEgQnVmZmVycyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyB0byBtZSB0aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgc29ydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBkaXJlY3QgbWVtb3J5IGFjY2Vzcy4gVGhlIGltbWVkaWF0ZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHdlJiMzOTtyZSBwcm9iYWJseSB0cnlpbmcgdG8gZmFjaWxpdGF0ZSB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvciBvcHRpbWl6ZSBkYXRhIHRyYW5zZmVyIGJldHdlZW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGJldHdlZW4gYSBkZXZpY2UgYW5kIHRoZSBob3N0IENQVSBvciBiZXR3ZWVuIG11bHRpcGxlIGRldmljZXMuCgpTaW5jZSB3ZSBuZWVkIGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd2lsbCBpbnRlcmFjdCB3aXRoIGBDT05GSUdfQkxLX0RFVl9OVk1FYC4gTm93IHRoZSBtb3N0IGxpa2VseSByZWFzb24gaXMgd2UgbmVlZCB0byBrbm93IHRoZSBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbiBvZiBOVk1lIGRpc2tzLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGUgTlZNZSBkcml2ZXIsIG9yIGl0cyBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlLCBwbGF5cyBuaWNlbHkgd2l0aCB0aGUgc2hhcmVkIGJ1ZmZlciBjb25jZXB0LiBEb2VzIGl0IHVzZSBETUE/IERvZXMgaXQgYWxyZWFkeSBoYXZlIGl0cyBvd24gYnVmZmVyaW5nIG1lY2hhbmlzbXMgdGhhdCBtaWdodCBjb25mbGljdD8gQXJlIHRoZXJlIGFueSBrbm93biBpc3N1ZXMgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbmVlZGVkIHdoZW4gdXNpbmcgYm90aD8gVGhpcyBjaGVjayBpcyBjcnVjaWFsIGZvciBhdm9pZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGV2ZW4gc3lzdGVtIGluc3RhYmlsaXR5LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgTlZNZSBzdWJzeXN0ZW0gaXMgYWxyZWFkeSBoYW5kbGluZyBETUEgaW4gYSB3YXkgdGhhdOKAmXMgY29tcGF0aWJsZSwgb3IgaWYgbW9kaWZpY2F0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGVuc3VyZSBwcm9wZXIgaW50ZWdyYXRpb24gd2l0aCBzaGFyZWQgYnVmZmVycy4gSXQgaXMgYSB2ZXJ5IGltcG9ydGFudCBjb25maWd1cmF0aW9uIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX05WTUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZz0yPWNvbmZpZyBOVk1FX0NPUkVcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnLTQtXG5kcml2ZXJzL252bWUvaG9zdC9LY29uZmlnOjU6Y29uZmlnIEJMS19ERVZfTlZNRVxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7TlZNIEV4cHJlc3MgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTMyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBgQ09ORklHX0lPX1VSSU5HYCoqCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYENPTkZJR19JT19VUklOR2AuIFdlIGtub3cgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gbGV2ZXJhZ2luZyB0aGUga2VybmVsJiMzOTtzIGlvX3VyaW5nIGludGVyZmFjZSwgYW5kIHdpdGhvdXQgaXQgZW5hYmxlZCwgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpcyBtb290LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBlaXRoZXIgYnVpbHQtaW4gKGxpa2VseSwgZ2l2ZW4gdGhlIGNvbnRleHQpIG9yIGF0IGxlYXN0IGNvbmZpZ3VyZWQgYXMgYSBtb2R1bGUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIHNob3VsZCBzdWZmaWNlLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgaXTigJlzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCB0aGVzZSBkYXlzLCBidXQgaXTigJlzIGFsd2F5cyBiZXR0ZXIgdG8gcnVsZSBvdXQgdGhlIGJhc2ljIHRoaW5ncyBmaXJzdC4gVGhhdCB3YXkgSSBkb24mIzM5O3Qgd2FzdGUgdGltZSB0cm91Ymxlc2hvb3RpbmcgYmFzZWQgb24gYXNzdW1wdGlvbnMuIEFscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBzaG93cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1VSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTA3PWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkxNC1cbmluaXQvS2NvbmZpZzoxOTE1OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MTYtXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTI0PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTkzNi1cbmluaXQvS2NvbmZpZzoxOTM3OmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTM4LVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc2NDgKCQkJCQkJCW91dHB1dDogMTgxCgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IE5WTWUgZG1hYnVmIEludmVzdGlnYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYmV5b25kIHRoZSBvYnZpb3VzLiBBaCwgaGVyZSB3ZSBnbywgbG9va2luZyBpbnRvIHRoZSBgZHJpdmVycy9udm1lL2hvc3QvcGNpLmNgIGZpbGUgcmV2ZWFscyB0aGF0IGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgcmVxdWlyZW1lbnQgZm9yIE5WTWUgZG1hYnVmIHN1cHBvcnQuIEdvb2QgdG8ga25vdywgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiB3aXRoaW4gdGhpcyBOVk1lIGRtYWJ1ZiBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7dmUgZ290IGEgbGlzdCBoZXJlOgoKKiAgIGBkbWFfYnVmX2lvX2luaXRfbWFwYAoqICAgYGRtYV9idWZfaW9fY3JlYXRlX21hcGAKKiAgIGBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3NgCiogICBgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZWAKKiAgIGBkbWFfYnVmX2lvX2N0eF9jcmVhdGVgCiogICBgbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwYAoqICAgYG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbGAKKiAgIGBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzYAoqICAgYG52bWVfZG1hX2J1Zl9pb19tYXBgCiogICBgbnZtZV9kbWFfYnVmX2lvX3VubWFwYAoqICAgYG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHhgCiogICBgaW9fcmVnaXN0ZXJfZG1hYnVmYAoqICAgYGlvX2ltcG9ydF9kbWFidWZgCiogICBgaW9fZHJvcF9kbWFidWZfbm9kZWAKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGV4aXN0IGluIHRoZSBjb2RlIGJhc2UgYW5kIGFyZW4mIzM5O3QganVzdCBkZWZpbmVkIGFzIHN0YXRpYyBpbmxpbmUuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgcmVhbCB0aGluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoZG1hX2J1Zl9pb19pbml0X21hcHxkbWFfYnVmX2lvX2NyZWF0ZV9tYXB8ZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzfGRtYV9idWZfaW9fY3R4X3JlbGVhc2V8ZG1hX2J1Zl9pb19jdHhfY3JlYXRlfG52bWVfcnFfc2V0dXBfZG1hYnVmX21hcHxudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2x8bnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50c3xudm1lX2RtYV9idWZfaW9fbWFwfG52bWVfZG1hX2J1Zl9pb191bm1hcHxudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4fGlvX3JlZ2lzdGVyX2RtYWJ1Znxpb19pbXBvcnRfZG1hYnVmfGlvX2Ryb3BfZG1hYnVmX25vZGUpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmM9ODY9c3RhdGljIHZvaWQgZG1hX2J1Zl9pb19tYXBfcmVmc19yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy05NC1cbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmM6OTU6aW50IGRtYV9idWZfaW9faW5pdF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy05Ni17XG4tLVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0xMTYtfVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYzoxMTc6RVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9pb19pbml0X21hcCwgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTExOC1cbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmM6MTE5OnN0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0xMjAte1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmM9MTY5PXN0YXRpYyB2b2lkIGRtYV9idWZfaW9fZHJvcF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4tLVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yMDItXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jOjIwMzp2b2lkIGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMtMjA0LXtcbi0tXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTIwNi19XG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jOjIwNzpFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MsIFwmIzM0O0RNQV9CVUZcJiMzNDspO1xuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yMDgtXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jOjIwOTpzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yMTAte1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMtMjMzLVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYzoyMzQ6dm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yMzUte1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMtMjM5LVx0ICovXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jOjI0MDpcdElOSVRfV09SSyhcdTAwMjZjdHgtXHUwMDNlcmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmspO1xuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yNDEtXHRxdWV1ZV93b3JrKHN5c3RlbV93cSwgXHUwMDI2Y3R4LVx1MDAzZXJlbGVhc2Vfd29yayk7XG4tLVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yNDMtXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jOjI0NDppbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yNDUtXHRcdFx0ICAgc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9OTIxPXN0YXRpYyB2b2lkIG52bWVfcnFfY2xlYW5fZG1hYnVmX21hcChzdHJ1Y3QgbnZtZV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy05MzEtXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzo5MzI6c3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAoc3RydWN0IHJlcXVlc3QgKnJlcSxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTkzMy1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MTMwND1zdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X3NlZyhzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTEzMTEtXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxMzEyOnN0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTMxMy1cdFx0XHRcdFx0ICAgICAgZG1hX2FkZHJfdCAqZmlyc3RfZG1hLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTEzNzEtXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxMzcyOnN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xMzczLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYz0xNTQ5PXN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9tYXBfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTE1NjMtXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxNTY0Olx0XHRcdGVudHJpZXMgPSBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzKHJlcSwgXHUwMDI2Zmlyc3RfZG1hLFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTU2NS1cdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZmaXJzdF9sZW4pO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTE1NjctXHRcdFx0aWYgKHVzZV9zZ2wgPT0gU0dMX0ZPUkNFRCkge1xuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MTU2ODpcdFx0XHRcdHJldCA9IG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChyZXEsIG52bWVxLFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTU2OS1cdFx0XHRcdFx0XHRcdFx0ZW50cmllcywgZmlyc3RfZG1hLCBmaXJzdF9sZW4pO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTE1NzUtXHRcdFx0ICAgIHNnbF90aHJlc2hvbGQpIHtcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjE1NzY6XHRcdFx0XHRyZXQgPSBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2wocmVxLCBudm1lcSxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTE1NzctXHRcdFx0XHRcdFx0XHRcdGVudHJpZXMsIGZpcnN0X2RtYSwgZmlyc3RfbGVuKTtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xNTgyLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MTU4MzpcdFx0cmV0dXJuIG52bWVfcnFfc2V0dXBfZG1hYnVmX21hcChyZXEsIG52bWVxKTtcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTE1ODQtXHR9XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MjYwNT1zdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNjA4LVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MjYwOTpcdGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhjdHgpO1xuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjYxMC19XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MjYxMj1jb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG52bWVfZG1hYnVmX2ltcG9ydGVyX29wcyA9IHtcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNjE2LVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MjYxNzpzdGF0aWMgc3RydWN0IGRtYV9idWZfaW9fbWFwICpudm1lX2RtYV9idWZfaW9fbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjYxOC17XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjY1NS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjI2NTY6XHRyZXQgPSBkbWFfYnVmX2lvX2luaXRfbWFwKGN0eCwgXHUwMDI2bWFwLVx1MDAzZWJhc2UpO1xuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjY1Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjY2OC1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjI2Njk6c3RhdGljIHZvaWQgbnZtZV9kbWFfYnVmX2lvX3VubWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjY3MC1cdFx0XHRcdCAgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXBfYmFzZSlcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYz0yNjg3PWNvbnN0IHN0cnVjdCBkbWFfYnVmX2lvX29wcyBudm1lX2RtYV9idWZfaW9fb3BzID0ge1xuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MjY4ODpcdC5tYXBcdFx0PSBudm1lX2RtYV9idWZfaW9fbWFwLFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MjY4OTpcdC51bm1hcFx0XHQ9IG52bWVfZG1hX2J1Zl9pb191bm1hcCxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI2OTAtXHQucmVsZWFzZVx0PSBudm1lX2RtYV9idWZfaW9fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNjkyLVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MjY5MzpzdGF0aWMgaW50IG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IG52bWVfY3RybCAqY3RybCxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI2OTQtXHRcdFx0XHRcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTM5ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBudm1lX2N0cmxfb3BzIG52bWVfcGNpX2N0cmxfb3BzID0ge1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTQwMDQtI2lmIGRlZmluZWQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKVxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6NDAwNTpcdC5pbml0X2RtYV9idWZfaW9fY3R4XHQ9IG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHgsXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy00MDA2LSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oPTQzPXN0cnVjdCBkbWFfYnVmX2lvX2N0eCB7XG4tLVxuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmgtNTYtXG5pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaDo1NzppbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmgtNTgtXHRcdFx0ICAgc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsXG4tLVxuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmgtNjAtXHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTtcbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oOjYxOnZvaWQgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XG5pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaC02Mi1cbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oOjYzOnN0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oLTY0LVxuLS1cbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oPTc5PXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfYnVmX2lvX21hcF9kcm9wKHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxuLS1cbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oLTg3LVxuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmg6ODg6dm9pZCBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmg6ODk6aW50IGRtYV9idWZfaW9faW5pdF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKTtcbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oLTkwLVxuLS1cbmlvX3VyaW5nL3JzcmMuYz04OTA9c3RhdGljIHZvaWQgaW9fcmVsZWFzZV9yZWdfZG1hYnVmKHZvaWQgKnByaXYpXG4tLVxuaW9fdXJpbmcvcnNyYy5jLTg5NC1cdGZwdXQoZGItXHUwMDNldGFyZ2V0X2ZpbGUpO1xuaW9fdXJpbmcvcnNyYy5jOjg5NTpcdGRtYV9idWZfaW9fY3R4X3JlbGVhc2UoXHUwMDI2ZGItXHUwMDNlY3R4KTtcbmlvX3VyaW5nL3JzcmMuYy04OTYtfVxuaW9fdXJpbmcvcnNyYy5jLTg5Ny1cbmlvX3VyaW5nL3JzcmMuYzo4OTg6c3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3JlZ2lzdGVyX2RtYWJ1ZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbmlvX3VyaW5nL3JzcmMuYy04OTktXHRcdFx0XHRcdFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKVxuLS1cbmlvX3VyaW5nL3JzcmMuYy05NDEtXG5pb191cmluZy9yc3JjLmM6OTQyOlx0cmV0ID0gZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHRhcmdldF9maWxlLCBcdTAwMjZyZWdidWYtXHUwMDNlY3R4LCBkbWFidWYsXG5pb191cmluZy9yc3JjLmMtOTQzLVx0XHRcdFx0ICAgIERNQV9CSURJUkVDVElPTkFMKTtcbi0tXG5pb191cmluZy9yc3JjLmM9OTc0PXN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JzcmMuYy05OTItXHRpZiAoZGVzYy1cdTAwM2V0eXBlID09IElPX1JFR0JVRl9UWVBFX0RNQUJVRilcbmlvX3VyaW5nL3JzcmMuYzo5OTM6XHRcdHJldHVybiBpb19yZWdpc3Rlcl9kbWFidWYoY3R4LCBkZXNjKTtcbmlvX3VyaW5nL3JzcmMuYy05OTQtXG4tLVxuaW9fdXJpbmcvcnNyYy5jPTEyNTk9c3RhdGljIGludCBpb19pbXBvcnRfa2J1ZihpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xMjY4LVxuaW9fdXJpbmcvcnNyYy5jOjEyNjk6dm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvcnNyYy5jLTEyNzAte1xuLS1cbmlvX3VyaW5nL3JzcmMuYy0xMjgzLVxuaW9fdXJpbmcvcnNyYy5jOjEyODQ6c3RhdGljIGludCBpb19pbXBvcnRfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvcnNyYy5jLTEyODUtXHRcdFx0ICAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5pb191cmluZy9yc3JjLmMtMTMwOC1cdFx0XHRyZXR1cm4gLUVBR0FJTjtcbmlvX3VyaW5nL3JzcmMuYzoxMzA5Olx0XHRtYXAgPSBkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoXHUwMDI2ZGItXHUwMDNlY3R4KTtcbmlvX3VyaW5nL3JzcmMuYy0xMzEwLVx0XHRpZiAoSVNfRVJSKG1hcCkpXG4tLVxuaW9fdXJpbmcvcnNyYy5jPTEzMjE9c3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4tLVxuaW9fdXJpbmcvcnNyYy5jLTEzNDgtXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG5pb191cmluZy9yc3JjLmM6MTM0OTpcdFx0cmV0dXJuIGlvX2ltcG9ydF9kbWFidWYocmVxLCBkZGlyLCBpdGVyLCBpbXUsIGxlbiwgb2Zmc2V0LFxuaW9fdXJpbmcvcnNyYy5jLTEzNTAtXHRcdFx0XHRcdGlzc3VlX2ZsYWdzKTtcbi0tXG5pb191cmluZy9yc3JjLmg9MTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBpb19hbGxvY19jYWNoZV92ZWNfa2FzYW4oc3RydWN0IGlvdV92ZWMgKml2KVxuLS1cbmlvX3VyaW5nL3JzcmMuaC0xODAtXG5pb191cmluZy9yc3JjLmg6MTgxOnZvaWQgaW9fZHJvcF9kbWFidWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSk7XG5pb191cmluZy9yc3JjLmgtMTgyLVxuaW9fdXJpbmcvcnNyYy5oPTE4Mz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX2Ryb3BfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL3JzcmMuaC0xOTAtXHRcdHJldHVybjtcbmlvX3VyaW5nL3JzcmMuaDoxOTE6XHRpb19kcm9wX2RtYWJ1Zl9ub2RlKHJlcSk7XG5pb191cmluZy9yc3JjLmgtMTkyLX1cbi0tXG5pb191cmluZy96Y3J4LmM9MTEyPXN0YXRpYyB2b2lkIGlvX3JlbGVhc2VfZG1hYnVmKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxuLS1cbmlvX3VyaW5nL3pjcnguYy0xMjktXG5pb191cmluZy96Y3J4LmM6MTMwOnN0YXRpYyBpbnQgaW9faW1wb3J0X2RtYWJ1ZihzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcbmlvX3VyaW5nL3pjcnguYy0xMzEtXHRcdFx0ICAgIHN0cnVjdCBpb196Y3J4X21lbSAqbWVtLFxuLS1cbmlvX3VyaW5nL3pjcnguYz0yNjg9c3RhdGljIGludCBpb19pbXBvcnRfYXJlYShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcbi0tXG5pb191cmluZy96Y3J4LmMtMjg3LVx0aWYgKGFyZWFfcmVnLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfWkNSWF9BUkVBX0RNQUJVRilcbmlvX3VyaW5nL3pjcnguYzoyODg6XHRcdHJldHVybiBpb19pbXBvcnRfZG1hYnVmKGlmcSwgbWVtLCBhcmVhX3JlZyk7XG5pb191cmluZy96Y3J4LmMtMjg5LVx0cmV0dXJuIGlvX2ltcG9ydF91bWVtKGlmcSwgbWVtLCBhcmVhX3JlZyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDAzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjg2CgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBETUEtQlVGIFJlbGF0ZWQgQVBJIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVudW1lcmF0ZSB0aGUgcmVsZXZhbnQgRE1BLUJVRiBBUEkgZW50cnlwb2ludHMuIFRoZSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGZpbHRlciBvdXQgdGhlIHN0YXRpYyBhbmQgaW5saW5lZCBmdW5jdGlvbnMuIEJ1dCBJIG5lZWQgdG8gcmVmaW5lIHRoYXQgYmVjYXVzZSBldmVuIGlmIGEgZnVuY3Rpb24gaXMgc3RhdGljLCBpdCBjYW4gc3RpbGwgYmUgYSBjcml0aWNhbCBBUEkgZW50cnlwb2ludCB3aGVuIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gb3BzLgoKSW5pdGlhbGx5LCBJIGlkZW50aWZpZWQgdGhlc2Ugbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzOgoqICAgYGRtYV9idWZfaW9faW5pdF9tYXBgCiogICBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYAoqICAgYGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc2AKKiAgIGBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlYAoqICAgYGRtYV9idWZfaW9fY3R4X2NyZWF0ZWAKKiAgIGBpb19kcm9wX2RtYWJ1Zl9ub2RlYAoKVGhlbiBJIGNvbnNpZGVyZWQgTlZNZSBhbmQgcmVhbGl6ZWQgaXRzIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBidXQgcmVnaXN0ZXJlZCBhcyBvcHMuIEFsdGhvdWdoIGBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXBgIGlzIHN0YXRpYywgaXQmIzM5O3Mgc3RpbGwgc2lnbmlmaWNhbnQuCgpJIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhlIHN0YXRpYyBhc3BlY3QuIEZvciB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCBJIHNlZSB0aGF0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cywgYGlvX3JlZ2lzdGVyX2RtYWJ1ZmAgYW5kIGBpb19pbXBvcnRfZG1hYnVmYCwgYXJlIHN0YXRpYy4gSG93ZXZlciwgdGhlaXIgY29yZSBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUgZ2xvYmFsIGhlbHBlciBmdW5jdGlvbnMgYF9faW9faW1wb3J0X3JlZ19idWZgLCBgX19pb19pbXBvcnRfcmVnX3ZlY2AgYW5kIGBpb19zcWVfYnVmZmVyc19yZWdpc3RlcmAuIFNvIEkgc2hvdWxkIGxpc3QgdGhlbS4KClRoZXJlZm9yZSwgbXkgZmluYWwgbGlzdCBvZiBlbnRyeXBvaW50cyBpczoKCiogICBgZG1hX2J1Zl9pb19pbml0X21hcGAKKiAgIGBkbWFfYnVmX2lvX2NyZWF0ZV9tYXBgCiogICBgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzYAoqICAgYGRtYV9idWZfaW9fY3R4X3JlbGVhc2VgCiogICBgZG1hX2J1Zl9pb19jdHhfY3JlYXRlYAoqICAgYGlvX2Ryb3BfZG1hYnVmX25vZGVgCiogICBgX19pb19pbXBvcnRfcmVnX2J1ZmAKKiAgIGBfX2lvX2ltcG9ydF9yZWdfdmVjYAogICAgClJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZm9sbG93aW5nOgoqICAgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGJvb2wuCiogICBgTlZNRV9DT1JFYCAoaW1wbGllZCB3aXRoIGBCTEtfREVWX05WTUVgKQoqICAgYEJMS19ERVZfTlZNRWAgaXMgYSB0cmlzdGF0ZS4KKiAgIGBJT19VUklOR2AgaXMgYSBib29sLgoKTm93IEkgdGhpbmsgSSBoYXZlIGEgc29saWQgYXBwcm9hY2ggdG8gZ2V0IHRoZSByZXN1bHRzIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlZNRSYjMzQ7LAogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RtYV9idWZfaW9faW5pdF9tYXAmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9pb19jcmVhdGVfbWFwJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2N0eF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9fY3R4X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpb19kcm9wX2RtYWJ1Zl9ub2RlJiMzNDssCiAgICAmIzM0O19faW9faW1wb3J0X3JlZ19idWYmIzM0OywKICAgICYjMzQ7X19pb19pbXBvcnRfcmVnX3ZlYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIERNQS1idWYgc3VwcG9ydCBmb3IgaW9fdXJpbmcgYW5kIE5WTWUgYmxvY2sgZGV2aWNlcy4gSXQgYWRkcyBuZXcgY29yZSBpbmZyYXN0cnVjdHVyZSBpbiBkbWEtYnVmLWlvLmMsIG1vZGlmaWVzIGlvX3VyaW5nIHRvIHN1cHBvcnQgcmVnaXN0ZXJpbmcgYW5kIGltcG9ydGluZyBkbWFidWZzLCBhbmQgdXBkYXRlcyB0aGUgTlZNZSBQQ0kgZHJpdmVyIHRvIGhhbmRsZSBkbWFidWYtYmFja2VkIHJlcXVlc3RzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtCTEtfREVWX05WTUUmIzM0OywKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbWFfYnVmX2lvX2luaXRfbWFwJiMzNDssCiAgICAmIzM0O2RtYV9idWZfaW9fY3JlYXRlX21hcCYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9pb19jdHhfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtkbWFfYnVmX2lvX2N0eF9jcmVhdGUmIzM0OywKICAgICYjMzQ7aW9fZHJvcF9kbWFidWZfbm9kZSYjMzQ7LAogICAgJiMzNDtfX2lvX2ltcG9ydF9yZWdfYnVmJiMzNDssCiAgICAmIzM0O19faW9faW1wb3J0X3JlZ192ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBETUEtYnVmIHN1cHBvcnQgZm9yIGlvX3VyaW5nIGFuZCBOVk1lIGJsb2NrIGRldmljZXMuIEl0IGFkZHMgbmV3IGNvcmUgaW5mcmFzdHJ1Y3R1cmUgaW4gZG1hLWJ1Zi1pby5jLCBtb2RpZmllcyBpb191cmluZyB0byBzdXBwb3J0IHJlZ2lzdGVyaW5nIGFuZCBpbXBvcnRpbmcgZG1hYnVmcywgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgUENJIGRyaXZlciB0byBoYW5kbGUgZG1hYnVmLWJhY2tlZCByZXF1ZXN0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjIxOjEzLjM5MDU1MTA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4NTYyNjIxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIkJMS19ERVZfTlZNRVwiLFxuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbWFfYnVmX2lvX2luaXRfbWFwXCIsXG4gICAgXCJkbWFfYnVmX2lvX2NyZWF0ZV9tYXBcIixcbiAgICBcImRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc1wiLFxuICAgIFwiZG1hX2J1Zl9pb19jdHhfcmVsZWFzZVwiLFxuICAgIFwiZG1hX2J1Zl9pb19jdHhfY3JlYXRlXCIsXG4gICAgXCJpb19kcm9wX2RtYWJ1Zl9ub2RlXCIsXG4gICAgXCJfX2lvX2ltcG9ydF9yZWdfYnVmXCIsXG4gICAgXCJfX2lvX2ltcG9ydF9yZWdfdmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBETUEtYnVmIHN1cHBvcnQgZm9yIGlvX3VyaW5nIGFuZCBOVk1lIGJsb2NrIGRldmljZXMuIEl0IGFkZHMgbmV3IGNvcmUgaW5mcmFzdHJ1Y3R1cmUgaW4gZG1hLWJ1Zi1pby5jLCBtb2RpZmllcyBpb191cmluZyB0byBzdXBwb3J0IHJlZ2lzdGVyaW5nIGFuZCBpbXBvcnRpbmcgZG1hYnVmcywgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgUENJIGRyaXZlciB0byBoYW5kbGUgZG1hYnVmLWJhY2tlZCByZXF1ZXN0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6MjE6MTMuMzkwNTU4NjIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM1MzkxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlM2M3YmE5NWQ5OTYxZTczMjZjYmU1OGRhNTZmMDc5ODNkZjE2ODM3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDAzOjIxOjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0XFxuaW5kZXggMTExMjZlZDZmNDBmNy4uNDlkYTIxNDdiN2Q4NiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxcbkBAIC0xNiwxNiArMTYsMTYgQEAgYnZfbGVuIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgY29tcGxldGVkIGluIHRoYXQgYmlvdmVjLlxcbiBJbiB0aGUgbmV3IHNjaGVtZSBvZiB0aGluZ3MsIGV2ZXJ5dGhpbmcgdGhhdCBtdXN0IGJlIG11dGF0ZWQgaW4gb3JkZXIgdG9cXG4gcGFydGlhbGx5IGNvbXBsZXRlIGEgYmlvIGlzIHNlZ3JlZ2F0ZWQgaW50byBzdHJ1Y3QgYnZlY19pdGVyOiBiaV9zZWN0b3IsXFxuIGJpX3NpemUgYW5kIGJpX2lkeCBoYXZlIGJlZW4gbW92ZWQgdGhlcmU7IGFuZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBidl9vZmZzZXRcXG4tYW5kIGJ2X2xlbiwgc3RydWN0IGJ2ZWNfaXRlciBoYXMgYmlfYnZlY19kb25lLCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2ZcXG4rYW5kIGJ2X2xlbiwgc3RydWN0IGJ2ZWNfaXRlciBoYXMgYmlfb2Zmc2V0LCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2ZcXG4gYnl0ZXMgY29tcGxldGVkIGluIHRoZSBjdXJyZW50IGJ2ZWMuXFxuIFxcbiBUaGVyZSBhcmUgYSBidW5jaCBvZiBuZXcgaGVscGVyIG1hY3JvcyBmb3IgaGlkaW5nIHRoZSBnb3J5IGRldGFpbHMgLSBpblxcbiBwYXJ0aWN1bGFyLCBwcmVzZW50aW5nIHRoZSBpbGx1c2lvbiBvZiBwYXJ0aWFsbHkgY29tcGxldGVkIGJpb3ZlY3Mgc28gdGhhdFxcbi1ub3JtYWwgY29kZSBkb2Vzbid0IGhhdmUgdG8gZGVhbCB3aXRoIGJpX2J2ZWNfZG9uZS5cXG4rbm9ybWFsIGNvZGUgZG9lc24ndCBoYXZlIHRvIGRlYWwgd2l0aCBiaV9vZmZzZXQuXFxuIFxcbiAgKiBEcml2ZXIgY29kZSBzaG91bGQgbm8gbG9uZ2VyIHJlZmVyIHRvIGJpb3ZlY3MgZGlyZWN0bHk7IHdlIG5vdyBoYXZlXFxuICAgIGJpb19pb3ZlYygpIGFuZCBiaW9faXRlcl9pb3ZlYygpIG1hY3JvcyB0aGF0IHJldHVybiBsaXRlcmFsIHN0cnVjdCBiaW92ZWNzLFxcbi0gICBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByYXcgYmlvdmVjcyBidXQgdGFraW5nIGludG8gYWNjb3VudCBiaV9idmVjX2RvbmUgYW5kXFxuKyAgIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJhdyBiaW92ZWNzIGJ1dCB0YWtpbmcgaW50byBhY2NvdW50IGJpX29mZnNldCBhbmRcXG4gICAgYmlfc2l6ZS5cXG4gXFxuICAgIGJpb19mb3JfZWFjaF9zZWdtZW50KCkgaGFzIGJlZW4gdXBkYXRlZCB0byB0YWtlIGEgYnZlY19pdGVyIGFyZ3VtZW50XFxuQEAgLTEwMSw3ICsxMDEsNyBAQCBPdGhlciBpbXBsaWNhdGlvbnM6XFxuICAgIEkuZS4gaW5zdGVhZCBvZiB1c2luZyBiaW9faW92ZWNfaWR4KCkgKG9yIGJpby1cXHUwMDNlYmlfaW92ZWNbYmlvLVxcdTAwM2ViaV9pZHhdKSwgeW91XFxuICAgIG5vdyB1c2UgYmlvX2l0ZXJfaW92ZWMoKSwgd2hpY2ggdGFrZXMgYSBidmVjX2l0ZXIgYW5kIHJldHVybnMgYVxcbiAgICBsaXRlcmFsIHN0cnVjdCBiaW9fdmVjIC0gY29uc3RydWN0ZWQgb24gdGhlIGZseSBmcm9tIHRoZSByYXcgYmlvdmVjIGJ1dFxcbi0gICB0YWtpbmcgaW50byBhY2NvdW50IGJpX2J2ZWNfZG9uZSAoYW5kIGJpX3NpemUpLlxcbisgICB0YWtpbmcgaW50byBhY2NvdW50IGJpX29mZnNldCAoYW5kIGJpX3NpemUpLlxcbiBcXG4gICogYmlfdmNudCBjYW4ndCBiZSB0cnVzdGVkIG9yIHJlbGllZCB1cG9uIGJ5IGRyaXZlciBjb2RlIC0gaS5lLiBhbnl0aGluZyB0aGF0XFxuICAgIGRvZXNuJ3QgYWN0dWFsbHkgb3duIHRoZSBiaW8uIFRoZSByZWFzb24gaXMgdHdvZm9sZDogZmlyc3RseSwgaXQncyBub3RcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmlvLmMgYi9ibG9jay9iaW8uY1xcbmluZGV4IDZhMmY2ZmMzNDEzZTguLmNjMmJiOTE4M2MxYTcgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmlvLmNcXG4rKysgYi9ibG9jay9iaW8uY1xcbkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBiaW9faW5pdChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiaW9fdmVjICp0YWJsZSxcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IDA7XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplID0gMDtcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX2lkeCA9IDA7XFxuLVxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUgPSAwO1xcbitcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0ID0gMDtcXG4gXFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBOVUxMO1xcbiBcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBOVUxMO1xcbiAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcXG5AQCAtODYxLDYgKzg2MSwxMiBAQCBzdGF0aWMgaW50IF9fYmlvX2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwKVxcbiBcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXFx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcXG4gXFx0YmlvLVxcdTAwM2ViaV9pdGVyID0gYmlvX3NyYy1cXHUwMDNlYmlfaXRlcjtcXG4gXFxuK1xcdGlmIChvcF9pc19kbWFidWYoYmlvLVxcdTAwM2ViaV9vcGYpKSB7XFxuK1xcdFxcdGJpby1cXHUwMDNlYmlfZG1hYnVmX21hcCA9IGJpb19zcmMtXFx1MDAzZWJpX2RtYWJ1Zl9tYXA7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJpby1cXHUwMDNlYmlfaW9fdmVjID0gYmlvX3NyYy1cXHUwMDNlYmlfaW9fdmVjO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoYmlvLVxcdTAwM2ViaV9iZGV2KSB7XFxuIFxcdFxcdGlmIChiaW8tXFx1MDAzZWJpX2JkZXYgPT0gYmlvX3NyYy1cXHUwMDNlYmlfYmRldiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgYmlvX2ZsYWdnZWQoYmlvX3NyYywgQklPX1JFTUFQUEVEKSlcXG5AQCAtOTAyLDggKzkwOCw2IEBAIHN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbiBcXHRcXHRiaW9fcHV0KGJpbyk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuLVxcdGJpby1cXHUwMDNlYmlfaW9fdmVjID0gYmlvX3NyYy1cXHUwMDNlYmlfaW9fdmVjO1xcbi1cXG4gXFx0cmV0dXJuIGJpbztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGJpb19hbGxvY19jbG9uZSk7XFxuQEAgLTkyMyw3ICs5MjcsNyBAQCBpbnQgYmlvX2luaXRfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvLFxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRiaW9faW5pdChiaW8sIGJkZXYsIGJpb19zcmMtXFx1MDAzZWJpX2lvX3ZlYywgMCwgYmlvX3NyYy1cXHUwMDNlYmlfb3BmKTtcXG4rXFx0YmlvX2luaXQoYmlvLCBiZGV2LCBOVUxMLCAwLCBiaW9fc3JjLVxcdTAwM2ViaV9vcGYpO1xcbiBcXHRyZXQgPSBfX2Jpb19jbG9uZShiaW8sIGJpb19zcmMsIGdmcCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGJpb191bmluaXQoYmlvKTtcXG5AQCAtMTE4OCwxMSArMTE5MiwyMiBAQCB2b2lkIGJpb19pb3ZfYnZlY19zZXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuIFxcbiBcXHRiaW8tXFx1MDAzZWJpX2lvX3ZlYyA9IChzdHJ1Y3QgYmlvX3ZlYyAqKWl0ZXItXFx1MDAzZWJ2ZWM7XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9pZHggPSAwO1xcbi1cXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lID0gaXRlci1cXHUwMDNlaW92X29mZnNldDtcXG4rXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldCA9IGl0ZXItXFx1MDAzZWlvdl9vZmZzZXQ7XFxuIFxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuIFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DTE9ORUQpO1xcbiB9XFxuIFxcbit2b2lkIGJpb19kbWFidWZfbWFwX3NldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4re1xcbitcXHRXQVJOX09OX09OQ0UoYmlvLVxcdTAwM2ViaV9tYXhfdmVjcyk7XFxuK1xcbitcXHRiaW8tXFx1MDAzZWJpX2RtYWJ1Zl9tYXAgPSBpdGVyLVxcdTAwM2VkbWFidWZfbWFwO1xcbitcXHRiaW8tXFx1MDAzZWJpX3ZjbnQgPSAwO1xcbitcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0ID0gaXRlci1cXHUwMDNlaW92X29mZnNldDtcXG4rXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcXG4rXFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX05PTUVSR0UgfCBSRVFfRE1BQlVGO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBBbGlnbnMgdGhlIGJpbyBzaXplIHRvIHRoZSBsZW5fYWxpZ25fbWFzaywgcmVsZWFzaW5nIGV4Y2Vzc2l2ZSBiaW8gdmVjcyB0aGF0XFxuICAqIF9fYmlvX2lvdl9pdGVyX2dldF9wYWdlcyBtYXkgaGF2ZSBpbnNlcnRlZCwgYW5kIHJldmVydHMgdGhlIHRyaW1tZWQgbGVuZ3RoXFxuQEAgLTEyNTUsNiArMTI3MCwxMSBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0aW92X2l0ZXJfYWR2YW5jZShpdGVyLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuK1xcdGlmIChpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGl0ZXIpKSB7XFxuK1xcdFxcdGJpb19kbWFidWZfbWFwX3NldChiaW8sIGl0ZXIpO1xcbitcXHRcXHRpb3ZfaXRlcl9hZHZhbmNlKGl0ZXIsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChpb3ZfaXRlcl9leHRyYWN0X3dpbGxfcGluKGl0ZXIpKVxcbiBcXHRcXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUEFHRV9QSU5ORUQpO1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbWVyZ2UuYyBiL2Jsb2NrL2Jsay1tZXJnZS5jXFxuaW5kZXggYWIxMTYxY2E2OWYxZS4uNmYwY2FiZmUyNWVmNyAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstbWVyZ2UuY1xcbisrKyBiL2Jsb2NrL2Jsay1tZXJnZS5jXFxuQEAgLTMzLDcgKzMzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KVxcbiBcXG4gXFx0YmlvX2FkdmFuY2VfaXRlcihiaW8sIFxcdTAwMjZpdGVyLCBpdGVyLmJpX3NpemUpO1xcbiBcXG4tXFx0aWYgKCFpdGVyLmJpX2J2ZWNfZG9uZSlcXG4rXFx0aWYgKCFpdGVyLmJpX29mZnNldClcXG4gXFx0XFx0aWR4ID0gaXRlci5iaV9pZHggLSAxO1xcbiBcXHRlbHNlXFx0LyogaW4gdGhlIG1pZGRsZSBvZiBidmVjICovXFxuIFxcdFxcdGlkeCA9IGl0ZXIuYmlfaWR4O1xcbkBAIC00MSwxMSArNDEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KVxcbiBcXHQqYnYgPSBiaW8tXFx1MDAzZWJpX2lvX3ZlY1tpZHhdO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogaXRlci5iaV9idmVjX2RvbmUgcmVjb3JkcyBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBsYXN0IGJ2ZWNcXG4rXFx0ICogaXRlci5iaV9vZmZzZXQgcmVjb3JkcyBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBsYXN0IGJ2ZWNcXG4gXFx0ICogaWYgdGhpcyBiaW8gZW5kcyBpbiB0aGUgbWlkZGxlIG9mIG9uZSBpbyB2ZWN0b3JcXG4gXFx0ICovXFxuLVxcdGlmIChpdGVyLmJpX2J2ZWNfZG9uZSlcXG4tXFx0XFx0YnYtXFx1MDAzZWJ2X2xlbiA9IGl0ZXIuYmlfYnZlY19kb25lO1xcbitcXHRpZiAoaXRlci5iaV9vZmZzZXQpXFxuK1xcdFxcdGJ2LVxcdTAwM2Vidl9sZW4gPSBpdGVyLmJpX29mZnNldDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGJpb193aWxsX2dhcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5AQCAtMzQ2LDYgKzM0NiwyMCBAQCBpbnQgYmlvX3NwbGl0X2lvX2F0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLFxcbiBcXHRcXHRsZW5fYWxpZ25fbWFzayB8PSAoYmMtXFx1MDAzZWJjX2tleS1cXHUwMDNlY3J5cHRvX2NmZy5kYXRhX3VuaXRfc2l6ZSAtIDEpO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAob3BfaXNfZG1hYnVmKGJpby1cXHUwMDNlYmlfb3BmKSkge1xcbitcXHRcXHQvKiBzaW5nbGUgY29udGlndW91cyByYW5nZSBpbnRvIHRoZSBkbWEtYnVmICovXFxuK1xcdFxcdG5zZWdzID0gMTtcXG4rXFxuK1xcdFxcdGlmICgoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldCBcXHUwMDI2IHN0YXJ0X2FsaWduX21hc2spIHx8XFxuK1xcdFxcdCAgICAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgXFx1MDAyNiBsZW5fYWxpZ25fbWFzaykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgXFx1MDAzZSBtYXhfYnl0ZXMpIHtcXG4rXFx0XFx0XFx0Ynl0ZXMgPSBtYXhfYnl0ZXM7XFxuK1xcdFxcdFxcdGdvdG8gc3BsaXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuIFxcdGJpb19mb3JfZWFjaF9idmVjKGJ2LCBiaW8sIGl0ZXIpIHtcXG4gXFx0XFx0aWYgKGJ2LmJ2X29mZnNldCBcXHUwMDI2IHN0YXJ0X2FsaWduX21hc2sgfHxcXG4gXFx0XFx0ICAgIGJ2LmJ2X2xlbiBcXHUwMDI2IGxlbl9hbGlnbl9tYXNrKVxcbkBAIC0zNzYsNiArMzkwLDcgQEAgaW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcXG4gXFx0XFx0YnZwcnZwID0gXFx1MDAyNmJ2cHJ2O1xcbiBcXHR9XFxuIFxcbitvdXQ6XFxuIFxcdCpzZWdzID0gbnNlZ3M7XFxuIFxcdGJpby1cXHUwMDNlYmlfYnZlY19nYXBfYml0ID0gZmZzKGdhcHMpO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLWRtYS5jIGIvYmxvY2svYmxrLW1xLWRtYS5jXFxuaW5kZXggYmZkYjllZDcwNzQxMS4uODhmZDljYmM5NTFmNCAxMDA2NDRcXG4tLS0gYS9ibG9jay9ibGstbXEtZG1hLmNcXG4rKysgYi9ibG9jay9ibGstbXEtZG1hLmNcXG5AQCAtNDQsNyArNDQsNyBAQCBzdGF0aWMgYm9vbCBibGtfbWFwX2l0ZXJfbmV4dChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgYmxrX21hcF9pdGVyICppdGVyLFxcbiBcXHQgKiBvbmUgY291bGQgYmUgbWVyZ2VkIGludG8gaXQuICBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gbW92aW5nIHRvXFxuIFxcdCAqIHRoZSBuZXh0IGJpbywgYnV0IHNvbWUgY2FsbGVycyBhbHNvIGRvbid0IHBhY2sgYnZlY3MgdGlnaHQuXFxuIFxcdCAqL1xcbi1cXHR3aGlsZSAoIWl0ZXItXFx1MDAzZWl0ZXIuYmlfc2l6ZSB8fCAhaXRlci1cXHUwMDNlaXRlci5iaV9idmVjX2RvbmUpIHtcXG4rXFx0d2hpbGUgKCFpdGVyLVxcdTAwM2VpdGVyLmJpX3NpemUgfHwgIWl0ZXItXFx1MDAzZWl0ZXIuYmlfb2Zmc2V0KSB7XFxuIFxcdFxcdHN0cnVjdCBiaW9fdmVjIG5leHQ7XFxuIFxcbiBcXHRcXHRpZiAoIV9fYmxrX21hcF9pdGVyX25leHQoaXRlcikpXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcXG5pbmRleCBlYWFjMDU4MTVjYjAzLi41MGFiZmQ5MzI4ODYxIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2Jsay5oXFxuKysrIGIvYmxvY2svYmxrLmhcXG5AQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fbWF5X25lZWRfc3BsaXQoc3RydWN0IGJpbyAqYmlvLFxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuIFxcdGJ2ID0gX19idmVjX2l0ZXJfYnZlYyhiaW8tXFx1MDAzZWJpX2lvX3ZlYywgYmlvLVxcdTAwM2ViaV9pdGVyKTtcXG4tXFx0aWYgKGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplIFxcdTAwM2UgYnYtXFx1MDAzZWJ2X2xlbiAtIGJpby1cXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUpXFxuK1xcdGlmIChiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcXHUwMDNlIGJ2LVxcdTAwM2Vidl9sZW4gLSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0KVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0aWYgKChidi1cXHUwMDNlYnZfb2Zmc2V0IHwgYnYtXFx1MDAzZWJ2X2xlbikgXFx1MDAyNiBsaW0tXFx1MDAzZWRtYV9hbGlnbm1lbnQpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbmRpZmYgLS1naXQgYS9ibG9jay9mb3BzLmMgYi9ibG9jay9mb3BzLmNcXG5pbmRleCAxNTc4M2E2MTgwZGVjLi5kODNjZGJhYjY1YTZhIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2ZvcHMuY1xcbisrKyBiL2Jsb2NrL2ZvcHMuY1xcbkBAIC0zNDgsNiArMzQ4LDggQEAgc3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX2FzeW5jKHN0cnVjdCBraW9jYiAqaW9jYixcXG4gXFx0XFx0ICogYmlvX2lvdl9pdGVyX2dldF9wYWdlcygpIGFuZCBzZXQgdGhlIGJ2ZWMgZGlyZWN0bHkuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRiaW9faW92X2J2ZWNfc2V0KGJpbywgaXRlcik7XFxuK1xcdH0gZWxzZSBpZiAoaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSkge1xcbitcXHRcXHRiaW9fZG1hYnVmX21hcF9zZXQoYmlvLCBpdGVyKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG5AQCAtOTI0LDYgKzkyNiwxOSBAQCBzdGF0aWMgaW50IGJsa2Rldl9tbWFwX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4gXFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUoZGVzYyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYmxrZGV2X2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IGZpbGUgKmZpbGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBmaWxlX2JkZXYoZmlsZSk7XFxuK1xcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi1cXHUwMDNlYmRfZGlzaztcXG4rXFxuK1xcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0RJUkVDVCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWRpc2stXFx1MDAzZWZvcHMtXFx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRyZXR1cm4gZGlzay1cXHUwMDNlZm9wcy1cXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChiZGV2LCBjdHgpO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4gXFx0Lm9wZW5cXHRcXHQ9IGJsa2Rldl9vcGVuLFxcbiBcXHQucmVsZWFzZVxcdD0gYmxrZGV2X3JlbGVhc2UsXFxuQEAgLTk0Miw2ICs5NTcsNyBAQCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4gXFx0LmZhbGxvY2F0ZVxcdD0gYmxrZGV2X2ZhbGxvY2F0ZSxcXG4gXFx0LnVyaW5nX2NtZFxcdD0gYmxrZGV2X3VyaW5nX2NtZCxcXG4gXFx0LmZvcF9mbGFnc1xcdD0gRk9QX0JVRkZFUl9SQVNZTkMsXFxuK1xcdC5pbml0X2RtYV9idWZfaW9fY3R4ID0gYmxrZGV2X2luaXRfZG1hX2J1Zl9pb19jdHgsXFxuIH07XFxuIFxcbiBzdGF0aWMgX19pbml0IGludCBibGtkZXZfaW5pdCh2b2lkKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggMWZhZWNlZjMzMDA5Mi4uMGIxMjVjY2IyNjYzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTM3OCw3ICszNzgsNyBAQCBzdGF0aWMgaW50IGxvX3J3X2FpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZCxcXG4gXFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgcncsXFxuIFxcdFxcdFxcdF9fYnZlY19pdGVyX2J2ZWMocnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfaW9fdmVjLCBycS1cXHUwMDNlYmlvLVxcdTAwM2ViaV9pdGVyKSxcXG4gXFx0XFx0XFx0bnJfYnZlYywgYmxrX3JxX2J5dGVzKHJxKSk7XFxuLVxcdFxcdGl0ZXIuaW92X29mZnNldCA9IHJxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xcbitcXHRcXHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cXHUwMDNlYmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcXG4gXFx0fVxcbiBcXHRhdG9taWNfc2V0KFxcdTAwMjZjbWQtXFx1MDAzZXJlZiwgMik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5pbmRleCA1NWVlYjZhYWMwZWEzLi42ZjRiNDRhMWVlMmY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbkBAIC01NTMsNyArNTUzLDcgQEAgc3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuIFxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNml0ZXIsIHJ3LFxcbiBcXHRcXHRcXHRfX2J2ZWNfaXRlcl9idmVjKHJxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX2lvX3ZlYywgcnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfaXRlciksXFxuIFxcdFxcdFxcdFxcdFxcdG5yX2J2ZWMsIGJsa19ycV9ieXRlcyhycSkpO1xcbi1cXHRcXHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cXHUwMDNlYmlvLVxcdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcXG4rXFx0XFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuIFxcdH1cXG4gXFxuIFxcdGNtZC1cXHUwMDNlaW9jYi5raV9wb3MgPSAoY21kLVxcdTAwM2VzZWN0b3IgLSB6b25lLVxcdTAwM2VzdGFydCkgXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZUO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVcXG5pbmRleCBiMjVkNzU1MGJhY2ZkLi41MjM3MzFiMGY4M2VlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZVxcbkBAIC0xLDYgKzEsNiBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gb2JqLXkgOj0gZG1hLWJ1Zi5vIGRtYS1mZW5jZS5vIGRtYS1mZW5jZS1hcnJheS5vIGRtYS1mZW5jZS1jaGFpbi5vIFxcXFxcXG4tXFx0IGRtYS1mZW5jZS11bndyYXAubyBkbWEtcmVzdi5vIGRtYS1idWYtbWFwcGluZy5vXFxuK1xcdCBkbWEtZmVuY2UtdW53cmFwLm8gZG1hLXJlc3YubyBkbWEtYnVmLW1hcHBpbmcubyBkbWEtYnVmLWlvLm9cXG4gb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQUylcXHQrPSBkbWEtaGVhcC5vXFxuIG9iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpXFx0Kz0gaGVhcHMvXFxuIG9iai0kKENPTkZJR19TWU5DX0ZJTEUpXFx0XFx0Kz0gc3luY19maWxlLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVmNTQ1YTFiY2YzMjNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uY1xcbkBAIC0wLDAgKzEsMjc1IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIENvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3Igc3VwcG9yaW5nIGRtYS1idWYgaW4gdGhlIEkvTyBwYXRoLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUGF2ZWwgQmVndW5rb3YgXFx1MDAzY2FzbWwuc2lsZW5jZUBnbWFpbC5jb21cXHUwMDNlXFxuKyAqL1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi1pby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLXJlc3YuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlIHtcXG4rXFx0c3RydWN0IGRtYV9mZW5jZSBiYXNlO1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqZG1hX2J1Zl9pb19mZW5jZV9kcnZfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSlcXG4re1xcbitcXHQvKiBkZWZhdWx0IGZlbmNlIHJlbGVhc2Uga2ZyZWUncyB0aGUgYmFzZSBwb2ludGVyICovXFxuK1xcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSwgYmFzZSkpO1xcbitcXG4rXFx0cmV0dXJuIFxcXCJkbWEtYnVmLWlvLWN0eFxcXCI7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICpkbWFfYnVmX2lvX2ZlbmNlX3RpbWVsaW5lX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpXFxuK3tcXG4rXFx0cmV0dXJuIFxcXCJkbWEtYnVmLWlvLWN0eFxcXCI7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9idWZfaW9fZmVuY2Vfb3BzID0ge1xcbitcXHQuZ2V0X2RyaXZlcl9uYW1lID0gZG1hX2J1Zl9pb19mZW5jZV9kcnZfbmFtZSxcXG4rXFx0LmdldF90aW1lbGluZV9uYW1lID0gZG1hX2J1Zl9pb19mZW5jZV90aW1lbGluZV9uYW1lLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcmVsZWFzZV93b3JrKTtcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UocmVmY291bnRfcmVhZChcXHUwMDI2Y3R4LVxcdTAwM2VyZWZzKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlZGV2X29wcy1cXHUwMDNlcmVsZWFzZShjdHgpO1xcbitcXHRkbWFfYnVmX3B1dChjdHgtXFx1MDAzZWRtYWJ1Zik7XFxuK1xcdGtmcmVlKGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fbWFwX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fbWFwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHJlbGVhc2Vfd29yayk7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlICpmZW5jZSA9IG1hcC1cXHUwMDNlZmVuY2U7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gbWFwLVxcdTAwM2VjdHg7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXFx1MDAzZWRtYWJ1ZjtcXG4rXFxuK1xcdC8qIHRoZSByZWxlYXNlIHBhdGggbXVzdCB3YWl0IGZvciBmZW5jZXMgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRShyZWZjb3VudF9yZWFkKFxcdTAwMjZjdHgtXFx1MDAzZXJlZnMpID09IDApKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBQcmV2ZW50IGZyb20gZGVzdG95aW5nIHRoZSBjdHggd2hpbGUgdW5tYXBwaW5nICovXFxuK1xcdHJlZmNvdW50X2luYyhcXHUwMDI2Y3R4LVxcdTAwM2VyZWZzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZXJlIGFyZSBubyBtb3JlIHJlcXVlc3RzIHVzaW5nIHRoZSBtYXAsIHdlIGNhbiBzaWduYWwgdGhlIGZlbmNlLlxcbitcXHQgKiBJdCBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGFraW5nIHRoZSByZXN2IGxvY2sgYXMgc29tZW9uZSBjb3VsZCBiZVxcbitcXHQgKiB3YWl0aW5nIGZvciB0aGUgZmVuY2Ugd2hpbGUgaG9sZGluZyB0aGUgbG9jay5cXG4rXFx0ICovXFxuK1xcdGRtYV9mZW5jZV9zaWduYWwoXFx1MDAyNmZlbmNlLVxcdTAwM2ViYXNlKTtcXG4rXFxuK1xcdGRtYV9yZXN2X2xvY2soZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4rXFx0Y3R4LVxcdTAwM2VkZXZfb3BzLVxcdTAwM2V1bm1hcChjdHgsIG1hcCk7XFxuK1xcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0ZG1hX2ZlbmNlX3B1dChcXHUwMDI2ZmVuY2UtXFx1MDAzZWJhc2UpO1xcbitcXHRwZXJjcHVfcmVmX2V4aXQoXFx1MDAyNm1hcC1cXHUwMDNlcmVmcyk7XFxuK1xcdGtmcmVlKG1hcCk7XFxuK1xcbitcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZjdHgtXFx1MDAzZXJlZnMpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIERlc3RydWN0aW9uIG5lZWRzIHRvIHdhaXQgZm9yIEkvTyBhbmQgZG1hIGZlbmNlcy4gRGVmZXIgaXQgdG9cXG4rXFx0XFx0ICogc2ltcGxpZnkgbG9ja2luZy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdElOSVRfV09SSyhcXHUwMDI2Y3R4LVxcdTAwM2VyZWxlYXNlX3dvcmssIGRtYV9idWZfaW9fY3R4X2Rlc3Ryb3lfd29yayk7XFxuK1xcdFxcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZWxlYXNlX3dvcmspO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fbWFwX3JlZnNfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGRtYV9idWZfaW9fbWFwLCByZWZzKTtcXG4rXFxuK1xcdC8qIG1pZ2h0IHNsZWVwLCB1c2UgYSB3b3JrZXIgKi9cXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZtYXAtXFx1MDAzZXJlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19tYXBfcmVsZWFzZV93b3JrKTtcXG4rXFx0cXVldWVfd29yayhzeXN0ZW1fd3EsIFxcdTAwMjZtYXAtXFx1MDAzZXJlbGVhc2Vfd29yayk7XFxuK31cXG4rXFxuK2ludCBkbWFfYnVmX2lvX2luaXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcClcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSAqZmVuY2UgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZmVuY2UgPSBremFsbG9jKHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFmZW5jZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBwZXJjcHVfcmVmX2luaXQoXFx1MDAyNm1hcC1cXHUwMDNlcmVmcywgZG1hX2J1Zl9pb19tYXBfcmVmc19yZWxlYXNlLCAwLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRrZnJlZShmZW5jZSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZmZW5jZS1cXHUwMDNlbG9jayk7XFxuK1xcdGRtYV9mZW5jZV9pbml0KFxcdTAwMjZmZW5jZS1cXHUwMDNlYmFzZSwgXFx1MDAyNmRtYV9idWZfaW9fZmVuY2Vfb3BzLCBcXHUwMDI2ZmVuY2UtXFx1MDAzZWxvY2ssXFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlZmVuY2VfY3R4LCBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2Y3R4LVxcdTAwM2VmZW5jZV9zZXEpKTtcXG4rXFx0bWFwLVxcdTAwM2VmZW5jZSA9IGZlbmNlO1xcbitcXHRtYXAtXFx1MDAzZWN0eCA9IGN0eDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9pb19pbml0X21hcCwgXFxcIkRNQV9CVUZcXFwiKTtcXG4rXFxuK3N0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXFx1MDAzZWRtYWJ1ZjtcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICptYXA7XFxuK1xcdGxvbmcgcmV0O1xcbitcXG4rcmV0cnk6XFxuK1xcdC8qXFxuK1xcdCAqIC1cXHUwMDNlZG1hYnVmX21hcCgpIHdpbGwgYmUgY2FsbGluZyBkbWFfYnVmX21hcF9hdHRhY2htZW50KCksIGZvciB3aGljaFxcbitcXHQgKiB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIGZlbmNlcy4gRG8gYSBiaXQgbmljZXIgYW5kIHRyeSB0byB3YWl0XFxuK1xcdCAqIHdpdGhvdXQgdGhlIHJlc3YgbG9jayBmaXJzdC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXFx1MDAzZXJlc3YsIERNQV9SRVNWX1VTQUdFX0tFUk5FTCxcXG4rXFx0XFx0XFx0XFx0ICAgIHRydWUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0cmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcbitcXHRtYXAgPSBkbWFfYnVmX2lvX2dldF9tYXAoY3R4KTtcXG4rXFx0aWYgKG1hcCkge1xcbitcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXFx1MDAzZXJlc3YsIERNQV9SRVNWX1VTQUdFX0tFUk5FTCxcXG4rXFx0XFx0XFx0XFx0ICB0cnVlLCAwKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuK1xcdG1hcCA9IGN0eC1cXHUwMDNlZGV2X29wcy1cXHUwMDNlbWFwKGN0eCk7XFxuK1xcdGlmIChJU19FUlIobWFwKSkge1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKG1hcCk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRwZXJjcHVfcmVmX2dldChcXHUwMDI2bWFwLVxcdTAwM2VyZWZzKTtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGN0eC1cXHUwMDNlbWFwLCBtYXApO1xcbitvdXQ6XFxuK1xcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFx0cmV0dXJuIG1hcDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZG1hX2J1Zl9pb19kcm9wX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVxcdTAwM2VkbWFidWY7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdG1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LVxcdTAwM2VtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdGRtYV9yZXN2X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KSk7XFxuK1xcdGlmICghbWFwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXFx1MDAzZW1hcCwgTlVMTCk7XFxuK1xcbitcXHRyZXQgPSBkbWFfcmVzdl9yZXNlcnZlX2ZlbmNlcyhkbWFidWYtXFx1MDAzZXJlc3YsIDEpO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHJldCkpIHtcXG4rXFx0XFx0c3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBcXHUwMDI2bWFwLVxcdTAwM2VmZW5jZS1cXHUwMDNlYmFzZTtcXG4rXFxuK1xcdFxcdGRtYV9mZW5jZV9nZXQoZmVuY2UpO1xcbitcXHRcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNm1hcC1cXHUwMDNlcmVmcyk7XFxuK1xcdFxcdGRtYV9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7XFxuK1xcdFxcdGRtYV9mZW5jZV9wdXQoZmVuY2UpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGRtYV9yZXN2X2FkZF9mZW5jZShkbWFidWYtXFx1MDAzZXJlc3YsIFxcdTAwMjZtYXAtXFx1MDAzZWZlbmNlLVxcdTAwM2ViYXNlLFxcbitcXHRcXHRcXHQgICBETUFfUkVTVl9VU0FHRV9LRVJORUwpO1xcbitcXHQvKlxcbitcXHQgKiBEZWxheSBkZXN0cnVjdGlvbiB1bnRpbCBhbGwgaW5mbGlnaHQgcmVxdWVzdHMgdXNpbmcgdGhlIG1hcCBhcmVcXG4rXFx0ICogZ29uZS4gSXQnbGwgYWxzbyBzaWduYWwgdGhlIGZlbmNlIHRoZW4uXFxuK1xcdCAqL1xcbitcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNm1hcC1cXHUwMDNlcmVmcyk7XFxuK31cXG4rXFxuK3ZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdGRtYV9idWZfaW9fZHJvcF9tYXAoY3R4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3MsIFxcXCJETUFfQlVGXFxcIik7XFxuK1xcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICByZWxlYXNlX3dvcmspO1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVxcdTAwM2VkbWFidWY7XFxuK1xcdGxvbmcgcmV0O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfbG9jayhkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbitcXHQvKiBSZW1vdmUgdGhlIGxhc3QgbWFwLCB0aGVyZSBzaG91bGQgYmUgbm8gbmV3IG9uZXMgZ29pbmcgZm9yd2FyZC4gKi9cXG4rXFx0ZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpO1xcbitcXHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdC8qIFdhaXQgdW50aWwgYWxsIG1hcHMgYXJlIGRlc3Ryb3llZC4gKi9cXG4rXFx0cmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KGRtYWJ1Zi1cXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHQgICAgZmFsc2UsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UocmV0IFxcdTAwM2M9IDApKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChXQVJOX09OX09OQ0UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjdHgtXFx1MDAzZW1hcCwgdHJ1ZSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZjdHgtXFx1MDAzZXJlZnMpKVxcbitcXHRcXHRkbWFfYnVmX2lvX2N0eF9kZXN0cm95X3dvcmsoXFx1MDAyNmN0eC1cXHUwMDNlcmVsZWFzZV93b3JrKTtcXG4rfVxcbitcXG4rdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIERlc3RydWN0aW9uIG5lZWRzIHRvIHdhaXQgZm9yIEkvTyBhbmQgZG1hIGZlbmNlcy4gRGVmZXIgaXQgdG9cXG4rXFx0ICogc2ltcGxpZnkgbG9ja2luZy5cXG4rXFx0ICovXFxuK1xcdElOSVRfV09SSyhcXHUwMDI2Y3R4LVxcdTAwM2VyZWxlYXNlX3dvcmssIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Vfd29yayk7XFxuK1xcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZWxlYXNlX3dvcmspO1xcbit9XFxuK1xcbitpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4rXFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWluaXRfZG1hX2J1Zl9pb19jdHgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdG1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7XFxuK1xcdGN0eC1cXHUwMDNlZmVuY2VfY3R4ID0gZG1hX2ZlbmNlX2NvbnRleHRfYWxsb2MoMSk7XFxuK1xcdGN0eC1cXHUwMDNlZGlyID0gZGlyO1xcbitcXHRjdHgtXFx1MDAzZWRtYWJ1ZiA9IGRtYWJ1ZjtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZjdHgtXFx1MDAzZXJlZnMsIDEpO1xcbitcXHRnZXRfZG1hX2J1ZihkbWFidWYpO1xcbitcXG4rXFx0cmV0ID0gZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChmaWxlLCBjdHgpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7XFxuK1xcdFxcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWN0eC1cXHUwMDNlZGV2X29wcyB8fFxcbitcXHRcXHRcXHQgIWN0eC1cXHUwMDNlZGV2X29wcy1cXHUwMDNlbWFwIHx8XFxuK1xcdFxcdFxcdCAhY3R4LVxcdTAwM2VkZXZfb3BzLVxcdTAwM2V1bm1hcCB8fFxcbitcXHRcXHRcXHQgIWN0eC1cXHUwMDNlZGV2X29wcy1cXHUwMDNlcmVsZWFzZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jIGIvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuY1xcbmluZGV4IDYxNTViMDExN2M5ZDYuLmIyMjcxOWM2NDExY2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuY1xcbisrKyBiL2RyaXZlcnMvbWQvZG0taW8tcmV3aW5kLmNcXG5AQCAtMTYsMTIgKzE2LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbV9idmVjX2l0ZXJfcmV3aW5kKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcXG4gXFx0aW50IGlkeDtcXG4gXFxuIFxcdGl0ZXItXFx1MDAzZWJpX3NpemUgKz0gYnl0ZXM7XFxuLVxcdGlmIChieXRlcyBcXHUwMDNjPSBpdGVyLVxcdTAwM2ViaV9idmVjX2RvbmUpIHtcXG4tXFx0XFx0aXRlci1cXHUwMDNlYmlfYnZlY19kb25lIC09IGJ5dGVzO1xcbitcXHRpZiAoYnl0ZXMgXFx1MDAzYz0gaXRlci1cXHUwMDNlYmlfb2Zmc2V0KSB7XFxuK1xcdFxcdGl0ZXItXFx1MDAzZWJpX29mZnNldCAtPSBieXRlcztcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGJ5dGVzIC09IGl0ZXItXFx1MDAzZWJpX2J2ZWNfZG9uZTtcXG4rXFx0Ynl0ZXMgLT0gaXRlci1cXHUwMDNlYmlfb2Zmc2V0O1xcbiBcXHRpZHggPSBpdGVyLVxcdTAwM2ViaV9pZHggLSAxO1xcbiBcXG4gXFx0d2hpbGUgKGlkeCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGJ5dGVzIFxcdTAwMjZcXHUwMDI2IGJ5dGVzIFxcdTAwM2UgYnZbaWR4XS5idl9sZW4pIHtcXG5AQCAtMzIsMTMgKzMyLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbV9idmVjX2l0ZXJfcmV3aW5kKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcXG4gXFx0aWYgKFdBUk5fT05DRShpZHggXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGJ5dGVzLFxcbiBcXHRcXHQgICAgICBcXFwiQXR0ZW1wdGVkIHRvIHJld2luZCBpdGVyIGJleW9uZCBidmVjJ3MgYm91bmRhcmllc1xcXFxuXFxcIikpIHtcXG4gXFx0XFx0aXRlci1cXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcXG4tXFx0XFx0aXRlci1cXHUwMDNlYmlfYnZlY19kb25lID0gMDtcXG4rXFx0XFx0aXRlci1cXHUwMDNlYmlfb2Zmc2V0ID0gMDtcXG4gXFx0XFx0aXRlci1cXHUwMDNlYmlfaWR4ID0gMDtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbiBcXHRpdGVyLVxcdTAwM2ViaV9pZHggPSBpZHg7XFxuLVxcdGl0ZXItXFx1MDAzZWJpX2J2ZWNfZG9uZSA9IGJ2W2lkeF0uYnZfbGVuIC0gYnl0ZXM7XFxuK1xcdGl0ZXItXFx1MDAzZWJpX29mZnNldCA9IGJ2W2lkeF0uYnZfbGVuIC0gYnl0ZXM7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbkBAIC0xMTMsMTAgKzExMywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZG1fYmlvX3Jld2luZF9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcXG4gXFx0aXRlci1cXHUwMDNlYmlfc2VjdG9yIC09IGJ5dGVzIFxcdTAwM2VcXHUwMDNlIDk7XFxuIFxcbiBcXHQvKiBObyBhZHZhbmNlIG1lYW5zIG5vIHJld2luZCAqL1xcbi1cXHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKVxcbitcXHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKSB7XFxuIFxcdFxcdGl0ZXItXFx1MDAzZWJpX3NpemUgKz0gYnl0ZXM7XFxuLVxcdGVsc2VcXG4rXFx0XFx0aXRlci1cXHUwMDNlYmlfb2Zmc2V0IC09IGJ5dGVzO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRkbV9idmVjX2l0ZXJfcmV3aW5kKGJpby1cXHUwMDNlYmlfaW9fdmVjLCBpdGVyLCBieXRlcyk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuYyBiL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuY1xcbmluZGV4IDdlOTgxODcwMTQ0NTEuLjhmODgxNmUxYzUzOWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9tZC9kbS1wY2FjaGUvc2VnbWVudC5jXFxuKysrIGIvZHJpdmVycy9tZC9kbS1wY2FjaGUvc2VnbWVudC5jXFxuQEAgLTE0LDcgKzE0LDcgQEAgaW50IHNlZ21lbnRfY29weV90b19iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LFxcbiBcXG4gXFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2aXRlciwgSVRFUl9ERVNULCBcXHUwMDI2YmlvLVxcdTAwM2ViaV9pb192ZWNbYmlvLVxcdTAwM2ViaV9pdGVyLmJpX2lkeF0sXFxuIFxcdFxcdFxcdGJpb19zZWdtZW50cyhiaW8pLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuLVxcdGl0ZXIuaW92X29mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XFxuK1xcdGl0ZXIuaW92X29mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuIFxcdGlmIChiaW9fb2ZmKVxcbiBcXHRcXHRpb3ZfaXRlcl9hZHZhbmNlKFxcdTAwMjZpdGVyLCBiaW9fb2ZmKTtcXG4gXFxuQEAgLTM1LDcgKzM1LDcgQEAgaW50IHNlZ21lbnRfY29weV9mcm9tX2JpbyhzdHJ1Y3QgcGNhY2hlX3NlZ21lbnQgKnNlZ21lbnQsXFxuIFxcbiBcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgXFx1MDAyNmJpby1cXHUwMDNlYmlfaW9fdmVjW2Jpby1cXHUwMDNlYmlfaXRlci5iaV9pZHhdLFxcbiBcXHRcXHRcXHRiaW9fc2VnbWVudHMoYmlvKSwgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xcbi1cXHRpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xcbitcXHRpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xcbiBcXHRpZiAoYmlvX29mZilcXG4gXFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2aXRlciwgYmlvX29mZik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9idHQuYyBiL2RyaXZlcnMvbnZkaW1tL2J0dC5jXFxuaW5kZXggN2UxMTEyOTYwZDdmOC4uNWQ5MTBhNjQ1MDNkMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252ZGltbS9idHQuY1xcbisrKyBiL2RyaXZlcnMvbnZkaW1tL2J0dC5jXFxuQEAgLTExNTUsNyArMTE1NSw3IEBAIHN0YXRpYyBpbnQgYnR0X3J3X2ludGVncml0eShzdHJ1Y3QgYnR0ICpidHQsIHN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpcCxcXG4gXFx0XFx0YnYgPSBidmVjX2l0ZXJfYnZlYyhiaXAtXFx1MDAzZWJpcF92ZWMsIGJpcC1cXHUwMDNlYmlwX2l0ZXIpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBUaGUgJ2J2JyBvYnRhaW5lZCBmcm9tIGJ2ZWNfaXRlcl9idmVjIGhhcyBpdHMgLmJ2X2xlbiBhbmRcXG4tXFx0XFx0ICogLmJ2X29mZnNldCBhbHJlYWR5IGFkanVzdGVkIGZvciBpdGVyLVxcdTAwM2ViaV9idmVjX2RvbmUsIGFuZCB3ZVxcbitcXHRcXHQgKiAuYnZfb2Zmc2V0IGFscmVhZHkgYWRqdXN0ZWQgZm9yIGl0ZXItXFx1MDAzZWJpX29mZnNldCwgYW5kIHdlXFxuIFxcdFxcdCAqIGNhbiB1c2UgdGhvc2UgZGlyZWN0bHlcXG4gXFx0XFx0ICovXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcXG5pbmRleCA0NTNjMWYwYjJkZDA5Li5jZTY2YTE4NDNiZWMzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2NvcmUuY1xcbkBAIC0yNjc2LDYgKzI2NzYsMTcgQEAgc3RhdGljIGludCBudm1lX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxcbiAjZGVmaW5lIG52bWVfcmVwb3J0X3pvbmVzXFx0TlVMTFxcbiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi9cXG4gXFxuK3N0YXRpYyBpbnQgbnZtZV9pbml0X2RtYV9idWZfaW9fY3R4KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBiZGV2LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCBudm1lX2N0cmwgKmN0cmwgPSBucy1cXHUwMDNlY3RybDtcXG4rXFxuK1xcdGlmICghY3RybC1cXHUwMDNlb3BzLVxcdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0cmV0dXJuIGN0cmwtXFx1MDAzZW9wcy1cXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChjdHJsLCBjdHgpO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9iZGV2X29wcyA9IHtcXG4gXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gXFx0LmlvY3RsXFx0XFx0PSBudm1lX2lvY3RsLFxcbkBAIC0yNjg2LDYgKzI2OTcsNyBAQCBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9iZGV2X29wcyA9IHtcXG4gXFx0LmdldF91bmlxdWVfaWRcXHQ9IG52bWVfZ2V0X3VuaXF1ZV9pZCxcXG4gXFx0LnJlcG9ydF96b25lc1xcdD0gbnZtZV9yZXBvcnRfem9uZXMsXFxuIFxcdC5wcl9vcHNcXHRcXHQ9IFxcdTAwMjZudm1lX3ByX29wcyxcXG4rXFx0LmluaXRfZG1hX2J1Zl9pb19jdHggPSBudm1lX2luaXRfZG1hX2J1Zl9pb19jdHgsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG52bWVfd2FpdF9yZWFkeShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCB1MzIgbWFzaywgdTMyIHZhbCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXFxuaW5kZXggODI0NjUxY2M4OThkYi4uMDM0YzMxYWY4ZmVjZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9udm1lLmhcXG5AQCAtNjUyLDYgKzY1Miw4IEBAIHN0cnVjdCBudm1lX2N0cmxfb3BzIHtcXG4gXFx0aW50ICgqZ2V0X2FkZHJlc3MpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIGNoYXIgKmJ1ZiwgaW50IHNpemUpO1xcbiBcXHR2b2lkICgqcHJpbnRfZGV2aWNlX2luZm8pKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpO1xcbiBcXHRib29sICgqc3VwcG9ydHNfcGNpX3AycGRtYSkoc3RydWN0IG52bWVfY3RybCAqY3RybCk7XFxuK1xcdGludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcXG4gXFx0dW5zaWduZWQgbG9uZyAoKmdldF92aXJ0X2JvdW5kYXJ5KShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIGlzX2FkbWluKTtcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcXG5pbmRleCA2OTkzMmQ2NDBiNTM3Li5jYmIzMjFmYjdjNTBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jXFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcXG5AQCAtMjcsNiArMjcsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8tNjQtbm9uYXRvbWljLWxvLWhpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby02NC1ub25hdG9taWMtaGktbG8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlZC1vcGFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLWlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtcmVzdi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInRyYWNlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJudm1lLmhcXFwiXFxuQEAgLTM5Myw2ICszOTUsMTMgQEAgc3RydWN0IG52bWVfcXVldWUge1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBkZWxldGVfZG9uZTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBudm1lX2RtYWJ1Zl9tYXAge1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgYmFzZTtcXG4rXFx0c3RydWN0IHNnX3RhYmxlICpzZ3Q7XFxuK1xcdHVuc2lnbmVkIG5yX2VudHJpZXM7XFxuK1xcdGRtYV9hZGRyX3QgZG1hX2xpc3RbXTtcXG4rfTtcXG4rXFxuIC8qIGJpdHMgZm9yIGlvZC1cXHUwMDNlZmxhZ3MgKi9cXG4gZW51bSBudm1lX2lvZF9mbGFncyB7XFxuIFxcdC8qIHRoaXMgY29tbWFuZCBoYXMgYmVlbiBhYm9ydGVkIGJ5IHRoZSB0aW1lb3V0IGhhbmRsZXIgKi9cXG5AQCAtODU5LDYgKzg2OCwxMzggQEAgc3RhdGljIHZvaWQgbnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICpcXG4rdG9fbnZtZV9kbWFidWZfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxcbit7XFxuK1xcdHJldHVybiBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwLCBiYXNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2NwdShzdHJ1Y3QgbnZtZV9kZXYgKm52bWVfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHJlcXVlc3QgKnJlcSlcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBudm1lX2Rldi1cXHUwMDNlZGV2O1xcbitcXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyO1xcbitcXHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXFx1MDAzZWJpbztcXG4rXFx0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cXHUwMDNlYmlfZG1hYnVmX21hcCk7XFxuK1xcdGRtYV9hZGRyX3QgKmRtYV9saXN0ID0gbWFwLVxcdTAwM2VkbWFfbGlzdDtcXG4rXFx0dW5zaWduZWQgb2Zmc2V0ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcXG4rXFx0dW5zaWduZWQgbWFwX2lkeCA9IG9mZnNldCAvIE5WTUVfQ1RSTF9QQUdFX1NJWkU7XFxuK1xcdGludCBsZW5ndGggPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpICtcXG4rXFx0XFx0ICAgICAob2Zmc2V0IFxcdTAwMjYgKE5WTUVfQ1RSTF9QQUdFX1NJWkUgLSAxKSk7XFxuK1xcbitcXHRkbWFfZGlyID0gcnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTtcXG4rXFxuK1xcdHdoaWxlIChsZW5ndGggXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2xpc3RbbWFwX2lkeCsrXSxcXG4rXFx0XFx0XFx0XFx0XFx0TlZNRV9DVFJMX1BBR0VfU0laRSwgZG1hX2Rpcik7XFxuK1xcdFxcdGxlbmd0aCAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IG52bWVfZGV2ICpudm1lX2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gbnZtZV9kZXYtXFx1MDAzZWRldjtcXG4rXFx0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjtcXG4rXFx0c3RydWN0IGJpbyAqYmlvID0gcmVxLVxcdTAwM2ViaW87XFxuK1xcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXFx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xcbitcXHRkbWFfYWRkcl90ICpkbWFfbGlzdCA9IG1hcC1cXHUwMDNlZG1hX2xpc3Q7XFxuK1xcdHVuc2lnbmVkIG9mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuK1xcdHVuc2lnbmVkIG1hcF9pZHggPSBvZmZzZXQgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xcbitcXHRpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSArXFxuK1xcdFxcdCAgICAgKG9mZnNldCBcXHUwMDI2IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSkpO1xcbitcXG4rXFx0ZG1hX2RpciA9IHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7XFxuK1xcbitcXHR3aGlsZSAobGVuZ3RoIFxcdTAwM2UgMCkge1xcbitcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9saXN0W21hcF9pZHgrK10sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5WTUVfQ1RSTF9QQUdFX1NJWkUsIGRtYV9kaXIpO1xcbitcXHRcXHRsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBudm1lX3JxX2NsZWFuX2RtYWJ1Zl9tYXAoc3RydWN0IG52bWVfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7XFxuK1xcbitcXHRudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfY3B1KGRldiwgcmVxKTtcXG4rXFxuK1xcdGlmICghKGlvZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT0RfU0lOR0xFX1NFR01FTlQpKVxcbitcXHRcXHRudm1lX2ZyZWVfZGVzY3JpcHRvcnMocmVxKTtcXG4rfVxcbitcXG4rc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAoc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEpXFxuK3tcXG4rXFx0c3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7XFxuK1xcdHN0cnVjdCBiaW8gKmJpbyA9IHJlcS1cXHUwMDNlYmlvO1xcbitcXHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVxcdTAwM2ViaV9kbWFidWZfbWFwKTtcXG4rXFx0dW5zaWduZWQgYnZlY19kb25lID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcXG4rXFx0dW5zaWduZWQgbWFwX2lkeCA9IGJ2ZWNfZG9uZSAvIE5WTUVfQ1RSTF9QQUdFX1NJWkU7XFxuK1xcdHVuc2lnbmVkIG9mZnNldCA9IGJ2ZWNfZG9uZSBcXHUwMDI2IChOVk1FX0NUUkxfUEFHRV9TSVpFIC0gMSk7XFxuK1xcdGludCBsZW5ndGggPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpIC0gKE5WTUVfQ1RSTF9QQUdFX1NJWkUgLSBvZmZzZXQpO1xcbitcXHRkbWFfYWRkcl90ICpkbWFfbGlzdCA9IG1hcC1cXHUwMDNlZG1hX2xpc3Q7XFxuK1xcdHU2NCBwcnAxX2RtYSA9IGRtYV9saXN0W21hcF9pZHgrK10gKyBvZmZzZXQ7XFxuK1xcdHU2NCBkbWFfYWRkciwgcHJwMl9kbWE7XFxuK1xcdGRtYV9hZGRyX3QgcHJwX2RtYTtcXG4rXFx0X19sZTY0ICpwcnBfbGlzdDtcXG4rXFx0dW5zaWduZWQgaTtcXG4rXFxuK1xcdG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2UobnZtZXEtXFx1MDAzZWRldiwgcmVxKTtcXG4rXFxuK1xcdGlmIChsZW5ndGggXFx1MDAzYz0gMCkge1xcbitcXHRcXHRwcnAyX2RtYSA9IDA7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxlbmd0aCBcXHUwMDNjPSBOVk1FX0NUUkxfUEFHRV9TSVpFKSB7XFxuK1xcdFxcdHBycDJfZG1hID0gZG1hX2xpc3RbbWFwX2lkeF07XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKERJVl9ST1VORF9VUChsZW5ndGgsIE5WTUVfQ1RSTF9QQUdFX1NJWkUpIFxcdTAwM2M9XFxuK1xcdCAgICBOVk1FX1NNQUxMX1BPT0xfU0laRSAvIHNpemVvZihfX2xlNjQpKVxcbitcXHRcXHRpb2QtXFx1MDAzZWZsYWdzIHw9IElPRF9TTUFMTF9ERVNDUklQVE9SO1xcbitcXG4rXFx0cHJwX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBHRlBfQVRPTUlDLFxcbitcXHRcXHRcXHRcXHUwMDI2cHJwX2RtYSk7XFxuK1xcdGlmICghcHJwX2xpc3QpXFxuK1xcdFxcdHJldHVybiBCTEtfU1RTX1JFU09VUkNFO1xcbitcXG4rXFx0aW9kLVxcdTAwM2VkZXNjcmlwdG9yc1tpb2QtXFx1MDAzZW5yX2Rlc2NyaXB0b3JzKytdID0gcHJwX2xpc3Q7XFxuK1xcdHBycDJfZG1hID0gcHJwX2RtYTtcXG4rXFx0aSA9IDA7XFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0aWYgKGkgPT0gTlZNRV9DVFJMX1BBR0VfU0laRSBcXHUwMDNlXFx1MDAzZSAzKSB7XFxuK1xcdFxcdFxcdF9fbGU2NCAqb2xkX3BycF9saXN0ID0gcHJwX2xpc3Q7XFxuK1xcbitcXHRcXHRcXHRwcnBfbGlzdCA9IGRtYV9wb29sX2FsbG9jKG52bWVxLVxcdTAwM2VkZXNjcmlwdG9yX3Bvb2xzLmxhcmdlLFxcbitcXHRcXHRcXHRcXHRcXHRHRlBfQVRPTUlDLCBcXHUwMDI2cHJwX2RtYSk7XFxuK1xcdFxcdFxcdGlmICghcHJwX2xpc3QpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZnJlZV9wcnBzO1xcbitcXHRcXHRcXHRpb2QtXFx1MDAzZWRlc2NyaXB0b3JzW2lvZC1cXHUwMDNlbnJfZGVzY3JpcHRvcnMrK10gPSBwcnBfbGlzdDtcXG4rXFx0XFx0XFx0cHJwX2xpc3RbMF0gPSBvbGRfcHJwX2xpc3RbaSAtIDFdO1xcbitcXHRcXHRcXHRvbGRfcHJwX2xpc3RbaSAtIDFdID0gY3B1X3RvX2xlNjQocHJwX2RtYSk7XFxuK1xcdFxcdFxcdGkgPSAxO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRkbWFfYWRkciA9IGRtYV9saXN0W21hcF9pZHgrK107XFxuK1xcdFxcdHBycF9saXN0W2krK10gPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XFxuK1xcbitcXHRcXHRsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTtcXG4rXFx0XFx0aWYgKGxlbmd0aCBcXHUwMDNjPSAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitkb25lOlxcbitcXHRpb2QtXFx1MDAzZWNtZC5jb21tb24uZHB0ci5wcnAxID0gY3B1X3RvX2xlNjQocHJwMV9kbWEpO1xcbitcXHRpb2QtXFx1MDAzZWNtZC5jb21tb24uZHB0ci5wcnAyID0gY3B1X3RvX2xlNjQocHJwMl9kbWEpO1xcbitcXHRyZXR1cm4gQkxLX1NUU19PSztcXG4rZnJlZV9wcnBzOlxcbitcXHRudm1lX2ZyZWVfZGVzY3JpcHRvcnMocmVxKTtcXG4rXFx0cmV0dXJuIEJMS19TVFNfUkVTT1VSQ0U7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG52bWVfZnJlZV9wcnBzKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIGludCBhdHRycylcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcXG5AQCAtOTM3LDYgKzEwNzgsMTEgQEAgc3RhdGljIHZvaWQgbnZtZV91bm1hcF9kYXRhKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSBudm1lcS1cXHUwMDNlZGV2LVxcdTAwM2VkZXY7XFxuIFxcdHVuc2lnbmVkIGludCBhdHRycyA9IDA7XFxuIFxcbitcXHRpZiAoYmxrX21xX3JxX2lzX2RtYWJ1ZihyZXEpKSB7XFxuK1xcdFxcdG52bWVfcnFfY2xlYW5fZG1hYnVmX21hcChudm1lcS1cXHUwMDNlZGV2LCByZXEpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChpb2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9EX1NJTkdMRV9TRUdNRU5UKSB7XFxuIFxcdFxcdHN0YXRpY19hc3NlcnQob2Zmc2V0b2YodW5pb24gbnZtZV9kYXRhX3B0ciwgcHJwMSkgPT1cXG4gXFx0XFx0XFx0XFx0b2Zmc2V0b2YodW5pb24gbnZtZV9kYXRhX3B0ciwgc2dsLmFkZHIpKTtcXG5AQCAtMTE0MSwxMiArMTI4NywxOCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfcHJwKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuIFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X2RhdGFfYWRkcihzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuKVxcbit7XFxuK1xcdHNnZS1cXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KGFkZHIpO1xcbitcXHRzZ2UtXFx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTMyKGxlbik7XFxuK1xcdHNnZS1cXHUwMDNldHlwZSA9IE5WTUVfU0dMX0ZNVF9EQVRBX0RFU0MgXFx1MDAzY1xcdTAwM2MgNDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbnZtZV9wY2lfc2dsX3NldF9kYXRhKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsXFxuIFxcdFxcdHN0cnVjdCBibGtfZG1hX2l0ZXIgKml0ZXIpXFxuIHtcXG4tXFx0c2dlLVxcdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQoaXRlci1cXHUwMDNlYWRkcik7XFxuLVxcdHNnZS1cXHUwMDNlbGVuZ3RoID0gY3B1X3RvX2xlMzIoaXRlci1cXHUwMDNlbGVuKTtcXG4tXFx0c2dlLVxcdTAwM2V0eXBlID0gTlZNRV9TR0xfRk1UX0RBVEFfREVTQyBcXHUwMDNjXFx1MDAzYyA0O1xcbitcXHRudm1lX3BjaV9zZ2xfc2V0X2RhdGFfYWRkcihzZ2UsIGl0ZXItXFx1MDAzZWFkZHIsIGl0ZXItXFx1MDAzZWxlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfc2VnKHN0cnVjdCBudm1lX3NnbF9kZXNjICpzZ2UsXFxuQEAgLTExNTcsNiArMTMwOSwxNTggQEAgc3RhdGljIHZvaWQgbnZtZV9wY2lfc2dsX3NldF9zZWcoc3RydWN0IG52bWVfc2dsX2Rlc2MgKnNnZSxcXG4gXFx0c2dlLVxcdTAwM2V0eXBlID0gTlZNRV9TR0xfRk1UX0xBU1RfU0VHX0RFU0MgXFx1MDAzY1xcdTAwM2MgNDtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGRtYV9hZGRyX3QgKmZpcnN0X2RtYSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyICpmaXJzdF9sZW4pXFxuK3tcXG4rXFx0c3RydWN0IGJpbyAqYmlvID0gcmVxLVxcdTAwM2ViaW87XFxuK1xcdHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAgKm1hcCA9IHRvX252bWVfZG1hYnVmX21hcChiaW8tXFx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbitcXHR1bnNpZ25lZCBsb25nIHRtcDtcXG4rXFx0c2l6ZV90IG9mZnNldCA9IGJpby1cXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XFxuK1xcdHNpemVfdCByZW1haW5pbmcgPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpO1xcbitcXHRkbWFfYWRkcl90IGxhc3RfZW5kID0gMDtcXG4rXFx0dW5zaWduZWQgaW50IG5lbnRzID0gMDtcXG4rXFx0ZG1hX2FkZHJfdCBkbWEgPSAwO1xcbitcXHR1MzIgbGVuID0gMDtcXG4rXFx0Ym9vbCBoYXZlID0gZmFsc2U7XFxuK1xcbitcXHRmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhtYXAtXFx1MDAzZXNndCwgc2csIHRtcCkge1xcbitcXHRcXHRzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XFxuK1xcdFxcdGRtYV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTtcXG4rXFxuK1xcdFxcdGlmICghcmVtYWluaW5nKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlPSBzZ19sZW4pIHtcXG4rXFx0XFx0XFx0b2Zmc2V0IC09IHNnX2xlbjtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGFkZHIgKz0gb2Zmc2V0O1xcbitcXHRcXHRzZ19sZW4gLT0gb2Zmc2V0O1xcbitcXHRcXHRvZmZzZXQgPSAwO1xcbitcXG4rXFx0XFx0d2hpbGUgKHNnX2xlbiBcXHUwMDI2XFx1MDAyNiByZW1haW5pbmcpIHtcXG4rXFx0XFx0XFx0dTMyIGNodW5rID0gbWluX3Qoc2l6ZV90LCByZW1haW5pbmcsIHNnX2xlbik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWhhdmUgfHwgbGFzdF9lbmQgIT0gYWRkcikge1xcbitcXHRcXHRcXHRcXHRuZW50cysrO1xcbitcXHRcXHRcXHRcXHRpZiAobmVudHMgPT0gMSkge1xcbitcXHRcXHRcXHRcXHRcXHRkbWEgPSBhZGRyO1xcbitcXHRcXHRcXHRcXHRcXHRsZW4gPSBjaHVuaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2UgaWYgKG5lbnRzID09IDEpIHtcXG4rXFx0XFx0XFx0XFx0bGVuICs9IGNodW5rO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRoYXZlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0bGFzdF9lbmQgPSBhZGRyICsgY2h1bms7XFxuK1xcdFxcdFxcdGFkZHIgKz0gY2h1bms7XFxuK1xcdFxcdFxcdHNnX2xlbiAtPSBjaHVuaztcXG4rXFx0XFx0XFx0cmVtYWluaW5nIC09IGNodW5rO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh1bmxpa2VseShyZW1haW5pbmcpKVxcbitcXHQgICAgICAgcmV0dXJuIDA7XFxuK1xcbitcXHQqZmlyc3RfZG1hID0gZG1hO1xcbitcXHQqZmlyc3RfbGVuID0gbGVuO1xcbitcXHRyZXR1cm4gbmVudHM7XFxuK31cXG4rXFxuK3N0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG52bWVfcXVldWUgKm52bWVxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBlbnRyaWVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRtYV9hZGRyX3QgZmlyc3RfZG1hLCB1MzIgZmlyc3RfbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xcbitcXHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXFx1MDAzZWJpbztcXG4rXFx0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cXHUwMDNlYmlfZG1hYnVmX21hcCk7XFxuK1xcdHNpemVfdCBsZW5ndGggPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpO1xcbitcXHRzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dfbGlzdCA9IE5VTEw7XFxuK1xcdGRtYV9hZGRyX3Qgc2dsX2RtYSA9IDAsIGxhc3RfZW5kID0gMDtcXG4rXFx0dW5zaWduZWQgaW50IG1hcHBlZCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdG1wO1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xcbitcXHRzaXplX3Qgb2Zmc2V0LCByZW1haW5pbmc7XFxuK1xcdGJvb2wgaGF2ZSA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKCFlbnRyaWVzKVxcbitcXHRcXHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcXG4rXFx0aWYgKGVudHJpZXMgXFx1MDAzZSBOVk1FX01BWF9TRUdTKVxcbitcXHRcXHRyZXR1cm4gQkxLX1NUU19BR0FJTjtcXG4rXFxuK1xcdGlvZC1cXHUwMDNlY21kLmNvbW1vbi5mbGFncyA9IE5WTUVfQ01EX1NHTF9NRVRBQlVGO1xcbitcXHRpb2QtXFx1MDAzZXRvdGFsX2xlbiA9IGxlbmd0aDtcXG4rXFxuK1xcdG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2UobnZtZXEtXFx1MDAzZWRldiwgcmVxKTtcXG4rXFxuK1xcdGlmIChlbnRyaWVzID09IDEpIHtcXG4rXFx0XFx0bnZtZV9wY2lfc2dsX3NldF9kYXRhX2FkZHIoXFx1MDAyNmlvZC1cXHUwMDNlY21kLmNvbW1vbi5kcHRyLnNnbCwgZmlyc3RfZG1hLFxcbitcXHRcXHRcXHRcXHRcXHQgICBmaXJzdF9sZW4pO1xcbitcXHRcXHRyZXR1cm4gQkxLX1NUU19PSztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVudHJpZXMgXFx1MDAzYz0gTlZNRV9TTUFMTF9QT09MX1NJWkUgLyBzaXplb2YoKnNnX2xpc3QpKVxcbitcXHRcXHRpb2QtXFx1MDAzZWZsYWdzIHw9IElPRF9TTUFMTF9ERVNDUklQVE9SO1xcbitcXG4rXFx0c2dfbGlzdCA9IGRtYV9wb29sX2FsbG9jKG52bWVfZG1hX3Bvb2wobnZtZXEsIGlvZCksIEdGUF9BVE9NSUMsXFxuK1xcdFxcdFxcdFxcdCBcXHUwMDI2c2dsX2RtYSk7XFxuK1xcdGlmICghc2dfbGlzdClcXG4rXFx0XFx0cmV0dXJuIEJMS19TVFNfUkVTT1VSQ0U7XFxuK1xcdGlvZC1cXHUwMDNlZGVzY3JpcHRvcnNbaW9kLVxcdTAwM2Vucl9kZXNjcmlwdG9ycysrXSA9IHNnX2xpc3Q7XFxuK1xcbitcXHRvZmZzZXQgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xcbitcXHRyZW1haW5pbmcgPSBsZW5ndGg7XFxuK1xcbitcXHRmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhtYXAtXFx1MDAzZXNndCwgc2csIHRtcCkge1xcbitcXHRcXHRzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XFxuK1xcdFxcdGRtYV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTtcXG4rXFxuK1xcdFxcdGlmICghcmVtYWluaW5nKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlPSBzZ19sZW4pIHtcXG4rXFx0XFx0XFx0b2Zmc2V0IC09IHNnX2xlbjtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGFkZHIgKz0gb2Zmc2V0O1xcbitcXHRcXHRzZ19sZW4gLT0gb2Zmc2V0O1xcbitcXHRcXHRvZmZzZXQgPSAwO1xcbitcXG4rXFx0XFx0d2hpbGUgKHNnX2xlbiBcXHUwMDI2XFx1MDAyNiByZW1haW5pbmcpIHtcXG4rXFx0XFx0XFx0dTMyIGNodW5rID0gbWluX3Qoc2l6ZV90LCByZW1haW5pbmcsIHNnX2xlbik7XFxuK1xcbitcXHRcXHRcXHRpZiAoaGF2ZSBcXHUwMDI2XFx1MDAyNiBsYXN0X2VuZCA9PSBhZGRyKSB7XFxuK1xcdFxcdFxcdFxcdHUzMiBvbGQgPSBsZTMyX3RvX2NwdShzZ19saXN0W21hcHBlZCAtIDFdLmxlbmd0aCk7XFxuK1xcbitcXHRcXHRcXHRcXHRzZ19saXN0W21hcHBlZCAtIDFdLmxlbmd0aCA9IGNwdV90b19sZTMyKG9sZCArIGNodW5rKTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShtYXBwZWQgPT0gZW50cmllcykpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcdFxcdFxcdFxcdG52bWVfcGNpX3NnbF9zZXRfZGF0YV9hZGRyKFxcdTAwMjZzZ19saXN0W21hcHBlZCsrXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYWRkciwgY2h1bmspO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGhhdmUgPSB0cnVlO1xcbitcXHRcXHRcXHRsYXN0X2VuZCA9IGFkZHIgKyBjaHVuaztcXG4rXFx0XFx0XFx0YWRkciArPSBjaHVuaztcXG4rXFx0XFx0XFx0c2dfbGVuIC09IGNodW5rO1xcbitcXHRcXHRcXHRyZW1haW5pbmcgLT0gY2h1bms7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHVubGlrZWx5KHJlbWFpbmluZykpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcbitcXHRudm1lX3BjaV9zZ2xfc2V0X3NlZyhcXHUwMDI2aW9kLVxcdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsLCBzZ2xfZG1hLCBtYXBwZWQpO1xcbitcXHRyZXR1cm4gQkxLX1NUU19PSztcXG4rZXJyX2ZyZWU6XFxuK1xcdGlvZC1cXHUwMDNlbnJfZGVzY3JpcHRvcnMtLTtcXG4rXFx0ZG1hX3Bvb2xfZnJlZShudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBzZ19saXN0LCBzZ2xfZG1hKTtcXG4rXFx0cmV0dXJuIEJMS19TVFNfSU9FUlI7XFxuK31cXG4rXFxuIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9zZ2woc3RydWN0IHJlcXVlc3QgKnJlcSxcXG4gXFx0XFx0c3RydWN0IGJsa19kbWFfaXRlciAqaXRlcilcXG4ge1xcbkBAIC0xMjUxLDYgKzE1NTUsMzQgQEAgc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX21hcF9kYXRhKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuIFxcdHN0cnVjdCBibGtfZG1hX2l0ZXIgaXRlcjtcXG4gXFx0YmxrX3N0YXR1c190IHJldDtcXG4gXFxuK1xcdGlmIChibGtfbXFfcnFfaXNfZG1hYnVmKHJlcSkpIHtcXG4rXFx0XFx0aWYgKHVzZV9zZ2wgIT0gU0dMX1VOU1VQUE9SVEVEKSB7XFxuK1xcdFxcdFxcdGRtYV9hZGRyX3QgZmlyc3RfZG1hO1xcbitcXHRcXHRcXHR1MzIgZmlyc3RfbGVuO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZW50cmllcztcXG4rXFxuK1xcdFxcdFxcdGVudHJpZXMgPSBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzKHJlcSwgXFx1MDAyNmZpcnN0X2RtYSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmaXJzdF9sZW4pO1xcbitcXG4rXFx0XFx0XFx0aWYgKHVzZV9zZ2wgPT0gU0dMX0ZPUkNFRCkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2wocmVxLCBudm1lcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZW50cmllcywgZmlyc3RfZG1hLCBmaXJzdF9sZW4pO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0ID09IEJMS19TVFNfQUdBSU4gPyBCTEtfU1RTX0lPRVJSIDogcmV0O1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRpZiAoc2dsX3RocmVzaG9sZCBcXHUwMDI2XFx1MDAyNiBlbnRyaWVzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBESVZfUk9VTkRfVVAoYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSwgZW50cmllcykgXFx1MDAzZT1cXG4rXFx0XFx0XFx0ICAgIHNnbF90aHJlc2hvbGQpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHJlcSwgbnZtZXEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudHJpZXMsIGZpcnN0X2RtYSwgZmlyc3RfbGVuKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldCAhPSBCTEtfU1RTX0FHQUlOKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAocmVxLCBudm1lcSk7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFRyeSB0byBza2lwIHRoZSBETUEgaXRlcmF0b3IgZm9yIHNpbmdsZSBzZWdtZW50IHJlcXVlc3RzLCBhcyB0aGF0XFxuIFxcdCAqIHNpZ25pZmljYW50bHkgaW1wcm92ZXMgcGVyZm9ybWFuY2VzIGZvciBzbWFsbCBJL08gc2l6ZXMuXFxuQEAgLTIyNjksNiArMjYwMSwxMTIgQEAgc3RhdGljIGludCBudm1lX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEsIGludCBxaWQsIGJvb2wgcG9sbGVkKVxcbiBcXHRyZXR1cm4gcmVzdWx0O1xcbiB9XFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpXFxuK3N0YXRpYyB2b2lkIG52bWVfZG1hYnVmX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gYXR0YWNoLVxcdTAwM2VpbXBvcnRlcl9wcml2O1xcbitcXG4rXFx0ZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKGN0eCk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbnZtZV9kbWFidWZfaW1wb3J0ZXJfb3BzID0ge1xcbitcXHQuaW52YWxpZGF0ZV9tYXBwaW5nc1xcdD0gbnZtZV9kbWFidWZfaW52YWxpZGF0ZV9tYXBwaW5ncyxcXG4rXFx0LmFsbG93X3BlZXIycGVlclxcdD0gdHJ1ZSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm52bWVfZG1hX2J1Zl9pb19tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXFxuK3tcXG4rXFx0dW5zaWduZWQgbnJfZW50cmllcyA9IGN0eC1cXHUwMDNlZG1hYnVmLVxcdTAwM2VzaXplIC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcXG4rXFx0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVxcdTAwM2VkZXZfcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyB0bXAsIGkgPSAwO1xcbitcXHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXA7XFxuK1xcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuK1xcdHN0cnVjdCBzZ190YWJsZSAqc2d0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoY3R4LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0bWFwID0ga21hbGxvY19mbGV4KCptYXAsIGRtYV9saXN0LCBucl9lbnRyaWVzKTtcXG4rXFx0aWYgKCFtYXApXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXG4rXFx0c2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2gsIGN0eC1cXHUwMDNlZGlyKTtcXG4rXFx0aWYgKElTX0VSUihzZ3QpKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoc2d0KTtcXG4rXFx0XFx0c2d0ID0gTlVMTDtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvcl9lYWNoX3NndGFibGVfZG1hX3NnKHNndCwgc2csIHRtcCkge1xcbitcXHRcXHRkbWFfYWRkcl90IGRtYV9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpO1xcbitcXG4rXFx0XFx0aWYgKHNnX2xlbiAlIE5WTUVfQ1RSTF9QQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHdoaWxlIChzZ19sZW4pIHtcXG4rXFx0XFx0XFx0bWFwLVxcdTAwM2VkbWFfbGlzdFtpKytdID0gZG1hX2FkZHI7XFxuK1xcdFxcdFxcdGRtYV9hZGRyICs9IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XFxuK1xcdFxcdFxcdHNnX2xlbiAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYV9idWZfaW9faW5pdF9tYXAoY3R4LCBcXHUwMDI2bWFwLVxcdTAwM2ViYXNlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdG1hcC1cXHUwMDNlbnJfZW50cmllcyA9IG5yX2VudHJpZXM7XFxuK1xcdG1hcC1cXHUwMDNlc2d0ID0gc2d0O1xcbitcXHRyZXR1cm4gXFx1MDAyNm1hcC1cXHUwMDNlYmFzZTtcXG4rZXJyOlxcbitcXHRpZiAoc2d0KVxcbitcXHRcXHRkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBzZ3QsIGN0eC1cXHUwMDNlZGlyKTtcXG4rXFx0a2ZyZWUobWFwKTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZV9kbWFfYnVmX2lvX3VubWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwX2Jhc2UpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVxcdTAwM2VkZXZfcHJpdjtcXG4rXFx0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKG1hcF9iYXNlKTtcXG4rXFxuK1xcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIG1hcC1cXHUwMDNlc2d0LCBjdHgtXFx1MDAzZWRpcik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWVfZG1hX2J1Zl9pb19yZWxlYXNlKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGN0eC1cXHUwMDNlZGV2X3ByaXY7XFxuK1xcbitcXHRkbWFfYnVmX2RldGFjaChjdHgtXFx1MDAzZWRtYWJ1ZiwgYXR0YWNoKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzIG52bWVfZG1hX2J1Zl9pb19vcHMgPSB7XFxuK1xcdC5tYXBcXHRcXHQ9IG52bWVfZG1hX2J1Zl9pb19tYXAsXFxuK1xcdC51bm1hcFxcdFxcdD0gbnZtZV9kbWFfYnVmX2lvX3VubWFwLFxcbitcXHQucmVsZWFzZVxcdD0gbnZtZV9kbWFfYnVmX2lvX3JlbGVhc2UsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IG52bWVfY3RybCAqY3RybCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoO1xcbitcXHRzdHJ1Y3QgbnZtZV9kZXYgKmRldiA9IHRvX252bWVfZGV2KGN0cmwpO1xcbitcXG4rXFx0YXR0YWNoID0gZG1hX2J1Zl9keW5hbWljX2F0dGFjaChjdHgtXFx1MDAzZWRtYWJ1ZiwgZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZudm1lX2RtYWJ1Zl9pbXBvcnRlcl9vcHMsIGN0eCk7XFxuK1xcdGlmIChJU19FUlIoYXR0YWNoKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoYXR0YWNoKTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlZGV2X3ByaXYgPSBhdHRhY2g7XFxuK1xcdGN0eC1cXHUwMDNlZGV2X29wcyA9IFxcdTAwMjZudm1lX2RtYV9idWZfaW9fb3BzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBudm1lX21xX2FkbWluX29wcyA9IHtcXG4gXFx0LnF1ZXVlX3JxXFx0PSBudm1lX3F1ZXVlX3JxLFxcbiBcXHQuY29tcGxldGVcXHQ9IG52bWVfcGNpX2NvbXBsZXRlX3JxLFxcbkBAIC0zNTYzLDYgKzQwMDEsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG52bWVfY3RybF9vcHMgbnZtZV9wY2lfY3RybF9vcHMgPSB7XFxuIFxcdC5wcmludF9kZXZpY2VfaW5mb1xcdD0gbnZtZV9wY2lfcHJpbnRfZGV2aWNlX2luZm8sXFxuIFxcdC5zdXBwb3J0c19wY2lfcDJwZG1hXFx0PSBudm1lX3BjaV9zdXBwb3J0c19wY2lfcDJwZG1hLFxcbiBcXHQuZ2V0X3ZpcnRfYm91bmRhcnlcXHQ9IG52bWVfcGNpX2dldF92aXJ0X2JvdW5kYXJ5LFxcbisjaWYgZGVmaW5lZChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpXFxuK1xcdC5pbml0X2RtYV9idWZfaW9fY3R4XFx0PSBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4LFxcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgbnZtZV9kZXZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2KVxcbkBAIC00MzI3LDUgKzQ3NjgsNiBAQCBNT0RVTEVfQVVUSE9SKFxcXCJNYXR0aGV3IFdpbGNveCBcXHUwMDNjd2lsbHlAbGludXguaW50ZWwuY29tXFx1MDAzZVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIE1PRFVMRV9WRVJTSU9OKFxcXCIxLjBcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJOVk1lIGhvc3QgUENJZSB0cmFuc3BvcnQgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9JTVBPUlRfTlMoXFxcIkRNQV9CVUZcXFwiKTtcXG4gbW9kdWxlX2luaXQobnZtZV9pbml0KTtcXG4gbW9kdWxlX2V4aXQobnZtZV9leGl0KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmMgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xcbmluZGV4IGJhNWM3YjNlMmE3YzYuLmNlMDNhMGVhNGRlZDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xcbkBAIC0zNTcsNyArMzU3LDcgQEAgc3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNnJlcS1cXHUwMDNlaXRlciwgZGlyLFxcbiBcXHRcXHRcXHRfX2J2ZWNfaXRlcl9idmVjKGJpby1cXHUwMDNlYmlfaW9fdmVjLCBiaW8tXFx1MDAzZWJpX2l0ZXIpLCBucl9idmVjLFxcbiBcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuLVxcdFxcdHJlcS1cXHUwMDNlaXRlci5pb3Zfb2Zmc2V0ID0gYmlvLVxcdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL21pc2MuaCBiL2ZzL2J0cmZzL21pc2MuaFxcbmluZGV4IDY5NGJlNmQwNTYyYTQuLjgwMjA2MDk0MzE4MDEgMTAwNjQ0XFxuLS0tIGEvZnMvYnRyZnMvbWlzYy5oXFxuKysrIGIvZnMvYnRyZnMvbWlzYy5oXFxuQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYnZlY19pdGVyIGluaXRfYnZlY19pdGVyX2Zvcl9iaW8oc3RydWN0IGJpbyAqYmlvKVxcbiBcXHRcXHQuYmlfc2VjdG9yID0gMCxcXG4gXFx0XFx0LmJpX3NpemUgPSBiaW9fc2l6ZSxcXG4gXFx0XFx0LmJpX2lkeCA9IDAsXFxuLVxcdFxcdC5iaV9idmVjX2RvbmUgPSAwLFxcbitcXHRcXHQuYmlfb2Zmc2V0ID0gMCxcXG4gXFx0fTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmhcXG5pbmRleCA4ZjMzZjcxN2IxNGY1Li5jMDUzZTk0NDQ1MTQ3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jpby5oXFxuQEAgLTgwLDcgKzgwLDggQEAgc3RhdGljIGlubGluZSBib29sIGJpb19ub19hZHZhbmNlX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvKVxcbiB7XFxuIFxcdHJldHVybiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfRElTQ0FSRCB8fFxcbiBcXHQgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1NFQ1VSRV9FUkFTRSB8fFxcbi1cXHQgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFX1pFUk9FUztcXG4rXFx0ICAgICAgIGJpb19vcChiaW8pID09IFJFUV9PUF9XUklURV9aRVJPRVMgfHxcXG4rXFx0ICAgICAgIG9wX2lzX2RtYWJ1ZihiaW8tXFx1MDAzZWJpX29wZik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCAqYmlvX2RhdGEoc3RydWN0IGJpbyAqYmlvKVxcbkBAIC0xMTMsMTEgKzExNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2FkdmFuY2VfaXRlcihjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXFxuIHtcXG4gXFx0aXRlci1cXHUwMDNlYmlfc2VjdG9yICs9IGJ5dGVzIFxcdTAwM2VcXHUwMDNlIDk7XFxuIFxcbi1cXHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKVxcbitcXHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKSB7XFxuIFxcdFxcdGl0ZXItXFx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XFxuLVxcdGVsc2VcXG4rXFx0XFx0aXRlci1cXHUwMDNlYmlfb2Zmc2V0ICs9IGJ5dGVzO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRidmVjX2l0ZXJfYWR2YW5jZShiaW8tXFx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xcbiBcXHRcXHQvKiBUT0RPOiBJdCBpcyByZWFzb25hYmxlIHRvIGNvbXBsZXRlIGJpbyB3aXRoIGVycm9yIGhlcmUuICovXFxuK1xcdH1cXG4gfVxcbiBcXG4gLyogQGJ5dGVzIHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRvIGJ2ZWNbaS1cXHUwMDNlYmlfaWR4XS5idl9sZW4gKi9cXG5AQCAtMTI3LDEwICsxMzAsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19hZHZhbmNlX2l0ZXJfc2luZ2xlKGNvbnN0IHN0cnVjdCBiaW8gKmJpbyxcXG4ge1xcbiBcXHRpdGVyLVxcdTAwM2ViaV9zZWN0b3IgKz0gYnl0ZXMgXFx1MDAzZVxcdTAwM2UgOTtcXG4gXFxuLVxcdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpXFxuK1xcdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpIHtcXG4gXFx0XFx0aXRlci1cXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcXG4tXFx0ZWxzZVxcbitcXHRcXHRpdGVyLVxcdTAwM2ViaV9vZmZzZXQgKz0gYnl0ZXM7XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdGJ2ZWNfaXRlcl9hZHZhbmNlX3NpbmdsZShiaW8tXFx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHZvaWQgX19iaW9fYWR2YW5jZShzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGJ5dGVzKTtcXG5AQCAtMzk1LDEyICs0MDAsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb193b3VsZGJsb2NrX2Vycm9yKHN0cnVjdCBiaW8gKmJpbylcXG4gXFxuIC8qXFxuICAqIENhbGN1bGF0ZSBudW1iZXIgb2YgYnZlYyBzZWdtZW50cyB0aGF0IHNob3VsZCBiZSBhbGxvY2F0ZWQgdG8gZml0IGRhdGFcXG4tICogcG9pbnRlZCBieSBAaXRlci4gSWYgQGl0ZXIgaXMgYmFja2VkIGJ5IGJ2ZWMgaXQncyBnb2luZyB0byBiZSByZXVzZWRcXG4tICogaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGEgbmV3IG9uZS5cXG4rICogcG9pbnRlZCBieSBAaXRlci4gSWYgQGl0ZXIgaXMgYmFja2VkIGJ5IGEgYnZlYyBvciBhIGRtYWJ1ZiwgdGhlIGJ2ZWMgYXJyYXkgL1xcbisgKiB0aGUgZG1hIG1hcCBhcmUgZ29pbmcgdG8gYmUgcmV1c2VkLCBhbmQgc28gbm8gZXh0cmEgYWxsb2NhdGlvbiBpcyByZXF1aXJlZC5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IGJpb19pb3ZfdmVjc190b19hbGxvYyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGludCBtYXhfc2VncylcXG4ge1xcbi1cXHRpZiAoaW92X2l0ZXJfaXNfYnZlYyhpdGVyKSlcXG4rXFx0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikgfHwgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdHJldHVybiBpb3ZfaXRlcl9ucGFnZXMoaXRlciwgbWF4X3NlZ3MpO1xcbiB9XFxuQEAgLTQ4MCw2ICs0ODUsNyBAQCBpbnQgYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0dW5zaWduZWQgbGVuX2FsaWduX21hc2spO1xcbiBcXG4gdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG4rdm9pZCBiaW9fZG1hYnVmX21hcF9zZXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xcbiB2b2lkIF9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBib29sIG1hcmtfZGlydHkpO1xcbiBleHRlcm4gdm9pZCBiaW9fc2V0X3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7XFxuIGV4dGVybiB2b2lkIGJpb19jaGVja19wYWdlc19kaXJ0eShzdHJ1Y3QgYmlvICpiaW8pO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oIGIvaW5jbHVkZS9saW51eC9ibGstbXEuaFxcbmluZGV4IGFmODc4NTk3YWZiOGMuLjdjNzUwNGM4NGUwOTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGstbXEuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcXG5AQCAtMTAxNyw2ICsxMDE3LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqYmxrX21xX3JxX3RvX3BkdShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIFxcdHJldHVybiBycSArIDE7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfbXFfcnFfaXNfZG1hYnVmKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4re1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gcnEtXFx1MDAzZWJpbyBcXHUwMDI2XFx1MDAyNiBvcF9pc19kbWFidWYocnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfb3BmKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqcXVldWVfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGlkKVxcbiB7XFxuIFxcdHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbmluZGV4IDg4MDhlZTc2ZTczYzAuLmQ2MDVlMzE3MTJkNDkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcXG5AQCAtMjMzLDcgKzIzMywxMiBAQCBzdHJ1Y3QgYmlvIHtcXG4gXFx0YXRvbWljX3RcXHRcXHRfX2JpX3JlbWFpbmluZztcXG4gXFxuIFxcdC8qIFRoZSBhY3R1YWwgdmVjIGxpc3QsIHByZXNlcnZlZCBieSBiaW9fcmVzZXQoKSAqL1xcbi1cXHRzdHJ1Y3QgYmlvX3ZlY1xcdFxcdCpiaV9pb192ZWM7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IGJpb192ZWNcXHRcXHQqYmlfaW9fdmVjO1xcbitcXHRcXHQvKiBEcml2ZXIgc3BlY2lmaWMgZG1hIG1hcCwgdmFsaWQgSUZGIFJFUV9ETUFCVUYgaXMgc2V0ICovXFxuK1xcdFxcdHN0cnVjdCBkbWFfYnVmX2lvX21hcFxcdCpiaV9kbWFidWZfbWFwO1xcbitcXHR9O1xcbitcXG4gXFx0c3RydWN0IGJ2ZWNfaXRlclxcdGJpX2l0ZXI7XFxuIFxcbiBcXHR1bmlvbiB7XFxuQEAgLTQwMSw2ICs0MDYsNyBAQCBlbnVtIHJlcV9mbGFnX2JpdHMge1xcbiBcXHRfX1JFUV9EUlYsXFx0XFx0LyogZm9yIGRyaXZlciB1c2UgKi9cXG4gXFx0X19SRVFfRlNfUFJJVkFURSxcXHQvKiBmb3IgZmlsZSBzeXN0ZW0gKHN1Ym1pdHRlcikgdXNlICovXFxuIFxcdF9fUkVRX0FUT01JQyxcXHRcXHQvKiBmb3IgYXRvbWljIHdyaXRlIG9wZXJhdGlvbnMgKi9cXG4rXFx0X19SRVFfRE1BQlVGLFxcdFxcdC8qIFVzaW5nIHByZW1tYXBlZCBkbWEgYnVmZmVycyAqL1xcbiBcXHQvKlxcbiBcXHQgKiBDb21tYW5kIHNwZWNpZmljIGZsYWdzLCBrZWVwIGxhc3Q6XFxuIFxcdCAqL1xcbkBAIC00MzMsNiArNDM5LDcgQEAgZW51bSByZXFfZmxhZ19iaXRzIHtcXG4gI2RlZmluZSBSRVFfRFJWXFx0XFx0KF9fZm9yY2UgYmxrX29wZl90KSgxVUxMIFxcdTAwM2NcXHUwMDNjIF9fUkVRX0RSVilcXG4gI2RlZmluZSBSRVFfRlNfUFJJVkFURVxcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcXHUwMDNjXFx1MDAzYyBfX1JFUV9GU19QUklWQVRFKVxcbiAjZGVmaW5lIFJFUV9BVE9NSUNcXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXFx1MDAzY1xcdTAwM2MgX19SRVFfQVRPTUlDKVxcbisjZGVmaW5lIFJFUV9ETUFCVUZcXHQoX19mb3JjZSBibGtfb3BmX3QpKDFVTEwgXFx1MDAzY1xcdTAwM2MgX19SRVFfRE1BQlVGKVxcbiBcXG4gI2RlZmluZSBSRVFfTk9VTk1BUFxcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcXHUwMDNjXFx1MDAzYyBfX1JFUV9OT1VOTUFQKVxcbiBcXG5AQCAtNDg2LDYgKzQ5MywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgb3BfaXNfZGlzY2FyZChibGtfb3BmX3Qgb3ApXFxuIFxcdHJldHVybiAob3AgXFx1MDAyNiBSRVFfT1BfTUFTSykgPT0gUkVRX09QX0RJU0NBUkQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBvcF9pc19kbWFidWYoYmxrX29wZl90IG9wKVxcbit7XFxuK1xcdHJldHVybiBvcCBcXHUwMDI2IFJFUV9ETUFCVUY7XFxuK31cXG4rXFxuIC8qXFxuICAqIENoZWNrIGlmIGEgYmlvIG9yIHJlcXVlc3Qgb3BlcmF0aW9uIGlzIGEgem9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbi5cXG4gICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuaW5kZXggOTIxM2E1NzE2Zjk1YS4uOWY0YzkyZTUxZGM5NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxcbkBAIC0xNjgyLDYgKzE2ODIsOCBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMge1xcbiBcXHQvKiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGlkZW50aWZpZXIgb3IgYSBuZWdhdGl2ZSBlcnJubzogKi9cXG4gXFx0aW50ICgqZ2V0X3VuaXF1ZV9pZCkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IGlkWzE2XSxcXG4gXFx0XFx0XFx0ZW51bSBibGtfdW5pcXVlX2lkIGlkX3R5cGUpO1xcbitcXHRpbnQgKCppbml0X2RtYV9idWZfaW9fY3R4KShzdHJ1Y3QgYmxvY2tfZGV2aWNlICosXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTtcXG4gXFx0c3RydWN0IG1vZHVsZSAqb3duZXI7XFxuIFxcdGNvbnN0IHN0cnVjdCBwcl9vcHMgKnByX29wcztcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnZlYy5oIGIvaW5jbHVkZS9saW51eC9idmVjLmhcXG5pbmRleCA5MjgzN2UyNzQzZjE5Li5iNjM5MTRmZjU2ZTMzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnZlYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9idmVjLmhcXG5AQCAtMTA4LDkgKzEwOCwxMCBAQCBzdHJ1Y3QgYnZlY19pdGVyIHtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0YmlfaWR4O1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQ3VycmVudCBvZmZzZXQgaW4gdGhlIGJ2ZWMgZW50cnkgcG9pbnRlZCB0byBieSBgYmlfaWR4YC5cXG4rXFx0ICogQ3VycmVudCBvZmZzZXQgaW4gdGhlIGJ2ZWMgZW50cnkgcG9pbnRlZCB0byBieSBgYmlfaWR4YCBvciBpbnRvXFxuK1xcdCAqIGEgZG1hLWJ1ZiBtYXAuXFxuIFxcdCAqL1xcbi1cXHR1bnNpZ25lZCBpbnRcXHRcXHRiaV9idmVjX2RvbmU7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGJpX29mZnNldDtcXG4gfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7XFxuIFxcbiBzdHJ1Y3QgYnZlY19pdGVyX2FsbCB7XFxuQEAgLTEzNSwxNCArMTM2LDE0IEBAIG1wX2J2ZWNfaXRlcl9wYWdlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjcywgY29uc3Qgc3RydWN0IGJ2ZWNfaXRlciBpdGVyKVxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludFxcbiBtcF9idmVjX2l0ZXJfbGVuKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjcywgY29uc3Qgc3RydWN0IGJ2ZWNfaXRlciBpdGVyKVxcbiB7XFxuLVxcdHJldHVybiBtaW4oX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktXFx1MDAzZWJ2X2xlbiAtIGl0ZXIuYmlfYnZlY19kb25lLFxcbitcXHRyZXR1cm4gbWluKF9fYnZlY19pdGVyX2J2ZWMoYnZlY3MsIGl0ZXIpLVxcdTAwM2Vidl9sZW4gLSBpdGVyLmJpX29mZnNldCxcXG4gXFx0XFx0XFx0aXRlci5iaV9zaXplKTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnRcXG4gbXBfYnZlY19pdGVyX29mZnNldChjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY3MsIGNvbnN0IHN0cnVjdCBidmVjX2l0ZXIgaXRlcilcXG4ge1xcbi1cXHRyZXR1cm4gX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktXFx1MDAzZWJ2X29mZnNldCArIGl0ZXIuYmlfYnZlY19kb25lO1xcbitcXHRyZXR1cm4gX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktXFx1MDAzZWJ2X29mZnNldCArIGl0ZXIuYmlfb2Zmc2V0O1xcbiB9XFxuIFxcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludFxcbkBAIC0yMDQsNyArMjA1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcXG4gXFx0fVxcbiBcXG4gXFx0aXRlci1cXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcXG4tXFx0Ynl0ZXMgKz0gaXRlci1cXHUwMDNlYmlfYnZlY19kb25lO1xcbitcXHRieXRlcyArPSBpdGVyLVxcdTAwM2ViaV9vZmZzZXQ7XFxuIFxcbiBcXHR3aGlsZSAoYnl0ZXMgXFx1MDAyNlxcdTAwMjYgYnl0ZXMgXFx1MDAzZT0gYnZbaWR4XS5idl9sZW4pIHtcXG4gXFx0XFx0Ynl0ZXMgLT0gYnZbaWR4XS5idl9sZW47XFxuQEAgLTIxMiw3ICsyMTMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnZlY19pdGVyX2FkdmFuY2UoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBcXHR9XFxuIFxcbiBcXHRpdGVyLVxcdTAwM2ViaV9pZHggPSBpZHg7XFxuLVxcdGl0ZXItXFx1MDAzZWJpX2J2ZWNfZG9uZSA9IGJ5dGVzO1xcbitcXHRpdGVyLVxcdTAwM2ViaV9vZmZzZXQgPSBieXRlcztcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTIyMywxMyArMjI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidmVjX2l0ZXJfYWR2YW5jZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBidmVjX2l0ZXJfYWR2YW5jZV9zaW5nbGUoY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgYnZlY19pdGVyICppdGVyLCB1bnNpZ25lZCBpbnQgYnl0ZXMpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGRvbmUgPSBpdGVyLVxcdTAwM2ViaV9idmVjX2RvbmUgKyBieXRlcztcXG4rXFx0dW5zaWduZWQgaW50IGRvbmUgPSBpdGVyLVxcdTAwM2ViaV9vZmZzZXQgKyBieXRlcztcXG4gXFxuIFxcdGlmIChkb25lID09IGJ2W2l0ZXItXFx1MDAzZWJpX2lkeF0uYnZfbGVuKSB7XFxuIFxcdFxcdGRvbmUgPSAwO1xcbiBcXHRcXHRpdGVyLVxcdTAwM2ViaV9pZHgrKztcXG4gXFx0fVxcbi1cXHRpdGVyLVxcdTAwM2ViaV9idmVjX2RvbmUgPSBkb25lO1xcbitcXHRpdGVyLVxcdTAwM2ViaV9vZmZzZXQgPSBkb25lO1xcbiBcXHRpdGVyLVxcdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iY2ZmYzYyMDI1NTZlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oXFxuQEAgLTAsMCArMSw5MSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fRE1BX0JVRl9JT19IX19cXG4rI2RlZmluZSBfX0RNQV9CVUZfSU9fSF9fXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi5oXFx1MDAzZVxcbitcXG4rc3RydWN0IGRtYV9idWZfaW9fZmVuY2U7XFxuK3N0cnVjdCBkbWFfYnVmX2lvX2N0eDtcXG4rc3RydWN0IGRtYV9idWZfaW9fbWFwO1xcbitcXG4rc3RydWN0IGRtYV9idWZfaW9fb3BzIHtcXG4rXFx0LypcXG4rXFx0ICogQ3JlYXRlIGEgbmV3IG1hcCBmb3IgdGhlIGdpdmVuIGN0eC4gQ2FsbGVkIHdpdGggdGhlIHJlc2VydmF0aW9uXFxuK1xcdCAqIGxvY2sgaGVsZC5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqKCptYXApKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIENsZWFuIHVwIGRldmljZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgQG1hcC4gQ2FsbGVkIHdpdGggdGhlXFxuK1xcdCAqIHJlc2VydmF0aW9uIGxvY2sgaGVsZC5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCp1bm1hcCkoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSB1c2VyIHRyaWVzIHRvIGRlc3Ryb3kgdGhlIGN0eC4gUmVsZWFzZSBhbGwgZGV2aWNlIHNwZWNpZmljXFxuK1xcdCAqIHBhcnRzIG9mIHRoZSB0b2tlbi5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKik7XFxuK307XFxuK1xcbitzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAge1xcbitcXHQvKlxcbitcXHQgKiBDb3VudHMgYXR0YWNoZWQgcmVxdWVzdHMgYW5kIG90aGVyIHVzZXJzLiBEZXZpY2Ugc3BlY2lmaWMgdW5tYXBwaW5nXFxuK1xcdCAqIGlzIGRlZmVycmVkIHVudGlsIGFsbCByZWZzIGFyZSBkcm9wcGVkLlxcbitcXHQgKi9cXG4rXFx0c3RydWN0IHBlcmNwdV9yZWZcXHRcXHRyZWZzO1xcbitcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0XFx0cmVsZWFzZV93b3JrO1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZVxcdFxcdCpmZW5jZTtcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fY3R4XFx0XFx0KmN0eDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBkbWFfYnVmX2lvX2N0eCB7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCBfX3JjdVxcdFxcdCptYXA7XFxuK1xcdHN0cnVjdCBkbWFfYnVmXFx0XFx0XFx0XFx0KmRtYWJ1ZjtcXG4rXFx0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb25cXHRcXHRcXHRkaXI7XFxuK1xcbitcXHRhdG9taWNfdFxcdFxcdFxcdFxcdGZlbmNlX3NlcTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0XFx0ZmVuY2VfY3R4O1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRcXHRcXHRyZWxlYXNlX3dvcms7XFxuK1xcdHJlZmNvdW50X3RcXHRcXHRcXHRcXHRyZWZzO1xcbitcXG4rXFx0dm9pZFxcdFxcdFxcdFxcdFxcdCpkZXZfcHJpdjtcXG4rXFx0Y29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzXFx0XFx0KmRldl9vcHM7XFxuK307XFxuK1xcbitpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4rXFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTtcXG4rdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcXG4rXFxuK3N0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9idWZfaW9fbWFwICpcXG4rZG1hX2J1Zl9pb19nZXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xcbitcXG4rXFx0Z3VhcmQocmN1KSgpO1xcbitcXG4rXFx0bWFwID0gcmN1X2RlcmVmZXJlbmNlKGN0eC1cXHUwMDNlbWFwKTtcXG4rXFx0aWYgKHVubGlrZWx5KCFtYXAgfHwgIXBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmVfcmN1KFxcdTAwMjZtYXAtXFx1MDAzZXJlZnMpKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gbWFwO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2J1Zl9pb19tYXBfZHJvcChzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcClcXG4re1xcbitcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2bWFwLVxcdTAwM2VyZWZzKTtcXG4rfVxcbitcXG4rLypcXG4rICogRGV2aWNlIEFQSVxcbisgKi9cXG4rXFxuK3ZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcXG4raW50IGRtYV9idWZfaW9faW5pdF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKTtcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5pbmRleCBkMTA4OTdiM2ExZTM1Li45ZmUzNDlhMjc5Yzc4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxcbkBAIC0xOTE0LDYgKzE5MTQsNyBAQCBzdHJ1Y3QgZGlyX2NvbnRleHQge1xcbiAjZGVmaW5lIENPUFlfRklMRV9TUExJQ0VcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiBcXG4gc3RydWN0IGlvX3VyaW5nX2NtZDtcXG4rc3RydWN0IGRtYV9idWZfaW9fY3R4O1xcbiBzdHJ1Y3Qgb2Zmc2V0X2N0eDtcXG4gXFxuIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmb3BfZmxhZ3NfdDtcXG5AQCAtMTk2Miw2ICsxOTYzLDcgQEAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7XFxuIFxcdGludCAoKnVyaW5nX2NtZF9pb3BvbGwpKHN0cnVjdCBpb191cmluZ19jbWQgKiwgc3RydWN0IGlvX2NvbXBfYmF0Y2ggKixcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHBvbGxfZmxhZ3MpO1xcbiBcXHRpbnQgKCptbWFwX3ByZXBhcmUpKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKik7XFxuK1xcdGludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTtcXG4gfSBfX3JhbmRvbWl6ZV9sYXlvdXQ7XFxuIFxcbiAvKiBTdXBwb3J0cyBhc3luYyBidWZmZXJlZCByZWFkcyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcXG5pbmRleCBhMmM2MjNhNjdhMjUxLi5mOTA1ODZkMzUzYzFjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxcbkBAIC0xMCw2ICsxMCw3IEBAXFxuIFxcbiBzdHJ1Y3QgaW91X2xvb3BfcGFyYW1zO1xcbiBzdHJ1Y3QgaW9fdXJpbmdfYnBmX29wcztcXG4rc3RydWN0IGRtYV9idWZfaW9fbWFwO1xcbiBcXG4gZW51bSB7XFxuIFxcdC8qXFxuQEAgLTU5NCw2ICs1OTUsNyBAQCBlbnVtIHtcXG4gXFx0UkVRX0ZfSU1QT1JUX0JVRkZFUl9CSVQsXFxuIFxcdFJFUV9GX1NRRV9DT1BJRURfQklULFxcbiBcXHRSRVFfRl9JT1BPTExfQklULFxcbitcXHRSRVFfRl9EUk9QX0RNQUJVRl9CSVQsXFxuIFxcbiBcXHQvKiBub3QgYSByZWFsIGJpdCwganVzdCB0byBjaGVjayB3ZSdyZSBub3Qgb3ZlcmZsb3dpbmcgdGhlIHNwYWNlICovXFxuIFxcdF9fUkVRX0ZfTEFTVF9CSVQsXFxuQEAgLTY4OSw2ICs2OTEsOCBAQCBlbnVtIHtcXG4gXFx0UkVRX0ZfU1FFX0NPUElFRFxcdD0gSU9fUkVRX0ZMQUcoUkVRX0ZfU1FFX0NPUElFRF9CSVQpLFxcbiBcXHQvKiByZXF1ZXN0IG11c3QgYmUgaW9wb2xsZWQgdG8gY29tcGxldGlvbiAoc2V0IGluIC1cXHUwMDNlaXNzdWUoKSkgKi9cXG4gXFx0UkVRX0ZfSU9QT0xMXFx0XFx0PSBJT19SRVFfRkxBRyhSRVFfRl9JT1BPTExfQklUKSxcXG4rXFx0LyogdGhlcmUgaXMgYSBkbWEgbWFwIGF0dGFjaGVkIHRvIHJlcXVlc3QgdGhhdCBuZWVkcyB0byBiZSBkcm9wcGVkICovXFxuK1xcdFJFUV9GX0RST1BfRE1BQlVGXFx0PSBJT19SRVFfRkxBRyhSRVFfRl9EUk9QX0RNQUJVRl9CSVQpLFxcbiB9O1xcbiBcXG4gc3RydWN0IGlvX3R3X3JlcSB7XFxuQEAgLTgxMSw2ICs4MTUsNyBAQCBzdHJ1Y3QgaW9fa2lvY2Ige1xcbiBcXHQvKiBjdXN0b20gY3JlZGVudGlhbHMsIHZhbGlkIElGRiBSRVFfRl9DUkVEUyBpcyBzZXQgKi9cXG4gXFx0Y29uc3Qgc3RydWN0IGNyZWRcXHRcXHQqY3JlZHM7XFxuIFxcdHN0cnVjdCBpb193cV93b3JrXFx0XFx0d29yaztcXG4rXFx0c3RydWN0IGRtYV9idWZfaW9fbWFwXFx0XFx0KmRtYWJ1Zl9tYXA7XFxuIFxcbiBcXHRzdHJ1Y3QgaW9fYmlnX2NxZSB7XFxuIFxcdFxcdHU2NFxcdFxcdFxcdGV4dHJhMTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW8uaCBiL2luY2x1ZGUvbGludXgvdWlvLmhcXG5pbmRleCBhOWJjNWIzMDY3ZTMyLi42YzMxZWMxMzFhNzFlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdWlvLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Vpby5oXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gXFxuIHN0cnVjdCBwYWdlO1xcbiBzdHJ1Y3QgZm9saW9fcXVldWU7XFxuK3N0cnVjdCBkbWFfYnVmX2lvX21hcDtcXG4gXFxuIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBpb3ZfaXRlcl9leHRyYWN0aW9uX3Q7XFxuIFxcbkBAIC0yOSw2ICszMCw3IEBAIGVudW0gaXRlcl90eXBlIHtcXG4gXFx0SVRFUl9GT0xJT1EsXFxuIFxcdElURVJfWEFSUkFZLFxcbiBcXHRJVEVSX0RJU0NBUkQsXFxuK1xcdElURVJfRE1BQlVGX01BUCxcXG4gfTtcXG4gXFxuICNkZWZpbmUgSVRFUl9TT1VSQ0VcXHQxXFx0Ly8gPT0gV1JJVEVcXG5AQCAtNzEsNiArNzMsNyBAQCBzdHJ1Y3QgaW92X2l0ZXIge1xcbiBcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZm9saW9fcXVldWUgKmZvbGlvcTtcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHhhcnJheSAqeGFycmF5O1xcbiBcXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqdWJ1ZjtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFidWZfbWFwO1xcbiBcXHRcXHRcXHR9O1xcbiBcXHRcXHRcXHRzaXplX3QgY291bnQ7XFxuIFxcdFxcdH07XFxuQEAgLTE1NSw2ICsxNTgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlvdl9pdGVyX2lzX3hhcnJheShjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXFxuIFxcdHJldHVybiBpb3ZfaXRlcl90eXBlKGkpID09IElURVJfWEFSUkFZO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXFxuK3tcXG4rXFx0cmV0dXJuIGlvdl9pdGVyX3R5cGUoaSkgPT0gSVRFUl9ETUFCVUZfTUFQO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgaW92X2l0ZXJfcncoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxcbiB7XFxuIFxcdHJldHVybiBpLVxcdTAwM2VkYXRhX3NvdXJjZSA/IFdSSVRFIDogUkVBRDtcXG5AQCAtMzAwLDYgKzMwOCw5IEBAIHZvaWQgaW92X2l0ZXJfZm9saW9fcXVldWUoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBmaXJzdF9zbG90LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaXplX3QgY291bnQpO1xcbiB2b2lkIGlvdl9pdGVyX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sIHN0cnVjdCB4YXJyYXkgKnhhcnJheSxcXG4gXFx0XFx0ICAgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBjb3VudCk7XFxuK3ZvaWQgaW92X2l0ZXJfZG1hYnVmX21hcChzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXFxuK1xcdFxcdFxcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwLFxcbitcXHRcXHRcXHRsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpO1xcbiBzc2l6ZV90IGlvdl9pdGVyX2dldF9wYWdlczIoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbiBcXHRcXHRcXHRzaXplX3QgbWF4c2l6ZSwgdW5zaWduZWQgbWF4cGFnZXMsIHNpemVfdCAqc3RhcnQpO1xcbiBzc2l6ZV90IGlvdl9pdGVyX2dldF9wYWdlc19hbGxvYzIoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxcbmluZGV4IDkwOWZiN2FlYTYzOGUuLmMzOTI5N2U4YmViNmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaFxcbkBAIC03OTAsMTMgKzc5MCw0MiBAQCBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUge1xcbiBcXG4gc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlMiB7XFxuIFxcdF9fdTMyIG9mZnNldDtcXG4tXFx0X191MzIgcmVzdjtcXG4rXFx0X191MzIgZmxhZ3M7XFxuIFxcdF9fYWxpZ25lZF91NjQgZGF0YTtcXG4gXFx0X19hbGlnbmVkX3U2NCB0YWdzO1xcbiBcXHRfX3UzMiBucjtcXG4gXFx0X191MzIgcmVzdjI7XFxuIH07XFxuIFxcbisvKiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyOjpmbGFncyAqL1xcbitlbnVtIGlvX3VyaW5nX3JzcmNfcmVnX2ZsYWdzIHtcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSBleHRlbmRlZCBkZXNjcmlwdG9yIGZvcm1hdCBmb3IgYnVmZmVyIHVwZGF0ZXMsXFxuK1xcdCAqIHNlZSBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2NcXG4rXFx0ICovXFxuK1xcdElPUklOR19SU1JDX1VQREFURV9FWFRFTkRFRFxcdFxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMSxcXG4rfTtcXG4rXFxuKy8qIEJ1ZmZlciByZWdpc3RyYXRpb24gdHlwZSwgcGFzc2VkIGluIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYzo6dHlwZSAqL1xcbitlbnVtIGlvX3VyaW5nX3JlZ2J1Zl90eXBlIHtcXG4rXFx0SU9fUkVHQlVGX1RZUEVfRU1QVFksXFxuK1xcdElPX1JFR0JVRl9UWVBFX1VBRERSLFxcbitcXHRJT19SRUdCVUZfVFlQRV9ETUFCVUYsXFxuK1xcbitcXHRfX0lPX1JFR0JVRl9UWVBFX01BWCxcXG4rfTtcXG4rXFxuK3N0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyB7XFxuK1xcdF9fdTMyIHR5cGU7IC8qIGVudW0gaW9fdXJpbmdfcmVnYnVmX3R5cGUgKi9cXG4rXFx0X191MzIgZmxhZ3M7XFxuK1xcdF9fdTY0IHNpemU7XFxuK1xcdF9fdTY0IHVhZGRyO1xcbitcXG4rXFx0X19zMzIgZG1hYnVmX2ZkO1xcbitcXHRfX3MzMiB0YXJnZXRfZmQ7XFxuK1xcdF9fdTY0IF9fcmVzdls2XTtcXG4rfTtcXG4rXFxuIC8qIFNraXAgdXBkYXRpbmcgZmQgaW5kZXhlcyBzZXQgdG8gdGhpcyB2YWx1ZSBpbiB0aGUgZmQgdGFibGUgKi9cXG4gI2RlZmluZSBJT1JJTkdfUkVHSVNURVJfRklMRVNfU0tJUFxcdCgtMilcXG4gXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvX3VyaW5nLmMgYi9pb191cmluZy9pb191cmluZy5jXFxuaW5kZXggMTI3OWUyN2MyYzZkMi4uY2I4OGQxOWM4ZmIyYyAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9pb191cmluZy5jXFxuKysrIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xcbkBAIC0xMDksNyArMTA5LDcgQEBcXG4gXFxuICNkZWZpbmUgSU9fUkVRX0NMRUFOX1NMT1dfRkxBR1MgKFJFUV9GX1JFRkNPVU5UIHwgSU9fUkVRX0xJTktfRkxBR1MgfCBcXFxcXFxuIFxcdFxcdFxcdFxcdCBSRVFfRl9SRUlTU1VFIHwgUkVRX0ZfUE9MTEVEIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHQgSU9fUkVRX0NMRUFOX0ZMQUdTKVxcbitcXHRcXHRcXHRcXHQgSU9fUkVRX0NMRUFOX0ZMQUdTIHwgUkVRX0ZfRFJPUF9ETUFCVUYpXFxuIFxcbiAjZGVmaW5lIElPX1RDVFhfUkVGU19DQUNIRV9OUlxcdCgxVSBcXHUwMDNjXFx1MDAzYyAxMClcXG4gXFxuQEAgLTExMjUsNiArMTEyNSw3IEBAIHN0YXRpYyB2b2lkIGlvX2ZyZWVfYmF0Y2hfbGlzdChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gXFx0XFx0XFx0XFx0aW9fcXVldWVfbmV4dChyZXEpO1xcbiBcXHRcXHRcXHRpZiAodW5saWtlbHkocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPX1JFUV9DTEVBTl9GTEFHUykpXFxuIFxcdFxcdFxcdFxcdGlvX2NsZWFuX29wKHJlcSk7XFxuK1xcdFxcdFxcdGlvX3JlcV9kcm9wX2RtYWJ1ZihyZXEpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlvX3B1dF9maWxlKHJlcSk7XFxuIFxcdFxcdGlvX3JlcV9wdXRfcnNyY19ub2RlcyhyZXEpO1xcbmRpZmYgLS1naXQgYS9pb191cmluZy9uZXQuYyBiL2lvX3VyaW5nL25ldC5jXFxuaW5kZXggYTc0ZDE1ZjdiN2QyYi4uNDM5Yzk5YWQxODg0MSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9uZXQuY1xcbisrKyBiL2lvX3VyaW5nL25ldC5jXFxuQEAgLTE0NzEsNyArMTQ3MSw3IEBAIHN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiB6ZXJvY29weV9maWxsX3NrYl9mcm9tX2l0ZXIoc2tiLCBmcm9tLCBsZW5ndGgpO1xcbiBcXG4gXFx0YmkuYmlfc2l6ZSA9IG1pbihmcm9tLVxcdTAwM2Vjb3VudCwgbGVuZ3RoKTtcXG4tXFx0YmkuYmlfYnZlY19kb25lID0gZnJvbS1cXHUwMDNlaW92X29mZnNldDtcXG4rXFx0YmkuYmlfb2Zmc2V0ID0gZnJvbS1cXHUwMDNlaW92X29mZnNldDtcXG4gXFx0YmkuYmlfaWR4ID0gMDtcXG4gXFxuIFxcdHdoaWxlIChiaS5iaV9zaXplIFxcdTAwMjZcXHUwMDI2IGZyYWcgXFx1MDAzYyBNQVhfU0tCX0ZSQUdTKSB7XFxuQEAgLTE0OTAsNyArMTQ5MCw3IEBAIHN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGZyb20tXFx1MDAzZWJ2ZWMgKz0gYmkuYmlfaWR4O1xcbiBcXHRmcm9tLVxcdTAwM2Vucl9zZWdzIC09IGJpLmJpX2lkeDtcXG4gXFx0ZnJvbS1cXHUwMDNlY291bnQgLT0gY29waWVkO1xcbi1cXHRmcm9tLVxcdTAwM2Vpb3Zfb2Zmc2V0ID0gYmkuYmlfYnZlY19kb25lO1xcbitcXHRmcm9tLVxcdTAwM2Vpb3Zfb2Zmc2V0ID0gYmkuYmlfb2Zmc2V0O1xcbiBcXG4gXFx0c2tiLVxcdTAwM2VkYXRhX2xlbiArPSBjb3BpZWQ7XFxuIFxcdHNrYi1cXHUwMDNlbGVuICs9IGNvcGllZDtcXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcnNyYy5jIGIvaW9fdXJpbmcvcnNyYy5jXFxuaW5kZXggOGQwZjJlZTI0ZTBjMi4uZDIzZGJiMGRkNmI4ZSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9yc3JjLmNcXG4rKysgYi9pb191cmluZy9yc3JjLmNcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb191cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9fdXJpbmcvY21kLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLWlvLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pb191cmluZy5oXFx1MDAzZVxcbiBcXG5AQCAtMjgsNyArMjksNyBAQCBzdHJ1Y3QgaW9fcnNyY191cGRhdGUge1xcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpb3ZlYyAqaW92KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKTtcXG4gXFxuIHN0YXRpYyBpbnQgaHBhZ2VfYWNjdF9yZWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBwYWdlICpocGFnZSxcXG4gXFx0XFx0XFx0ICBib29sICphY2N0X25ldylcXG5AQCAtODEsNiArODIsMTggQEAgc3RhdGljIGJvb2wgaHBhZ2VfYWNjdF91bnJlZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHBhZ2UgKmhwYWdlKVxcbiBcXG4gI2RlZmluZSBJT19DQUNIRURfQlZFQ1NfU0VHU1xcdDMyXFxuIFxcbitzdGF0aWMgdm9pZCBpb19pb3ZfdG9fcmVnYnVmX2Rlc2MoY29uc3Qgc3RydWN0IGlvdmVjICppb3YsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKVxcbit7XFxuK1xcdCpkZXNjID0gKHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYykge1xcbitcXHRcXHQudHlwZSA9IElPX1JFR0JVRl9UWVBFX1VBRERSLFxcbitcXHRcXHQudWFkZHIgPSAodTY0KSh1aW50cHRyX3QpaW92LVxcdTAwM2Vpb3ZfYmFzZSxcXG4rXFx0XFx0LnNpemUgPSBpb3YtXFx1MDAzZWlvdl9sZW4sXFxuK1xcdH07XFxuK1xcdGlmICghZGVzYy1cXHUwMDNldWFkZHIpXFxuK1xcdFxcdGRlc2MtXFx1MDAzZXR5cGUgPSBJT19SRUdCVUZfVFlQRV9FTVBUWTtcXG4rfVxcbitcXG4gaW50IF9faW9fYWNjb3VudF9tZW0oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9saW1pdCwgY3VyX3BhZ2VzLCBuZXdfcGFnZXM7XFxuQEAgLTMwOSw2ICszMjIsOCBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2ZpbGVzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gXFx0aWYgKHVwLVxcdTAwM2VvZmZzZXQgKyBucl9hcmdzIFxcdTAwM2UgY3R4LVxcdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAodXAtXFx1MDAzZWZsYWdzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGZvciAoZG9uZSA9IDA7IGRvbmUgXFx1MDAzYyBucl9hcmdzOyBkb25lKyspIHtcXG4gXFx0XFx0dTY0IHRhZyA9IDA7XFxuQEAgLTM2OCw5ICszODMsOCBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyICp1cCxcXG4gXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG5yX2FyZ3MpXFxuIHtcXG4rXFx0Ym9vbCBleHRlbmRlZCA9IHVwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19SU1JDX1VQREFURV9FWFRFTkRFRDtcXG4gXFx0dTY0IF9fdXNlciAqdGFncyA9IHU2NF90b191c2VyX3B0cih1cC1cXHUwMDNldGFncyk7XFxuLVxcdHN0cnVjdCBpb3ZlYyBmYXN0X2lvdiwgKmlvdjtcXG4tXFx0c3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYztcXG4gXFx0dTY0IHVzZXJfZGF0YSA9IHVwLVxcdTAwM2VkYXRhO1xcbiBcXHRfX3UzMiBkb25lO1xcbiBcXHRpbnQgaSwgZXJyO1xcbkBAIC0zNzksMjYgKzM5Myw0OSBAQCBzdGF0aWMgaW50IF9faW9fc3FlX2J1ZmZlcnNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiBcXHRcXHRyZXR1cm4gLUVOWElPO1xcbiBcXHRpZiAodXAtXFx1MDAzZW9mZnNldCArIG5yX2FyZ3MgXFx1MDAzZSBjdHgtXFx1MDAzZWJ1Zl90YWJsZS5ucilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICh1cC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+SU9SSU5HX1JTUkNfVVBEQVRFX0VYVEVOREVEKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGZvciAoZG9uZSA9IDA7IGRvbmUgXFx1MDAzYyBucl9hcmdzOyBkb25lKyspIHtcXG4rXFx0XFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIGRlc2M7XFxuIFxcdFxcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XFxuIFxcdFxcdHU2NCB0YWcgPSAwO1xcbiBcXG4tXFx0XFx0dXZlYyA9IHU2NF90b191c2VyX3B0cih1c2VyX2RhdGEpO1xcbi1cXHRcXHRpb3YgPSBpb3ZlY19mcm9tX3VzZXIodXZlYywgMSwgMSwgXFx1MDAyNmZhc3RfaW92LCBpb19pc19jb21wYXQoY3R4KSk7XFxuLVxcdFxcdGlmIChJU19FUlIoaW92KSkge1xcbi1cXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGlvdik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuIFxcdFxcdGlmICh0YWdzIFxcdTAwMjZcXHUwMDI2IGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ0YWcsIFxcdTAwMjZ0YWdzW2RvbmVdLCBzaXplb2YodGFnKSkpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBpb3YpO1xcbitcXG4rXFx0XFx0aWYgKGV4dGVuZGVkKSB7XFxuK1xcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2ZGVzYywgdTY0X3RvX3VzZXJfcHRyKHVzZXJfZGF0YSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHNpemVvZihkZXNjKSkpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0dXNlcl9kYXRhICs9IHNpemVvZihkZXNjKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYyA9IHU2NF90b191c2VyX3B0cih1c2VyX2RhdGEpO1xcbitcXHRcXHRcXHRzdHJ1Y3QgaW92ZWMgZmFzdF9pb3YsICppb3Y7XFxuK1xcbitcXHRcXHRcXHRpZiAoaW9faXNfY29tcGF0KGN0eCkpXFxuK1xcdFxcdFxcdFxcdHVzZXJfZGF0YSArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pb3ZlYyk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0dXNlcl9kYXRhICs9IHNpemVvZihzdHJ1Y3QgaW92ZWMpO1xcbitcXG4rXFx0XFx0XFx0aW92ID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIDEsIDEsIFxcdTAwMjZmYXN0X2lvdiwgaW9faXNfY29tcGF0KGN0eCkpO1xcbitcXHRcXHRcXHRpZiAoSVNfRVJSKGlvdikpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihpb3YpO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpb19pb3ZfdG9fcmVnYnVmX2Rlc2MoaW92LCBcXHUwMDI2ZGVzYyk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG5vZGUgPSBpb19zcWVfYnVmZmVyX3JlZ2lzdGVyKGN0eCwgXFx1MDAyNmRlc2MpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKG5vZGUpKSB7XFxuIFxcdFxcdFxcdGVyciA9IFBUUl9FUlIobm9kZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAodGFnKSB7XFxuIFxcdFxcdFxcdGlmICghbm9kZSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbkBAIC00MDksMTAgKzQ0Niw2IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIFxcdFxcdGkgPSBhcnJheV9pbmRleF9ub3NwZWModXAtXFx1MDAzZW9mZnNldCArIGRvbmUsIGN0eC1cXHUwMDNlYnVmX3RhYmxlLm5yKTtcXG4gXFx0XFx0aW9fcmVzZXRfcnNyY19ub2RlKGN0eCwgXFx1MDAyNmN0eC1cXHUwMDNlYnVmX3RhYmxlLCBpKTtcXG4gXFx0XFx0Y3R4LVxcdTAwM2VidWZfdGFibGUubm9kZXNbaV0gPSBub2RlO1xcbi1cXHRcXHRpZiAoaW9faXNfY29tcGF0KGN0eCkpXFxuLVxcdFxcdFxcdHVzZXJfZGF0YSArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pb3ZlYyk7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0dXNlcl9kYXRhICs9IHNpemVvZihzdHJ1Y3QgaW92ZWMpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBkb25lID8gZG9uZSA6IGVycjtcXG4gfVxcbkBAIC00NDcsNyArNDgwLDcgQEAgaW50IGlvX3JlZ2lzdGVyX2ZpbGVzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG4gXFx0bWVtc2V0KFxcdTAwMjZ1cCwgMCwgc2l6ZW9mKHVwKSk7XFxuIFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2dXAsIGFyZywgc2l6ZW9mKHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZSkpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tXFx0aWYgKHVwLnJlc3YgfHwgdXAucmVzdjIpXFxuK1xcdGlmICh1cC5yZXN2MilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdHJldHVybiBfX2lvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKGN0eCwgSU9SSU5HX1JTUkNfRklMRSwgXFx1MDAyNnVwLCBucl9hcmdzKTtcXG4gfVxcbkBAIC00NjEsNyArNDk0LDcgQEAgaW50IGlvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ1cCwgYXJnLCBzaXplb2YodXApKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLVxcdGlmICghdXAubnIgfHwgdXAucmVzdiB8fCB1cC5yZXN2MilcXG4rXFx0aWYgKCF1cC5uciB8fCB1cC5yZXN2MilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdHJldHVybiBfX2lvX3JlZ2lzdGVyX3JzcmNfdXBkYXRlKGN0eCwgdHlwZSwgXFx1MDAyNnVwLCB1cC5ucik7XFxuIH1cXG5AQCAtNTYxLDEyICs1OTQsOSBAQCBpbnQgaW9fZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIFxcdHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZTIgdXAyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0bWVtc2V0KFxcdTAwMjZ1cDIsIDAsIHNpemVvZih1cDIpKTtcXG4gXFx0dXAyLm9mZnNldCA9IHVwLVxcdTAwM2VvZmZzZXQ7XFxuIFxcdHVwMi5kYXRhID0gdXAtXFx1MDAzZWFyZztcXG4tXFx0dXAyLm5yID0gMDtcXG4tXFx0dXAyLnRhZ3MgPSAwO1xcbi1cXHR1cDIucmVzdiA9IDA7XFxuLVxcdHVwMi5yZXN2MiA9IDA7XFxuIFxcbiBcXHRpZiAodXAtXFx1MDAzZW9mZnNldCA9PSBJT1JJTkdfRklMRV9JTkRFWF9BTExPQykge1xcbiBcXHRcXHRyZXQgPSBpb19maWxlc191cGRhdGVfd2l0aF9pbmRleF9hbGxvYyhyZXEsIGlzc3VlX2ZsYWdzKTtcXG5AQCAtODUyLDI3ICs4ODIsMTI3IEBAIGJvb2wgaW9fY2hlY2tfY29hbGVzY2VfYnVmZmVyKHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSwgaW50IG5yX3BhZ2VzLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RydWN0IGlvX3JlZ2J1Zl9kbWEge1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHhcXHRcXHRjdHg7XFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0XFx0KnRhcmdldF9maWxlO1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgaW9fcmVsZWFzZV9yZWdfZG1hYnVmKHZvaWQgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGlvX3JlZ2J1Zl9kbWEgKmRiID0gcHJpdjtcXG4rXFxuK1xcdGZwdXQoZGItXFx1MDAzZXRhcmdldF9maWxlKTtcXG4rXFx0ZG1hX2J1Zl9pb19jdHhfcmVsZWFzZShcXHUwMDI2ZGItXFx1MDAzZWN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19yZWdpc3Rlcl9kbWFidWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyAqZGVzYylcXG4re1xcbitcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlID0gTlVMTDtcXG4rXFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXUgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqcmVnYnVmID0gTlVMTDtcXG4rXFx0c3RydWN0IGZpbGUgKnRhcmdldF9maWxlID0gTlVMTDtcXG4rXFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IE5VTEw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xcbitcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19TRVRVUF9JT1BPTEwpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4rXFx0aWYgKGRlc2MtXFx1MDAzZXVhZGRyIHx8IGRlc2MtXFx1MDAzZXNpemUpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0bm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7XFxuK1xcdGlmICghbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGltdSA9IGlvX2FsbG9jX2ltdShjdHgsIDApO1xcbitcXHRpZiAoIWltdSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdHJlZ2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpyZWdidWYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFyZWdidWYpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gLUVCQURGO1xcbitcXHR0YXJnZXRfZmlsZSA9IGZnZXQoZGVzYy1cXHUwMDNldGFyZ2V0X2ZkKTtcXG4rXFx0aWYgKCF0YXJnZXRfZmlsZSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRkbWFidWYgPSBkbWFfYnVmX2dldChkZXNjLVxcdTAwM2VkbWFidWZfZmQpO1xcbitcXHRpZiAoSVNfRVJSKGRtYWJ1ZikpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihkbWFidWYpO1xcbitcXHRcXHRkbWFidWYgPSBOVUxMO1xcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VzaXplIFxcdTAwM2UgU1pfMUcpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRtYV9idWZfaW9fY3R4X2NyZWF0ZSh0YXJnZXRfZmlsZSwgXFx1MDAyNnJlZ2J1Zi1cXHUwMDNlY3R4LCBkbWFidWYsXFxuK1xcdFxcdFxcdFxcdCAgICBETUFfQklESVJFQ1RJT05BTCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmVnYnVmLVxcdTAwM2V0YXJnZXRfZmlsZSA9IHRhcmdldF9maWxlO1xcbitcXHRpbXUtXFx1MDAzZW5yX2J2ZWNzID0gMTtcXG4rXFx0aW11LVxcdTAwM2V1YnVmID0gMDtcXG4rXFx0aW11LVxcdTAwM2VsZW4gPSBkbWFidWYtXFx1MDAzZXNpemU7XFxuK1xcdGltdS1cXHUwMDNlZm9saW9fc2hpZnQgPSAwO1xcbitcXHRpbXUtXFx1MDAzZXJlbGVhc2UgPSBpb19yZWxlYXNlX3JlZ19kbWFidWY7XFxuK1xcdGltdS1cXHUwMDNlcHJpdiA9IHJlZ2J1ZjtcXG4rXFx0aW11LVxcdTAwM2VmbGFncyA9IElPX1JFR0JVRl9GX0RNQUJVRjtcXG4rXFx0aW11LVxcdTAwM2VkaXIgPSBJT19JTVVfREVTVCB8IElPX0lNVV9TT1VSQ0U7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2aW11LVxcdTAwM2VyZWZzLCAxKTtcXG4rXFx0bm9kZS1cXHUwMDNlYnVmID0gaW11O1xcbitcXHRkbWFfYnVmX3B1dChkbWFidWYpO1xcbitcXHRyZXR1cm4gbm9kZTtcXG4rZXJyOlxcbitcXHRrZnJlZShyZWdidWYpO1xcbitcXHRpZiAoaW11KVxcbitcXHRcXHRpb19mcmVlX2ltdShjdHgsIGltdSk7XFxuK1xcdGlmIChub2RlKVxcbitcXHRcXHRpb19jYWNoZV9mcmVlKFxcdTAwMjZjdHgtXFx1MDAzZW5vZGVfY2FjaGUsIG5vZGUpO1xcbitcXHRpZiAodGFyZ2V0X2ZpbGUpXFxuK1xcdFxcdGZwdXQodGFyZ2V0X2ZpbGUpO1xcbitcXHRpZiAoZG1hYnVmKVxcbitcXHRcXHRkbWFfYnVmX3B1dChkbWFidWYpO1xcbitcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbit9XFxuK1xcbitcXG4gc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpb3ZlYyAqaW92KVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyB1YWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc2MtXFx1MDAzZXVhZGRyO1xcbitcXHRzaXplX3Qgc2l6ZSA9IGRlc2MtXFx1MDAzZXNpemU7XFxuIFxcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11ID0gTlVMTDtcXG4gXFx0c3RydWN0IHBhZ2UgKipwYWdlcyA9IE5VTEw7XFxuIFxcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgb2ZmO1xcbi1cXHRzaXplX3Qgc2l6ZTtcXG4gXFx0aW50IHJldCwgbnJfcGFnZXMsIGk7XFxuIFxcdHN0cnVjdCBpb19pbXVfZm9saW9fZGF0YSBkYXRhO1xcbiBcXHRib29sIGNvYWxlc2NlZCA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKCFpb3YtXFx1MDAzZWlvdl9iYXNlKSB7XFxuLVxcdFxcdGlmIChpb3YtXFx1MDAzZWlvdl9sZW4pXFxuK1xcdGlmIChkZXNjLVxcdTAwM2V0eXBlIFxcdTAwM2U9IF9fSU9fUkVHQlVGX1RZUEVfTUFYKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4rXFx0aWYgKCFtZW1faXNfemVybyhcXHUwMDI2ZGVzYy1cXHUwMDNlX19yZXN2LCBzaXplb2YoZGVzYy1cXHUwMDNlX19yZXN2KSkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0aWYgKGRlc2MtXFx1MDAzZXR5cGUgPT0gSU9fUkVHQlVGX1RZUEVfRE1BQlVGKVxcbitcXHRcXHRyZXR1cm4gaW9fcmVnaXN0ZXJfZG1hYnVmKGN0eCwgZGVzYyk7XFxuK1xcbitcXHRpZiAoZGVzYy1cXHUwMDNlZG1hYnVmX2ZkIHx8IGRlc2MtXFx1MDAzZXRhcmdldF9mZClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRpZiAoZGVzYy1cXHUwMDNldHlwZSA9PSBJT19SRUdCVUZfVFlQRV9FTVBUWSkge1xcbitcXHRcXHRpZiAodWFkZHIgfHwgc2l6ZSlcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XFxuIFxcdFxcdC8qIHJlbW92ZSB0aGUgYnVmZmVyIHdpdGhvdXQgaW5zdGFsbGluZyBhIG5ldyBvbmUgKi9cXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGlvX3ZhbGlkYXRlX3VzZXJfYnVmX3JhbmdlKCh1bnNpZ25lZCBsb25nKWlvdi1cXHUwMDNlaW92X2Jhc2UsXFxuLVxcdFxcdFxcdFxcdFxcdCBpb3YtXFx1MDAzZWlvdl9sZW4pO1xcbitcXHRyZXQgPSBpb192YWxpZGF0ZV91c2VyX2J1Zl9yYW5nZSh1YWRkciwgc2l6ZSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuIFxcbkBAIC04ODEsOCArMTAxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuIFxcdHJldCA9IC1FTk9NRU07XFxuLVxcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBpb3YtXFx1MDAzZWlvdl9iYXNlLCBpb3YtXFx1MDAzZWlvdl9sZW4sXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZucl9wYWdlcyk7XFxuK1xcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHVhZGRyLCBzaXplLCBcXHUwMDI2bnJfcGFnZXMpO1xcbiBcXHRpZiAoSVNfRVJSKHBhZ2VzKSkge1xcbiBcXHRcXHRyZXQgPSBQVFJfRVJSKHBhZ2VzKTtcXG4gXFx0XFx0cGFnZXMgPSBOVUxMO1xcbkBAIC05MDQsMTAgKzEwMzMsOSBAQCBzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXG4tXFx0c2l6ZSA9IGlvdi1cXHUwMDNlaW92X2xlbjtcXG4gXFx0Lyogc3RvcmUgb3JpZ2luYWwgYWRkcmVzcyBmb3IgbGF0ZXIgdmVyaWZpY2F0aW9uICovXFxuLVxcdGltdS1cXHUwMDNldWJ1ZiA9ICh1bnNpZ25lZCBsb25nKSBpb3YtXFx1MDAzZWlvdl9iYXNlO1xcbi1cXHRpbXUtXFx1MDAzZWxlbiA9IGlvdi1cXHUwMDNlaW92X2xlbjtcXG4rXFx0aW11LVxcdTAwM2V1YnVmID0gdWFkZHI7XFxuK1xcdGltdS1cXHUwMDNlbGVuID0gc2l6ZTtcXG4gXFx0aW11LVxcdTAwM2Vmb2xpb19zaGlmdCA9IFBBR0VfU0hJRlQ7XFxuIFxcdGltdS1cXHUwMDNlcmVsZWFzZSA9IGlvX3JlbGVhc2VfdWJ1ZjtcXG4gXFx0aW11LVxcdTAwM2Vwcml2ID0gaW11O1xcbkBAIC05MTcsNyArMTA0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbiBcXHRcXHRpbXUtXFx1MDAzZWZvbGlvX3NoaWZ0ID0gZGF0YS5mb2xpb19zaGlmdDtcXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZpbXUtXFx1MDAzZXJlZnMsIDEpO1xcbiBcXG4tXFx0b2ZmID0gKHVuc2lnbmVkIGxvbmcpaW92LVxcdTAwM2Vpb3ZfYmFzZSBcXHUwMDI2IH5QQUdFX01BU0s7XFxuK1xcdG9mZiA9IHVhZGRyIFxcdTAwMjYgflBBR0VfTUFTSztcXG4gXFx0aWYgKGNvYWxlc2NlZClcXG4gXFx0XFx0b2ZmICs9IGRhdGEuZmlyc3RfZm9saW9fcGFnZV9pZHggXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gXFxuQEAgLTk2OSw2ICsxMDk3LDcgQEAgaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRtZW1zZXQoaW92LCAwLCBzaXplb2YoKmlvdikpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2FyZ3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgZGVzYztcXG4gXFx0XFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTtcXG4gXFx0XFx0dTY0IHRhZyA9IDA7XFxuIFxcbkBAIC05OTIsNyArMTEyMSw4IEBAIGludCBpb19zcWVfYnVmZmVyc19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XFxuK1xcdFxcdGlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsIFxcdTAwMjZkZXNjKTtcXG4rXFx0XFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBcXHUwMDI2ZGVzYyk7XFxuIFxcdFxcdGlmIChJU19FUlIobm9kZSkpIHtcXG4gXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihub2RlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTExMzYsOSArMTI2Niw2NCBAQCBzdGF0aWMgaW50IGlvX2ltcG9ydF9rYnVmKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGlvX2ltcG9ydF9maXhlZChpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbit2b2lkIGlvX2Ryb3BfZG1hYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuK3tcXG4rXFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHJlcS1cXHUwMDNlYnVmX25vZGUtXFx1MDAzZXR5cGUgIT0gSU9SSU5HX1JTUkNfQlVGRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpbXUgPSByZXEtXFx1MDAzZWJ1Zl9ub2RlLVxcdTAwM2VidWY7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIShpbXUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0ZfRE1BQlVGKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZG1hX2J1Zl9pb19tYXBfZHJvcChyZXEtXFx1MDAzZWRtYWJ1Zl9tYXApO1xcbitcXHRyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5SRVFfRl9EUk9QX0RNQUJVRjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpb19pbXBvcnRfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbitcXHRcXHRcXHQgICBpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcXG4rXFx0XFx0XFx0ICAgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCxcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlvX3JlZ2J1Zl9kbWEgKmRiID0gaW11LVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDtcXG4rXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdGlmICghbGVuKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0aWYgKHJlcS1cXHUwMDNlZmlsZSAhPSBkYi1cXHUwMDNldGFyZ2V0X2ZpbGUpXFxuK1xcdFxcdHJldHVybiAtRUJBREY7XFxuK1xcbitcXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0RST1BfRE1BQlVGKSB7XFxuK1xcdFxcdG1hcCA9IHJlcS1cXHUwMDNlZG1hYnVmX21hcDtcXG4rXFx0XFx0Z290byBpbml0X2l0ZXI7XFxuK1xcdH1cXG4rXFxuK1xcdG1hcCA9IGRtYV9idWZfaW9fZ2V0X21hcChcXHUwMDI2ZGItXFx1MDAzZWN0eCk7XFxuK1xcdGlmICh1bmxpa2VseSghbWFwKSkge1xcbitcXHRcXHRpZiAoIShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfSU9XUSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXHRcXHRtYXAgPSBkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoXFx1MDAyNmRiLVxcdTAwM2VjdHgpO1xcbitcXHRcXHRpZiAoSVNfRVJSKG1hcCkpXFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKG1hcCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlZG1hYnVmX21hcCA9IG1hcDtcXG4rXFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9EUk9QX0RNQUJVRjtcXG4raW5pdF9pdGVyOlxcbitcXHRpb3ZfaXRlcl9kbWFidWZfbWFwKGl0ZXIsIGRkaXIsIG1hcCwgb2Zmc2V0LCBsZW4pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuK1xcdFxcdFxcdCAgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11LFxcbi1cXHRcXHRcXHQgICB1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4pXFxuK1xcdFxcdFxcdCAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbixcXG4rXFx0XFx0XFx0ICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MsXFxuK1xcdFxcdFxcdCAgIHVuc2lnbmVkIGltcG9ydF9mbGFncylcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYztcXG4gXFx0c2l6ZV90IGZvbGlvX21hc2s7XFxuQEAgLTExNTgsNiArMTM0MywxMiBAQCBzdGF0aWMgaW50IGlvX2ltcG9ydF9maXhlZChpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXG4gXFx0b2Zmc2V0ID0gYnVmX2FkZHIgLSBpbXUtXFx1MDAzZXVidWY7XFxuIFxcbitcXHRpZiAoaW11LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPX1JFR0JVRl9GX0RNQUJVRikge1xcbitcXHRcXHRpZiAoIShpbXBvcnRfZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfSU1QT1JUX0FMTE9XX0RNQUJVRikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRyZXR1cm4gaW9faW1wb3J0X2RtYWJ1ZihyZXEsIGRkaXIsIGl0ZXIsIGltdSwgbGVuLCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdGlzc3VlX2ZsYWdzKTtcXG4rXFx0fVxcbiBcXHRpZiAoaW11LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPX1JFR0JVRl9GX0tCVUYpXFxuIFxcdFxcdHJldHVybiBpb19pbXBvcnRfa2J1ZihkZGlyLCBpdGVyLCBpbXUsIGxlbiwgb2Zmc2V0KTtcXG4gXFxuQEAgLTEyMTEsMTYgKzE0MDIsMTcgQEAgaW5saW5lIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX2ZpbmRfYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1pbnQgaW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4raW50IF9faW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0dTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuLCBpbnQgZGRpcixcXG4tXFx0XFx0XFx0dW5zaWduZWQgaXNzdWVfZmxhZ3MpXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTtcXG4gXFxuIFxcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xcbiBcXHRpZiAoIW5vZGUpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHRyZXR1cm4gaW9faW1wb3J0X2ZpeGVkKGRkaXIsIGl0ZXIsIG5vZGUtXFx1MDAzZWJ1ZiwgYnVmX2FkZHIsIGxlbik7XFxuK1xcdHJldHVybiBpb19pbXBvcnRfZml4ZWQocmVxLCBkZGlyLCBpdGVyLCBub2RlLVxcdTAwM2VidWYsIGJ1Zl9hZGRyLCBsZW4sXFxuK1xcdFxcdFxcdFxcdGlzc3VlX2ZsYWdzLCBpbXBvcnRfZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlvX2J1ZmZlcl9hY2N0X2Nsb25lZF9ocGFnZXMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuQEAgLTEzNDcsNiArMTUzOSwxMSBAQCBzdGF0aWMgaW50IGlvX2Nsb25lX2J1ZmZlcnMoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19yaW5nX2N0eCAqc3JjX2N0eFxcbiBcXHRcXHRpZiAoIXNyY19ub2RlKSB7XFxuIFxcdFxcdFxcdGRzdF9ub2RlID0gTlVMTDtcXG4gXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0aWYgKHNyY19ub2RlLVxcdTAwM2VidWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0ZfVU5DTE9ORUFCTEUpIHtcXG4rXFx0XFx0XFx0XFx0aW9fcnNyY19kYXRhX2ZyZWUoY3R4LCBcXHUwMDI2ZGF0YSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7XFxuIFxcdFxcdFxcdGlmICghZHN0X25vZGUpIHtcXG4gXFx0XFx0XFx0XFx0aW9fcnNyY19kYXRhX2ZyZWUoY3R4LCBcXHUwMDI2ZGF0YSk7XFxuQEAgLTE2MTcsOSArMTgxNCw5IEBAIHN0YXRpYyBpbnQgaW9fa2Vybl9idmVjX3NpemUoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIG5yX2lvdnMsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4raW50IF9faW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbitcXHRcXHRcXHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncywgdW5zaWduZWQgaW1wb3J0X2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XFxuIFxcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11O1xcbkBAIC0xNjM3LDcgKzE4MzQsOSBAQCBpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0aW92ZWNfb2ZmID0gdmVjLVxcdTAwM2VuciAtIG5yX2lvdnM7XFxuIFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuIFxcbi1cXHRpZiAoaW11LVxcdTAwM2VmbGFncyBcXHUwMDI2IElPX1JFR0JVRl9GX0tCVUYpIHtcXG4rXFx0aWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9ETUFCVUYpIHtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9IGVsc2UgaWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKSB7XFxuIFxcdFxcdGludCByZXQgPSBpb19rZXJuX2J2ZWNfc2l6ZShpb3YsIG5yX2lvdnMsIGltdSwgXFx1MDAyNm5yX3NlZ3MpO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaFxcbmluZGV4IDk4YWU4ZWY1MTAwOWQuLjNjYjliNTdmMTU5YjYgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvcnNyYy5oXFxuKysrIGIvaW9fdXJpbmcvcnNyYy5oXFxuQEAgLTI5LDcgKzI5LDEzIEBAIGVudW0ge1xcbiB9O1xcbiBcXG4gZW51bSB7XFxuLVxcdElPX1JFR0JVRl9GX0tCVUZcXHRcXHQ9IDEsXFxuK1xcdElPX1JFR0JVRl9GX0tCVUZcXHRcXHQ9IDEgXFx1MDAzY1xcdTAwM2MgMCxcXG4rXFx0SU9fUkVHQlVGX0ZfVU5DTE9ORUFCTEVcXHRcXHQ9IDEgXFx1MDAzY1xcdTAwM2MgMSxcXG4rXFx0SU9fUkVHQlVGX0ZfRE1BQlVGXFx0XFx0PSAxIFxcdTAwM2NcXHUwMDNjIDMsXFxuK307XFxuK1xcbitlbnVtIHtcXG4rXFx0SU9fUkVHQlVGX0lNUE9SVF9BTExPV19ETUFCVUZcXHRcXHQ9IDEgXFx1MDAzY1xcdTAwM2MgMSxcXG4gfTtcXG4gXFxuIHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiB7XFxuQEAgLTY0LDEyICs3MCwyOCBAQCBpbnQgaW9fcnNyY19kYXRhX2FsbG9jKHN0cnVjdCBpb19yc3JjX2RhdGEgKmRhdGEsIHVuc2lnbmVkIG5yKTtcXG4gXFxuIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX2ZpbmRfYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcXG4taW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuK2ludCBfX2lvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdFxcdHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzKTtcXG4taW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpO1xcbitpbnQgX19pb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcXG4tXFx0XFx0XFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xcbitcXHRcXHRcXHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyxcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW1wb3J0X2ZsYWdzKTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICB1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sIGludCBkZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBpdGVyLCBidWZfYWRkciwgbGVuLCBkZGlyLCBpc3N1ZV9mbGFncywgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxcbit7XFxuK1xcdHJldHVybiBfX2lvX2ltcG9ydF9yZWdfdmVjKGRkaXIsIGl0ZXIsIHJlcSwgdmVjLCBucl9pb3ZzLCBpc3N1ZV9mbGFncywgMCk7XFxuK31cXG4rXFxuIGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxcbiBcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKTtcXG4gXFxuQEAgLTE1Niw0ICsxNzgsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGlvX2FsbG9jX2NhY2hlX3ZlY19rYXNhbihzdHJ1Y3QgaW91X3ZlYyAqaXYpXFxuIFxcdFxcdGlvX3ZlY19mcmVlKGl2KTtcXG4gfVxcbiBcXG4rdm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfZHJvcF9kbWFidWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuK3tcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0RST1BfRE1BQlVGKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0JVRl9OT0RFKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aW9fZHJvcF9kbWFidWZfbm9kZShyZXEpO1xcbit9XFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcncuYyBiL2lvX3VyaW5nL3J3LmNcXG5pbmRleCA5NTAzOGNmZGE2MTUzLi4xMWZmN2I1YTExNjQ3IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3J3LmNcXG4rKysgYi9pb191cmluZy9ydy5jXFxuQEAgLTM4MCw4ICszODAsOCBAQCBzdGF0aWMgaW50IGlvX2luaXRfcndfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcXG4gXFx0aWYgKGlvLVxcdTAwM2VieXRlc19kb25lKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgXFx1MDAyNmlvLVxcdTAwM2VpdGVyLCBydy1cXHUwMDNlYWRkciwgcnctXFx1MDAzZWxlbiwgZGRpcixcXG4tXFx0XFx0XFx0XFx0aXNzdWVfZmxhZ3MpO1xcbitcXHRyZXQgPSBfX2lvX2ltcG9ydF9yZWdfYnVmKHJlcSwgXFx1MDAyNmlvLVxcdTAwM2VpdGVyLCBydy1cXHUwMDNlYWRkciwgcnctXFx1MDAzZWxlbiwgZGRpcixcXG4rXFx0XFx0XFx0XFx0ICBpc3N1ZV9mbGFncywgSU9fUkVHQlVGX0lNUE9SVF9BTExPV19ETUFCVUYpO1xcbiBcXHRpb3ZfaXRlcl9zYXZlX3N0YXRlKFxcdTAwMjZpby1cXHUwMDNlaXRlciwgXFx1MDAyNmlvLVxcdTAwM2VpdGVyX3N0YXRlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC01OTEsNiArNTkxLDggQEAgc3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXFxuIFxcdHN0cnVjdCBpb19ydyAqcncgPSBjb250YWluZXJfb2Yoa2lvY2IsIHN0cnVjdCBpb19ydywga2lvY2IpO1xcbiBcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSA9IGNtZF90b19pb19raW9jYihydyk7XFxuIFxcbitcXHRpb19yZXFfZHJvcF9kbWFidWYocmVxKTtcXG4rXFxuIFxcdF9faW9fY29tcGxldGVfcndfY29tbW9uKHJlcSwgcmVzKTtcXG4gXFx0aW9fcmVxX3NldF9yZXMocmVxLCBpb19maXh1cF9yd19yZXMocmVxLCByZXMpLCAwKTtcXG4gXFx0cmVxLVxcdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX3JlcV9yd19jb21wbGV0ZTtcXG5kaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuY1xcbmluZGV4IDI3MzkxOWIxNjE2MTcuLjE0NmU1ZWQ4MGM3Y2QgMTAwNjQ0XFxuLS0tIGEvbGliL2lvdl9pdGVyLmNcXG4rKysgYi9saWIvaW92X2l0ZXIuY1xcbkBAIC01NzUsNyArNTc1LDggQEAgdm9pZCBpb3ZfaXRlcl9hZHZhbmNlKHN0cnVjdCBpb3ZfaXRlciAqaSwgc2l6ZV90IHNpemUpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KGktXFx1MDAzZWNvdW50IFxcdTAwM2Mgc2l6ZSkpXFxuIFxcdFxcdHNpemUgPSBpLVxcdTAwM2Vjb3VudDtcXG4tXFx0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IHVubGlrZWx5KGlvdl9pdGVyX2lzX3hhcnJheShpKSkpIHtcXG4rXFx0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IHVubGlrZWx5KGlvdl9pdGVyX2lzX3hhcnJheShpKSkgfHxcXG4rXFx0ICAgIHVubGlrZWx5KGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpKSB7XFxuIFxcdFxcdGktXFx1MDAzZWlvdl9vZmZzZXQgKz0gc2l6ZTtcXG4gXFx0XFx0aS1cXHUwMDNlY291bnQgLT0gc2l6ZTtcXG4gXFx0fSBlbHNlIGlmIChsaWtlbHkoaXRlcl9pc19pb3ZlYyhpKSB8fCBpb3ZfaXRlcl9pc19rdmVjKGkpKSkge1xcbkBAIC02MzEsNyArNjMyLDggQEAgdm9pZCBpb3ZfaXRlcl9yZXZlcnQoc3RydWN0IGlvdl9pdGVyICppLCBzaXplX3QgdW5yb2xsKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFx0dW5yb2xsIC09IGktXFx1MDAzZWlvdl9vZmZzZXQ7XFxuLVxcdGlmIChpb3ZfaXRlcl9pc194YXJyYXkoaSkgfHwgaXRlcl9pc191YnVmKGkpKSB7XFxuK1xcdGlmIChpb3ZfaXRlcl9pc194YXJyYXkoaSkgfHwgaXRlcl9pc191YnVmKGkpIHx8XFxuK1xcdCAgICBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSB7XFxuIFxcdFxcdEJVRygpOyAvKiBXZSBzaG91bGQgbmV2ZXIgZ28gYmV5b25kIHRoZSBzdGFydCBvZiB0aGUgc3BlY2lmaWVkXFxuIFxcdFxcdFxcdCogcmFuZ2Ugc2luY2Ugd2UgbWlnaHQgdGhlbiBiZSBzdHJheWluZyBpbnRvIHBhZ2VzIHRoYXRcXG4gXFx0XFx0XFx0KiBhcmVuJ3QgcGlubmVkLlxcbkBAIC03NzUsNiArNzc3LDIwIEBAIHZvaWQgaW92X2l0ZXJfeGFycmF5KHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGlvdl9pdGVyX3hhcnJheSk7XFxuIFxcbit2b2lkIGlvdl9pdGVyX2RtYWJ1Zl9tYXAoc3RydWN0IGlvdl9pdGVyICppLCB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLFxcbitcXHRcXHRcXHQgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXAsXFxuK1xcdFxcdFxcdCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0V0FSTl9PTihkaXJlY3Rpb24gXFx1MDAyNiB+KFJFQUQgfCBXUklURSkpO1xcbitcXHQqaSA9IChzdHJ1Y3QgaW92X2l0ZXIpe1xcbitcXHRcXHQuaXRlcl90eXBlID0gSVRFUl9ETUFCVUZfTUFQLFxcbitcXHRcXHQuZGF0YV9zb3VyY2UgPSBkaXJlY3Rpb24sXFxuK1xcdFxcdC5kbWFidWZfbWFwID0gbWFwLFxcbitcXHRcXHQuY291bnQgPSBjb3VudCxcXG4rXFx0XFx0Lmlvdl9vZmZzZXQgPSBvZmYsXFxuK1xcdH07XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpb3ZfaXRlcl9kaXNjYXJkIC0gSW5pdGlhbGlzZSBhbiBJL08gaXRlcmF0b3IgdGhhdCBkaXNjYXJkcyBkYXRhXFxuICAqIEBpOiBUaGUgaXRlcmF0b3IgdG8gaW5pdGlhbGlzZS5cXG5AQCAtODQxLDcgKzg1Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2FsaWdubWVudF9idmVjKGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcXG4gXFxuIHVuc2lnbmVkIGxvbmcgaW92X2l0ZXJfYWxpZ25tZW50KGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcXG4ge1xcbi1cXHRpZiAobGlrZWx5KGl0ZXJfaXNfdWJ1ZihpKSkpIHtcXG4rXFx0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpIHtcXG4gXFx0XFx0c2l6ZV90IHNpemUgPSBpLVxcdTAwM2Vjb3VudDtcXG4gXFx0XFx0aWYgKHNpemUpXFxuIFxcdFxcdFxcdHJldHVybiAoKHVuc2lnbmVkIGxvbmcpaS1cXHUwMDNldWJ1ZiArIGktXFx1MDAzZWlvdl9vZmZzZXQpIHwgc2l6ZTtcXG5AQCAtODcyLDcgKzg4OCw3IEBAIHVuc2lnbmVkIGxvbmcgaW92X2l0ZXJfZ2FwX2FsaWdubWVudChjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXFxuIFxcdHNpemVfdCBzaXplID0gaS1cXHUwMDNlY291bnQ7XFxuIFxcdHVuc2lnbmVkIGs7XFxuIFxcbi1cXHRpZiAoaXRlcl9pc191YnVmKGkpKVxcbitcXHRpZiAoaXRlcl9pc191YnVmKGkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKFdBUk5fT04oIWl0ZXJfaXNfaW92ZWMoaSkpKVxcbkBAIC0xNDY5LDExICsxNDg1LDEyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGltcG9ydF91YnVmKTtcXG4gdm9pZCBpb3ZfaXRlcl9yZXN0b3JlKHN0cnVjdCBpb3ZfaXRlciAqaSwgc3RydWN0IGlvdl9pdGVyX3N0YXRlICpzdGF0ZSlcXG4ge1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFpb3ZfaXRlcl9pc19idmVjKGkpIFxcdTAwMjZcXHUwMDI2ICFpdGVyX2lzX2lvdmVjKGkpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAhaXRlcl9pc191YnVmKGkpKSBcXHUwMDI2XFx1MDAyNiAhaW92X2l0ZXJfaXNfa3ZlYyhpKSlcXG4rXFx0XFx0XFx0ICFpdGVyX2lzX3VidWYoaSkgXFx1MDAyNlxcdTAwMjYgIWlvdl9pdGVyX2lzX2t2ZWMoaSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICFpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRpLVxcdTAwM2Vpb3Zfb2Zmc2V0ID0gc3RhdGUtXFx1MDAzZWlvdl9vZmZzZXQ7XFxuIFxcdGktXFx1MDAzZWNvdW50ID0gc3RhdGUtXFx1MDAzZWNvdW50O1xcbi1cXHRpZiAoaXRlcl9pc191YnVmKGkpKVxcbitcXHRpZiAoaXRlcl9pc191YnVmKGkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0LypcXG4gXFx0ICogRm9yIHRoZSAqdmVjIGl0ZXJzLCBucl9zZWdzICsgaW92IGlzIGNvbnN0YW50IC0gaWYgd2UgaW5jcmVtZW50XFxuQEAgLTE2MjUsNyArMTY0Miw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXFxuIFxcdH1cXG4gXFx0YmkuYmlfaWR4ID0gMDtcXG4gXFx0YmkuYmlfc2l6ZSA9IG1heHNpemU7XFxuLVxcdGJpLmJpX2J2ZWNfZG9uZSA9IHNraXA7XFxuK1xcdGJpLmJpX29mZnNldCA9IHNraXA7XFxuIFxcbiBcXHRtYXhwYWdlcyA9IHdhbnRfcGFnZXNfYXJyYXkocGFnZXMsIG1heHNpemUsIHNraXAsIG1heHBhZ2VzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlci5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyLmNcXG5pbmRleCAzNGIzMDk3YjRjN2I5Li45YzFiNmNmOGMzNmZlIDEwMDY0NFxcbi0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jXFxuKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyLmNcXG5AQCAtNzYyLDcgKzc2Miw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYmlvX2FkdmFuY2Uoc3RydWN0IGNlcGhfbXNnX2RhdGFfY3Vyc29yICpjdXJzb3IsXFxuIFxcdGlmICghY3Vyc29yLVxcdTAwM2VyZXNpZClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlOyAgIC8qIG5vIG1vcmUgZGF0YSAqL1xcbiBcXG4tXFx0aWYgKCFieXRlcyB8fCAoaXQtXFx1MDAzZWl0ZXIuYmlfc2l6ZSBcXHUwMDI2XFx1MDAyNiBpdC1cXHUwMDNlaXRlci5iaV9idmVjX2RvbmUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKCFieXRlcyB8fCAoaXQtXFx1MDAzZWl0ZXIuYmlfc2l6ZSBcXHUwMDI2XFx1MDAyNiBpdC1cXHUwMDNlaXRlci5iaV9vZmZzZXQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAgIHBhZ2UgPT0gYmlvX2l0ZXJfcGFnZShpdC1cXHUwMDNlYmlvLCBpdC1cXHUwMDNlaXRlcikpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFx0LyogbW9yZSBieXRlcyB0byBwcm9jZXNzIGluIHRoaXMgc2VnbWVudCAqL1xcbiBcXG5AQCAtODE3LDcgKzgxNyw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYnZlY3NfYWR2YW5jZShzdHJ1Y3QgY2VwaF9tc2dfZGF0YV9jdXJzb3IgKmN1cnNvcixcXG4gXFx0aWYgKCFjdXJzb3ItXFx1MDAzZXJlc2lkKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7ICAgLyogbm8gbW9yZSBkYXRhICovXFxuIFxcbi1cXHRpZiAoIWJ5dGVzIHx8IChjdXJzb3ItXFx1MDAzZWJ2ZWNfaXRlci5iaV9idmVjX2RvbmUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKCFieXRlcyB8fCAoY3Vyc29yLVxcdTAwM2VidmVjX2l0ZXIuYmlfb2Zmc2V0IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgICBwYWdlID09IGJ2ZWNfaXRlcl9wYWdlKGJ2ZWNzLCBjdXJzb3ItXFx1MDAzZWJ2ZWNfaXRlcikpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFx0LyogbW9yZSBieXRlcyB0byBwcm9jZXNzIGluIHRoaXMgc2VnbWVudCAqL1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6MjE6MTQuMDg1MDkwMzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MTE2MTcwOTE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRtYV9idWZfaW9faW5pdF9tYXBcIixcbiAgICBcImRtYV9idWZfaW9fY3JlYXRlX21hcFwiLFxuICAgIFwiZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzXCIsXG4gICAgXCJkbWFfYnVmX2lvX2N0eF9yZWxlYXNlXCIsXG4gICAgXCJkbWFfYnVmX2lvX2N0eF9jcmVhdGVcIixcbiAgICBcImlvX2Ryb3BfZG1hYnVmX25vZGVcIixcbiAgICBcIl9faW9faW1wb3J0X3JlZ19idWZcIixcbiAgICBcIl9faW9faW1wb3J0X3JlZ192ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIERNQS1idWYgc3VwcG9ydCBmb3IgaW9fdXJpbmcgYW5kIE5WTWUgYmxvY2sgZGV2aWNlcy4gSXQgYWRkcyBuZXcgY29yZSBpbmZyYXN0cnVjdHVyZSBpbiBkbWEtYnVmLWlvLmMsIG1vZGlmaWVzIGlvX3VyaW5nIHRvIHN1cHBvcnQgcmVnaXN0ZXJpbmcgYW5kIGltcG9ydGluZyBkbWFidWZzLCBhbmQgdXBkYXRlcyB0aGUgTlZNZSBQQ0kgZHJpdmVyIHRvIGhhbmRsZSBkbWFidWYtYmFja2VkIHJlcXVlc3RzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlM2M3YmE5NWQ5OTYxZTczMjZjYmU1OGRhNTZmMDc5ODNkZjE2ODM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMDM6MjE6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jpb3ZlY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9ibG9jay9iaW92ZWNzLnJzdFxuaW5kZXggMTExMjZlZDZmNDBmNy4uNDlkYTIxNDdiN2Q4NiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svYmlvdmVjcy5yc3RcbkBAIC0xNiwxNiArMTYsMTYgQEAgYnZfbGVuIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgY29tcGxldGVkIGluIHRoYXQgYmlvdmVjLlxuIEluIHRoZSBuZXcgc2NoZW1lIG9mIHRoaW5ncywgZXZlcnl0aGluZyB0aGF0IG11c3QgYmUgbXV0YXRlZCBpbiBvcmRlciB0b1xuIHBhcnRpYWxseSBjb21wbGV0ZSBhIGJpbyBpcyBzZWdyZWdhdGVkIGludG8gc3RydWN0IGJ2ZWNfaXRlcjogYmlfc2VjdG9yLFxuIGJpX3NpemUgYW5kIGJpX2lkeCBoYXZlIGJlZW4gbW92ZWQgdGhlcmU7IGFuZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBidl9vZmZzZXRcbi1hbmQgYnZfbGVuLCBzdHJ1Y3QgYnZlY19pdGVyIGhhcyBiaV9idmVjX2RvbmUsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZlxuK2FuZCBidl9sZW4sIHN0cnVjdCBidmVjX2l0ZXIgaGFzIGJpX29mZnNldCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mXG4gYnl0ZXMgY29tcGxldGVkIGluIHRoZSBjdXJyZW50IGJ2ZWMuXG4gXG4gVGhlcmUgYXJlIGEgYnVuY2ggb2YgbmV3IGhlbHBlciBtYWNyb3MgZm9yIGhpZGluZyB0aGUgZ29yeSBkZXRhaWxzIC0gaW5cbiBwYXJ0aWN1bGFyLCBwcmVzZW50aW5nIHRoZSBpbGx1c2lvbiBvZiBwYXJ0aWFsbHkgY29tcGxldGVkIGJpb3ZlY3Mgc28gdGhhdFxuLW5vcm1hbCBjb2RlIGRvZXNuJ3QgaGF2ZSB0byBkZWFsIHdpdGggYmlfYnZlY19kb25lLlxuK25vcm1hbCBjb2RlIGRvZXNuJ3QgaGF2ZSB0byBkZWFsIHdpdGggYmlfb2Zmc2V0LlxuIFxuICAqIERyaXZlciBjb2RlIHNob3VsZCBubyBsb25nZXIgcmVmZXIgdG8gYmlvdmVjcyBkaXJlY3RseTsgd2Ugbm93IGhhdmVcbiAgICBiaW9faW92ZWMoKSBhbmQgYmlvX2l0ZXJfaW92ZWMoKSBtYWNyb3MgdGhhdCByZXR1cm4gbGl0ZXJhbCBzdHJ1Y3QgYmlvdmVjcyxcbi0gICBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByYXcgYmlvdmVjcyBidXQgdGFraW5nIGludG8gYWNjb3VudCBiaV9idmVjX2RvbmUgYW5kXG4rICAgY29uc3RydWN0ZWQgZnJvbSB0aGUgcmF3IGJpb3ZlY3MgYnV0IHRha2luZyBpbnRvIGFjY291bnQgYmlfb2Zmc2V0IGFuZFxuICAgIGJpX3NpemUuXG4gXG4gICAgYmlvX2Zvcl9lYWNoX3NlZ21lbnQoKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHRha2UgYSBidmVjX2l0ZXIgYXJndW1lbnRcbkBAIC0xMDEsNyArMTAxLDcgQEAgT3RoZXIgaW1wbGljYXRpb25zOlxuICAgIEkuZS4gaW5zdGVhZCBvZiB1c2luZyBiaW9faW92ZWNfaWR4KCkgKG9yIGJpby1cdTAwM2ViaV9pb3ZlY1tiaW8tXHUwMDNlYmlfaWR4XSksIHlvdVxuICAgIG5vdyB1c2UgYmlvX2l0ZXJfaW92ZWMoKSwgd2hpY2ggdGFrZXMgYSBidmVjX2l0ZXIgYW5kIHJldHVybnMgYVxuICAgIGxpdGVyYWwgc3RydWN0IGJpb192ZWMgLSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5IGZyb20gdGhlIHJhdyBiaW92ZWMgYnV0XG4tICAgdGFraW5nIGludG8gYWNjb3VudCBiaV9idmVjX2RvbmUgKGFuZCBiaV9zaXplKS5cbisgICB0YWtpbmcgaW50byBhY2NvdW50IGJpX29mZnNldCAoYW5kIGJpX3NpemUpLlxuIFxuICAqIGJpX3ZjbnQgY2FuJ3QgYmUgdHJ1c3RlZCBvciByZWxpZWQgdXBvbiBieSBkcml2ZXIgY29kZSAtIGkuZS4gYW55dGhpbmcgdGhhdFxuICAgIGRvZXNuJ3QgYWN0dWFsbHkgb3duIHRoZSBiaW8uIFRoZSByZWFzb24gaXMgdHdvZm9sZDogZmlyc3RseSwgaXQncyBub3RcbmRpZmYgLS1naXQgYS9ibG9jay9iaW8uYyBiL2Jsb2NrL2Jpby5jXG5pbmRleCA2YTJmNmZjMzQxM2U4Li5jYzJiYjkxODNjMWE3IDEwMDY0NFxuLS0tIGEvYmxvY2svYmlvLmNcbisrKyBiL2Jsb2NrL2Jpby5jXG5AQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSAwO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IDA7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9pZHggPSAwO1xuLVx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lID0gMDtcbitcdGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldCA9IDA7XG4gXHRiaW8tXHUwMDNlYmlfZW5kX2lvID0gTlVMTDtcbiBcdGJpby1cdTAwM2ViaV9wcml2YXRlID0gTlVMTDtcbiAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcbkBAIC04NjEsNiArODYxLDEyIEBAIHN0YXRpYyBpbnQgX19iaW9fY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLCBnZnBfdCBnZnApXG4gXHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gYmlvX3NyYy1cdTAwM2ViaV93cml0ZV9zdHJlYW07XG4gXHRiaW8tXHUwMDNlYmlfaXRlciA9IGJpb19zcmMtXHUwMDNlYmlfaXRlcjtcbiBcbitcdGlmIChvcF9pc19kbWFidWYoYmlvLVx1MDAzZWJpX29wZikpIHtcbitcdFx0YmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXAgPSBiaW9fc3JjLVx1MDAzZWJpX2RtYWJ1Zl9tYXA7XG4rXHR9IGVsc2Uge1xuK1x0XHRiaW8tXHUwMDNlYmlfaW9fdmVjID0gYmlvX3NyYy1cdTAwM2ViaV9pb192ZWM7XG4rXHR9XG4rXG4gXHRpZiAoYmlvLVx1MDAzZWJpX2JkZXYpIHtcbiBcdFx0aWYgKGJpby1cdTAwM2ViaV9iZGV2ID09IGJpb19zcmMtXHUwMDNlYmlfYmRldiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJpb19mbGFnZ2VkKGJpb19zcmMsIEJJT19SRU1BUFBFRCkpXG5AQCAtOTAyLDggKzkwOCw2IEBAIHN0cnVjdCBiaW8gKmJpb19hbGxvY19jbG9uZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuIFx0XHRiaW9fcHV0KGJpbyk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0YmlvLVx1MDAzZWJpX2lvX3ZlYyA9IGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjO1xuLVxuIFx0cmV0dXJuIGJpbztcbiB9XG4gRVhQT1JUX1NZTUJPTChiaW9fYWxsb2NfY2xvbmUpO1xuQEAgLTkyMyw3ICs5MjcsNyBAQCBpbnQgYmlvX2luaXRfY2xvbmUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGJpbyAqYmlvLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRiaW9faW5pdChiaW8sIGJkZXYsIGJpb19zcmMtXHUwMDNlYmlfaW9fdmVjLCAwLCBiaW9fc3JjLVx1MDAzZWJpX29wZik7XG4rXHRiaW9faW5pdChiaW8sIGJkZXYsIE5VTEwsIDAsIGJpb19zcmMtXHUwMDNlYmlfb3BmKTtcbiBcdHJldCA9IF9fYmlvX2Nsb25lKGJpbywgYmlvX3NyYywgZ2ZwKTtcbiBcdGlmIChyZXQpXG4gXHRcdGJpb191bmluaXQoYmlvKTtcbkBAIC0xMTg4LDExICsxMTkyLDIyIEBAIHZvaWQgYmlvX2lvdl9idmVjX3NldChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiBcbiBcdGJpby1cdTAwM2ViaV9pb192ZWMgPSAoc3RydWN0IGJpb192ZWMgKilpdGVyLVx1MDAzZWJ2ZWM7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9pZHggPSAwO1xuLVx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lID0gaXRlci1cdTAwM2Vpb3Zfb2Zmc2V0O1xuK1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0ID0gaXRlci1cdTAwM2Vpb3Zfb2Zmc2V0O1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuIFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NMT05FRCk7XG4gfVxuIFxuK3ZvaWQgYmlvX2RtYWJ1Zl9tYXBfc2V0KHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuK3tcbitcdFdBUk5fT05fT05DRShiaW8tXHUwMDNlYmlfbWF4X3ZlY3MpO1xuK1xuK1x0YmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXAgPSBpdGVyLVx1MDAzZWRtYWJ1Zl9tYXA7XG4rXHRiaW8tXHUwMDNlYmlfdmNudCA9IDA7XG4rXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQgPSBpdGVyLVx1MDAzZWlvdl9vZmZzZXQ7XG4rXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gaW92X2l0ZXJfY291bnQoaXRlcik7XG4rXHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT01FUkdFIHwgUkVRX0RNQUJVRjtcbit9XG4rXG4gLypcbiAgKiBBbGlnbnMgdGhlIGJpbyBzaXplIHRvIHRoZSBsZW5fYWxpZ25fbWFzaywgcmVsZWFzaW5nIGV4Y2Vzc2l2ZSBiaW8gdmVjcyB0aGF0XG4gICogX19iaW9faW92X2l0ZXJfZ2V0X3BhZ2VzIG1heSBoYXZlIGluc2VydGVkLCBhbmQgcmV2ZXJ0cyB0aGUgdHJpbW1lZCBsZW5ndGhcbkBAIC0xMjU1LDYgKzEyNzAsMTEgQEAgaW50IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuK1x0aWYgKGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaXRlcikpIHtcbitcdFx0YmlvX2RtYWJ1Zl9tYXBfc2V0KGJpbywgaXRlcik7XG4rXHRcdGlvdl9pdGVyX2FkdmFuY2UoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKGlvdl9pdGVyX2V4dHJhY3Rfd2lsbF9waW4oaXRlcikpXG4gXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19QQUdFX1BJTk5FRCk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuY1xuaW5kZXggYWIxMTYxY2E2OWYxZS4uNmYwY2FiZmUyNWVmNyAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1tZXJnZS5jXG4rKysgYi9ibG9jay9ibGstbWVyZ2UuY1xuQEAgLTMzLDcgKzMzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGJpb19nZXRfbGFzdF9idmVjKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpb192ZWMgKmJ2KVxuIFxuIFx0YmlvX2FkdmFuY2VfaXRlcihiaW8sIFx1MDAyNml0ZXIsIGl0ZXIuYmlfc2l6ZSk7XG4gXG4tXHRpZiAoIWl0ZXIuYmlfYnZlY19kb25lKVxuK1x0aWYgKCFpdGVyLmJpX29mZnNldClcbiBcdFx0aWR4ID0gaXRlci5iaV9pZHggLSAxO1xuIFx0ZWxzZVx0LyogaW4gdGhlIG1pZGRsZSBvZiBidmVjICovXG4gXHRcdGlkeCA9IGl0ZXIuYmlfaWR4O1xuQEAgLTQxLDExICs0MSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2dldF9sYXN0X2J2ZWMoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvX3ZlYyAqYnYpXG4gXHQqYnYgPSBiaW8tXHUwMDNlYmlfaW9fdmVjW2lkeF07XG4gXG4gXHQvKlxuLVx0ICogaXRlci5iaV9idmVjX2RvbmUgcmVjb3JkcyBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBsYXN0IGJ2ZWNcbitcdCAqIGl0ZXIuYmlfb2Zmc2V0IHJlY29yZHMgYWN0dWFsIGxlbmd0aCBvZiB0aGUgbGFzdCBidmVjXG4gXHQgKiBpZiB0aGlzIGJpbyBlbmRzIGluIHRoZSBtaWRkbGUgb2Ygb25lIGlvIHZlY3RvclxuIFx0ICovXG4tXHRpZiAoaXRlci5iaV9idmVjX2RvbmUpXG4tXHRcdGJ2LVx1MDAzZWJ2X2xlbiA9IGl0ZXIuYmlfYnZlY19kb25lO1xuK1x0aWYgKGl0ZXIuYmlfb2Zmc2V0KVxuK1x0XHRidi1cdTAwM2Vidl9sZW4gPSBpdGVyLmJpX29mZnNldDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJpb193aWxsX2dhcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbkBAIC0zNDYsNiArMzQ2LDIwIEBAIGludCBiaW9fc3BsaXRfaW9fYXQoc3RydWN0IGJpbyAqYmlvLCBjb25zdCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0sXG4gXHRcdGxlbl9hbGlnbl9tYXNrIHw9IChiYy1cdTAwM2ViY19rZXktXHUwMDNlY3J5cHRvX2NmZy5kYXRhX3VuaXRfc2l6ZSAtIDEpO1xuIFx0fVxuIFxuK1x0aWYgKG9wX2lzX2RtYWJ1ZihiaW8tXHUwMDNlYmlfb3BmKSkge1xuK1x0XHQvKiBzaW5nbGUgY29udGlndW91cyByYW5nZSBpbnRvIHRoZSBkbWEtYnVmICovXG4rXHRcdG5zZWdzID0gMTtcbitcbitcdFx0aWYgKChiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQgXHUwMDI2IHN0YXJ0X2FsaWduX21hc2spIHx8XG4rXHRcdCAgICAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcdTAwMjYgbGVuX2FsaWduX21hc2spKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRpZiAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcdTAwM2UgbWF4X2J5dGVzKSB7XG4rXHRcdFx0Ynl0ZXMgPSBtYXhfYnl0ZXM7XG4rXHRcdFx0Z290byBzcGxpdDtcbitcdFx0fVxuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdGJpb19mb3JfZWFjaF9idmVjKGJ2LCBiaW8sIGl0ZXIpIHtcbiBcdFx0aWYgKGJ2LmJ2X29mZnNldCBcdTAwMjYgc3RhcnRfYWxpZ25fbWFzayB8fFxuIFx0XHQgICAgYnYuYnZfbGVuIFx1MDAyNiBsZW5fYWxpZ25fbWFzaylcbkBAIC0zNzYsNiArMzkwLDcgQEAgaW50IGJpb19zcGxpdF9pb19hdChzdHJ1Y3QgYmlvICpiaW8sIGNvbnN0IHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSxcbiBcdFx0YnZwcnZwID0gXHUwMDI2YnZwcnY7XG4gXHR9XG4gXG4rb3V0OlxuIFx0KnNlZ3MgPSBuc2VncztcbiBcdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBmZnMoZ2Fwcyk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstbXEtZG1hLmMgYi9ibG9jay9ibGstbXEtZG1hLmNcbmluZGV4IGJmZGI5ZWQ3MDc0MTEuLjg4ZmQ5Y2JjOTUxZjQgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstbXEtZG1hLmNcbisrKyBiL2Jsb2NrL2Jsay1tcS1kbWEuY1xuQEAgLTQ0LDcgKzQ0LDcgQEAgc3RhdGljIGJvb2wgYmxrX21hcF9pdGVyX25leHQoc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGJsa19tYXBfaXRlciAqaXRlcixcbiBcdCAqIG9uZSBjb3VsZCBiZSBtZXJnZWQgaW50byBpdC4gIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBtb3ZpbmcgdG9cbiBcdCAqIHRoZSBuZXh0IGJpbywgYnV0IHNvbWUgY2FsbGVycyBhbHNvIGRvbid0IHBhY2sgYnZlY3MgdGlnaHQuXG4gXHQgKi9cbi1cdHdoaWxlICghaXRlci1cdTAwM2VpdGVyLmJpX3NpemUgfHwgIWl0ZXItXHUwMDNlaXRlci5iaV9idmVjX2RvbmUpIHtcbitcdHdoaWxlICghaXRlci1cdTAwM2VpdGVyLmJpX3NpemUgfHwgIWl0ZXItXHUwMDNlaXRlci5iaV9vZmZzZXQpIHtcbiBcdFx0c3RydWN0IGJpb192ZWMgbmV4dDtcbiBcbiBcdFx0aWYgKCFfX2Jsa19tYXBfaXRlcl9uZXh0KGl0ZXIpKVxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IGVhYWMwNTgxNWNiMDMuLjUwYWJmZDkzMjg4NjEgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuKysrIGIvYmxvY2svYmxrLmhcbkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGJpb19tYXlfbmVlZF9zcGxpdChzdHJ1Y3QgYmlvICpiaW8sXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0YnYgPSBfX2J2ZWNfaXRlcl9idmVjKGJpby1cdTAwM2ViaV9pb192ZWMsIGJpby1cdTAwM2ViaV9pdGVyKTtcbi1cdGlmIChiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplIFx1MDAzZSBidi1cdTAwM2Vidl9sZW4gLSBiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmUpXG4rXHRpZiAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSBcdTAwM2UgYnYtXHUwMDNlYnZfbGVuIC0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0KVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGlmICgoYnYtXHUwMDNlYnZfb2Zmc2V0IHwgYnYtXHUwMDNlYnZfbGVuKSBcdTAwMjYgbGltLVx1MDAzZWRtYV9hbGlnbm1lbnQpXG4gXHRcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2ZvcHMuYyBiL2Jsb2NrL2ZvcHMuY1xuaW5kZXggMTU3ODNhNjE4MGRlYy4uZDgzY2RiYWI2NWE2YSAxMDA2NDRcbi0tLSBhL2Jsb2NrL2ZvcHMuY1xuKysrIGIvYmxvY2svZm9wcy5jXG5AQCAtMzQ4LDYgKzM0OCw4IEBAIHN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4gXHRcdCAqIGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoKSBhbmQgc2V0IHRoZSBidmVjIGRpcmVjdGx5LlxuIFx0XHQgKi9cbiBcdFx0YmlvX2lvdl9idmVjX3NldChiaW8sIGl0ZXIpO1xuK1x0fSBlbHNlIGlmIChpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGl0ZXIpKSB7XG4rXHRcdGJpb19kbWFidWZfbWFwX3NldChiaW8sIGl0ZXIpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gYmxrZGV2X2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGJkZXYpO1xuIFx0XHRpZiAodW5saWtlbHkocmV0KSlcbkBAIC05MjQsNiArOTI2LDE5IEBAIHN0YXRpYyBpbnQgYmxrZGV2X21tYXBfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuIFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUoZGVzYyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYmxrZGV2X2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IGZpbGUgKmZpbGUsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gZmlsZV9iZGV2KGZpbGUpO1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LVx1MDAzZWJkX2Rpc2s7XG4rXG4rXHRpZiAoIShmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fRElSRUNUKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWRpc2stXHUwMDNlZm9wcy1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiBkaXNrLVx1MDAzZWZvcHMtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChiZGV2LCBjdHgpO1xuK31cbitcbiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcbiBcdC5vcGVuXHRcdD0gYmxrZGV2X29wZW4sXG4gXHQucmVsZWFzZVx0PSBibGtkZXZfcmVsZWFzZSxcbkBAIC05NDIsNiArOTU3LDcgQEAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7XG4gXHQuZmFsbG9jYXRlXHQ9IGJsa2Rldl9mYWxsb2NhdGUsXG4gXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG4gXHQuZm9wX2ZsYWdzXHQ9IEZPUF9CVUZGRVJfUkFTWU5DLFxuK1x0LmluaXRfZG1hX2J1Zl9pb19jdHggPSBibGtkZXZfaW5pdF9kbWFfYnVmX2lvX2N0eCxcbiB9O1xuIFxuIHN0YXRpYyBfX2luaXQgaW50IGJsa2Rldl9pbml0KHZvaWQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggMWZhZWNlZjMzMDA5Mi4uMGIxMjVjY2IyNjYzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTM3OCw3ICszNzgsNyBAQCBzdGF0aWMgaW50IGxvX3J3X2FpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgbG9vcF9jbWQgKmNtZCxcbiBcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBydyxcbiBcdFx0XHRfX2J2ZWNfaXRlcl9idmVjKHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pb192ZWMsIHJxLVx1MDAzZWJpby1cdTAwM2ViaV9pdGVyKSxcbiBcdFx0XHRucl9idmVjLCBibGtfcnFfYnl0ZXMocnEpKTtcbi1cdFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xuK1x0XHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHR9XG4gXHRhdG9taWNfc2V0KFx1MDAyNmNtZC1cdTAwM2VyZWYsIDIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhMy4uNmY0YjQ0YTFlZTJmNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtNTUzLDcgKzU1Myw3IEBAIHN0YXRpYyBpbnQgemxvb3BfZG9fcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuIFx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNml0ZXIsIHJ3LFxuIFx0XHRcdF9fYnZlY19pdGVyX2J2ZWMocnEtXHUwMDNlYmlvLVx1MDAzZWJpX2lvX3ZlYywgcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIpLFxuIFx0XHRcdFx0XHRucl9idmVjLCBibGtfcnFfYnl0ZXMocnEpKTtcbi1cdFx0aXRlci5pb3Zfb2Zmc2V0ID0gcnEtXHUwMDNlYmlvLVx1MDAzZWJpX2l0ZXIuYmlfYnZlY19kb25lO1xuK1x0XHRpdGVyLmlvdl9vZmZzZXQgPSBycS1cdTAwM2ViaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHR9XG4gXG4gXHRjbWQtXHUwMDNlaW9jYi5raV9wb3MgPSAoY21kLVx1MDAzZXNlY3RvciAtIHpvbmUtXHUwMDNlc3RhcnQpIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXG5pbmRleCBiMjVkNzU1MGJhY2ZkLi41MjM3MzFiMGY4M2VlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVcbkBAIC0xLDYgKzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIG9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcXFxuLVx0IGRtYS1mZW5jZS11bndyYXAubyBkbWEtcmVzdi5vIGRtYS1idWYtbWFwcGluZy5vXG4rXHQgZG1hLWZlbmNlLXVud3JhcC5vIGRtYS1yZXN2Lm8gZG1hLWJ1Zi1tYXBwaW5nLm8gZG1hLWJ1Zi1pby5vXG4gb2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQUylcdCs9IGRtYS1oZWFwLm9cbiBvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTKVx0Kz0gaGVhcHMvXG4gb2JqLSQoQ09ORklHX1NZTkNfRklMRSlcdFx0Kz0gc3luY19maWxlLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjVmNTQ1YTFiY2YzMjNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmNcbkBAIC0wLDAgKzEsMjc1IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIENvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3Igc3VwcG9yaW5nIGRtYS1idWYgaW4gdGhlIEkvTyBwYXRoLlxuKyAqXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFBhdmVsIEJlZ3Vua292IFx1MDAzY2FzbWwuc2lsZW5jZUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLWlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtcmVzdi5oXHUwMDNlXG4rXG4rc3RydWN0IGRtYV9idWZfaW9fZmVuY2Uge1xuK1x0c3RydWN0IGRtYV9mZW5jZSBiYXNlO1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKmRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpXG4re1xuK1x0LyogZGVmYXVsdCBmZW5jZSByZWxlYXNlIGtmcmVlJ3MgdGhlIGJhc2UgcG9pbnRlciAqL1xuK1x0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlLCBiYXNlKSk7XG4rXG4rXHRyZXR1cm4gXCJkbWEtYnVmLWlvLWN0eFwiO1xuK31cbitcbitzdGF0aWMgY29uc3QgY2hhciAqZG1hX2J1Zl9pb19mZW5jZV90aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKVxuK3tcbitcdHJldHVybiBcImRtYS1idWYtaW8tY3R4XCI7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRtYV9idWZfaW9fZmVuY2Vfb3BzID0ge1xuK1x0LmdldF9kcml2ZXJfbmFtZSA9IGRtYV9idWZfaW9fZmVuY2VfZHJ2X25hbWUsXG4rXHQuZ2V0X3RpbWVsaW5lX25hbWUgPSBkbWFfYnVmX2lvX2ZlbmNlX3RpbWVsaW5lX25hbWUsXG4rfTtcbitcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCxcbitcdFx0XHRcdFx0XHQgIHJlbGVhc2Vfd29yayk7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHJlZmNvdW50X3JlYWQoXHUwMDI2Y3R4LVx1MDAzZXJlZnMpKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlcmVsZWFzZShjdHgpO1xuK1x0ZG1hX2J1Zl9wdXQoY3R4LVx1MDAzZWRtYWJ1Zik7XG4rXHRrZnJlZShjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbWFfYnVmX2lvX21hcCxcbitcdFx0XHRcdFx0XHQgIHJlbGVhc2Vfd29yayk7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZSAqZmVuY2UgPSBtYXAtXHUwMDNlZmVuY2U7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCA9IG1hcC1cdTAwM2VjdHg7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVx1MDAzZWRtYWJ1ZjtcbitcbitcdC8qIHRoZSByZWxlYXNlIHBhdGggbXVzdCB3YWl0IGZvciBmZW5jZXMgKi9cbitcdGlmIChXQVJOX09OX09OQ0UocmVmY291bnRfcmVhZChcdTAwMjZjdHgtXHUwMDNlcmVmcykgPT0gMCkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFByZXZlbnQgZnJvbSBkZXN0b3lpbmcgdGhlIGN0eCB3aGlsZSB1bm1hcHBpbmcgKi9cbitcdHJlZmNvdW50X2luYyhcdTAwMjZjdHgtXHUwMDNlcmVmcyk7XG4rXG4rXHQvKlxuK1x0ICogVGhlcmUgYXJlIG5vIG1vcmUgcmVxdWVzdHMgdXNpbmcgdGhlIG1hcCwgd2UgY2FuIHNpZ25hbCB0aGUgZmVuY2UuXG4rXHQgKiBJdCBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGFraW5nIHRoZSByZXN2IGxvY2sgYXMgc29tZW9uZSBjb3VsZCBiZVxuK1x0ICogd2FpdGluZyBmb3IgdGhlIGZlbmNlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suXG4rXHQgKi9cbitcdGRtYV9mZW5jZV9zaWduYWwoXHUwMDI2ZmVuY2UtXHUwMDNlYmFzZSk7XG4rXG4rXHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbitcdGN0eC1cdTAwM2VkZXZfb3BzLVx1MDAzZXVubWFwKGN0eCwgbWFwKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRkbWFfZmVuY2VfcHV0KFx1MDAyNmZlbmNlLVx1MDAzZWJhc2UpO1xuK1x0cGVyY3B1X3JlZl9leGl0KFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbitcdGtmcmVlKG1hcCk7XG4rXG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZzKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBEZXN0cnVjdGlvbiBuZWVkcyB0byB3YWl0IGZvciBJL08gYW5kIGRtYSBmZW5jZXMuIERlZmVyIGl0IHRvXG4rXHRcdCAqIHNpbXBsaWZ5IGxvY2tpbmcuXG4rXHRcdCAqL1xuK1x0XHRJTklUX1dPUksoXHUwMDI2Y3R4LVx1MDAzZXJlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKTtcbitcdFx0cXVldWVfd29yayhzeXN0ZW1fd3EsIFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCwgcmVmcyk7XG4rXG4rXHQvKiBtaWdodCBzbGVlcCwgdXNlIGEgd29ya2VyICovXG4rXHRJTklUX1dPUksoXHUwMDI2bWFwLVx1MDAzZXJlbGVhc2Vfd29yaywgZG1hX2J1Zl9pb19tYXBfcmVsZWFzZV93b3JrKTtcbitcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcdTAwMjZtYXAtXHUwMDNlcmVsZWFzZV93b3JrKTtcbit9XG4rXG4raW50IGRtYV9idWZfaW9faW5pdF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2lvX2ZlbmNlICpmZW5jZSA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZmVuY2UgPSBremFsbG9jKHNpemVvZigqZmVuY2UpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZmVuY2UpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gcGVyY3B1X3JlZl9pbml0KFx1MDAyNm1hcC1cdTAwM2VyZWZzLCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2UsIDAsIEdGUF9LRVJORUwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRrZnJlZShmZW5jZSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZmZW5jZS1cdTAwM2Vsb2NrKTtcbitcdGRtYV9mZW5jZV9pbml0KFx1MDAyNmZlbmNlLVx1MDAzZWJhc2UsIFx1MDAyNmRtYV9idWZfaW9fZmVuY2Vfb3BzLCBcdTAwMjZmZW5jZS1cdTAwM2Vsb2NrLFxuK1x0XHRcdGN0eC1cdTAwM2VmZW5jZV9jdHgsIGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmN0eC1cdTAwM2VmZW5jZV9zZXEpKTtcbitcdG1hcC1cdTAwM2VmZW5jZSA9IGZlbmNlO1xuK1x0bWFwLVx1MDAzZWN0eCA9IGN0eDtcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2lvX2luaXRfbWFwLCBcIkRNQV9CVUZcIik7XG4rXG4rc3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4re1xuK1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZiA9IGN0eC1cdTAwM2VkbWFidWY7XG4rXHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcDtcbitcdGxvbmcgcmV0O1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIC1cdTAwM2VkbWFidWZfbWFwKCkgd2lsbCBiZSBjYWxsaW5nIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoKSwgZm9yIHdoaWNoXG4rXHQgKiB3ZSdsbCBuZWVkIHRvIHdhaXQgZm9yIGZlbmNlcy4gRG8gYSBiaXQgbmljZXIgYW5kIHRyeSB0byB3YWl0XG4rXHQgKiB3aXRob3V0IHRoZSByZXN2IGxvY2sgZmlyc3QuXG4rXHQgKi9cbitcdHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxuK1x0XHRcdFx0ICAgIHRydWUsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbitcdGlmICghcmV0KVxuK1x0XHRyZXQgPSAtRUFHQUlOO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0bWFwID0gZG1hX2J1Zl9pb19nZXRfbWFwKGN0eCk7XG4rXHRpZiAobWFwKSB7XG4rXHRcdHJldCA9IDA7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxuK1x0XHRcdFx0ICB0cnVlLCAwKSBcdTAwM2MgMCkge1xuK1x0XHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuK1x0bWFwID0gY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlbWFwKGN0eCk7XG4rXHRpZiAoSVNfRVJSKG1hcCkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihtYXApO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHBlcmNwdV9yZWZfZ2V0KFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXHUwMDNlbWFwLCBtYXApO1xuK291dDpcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1x0cmV0dXJuIG1hcDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZG1hX2J1Zl9pb19kcm9wX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmID0gY3R4LVx1MDAzZWRtYWJ1ZjtcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xuK1x0aW50IHJldDtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcbitcdG1hcCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LVx1MDAzZW1hcCxcbitcdFx0XHRcdFx0ZG1hX3Jlc3ZfaGVsZChkbWFidWYtXHUwMDNlcmVzdikpO1xuK1x0aWYgKCFtYXApXG4rXHRcdHJldHVybjtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihjdHgtXHUwMDNlbWFwLCBOVUxMKTtcbitcbitcdHJldCA9IGRtYV9yZXN2X3Jlc2VydmVfZmVuY2VzKGRtYWJ1Zi1cdTAwM2VyZXN2LCAxKTtcbitcdGlmIChXQVJOX09OX09OQ0UocmV0KSkge1xuK1x0XHRzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IFx1MDAyNm1hcC1cdTAwM2VmZW5jZS1cdTAwM2ViYXNlO1xuK1xuK1x0XHRkbWFfZmVuY2VfZ2V0KGZlbmNlKTtcbitcdFx0cGVyY3B1X3JlZl9raWxsKFx1MDAyNm1hcC1cdTAwM2VyZWZzKTtcbitcdFx0ZG1hX2ZlbmNlX3dhaXQoZmVuY2UsIGZhbHNlKTtcbitcdFx0ZG1hX2ZlbmNlX3B1dChmZW5jZSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGRtYV9yZXN2X2FkZF9mZW5jZShkbWFidWYtXHUwMDNlcmVzdiwgXHUwMDI2bWFwLVx1MDAzZWZlbmNlLVx1MDAzZWJhc2UsXG4rXHRcdFx0ICAgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMKTtcbitcdC8qXG4rXHQgKiBEZWxheSBkZXN0cnVjdGlvbiB1bnRpbCBhbGwgaW5mbGlnaHQgcmVxdWVzdHMgdXNpbmcgdGhlIG1hcCBhcmVcbitcdCAqIGdvbmUuIEl0J2xsIGFsc28gc2lnbmFsIHRoZSBmZW5jZSB0aGVuLlxuK1x0ICovXG4rXHRwZXJjcHVfcmVmX2tpbGwoXHUwMDI2bWFwLVx1MDAzZXJlZnMpO1xuK31cbitcbit2b2lkIGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcbit7XG4rXHRkbWFfYnVmX2lvX2Ryb3BfbWFwKGN0eCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncywgXCJETUFfQlVGXCIpO1xuK1xuK3N0YXRpYyB2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtYV9idWZfaW9fY3R4LFxuK1x0XHRcdFx0XHRcdCAgcmVsZWFzZV93b3JrKTtcbitcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBjdHgtXHUwMDNlZG1hYnVmO1xuK1x0bG9uZyByZXQ7XG4rXG4rXHRkbWFfcmVzdl9sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbitcdC8qIFJlbW92ZSB0aGUgbGFzdCBtYXAsIHRoZXJlIHNob3VsZCBiZSBubyBuZXcgb25lcyBnb2luZyBmb3J3YXJkLiAqL1xuK1x0ZG1hX2J1Zl9pb19kcm9wX21hcChjdHgpO1xuK1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcbitcdC8qIFdhaXQgdW50aWwgYWxsIG1hcHMgYXJlIGRlc3Ryb3llZC4gKi9cbitcdHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dChkbWFidWYtXHUwMDNlcmVzdiwgRE1BX1JFU1ZfVVNBR0VfS0VSTkVMLFxuK1x0XHRcdFx0ICAgIGZhbHNlLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHJldCBcdTAwM2M9IDApKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3R4LVx1MDAzZW1hcCwgdHJ1ZSkpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZzKSlcbitcdFx0ZG1hX2J1Zl9pb19jdHhfZGVzdHJveV93b3JrKFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK31cbitcbit2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4re1xuK1x0LypcbitcdCAqIERlc3RydWN0aW9uIG5lZWRzIHRvIHdhaXQgZm9yIEkvTyBhbmQgZG1hIGZlbmNlcy4gRGVmZXIgaXQgdG9cbitcdCAqIHNpbXBsaWZ5IGxvY2tpbmcuXG4rXHQgKi9cbitcdElOSVRfV09SSyhcdTAwMjZjdHgtXHUwMDNlcmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmspO1xuK1x0cXVldWVfd29yayhzeXN0ZW1fd3EsIFx1MDAyNmN0eC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK31cbitcbitpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuK1x0XHRcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxuK1x0XHRcdCAgIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4rXHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRtZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpO1xuK1x0Y3R4LVx1MDAzZWZlbmNlX2N0eCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpO1xuK1x0Y3R4LVx1MDAzZWRpciA9IGRpcjtcbitcdGN0eC1cdTAwM2VkbWFidWYgPSBkbWFidWY7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2Y3R4LVx1MDAzZXJlZnMsIDEpO1xuK1x0Z2V0X2RtYV9idWYoZG1hYnVmKTtcbitcbitcdHJldCA9IGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vpbml0X2RtYV9idWZfaW9fY3R4KGZpbGUsIGN0eCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7XG4rXHRcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFjdHgtXHUwMDNlZGV2X29wcyB8fFxuK1x0XHRcdCAhY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlbWFwIHx8XG4rXHRcdFx0ICFjdHgtXHUwMDNlZGV2X29wcy1cdTAwM2V1bm1hcCB8fFxuK1x0XHRcdCAhY3R4LVx1MDAzZWRldl9vcHMtXHUwMDNlcmVsZWFzZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pby1yZXdpbmQuYyBiL2RyaXZlcnMvbWQvZG0taW8tcmV3aW5kLmNcbmluZGV4IDYxNTViMDExN2M5ZDYuLmIyMjcxOWM2NDExY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXG4rKysgYi9kcml2ZXJzL21kL2RtLWlvLXJld2luZC5jXG5AQCAtMTYsMTIgKzE2LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkbV9idmVjX2l0ZXJfcmV3aW5kKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBcdGludCBpZHg7XG4gXG4gXHRpdGVyLVx1MDAzZWJpX3NpemUgKz0gYnl0ZXM7XG4tXHRpZiAoYnl0ZXMgXHUwMDNjPSBpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSkge1xuLVx0XHRpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSAtPSBieXRlcztcbitcdGlmIChieXRlcyBcdTAwM2M9IGl0ZXItXHUwMDNlYmlfb2Zmc2V0KSB7XG4rXHRcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0IC09IGJ5dGVzO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcbi1cdGJ5dGVzIC09IGl0ZXItXHUwMDNlYmlfYnZlY19kb25lO1xuK1x0Ynl0ZXMgLT0gaXRlci1cdTAwM2ViaV9vZmZzZXQ7XG4gXHRpZHggPSBpdGVyLVx1MDAzZWJpX2lkeCAtIDE7XG4gXG4gXHR3aGlsZSAoaWR4IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgYnl0ZXMgXHUwMDI2XHUwMDI2IGJ5dGVzIFx1MDAzZSBidltpZHhdLmJ2X2xlbikge1xuQEAgLTMyLDEzICszMiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZG1fYnZlY19pdGVyX3Jld2luZChjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRpZiAoV0FSTl9PTkNFKGlkeCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgYnl0ZXMsXG4gXHRcdCAgICAgIFwiQXR0ZW1wdGVkIHRvIHJld2luZCBpdGVyIGJleW9uZCBidmVjJ3MgYm91bmRhcmllc1xcblwiKSkge1xuIFx0XHRpdGVyLVx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XG4tXHRcdGl0ZXItXHUwMDNlYmlfYnZlY19kb25lID0gMDtcbitcdFx0aXRlci1cdTAwM2ViaV9vZmZzZXQgPSAwO1xuIFx0XHRpdGVyLVx1MDAzZWJpX2lkeCA9IDA7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdGl0ZXItXHUwMDNlYmlfaWR4ID0gaWR4O1xuLVx0aXRlci1cdTAwM2ViaV9idmVjX2RvbmUgPSBidltpZHhdLmJ2X2xlbiAtIGJ5dGVzO1xuK1x0aXRlci1cdTAwM2ViaV9vZmZzZXQgPSBidltpZHhdLmJ2X2xlbiAtIGJ5dGVzO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTExMywxMCArMTEzLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkbV9iaW9fcmV3aW5kX2l0ZXIoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuIFx0aXRlci1cdTAwM2ViaV9zZWN0b3IgLT0gYnl0ZXMgXHUwMDNlXHUwMDNlIDk7XG4gXG4gXHQvKiBObyBhZHZhbmNlIG1lYW5zIG5vIHJld2luZCAqL1xuLVx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSlcbitcdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpIHtcbiBcdFx0aXRlci1cdTAwM2ViaV9zaXplICs9IGJ5dGVzO1xuLVx0ZWxzZVxuK1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCAtPSBieXRlcztcbitcdH0gZWxzZSB7XG4gXHRcdGRtX2J2ZWNfaXRlcl9yZXdpbmQoYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xuK1x0fVxuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmMgYi9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmNcbmluZGV4IDdlOTgxODcwMTQ0NTEuLjhmODgxNmUxYzUzOWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL21kL2RtLXBjYWNoZS9zZWdtZW50LmNcbisrKyBiL2RyaXZlcnMvbWQvZG0tcGNhY2hlL3NlZ21lbnQuY1xuQEAgLTE0LDcgKzE0LDcgQEAgaW50IHNlZ21lbnRfY29weV90b19iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LFxuIFxuIFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX0RFU1QsIFx1MDAyNmJpby1cdTAwM2ViaV9pb192ZWNbYmlvLVx1MDAzZWJpX2l0ZXIuYmlfaWR4XSxcbiBcdFx0XHRiaW9fc2VnbWVudHMoYmlvKSwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4tXHRpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9idmVjX2RvbmU7XG4rXHRpdGVyLmlvdl9vZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4gXHRpZiAoYmlvX29mZilcbiBcdFx0aW92X2l0ZXJfYWR2YW5jZShcdTAwMjZpdGVyLCBiaW9fb2ZmKTtcbiBcbkBAIC0zNSw3ICszNSw3IEBAIGludCBzZWdtZW50X2NvcHlfZnJvbV9iaW8oc3RydWN0IHBjYWNoZV9zZWdtZW50ICpzZWdtZW50LFxuIFxuIFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZpdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YmlvLVx1MDAzZWJpX2lvX3ZlY1tiaW8tXHUwMDNlYmlfaXRlci5iaV9pZHhdLFxuIFx0XHRcdGJpb19zZWdtZW50cyhiaW8pLCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbi1cdGl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcbitcdGl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiBcdGlmIChiaW9fb2ZmKVxuIFx0XHRpb3ZfaXRlcl9hZHZhbmNlKFx1MDAyNml0ZXIsIGJpb19vZmYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL2J0dC5jIGIvZHJpdmVycy9udmRpbW0vYnR0LmNcbmluZGV4IDdlMTExMjk2MGQ3ZjguLjVkOTEwYTY0NTAzZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9idHQuY1xuKysrIGIvZHJpdmVycy9udmRpbW0vYnR0LmNcbkBAIC0xMTU1LDcgKzExNTUsNyBAQCBzdGF0aWMgaW50IGJ0dF9yd19pbnRlZ3JpdHkoc3RydWN0IGJ0dCAqYnR0LCBzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXAsXG4gXHRcdGJ2ID0gYnZlY19pdGVyX2J2ZWMoYmlwLVx1MDAzZWJpcF92ZWMsIGJpcC1cdTAwM2ViaXBfaXRlcik7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSAnYnYnIG9idGFpbmVkIGZyb20gYnZlY19pdGVyX2J2ZWMgaGFzIGl0cyAuYnZfbGVuIGFuZFxuLVx0XHQgKiAuYnZfb2Zmc2V0IGFscmVhZHkgYWRqdXN0ZWQgZm9yIGl0ZXItXHUwMDNlYmlfYnZlY19kb25lLCBhbmQgd2VcbitcdFx0ICogLmJ2X29mZnNldCBhbHJlYWR5IGFkanVzdGVkIGZvciBpdGVyLVx1MDAzZWJpX29mZnNldCwgYW5kIHdlXG4gXHRcdCAqIGNhbiB1c2UgdGhvc2UgZGlyZWN0bHlcbiBcdFx0ICovXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG5pbmRleCA0NTNjMWYwYjJkZDA5Li5jZTY2YTE4NDNiZWMzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvaG9zdC9jb3JlLmNcbkBAIC0yNjc2LDYgKzI2NzYsMTcgQEAgc3RhdGljIGludCBudm1lX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuICNkZWZpbmUgbnZtZV9yZXBvcnRfem9uZXNcdE5VTExcbiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi9cbiBcbitzdGF0aWMgaW50IG52bWVfaW5pdF9kbWFfYnVmX2lvX2N0eChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuK3tcbitcdHN0cnVjdCBudm1lX25zICpucyA9IGJkZXYtXHUwMDNlYmRfZGlzay1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsID0gbnMtXHUwMDNlY3RybDtcbitcbitcdGlmICghY3RybC1cdTAwM2VvcHMtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXR1cm4gY3RybC1cdTAwM2VvcHMtXHUwMDNlaW5pdF9kbWFfYnVmX2lvX2N0eChjdHJsLCBjdHgpO1xuK31cbitcbiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9iZGV2X29wcyA9IHtcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0LmlvY3RsXHRcdD0gbnZtZV9pb2N0bCxcbkBAIC0yNjg2LDYgKzI2OTcsNyBAQCBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbnZtZV9iZGV2X29wcyA9IHtcbiBcdC5nZXRfdW5pcXVlX2lkXHQ9IG52bWVfZ2V0X3VuaXF1ZV9pZCxcbiBcdC5yZXBvcnRfem9uZXNcdD0gbnZtZV9yZXBvcnRfem9uZXMsXG4gXHQucHJfb3BzXHRcdD0gXHUwMDI2bnZtZV9wcl9vcHMsXG4rXHQuaW5pdF9kbWFfYnVmX2lvX2N0eCA9IG52bWVfaW5pdF9kbWFfYnVmX2lvX2N0eCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbnZtZV93YWl0X3JlYWR5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsIHUzMiBtYXNrLCB1MzIgdmFsLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaCBiL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuaW5kZXggODI0NjUxY2M4OThkYi4uMDM0YzMxYWY4ZmVjZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS9ob3N0L252bWUuaFxuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oXG5AQCAtNjUyLDYgKzY1Miw4IEBAIHN0cnVjdCBudm1lX2N0cmxfb3BzIHtcbiBcdGludCAoKmdldF9hZGRyZXNzKShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBjaGFyICpidWYsIGludCBzaXplKTtcbiBcdHZvaWQgKCpwcmludF9kZXZpY2VfaW5mbykoc3RydWN0IG52bWVfY3RybCAqY3RybCk7XG4gXHRib29sICgqc3VwcG9ydHNfcGNpX3AycGRtYSkoc3RydWN0IG52bWVfY3RybCAqY3RybCk7XG4rXHRpbnQgKCppbml0X2RtYV9idWZfaW9fY3R4KShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLFxuK1x0XHRcdFx0ICAgc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xuIFx0dW5zaWduZWQgbG9uZyAoKmdldF92aXJ0X2JvdW5kYXJ5KShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsLCBib29sIGlzX2FkbWluKTtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbmluZGV4IDY5OTMyZDY0MGI1MzcuLmNiYjMyMWZiN2M1MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC9wY2kuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmNcbkBAIC0yNyw2ICsyNyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8tNjQtbm9uYXRvbWljLWxvLWhpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby02NC1ub25hdG9taWMtaGktbG8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlZC1vcGFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLWlvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtcmVzdi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJ0cmFjZS5oXCJcbiAjaW5jbHVkZSBcIm52bWUuaFwiXG5AQCAtMzkzLDYgKzM5NSwxMyBAQCBzdHJ1Y3QgbnZtZV9xdWV1ZSB7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBkZWxldGVfZG9uZTtcbiB9O1xuIFxuK3N0cnVjdCBudm1lX2RtYWJ1Zl9tYXAge1xuK1x0c3RydWN0IGRtYV9idWZfaW9fbWFwIGJhc2U7XG4rXHRzdHJ1Y3Qgc2dfdGFibGUgKnNndDtcbitcdHVuc2lnbmVkIG5yX2VudHJpZXM7XG4rXHRkbWFfYWRkcl90IGRtYV9saXN0W107XG4rfTtcbitcbiAvKiBiaXRzIGZvciBpb2QtXHUwMDNlZmxhZ3MgKi9cbiBlbnVtIG52bWVfaW9kX2ZsYWdzIHtcbiBcdC8qIHRoaXMgY29tbWFuZCBoYXMgYmVlbiBhYm9ydGVkIGJ5IHRoZSB0aW1lb3V0IGhhbmRsZXIgKi9cbkBAIC04NTksNiArODY4LDEzOCBAQCBzdGF0aWMgdm9pZCBudm1lX2ZyZWVfZGVzY3JpcHRvcnMoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICpcbit0b19udm1lX2RtYWJ1Zl9tYXAoc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApXG4re1xuK1x0cmV0dXJuIGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBudm1lX2RtYWJ1Zl9tYXAsIGJhc2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfY3B1KHN0cnVjdCBudm1lX2RldiAqbnZtZV9kZXYsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG52bWVfZGV2LVx1MDAzZWRldjtcbitcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRtYV9kaXI7XG4rXHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXHUwMDNlYmlvO1xuK1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cdTAwM2ViaV9kbWFidWZfbWFwKTtcbitcdGRtYV9hZGRyX3QgKmRtYV9saXN0ID0gbWFwLVx1MDAzZWRtYV9saXN0O1xuK1x0dW5zaWduZWQgb2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuK1x0dW5zaWduZWQgbWFwX2lkeCA9IG9mZnNldCAvIE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4rXHRpbnQgbGVuZ3RoID0gYmxrX3JxX3BheWxvYWRfYnl0ZXMocmVxKSArXG4rXHRcdCAgICAgKG9mZnNldCBcdTAwMjYgKE5WTUVfQ1RSTF9QQUdFX1NJWkUgLSAxKSk7XG4rXG4rXHRkbWFfZGlyID0gcnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRTtcbitcbitcdHdoaWxlIChsZW5ndGggXHUwMDNlIDApIHtcbitcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfbGlzdFttYXBfaWR4KytdLFxuK1x0XHRcdFx0XHROVk1FX0NUUkxfUEFHRV9TSVpFLCBkbWFfZGlyKTtcbitcdFx0bGVuZ3RoIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IG52bWVfZGV2ICpudm1lX2RldixcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gbnZtZV9kZXYtXHUwMDNlZGV2O1xuK1x0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hX2RpcjtcbitcdHN0cnVjdCBiaW8gKmJpbyA9IHJlcS1cdTAwM2ViaW87XG4rXHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xuK1x0ZG1hX2FkZHJfdCAqZG1hX2xpc3QgPSBtYXAtXHUwMDNlZG1hX2xpc3Q7XG4rXHR1bnNpZ25lZCBvZmZzZXQgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9vZmZzZXQ7XG4rXHR1bnNpZ25lZCBtYXBfaWR4ID0gb2Zmc2V0IC8gTlZNRV9DVFJMX1BBR0VfU0laRTtcbitcdGludCBsZW5ndGggPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpICtcbitcdFx0ICAgICAob2Zmc2V0IFx1MDAyNiAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpKTtcbitcbitcdGRtYV9kaXIgPSBycV9kYXRhX2RpcihyZXEpID09IFJFQUQgPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFO1xuK1xuK1x0d2hpbGUgKGxlbmd0aCBcdTAwM2UgMCkge1xuK1x0XHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9saXN0W21hcF9pZHgrK10sXG4rXHRcdFx0XHRcdCAgIE5WTUVfQ1RSTF9QQUdFX1NJWkUsIGRtYV9kaXIpO1xuK1x0XHRsZW5ndGggLT0gTlZNRV9DVFJMX1BBR0VfU0laRTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZV9ycV9jbGVhbl9kbWFidWZfbWFwKHN0cnVjdCBudm1lX2RldiAqZGV2LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSlcbit7XG4rXHRzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcbitcbitcdG52bWVfZG1hYnVmX21hcF9zeW5jX2Zvcl9jcHUoZGV2LCByZXEpO1xuK1xuK1x0aWYgKCEoaW9kLVx1MDAzZWZsYWdzIFx1MDAyNiBJT0RfU0lOR0xFX1NFR01FTlQpKVxuK1x0XHRudm1lX2ZyZWVfZGVzY3JpcHRvcnMocmVxKTtcbit9XG4rXG4rc3RhdGljIGJsa19zdGF0dXNfdCBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAoc3RydWN0IHJlcXVlc3QgKnJlcSxcbitcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbnZtZV9xdWV1ZSAqbnZtZXEpXG4re1xuK1x0c3RydWN0IG52bWVfaW9kICppb2QgPSBibGtfbXFfcnFfdG9fcGR1KHJlcSk7XG4rXHRzdHJ1Y3QgYmlvICpiaW8gPSByZXEtXHUwMDNlYmlvO1xuK1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKGJpby1cdTAwM2ViaV9kbWFidWZfbWFwKTtcbitcdHVuc2lnbmVkIGJ2ZWNfZG9uZSA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbitcdHVuc2lnbmVkIG1hcF9pZHggPSBidmVjX2RvbmUgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuK1x0dW5zaWduZWQgb2Zmc2V0ID0gYnZlY19kb25lIFx1MDAyNiAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIDEpO1xuK1x0aW50IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSkgLSAoTlZNRV9DVFJMX1BBR0VfU0laRSAtIG9mZnNldCk7XG4rXHRkbWFfYWRkcl90ICpkbWFfbGlzdCA9IG1hcC1cdTAwM2VkbWFfbGlzdDtcbitcdHU2NCBwcnAxX2RtYSA9IGRtYV9saXN0W21hcF9pZHgrK10gKyBvZmZzZXQ7XG4rXHR1NjQgZG1hX2FkZHIsIHBycDJfZG1hO1xuK1x0ZG1hX2FkZHJfdCBwcnBfZG1hO1xuK1x0X19sZTY0ICpwcnBfbGlzdDtcbitcdHVuc2lnbmVkIGk7XG4rXG4rXHRudm1lX2RtYWJ1Zl9tYXBfc3luY19mb3JfZGV2aWNlKG52bWVxLVx1MDAzZWRldiwgcmVxKTtcbitcbitcdGlmIChsZW5ndGggXHUwMDNjPSAwKSB7XG4rXHRcdHBycDJfZG1hID0gMDtcbitcdFx0Z290byBkb25lO1xuK1x0fVxuK1xuK1x0aWYgKGxlbmd0aCBcdTAwM2M9IE5WTUVfQ1RSTF9QQUdFX1NJWkUpIHtcbitcdFx0cHJwMl9kbWEgPSBkbWFfbGlzdFttYXBfaWR4XTtcbitcdFx0Z290byBkb25lO1xuK1x0fVxuK1xuK1x0aWYgKERJVl9ST1VORF9VUChsZW5ndGgsIE5WTUVfQ1RSTF9QQUdFX1NJWkUpIFx1MDAzYz1cbitcdCAgICBOVk1FX1NNQUxMX1BPT0xfU0laRSAvIHNpemVvZihfX2xlNjQpKVxuK1x0XHRpb2QtXHUwMDNlZmxhZ3MgfD0gSU9EX1NNQUxMX0RFU0NSSVBUT1I7XG4rXG4rXHRwcnBfbGlzdCA9IGRtYV9wb29sX2FsbG9jKG52bWVfZG1hX3Bvb2wobnZtZXEsIGlvZCksIEdGUF9BVE9NSUMsXG4rXHRcdFx0XHUwMDI2cHJwX2RtYSk7XG4rXHRpZiAoIXBycF9saXN0KVxuK1x0XHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcbitcbitcdGlvZC1cdTAwM2VkZXNjcmlwdG9yc1tpb2QtXHUwMDNlbnJfZGVzY3JpcHRvcnMrK10gPSBwcnBfbGlzdDtcbitcdHBycDJfZG1hID0gcHJwX2RtYTtcbitcdGkgPSAwO1xuK1x0Zm9yICg7Oykge1xuK1x0XHRpZiAoaSA9PSBOVk1FX0NUUkxfUEFHRV9TSVpFIFx1MDAzZVx1MDAzZSAzKSB7XG4rXHRcdFx0X19sZTY0ICpvbGRfcHJwX2xpc3QgPSBwcnBfbGlzdDtcbitcbitcdFx0XHRwcnBfbGlzdCA9IGRtYV9wb29sX2FsbG9jKG52bWVxLVx1MDAzZWRlc2NyaXB0b3JfcG9vbHMubGFyZ2UsXG4rXHRcdFx0XHRcdEdGUF9BVE9NSUMsIFx1MDAyNnBycF9kbWEpO1xuK1x0XHRcdGlmICghcHJwX2xpc3QpXG4rXHRcdFx0XHRnb3RvIGZyZWVfcHJwcztcbitcdFx0XHRpb2QtXHUwMDNlZGVzY3JpcHRvcnNbaW9kLVx1MDAzZW5yX2Rlc2NyaXB0b3JzKytdID0gcHJwX2xpc3Q7XG4rXHRcdFx0cHJwX2xpc3RbMF0gPSBvbGRfcHJwX2xpc3RbaSAtIDFdO1xuK1x0XHRcdG9sZF9wcnBfbGlzdFtpIC0gMV0gPSBjcHVfdG9fbGU2NChwcnBfZG1hKTtcbitcdFx0XHRpID0gMTtcbitcdFx0fVxuK1xuK1x0XHRkbWFfYWRkciA9IGRtYV9saXN0W21hcF9pZHgrK107XG4rXHRcdHBycF9saXN0W2krK10gPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XG4rXG4rXHRcdGxlbmd0aCAtPSBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuK1x0XHRpZiAobGVuZ3RoIFx1MDAzYz0gMClcbitcdFx0XHRicmVhaztcbitcdH1cbitkb25lOlxuK1x0aW9kLVx1MDAzZWNtZC5jb21tb24uZHB0ci5wcnAxID0gY3B1X3RvX2xlNjQocHJwMV9kbWEpO1xuK1x0aW9kLVx1MDAzZWNtZC5jb21tb24uZHB0ci5wcnAyID0gY3B1X3RvX2xlNjQocHJwMl9kbWEpO1xuK1x0cmV0dXJuIEJMS19TVFNfT0s7XG4rZnJlZV9wcnBzOlxuK1x0bnZtZV9mcmVlX2Rlc2NyaXB0b3JzKHJlcSk7XG4rXHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcbit9XG4rXG4gc3RhdGljIHZvaWQgbnZtZV9mcmVlX3BycHMoc3RydWN0IHJlcXVlc3QgKnJlcSwgdW5zaWduZWQgaW50IGF0dHJzKVxuIHtcbiBcdHN0cnVjdCBudm1lX2lvZCAqaW9kID0gYmxrX21xX3JxX3RvX3BkdShyZXEpO1xuQEAgLTkzNyw2ICsxMDc4LDExIEBAIHN0YXRpYyB2b2lkIG52bWVfdW5tYXBfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcmVxKVxuIFx0c3RydWN0IGRldmljZSAqZG1hX2RldiA9IG52bWVxLVx1MDAzZWRldi1cdTAwM2VkZXY7XG4gXHR1bnNpZ25lZCBpbnQgYXR0cnMgPSAwO1xuIFxuK1x0aWYgKGJsa19tcV9ycV9pc19kbWFidWYocmVxKSkge1xuK1x0XHRudm1lX3JxX2NsZWFuX2RtYWJ1Zl9tYXAobnZtZXEtXHUwMDNlZGV2LCByZXEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpZiAoaW9kLVx1MDAzZWZsYWdzIFx1MDAyNiBJT0RfU0lOR0xFX1NFR01FTlQpIHtcbiBcdFx0c3RhdGljX2Fzc2VydChvZmZzZXRvZih1bmlvbiBudm1lX2RhdGFfcHRyLCBwcnAxKSA9PVxuIFx0XHRcdFx0b2Zmc2V0b2YodW5pb24gbnZtZV9kYXRhX3B0ciwgc2dsLmFkZHIpKTtcbkBAIC0xMTQxLDEyICsxMjg3LDE4IEBAIHN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9wY2lfc2V0dXBfZGF0YV9wcnAoc3RydWN0IHJlcXVlc3QgKnJlcSxcbiBcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X2RhdGFfYWRkcihzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuK1x0XHRcdFx0ICAgICAgIGRtYV9hZGRyX3QgYWRkciwgdTMyIGxlbilcbit7XG4rXHRzZ2UtXHUwMDNlYWRkciA9IGNwdV90b19sZTY0KGFkZHIpO1xuK1x0c2dlLVx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTMyKGxlbik7XG4rXHRzZ2UtXHUwMDNldHlwZSA9IE5WTUVfU0dMX0ZNVF9EQVRBX0RFU0MgXHUwMDNjXHUwMDNjIDQ7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG52bWVfcGNpX3NnbF9zZXRfZGF0YShzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuIFx0XHRzdHJ1Y3QgYmxrX2RtYV9pdGVyICppdGVyKVxuIHtcbi1cdHNnZS1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQoaXRlci1cdTAwM2VhZGRyKTtcbi1cdHNnZS1cdTAwM2VsZW5ndGggPSBjcHVfdG9fbGUzMihpdGVyLVx1MDAzZWxlbik7XG4tXHRzZ2UtXHUwMDNldHlwZSA9IE5WTUVfU0dMX0ZNVF9EQVRBX0RFU0MgXHUwMDNjXHUwMDNjIDQ7XG4rXHRudm1lX3BjaV9zZ2xfc2V0X2RhdGFfYWRkcihzZ2UsIGl0ZXItXHUwMDNlYWRkciwgaXRlci1cdTAwM2VsZW4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X3NlZyhzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxuQEAgLTExNTcsNiArMTMwOSwxNTggQEAgc3RhdGljIHZvaWQgbnZtZV9wY2lfc2dsX3NldF9zZWcoc3RydWN0IG52bWVfc2dsX2Rlc2MgKnNnZSxcbiBcdHNnZS1cdTAwM2V0eXBlID0gTlZNRV9TR0xfRk1UX0xBU1RfU0VHX0RFU0MgXHUwMDNjXHUwMDNjIDQ7XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuK1x0XHRcdFx0XHQgICAgICBkbWFfYWRkcl90ICpmaXJzdF9kbWEsXG4rXHRcdFx0XHRcdCAgICAgIHUzMiAqZmlyc3RfbGVuKVxuK3tcbitcdHN0cnVjdCBiaW8gKmJpbyA9IHJlcS1cdTAwM2ViaW87XG4rXHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbitcdHVuc2lnbmVkIGxvbmcgdG1wO1xuK1x0c2l6ZV90IG9mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbitcdHNpemVfdCByZW1haW5pbmcgPSBibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpO1xuK1x0ZG1hX2FkZHJfdCBsYXN0X2VuZCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgbmVudHMgPSAwO1xuK1x0ZG1hX2FkZHJfdCBkbWEgPSAwO1xuK1x0dTMyIGxlbiA9IDA7XG4rXHRib29sIGhhdmUgPSBmYWxzZTtcbitcbitcdGZvcl9lYWNoX3NndGFibGVfZG1hX3NnKG1hcC1cdTAwM2VzZ3QsIHNnLCB0bXApIHtcbitcdFx0c2l6ZV90IHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpO1xuK1x0XHRkbWFfYWRkcl90IGFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7XG4rXG4rXHRcdGlmICghcmVtYWluaW5nKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpZiAob2Zmc2V0IFx1MDAzZT0gc2dfbGVuKSB7XG4rXHRcdFx0b2Zmc2V0IC09IHNnX2xlbjtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRhZGRyICs9IG9mZnNldDtcbitcdFx0c2dfbGVuIC09IG9mZnNldDtcbitcdFx0b2Zmc2V0ID0gMDtcbitcbitcdFx0d2hpbGUgKHNnX2xlbiBcdTAwMjZcdTAwMjYgcmVtYWluaW5nKSB7XG4rXHRcdFx0dTMyIGNodW5rID0gbWluX3Qoc2l6ZV90LCByZW1haW5pbmcsIHNnX2xlbik7XG4rXG4rXHRcdFx0aWYgKCFoYXZlIHx8IGxhc3RfZW5kICE9IGFkZHIpIHtcbitcdFx0XHRcdG5lbnRzKys7XG4rXHRcdFx0XHRpZiAobmVudHMgPT0gMSkge1xuK1x0XHRcdFx0XHRkbWEgPSBhZGRyO1xuK1x0XHRcdFx0XHRsZW4gPSBjaHVuaztcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2UgaWYgKG5lbnRzID09IDEpIHtcbitcdFx0XHRcdGxlbiArPSBjaHVuaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0aGF2ZSA9IHRydWU7XG4rXHRcdFx0bGFzdF9lbmQgPSBhZGRyICsgY2h1bms7XG4rXHRcdFx0YWRkciArPSBjaHVuaztcbitcdFx0XHRzZ19sZW4gLT0gY2h1bms7XG4rXHRcdFx0cmVtYWluaW5nIC09IGNodW5rO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAodW5saWtlbHkocmVtYWluaW5nKSlcbitcdCAgICAgICByZXR1cm4gMDtcbitcbitcdCpmaXJzdF9kbWEgPSBkbWE7XG4rXHQqZmlyc3RfbGVuID0gbGVuO1xuK1x0cmV0dXJuIG5lbnRzO1xuK31cbitcbitzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSxcbitcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgZW50cmllcyxcbitcdFx0XHRcdFx0ICAgICBkbWFfYWRkcl90IGZpcnN0X2RtYSwgdTMyIGZpcnN0X2xlbilcbit7XG4rXHRzdHJ1Y3QgbnZtZV9pb2QgKmlvZCA9IGJsa19tcV9ycV90b19wZHUocmVxKTtcbitcdHN0cnVjdCBiaW8gKmJpbyA9IHJlcS1cdTAwM2ViaW87XG4rXHRzdHJ1Y3QgbnZtZV9kbWFidWZfbWFwICptYXAgPSB0b19udm1lX2RtYWJ1Zl9tYXAoYmlvLVx1MDAzZWJpX2RtYWJ1Zl9tYXApO1xuK1x0c2l6ZV90IGxlbmd0aCA9IGJsa19ycV9wYXlsb2FkX2J5dGVzKHJlcSk7XG4rXHRzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dfbGlzdCA9IE5VTEw7XG4rXHRkbWFfYWRkcl90IHNnbF9kbWEgPSAwLCBsYXN0X2VuZCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgbWFwcGVkID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgdG1wO1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbitcdHNpemVfdCBvZmZzZXQsIHJlbWFpbmluZztcbitcdGJvb2wgaGF2ZSA9IGZhbHNlO1xuK1xuK1x0aWYgKCFlbnRyaWVzKVxuK1x0XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbitcdGlmIChlbnRyaWVzIFx1MDAzZSBOVk1FX01BWF9TRUdTKVxuK1x0XHRyZXR1cm4gQkxLX1NUU19BR0FJTjtcbitcbitcdGlvZC1cdTAwM2VjbWQuY29tbW9uLmZsYWdzID0gTlZNRV9DTURfU0dMX01FVEFCVUY7XG4rXHRpb2QtXHUwMDNldG90YWxfbGVuID0gbGVuZ3RoO1xuK1xuK1x0bnZtZV9kbWFidWZfbWFwX3N5bmNfZm9yX2RldmljZShudm1lcS1cdTAwM2VkZXYsIHJlcSk7XG4rXG4rXHRpZiAoZW50cmllcyA9PSAxKSB7XG4rXHRcdG52bWVfcGNpX3NnbF9zZXRfZGF0YV9hZGRyKFx1MDAyNmlvZC1cdTAwM2VjbWQuY29tbW9uLmRwdHIuc2dsLCBmaXJzdF9kbWEsXG4rXHRcdFx0XHRcdCAgIGZpcnN0X2xlbik7XG4rXHRcdHJldHVybiBCTEtfU1RTX09LO1xuK1x0fVxuK1xuK1x0aWYgKGVudHJpZXMgXHUwMDNjPSBOVk1FX1NNQUxMX1BPT0xfU0laRSAvIHNpemVvZigqc2dfbGlzdCkpXG4rXHRcdGlvZC1cdTAwM2VmbGFncyB8PSBJT0RfU01BTExfREVTQ1JJUFRPUjtcbitcbitcdHNnX2xpc3QgPSBkbWFfcG9vbF9hbGxvYyhudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBHRlBfQVRPTUlDLFxuK1x0XHRcdFx0IFx1MDAyNnNnbF9kbWEpO1xuK1x0aWYgKCFzZ19saXN0KVxuK1x0XHRyZXR1cm4gQkxLX1NUU19SRVNPVVJDRTtcbitcdGlvZC1cdTAwM2VkZXNjcmlwdG9yc1tpb2QtXHUwMDNlbnJfZGVzY3JpcHRvcnMrK10gPSBzZ19saXN0O1xuK1xuK1x0b2Zmc2V0ID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfb2Zmc2V0O1xuK1x0cmVtYWluaW5nID0gbGVuZ3RoO1xuK1xuK1x0Zm9yX2VhY2hfc2d0YWJsZV9kbWFfc2cobWFwLVx1MDAzZXNndCwgc2csIHRtcCkge1xuK1x0XHRzaXplX3Qgc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7XG4rXHRcdGRtYV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTtcbitcbitcdFx0aWYgKCFyZW1haW5pbmcpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGlmIChvZmZzZXQgXHUwMDNlPSBzZ19sZW4pIHtcbitcdFx0XHRvZmZzZXQgLT0gc2dfbGVuO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGFkZHIgKz0gb2Zmc2V0O1xuK1x0XHRzZ19sZW4gLT0gb2Zmc2V0O1xuK1x0XHRvZmZzZXQgPSAwO1xuK1xuK1x0XHR3aGlsZSAoc2dfbGVuIFx1MDAyNlx1MDAyNiByZW1haW5pbmcpIHtcbitcdFx0XHR1MzIgY2h1bmsgPSBtaW5fdChzaXplX3QsIHJlbWFpbmluZywgc2dfbGVuKTtcbitcbitcdFx0XHRpZiAoaGF2ZSBcdTAwMjZcdTAwMjYgbGFzdF9lbmQgPT0gYWRkcikge1xuK1x0XHRcdFx0dTMyIG9sZCA9IGxlMzJfdG9fY3B1KHNnX2xpc3RbbWFwcGVkIC0gMV0ubGVuZ3RoKTtcbitcbitcdFx0XHRcdHNnX2xpc3RbbWFwcGVkIC0gMV0ubGVuZ3RoID0gY3B1X3RvX2xlMzIob2xkICsgY2h1bmspO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKG1hcHBlZCA9PSBlbnRyaWVzKSlcbitcdFx0XHRcdFx0Z290byBlcnJfZnJlZTtcbitcdFx0XHRcdG52bWVfcGNpX3NnbF9zZXRfZGF0YV9hZGRyKFx1MDAyNnNnX2xpc3RbbWFwcGVkKytdLFxuK1x0XHRcdFx0XHRcdFx0ICAgYWRkciwgY2h1bmspO1xuK1x0XHRcdH1cbitcdFx0XHRoYXZlID0gdHJ1ZTtcbitcdFx0XHRsYXN0X2VuZCA9IGFkZHIgKyBjaHVuaztcbitcdFx0XHRhZGRyICs9IGNodW5rO1xuK1x0XHRcdHNnX2xlbiAtPSBjaHVuaztcbitcdFx0XHRyZW1haW5pbmcgLT0gY2h1bms7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmICh1bmxpa2VseShyZW1haW5pbmcpKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1xuK1x0bnZtZV9wY2lfc2dsX3NldF9zZWcoXHUwMDI2aW9kLVx1MDAzZWNtZC5jb21tb24uZHB0ci5zZ2wsIHNnbF9kbWEsIG1hcHBlZCk7XG4rXHRyZXR1cm4gQkxLX1NUU19PSztcbitlcnJfZnJlZTpcbitcdGlvZC1cdTAwM2Vucl9kZXNjcmlwdG9ycy0tO1xuK1x0ZG1hX3Bvb2xfZnJlZShudm1lX2RtYV9wb29sKG52bWVxLCBpb2QpLCBzZ19saXN0LCBzZ2xfZG1hKTtcbitcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xuK31cbitcbiBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfcGNpX3NldHVwX2RhdGFfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsXG4gXHRcdHN0cnVjdCBibGtfZG1hX2l0ZXIgKml0ZXIpXG4ge1xuQEAgLTEyNTEsNiArMTU1NSwzNCBAQCBzdGF0aWMgYmxrX3N0YXR1c190IG52bWVfbWFwX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJlcSlcbiBcdHN0cnVjdCBibGtfZG1hX2l0ZXIgaXRlcjtcbiBcdGJsa19zdGF0dXNfdCByZXQ7XG4gXG4rXHRpZiAoYmxrX21xX3JxX2lzX2RtYWJ1ZihyZXEpKSB7XG4rXHRcdGlmICh1c2Vfc2dsICE9IFNHTF9VTlNVUFBPUlRFRCkge1xuK1x0XHRcdGRtYV9hZGRyX3QgZmlyc3RfZG1hO1xuK1x0XHRcdHUzMiBmaXJzdF9sZW47XG4rXHRcdFx0dW5zaWduZWQgaW50IGVudHJpZXM7XG4rXG4rXHRcdFx0ZW50cmllcyA9IG52bWVfcGNpX2RtYWJ1Zl9zZ2xfbmVudHMocmVxLCBcdTAwMjZmaXJzdF9kbWEsXG4rXHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Zmlyc3RfbGVuKTtcbitcbitcdFx0XHRpZiAodXNlX3NnbCA9PSBTR0xfRk9SQ0VEKSB7XG4rXHRcdFx0XHRyZXQgPSBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2wocmVxLCBudm1lcSxcbitcdFx0XHRcdFx0XHRcdFx0ZW50cmllcywgZmlyc3RfZG1hLCBmaXJzdF9sZW4pO1xuK1x0XHRcdFx0cmV0dXJuIHJldCA9PSBCTEtfU1RTX0FHQUlOID8gQkxLX1NUU19JT0VSUiA6IHJldDtcbitcdFx0XHR9XG4rXG4rXHRcdFx0aWYgKHNnbF90aHJlc2hvbGQgXHUwMDI2XHUwMDI2IGVudHJpZXMgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIERJVl9ST1VORF9VUChibGtfcnFfcGF5bG9hZF9ieXRlcyhyZXEpLCBlbnRyaWVzKSBcdTAwM2U9XG4rXHRcdFx0ICAgIHNnbF90aHJlc2hvbGQpIHtcbitcdFx0XHRcdHJldCA9IG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChyZXEsIG52bWVxLFxuK1x0XHRcdFx0XHRcdFx0XHRlbnRyaWVzLCBmaXJzdF9kbWEsIGZpcnN0X2xlbik7XG4rXHRcdFx0XHRpZiAocmV0ICE9IEJMS19TVFNfQUdBSU4pXG4rXHRcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAocmVxLCBudm1lcSk7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogVHJ5IHRvIHNraXAgdGhlIERNQSBpdGVyYXRvciBmb3Igc2luZ2xlIHNlZ21lbnQgcmVxdWVzdHMsIGFzIHRoYXRcbiBcdCAqIHNpZ25pZmljYW50bHkgaW1wcm92ZXMgcGVyZm9ybWFuY2VzIGZvciBzbWFsbCBJL08gc2l6ZXMuXG5AQCAtMjI2OSw2ICsyNjAxLDExMiBAQCBzdGF0aWMgaW50IG52bWVfY3JlYXRlX3F1ZXVlKHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSwgaW50IHFpZCwgYm9vbCBwb2xsZWQpXG4gXHRyZXR1cm4gcmVzdWx0O1xuIH1cbiBcbisjaWYgZGVmaW5lZChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpXG4rc3RhdGljIHZvaWQgbnZtZV9kbWFidWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4re1xuK1x0c3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHggPSBhdHRhY2gtXHUwMDNlaW1wb3J0ZXJfcHJpdjtcbitcbitcdGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhjdHgpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG52bWVfZG1hYnVmX2ltcG9ydGVyX29wcyA9IHtcbitcdC5pbnZhbGlkYXRlX21hcHBpbmdzXHQ9IG52bWVfZG1hYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MsXG4rXHQuYWxsb3dfcGVlcjJwZWVyXHQ9IHRydWUsXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGRtYV9idWZfaW9fbWFwICpudm1lX2RtYV9idWZfaW9fbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuK3tcbitcdHVuc2lnbmVkIG5yX2VudHJpZXMgPSBjdHgtXHUwMDNlZG1hYnVmLVx1MDAzZXNpemUgLyBOVk1FX0NUUkxfUEFHRV9TSVpFO1xuK1x0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVx1MDAzZWRldl9wcml2O1xuK1x0dW5zaWduZWQgbG9uZyB0bXAsIGkgPSAwO1xuK1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwO1xuK1x0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbitcdHN0cnVjdCBzZ190YWJsZSAqc2d0O1xuK1x0aW50IHJldDtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRtYXAgPSBrbWFsbG9jX2ZsZXgoKm1hcCwgZG1hX2xpc3QsIG5yX2VudHJpZXMpO1xuK1x0aWYgKCFtYXApXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1xuK1x0c2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2gsIGN0eC1cdTAwM2VkaXIpO1xuK1x0aWYgKElTX0VSUihzZ3QpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIoc2d0KTtcbitcdFx0c2d0ID0gTlVMTDtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRmb3JfZWFjaF9zZ3RhYmxlX2RtYV9zZyhzZ3QsIHNnLCB0bXApIHtcbitcdFx0ZG1hX2FkZHJfdCBkbWFfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTtcbitcdFx0dW5zaWduZWQgbG9uZyBzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTtcbitcbitcdFx0aWYgKHNnX2xlbiAlIE5WTUVfQ1RSTF9QQUdFX1NJWkUpIHtcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdHdoaWxlIChzZ19sZW4pIHtcbitcdFx0XHRtYXAtXHUwMDNlZG1hX2xpc3RbaSsrXSA9IGRtYV9hZGRyO1xuK1x0XHRcdGRtYV9hZGRyICs9IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4rXHRcdFx0c2dfbGVuIC09IE5WTUVfQ1RSTF9QQUdFX1NJWkU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldCA9IGRtYV9idWZfaW9faW5pdF9tYXAoY3R4LCBcdTAwMjZtYXAtXHUwMDNlYmFzZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycjtcbitcdG1hcC1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcbitcdG1hcC1cdTAwM2VzZ3QgPSBzZ3Q7XG4rXHRyZXR1cm4gXHUwMDI2bWFwLVx1MDAzZWJhc2U7XG4rZXJyOlxuK1x0aWYgKHNndClcbitcdFx0ZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGF0dGFjaCwgc2d0LCBjdHgtXHUwMDNlZGlyKTtcbitcdGtmcmVlKG1hcCk7XG4rXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBudm1lX2RtYV9idWZfaW9fdW5tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsXG4rXHRcdFx0XHQgIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwX2Jhc2UpXG4re1xuK1x0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVx1MDAzZWRldl9wcml2O1xuK1x0c3RydWN0IG52bWVfZG1hYnVmX21hcCAqbWFwID0gdG9fbnZtZV9kbWFidWZfbWFwKG1hcF9iYXNlKTtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGN0eC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBtYXAtXHUwMDNlc2d0LCBjdHgtXHUwMDNlZGlyKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZV9kbWFfYnVmX2lvX3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXG4re1xuK1x0c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoID0gY3R4LVx1MDAzZWRldl9wcml2O1xuK1xuK1x0ZG1hX2J1Zl9kZXRhY2goY3R4LVx1MDAzZWRtYWJ1ZiwgYXR0YWNoKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGRtYV9idWZfaW9fb3BzIG52bWVfZG1hX2J1Zl9pb19vcHMgPSB7XG4rXHQubWFwXHRcdD0gbnZtZV9kbWFfYnVmX2lvX21hcCxcbitcdC51bm1hcFx0XHQ9IG52bWVfZG1hX2J1Zl9pb191bm1hcCxcbitcdC5yZWxlYXNlXHQ9IG52bWVfZG1hX2J1Zl9pb19yZWxlYXNlLFxuK307XG4rXG4rc3RhdGljIGludCBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwsXG4rXHRcdFx0XHRcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDtcbitcdHN0cnVjdCBudm1lX2RldiAqZGV2ID0gdG9fbnZtZV9kZXYoY3RybCk7XG4rXG4rXHRhdHRhY2ggPSBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGN0eC1cdTAwM2VkbWFidWYsIGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx1MDAyNm52bWVfZG1hYnVmX2ltcG9ydGVyX29wcywgY3R4KTtcbitcdGlmIChJU19FUlIoYXR0YWNoKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoYXR0YWNoKTtcbitcbitcdGN0eC1cdTAwM2VkZXZfcHJpdiA9IGF0dGFjaDtcbitcdGN0eC1cdTAwM2VkZXZfb3BzID0gXHUwMDI2bnZtZV9kbWFfYnVmX2lvX29wcztcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgbnZtZV9tcV9hZG1pbl9vcHMgPSB7XG4gXHQucXVldWVfcnFcdD0gbnZtZV9xdWV1ZV9ycSxcbiBcdC5jb21wbGV0ZVx0PSBudm1lX3BjaV9jb21wbGV0ZV9ycSxcbkBAIC0zNTYzLDYgKzQwMDEsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG52bWVfY3RybF9vcHMgbnZtZV9wY2lfY3RybF9vcHMgPSB7XG4gXHQucHJpbnRfZGV2aWNlX2luZm9cdD0gbnZtZV9wY2lfcHJpbnRfZGV2aWNlX2luZm8sXG4gXHQuc3VwcG9ydHNfcGNpX3AycGRtYVx0PSBudm1lX3BjaV9zdXBwb3J0c19wY2lfcDJwZG1hLFxuIFx0LmdldF92aXJ0X2JvdW5kYXJ5XHQ9IG52bWVfcGNpX2dldF92aXJ0X2JvdW5kYXJ5LFxuKyNpZiBkZWZpbmVkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUilcbitcdC5pbml0X2RtYV9idWZfaW9fY3R4XHQ9IG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHgsXG4rI2VuZGlmXG4gfTtcbiBcbiBzdGF0aWMgaW50IG52bWVfZGV2X21hcChzdHJ1Y3QgbnZtZV9kZXYgKmRldilcbkBAIC00MzI3LDUgKzQ3NjgsNiBAQCBNT0RVTEVfQVVUSE9SKFwiTWF0dGhldyBXaWxjb3ggXHUwMDNjd2lsbHlAbGludXguaW50ZWwuY29tXHUwMDNlXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuIE1PRFVMRV9WRVJTSU9OKFwiMS4wXCIpO1xuIE1PRFVMRV9ERVNDUklQVElPTihcIk5WTWUgaG9zdCBQQ0llIHRyYW5zcG9ydCBkcml2ZXJcIik7XG4rTU9EVUxFX0lNUE9SVF9OUyhcIkRNQV9CVUZcIik7XG4gbW9kdWxlX2luaXQobnZtZV9pbml0KTtcbiBtb2R1bGVfZXhpdChudm1lX2V4aXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L3RjcC5jIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbmluZGV4IGJhNWM3YjNlMmE3YzYuLmNlMDNhMGVhNGRlZDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvaG9zdC90Y3AuY1xuKysrIGIvZHJpdmVycy9udm1lL2hvc3QvdGNwLmNcbkBAIC0zNTcsNyArMzU3LDcgQEAgc3RhdGljIHZvaWQgbnZtZV90Y3BfaW5pdF9pdGVyKHN0cnVjdCBudm1lX3RjcF9yZXF1ZXN0ICpyZXEsXG4gXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2cmVxLVx1MDAzZWl0ZXIsIGRpcixcbiBcdFx0XHRfX2J2ZWNfaXRlcl9idmVjKGJpby1cdTAwM2ViaV9pb192ZWMsIGJpby1cdTAwM2ViaV9pdGVyKSwgbnJfYnZlYyxcbiBcdFx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplKTtcbi1cdFx0cmVxLVx1MDAzZWl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX2J2ZWNfZG9uZTtcbitcdFx0cmVxLVx1MDAzZWl0ZXIuaW92X29mZnNldCA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX29mZnNldDtcbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvbWlzYy5oIGIvZnMvYnRyZnMvbWlzYy5oXG5pbmRleCA2OTRiZTZkMDU2MmE0Li44MDIwNjA5NDMxODAxIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvbWlzYy5oXG4rKysgYi9mcy9idHJmcy9taXNjLmhcbkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJ2ZWNfaXRlciBpbml0X2J2ZWNfaXRlcl9mb3JfYmlvKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0LmJpX3NlY3RvciA9IDAsXG4gXHRcdC5iaV9zaXplID0gYmlvX3NpemUsXG4gXHRcdC5iaV9pZHggPSAwLFxuLVx0XHQuYmlfYnZlY19kb25lID0gMCxcbitcdFx0LmJpX29mZnNldCA9IDAsXG4gXHR9O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaFxuaW5kZXggOGYzM2Y3MTdiMTRmNS4uYzA1M2U5NDQ0NTE0NyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmhcbkBAIC04MCw3ICs4MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fbm9fYWR2YW5jZV9pdGVyKGNvbnN0IHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRyZXR1cm4gYmlvX29wKGJpbykgPT0gUkVRX09QX0RJU0NBUkQgfHxcbiBcdCAgICAgICBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfU0VDVVJFX0VSQVNFIHx8XG4tXHQgICAgICAgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFX1pFUk9FUztcbitcdCAgICAgICBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEVfWkVST0VTIHx8XG4rXHQgICAgICAgb3BfaXNfZG1hYnVmKGJpby1cdTAwM2ViaV9vcGYpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgKmJpb19kYXRhKHN0cnVjdCBiaW8gKmJpbylcbkBAIC0xMTMsMTEgKzExNCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2FkdmFuY2VfaXRlcihjb25zdCBzdHJ1Y3QgYmlvICpiaW8sXG4ge1xuIFx0aXRlci1cdTAwM2ViaV9zZWN0b3IgKz0gYnl0ZXMgXHUwMDNlXHUwMDNlIDk7XG4gXG4tXHRpZiAoYmlvX25vX2FkdmFuY2VfaXRlcihiaW8pKVxuK1x0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSkge1xuIFx0XHRpdGVyLVx1MDAzZWJpX3NpemUgLT0gYnl0ZXM7XG4tXHRlbHNlXG4rXHRcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ICs9IGJ5dGVzO1xuK1x0fSBlbHNlIHtcbiBcdFx0YnZlY19pdGVyX2FkdmFuY2UoYmlvLVx1MDAzZWJpX2lvX3ZlYywgaXRlciwgYnl0ZXMpO1xuIFx0XHQvKiBUT0RPOiBJdCBpcyByZWFzb25hYmxlIHRvIGNvbXBsZXRlIGJpbyB3aXRoIGVycm9yIGhlcmUuICovXG4rXHR9XG4gfVxuIFxuIC8qIEBieXRlcyBzaG91bGQgYmUgbGVzcyBvciBlcXVhbCB0byBidmVjW2ktXHUwMDNlYmlfaWR4XS5idl9sZW4gKi9cbkBAIC0xMjcsMTAgKzEzMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2FkdmFuY2VfaXRlcl9zaW5nbGUoY29uc3Qgc3RydWN0IGJpbyAqYmlvLFxuIHtcbiBcdGl0ZXItXHUwMDNlYmlfc2VjdG9yICs9IGJ5dGVzIFx1MDAzZVx1MDAzZSA5O1xuIFxuLVx0aWYgKGJpb19ub19hZHZhbmNlX2l0ZXIoYmlvKSlcbitcdGlmIChiaW9fbm9fYWR2YW5jZV9pdGVyKGJpbykpIHtcbiBcdFx0aXRlci1cdTAwM2ViaV9zaXplIC09IGJ5dGVzO1xuLVx0ZWxzZVxuK1x0XHRpdGVyLVx1MDAzZWJpX29mZnNldCArPSBieXRlcztcbitcdH0gZWxzZSB7XG4gXHRcdGJ2ZWNfaXRlcl9hZHZhbmNlX3NpbmdsZShiaW8tXHUwMDNlYmlfaW9fdmVjLCBpdGVyLCBieXRlcyk7XG4rXHR9XG4gfVxuIFxuIHZvaWQgX19iaW9fYWR2YW5jZShzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGJ5dGVzKTtcbkBAIC0zOTUsMTIgKzQwMCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX3dvdWxkYmxvY2tfZXJyb3Ioc3RydWN0IGJpbyAqYmlvKVxuIFxuIC8qXG4gICogQ2FsY3VsYXRlIG51bWJlciBvZiBidmVjIHNlZ21lbnRzIHRoYXQgc2hvdWxkIGJlIGFsbG9jYXRlZCB0byBmaXQgZGF0YVxuLSAqIHBvaW50ZWQgYnkgQGl0ZXIuIElmIEBpdGVyIGlzIGJhY2tlZCBieSBidmVjIGl0J3MgZ29pbmcgdG8gYmUgcmV1c2VkXG4tICogaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGEgbmV3IG9uZS5cbisgKiBwb2ludGVkIGJ5IEBpdGVyLiBJZiBAaXRlciBpcyBiYWNrZWQgYnkgYSBidmVjIG9yIGEgZG1hYnVmLCB0aGUgYnZlYyBhcnJheSAvXG4rICogdGhlIGRtYSBtYXAgYXJlIGdvaW5nIHRvIGJlIHJldXNlZCwgYW5kIHNvIG5vIGV4dHJhIGFsbG9jYXRpb24gaXMgcmVxdWlyZWQuXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgYmlvX2lvdl92ZWNzX3RvX2FsbG9jKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgaW50IG1heF9zZWdzKVxuIHtcbi1cdGlmIChpb3ZfaXRlcl9pc19idmVjKGl0ZXIpKVxuK1x0aWYgKGlvdl9pdGVyX2lzX2J2ZWMoaXRlcikgfHwgaW92X2l0ZXJfaXNfZG1hYnVmX21hcChpdGVyKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gaW92X2l0ZXJfbnBhZ2VzKGl0ZXIsIG1heF9zZWdzKTtcbiB9XG5AQCAtNDgwLDYgKzQ4NSw3IEBAIGludCBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHR1bnNpZ25lZCBsZW5fYWxpZ25fbWFzayk7XG4gXG4gdm9pZCBiaW9faW92X2J2ZWNfc2V0KHN0cnVjdCBiaW8gKmJpbywgY29uc3Qgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbit2b2lkIGJpb19kbWFidWZfbWFwX3NldChzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4gdm9pZCBfX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBtYXJrX2RpcnR5KTtcbiBleHRlcm4gdm9pZCBiaW9fc2V0X3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7XG4gZXh0ZXJuIHZvaWQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KHN0cnVjdCBiaW8gKmJpbyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGstbXEuaCBiL2luY2x1ZGUvbGludXgvYmxrLW1xLmhcbmluZGV4IGFmODc4NTk3YWZiOGMuLjdjNzUwNGM4NGUwOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsay1tcS5oXG5AQCAtMTAxNyw2ICsxMDE3LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqYmxrX21xX3JxX3RvX3BkdShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4gXHRyZXR1cm4gcnEgKyAxO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgYmxrX21xX3JxX2lzX2RtYWJ1ZihzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBycS1cdTAwM2ViaW8gXHUwMDI2XHUwMDI2IG9wX2lzX2RtYWJ1ZihycS1cdTAwM2ViaW8tXHUwMDNlYmlfb3BmKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqcXVldWVfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IGlkKVxuIHtcbiBcdHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXG5pbmRleCA4ODA4ZWU3NmU3M2MwLi5kNjA1ZTMxNzEyZDQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuQEAgLTIzMyw3ICsyMzMsMTIgQEAgc3RydWN0IGJpbyB7XG4gXHRhdG9taWNfdFx0XHRfX2JpX3JlbWFpbmluZztcbiBcbiBcdC8qIFRoZSBhY3R1YWwgdmVjIGxpc3QsIHByZXNlcnZlZCBieSBiaW9fcmVzZXQoKSAqL1xuLVx0c3RydWN0IGJpb192ZWNcdFx0KmJpX2lvX3ZlYztcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IGJpb192ZWNcdFx0KmJpX2lvX3ZlYztcbitcdFx0LyogRHJpdmVyIHNwZWNpZmljIGRtYSBtYXAsIHZhbGlkIElGRiBSRVFfRE1BQlVGIGlzIHNldCAqL1xuK1x0XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXBcdCpiaV9kbWFidWZfbWFwO1xuK1x0fTtcbitcbiBcdHN0cnVjdCBidmVjX2l0ZXJcdGJpX2l0ZXI7XG4gXG4gXHR1bmlvbiB7XG5AQCAtNDAxLDYgKzQwNiw3IEBAIGVudW0gcmVxX2ZsYWdfYml0cyB7XG4gXHRfX1JFUV9EUlYsXHRcdC8qIGZvciBkcml2ZXIgdXNlICovXG4gXHRfX1JFUV9GU19QUklWQVRFLFx0LyogZm9yIGZpbGUgc3lzdGVtIChzdWJtaXR0ZXIpIHVzZSAqL1xuIFx0X19SRVFfQVRPTUlDLFx0XHQvKiBmb3IgYXRvbWljIHdyaXRlIG9wZXJhdGlvbnMgKi9cbitcdF9fUkVRX0RNQUJVRixcdFx0LyogVXNpbmcgcHJlbW1hcGVkIGRtYSBidWZmZXJzICovXG4gXHQvKlxuIFx0ICogQ29tbWFuZCBzcGVjaWZpYyBmbGFncywga2VlcCBsYXN0OlxuIFx0ICovXG5AQCAtNDMzLDYgKzQzOSw3IEBAIGVudW0gcmVxX2ZsYWdfYml0cyB7XG4gI2RlZmluZSBSRVFfRFJWXHRcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcdTAwM2NcdTAwM2MgX19SRVFfRFJWKVxuICNkZWZpbmUgUkVRX0ZTX1BSSVZBVEVcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcdTAwM2NcdTAwM2MgX19SRVFfRlNfUFJJVkFURSlcbiAjZGVmaW5lIFJFUV9BVE9NSUNcdChfX2ZvcmNlIGJsa19vcGZfdCkoMVVMTCBcdTAwM2NcdTAwM2MgX19SRVFfQVRPTUlDKVxuKyNkZWZpbmUgUkVRX0RNQUJVRlx0KF9fZm9yY2UgYmxrX29wZl90KSgxVUxMIFx1MDAzY1x1MDAzYyBfX1JFUV9ETUFCVUYpXG4gXG4gI2RlZmluZSBSRVFfTk9VTk1BUFx0KF9fZm9yY2UgYmxrX29wZl90KSgxVUxMIFx1MDAzY1x1MDAzYyBfX1JFUV9OT1VOTUFQKVxuIFxuQEAgLTQ4Niw2ICs0OTMsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG9wX2lzX2Rpc2NhcmQoYmxrX29wZl90IG9wKVxuIFx0cmV0dXJuIChvcCBcdTAwMjYgUkVRX09QX01BU0spID09IFJFUV9PUF9ESVNDQVJEO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgb3BfaXNfZG1hYnVmKGJsa19vcGZfdCBvcClcbit7XG4rXHRyZXR1cm4gb3AgXHUwMDI2IFJFUV9ETUFCVUY7XG4rfVxuK1xuIC8qXG4gICogQ2hlY2sgaWYgYSBiaW8gb3IgcmVxdWVzdCBvcGVyYXRpb24gaXMgYSB6b25lIG1hbmFnZW1lbnQgb3BlcmF0aW9uLlxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5pbmRleCA5MjEzYTU3MTZmOTVhLi45ZjRjOTJlNTFkYzk1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuQEAgLTE2ODIsNiArMTY4Miw4IEBAIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7XG4gXHQvKiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGlkZW50aWZpZXIgb3IgYSBuZWdhdGl2ZSBlcnJubzogKi9cbiBcdGludCAoKmdldF91bmlxdWVfaWQpKHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBpZFsxNl0sXG4gXHRcdFx0ZW51bSBibGtfdW5pcXVlX2lkIGlkX3R5cGUpO1xuK1x0aW50ICgqaW5pdF9kbWFfYnVmX2lvX2N0eCkoc3RydWN0IGJsb2NrX2RldmljZSAqLFxuK1x0XHRcdFx0ICAgc3RydWN0IGRtYV9idWZfaW9fY3R4ICopO1xuIFx0c3RydWN0IG1vZHVsZSAqb3duZXI7XG4gXHRjb25zdCBzdHJ1Y3QgcHJfb3BzICpwcl9vcHM7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idmVjLmggYi9pbmNsdWRlL2xpbnV4L2J2ZWMuaFxuaW5kZXggOTI4MzdlMjc0M2YxOS4uYjYzOTE0ZmY1NmUzMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnZlYy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J2ZWMuaFxuQEAgLTEwOCw5ICsxMDgsMTAgQEAgc3RydWN0IGJ2ZWNfaXRlciB7XG4gXHR1bnNpZ25lZCBpbnRcdFx0YmlfaWR4O1xuIFxuIFx0Lypcbi1cdCAqIEN1cnJlbnQgb2Zmc2V0IGluIHRoZSBidmVjIGVudHJ5IHBvaW50ZWQgdG8gYnkgYGJpX2lkeGAuXG4rXHQgKiBDdXJyZW50IG9mZnNldCBpbiB0aGUgYnZlYyBlbnRyeSBwb2ludGVkIHRvIGJ5IGBiaV9pZHhgIG9yIGludG9cbitcdCAqIGEgZG1hLWJ1ZiBtYXAuXG4gXHQgKi9cbi1cdHVuc2lnbmVkIGludFx0XHRiaV9idmVjX2RvbmU7XG4rXHR1bnNpZ25lZCBpbnRcdFx0Ymlfb2Zmc2V0O1xuIH0gX19wYWNrZWQgX19hbGlnbmVkKDQpO1xuIFxuIHN0cnVjdCBidmVjX2l0ZXJfYWxsIHtcbkBAIC0xMzUsMTQgKzEzNiwxNCBAQCBtcF9idmVjX2l0ZXJfcGFnZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnZlY3MsIGNvbnN0IHN0cnVjdCBidmVjX2l0ZXIgaXRlcilcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludFxuIG1wX2J2ZWNfaXRlcl9sZW4oY29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWNzLCBjb25zdCBzdHJ1Y3QgYnZlY19pdGVyIGl0ZXIpXG4ge1xuLVx0cmV0dXJuIG1pbihfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS1cdTAwM2Vidl9sZW4gLSBpdGVyLmJpX2J2ZWNfZG9uZSxcbitcdHJldHVybiBtaW4oX19idmVjX2l0ZXJfYnZlYyhidmVjcywgaXRlciktXHUwMDNlYnZfbGVuIC0gaXRlci5iaV9vZmZzZXQsXG4gXHRcdFx0aXRlci5iaV9zaXplKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnRcbiBtcF9idmVjX2l0ZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidmVjcywgY29uc3Qgc3RydWN0IGJ2ZWNfaXRlciBpdGVyKVxuIHtcbi1cdHJldHVybiBfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS1cdTAwM2Vidl9vZmZzZXQgKyBpdGVyLmJpX2J2ZWNfZG9uZTtcbitcdHJldHVybiBfX2J2ZWNfaXRlcl9idmVjKGJ2ZWNzLCBpdGVyKS1cdTAwM2Vidl9vZmZzZXQgKyBpdGVyLmJpX29mZnNldDtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnRcbkBAIC0yMDQsNyArMjA1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGJ2ZWNfaXRlcl9hZHZhbmNlKGNvbnN0IHN0cnVjdCBiaW9fdmVjICpidixcbiBcdH1cbiBcbiBcdGl0ZXItXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcbi1cdGJ5dGVzICs9IGl0ZXItXHUwMDNlYmlfYnZlY19kb25lO1xuK1x0Ynl0ZXMgKz0gaXRlci1cdTAwM2ViaV9vZmZzZXQ7XG4gXG4gXHR3aGlsZSAoYnl0ZXMgXHUwMDI2XHUwMDI2IGJ5dGVzIFx1MDAzZT0gYnZbaWR4XS5idl9sZW4pIHtcbiBcdFx0Ynl0ZXMgLT0gYnZbaWR4XS5idl9sZW47XG5AQCAtMjEyLDcgKzIxMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidmVjX2l0ZXJfYWR2YW5jZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHR9XG4gXG4gXHRpdGVyLVx1MDAzZWJpX2lkeCA9IGlkeDtcbi1cdGl0ZXItXHUwMDNlYmlfYnZlY19kb25lID0gYnl0ZXM7XG4rXHRpdGVyLVx1MDAzZWJpX29mZnNldCA9IGJ5dGVzO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTIyMywxMyArMjI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBidmVjX2l0ZXJfYWR2YW5jZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gc3RhdGljIGlubGluZSB2b2lkIGJ2ZWNfaXRlcl9hZHZhbmNlX3NpbmdsZShjb25zdCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsXG4gXHRcdFx0XHRzdHJ1Y3QgYnZlY19pdGVyICppdGVyLCB1bnNpZ25lZCBpbnQgYnl0ZXMpXG4ge1xuLVx0dW5zaWduZWQgaW50IGRvbmUgPSBpdGVyLVx1MDAzZWJpX2J2ZWNfZG9uZSArIGJ5dGVzO1xuK1x0dW5zaWduZWQgaW50IGRvbmUgPSBpdGVyLVx1MDAzZWJpX29mZnNldCArIGJ5dGVzO1xuIFxuIFx0aWYgKGRvbmUgPT0gYnZbaXRlci1cdTAwM2ViaV9pZHhdLmJ2X2xlbikge1xuIFx0XHRkb25lID0gMDtcbiBcdFx0aXRlci1cdTAwM2ViaV9pZHgrKztcbiBcdH1cbi1cdGl0ZXItXHUwMDNlYmlfYnZlY19kb25lID0gZG9uZTtcbitcdGl0ZXItXHUwMDNlYmlfb2Zmc2V0ID0gZG9uZTtcbiBcdGl0ZXItXHUwMDNlYmlfc2l6ZSAtPSBieXRlcztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJjZmZjNjIwMjU1NmVcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oXG5AQCAtMCwwICsxLDkxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisjaWZuZGVmIF9fRE1BX0JVRl9JT19IX19cbisjZGVmaW5lIF9fRE1BX0JVRl9JT19IX19cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLmhcdTAwM2VcbitcbitzdHJ1Y3QgZG1hX2J1Zl9pb19mZW5jZTtcbitzdHJ1Y3QgZG1hX2J1Zl9pb19jdHg7XG4rc3RydWN0IGRtYV9idWZfaW9fbWFwO1xuK1xuK3N0cnVjdCBkbWFfYnVmX2lvX29wcyB7XG4rXHQvKlxuK1x0ICogQ3JlYXRlIGEgbmV3IG1hcCBmb3IgdGhlIGdpdmVuIGN0eC4gQ2FsbGVkIHdpdGggdGhlIHJlc2VydmF0aW9uXG4rXHQgKiBsb2NrIGhlbGQuXG4rXHQgKi9cbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqKCptYXApKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcbitcbitcdC8qXG4rXHQgKiBDbGVhbiB1cCBkZXZpY2Ugc3BlY2lmaWMgcGFydHMgb2YgdGhlIEBtYXAuIENhbGxlZCB3aXRoIHRoZVxuK1x0ICogcmVzZXJ2YXRpb24gbG9jayBoZWxkLlxuK1x0ICovXG4rXHR2b2lkICgqdW5tYXApKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHVzZXIgdHJpZXMgdG8gZGVzdHJveSB0aGUgY3R4LiBSZWxlYXNlIGFsbCBkZXZpY2Ugc3BlY2lmaWNcbitcdCAqIHBhcnRzIG9mIHRoZSB0b2tlbi5cbitcdCAqL1xuK1x0dm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTtcbit9O1xuK1xuK3N0cnVjdCBkbWFfYnVmX2lvX21hcCB7XG4rXHQvKlxuK1x0ICogQ291bnRzIGF0dGFjaGVkIHJlcXVlc3RzIGFuZCBvdGhlciB1c2Vycy4gRGV2aWNlIHNwZWNpZmljIHVubWFwcGluZ1xuK1x0ICogaXMgZGVmZXJyZWQgdW50aWwgYWxsIHJlZnMgYXJlIGRyb3BwZWQuXG4rXHQgKi9cbitcdHN0cnVjdCBwZXJjcHVfcmVmXHRcdHJlZnM7XG4rXG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdFx0cmVsZWFzZV93b3JrO1xuK1x0c3RydWN0IGRtYV9idWZfaW9fZmVuY2VcdFx0KmZlbmNlO1xuK1x0c3RydWN0IGRtYV9idWZfaW9fY3R4XHRcdCpjdHg7XG4rfTtcbitcbitzdHJ1Y3QgZG1hX2J1Zl9pb19jdHgge1xuK1x0c3RydWN0IGRtYV9idWZfaW9fbWFwIF9fcmN1XHRcdCptYXA7XG4rXHRzdHJ1Y3QgZG1hX2J1Zlx0XHRcdFx0KmRtYWJ1ZjtcbitcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uXHRcdFx0ZGlyO1xuK1xuK1x0YXRvbWljX3RcdFx0XHRcdGZlbmNlX3NlcTtcbitcdHU2NFx0XHRcdFx0XHRmZW5jZV9jdHg7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdFx0XHRyZWxlYXNlX3dvcms7XG4rXHRyZWZjb3VudF90XHRcdFx0XHRyZWZzO1xuK1xuK1x0dm9pZFx0XHRcdFx0XHQqZGV2X3ByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9pb19vcHNcdFx0KmRldl9vcHM7XG4rfTtcbitcbitpbnQgZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLFxuK1x0XHRcdCAgIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxuK1x0XHRcdCAgIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4rXHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTtcbit2b2lkIGRtYV9idWZfaW9fY3R4X3JlbGVhc2Uoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpO1xuK1xuK3N0cnVjdCBkbWFfYnVmX2lvX21hcCAqZG1hX2J1Zl9pb19jcmVhdGVfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqXG4rZG1hX2J1Zl9pb19nZXRfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxuK3tcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xuK1xuK1x0Z3VhcmQocmN1KSgpO1xuK1xuK1x0bWFwID0gcmN1X2RlcmVmZXJlbmNlKGN0eC1cdTAwM2VtYXApO1xuK1x0aWYgKHVubGlrZWx5KCFtYXAgfHwgIXBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmVfcmN1KFx1MDAyNm1hcC1cdTAwM2VyZWZzKSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cmV0dXJuIG1hcDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGRtYV9idWZfaW9fbWFwX2Ryb3Aoc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApXG4re1xuK1x0cGVyY3B1X3JlZl9wdXQoXHUwMDI2bWFwLVx1MDAzZXJlZnMpO1xuK31cbitcbisvKlxuKyAqIERldmljZSBBUElcbisgKi9cbitcbit2b2lkIGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XG4raW50IGRtYV9idWZfaW9faW5pdF9tYXAoc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgsIHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwKTtcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbmluZGV4IGQxMDg5N2IzYTFlMzUuLjlmZTM0OWEyNzljNzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTE5MTQsNiArMTkxNCw3IEBAIHN0cnVjdCBkaXJfY29udGV4dCB7XG4gI2RlZmluZSBDT1BZX0ZJTEVfU1BMSUNFXHRcdCgxIFx1MDAzY1x1MDAzYyAwKVxuIFxuIHN0cnVjdCBpb191cmluZ19jbWQ7XG4rc3RydWN0IGRtYV9idWZfaW9fY3R4O1xuIHN0cnVjdCBvZmZzZXRfY3R4O1xuIFxuIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBmb3BfZmxhZ3NfdDtcbkBAIC0xOTYyLDYgKzE5NjMsNyBAQCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcbiBcdGludCAoKnVyaW5nX2NtZF9pb3BvbGwpKHN0cnVjdCBpb191cmluZ19jbWQgKiwgc3RydWN0IGlvX2NvbXBfYmF0Y2ggKixcbiBcdFx0XHRcdHVuc2lnbmVkIGludCBwb2xsX2ZsYWdzKTtcbiBcdGludCAoKm1tYXBfcHJlcGFyZSkoc3RydWN0IHZtX2FyZWFfZGVzYyAqKTtcbitcdGludCAoKmluaXRfZG1hX2J1Zl9pb19jdHgpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqKTtcbiB9IF9fcmFuZG9taXplX2xheW91dDtcbiBcbiAvKiBTdXBwb3J0cyBhc3luYyBidWZmZXJlZCByZWFkcyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuaW5kZXggYTJjNjIzYTY3YTI1MS4uZjkwNTg2ZDM1M2MxYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5AQCAtMTAsNiArMTAsNyBAQFxuIFxuIHN0cnVjdCBpb3VfbG9vcF9wYXJhbXM7XG4gc3RydWN0IGlvX3VyaW5nX2JwZl9vcHM7XG4rc3RydWN0IGRtYV9idWZfaW9fbWFwO1xuIFxuIGVudW0ge1xuIFx0LypcbkBAIC01OTQsNiArNTk1LDcgQEAgZW51bSB7XG4gXHRSRVFfRl9JTVBPUlRfQlVGRkVSX0JJVCxcbiBcdFJFUV9GX1NRRV9DT1BJRURfQklULFxuIFx0UkVRX0ZfSU9QT0xMX0JJVCxcbitcdFJFUV9GX0RST1BfRE1BQlVGX0JJVCxcbiBcbiBcdC8qIG5vdCBhIHJlYWwgYml0LCBqdXN0IHRvIGNoZWNrIHdlJ3JlIG5vdCBvdmVyZmxvd2luZyB0aGUgc3BhY2UgKi9cbiBcdF9fUkVRX0ZfTEFTVF9CSVQsXG5AQCAtNjg5LDYgKzY5MSw4IEBAIGVudW0ge1xuIFx0UkVRX0ZfU1FFX0NPUElFRFx0PSBJT19SRVFfRkxBRyhSRVFfRl9TUUVfQ09QSUVEX0JJVCksXG4gXHQvKiByZXF1ZXN0IG11c3QgYmUgaW9wb2xsZWQgdG8gY29tcGxldGlvbiAoc2V0IGluIC1cdTAwM2Vpc3N1ZSgpKSAqL1xuIFx0UkVRX0ZfSU9QT0xMXHRcdD0gSU9fUkVRX0ZMQUcoUkVRX0ZfSU9QT0xMX0JJVCksXG4rXHQvKiB0aGVyZSBpcyBhIGRtYSBtYXAgYXR0YWNoZWQgdG8gcmVxdWVzdCB0aGF0IG5lZWRzIHRvIGJlIGRyb3BwZWQgKi9cbitcdFJFUV9GX0RST1BfRE1BQlVGXHQ9IElPX1JFUV9GTEFHKFJFUV9GX0RST1BfRE1BQlVGX0JJVCksXG4gfTtcbiBcbiBzdHJ1Y3QgaW9fdHdfcmVxIHtcbkBAIC04MTEsNiArODE1LDcgQEAgc3RydWN0IGlvX2tpb2NiIHtcbiBcdC8qIGN1c3RvbSBjcmVkZW50aWFscywgdmFsaWQgSUZGIFJFUV9GX0NSRURTIGlzIHNldCAqL1xuIFx0Y29uc3Qgc3RydWN0IGNyZWRcdFx0KmNyZWRzO1xuIFx0c3RydWN0IGlvX3dxX3dvcmtcdFx0d29yaztcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcFx0XHQqZG1hYnVmX21hcDtcbiBcbiBcdHN0cnVjdCBpb19iaWdfY3FlIHtcbiBcdFx0dTY0XHRcdFx0ZXh0cmExO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWlvLmggYi9pbmNsdWRlL2xpbnV4L3Vpby5oXG5pbmRleCBhOWJjNWIzMDY3ZTMyLi42YzMxZWMxMzFhNzFlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91aW8uaFxuKysrIGIvaW5jbHVkZS9saW51eC91aW8uaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiBcbiBzdHJ1Y3QgcGFnZTtcbiBzdHJ1Y3QgZm9saW9fcXVldWU7XG4rc3RydWN0IGRtYV9idWZfaW9fbWFwO1xuIFxuIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fYml0d2lzZSBpb3ZfaXRlcl9leHRyYWN0aW9uX3Q7XG4gXG5AQCAtMjksNiArMzAsNyBAQCBlbnVtIGl0ZXJfdHlwZSB7XG4gXHRJVEVSX0ZPTElPUSxcbiBcdElURVJfWEFSUkFZLFxuIFx0SVRFUl9ESVNDQVJELFxuK1x0SVRFUl9ETUFCVUZfTUFQLFxuIH07XG4gXG4gI2RlZmluZSBJVEVSX1NPVVJDRVx0MVx0Ly8gPT0gV1JJVEVcbkBAIC03MSw2ICs3Myw3IEBAIHN0cnVjdCBpb3ZfaXRlciB7XG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3QgZm9saW9fcXVldWUgKmZvbGlvcTtcbiBcdFx0XHRcdHN0cnVjdCB4YXJyYXkgKnhhcnJheTtcbiBcdFx0XHRcdHZvaWQgX191c2VyICp1YnVmO1xuK1x0XHRcdFx0c3RydWN0IGRtYV9idWZfaW9fbWFwICpkbWFidWZfbWFwO1xuIFx0XHRcdH07XG4gXHRcdFx0c2l6ZV90IGNvdW50O1xuIFx0XHR9O1xuQEAgLTE1NSw2ICsxNTgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlvdl9pdGVyX2lzX3hhcnJheShjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4gXHRyZXR1cm4gaW92X2l0ZXJfdHlwZShpKSA9PSBJVEVSX1hBUlJBWTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxuK3tcbitcdHJldHVybiBpb3ZfaXRlcl90eXBlKGkpID09IElURVJfRE1BQlVGX01BUDtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGlvdl9pdGVyX3J3KGNvbnN0IHN0cnVjdCBpb3ZfaXRlciAqaSlcbiB7XG4gXHRyZXR1cm4gaS1cdTAwM2VkYXRhX3NvdXJjZSA/IFdSSVRFIDogUkVBRDtcbkBAIC0zMDAsNiArMzA4LDkgQEAgdm9pZCBpb3ZfaXRlcl9mb2xpb19xdWV1ZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgZmlyc3Rfc2xvdCwgdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZV90IGNvdW50KTtcbiB2b2lkIGlvdl9pdGVyX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sIHN0cnVjdCB4YXJyYXkgKnhhcnJheSxcbiBcdFx0ICAgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBjb3VudCk7XG4rdm9pZCBpb3ZfaXRlcl9kbWFidWZfbWFwKHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbixcbitcdFx0XHRzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcCxcbitcdFx0XHRsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpO1xuIHNzaXplX3QgaW92X2l0ZXJfZ2V0X3BhZ2VzMihzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4gXHRcdFx0c2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIG1heHBhZ2VzLCBzaXplX3QgKnN0YXJ0KTtcbiBzc2l6ZV90IGlvdl9pdGVyX2dldF9wYWdlc19hbGxvYzIoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaW9fdXJpbmcuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXG5pbmRleCA5MDlmYjdhZWE2MzhlLi5jMzkyOTdlOGJlYjZmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lvX3VyaW5nLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pb191cmluZy5oXG5AQCAtNzkwLDEzICs3OTAsNDIgQEAgc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlIHtcbiBcbiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyIHtcbiBcdF9fdTMyIG9mZnNldDtcbi1cdF9fdTMyIHJlc3Y7XG4rXHRfX3UzMiBmbGFncztcbiBcdF9fYWxpZ25lZF91NjQgZGF0YTtcbiBcdF9fYWxpZ25lZF91NjQgdGFncztcbiBcdF9fdTMyIG5yO1xuIFx0X191MzIgcmVzdjI7XG4gfTtcbiBcbisvKiBzdHJ1Y3QgaW9fdXJpbmdfcnNyY191cGRhdGUyOjpmbGFncyAqL1xuK2VudW0gaW9fdXJpbmdfcnNyY19yZWdfZmxhZ3Mge1xuK1x0LypcbitcdCAqIFVzZSB0aGUgZXh0ZW5kZWQgZGVzY3JpcHRvciBmb3JtYXQgZm9yIGJ1ZmZlciB1cGRhdGVzLFxuK1x0ICogc2VlIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzY1xuK1x0ICovXG4rXHRJT1JJTkdfUlNSQ19VUERBVEVfRVhURU5ERURcdFx0PSAxVSBcdTAwM2NcdTAwM2MgMSxcbit9O1xuK1xuKy8qIEJ1ZmZlciByZWdpc3RyYXRpb24gdHlwZSwgcGFzc2VkIGluIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYzo6dHlwZSAqL1xuK2VudW0gaW9fdXJpbmdfcmVnYnVmX3R5cGUge1xuK1x0SU9fUkVHQlVGX1RZUEVfRU1QVFksXG4rXHRJT19SRUdCVUZfVFlQRV9VQUREUixcbitcdElPX1JFR0JVRl9UWVBFX0RNQUJVRixcbitcbitcdF9fSU9fUkVHQlVGX1RZUEVfTUFYLFxuK307XG4rXG4rc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIHtcbitcdF9fdTMyIHR5cGU7IC8qIGVudW0gaW9fdXJpbmdfcmVnYnVmX3R5cGUgKi9cbitcdF9fdTMyIGZsYWdzO1xuK1x0X191NjQgc2l6ZTtcbitcdF9fdTY0IHVhZGRyO1xuK1xuK1x0X19zMzIgZG1hYnVmX2ZkO1xuK1x0X19zMzIgdGFyZ2V0X2ZkO1xuK1x0X191NjQgX19yZXN2WzZdO1xuK307XG4rXG4gLyogU2tpcCB1cGRhdGluZyBmZCBpbmRleGVzIHNldCB0byB0aGlzIHZhbHVlIGluIHRoZSBmZCB0YWJsZSAqL1xuICNkZWZpbmUgSU9SSU5HX1JFR0lTVEVSX0ZJTEVTX1NLSVBcdCgtMilcbiBcbmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuaW5kZXggMTI3OWUyN2MyYzZkMi4uY2I4OGQxOWM4ZmIyYyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmNcbisrKyBiL2lvX3VyaW5nL2lvX3VyaW5nLmNcbkBAIC0xMDksNyArMTA5LDcgQEBcbiBcbiAjZGVmaW5lIElPX1JFUV9DTEVBTl9TTE9XX0ZMQUdTIChSRVFfRl9SRUZDT1VOVCB8IElPX1JFUV9MSU5LX0ZMQUdTIHwgXFxcbiBcdFx0XHRcdCBSRVFfRl9SRUlTU1VFIHwgUkVRX0ZfUE9MTEVEIHwgXFxcbi1cdFx0XHRcdCBJT19SRVFfQ0xFQU5fRkxBR1MpXG4rXHRcdFx0XHQgSU9fUkVRX0NMRUFOX0ZMQUdTIHwgUkVRX0ZfRFJPUF9ETUFCVUYpXG4gXG4gI2RlZmluZSBJT19UQ1RYX1JFRlNfQ0FDSEVfTlJcdCgxVSBcdTAwM2NcdTAwM2MgMTApXG4gXG5AQCAtMTEyNSw2ICsxMTI1LDcgQEAgc3RhdGljIHZvaWQgaW9fZnJlZV9iYXRjaF9saXN0KHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRcdFx0aW9fcXVldWVfbmV4dChyZXEpO1xuIFx0XHRcdGlmICh1bmxpa2VseShyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFUV9DTEVBTl9GTEFHUykpXG4gXHRcdFx0XHRpb19jbGVhbl9vcChyZXEpO1xuK1x0XHRcdGlvX3JlcV9kcm9wX2RtYWJ1ZihyZXEpO1xuIFx0XHR9XG4gXHRcdGlvX3B1dF9maWxlKHJlcSk7XG4gXHRcdGlvX3JlcV9wdXRfcnNyY19ub2RlcyhyZXEpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL25ldC5jIGIvaW9fdXJpbmcvbmV0LmNcbmluZGV4IGE3NGQxNWY3YjdkMmIuLjQzOWM5OWFkMTg4NDEgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9uZXQuY1xuKysrIGIvaW9fdXJpbmcvbmV0LmNcbkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBzdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gemVyb2NvcHlfZmlsbF9za2JfZnJvbV9pdGVyKHNrYiwgZnJvbSwgbGVuZ3RoKTtcbiBcbiBcdGJpLmJpX3NpemUgPSBtaW4oZnJvbS1cdTAwM2Vjb3VudCwgbGVuZ3RoKTtcbi1cdGJpLmJpX2J2ZWNfZG9uZSA9IGZyb20tXHUwMDNlaW92X29mZnNldDtcbitcdGJpLmJpX29mZnNldCA9IGZyb20tXHUwMDNlaW92X29mZnNldDtcbiBcdGJpLmJpX2lkeCA9IDA7XG4gXG4gXHR3aGlsZSAoYmkuYmlfc2l6ZSBcdTAwMjZcdTAwMjYgZnJhZyBcdTAwM2MgTUFYX1NLQl9GUkFHUykge1xuQEAgLTE0OTAsNyArMTQ5MCw3IEBAIHN0YXRpYyBpbnQgaW9fc2dfZnJvbV9pdGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRmcm9tLVx1MDAzZWJ2ZWMgKz0gYmkuYmlfaWR4O1xuIFx0ZnJvbS1cdTAwM2Vucl9zZWdzIC09IGJpLmJpX2lkeDtcbiBcdGZyb20tXHUwMDNlY291bnQgLT0gY29waWVkO1xuLVx0ZnJvbS1cdTAwM2Vpb3Zfb2Zmc2V0ID0gYmkuYmlfYnZlY19kb25lO1xuK1x0ZnJvbS1cdTAwM2Vpb3Zfb2Zmc2V0ID0gYmkuYmlfb2Zmc2V0O1xuIFxuIFx0c2tiLVx1MDAzZWRhdGFfbGVuICs9IGNvcGllZDtcbiBcdHNrYi1cdTAwM2VsZW4gKz0gY29waWVkO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuY1xuaW5kZXggOGQwZjJlZTI0ZTBjMi4uZDIzZGJiMGRkNmI4ZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JzcmMuY1xuKysrIGIvaW9fdXJpbmcvcnNyYy5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9fdXJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nL2NtZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1pby5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9pb191cmluZy5oXHUwMDNlXG4gXG5AQCAtMjgsNyArMjksNyBAQCBzdHJ1Y3QgaW9fcnNyY191cGRhdGUge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tXHRcdFx0XHRcdFx0ICAgc3RydWN0IGlvdmVjICppb3YpO1xuK1x0XHRcdFx0XHRcdCAgIHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyAqZGVzYyk7XG4gXG4gc3RhdGljIGludCBocGFnZV9hY2N0X3JlZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHBhZ2UgKmhwYWdlLFxuIFx0XHRcdCAgYm9vbCAqYWNjdF9uZXcpXG5AQCAtODEsNiArODIsMTggQEAgc3RhdGljIGJvb2wgaHBhZ2VfYWNjdF91bnJlZihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IHBhZ2UgKmhwYWdlKVxuIFxuICNkZWZpbmUgSU9fQ0FDSEVEX0JWRUNTX1NFR1NcdDMyXG4gXG4rc3RhdGljIHZvaWQgaW9faW92X3RvX3JlZ2J1Zl9kZXNjKGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpXG4re1xuK1x0KmRlc2MgPSAoc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjKSB7XG4rXHRcdC50eXBlID0gSU9fUkVHQlVGX1RZUEVfVUFERFIsXG4rXHRcdC51YWRkciA9ICh1NjQpKHVpbnRwdHJfdClpb3YtXHUwMDNlaW92X2Jhc2UsXG4rXHRcdC5zaXplID0gaW92LVx1MDAzZWlvdl9sZW4sXG4rXHR9O1xuK1x0aWYgKCFkZXNjLVx1MDAzZXVhZGRyKVxuK1x0XHRkZXNjLVx1MDAzZXR5cGUgPSBJT19SRUdCVUZfVFlQRV9FTVBUWTtcbit9XG4rXG4gaW50IF9faW9fYWNjb3VudF9tZW0oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGFnZV9saW1pdCwgY3VyX3BhZ2VzLCBuZXdfcGFnZXM7XG5AQCAtMzA5LDYgKzMyMiw4IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gLUVOWElPO1xuIFx0aWYgKHVwLVx1MDAzZW9mZnNldCArIG5yX2FyZ3MgXHUwMDNlIGN0eC1cdTAwM2VmaWxlX3RhYmxlLmRhdGEubnIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKHVwLVx1MDAzZWZsYWdzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGZvciAoZG9uZSA9IDA7IGRvbmUgXHUwMDNjIG5yX2FyZ3M7IGRvbmUrKykge1xuIFx0XHR1NjQgdGFnID0gMDtcbkBAIC0zNjgsOSArMzgzLDggQEAgc3RhdGljIGludCBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZTIgKnVwLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG5yX2FyZ3MpXG4ge1xuK1x0Ym9vbCBleHRlbmRlZCA9IHVwLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfUlNSQ19VUERBVEVfRVhURU5ERUQ7XG4gXHR1NjQgX191c2VyICp0YWdzID0gdTY0X3RvX3VzZXJfcHRyKHVwLVx1MDAzZXRhZ3MpO1xuLVx0c3RydWN0IGlvdmVjIGZhc3RfaW92LCAqaW92O1xuLVx0c3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYztcbiBcdHU2NCB1c2VyX2RhdGEgPSB1cC1cdTAwM2VkYXRhO1xuIFx0X191MzIgZG9uZTtcbiBcdGludCBpLCBlcnI7XG5AQCAtMzc5LDI2ICszOTMsNDkgQEAgc3RhdGljIGludCBfX2lvX3NxZV9idWZmZXJzX3VwZGF0ZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiBcdFx0cmV0dXJuIC1FTlhJTztcbiBcdGlmICh1cC1cdTAwM2VvZmZzZXQgKyBucl9hcmdzIFx1MDAzZSBjdHgtXHUwMDNlYnVmX3RhYmxlLm5yKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICh1cC1cdTAwM2VmbGFncyBcdTAwMjYgfklPUklOR19SU1JDX1VQREFURV9FWFRFTkRFRClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRmb3IgKGRvbmUgPSAwOyBkb25lIFx1MDAzYyBucl9hcmdzOyBkb25lKyspIHtcbitcdFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIGRlc2M7XG4gXHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4gXHRcdHU2NCB0YWcgPSAwO1xuIFxuLVx0XHR1dmVjID0gdTY0X3RvX3VzZXJfcHRyKHVzZXJfZGF0YSk7XG4tXHRcdGlvdiA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCAxLCAxLCBcdTAwMjZmYXN0X2lvdiwgaW9faXNfY29tcGF0KGN0eCkpO1xuLVx0XHRpZiAoSVNfRVJSKGlvdikpIHtcbi1cdFx0XHRlcnIgPSBQVFJfRVJSKGlvdik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdFx0aWYgKHRhZ3MgXHUwMDI2XHUwMDI2IGNvcHlfZnJvbV91c2VyKFx1MDAyNnRhZywgXHUwMDI2dGFnc1tkb25lXSwgc2l6ZW9mKHRhZykpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuLVx0XHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XG4rXG4rXHRcdGlmIChleHRlbmRlZCkge1xuK1x0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkZXNjLCB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKSxcbitcdFx0XHRcdFx0ICAgc2l6ZW9mKGRlc2MpKSkge1xuK1x0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0XHR1c2VyX2RhdGEgKz0gc2l6ZW9mKGRlc2MpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnV2ZWMgPSB1NjRfdG9fdXNlcl9wdHIodXNlcl9kYXRhKTtcbitcdFx0XHRzdHJ1Y3QgaW92ZWMgZmFzdF9pb3YsICppb3Y7XG4rXG4rXHRcdFx0aWYgKGlvX2lzX2NvbXBhdChjdHgpKVxuK1x0XHRcdFx0dXNlcl9kYXRhICs9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lvdmVjKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR1c2VyX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCBpb3ZlYyk7XG4rXG4rXHRcdFx0aW92ID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIDEsIDEsIFx1MDAyNmZhc3RfaW92LCBpb19pc19jb21wYXQoY3R4KSk7XG4rXHRcdFx0aWYgKElTX0VSUihpb3YpKSB7XG4rXHRcdFx0XHRlcnIgPSBQVFJfRVJSKGlvdik7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdFx0aW9faW92X3RvX3JlZ2J1Zl9kZXNjKGlvdiwgXHUwMDI2ZGVzYyk7XG4rXHRcdH1cbitcbitcdFx0bm9kZSA9IGlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoY3R4LCBcdTAwMjZkZXNjKTtcbiBcdFx0aWYgKElTX0VSUihub2RlKSkge1xuIFx0XHRcdGVyciA9IFBUUl9FUlIobm9kZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbitcbiBcdFx0aWYgKHRhZykge1xuIFx0XHRcdGlmICghbm9kZSkge1xuIFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbkBAIC00MDksMTAgKzQ0Niw2IEBAIHN0YXRpYyBpbnQgX19pb19zcWVfYnVmZmVyc191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdGkgPSBhcnJheV9pbmRleF9ub3NwZWModXAtXHUwMDNlb2Zmc2V0ICsgZG9uZSwgY3R4LVx1MDAzZWJ1Zl90YWJsZS5ucik7XG4gXHRcdGlvX3Jlc2V0X3JzcmNfbm9kZShjdHgsIFx1MDAyNmN0eC1cdTAwM2VidWZfdGFibGUsIGkpO1xuIFx0XHRjdHgtXHUwMDNlYnVmX3RhYmxlLm5vZGVzW2ldID0gbm9kZTtcbi1cdFx0aWYgKGlvX2lzX2NvbXBhdChjdHgpKVxuLVx0XHRcdHVzZXJfZGF0YSArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pb3ZlYyk7XG4tXHRcdGVsc2Vcbi1cdFx0XHR1c2VyX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCBpb3ZlYyk7XG4gXHR9XG4gXHRyZXR1cm4gZG9uZSA/IGRvbmUgOiBlcnI7XG4gfVxuQEAgLTQ0Nyw3ICs0ODAsNyBAQCBpbnQgaW9fcmVnaXN0ZXJfZmlsZXNfdXBkYXRlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0bWVtc2V0KFx1MDAyNnVwLCAwLCBzaXplb2YodXApKTtcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ1cCwgYXJnLCBzaXplb2Yoc3RydWN0IGlvX3VyaW5nX3JzcmNfdXBkYXRlKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuLVx0aWYgKHVwLnJlc3YgfHwgdXAucmVzdjIpXG4rXHRpZiAodXAucmVzdjIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0cmV0dXJuIF9faW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoY3R4LCBJT1JJTkdfUlNSQ19GSUxFLCBcdTAwMjZ1cCwgbnJfYXJncyk7XG4gfVxuQEAgLTQ2MSw3ICs0OTQsNyBAQCBpbnQgaW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnVwLCBhcmcsIHNpemVvZih1cCkpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdGlmICghdXAubnIgfHwgdXAucmVzdiB8fCB1cC5yZXN2MilcbitcdGlmICghdXAubnIgfHwgdXAucmVzdjIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0cmV0dXJuIF9faW9fcmVnaXN0ZXJfcnNyY191cGRhdGUoY3R4LCB0eXBlLCBcdTAwMjZ1cCwgdXAubnIpO1xuIH1cbkBAIC01NjEsMTIgKzU5NCw5IEBAIGludCBpb19maWxlc191cGRhdGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiBcdHN0cnVjdCBpb191cmluZ19yc3JjX3VwZGF0ZTIgdXAyO1xuIFx0aW50IHJldDtcbiBcbitcdG1lbXNldChcdTAwMjZ1cDIsIDAsIHNpemVvZih1cDIpKTtcbiBcdHVwMi5vZmZzZXQgPSB1cC1cdTAwM2VvZmZzZXQ7XG4gXHR1cDIuZGF0YSA9IHVwLVx1MDAzZWFyZztcbi1cdHVwMi5uciA9IDA7XG4tXHR1cDIudGFncyA9IDA7XG4tXHR1cDIucmVzdiA9IDA7XG4tXHR1cDIucmVzdjIgPSAwO1xuIFxuIFx0aWYgKHVwLVx1MDAzZW9mZnNldCA9PSBJT1JJTkdfRklMRV9JTkRFWF9BTExPQykge1xuIFx0XHRyZXQgPSBpb19maWxlc191cGRhdGVfd2l0aF9pbmRleF9hbGxvYyhyZXEsIGlzc3VlX2ZsYWdzKTtcbkBAIC04NTIsMjcgKzg4MiwxMjcgQEAgYm9vbCBpb19jaGVja19jb2FsZXNjZV9idWZmZXIoc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5LCBpbnQgbnJfcGFnZXMsXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RydWN0IGlvX3JlZ2J1Zl9kbWEge1xuK1x0c3RydWN0IGRtYV9idWZfaW9fY3R4XHRcdGN0eDtcbitcdHN0cnVjdCBmaWxlXHRcdFx0KnRhcmdldF9maWxlO1xuK307XG4rXG4rc3RhdGljIHZvaWQgaW9fcmVsZWFzZV9yZWdfZG1hYnVmKHZvaWQgKnByaXYpXG4re1xuK1x0c3RydWN0IGlvX3JlZ2J1Zl9kbWEgKmRiID0gcHJpdjtcbitcbitcdGZwdXQoZGItXHUwMDNldGFyZ2V0X2ZpbGUpO1xuK1x0ZG1hX2J1Zl9pb19jdHhfcmVsZWFzZShcdTAwMjZkYi1cdTAwM2VjdHgpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGlvX3JzcmNfbm9kZSAqaW9fcmVnaXN0ZXJfZG1hYnVmKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBpb191cmluZ19yZWdidWZfZGVzYyAqZGVzYylcbit7XG4rXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlID0gTlVMTDtcbitcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11ID0gTlVMTDtcbitcdHN0cnVjdCBpb19yZWdidWZfZG1hICpyZWdidWYgPSBOVUxMO1xuK1x0c3RydWN0IGZpbGUgKnRhcmdldF9maWxlID0gTlVMTDtcbitcdHN0cnVjdCBkbWFfYnVmICpkbWFidWYgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4rXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfU0VUVVBfSU9QT0xMKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7XG4rXHRpZiAoZGVzYy1cdTAwM2V1YWRkciB8fCBkZXNjLVx1MDAzZXNpemUpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0cmV0ID0gLUVOT01FTTtcbitcdG5vZGUgPSBpb19yc3JjX25vZGVfYWxsb2MoY3R4LCBJT1JJTkdfUlNSQ19CVUZGRVIpO1xuK1x0aWYgKCFub2RlKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGltdSA9IGlvX2FsbG9jX2ltdShjdHgsIDApO1xuK1x0aWYgKCFpbXUpXG4rXHRcdGdvdG8gZXJyO1xuK1x0cmVnYnVmID0ga3phbGxvYyhzaXplb2YoKnJlZ2J1ZiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyZWdidWYpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0cmV0ID0gLUVCQURGO1xuK1x0dGFyZ2V0X2ZpbGUgPSBmZ2V0KGRlc2MtXHUwMDNldGFyZ2V0X2ZkKTtcbitcdGlmICghdGFyZ2V0X2ZpbGUpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGVzYy1cdTAwM2VkbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIoZG1hYnVmKTtcbitcdFx0ZG1hYnVmID0gTlVMTDtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXHRpZiAoZG1hYnVmLVx1MDAzZXNpemUgXHUwMDNlIFNaXzFHKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHRhcmdldF9maWxlLCBcdTAwMjZyZWdidWYtXHUwMDNlY3R4LCBkbWFidWYsXG4rXHRcdFx0XHQgICAgRE1BX0JJRElSRUNUSU9OQUwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZWdidWYtXHUwMDNldGFyZ2V0X2ZpbGUgPSB0YXJnZXRfZmlsZTtcbitcdGltdS1cdTAwM2Vucl9idmVjcyA9IDE7XG4rXHRpbXUtXHUwMDNldWJ1ZiA9IDA7XG4rXHRpbXUtXHUwMDNlbGVuID0gZG1hYnVmLVx1MDAzZXNpemU7XG4rXHRpbXUtXHUwMDNlZm9saW9fc2hpZnQgPSAwO1xuK1x0aW11LVx1MDAzZXJlbGVhc2UgPSBpb19yZWxlYXNlX3JlZ19kbWFidWY7XG4rXHRpbXUtXHUwMDNlcHJpdiA9IHJlZ2J1ZjtcbitcdGltdS1cdTAwM2VmbGFncyA9IElPX1JFR0JVRl9GX0RNQUJVRjtcbitcdGltdS1cdTAwM2VkaXIgPSBJT19JTVVfREVTVCB8IElPX0lNVV9TT1VSQ0U7XG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2aW11LVx1MDAzZXJlZnMsIDEpO1xuK1x0bm9kZS1cdTAwM2VidWYgPSBpbXU7XG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1x0cmV0dXJuIG5vZGU7XG4rZXJyOlxuK1x0a2ZyZWUocmVnYnVmKTtcbitcdGlmIChpbXUpXG4rXHRcdGlvX2ZyZWVfaW11KGN0eCwgaW11KTtcbitcdGlmIChub2RlKVxuK1x0XHRpb19jYWNoZV9mcmVlKFx1MDAyNmN0eC1cdTAwM2Vub2RlX2NhY2hlLCBub2RlKTtcbitcdGlmICh0YXJnZXRfZmlsZSlcbitcdFx0ZnB1dCh0YXJnZXRfZmlsZSk7XG4rXHRpZiAoZG1hYnVmKVxuK1x0XHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbit9XG4rXG4rXG4gc3RhdGljIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX3NxZV9idWZmZXJfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4tXHRcdFx0XHRcdFx0ICAgc3RydWN0IGlvdmVjICppb3YpXG4rXHRcdFx0XHRcdFx0ICAgc3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjICpkZXNjKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgdWFkZHIgPSAodW5zaWduZWQgbG9uZylkZXNjLVx1MDAzZXVhZGRyO1xuK1x0c2l6ZV90IHNpemUgPSBkZXNjLVx1MDAzZXNpemU7XG4gXHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSA9IE5VTEw7XG4gXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDtcbiBcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4gXHR1bnNpZ25lZCBsb25nIG9mZjtcbi1cdHNpemVfdCBzaXplO1xuIFx0aW50IHJldCwgbnJfcGFnZXMsIGk7XG4gXHRzdHJ1Y3QgaW9faW11X2ZvbGlvX2RhdGEgZGF0YTtcbiBcdGJvb2wgY29hbGVzY2VkID0gZmFsc2U7XG4gXG4tXHRpZiAoIWlvdi1cdTAwM2Vpb3ZfYmFzZSkge1xuLVx0XHRpZiAoaW92LVx1MDAzZWlvdl9sZW4pXG4rXHRpZiAoZGVzYy1cdTAwM2V0eXBlIFx1MDAzZT0gX19JT19SRUdCVUZfVFlQRV9NQVgpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1x0aWYgKCFtZW1faXNfemVybyhcdTAwMjZkZXNjLVx1MDAzZV9fcmVzdiwgc2l6ZW9mKGRlc2MtXHUwMDNlX19yZXN2KSkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0aWYgKGRlc2MtXHUwMDNldHlwZSA9PSBJT19SRUdCVUZfVFlQRV9ETUFCVUYpXG4rXHRcdHJldHVybiBpb19yZWdpc3Rlcl9kbWFidWYoY3R4LCBkZXNjKTtcbitcbitcdGlmIChkZXNjLVx1MDAzZWRtYWJ1Zl9mZCB8fCBkZXNjLVx1MDAzZXRhcmdldF9mZClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHRpZiAoZGVzYy1cdTAwM2V0eXBlID09IElPX1JFR0JVRl9UWVBFX0VNUFRZKSB7XG4rXHRcdGlmICh1YWRkciB8fCBzaXplKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FRkFVTFQpO1xuIFx0XHQvKiByZW1vdmUgdGhlIGJ1ZmZlciB3aXRob3V0IGluc3RhbGxpbmcgYSBuZXcgb25lICovXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0cmV0ID0gaW9fdmFsaWRhdGVfdXNlcl9idWZfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpaW92LVx1MDAzZWlvdl9iYXNlLFxuLVx0XHRcdFx0XHQgaW92LVx1MDAzZWlvdl9sZW4pO1xuK1x0cmV0ID0gaW9fdmFsaWRhdGVfdXNlcl9idWZfcmFuZ2UodWFkZHIsIHNpemUpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiBcbkBAIC04ODEsOCArMTAxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdHJldCA9IC1FTk9NRU07XG4tXHRwYWdlcyA9IGlvX3Bpbl9wYWdlcygodW5zaWduZWQgbG9uZykgaW92LVx1MDAzZWlvdl9iYXNlLCBpb3YtXHUwMDNlaW92X2xlbixcbi1cdFx0XHRcdFx1MDAyNm5yX3BhZ2VzKTtcbitcdHBhZ2VzID0gaW9fcGluX3BhZ2VzKHVhZGRyLCBzaXplLCBcdTAwMjZucl9wYWdlcyk7XG4gXHRpZiAoSVNfRVJSKHBhZ2VzKSkge1xuIFx0XHRyZXQgPSBQVFJfRVJSKHBhZ2VzKTtcbiBcdFx0cGFnZXMgPSBOVUxMO1xuQEAgLTkwNCwxMCArMTAzMyw5IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBkb25lO1xuIFxuLVx0c2l6ZSA9IGlvdi1cdTAwM2Vpb3ZfbGVuO1xuIFx0Lyogc3RvcmUgb3JpZ2luYWwgYWRkcmVzcyBmb3IgbGF0ZXIgdmVyaWZpY2F0aW9uICovXG4tXHRpbXUtXHUwMDNldWJ1ZiA9ICh1bnNpZ25lZCBsb25nKSBpb3YtXHUwMDNlaW92X2Jhc2U7XG4tXHRpbXUtXHUwMDNlbGVuID0gaW92LVx1MDAzZWlvdl9sZW47XG4rXHRpbXUtXHUwMDNldWJ1ZiA9IHVhZGRyO1xuK1x0aW11LVx1MDAzZWxlbiA9IHNpemU7XG4gXHRpbXUtXHUwMDNlZm9saW9fc2hpZnQgPSBQQUdFX1NISUZUO1xuIFx0aW11LVx1MDAzZXJlbGVhc2UgPSBpb19yZWxlYXNlX3VidWY7XG4gXHRpbXUtXHUwMDNlcHJpdiA9IGltdTtcbkBAIC05MTcsNyArMTA0NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRpbXUtXHUwMDNlZm9saW9fc2hpZnQgPSBkYXRhLmZvbGlvX3NoaWZ0O1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNmltdS1cdTAwM2VyZWZzLCAxKTtcbiBcbi1cdG9mZiA9ICh1bnNpZ25lZCBsb25nKWlvdi1cdTAwM2Vpb3ZfYmFzZSBcdTAwMjYgflBBR0VfTUFTSztcbitcdG9mZiA9IHVhZGRyIFx1MDAyNiB+UEFHRV9NQVNLO1xuIFx0aWYgKGNvYWxlc2NlZClcbiBcdFx0b2ZmICs9IGRhdGEuZmlyc3RfZm9saW9fcGFnZV9pZHggXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXG5AQCAtOTY5LDYgKzEwOTcsNyBAQCBpbnQgaW9fc3FlX2J1ZmZlcnNfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXG4gXHRcdG1lbXNldChpb3YsIDAsIHNpemVvZigqaW92KSk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9hcmdzOyBpKyspIHtcbitcdFx0c3RydWN0IGlvX3VyaW5nX3JlZ2J1Zl9kZXNjIGRlc2M7XG4gXHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4gXHRcdHU2NCB0YWcgPSAwO1xuIFxuQEAgLTk5Miw3ICsxMTIxLDggQEAgaW50IGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdH1cbiBcdFx0fVxuIFxuLVx0XHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIGlvdik7XG4rXHRcdGlvX2lvdl90b19yZWdidWZfZGVzYyhpb3YsIFx1MDAyNmRlc2MpO1xuK1x0XHRub2RlID0gaW9fc3FlX2J1ZmZlcl9yZWdpc3RlcihjdHgsIFx1MDAyNmRlc2MpO1xuIFx0XHRpZiAoSVNfRVJSKG5vZGUpKSB7XG4gXHRcdFx0cmV0ID0gUFRSX0VSUihub2RlKTtcbiBcdFx0XHRicmVhaztcbkBAIC0xMTM2LDkgKzEyNjYsNjQgQEAgc3RhdGljIGludCBpb19pbXBvcnRfa2J1ZihpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaW9faW1wb3J0X2ZpeGVkKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rdm9pZCBpb19kcm9wX2RtYWJ1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuK3tcbitcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11O1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4rXHRcdHJldHVybjtcbitcdGlmIChXQVJOX09OX09OQ0UocmVxLVx1MDAzZWJ1Zl9ub2RlLVx1MDAzZXR5cGUgIT0gSU9SSU5HX1JTUkNfQlVGRkVSKSlcbitcdFx0cmV0dXJuO1xuK1x0aW11ID0gcmVxLVx1MDAzZWJ1Zl9ub2RlLVx1MDAzZWJ1ZjtcbitcdGlmIChXQVJOX09OX09OQ0UoIShpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0RNQUJVRikpKVxuK1x0XHRyZXR1cm47XG4rXHRkbWFfYnVmX2lvX21hcF9kcm9wKHJlcS1cdTAwM2VkbWFidWZfbWFwKTtcbitcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9EUk9QX0RNQUJVRjtcbit9XG4rXG4rc3RhdGljIGludCBpb19pbXBvcnRfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuK1x0XHRcdCAgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdFx0ICAgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXG4rXHRcdFx0ICAgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCxcbitcdFx0XHQgICB1bnNpZ25lZCBpc3N1ZV9mbGFncylcbit7XG4rXHRzdHJ1Y3QgaW9fcmVnYnVmX2RtYSAqZGIgPSBpbXUtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwO1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdGlmICghbGVuKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdGlmIChyZXEtXHUwMDNlZmlsZSAhPSBkYi1cdTAwM2V0YXJnZXRfZmlsZSlcbitcdFx0cmV0dXJuIC1FQkFERjtcbitcbitcdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0RST1BfRE1BQlVGKSB7XG4rXHRcdG1hcCA9IHJlcS1cdTAwM2VkbWFidWZfbWFwO1xuK1x0XHRnb3RvIGluaXRfaXRlcjtcbitcdH1cbitcbitcdG1hcCA9IGRtYV9idWZfaW9fZ2V0X21hcChcdTAwMjZkYi1cdTAwM2VjdHgpO1xuK1x0aWYgKHVubGlrZWx5KCFtYXApKSB7XG4rXHRcdGlmICghKGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX0lPV1EpKVxuK1x0XHRcdHJldHVybiAtRUFHQUlOO1xuK1x0XHRtYXAgPSBkbWFfYnVmX2lvX2NyZWF0ZV9tYXAoXHUwMDI2ZGItXHUwMDNlY3R4KTtcbitcdFx0aWYgKElTX0VSUihtYXApKVxuK1x0XHRcdHJldHVybiBQVFJfRVJSKG1hcCk7XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlZG1hYnVmX21hcCA9IG1hcDtcbitcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9EUk9QX0RNQUJVRjtcbitpbml0X2l0ZXI6XG4rXHRpb3ZfaXRlcl9kbWFidWZfbWFwKGl0ZXIsIGRkaXIsIG1hcCwgb2Zmc2V0LCBsZW4pO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaW9faW1wb3J0X2ZpeGVkKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuK1x0XHRcdCAgIGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0ICAgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXG4tXHRcdFx0ICAgdTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuKVxuK1x0XHRcdCAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbixcbitcdFx0XHQgICB1bnNpZ25lZCBpc3N1ZV9mbGFncyxcbitcdFx0XHQgICB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJpb192ZWMgKmJ2ZWM7XG4gXHRzaXplX3QgZm9saW9fbWFzaztcbkBAIC0xMTU4LDYgKzEzNDMsMTIgQEAgc3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcbiBcdG9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LVx1MDAzZXVidWY7XG4gXG4rXHRpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9ETUFCVUYpIHtcbitcdFx0aWYgKCEoaW1wb3J0X2ZsYWdzIFx1MDAyNiBJT19SRUdCVUZfSU1QT1JUX0FMTE9XX0RNQUJVRikpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdHJldHVybiBpb19pbXBvcnRfZG1hYnVmKHJlcSwgZGRpciwgaXRlciwgaW11LCBsZW4sIG9mZnNldCxcbitcdFx0XHRcdFx0aXNzdWVfZmxhZ3MpO1xuK1x0fVxuIFx0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRilcbiBcdFx0cmV0dXJuIGlvX2ltcG9ydF9rYnVmKGRkaXIsIGl0ZXIsIGltdSwgbGVuLCBvZmZzZXQpO1xuIFxuQEAgLTEyMTEsMTYgKzE0MDIsMTcgQEAgaW5saW5lIHN0cnVjdCBpb19yc3JjX25vZGUgKmlvX2ZpbmRfYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEsXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4taW50IGlvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4raW50IF9faW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHR1NjQgYnVmX2FkZHIsIHNpemVfdCBsZW4sIGludCBkZGlyLFxuLVx0XHRcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuK1x0XHRcdHVuc2lnbmVkIGlzc3VlX2ZsYWdzLCB1bnNpZ25lZCBpbXBvcnRfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlvX3JzcmNfbm9kZSAqbm9kZTtcbiBcbiBcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xuIFx0aWYgKCFub2RlKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiBpb19pbXBvcnRfZml4ZWQoZGRpciwgaXRlciwgbm9kZS1cdTAwM2VidWYsIGJ1Zl9hZGRyLCBsZW4pO1xuK1x0cmV0dXJuIGlvX2ltcG9ydF9maXhlZChyZXEsIGRkaXIsIGl0ZXIsIG5vZGUtXHUwMDNlYnVmLCBidWZfYWRkciwgbGVuLFxuK1x0XHRcdFx0aXNzdWVfZmxhZ3MsIGltcG9ydF9mbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaW9fYnVmZmVyX2FjY3RfY2xvbmVkX2hwYWdlcyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbkBAIC0xMzQ3LDYgKzE1MzksMTEgQEAgc3RhdGljIGludCBpb19jbG9uZV9idWZmZXJzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fcmluZ19jdHggKnNyY19jdHhcbiBcdFx0aWYgKCFzcmNfbm9kZSkge1xuIFx0XHRcdGRzdF9ub2RlID0gTlVMTDtcbiBcdFx0fSBlbHNlIHtcbitcdFx0XHRpZiAoc3JjX25vZGUtXHUwMDNlYnVmLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9VTkNMT05FQUJMRSkge1xuK1x0XHRcdFx0aW9fcnNyY19kYXRhX2ZyZWUoY3R4LCBcdTAwMjZkYXRhKTtcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRkc3Rfbm9kZSA9IGlvX3JzcmNfbm9kZV9hbGxvYyhjdHgsIElPUklOR19SU1JDX0JVRkZFUik7XG4gXHRcdFx0aWYgKCFkc3Rfbm9kZSkge1xuIFx0XHRcdFx0aW9fcnNyY19kYXRhX2ZyZWUoY3R4LCBcdTAwMjZkYXRhKTtcbkBAIC0xNjE3LDkgKzE4MTQsOSBAQCBzdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuK2ludCBfX2lvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4tXHRcdFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4rXHRcdFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xuIFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XG5AQCAtMTYzNyw3ICsxODM0LDkgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRpb3ZlY19vZmYgPSB2ZWMtXHUwMDNlbnIgLSBucl9pb3ZzO1xuIFx0aW92ID0gdmVjLVx1MDAzZWlvdmVjICsgaW92ZWNfb2ZmO1xuIFxuLVx0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xuK1x0aWYgKGltdS1cdTAwM2VmbGFncyBcdTAwMjYgSU9fUkVHQlVGX0ZfRE1BQlVGKSB7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH0gZWxzZSBpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKSB7XG4gXHRcdGludCByZXQgPSBpb19rZXJuX2J2ZWNfc2l6ZShpb3YsIG5yX2lvdnMsIGltdSwgXHUwMDI2bnJfc2Vncyk7XG4gXG4gXHRcdGlmICh1bmxpa2VseShyZXQpKVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuaCBiL2lvX3VyaW5nL3JzcmMuaFxuaW5kZXggOThhZThlZjUxMDA5ZC4uM2NiOWI1N2YxNTliNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JzcmMuaFxuKysrIGIvaW9fdXJpbmcvcnNyYy5oXG5AQCAtMjksNyArMjksMTMgQEAgZW51bSB7XG4gfTtcbiBcbiBlbnVtIHtcbi1cdElPX1JFR0JVRl9GX0tCVUZcdFx0PSAxLFxuK1x0SU9fUkVHQlVGX0ZfS0JVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDAsXG4rXHRJT19SRUdCVUZfRl9VTkNMT05FQUJMRVx0XHQ9IDEgXHUwMDNjXHUwMDNjIDEsXG4rXHRJT19SRUdCVUZfRl9ETUFCVUZcdFx0PSAxIFx1MDAzY1x1MDAzYyAzLFxuK307XG4rXG4rZW51bSB7XG4rXHRJT19SRUdCVUZfSU1QT1JUX0FMTE9XX0RNQUJVRlx0XHQ9IDEgXHUwMDNjXHUwMDNjIDEsXG4gfTtcbiBcbiBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYge1xuQEAgLTY0LDEyICs3MCwyOCBAQCBpbnQgaW9fcnNyY19kYXRhX2FsbG9jKHN0cnVjdCBpb19yc3JjX2RhdGEgKmRhdGEsIHVuc2lnbmVkIG5yKTtcbiBcbiBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19maW5kX2J1Zl9ub2RlKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpO1xuLWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuK2ludCBfX2lvX2ltcG9ydF9yZWdfYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0dTY0IGJ1Zl9hZGRyLCBzaXplX3QgbGVuLCBpbnQgZGRpcixcbi1cdFx0XHR1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG4taW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdFx0dW5zaWduZWQgaXNzdWVfZmxhZ3MsIHVuc2lnbmVkIGltcG9ydF9mbGFncyk7XG4raW50IF9faW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcbi1cdFx0XHR1bnNpZ25lZCBucl9pb3ZzLCB1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG4rXHRcdFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MsXG4rXHRcdFx0dW5zaWduZWQgaW1wb3J0X2ZsYWdzKTtcbitcbitzdGF0aWMgaW5saW5lIGludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuK1x0XHRcdFx0ICAgIHU2NCBidWZfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRkaXIsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIF9faW9faW1wb3J0X3JlZ19idWYocmVxLCBpdGVyLCBidWZfYWRkciwgbGVuLCBkZGlyLCBpc3N1ZV9mbGFncywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4rXHRcdFx0XHQgICAgc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIF9faW9faW1wb3J0X3JlZ192ZWMoZGRpciwgaXRlciwgcmVxLCB2ZWMsIG5yX2lvdnMsIGlzc3VlX2ZsYWdzLCAwKTtcbit9XG4rXG4gaW50IGlvX3ByZXBfcmVnX2lvdmVjKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqaXYsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2Vncyk7XG4gXG5AQCAtMTU2LDQgKzE3OCwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW9fYWxsb2NfY2FjaGVfdmVjX2thc2FuKHN0cnVjdCBpb3VfdmVjICppdilcbiBcdFx0aW9fdmVjX2ZyZWUoaXYpO1xuIH1cbiBcbit2b2lkIGlvX2Ryb3BfZG1hYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEpO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19yZXFfZHJvcF9kbWFidWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikpXG4rXHRcdHJldHVybjtcbitcdGlmICghKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfRFJPUF9ETUFCVUYpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9CVUZfTk9ERSkpKVxuK1x0XHRyZXR1cm47XG4rXHRpb19kcm9wX2RtYWJ1Zl9ub2RlKHJlcSk7XG4rfVxuK1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3J3LmMgYi9pb191cmluZy9ydy5jXG5pbmRleCA5NTAzOGNmZGE2MTUzLi4xMWZmN2I1YTExNjQ3IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcncuY1xuKysrIGIvaW9fdXJpbmcvcncuY1xuQEAgLTM4MCw4ICszODAsOCBAQCBzdGF0aWMgaW50IGlvX2luaXRfcndfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyxcbiBcdGlmIChpby1cdTAwM2VieXRlc19kb25lKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldCA9IGlvX2ltcG9ydF9yZWdfYnVmKHJlcSwgXHUwMDI2aW8tXHUwMDNlaXRlciwgcnctXHUwMDNlYWRkciwgcnctXHUwMDNlbGVuLCBkZGlyLFxuLVx0XHRcdFx0aXNzdWVfZmxhZ3MpO1xuK1x0cmV0ID0gX19pb19pbXBvcnRfcmVnX2J1ZihyZXEsIFx1MDAyNmlvLVx1MDAzZWl0ZXIsIHJ3LVx1MDAzZWFkZHIsIHJ3LVx1MDAzZWxlbiwgZGRpcixcbitcdFx0XHRcdCAgaXNzdWVfZmxhZ3MsIElPX1JFR0JVRl9JTVBPUlRfQUxMT1dfRE1BQlVGKTtcbiBcdGlvdl9pdGVyX3NhdmVfc3RhdGUoXHUwMDI2aW8tXHUwMDNlaXRlciwgXHUwMDI2aW8tXHUwMDNlaXRlcl9zdGF0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC01OTEsNiArNTkxLDggQEAgc3RhdGljIHZvaWQgaW9fY29tcGxldGVfcncoc3RydWN0IGtpb2NiICpraW9jYiwgbG9uZyByZXMpXG4gXHRzdHJ1Y3QgaW9fcncgKnJ3ID0gY29udGFpbmVyX29mKGtpb2NiLCBzdHJ1Y3QgaW9fcncsIGtpb2NiKTtcbiBcdHN0cnVjdCBpb19raW9jYiAqcmVxID0gY21kX3RvX2lvX2tpb2NiKHJ3KTtcbiBcbitcdGlvX3JlcV9kcm9wX2RtYWJ1ZihyZXEpO1xuK1xuIFx0X19pb19jb21wbGV0ZV9yd19jb21tb24ocmVxLCByZXMpO1xuIFx0aW9fcmVxX3NldF9yZXMocmVxLCBpb19maXh1cF9yd19yZXMocmVxLCByZXMpLCAwKTtcbiBcdHJlcS1cdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX3JlcV9yd19jb21wbGV0ZTtcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXG5pbmRleCAyNzM5MTliMTYxNjE3Li4xNDZlNWVkODBjN2NkIDEwMDY0NFxuLS0tIGEvbGliL2lvdl9pdGVyLmNcbisrKyBiL2xpYi9pb3ZfaXRlci5jXG5AQCAtNTc1LDcgKzU3NSw4IEBAIHZvaWQgaW92X2l0ZXJfYWR2YW5jZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxuIHtcbiBcdGlmICh1bmxpa2VseShpLVx1MDAzZWNvdW50IFx1MDAzYyBzaXplKSlcbiBcdFx0c2l6ZSA9IGktXHUwMDNlY291bnQ7XG4tXHRpZiAobGlrZWx5KGl0ZXJfaXNfdWJ1ZihpKSkgfHwgdW5saWtlbHkoaW92X2l0ZXJfaXNfeGFycmF5KGkpKSkge1xuK1x0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IHVubGlrZWx5KGlvdl9pdGVyX2lzX3hhcnJheShpKSkgfHxcbitcdCAgICB1bmxpa2VseShpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSkge1xuIFx0XHRpLVx1MDAzZWlvdl9vZmZzZXQgKz0gc2l6ZTtcbiBcdFx0aS1cdTAwM2Vjb3VudCAtPSBzaXplO1xuIFx0fSBlbHNlIGlmIChsaWtlbHkoaXRlcl9pc19pb3ZlYyhpKSB8fCBpb3ZfaXRlcl9pc19rdmVjKGkpKSkge1xuQEAgLTYzMSw3ICs2MzIsOCBAQCB2b2lkIGlvdl9pdGVyX3JldmVydChzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCB1bnJvbGwpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcdHVucm9sbCAtPSBpLVx1MDAzZWlvdl9vZmZzZXQ7XG4tXHRpZiAoaW92X2l0ZXJfaXNfeGFycmF5KGkpIHx8IGl0ZXJfaXNfdWJ1ZihpKSkge1xuK1x0aWYgKGlvdl9pdGVyX2lzX3hhcnJheShpKSB8fCBpdGVyX2lzX3VidWYoaSkgfHxcbitcdCAgICBpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSB7XG4gXHRcdEJVRygpOyAvKiBXZSBzaG91bGQgbmV2ZXIgZ28gYmV5b25kIHRoZSBzdGFydCBvZiB0aGUgc3BlY2lmaWVkXG4gXHRcdFx0KiByYW5nZSBzaW5jZSB3ZSBtaWdodCB0aGVuIGJlIHN0cmF5aW5nIGludG8gcGFnZXMgdGhhdFxuIFx0XHRcdCogYXJlbid0IHBpbm5lZC5cbkBAIC03NzUsNiArNzc3LDIwIEBAIHZvaWQgaW92X2l0ZXJfeGFycmF5KHN0cnVjdCBpb3ZfaXRlciAqaSwgdW5zaWduZWQgaW50IGRpcmVjdGlvbixcbiB9XG4gRVhQT1JUX1NZTUJPTChpb3ZfaXRlcl94YXJyYXkpO1xuIFxuK3ZvaWQgaW92X2l0ZXJfZG1hYnVmX21hcChzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXG4rXHRcdFx0IHN0cnVjdCBkbWFfYnVmX2lvX21hcCAqbWFwLFxuK1x0XHRcdCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpXG4re1xuK1x0V0FSTl9PTihkaXJlY3Rpb24gXHUwMDI2IH4oUkVBRCB8IFdSSVRFKSk7XG4rXHQqaSA9IChzdHJ1Y3QgaW92X2l0ZXIpe1xuK1x0XHQuaXRlcl90eXBlID0gSVRFUl9ETUFCVUZfTUFQLFxuK1x0XHQuZGF0YV9zb3VyY2UgPSBkaXJlY3Rpb24sXG4rXHRcdC5kbWFidWZfbWFwID0gbWFwLFxuK1x0XHQuY291bnQgPSBjb3VudCxcbitcdFx0Lmlvdl9vZmZzZXQgPSBvZmYsXG4rXHR9O1xuK31cbitcbiAvKipcbiAgKiBpb3ZfaXRlcl9kaXNjYXJkIC0gSW5pdGlhbGlzZSBhbiBJL08gaXRlcmF0b3IgdGhhdCBkaXNjYXJkcyBkYXRhXG4gICogQGk6IFRoZSBpdGVyYXRvciB0byBpbml0aWFsaXNlLlxuQEAgLTg0MSw3ICs4NTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBpb3ZfaXRlcl9hbGlnbm1lbnRfYnZlYyhjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4gXG4gdW5zaWduZWQgbG9uZyBpb3ZfaXRlcl9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxuIHtcbi1cdGlmIChsaWtlbHkoaXRlcl9pc191YnVmKGkpKSkge1xuK1x0aWYgKGxpa2VseShpdGVyX2lzX3VidWYoaSkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpIHtcbiBcdFx0c2l6ZV90IHNpemUgPSBpLVx1MDAzZWNvdW50O1xuIFx0XHRpZiAoc2l6ZSlcbiBcdFx0XHRyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWktXHUwMDNldWJ1ZiArIGktXHUwMDNlaW92X29mZnNldCkgfCBzaXplO1xuQEAgLTg3Miw3ICs4ODgsNyBAQCB1bnNpZ25lZCBsb25nIGlvdl9pdGVyX2dhcF9hbGlnbm1lbnQoY29uc3Qgc3RydWN0IGlvdl9pdGVyICppKVxuIFx0c2l6ZV90IHNpemUgPSBpLVx1MDAzZWNvdW50O1xuIFx0dW5zaWduZWQgaztcbiBcbi1cdGlmIChpdGVyX2lzX3VidWYoaSkpXG4rXHRpZiAoaXRlcl9pc191YnVmKGkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKFdBUk5fT04oIWl0ZXJfaXNfaW92ZWMoaSkpKVxuQEAgLTE0NjksMTEgKzE0ODUsMTIgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaW1wb3J0X3VidWYpO1xuIHZvaWQgaW92X2l0ZXJfcmVzdG9yZShzdHJ1Y3QgaW92X2l0ZXIgKmksIHN0cnVjdCBpb3ZfaXRlcl9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0aWYgKFdBUk5fT05fT05DRSghaW92X2l0ZXJfaXNfYnZlYyhpKSBcdTAwMjZcdTAwMjYgIWl0ZXJfaXNfaW92ZWMoaSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICFpdGVyX2lzX3VidWYoaSkpIFx1MDAyNlx1MDAyNiAhaW92X2l0ZXJfaXNfa3ZlYyhpKSlcbitcdFx0XHQgIWl0ZXJfaXNfdWJ1ZihpKSBcdTAwMjZcdTAwMjYgIWlvdl9pdGVyX2lzX2t2ZWMoaSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICFpb3ZfaXRlcl9pc19kbWFidWZfbWFwKGkpKSlcbiBcdFx0cmV0dXJuO1xuIFx0aS1cdTAwM2Vpb3Zfb2Zmc2V0ID0gc3RhdGUtXHUwMDNlaW92X29mZnNldDtcbiBcdGktXHUwMDNlY291bnQgPSBzdGF0ZS1cdTAwM2Vjb3VudDtcbi1cdGlmIChpdGVyX2lzX3VidWYoaSkpXG4rXHRpZiAoaXRlcl9pc191YnVmKGkpIHx8IGlvdl9pdGVyX2lzX2RtYWJ1Zl9tYXAoaSkpXG4gXHRcdHJldHVybjtcbiBcdC8qXG4gXHQgKiBGb3IgdGhlICp2ZWMgaXRlcnMsIG5yX3NlZ3MgKyBpb3YgaXMgY29uc3RhbnQgLSBpZiB3ZSBpbmNyZW1lbnRcbkBAIC0xNjI1LDcgKzE2NDIsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0fVxuIFx0YmkuYmlfaWR4ID0gMDtcbiBcdGJpLmJpX3NpemUgPSBtYXhzaXplO1xuLVx0YmkuYmlfYnZlY19kb25lID0gc2tpcDtcbitcdGJpLmJpX29mZnNldCA9IHNraXA7XG4gXG4gXHRtYXhwYWdlcyA9IHdhbnRfcGFnZXNfYXJyYXkocGFnZXMsIG1heHNpemUsIHNraXAsIG1heHBhZ2VzKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXIuYyBiL25ldC9jZXBoL21lc3Nlbmdlci5jXG5pbmRleCAzNGIzMDk3YjRjN2I5Li45YzFiNmNmOGMzNmZlIDEwMDY0NFxuLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmNcbisrKyBiL25ldC9jZXBoL21lc3Nlbmdlci5jXG5AQCAtNzYyLDcgKzc2Miw3IEBAIHN0YXRpYyBib29sIGNlcGhfbXNnX2RhdGFfYmlvX2FkdmFuY2Uoc3RydWN0IGNlcGhfbXNnX2RhdGFfY3Vyc29yICpjdXJzb3IsXG4gXHRpZiAoIWN1cnNvci1cdTAwM2VyZXNpZClcbiBcdFx0cmV0dXJuIGZhbHNlOyAgIC8qIG5vIG1vcmUgZGF0YSAqL1xuIFxuLVx0aWYgKCFieXRlcyB8fCAoaXQtXHUwMDNlaXRlci5iaV9zaXplIFx1MDAyNlx1MDAyNiBpdC1cdTAwM2VpdGVyLmJpX2J2ZWNfZG9uZSBcdTAwMjZcdTAwMjZcbitcdGlmICghYnl0ZXMgfHwgKGl0LVx1MDAzZWl0ZXIuYmlfc2l6ZSBcdTAwMjZcdTAwMjYgaXQtXHUwMDNlaXRlci5iaV9vZmZzZXQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgICBwYWdlID09IGJpb19pdGVyX3BhZ2UoaXQtXHUwMDNlYmlvLCBpdC1cdTAwM2VpdGVyKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcdC8qIG1vcmUgYnl0ZXMgdG8gcHJvY2VzcyBpbiB0aGlzIHNlZ21lbnQgKi9cbiBcbkBAIC04MTcsNyArODE3LDcgQEAgc3RhdGljIGJvb2wgY2VwaF9tc2dfZGF0YV9idmVjc19hZHZhbmNlKHN0cnVjdCBjZXBoX21zZ19kYXRhX2N1cnNvciAqY3Vyc29yLFxuIFx0aWYgKCFjdXJzb3ItXHUwMDNlcmVzaWQpXG4gXHRcdHJldHVybiBmYWxzZTsgICAvKiBubyBtb3JlIGRhdGEgKi9cbiBcbi1cdGlmICghYnl0ZXMgfHwgKGN1cnNvci1cdTAwM2VidmVjX2l0ZXIuYmlfYnZlY19kb25lIFx1MDAyNlx1MDAyNlxuK1x0aWYgKCFieXRlcyB8fCAoY3Vyc29yLVx1MDAzZWJ2ZWNfaXRlci5iaV9vZmZzZXQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgICBwYWdlID09IGJ2ZWNfaXRlcl9wYWdlKGJ2ZWNzLCBjdXJzb3ItXHUwMDNlYnZlY19pdGVyKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcdC8qIG1vcmUgYnl0ZXMgdG8gcHJvY2VzcyBpbiB0aGlzIHNlZ21lbnQgKi9cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjIxOjE0LjA4NTA5MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE2MTIwNzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBETUEtQnVmIEludGVncmF0aW9uIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW50ZWdyYXRlcyBETUEtYnVmIHN1cHBvcnQgd2l0aCBpb191cmluZyBhbmQgTlZNZS4gIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQgdG91Y2hlcyBzb21lIGNyaXRpY2FsIGFyZWFzOiB0aGUgYmxvY2sgbGF5ZXIsIHRoZSBOVk1lIGRyaXZlciBpdHNlbGYsIGlvX3VyaW5nLCBhbmQgdGhlIGRtYS1idWYgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBhYnNvbHV0ZWx5IG5lZWRzIHRob3JvdWdoIGZ1enppbmcuICBUaGVyZSdzIGEgbG90IG9mIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcyBoZXJlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBrZXJuZWwncyBhcmNoaXRlY3R1cmUuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHNlZW0gdG8gcmV2b2x2ZSBhcm91bmQgbmV3IHN0cnVjdHVyZXMgbGlrZSBgZG1hX2J1Zl9pb19jdHhgIGFuZCBmdW5jdGlvbnMgc3VjaCBhcyBgZG1hX2J1Zl9pb19tYXBgLiBXZSdyZSBhZGRpbmcgYW4gYGluaXRfZG1hX2J1Zl9pb19jdHhgIG1ldGhvZCB0byBgZmlsZV9vcGVyYXRpb25zYCBhbmQgYGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCwgd2hpY2ggaXMgYSBrZXkgaW50ZWdyYXRpb24gcG9pbnQuIFRoZSBgc3RydWN0IGJpb2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gc3VwcG9ydCBgYmlfZG1hYnVmX21hcGAsIGFuZCBhIG5ldyBgUkVRX0RNQUJVRmAgcmVxdWVzdCB0eXBlIGlzIGJlaW5nIGludHJvZHVjZWQuIFdlJ3JlIGFsc28gc2VlaW5nIHRoZSBgc3RydWN0IGlvdl9pdGVyYCBiZWluZyB1cGRhdGVkIHdpdGggYElURVJfRE1BQlVGX01BUGAsIGluZGljYXRpbmcgRE1BLWJ1ZiBzdXBwb3J0IGZvciBzY2F0dGVyLWdhdGhlciBsaXN0cy4gVGhlIGlvX3VyaW5nIGNoYW5nZXMgYXJlIGludGVyZXN0aW5nLCBhbGxvd2luZyBmb3IgcmVnaXN0cmF0aW9uIGFuZCBpbXBvcnRpbmcgb2YgZG1hYnVmcyB3aXRoIGBJT19SRUdCVUZfVFlQRV9ETUFCVUZgLiAgRmluYWxseSwgdGhlIE5WTWUgZHJpdmVyIGNoYW5nZXMgYXBwZWFyIHRvIGJlIGZvY3VzZWQgb24gaW5jb3Jwb3JhdGluZyB0aGUgYGluaXRfZG1hX2J1Zl9pb19jdHhgIGZ1bmN0aW9uIGFuZCBoYW5kbGluZyB0aG9zZSBgUkVRX0RNQUJVRmAgYmlvcy5cblxuR2l2ZW4gdGhlIHNjb3BlLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuICBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGFyZWFzOlxuXG4qICAgKippb191cmluZyAocnNyYy5jKToqKiAgYGlvX3JlZ2lzdGVyX2RtYWJ1ZmAsIGBpb19pbXBvcnRfZG1hYnVmYCwgYW5kIGBpb19kcm9wX2RtYWJ1Zl9ub2RlYCBhcmUgYWxsIGhpZ2gtcHJpb3JpdHkgdGFyZ2V0cy4gIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIGZvciBkbWFidWYgaW50ZWdyYXRpb24gd2l0aGluIGlvX3VyaW5nLlxuKiAgICoqTlZNZSAoZHJpdmVycy9udm1lL2hvc3QvcGNpLmMpOioqICBUaGUgTlZNZSBzaWRlIGlzIGp1c3QgYXMgY3JpdGljYWw6IEkgbmVlZCB0byBmb2N1cyBvbiBgbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwYCwgYG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbGAsIGBudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzYCwgYG52bWVfZG1hX2J1Zl9pb19tYXBgLCBgbnZtZV9kbWFfYnVmX2lvX3VubWFwYCwgYW5kIGBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4YC4gIFRoZXNlIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gRE1BIG1hcHBpbmcsIHNjYXR0ZXItZ2F0aGVyIGxpc3Qgc2V0dXAsIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgTlZNZSBkcml2ZXIuXG4qICAgKipkbWEtYnVmIChkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jKToqKiAgSW4gdGhlIGRtYS1idWYgc3Vic3lzdGVtIGl0c2VsZiwgZnVuY3Rpb25zIGxpa2UgYGRtYV9idWZfaW9faW5pdF9tYXBgLCBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYCwgYGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc2AsIGBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlYCwgYW5kIGBkbWFfYnVmX2lvX2N0eF9jcmVhdGVgIG5lZWQgdG8gYmUgc2NydXRpbml6ZWQgZm9yIHRoZWlyIG1hcHBpbmcgYW5kIHVubWFwcGluZyBiZWhhdmlvdXIuXG5cbkJlZm9yZSBJIGV2ZW4gYmVnaW4gZnV6emluZywgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIHZlcmlmeSB0aGUgZW5hYmxpbmcgZGVwZW5kZW5jaWVzOiBgQ09ORklHX0RNQV9TSEFSRURfQlVGRkVSYCBpcyByZXF1aXJlZC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19OVk1FX0NPUkVgIGFuZCBgQ09ORklHX0JMS19ERVZfTlZNRWAgYXJlIGVuYWJsZWQgZm9yIE5WTWUgUENJLCBhbmQgb2J2aW91c2x5IGBDT05GSUdfSU9fVVJJTkdgIGlzIGNyaXRpY2FsIGZvciB0aGlzIHBhdGNoIHNlcmllcy4gSSdsbCB1c2Ugc29tZSB0b29scyB0byB2ZXJpZnkgdGhlc2Ugb3B0aW9ucyBhcmUgc2V0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ0NzMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzoyMToyNC4yNDYzMDIwMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTM4Njg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6MjE6MjguODA1Njk0NzAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDYwMjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgRE1BLUJVRiBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBETUEtQlVGIGZyYW1ld29yay4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIGBkcml2ZXJzL2RtYS1idWYvTWFrZWZpbGVgIGZpbGUgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGJ1aWxkIGluc3RydWN0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHN1YnN5c3RlbS4gVGhhdCBNYWtlZmlsZSBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgdmFyaW91cyBETUEtQlVGIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUga2VybmVsIGltYWdlLiBJdCBzaG91bGQgcmV2ZWFsIHRoaW5ncyBsaWtlIHdoYXQgZHJpdmVycyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LCBob3cgdGhleSdyZSBidWlsdCwgYW55IG5lY2Vzc2FyeSBpbmNsdWRlIHBhdGhzLCBhbmQgcG90ZW50aWFsbHkgYW55IHNwZWNpYWwgY29tcGlsYXRpb24gZmxhZ3MuIEl0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGRpc3NlY3RpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIERNQS1CVUYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTI2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6MjE6MzIuOTcwMzAwMzU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODA0NzM3OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1hLWJ1Zi1pby5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZT0yPW9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcXFxcXFxuZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlOjM6XFx0IGRtYS1mZW5jZS11bndyYXAubyBkbWEtcmVzdi5vIGRtYS1idWYtbWFwcGluZy5vIGRtYS1idWYtaW8ub1xcbmRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19ETUFCVUZfSEVBUFMpXFx0Kz0gZG1hLWhlYXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzoyMTozOC42NTA3ODAyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTgzMzU4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MgaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgb2YgYGRtYS1idWYtaW8ub2AuIEknbSBvYnNlcnZpbmcgdGhhdCBpdHMgb2JqZWN0IGZpbGUsIGBkbWEtYnVmLWlvLm9gLCBpcyBidWlsdCBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IGEgY29uZGl0aW9uYWwgY2hlY2ssIGFzIGxvbmcgYXMgdGhlIHBhcmVudCBkaXJlY3RvcnksIGBkcml2ZXJzL2RtYS1idWZgLCBpcyBjb21waWxlZC5cblxuKipJbnZlc3RpZ2F0aW5nIENvbXBpbGF0aW9uIERlcGVuZGVuY2llcyoqXG5cblNvLCB0aGUga2V5IGhlcmUgaXMgdG8gY29uZmlybSB0aGlzIGluIHRoZSBgZHJpdmVycy9NYWtlZmlsZWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgZG1hLWJ1ZmAgcHJlc2VuY2UgdHJpZ2dlcnMgdGhlIGJ1aWxkIG9mIGBkbWEtYnVmLWlvLm9gLiBJdCdzIGxpa2VseSB0aGF0IGEgdmFyaWFibGUgb3IgZGVwZW5kZW5jeSBkZWZpbml0aW9uIGluIHRoYXQgTWFrZWZpbGUgZ292ZXJucyB0aGlzIGJlaGF2aW9yLiBMZXQncyBkaWcgaW50byB0aGF0IE1ha2VmaWxlIGFuZCBzZWUgaG93IHRoaW5ncyBhcmUgY29uc3RydWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgbW9yZSBzdWJ0bGUgZGVwZW5kZW5jeSBvciBhIGNvbmRpdGlvbmFsIGNvbnN0cnVjdCB3aGljaCB3aWxsIGFmZmVjdCB0aGUgY29tcGlsYXRpb24gYW5kIGxpbmtpbmcgcHJvY2Vzcy4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGlzIGhhcHBlbnMgYnkgZGVmYXVsdCBzbyBJIGFtIGNvbmZpcm1pbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYyNTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzoyMTo0Mi4yNjkxMTg2NjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzMzOTUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipkbWEtYnVmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvTWFrZWZpbGU9Nzg9b2JqLXlcXHRcXHRcXHRcXHQrPSBkYXgvXFxuZHJpdmVycy9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIpICs9IGRtYS1idWYvXFxuZHJpdmVycy9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfTlVCVVMpXFx0XFx0Kz0gbnVidXMvXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGU6MjpvYmoteSA6PSBkbWEtYnVmLm8gZG1hLWZlbmNlLm8gZG1hLWZlbmNlLWFycmF5Lm8gZG1hLWZlbmNlLWNoYWluLm8gXFxcXFxcbmRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZS0zLVxcdCBkbWEtZmVuY2UtdW53cmFwLm8gZG1hLXJlc3YubyBkbWEtYnVmLW1hcHBpbmcubyBkbWEtYnVmLWlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6MjE6NDcuMTUyNDYyNjc3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3MDc0OTgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTlZNZSBDb21wYXRpYmlsaXR5IGZvciBTaGFyZWQgRE1BIEJ1ZmZlcnMqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIHRvIG1lIHRoYXQgd2UncmUgbG9va2luZyBhdCBzb21lIHNvcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIGxpa2VseSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgZGlyZWN0IG1lbW9yeSBhY2Nlc3MuIFRoZSBpbW1lZGlhdGUgaW1wbGljYXRpb24gaXMgdGhhdCB3ZSdyZSBwcm9iYWJseSB0cnlpbmcgdG8gZmFjaWxpdGF0ZSB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBvciBvcHRpbWl6ZSBkYXRhIHRyYW5zZmVyIGJldHdlZW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IGJldHdlZW4gYSBkZXZpY2UgYW5kIHRoZSBob3N0IENQVSBvciBiZXR3ZWVuIG11bHRpcGxlIGRldmljZXMuXG5cblNpbmNlIHdlIG5lZWQgYENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUmAgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3aWxsIGludGVyYWN0IHdpdGggYENPTkZJR19CTEtfREVWX05WTUVgLiBOb3cgdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyB3ZSBuZWVkIHRvIGtub3cgdGhlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uIG9mIE5WTWUgZGlza3MuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoZSBOVk1lIGRyaXZlciwgb3IgaXRzIHN1cHBvcnRpbmcgaW5mcmFzdHJ1Y3R1cmUsIHBsYXlzIG5pY2VseSB3aXRoIHRoZSBzaGFyZWQgYnVmZmVyIGNvbmNlcHQuIERvZXMgaXQgdXNlIERNQT8gRG9lcyBpdCBhbHJlYWR5IGhhdmUgaXRzIG93biBidWZmZXJpbmcgbWVjaGFuaXNtcyB0aGF0IG1pZ2h0IGNvbmZsaWN0PyBBcmUgdGhlcmUgYW55IGtub3duIGlzc3VlcyBvciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBuZWVkZWQgd2hlbiB1c2luZyBib3RoPyBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIGF2b2lkaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgZXZlbiBzeXN0ZW0gaW5zdGFiaWxpdHkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHRoZSBOVk1lIHN1YnN5c3RlbSBpcyBhbHJlYWR5IGhhbmRsaW5nIERNQSBpbiBhIHdheSB0aGF04oCZcyBjb21wYXRpYmxlLCBvciBpZiBtb2RpZmljYXRpb25zIGFyZSBuZWNlc3NhcnkgdG8gZW5zdXJlIHByb3BlciBpbnRlZ3JhdGlvbiB3aXRoIHNoYXJlZCBidWZmZXJzLiBJdCBpcyBhIHZlcnkgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3MDQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzoyMTo1MS42MjMyMTQ5NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjA5MTI5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlZNRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9LY29uZmlnPTI9Y29uZmlnIE5WTUVfQ09SRVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy00LVxcbmRyaXZlcnMvbnZtZS9ob3N0L0tjb25maWc6NTpjb25maWcgQkxLX0RFVl9OVk1FXFxuZHJpdmVycy9udm1lL2hvc3QvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJOVk0gRXhwcmVzcyBibG9jayBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDAzOjIxOjU1Ljg0NDEzODAxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0MTUwMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBDT05GSUdfSU9fVVJJTkdgKipcblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gRmlyc3QsIEknbSB0aGlua2luZyBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdHVzIG9mIGBDT05GSUdfSU9fVVJJTkdgLiBXZSBrbm93IGl0J3MgZnVuZGFtZW50YWwgdG8gbGV2ZXJhZ2luZyB0aGUga2VybmVsJ3MgaW9fdXJpbmcgaW50ZXJmYWNlLCBhbmQgd2l0aG91dCBpdCBlbmFibGVkLCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGlzIG1vb3QuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXQncyBlaXRoZXIgYnVpbHQtaW4gKGxpa2VseSwgZ2l2ZW4gdGhlIGNvbnRleHQpIG9yIGF0IGxlYXN0IGNvbmZpZ3VyZWQgYXMgYSBtb2R1bGUuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIHNob3VsZCBzdWZmaWNlLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgaXTigJlzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCB0aGVzZSBkYXlzLCBidXQgaXTigJlzIGFsd2F5cyBiZXR0ZXIgdG8gcnVsZSBvdXQgdGhlIGJhc2ljIHRoaW5ncyBmaXJzdC4gVGhhdCB3YXkgSSBkb24ndCB3YXN0ZSB0aW1lIHRyb3VibGVzaG9vdGluZyBiYXNlZCBvbiBhc3N1bXB0aW9ucy4gQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2hvd3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MTMyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6MjE6NTkuNTE4MjkxOTg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzg5NjkxODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNC1cXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxNi1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzNi1cXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5MzgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzoyMjowMi45MDc5OTE5MzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyOTE3MTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBOVk1lIGRtYWJ1ZiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIG9idmlvdXMuIEFoLCBoZXJlIHdlIGdvLCBsb29raW5nIGludG8gdGhlIGBkcml2ZXJzL252bWUvaG9zdC9wY2kuY2AgZmlsZSByZXZlYWxzIHRoYXQgYENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUmAgaXMgYSByZXF1aXJlbWVudCBmb3IgTlZNZSBkbWFidWYgc3VwcG9ydC4gR29vZCB0byBrbm93LCB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIHdpdGhpbiB0aGlzIE5WTWUgZG1hYnVmIGltcGxlbWVudGF0aW9uLiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTpcblxuKiAgIGBkbWFfYnVmX2lvX2luaXRfbWFwYFxuKiAgIGBkbWFfYnVmX2lvX2NyZWF0ZV9tYXBgXG4qICAgYGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5nc2BcbiogICBgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZWBcbiogICBgZG1hX2J1Zl9pb19jdHhfY3JlYXRlYFxuKiAgIGBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXBgXG4qICAgYG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbGBcbiogICBgbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50c2BcbiogICBgbnZtZV9kbWFfYnVmX2lvX21hcGBcbiogICBgbnZtZV9kbWFfYnVmX2lvX3VubWFwYFxuKiAgIGBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4YFxuKiAgIGBpb19yZWdpc3Rlcl9kbWFidWZgXG4qICAgYGlvX2ltcG9ydF9kbWFidWZgXG4qICAgYGlvX2Ryb3BfZG1hYnVmX25vZGVgXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgZXhpc3QgaW4gdGhlIGNvZGUgYmFzZSBhbmQgYXJlbid0IGp1c3QgZGVmaW5lZCBhcyBzdGF0aWMgaW5saW5lLiBHb3R0YSBtYWtlIHN1cmUgSSdtIGRlYWxpbmcgd2l0aCB0aGUgcmVhbCB0aGluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzY0OCwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6MjI6MDkuOTM3MTY2MDQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDIzMjYzMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihkbWFfYnVmX2lvX2luaXRfbWFwfGRtYV9idWZfaW9fY3JlYXRlX21hcHxkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3N8ZG1hX2J1Zl9pb19jdHhfcmVsZWFzZXxkbWFfYnVmX2lvX2N0eF9jcmVhdGV8bnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwfG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbHxudm1lX3BjaV9kbWFidWZfc2dsX25lbnRzfG52bWVfZG1hX2J1Zl9pb19tYXB8bnZtZV9kbWFfYnVmX2lvX3VubWFwfG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHh8aW9fcmVnaXN0ZXJfZG1hYnVmfGlvX2ltcG9ydF9kbWFidWZ8aW9fZHJvcF9kbWFidWZfbm9kZSlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYz04Nj1zdGF0aWMgdm9pZCBkbWFfYnVmX2lvX21hcF9yZWZzX3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMtOTQtXFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYzo5NTppbnQgZG1hX2J1Zl9pb19pbml0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApXFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy05Ni17XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTExNi19XFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYzoxMTc6RVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9pb19pbml0X21hcCwgXFxcIkRNQV9CVUZcXFwiKTtcXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTExOC1cXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jOjExOTpzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKmRtYV9idWZfaW9fY3JlYXRlX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTEyMC17XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jPTE2OT1zdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2Ryb3BfbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yMDItXFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYzoyMDM6dm9pZCBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfaW9fY3R4ICpjdHgpXFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yMDQte1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yMDYtfVxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmM6MjA3OkVYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncywgXFxcIkRNQV9CVUZcXFwiKTtcXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTIwOC1cXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jOjIwOTpzdGF0aWMgdm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMtMjEwLXtcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMtMjMzLVxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmM6MjM0OnZvaWQgZG1hX2J1Zl9pb19jdHhfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eClcXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTIzNS17XFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTIzOS1cXHQgKi9cXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jOjI0MDpcXHRJTklUX1dPUksoXFx1MDAyNmN0eC1cXHUwMDNlcmVsZWFzZV93b3JrLCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlX3dvcmspO1xcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLWlvLmMtMjQxLVxcdHF1ZXVlX3dvcmsoc3lzdGVtX3dxLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZWxlYXNlX3dvcmspO1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYy0yNDMtXFxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYtaW8uYzoyNDQ6aW50IGRtYV9idWZfaW9fY3R4X2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi1pby5jLTI0NS1cXHRcXHRcXHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTkyMT1zdGF0aWMgdm9pZCBudm1lX3JxX2NsZWFuX2RtYWJ1Zl9tYXAoc3RydWN0IG52bWVfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy05MzEtXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6OTMyOnN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtOTMzLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG52bWVfcXVldWUgKm52bWVxKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MTMwND1zdGF0aWMgdm9pZCBudm1lX3BjaV9zZ2xfc2V0X3NlZyhzdHJ1Y3QgbnZtZV9zZ2xfZGVzYyAqc2dlLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTMxMS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxMzEyOnN0YXRpYyB1bnNpZ25lZCBpbnQgbnZtZV9wY2lfZG1hYnVmX3NnbF9uZW50cyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTEzMTMtXFx0XFx0XFx0XFx0XFx0ICAgICAgZG1hX2FkZHJfdCAqZmlyc3RfZG1hLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTM3MS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxMzcyOnN0YXRpYyBibGtfc3RhdHVzX3QgbnZtZV9ycV9zZXR1cF9kbWFidWZfc2dsKHN0cnVjdCByZXF1ZXN0ICpyZXEsXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTM3My1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBudm1lX3F1ZXVlICpudm1lcSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jPTE1NDk9c3RhdGljIGJsa19zdGF0dXNfdCBudm1lX21hcF9kYXRhKHN0cnVjdCByZXF1ZXN0ICpyZXEpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xNTYzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjE1NjQ6XFx0XFx0XFx0ZW50cmllcyA9IG52bWVfcGNpX2RtYWJ1Zl9zZ2xfbmVudHMocmVxLCBcXHUwMDI2Zmlyc3RfZG1hLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTE1NjUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZmaXJzdF9sZW4pO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTU2Ny1cXHRcXHRcXHRpZiAodXNlX3NnbCA9PSBTR0xfRk9SQ0VEKSB7XFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MTU2ODpcXHRcXHRcXHRcXHRyZXQgPSBudm1lX3JxX3NldHVwX2RtYWJ1Zl9zZ2wocmVxLCBudm1lcSxcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0xNTY5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudHJpZXMsIGZpcnN0X2RtYSwgZmlyc3RfbGVuKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTE1NzUtXFx0XFx0XFx0ICAgIHNnbF90aHJlc2hvbGQpIHtcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxNTc2OlxcdFxcdFxcdFxcdHJldCA9IG52bWVfcnFfc2V0dXBfZG1hYnVmX3NnbChyZXEsIG52bWVxLFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTE1NzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZW50cmllcywgZmlyc3RfZG1hLCBmaXJzdF9sZW4pO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTU4Mi1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoxNTgzOlxcdFxcdHJldHVybiBudm1lX3JxX3NldHVwX2RtYWJ1Zl9tYXAocmVxLCBudm1lcSk7XFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMTU4NC1cXHR9XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYz0yNjA1PXN0YXRpYyB2b2lkIG52bWVfZG1hYnVmX2ludmFsaWRhdGVfbWFwcGluZ3Moc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjYwOC1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoyNjA5OlxcdGRtYV9idWZfaW9faW52YWxpZGF0ZV9tYXBwaW5ncyhjdHgpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI2MTAtfVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MjYxMj1jb25zdCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG52bWVfZG1hYnVmX2ltcG9ydGVyX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI2MTYtXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MjYxNzpzdGF0aWMgc3RydWN0IGRtYV9idWZfaW9fbWFwICpudm1lX2RtYV9idWZfaW9fbWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI2MTgte1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmMtMjY1NS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoyNjU2OlxcdHJldCA9IGRtYV9idWZfaW9faW5pdF9tYXAoY3R4LCBcXHUwMDI2bWFwLVxcdTAwM2ViYXNlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNjU3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNjY4LVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jOjI2Njk6c3RhdGljIHZvaWQgbnZtZV9kbWFfYnVmX2lvX3VubWFwKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4LFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI2NzAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcF9iYXNlKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9MjY4Nz1jb25zdCBzdHJ1Y3QgZG1hX2J1Zl9pb19vcHMgbnZtZV9kbWFfYnVmX2lvX29wcyA9IHtcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzoyNjg4OlxcdC5tYXBcXHRcXHQ9IG52bWVfZG1hX2J1Zl9pb19tYXAsXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MjY4OTpcXHQudW5tYXBcXHRcXHQ9IG52bWVfZG1hX2J1Zl9pb191bm1hcCxcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNjkwLVxcdC5yZWxlYXNlXFx0PSBudm1lX2RtYV9idWZfaW9fcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTI2OTItXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM6MjY5MzpzdGF0aWMgaW50IG52bWVfcGNpX2luaXRfZG1hX2J1Zl9pb19jdHgoc3RydWN0IG52bWVfY3RybCAqY3RybCxcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy0yNjk0LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvcGNpLmM9Mzk4OT1zdGF0aWMgY29uc3Qgc3RydWN0IG52bWVfY3RybF9vcHMgbnZtZV9wY2lfY3RybF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYy00MDA0LSNpZiBkZWZpbmVkKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUilcXG5kcml2ZXJzL252bWUvaG9zdC9wY2kuYzo0MDA1OlxcdC5pbml0X2RtYV9idWZfaW9fY3R4XFx0PSBudm1lX3BjaV9pbml0X2RtYV9idWZfaW9fY3R4LFxcbmRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jLTQwMDYtI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaD00Mz1zdHJ1Y3QgZG1hX2J1Zl9pb19jdHgge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmgtNTYtXFxuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmg6NTc6aW50IGRtYV9idWZfaW9fY3R4X2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaC01OC1cXHRcXHRcXHQgICBzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oLTYwLVxcdFxcdFxcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XFxuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmg6NjE6dm9pZCBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaC02Mi1cXG5pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaDo2MzpzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKmRtYV9idWZfaW9fY3JlYXRlX21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCk7XFxuaW5jbHVkZS9saW51eC9kbWEtYnVmLWlvLmgtNjQtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaD03OT1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX2J1Zl9pb19tYXBfZHJvcChzdHJ1Y3QgZG1hX2J1Zl9pb19tYXAgKm1hcClcXG4tLVxcbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oLTg3LVxcbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oOjg4OnZvaWQgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzKHN0cnVjdCBkbWFfYnVmX2lvX2N0eCAqY3R4KTtcXG5pbmNsdWRlL2xpbnV4L2RtYS1idWYtaW8uaDo4OTppbnQgZG1hX2J1Zl9pb19pbml0X21hcChzdHJ1Y3QgZG1hX2J1Zl9pb19jdHggKmN0eCwgc3RydWN0IGRtYV9idWZfaW9fbWFwICptYXApO1xcbmluY2x1ZGUvbGludXgvZG1hLWJ1Zi1pby5oLTkwLVxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jPTg5MD1zdGF0aWMgdm9pZCBpb19yZWxlYXNlX3JlZ19kbWFidWYodm9pZCAqcHJpdilcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy04OTQtXFx0ZnB1dChkYi1cXHUwMDNldGFyZ2V0X2ZpbGUpO1xcbmlvX3VyaW5nL3JzcmMuYzo4OTU6XFx0ZG1hX2J1Zl9pb19jdHhfcmVsZWFzZShcXHUwMDI2ZGItXFx1MDAzZWN0eCk7XFxuaW9fdXJpbmcvcnNyYy5jLTg5Ni19XFxuaW9fdXJpbmcvcnNyYy5jLTg5Ny1cXG5pb191cmluZy9yc3JjLmM6ODk4OnN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19yZWdpc3Rlcl9kbWFidWYoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuaW9fdXJpbmcvcnNyYy5jLTg5OS1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfcmVnYnVmX2Rlc2MgKmRlc2MpXFxuLS1cXG5pb191cmluZy9yc3JjLmMtOTQxLVxcbmlvX3VyaW5nL3JzcmMuYzo5NDI6XFx0cmV0ID0gZG1hX2J1Zl9pb19jdHhfY3JlYXRlKHRhcmdldF9maWxlLCBcXHUwMDI2cmVnYnVmLVxcdTAwM2VjdHgsIGRtYWJ1ZixcXG5pb191cmluZy9yc3JjLmMtOTQzLVxcdFxcdFxcdFxcdCAgICBETUFfQklESVJFQ1RJT05BTCk7XFxuLS1cXG5pb191cmluZy9yc3JjLmM9OTc0PXN0YXRpYyBzdHJ1Y3QgaW9fcnNyY19ub2RlICppb19zcWVfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTk5Mi1cXHRpZiAoZGVzYy1cXHUwMDNldHlwZSA9PSBJT19SRUdCVUZfVFlQRV9ETUFCVUYpXFxuaW9fdXJpbmcvcnNyYy5jOjk5MzpcXHRcXHRyZXR1cm4gaW9fcmVnaXN0ZXJfZG1hYnVmKGN0eCwgZGVzYyk7XFxuaW9fdXJpbmcvcnNyYy5jLTk5NC1cXG4tLVxcbmlvX3VyaW5nL3JzcmMuYz0xMjU5PXN0YXRpYyBpbnQgaW9faW1wb3J0X2tidWYoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy0xMjY4LVxcbmlvX3VyaW5nL3JzcmMuYzoxMjY5OnZvaWQgaW9fZHJvcF9kbWFidWZfbm9kZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy9yc3JjLmMtMTI3MC17XFxuLS1cXG5pb191cmluZy9yc3JjLmMtMTI4My1cXG5pb191cmluZy9yc3JjLmM6MTI4NDpzdGF0aWMgaW50IGlvX2ltcG9ydF9kbWFidWYoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvcnNyYy5jLTEyODUtXFx0XFx0XFx0ICAgaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy0xMzA4LVxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbmlvX3VyaW5nL3JzcmMuYzoxMzA5OlxcdFxcdG1hcCA9IGRtYV9idWZfaW9fY3JlYXRlX21hcChcXHUwMDI2ZGItXFx1MDAzZWN0eCk7XFxuaW9fdXJpbmcvcnNyYy5jLTEzMTAtXFx0XFx0aWYgKElTX0VSUihtYXApKVxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jPTEzMjE9c3RhdGljIGludCBpb19pbXBvcnRfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtMTM0OC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5pb191cmluZy9yc3JjLmM6MTM0OTpcXHRcXHRyZXR1cm4gaW9faW1wb3J0X2RtYWJ1ZihyZXEsIGRkaXIsIGl0ZXIsIGltdSwgbGVuLCBvZmZzZXQsXFxuaW9fdXJpbmcvcnNyYy5jLTEzNTAtXFx0XFx0XFx0XFx0XFx0aXNzdWVfZmxhZ3MpO1xcbi0tXFxuaW9fdXJpbmcvcnNyYy5oPTE3NT1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYWxsb2NfY2FjaGVfdmVjX2thc2FuKHN0cnVjdCBpb3VfdmVjICppdilcXG4tLVxcbmlvX3VyaW5nL3JzcmMuaC0xODAtXFxuaW9fdXJpbmcvcnNyYy5oOjE4MTp2b2lkIGlvX2Ryb3BfZG1hYnVmX25vZGUoc3RydWN0IGlvX2tpb2NiICpyZXEpO1xcbmlvX3VyaW5nL3JzcmMuaC0xODItXFxuaW9fdXJpbmcvcnNyYy5oPTE4Mz1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcmVxX2Ryb3BfZG1hYnVmKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbi0tXFxuaW9fdXJpbmcvcnNyYy5oLTE5MC1cXHRcXHRyZXR1cm47XFxuaW9fdXJpbmcvcnNyYy5oOjE5MTpcXHRpb19kcm9wX2RtYWJ1Zl9ub2RlKHJlcSk7XFxuaW9fdXJpbmcvcnNyYy5oLTE5Mi19XFxuLS1cXG5pb191cmluZy96Y3J4LmM9MTEyPXN0YXRpYyB2b2lkIGlvX3JlbGVhc2VfZG1hYnVmKHN0cnVjdCBpb196Y3J4X21lbSAqbWVtKVxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTEyOS1cXG5pb191cmluZy96Y3J4LmM6MTMwOnN0YXRpYyBpbnQgaW9faW1wb3J0X2RtYWJ1ZihzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG5pb191cmluZy96Y3J4LmMtMTMxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW9femNyeF9tZW0gKm1lbSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYz0yNjg9c3RhdGljIGludCBpb19pbXBvcnRfYXJlYShzdHJ1Y3QgaW9femNyeF9pZnEgKmlmcSxcXG4tLVxcbmlvX3VyaW5nL3pjcnguYy0yODctXFx0aWYgKGFyZWFfcmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19aQ1JYX0FSRUFfRE1BQlVGKVxcbmlvX3VyaW5nL3pjcnguYzoyODg6XFx0XFx0cmV0dXJuIGlvX2ltcG9ydF9kbWFidWYoaWZxLCBtZW0sIGFyZWFfcmVnKTtcXG5pb191cmluZy96Y3J4LmMtMjg5LVxcdHJldHVybiBpb19pbXBvcnRfdW1lbShpZnEsIG1lbSwgYXJlYV9yZWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwMzoyMjoxMy45NjA0ODIzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE2NTE3NTkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBETUEtQlVGIFJlbGF0ZWQgQVBJIEVudHJ5cG9pbnRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlbnVtZXJhdGUgdGhlIHJlbGV2YW50IERNQS1CVUYgQVBJIGVudHJ5cG9pbnRzLiBUaGUgaW5pdGlhbCBhcHByb2FjaCBpcyB0byBmaWx0ZXIgb3V0IHRoZSBzdGF0aWMgYW5kIGlubGluZWQgZnVuY3Rpb25zLiBCdXQgSSBuZWVkIHRvIHJlZmluZSB0aGF0IGJlY2F1c2UgZXZlbiBpZiBhIGZ1bmN0aW9uIGlzIHN0YXRpYywgaXQgY2FuIHN0aWxsIGJlIGEgY3JpdGljYWwgQVBJIGVudHJ5cG9pbnQgd2hlbiBpdCdzIHJlZ2lzdGVyZWQgaW4gb3BzLlxuXG5Jbml0aWFsbHksIEkgaWRlbnRpZmllZCB0aGVzZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHM6XG4qICAgYGRtYV9idWZfaW9faW5pdF9tYXBgXG4qICAgYGRtYV9idWZfaW9fY3JlYXRlX21hcGBcbiogICBgZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzYFxuKiAgIGBkbWFfYnVmX2lvX2N0eF9yZWxlYXNlYFxuKiAgIGBkbWFfYnVmX2lvX2N0eF9jcmVhdGVgXG4qICAgYGlvX2Ryb3BfZG1hYnVmX25vZGVgXG5cblRoZW4gSSBjb25zaWRlcmVkIE5WTWUgYW5kIHJlYWxpemVkIGl0cyBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYnV0IHJlZ2lzdGVyZWQgYXMgb3BzLiBBbHRob3VnaCBgbnZtZV9ycV9zZXR1cF9kbWFidWZfbWFwYCBpcyBzdGF0aWMsIGl0J3Mgc3RpbGwgc2lnbmlmaWNhbnQuXG5cbkkgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgc3RhdGljIGFzcGVjdC4gRm9yIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIEkgc2VlIHRoYXQgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzLCBgaW9fcmVnaXN0ZXJfZG1hYnVmYCBhbmQgYGlvX2ltcG9ydF9kbWFidWZgLCBhcmUgc3RhdGljLiBIb3dldmVyLCB0aGVpciBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZSBnbG9iYWwgaGVscGVyIGZ1bmN0aW9ucyBgX19pb19pbXBvcnRfcmVnX2J1ZmAsIGBfX2lvX2ltcG9ydF9yZWdfdmVjYCBhbmQgYGlvX3NxZV9idWZmZXJzX3JlZ2lzdGVyYC4gU28gSSBzaG91bGQgbGlzdCB0aGVtLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGxpc3Qgb2YgZW50cnlwb2ludHMgaXM6XG5cbiogICBgZG1hX2J1Zl9pb19pbml0X21hcGBcbiogICBgZG1hX2J1Zl9pb19jcmVhdGVfbWFwYFxuKiAgIGBkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3NgXG4qICAgYGRtYV9idWZfaW9fY3R4X3JlbGVhc2VgXG4qICAgYGRtYV9idWZfaW9fY3R4X2NyZWF0ZWBcbiogICBgaW9fZHJvcF9kbWFidWZfbm9kZWBcbiogICBgX19pb19pbXBvcnRfcmVnX2J1ZmBcbiogICBgX19pb19pbXBvcnRfcmVnX3ZlY2BcbiAgICBcblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG4qICAgYERNQV9TSEFSRURfQlVGRkVSYCBpcyBhIGJvb2wuXG4qICAgYE5WTUVfQ09SRWAgKGltcGxpZWQgd2l0aCBgQkxLX0RFVl9OVk1FYClcbiogICBgQkxLX0RFVl9OVk1FYCBpcyBhIHRyaXN0YXRlLlxuKiAgIGBJT19VUklOR2AgaXMgYSBib29sLlxuXG5Ob3cgSSB0aGluayBJIGhhdmUgYSBzb2xpZCBhcHByb2FjaCB0byBnZXQgdGhlIHJlc3VsdHMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY4NiwiT3V0cHV0VG9rZW5zIjoyMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDM6MjI6MjUuMTI1NjYxMTM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMTM1MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiQkxLX0RFVl9OVk1FXCIsXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRtYV9idWZfaW9faW5pdF9tYXBcIixcbiAgICBcImRtYV9idWZfaW9fY3JlYXRlX21hcFwiLFxuICAgIFwiZG1hX2J1Zl9pb19pbnZhbGlkYXRlX21hcHBpbmdzXCIsXG4gICAgXCJkbWFfYnVmX2lvX2N0eF9yZWxlYXNlXCIsXG4gICAgXCJkbWFfYnVmX2lvX2N0eF9jcmVhdGVcIixcbiAgICBcImlvX2Ryb3BfZG1hYnVmX25vZGVcIixcbiAgICBcIl9faW9faW1wb3J0X3JlZ19idWZcIixcbiAgICBcIl9faW9faW1wb3J0X3JlZ192ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIERNQS1idWYgc3VwcG9ydCBmb3IgaW9fdXJpbmcgYW5kIE5WTWUgYmxvY2sgZGV2aWNlcy4gSXQgYWRkcyBuZXcgY29yZSBpbmZyYXN0cnVjdHVyZSBpbiBkbWEtYnVmLWlvLmMsIG1vZGlmaWVzIGlvX3VyaW5nIHRvIHN1cHBvcnQgcmVnaXN0ZXJpbmcgYW5kIGltcG9ydGluZyBkbWFidWZzLCBhbmQgdXBkYXRlcyB0aGUgTlZNZSBQQ0kgZHJpdmVyIHRvIGhhbmRsZSBkbWFidWYtYmFja2VkIHJlcXVlc3RzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJCTEtfREVWX05WTUVcIixcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG1hX2J1Zl9pb19pbml0X21hcFwiLFxuICAgIFwiZG1hX2J1Zl9pb19jcmVhdGVfbWFwXCIsXG4gICAgXCJkbWFfYnVmX2lvX2ludmFsaWRhdGVfbWFwcGluZ3NcIixcbiAgICBcImRtYV9idWZfaW9fY3R4X3JlbGVhc2VcIixcbiAgICBcImRtYV9idWZfaW9fY3R4X2NyZWF0ZVwiLFxuICAgIFwiaW9fZHJvcF9kbWFidWZfbm9kZVwiLFxuICAgIFwiX19pb19pbXBvcnRfcmVnX2J1ZlwiLFxuICAgIFwiX19pb19pbXBvcnRfcmVnX3ZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgRE1BLWJ1ZiBzdXBwb3J0IGZvciBpb191cmluZyBhbmQgTlZNZSBibG9jayBkZXZpY2VzLiBJdCBhZGRzIG5ldyBjb3JlIGluZnJhc3RydWN0dXJlIGluIGRtYS1idWYtaW8uYywgbW9kaWZpZXMgaW9fdXJpbmcgdG8gc3VwcG9ydCByZWdpc3RlcmluZyBhbmQgaW1wb3J0aW5nIGRtYWJ1ZnMsIGFuZCB1cGRhdGVzIHRoZSBOVk1lIFBDSSBkcml2ZXIgdG8gaGFuZGxlIGRtYWJ1Zi1iYWNrZWQgcmVxdWVzdHMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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:nil,}