Name: series-workflowp8msq Phase: Succeeded StartedAt: 2026-08-21 19:10:36 +0000 UTC FinishedAt: 2026-08-21 22:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[0] Phase: Succeeded StartedAt: 2026-08-21 19:10:36 +0000 UTC FinishedAt: 2026-08-21 19:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 19:10:36 +0000 UTC FinishedAt: 2026-08-21 19:13:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "98f21c54f99519329c18e2625b0ea6db14524d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMCG", "DMA_CMA", "DMABUF_HEAPS", "DMABUF_HEAPS_CMA", "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "98f21c54f99519329c18e2625b0ea6db14524d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMCG", "DMA_CMA", "DMABUF_HEAPS", "DMABUF_HEAPS_CMA", "HUGETLBFS" ], "series_id": "67a74c8b-1377-4278-8653-7f4bfbfa1f94" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_charge_cma", "mem_cgroup_uncharge_cma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE5OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtETUFfQ01BJiMzNDssCiAgICAmIzM0O0RNQUJVRl9IRUFQUyYjMzQ7LAogICAgJiMzNDtETUFCVUZfSEVBUFNfQ01BJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2NtYSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VuY2hhcmdlX2NtYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgdG8gYWNjb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgaW52b2x2ZTpcbjEuIEFkZGluZyBgY21hX2NvdW50ZXJzYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cbjIuIEFkZGluZyBgY21hX2RmbF9maWxlc2AgYXJyYXkgZm9yIGNncm91cGZzLCB3aGljaCBpcyBhbHNvIGFsbG9jYXRlZCB1c2luZyBga2NhbGxvY2AgKHplcm8taW5pdGlhbGl6ZWQpLlxuMy4gRXhwb3NpbmcgQ01BIHVzYWdlIGFuZCBsaW1pdHMgdmlhIGNncm91cGZzIGZpbGVzIChgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLmN1cnJlbnRgIGFuZCBgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heGApLiBUaGVzZSBmaWxlcyB1c2UgYHNlcV9wcmludGZgIGFuZCBgc2VxX3B1dHNfbWVtY2dfdHVuYWJsZWAgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLCBtZWFuaW5nIG5vIHJhdyBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjQuIE1vZGlmeWluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZSBwYXRocyB0byBjaGFyZ2UgYW5kIHVuY2hhcmdlIG1lbW9yeSBjZ3JvdXBzLiBBbGwgbG9jYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlc2UgcGF0aHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHBhc3NlZCBhcm91bmQuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGNtYV9jb3VudGVyc2AsIHVzZS1hZnRlci1mcmVlIG9mIGBtZW1jZ2AsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2Agd2hpY2ggZW5hYmxlcyBhY2NvdW50aW5nIG9mIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJiMzOTtzIG92ZXJhbGwgbWVtb3J5IHVzYWdlLiBJdCBhZGRzIG5ldyBjb3JlIGZ1bmN0aW9ucyBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCB0byBoYW5kbGUgdGhlIGFjY291bnRpbmcgZHVyaW5nIENNQSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQ01BIGFsbG9jYXRpb25zIChlLmcuLCB1c2luZyBETUEtQlVGIGhlYXBzIG9yIGh1Z2V0bGIpIHdoZW4gdGhlIG1vdW50IG9wdGlvbiBpcyBlbmFibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIENNQSBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzOGRlNzQxODEzZWI0NzZhOWQ1MjBjZmQwOTZjYTFhMGExNTE4NDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxOToxMjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbmluZGV4IGFlZDE5NWE3MWNiZjEuLjM5ODcxYTdhMDhhOGQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTI0Niw2ICYjNDM7MjQ2LDI2IEBAIGNncm91cCB2MiBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zLlxuICAgICAgICAgICB3aWxsIG5vdCBiZSB0cmFja2VkIGJ5IHRoZSBtZW1vcnkgY29udHJvbGxlciAoZXZlbiBpZiBjZ3JvdXBcbiAgICAgICAgICAgdjIgaXMgcmVtb3VudGVkIGxhdGVyIG9uKS5cbiBcbiYjNDM7ICBtZW1vcnlfY21hX2FjY291bnRpbmdcbiYjNDM7ICAgICAgICBDb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZSBmb3JcbiYjNDM7ICAgICAgICB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBleHBvc2UgcGVyLUNNQS1hcmVhIHVzYWdlIGNvdW50ZXJzLiBUaGlzXG4mIzQzOyAgICAgICAgYmVoYXZpb3IgaXMgb3B0LWluLCBzbyBhcyB0byBub3QgY2F1c2UgcmVncmVzc2lvbiBvbiBleGlzdGluZyBzZXR1cHMuXG4mIzQzO1xuJiM0MzsgICAgICAgIEEgZmV3IGNhdmVhdHMgdG8ga2VlcCBpbiBtaW5kOlxuJiM0MztcbiYjNDM7ICAgICAgICAqIENNQSBhcmVhcyBhcmUgcmVzZXJ2ZWQgYXQgYm9vdCB0aW1lLCBtZW1vcnkgaXMgb25seSBjaGFyZ2VkIHRvIGFcbiYjNDM7ICAgICAgICAgIGNncm91cCB3aGVuIGEgQ01BIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIG9uIGl0cyBiZWhhbGYuXG4mIzQzOyAgICAgICAgKiBDTUEgcGFnZXMgYWxsb2NhdGVkIHdoaWxlIHRoaXMgb3B0aW9uIGlzIG5vdCBlbmFibGVkIHdpbGwgbm90IGJlXG4mIzQzOyAgICAgICAgICB0cmFja2VkIGJ5IHRoZSBtZW1vcnkgY29udHJvbGxlciwgZXZlbiBpZiBjZ3JvdXAgdjIgaXMgcmVtb3VudGVkXG4mIzQzOyAgICAgICAgICBsYXRlciBvbiB3aXRoIHRoaXMgb3B0aW9uLiBDaGFyZ2VzIGhhcHBlbiBhdCBhbGxvY2F0aW9uLlxuJiM0MzsgICAgICAgICogQ01BIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIGJvdGggdG8gdGhlIGNncm91cCYjMzk7cyBtZW1vcnkgY291bnRlclxuJiM0MzsgICAgICAgICAgKGxpbWl0ZWQgYnkgbWVtb3J5Lm1heCkgYW5kIHRoZSBwZXItYXJlYSBDTUEgY291bnRlciAobGltaXRlZCBieVxuJiM0MzsgICAgICAgICAgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heCkuIEhpdHRpbmcgZWl0aGVyIGxpbWl0IGNhbiBjYXVzZSBhbiBhbGxvY2F0aW9uXG4mIzQzOyAgICAgICAgICB0byBmYWlsLiBJZiBDTUEgdXNhZ2UgcHVzaGVzIHRoZSBjZ3JvdXAgb3ZlciBtZW1vcnkuaGlnaCBvclxuJiM0MzsgICAgICAgICAgbWVtb3J5Lm1heCwgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG90aGVyXG4mIzQzOyAgICAgICAgICBtZW1vcnkgb25seS4gQ01BIG1lbW9yeSBjaGFyZ2VkIHRvIHRoZSBjZ3JvdXAgaXMgbm90IHJlY2xhaW1hYmxlLlxuJiM0MzsgICAgICAgICAgTGltaXRzIHNob3VsZCBiZSBzaXplZCB0byBhY2NvbW1vZGF0ZSB0aGUgZXhwZWN0ZWQgQ01BIHByZXNzdXJlLlxuJiM0MztcbiAgIHBpZHNfbG9jYWxldmVudHNcbiAgICAgICAgIFRoZSBvcHRpb24gcmVzdG9yZXMgdjEtbGlrZSBiZWhhdmlvciBvZiBwaWRzLmV2ZW50czptYXgsIHRoYXQgaXMgb25seVxuICAgICAgICAgbG9jYWwgKGluc2lkZSBjZ3JvdXAgcHJvcGVyKSBmb3JrIGZhaWx1cmVzIGFyZSBjb3VudGVkLiBXaXRob3V0IHRoaXNcbkBAIC0xOTA4LDYgJiM0MzsxOTI4LDIxIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXG4gXHRUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgYW5kIHN3YXBwaW5nXG4gXHRpcyBhbGxvd2VkIHVubGVzcyBtZW1vcnkuc3dhcC5tYXggaXMgc2V0IHRvIDAuXG4gXG4mIzQzOyAgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLmN1cnJlbnRcbiYjNDM7ICAgICAgICBBIHJlYWQtb25seSBzaW5nbGUgdmFsdWUgZmlsZSB3aGljaCBleGlzdHMgb24gbm9uLXJvb3QgY2dyb3Vwcy4gXHUwMDNjYXJlYVx1MDAzZVxuJiM0MzsgICAgICAgIGlzIHRoZSBDTUEgYXJlYSBuYW1lIChlLmcuIFwmIzM0O3Jlc2VydmVkXCYjMzQ7IGZvciB0aGUgZGVmYXVsdCBETUEgQ01BIGFyZWEpLlxuJiM0MztcbiYjNDM7ICAgICAgICBUaGUgdG90YWwgYW1vdW50IG9mIENNQSBtZW1vcnkgY3VycmVudGx5IGNoYXJnZWQgdG8gdGhlIGNncm91cCBmb3IgdGhlXG4mIzQzOyAgICAgICAgZ2l2ZW4gQ01BIGFyZWEuIE9ubHkgYWNjb3VudGVkIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuXG4mIzQzO1xuJiM0MzsgIG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5tYXhcbiYjNDM7ICAgICAgICBBIHJlYWQtd3JpdGUgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFRoZVxuJiM0MzsgICAgICAgIGRlZmF1bHQgaXMgXCYjMzQ7bWF4XCYjMzQ7LlxuJiM0MztcbiYjNDM7ICAgICAgICBDTUEgdXNhZ2UgaGFyZCBsaW1pdCBmb3IgdGhlIGdpdmVuIGFyZWEuIElmIGEgY2dyb3VwJiMzOTtzIENNQSB1c2FnZSBmb3JcbiYjNDM7ICAgICAgICB0aGlzIGFyZWEgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZhaWwuIE9ubHkgZW5mb3JjZWRcbiYjNDM7ICAgICAgICB3aGVuIG1lbW9yeV9jbWFfYWNjb3VudGluZyBpcyBlbmFibGVkLlxuJiM0MztcbiAgIG1lbW9yeS5wcmVzc3VyZVxuIFx0QSByZWFkLW9ubHkgbmVzdGVkLWtleWVkIGZpbGUuXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG5pbmRleCBkZTJjZDYyMzhjMmFlLi4xNWYzZjcxMTBjNWIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmhcbkBAIC0xMjksNiAmIzQzOzEyOSwxMSBAQCBlbnVtIHtcbiBcdCAqIEVuYWJsZSBsZWdhY3kgbG9jYWwgcGlkcy5ldmVudHMuXG4gXHQgKi9cbiBcdENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUyA9ICgxIFx1MDAzY1x1MDAzYyAyMCksXG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5hYmxlIGNtYSBhY2NvdW50aW5nIGZvciB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Q0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORyA9ICgxIFx1MDAzY1x1MDAzYyAyMSksXG4gfTtcbiBcbiAvKiBjZnR5cGUtXHUwMDNlZmxhZ3MgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtYS5oIGIvaW5jbHVkZS9saW51eC9jbWEuaFxuaW5kZXggODU1NWQzOGE5N2IxYS4uMTZlMjEzNjQyMWI3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY21hLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY21hLmhcbkBAIC00OSwxMiAmIzQzOzQ5LDEyIEBAIGV4dGVybiBpbnQgY21hX2luaXRfcmVzZXJ2ZWRfbWVtKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4gXHRcdFx0XHRcdHN0cnVjdCBjbWEgKipyZXNfY21hKTtcbiBleHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcbiBcdFx0XHQgICAgICBib29sIG5vX3dhcm4pO1xuLWV4dGVybiBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KTtcbiYjNDM7ZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbiBcdFx0dW5zaWduZWQgaW50IGFsaWduLCBib29sIG5vX3dhcm4pO1xuIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcbiYjNDM7Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuIGV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjIuLjgwMWZiZGU5NDEzN2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0zMjAsNiAmIzQzOzMyMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHRzcGlubG9ja190IGV2ZW50X2xpc3RfbG9jaztcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ01BXG4mIzQzO1x0c3RydWN0IHBhZ2VfY291bnRlciAqY21hX2NvdW50ZXJzO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0NNQSAqL1xuJiM0MztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpub2RlaW5mb1tdO1xuIH07XG4gXG5AQCAtNjYyLDYgJiM0Mzs2NjYsMTEgQEAgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG4gXG4mIzQzO2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGNtYSAqY21hKTtcbiYjNDM7dm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgY21hICpjbWEpO1xuJiM0MztcbiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKipcbkBAIC0xMTYwLDYgJiM0MzsxMTY5LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgY21hICpjbWEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGNvdW50LCBzdHJ1Y3QgY21hICpjbWEpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcbmluZGV4IGI1YjQ2MWQ0NDE4YjEuLjEyMTg0Zjg1YWQxMDAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY2dyb3VwL2Nncm91cC5jXG5AQCAtMTk4NSw2ICYjNDM7MTk4NSw3IEBAIGVudW0gY2dyb3VwMl9wYXJhbSB7XG4gXHRPcHRfbWVtb3J5X3JlY3Vyc2l2ZXByb3QsXG4gXHRPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyxcbiBcdE9wdF9waWRzX2xvY2FsZXZlbnRzLFxuJiM0MztcdE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcsXG4gXHRucl9fY2dyb3VwMl9wYXJhbXNcbiB9O1xuIFxuQEAgLTE5OTUsNiAmIzQzOzE5OTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGNncm91cDJfZnNfcGFyYW1ldGVyc1tdID0ge1xuIFx0ZnNwYXJhbV9mbGFnKFwmIzM0O21lbW9yeV9yZWN1cnNpdmVwcm90XCYjMzQ7LFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90KSxcbiBcdGZzcGFyYW1fZmxhZyhcJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCYjMzQ7LCBPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyksXG4gXHRmc3BhcmFtX2ZsYWcoXCYjMzQ7cGlkc19sb2NhbGV2ZW50c1wmIzM0OyxcdE9wdF9waWRzX2xvY2FsZXZlbnRzKSxcbiYjNDM7XHRmc3BhcmFtX2ZsYWcoXCYjMzQ7bWVtb3J5X2NtYV9hY2NvdW50aW5nXCYjMzQ7LFx0T3B0X21lbW9yeV9jbWFfYWNjb3VudGluZyksXG4gXHR7fVxuIH07XG4gXG5AQCAtMjAyNyw2ICYjNDM7MjAyOSw5IEBAIHN0YXRpYyBpbnQgY2dyb3VwMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtXG4gXHRjYXNlIE9wdF9waWRzX2xvY2FsZXZlbnRzOlxuIFx0XHRjdHgtXHUwMDNlZmxhZ3MgfD0gQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmc6XG4mIzQzO1x0XHRjdHgtXHUwMDNlZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuQEAgLTIwNjgsNiAmIzQzOzIwNzMsMTEgQEAgc3RhdGljIHZvaWQgYXBwbHlfY2dyb3VwX3Jvb3RfZmxhZ3ModW5zaWduZWQgaW50IHJvb3RfZmxhZ3MpXG4gXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XG4gXHRcdGVsc2VcbiBcdFx0XHRjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNj0gfkNHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUztcbiYjNDM7XG4mIzQzO1x0XHRpZiAocm9vdF9mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORylcbiYjNDM7XHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNj0gfkNHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkc7XG4gXHR9XG4gfVxuIFxuQEAgLTIwODUsNiAmIzQzOzIwOTUsOCBAQCBzdGF0aWMgaW50IGNncm91cF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBrZXJuZnNfcm9vdCAqa2Zfcm9vdFxuIFx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0OyxtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCYjMzQ7KTtcbiBcdGlmIChjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMpXG4gXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LHBpZHNfbG9jYWxldmVudHNcJiMzNDspO1xuJiM0MztcdGlmIChjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HKVxuJiM0MztcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDssbWVtb3J5X2NtYV9hY2NvdW50aW5nXCYjMzQ7KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC03NTIwLDcgJiM0Mzs3NTMyLDggQEAgc3RhdGljIHNzaXplX3QgZmVhdHVyZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdFwmIzM0O21lbW9yeV9sb2NhbGV2ZW50c1xcblwmIzM0O1xuIFx0XHRcdFwmIzM0O21lbW9yeV9yZWN1cnNpdmVwcm90XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7bWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcblwmIzM0O1xuLVx0XHRcdFwmIzM0O3BpZHNfbG9jYWxldmVudHNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcJiMzNDtwaWRzX2xvY2FsZXZlbnRzXFxuXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0O21lbW9yeV9jbWFfYWNjb3VudGluZ1xcblwmIzM0Oyk7XG4gfVxuIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2dyb3VwX2ZlYXR1cmVzX2F0dHIgPSBfX0FUVFJfUk8oZmVhdHVyZXMpO1xuIFxuZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmNcbmluZGV4IGExM2NlNDk5OWIzOWYuLjAzZWIzYWNiZDNjNzUgMTAwNjQ0XG4tLS0gYS9tbS9jbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY21hLmNcbkBAIC0yNSw3ICYjNDM7MjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbkBAIC05MDUsNiAmIzQzOzkwNCwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsXG4gXHRcdGNtYV9kZWJ1Z19zaG93X2FyZWFzKGNtYSk7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBhZ2UgXHUwMDI2XHUwMDI2IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShwYWdlLCBjb3VudCwgY21hKSkge1xuJiM0MztcdFx0ZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBjb3VudCk7XG4mIzQzO1x0XHRjbWFfY2xlYXJfYml0bWFwKGNtYSwgXHUwMDI2Y21hLVx1MDAzZXJhbmdlc1tyXSwgcGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcbiYjNDM7XHRcdHBhZ2UgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwcl9kZWJ1ZyhcJiMzNDslcygpOiByZXR1cm5lZCAlcFxcblwmIzM0OywgX19mdW5jX18sIHBhZ2UpO1xuIFx0dHJhY2VfY21hX2FsbG9jX2ZpbmlzaChuYW1lLCBwYWdlID8gcGFnZV90b19wZm4ocGFnZSkgOiAwLFxuIFx0XHRcdCAgICAgICBwYWdlLCBjb3VudCwgYWxpZ24sIHJldCk7XG5AQCAtOTkyLDEyICYjNDM7OTk3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX21lbXJhbmdlICpmaW5kX2NtYV9tZW1yYW5nZShzdHJ1Y3QgY21hICpjbWEsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxuLVx0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlcyk7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDslcyhwYWdlICVwLCBjb3VudCAlbHUpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgKHZvaWQgKilwYWdlcywgY291bnQpO1xuIFxuJiM0MztcdG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHBhZ2VzLCBjb3VudCwgY21hKTtcbiBcdGZyZWVfY29udGlnX2Zyb3plbl9yYW5nZShwZm4sIGNvdW50KTtcbiBcdGNtYV9jbGVhcl9iaXRtYXAoY21hLCBjbXIsIHBmbiwgY291bnQpO1xuIFx0Y21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhjbWEsIGNvdW50KTtcbkBAIC0xMDE0LDcgJiM0MzsxMDIwLDcgQEAgc3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG4gICogSXQgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91cyBhcmVhIGFuZFxuICAqIHRydWUgb3RoZXJ3aXNlLlxuICAqL1xuLWJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4mIzQzO2Jvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdCB1bnNpZ25lZCBsb25nIGNvdW50KVxuIHtcbiBcdHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcjtcbkBAIC0xMDM3LDcgJiM0MzsxMDQzLDcgQEAgYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY21hX3JlbGVhc2UpO1xuIFxuLWJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuJiM0Mztib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBjb3VudClcbiB7XG4gXHRzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7XG5kaWZmIC0tZ2l0IGEvbW0vY21hLmggYi9tbS9jbWEuaFxuaW5kZXggYzcwMTgwYzM2NTU5Yy4uNTJiN2Q0YmU1MTcwNyAxMDA2NDRcbi0tLSBhL21tL2NtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWEuaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tvYmplY3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuIFxuIHN0cnVjdCBjbWFfa29iamVjdCB7XG4gXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuQEAgLTgwLDYgJiM0Mzs4MSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9tYXhubyhzdHJ1Y3QgY21hICpjbWEsXG4gXHRyZXR1cm4gY21yLVx1MDAzZWNvdW50IFx1MDAzZVx1MDAzZSBjbWEtXHUwMDNlb3JkZXJfcGVyX2JpdDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGNtYV9hcmVhX2luZGV4KGNvbnN0IHN0cnVjdCBjbWEgKmNtYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjbWEgLSBjbWFfYXJlYXM7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19DTUFfU1lTRlNcbiB2b2lkIGNtYV9zeXNmc19hY2NvdW50X3N1Y2Nlc3NfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIGNtYV9zeXNmc19hY2NvdW50X2ZhaWxfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmRpZmYgLS1naXQgYS9tbS9jbWFfZGVidWcuYyBiL21tL2NtYV9kZWJ1Zy5jXG5pbmRleCA1MjNiYTRhMGY5Zjc2Li43MGJmYzZmYmVlY2EzIDEwMDY0NFxuLS0tIGEvbW0vY21hX2RlYnVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYV9kZWJ1Zy5jXG5AQCAtNyw3ICYjNDM7Nyw2IEBAXG4gXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL21tL2NtYV9zeXNmcy5jIGIvbW0vY21hX3N5c2ZzLmNcbmluZGV4IGQ1YmY3OTJjNjI0NWEuLmU0ZWUzNWJjNjgyYmEgMTAwNjQ0XG4tLS0gYS9tbS9jbWFfc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY21hX3N5c2ZzLmNcbkBAIC01LDcgJiM0Mzs1LDYgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWluY2hhbiBLaW0gXHUwMDNjbWluY2hhbkBrZXJuZWwub3JnXHUwMDNlXG4gICovXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZi4uZjI4ZDYxMGE1OWNlNyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3NsYWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O21lbWNvbnRyb2wtdjEuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjbWEuaFwmIzM0O1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuIFxuQEAgLTQwNjIsNiAmIzQzOzQwNjMsOSBAQCBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0aW50IG5vZGU7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ01BXG4mIzQzO1x0a2ZyZWUobWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzKTtcbiYjNDM7I2VuZGlmXG4gXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcbiBcdFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbm9kZV07XG4gXHRcdGlmICghcG4pXG5AQCAtNDE0NCw2ICYjNDM7NDE0OCwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspXG4gXHRcdG1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldLmRvbmUgPVxuIFx0XHRcdF9fV0JfQ09NUExFVElPTl9JTklUKFx1MDAyNm1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfQ01BXG4mIzQzO1x0aWYgKGNtYV9hcmVhX2NvdW50KSB7XG4mIzQzO1x0XHRtZW1jZy1cdTAwM2VjbWFfY291bnRlcnMgPSBrY2FsbG9jKGNtYV9hcmVhX2NvdW50LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlX2NvdW50ZXIpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIW1lbWNnLVx1MDAzZWNtYV9jb3VudGVycylcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdH1cbiAjZW5kaWZcbiBcdGxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7XG4gXHRyZXR1cm4gbWVtY2c7XG5AQCAtNDE1OSw2ICYjNDM7NDE3Miw3IEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MocGFyZW50X2Nzcyk7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7XG4gXHRib29sIG1lbWNnX29uX2RmbCA9IGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XG4mIzQzO1x0dW5zaWduZWQgaW50IF9fbWF5YmVfdW51c2VkIGk7XG4gXG4gXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XG4gXHRtZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTtcbkBAIC00MTcxLDYgJiM0Mzs0MTg1LDEyIEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuICNpZmRlZiBDT05GSUdfWlNXQVBcbiBcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0NNQVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9hcmVhX2NvdW50OyAmIzQzOyYjNDM7aSlcbiYjNDM7XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpXSxcbiYjNDM7XHRcdFx0XHQgIHBhcmVudCA/IFx1MDAyNnBhcmVudC1cdTAwM2VjbWFfY291bnRlcnNbaV0gOiBOVUxMLFxuJiM0MztcdFx0XHRcdCAgZmFsc2UpO1xuICNlbmRpZlxuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuIFx0aWYgKHBhcmVudCkge1xuQEAgLTUyMTMsNiAmIzQzOzUyMzMsMTAyIEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19DTUFcbiYjNDM7c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfY21hKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgY21hICpjbWEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCAqZmFpbDtcbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdGludCByYyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2NtYSgpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbiYjNDM7XHRcdGdvdG8gY2dyb3VwX3B1dDtcbiYjNDM7XG4mIzQzO1x0cmMgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBHRlBfS0VSTkVMLCBjb3VudCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBjZ3JvdXBfcHV0O1xuJiM0MztcbiYjNDM7XHRjb3VudGVyID0gXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2NtYV9hcmVhX2luZGV4KGNtYSldO1xuJiM0MztcdGlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoY291bnRlciwgY291bnQsIFx1MDAyNmZhaWwpKSB7XG4mIzQzO1x0XHRyZWZpbGxfc3RvY2sobWVtY2csIGNvdW50KTtcbiYjNDM7XHRcdHJjID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gY2dyb3VwX3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZyk7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UocGFnZV9mb2xpbyhwYWdlKSkpIHtcbiYjNDM7XHRcdGNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlKSwgb2JqY2cpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRvYmpfY2dyb3VwX2dldF9tYW55KG9iamNnLCBjb3VudCAtIDEpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRjb21taXRfY2hhcmdlKHBhZ2VfZm9saW8ocGFnZSAmIzQzOyBpKSwgb2JqY2cpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Nncm91cF9wdXQ6XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgY21hICpjbWEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogR2V0IHRoZSBvYmpjZyBmcm9tIHRoZSBmaXJzdCBwYWdlLlxuJiM0MztcdCAqIHBhZ2Vfb2JqY2coKSBleHBlY3RzIE1FTUNHX0RBVEFfS01FTSwgYnV0IGZvciBDTUEgd2UgdXNlZFxuJiM0MztcdCAqIGNvbW1pdF9jaGFyZ2UoKSB3aGljaCBzZXRzIGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSBvYmpjZ1xuJiM0MztcdCAqIHdpdGhvdXQgZmxhZ3MsIHNvIHdlIGNhbm5vdCB1c2UgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0b2JqY2cgPSBmb2xpb19vYmpjZyhwYWdlX2ZvbGlvKHBhZ2UpKTtcbiYjNDM7XHRpZiAoIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiYjNDM7XG4mIzQzO1x0Y291bnRlciA9IFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tjbWFfYXJlYV9pbmRleChjbWEpXTtcbiYjNDM7XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoY291bnRlciwgY291bnQpO1xuJiM0MztcbiYjNDM7XHRtZW1jZ191bmNoYXJnZShtZW1jZywgY291bnQpO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuJiM0MztcdFx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4mIzQzO1x0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSAmIzQzOyBpKTtcbiYjNDM7XHRcdFx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4mIzQzO1x0XHRcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19DTUEgKi9cbiYjNDM7XG4gc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHR1bnNpZ25lZCBsb25nIG5yX21lbW9yeTtcbkBAIC02MDY2LDMgJiM0Mzs2MTgyLDkyIEBAIHZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0XHRLKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LmNoaWxkcmVuX21pbl91c2FnZSkpLFxuIFx0XHRLKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LmNoaWxkcmVuX2xvd191c2FnZSkpKTtcbiB9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0NNQVxuJiM0MztzdGF0aWMgaW50IG1lbW9yeV9jbWFfY3VycmVudF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7XG4mIzQzO1x0aW50IGlkeCA9IHNlcV9jZnQobSktXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGN1ciA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdKTtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihtLCBcJiMzNDslbHVcXG5cJiMzNDssIGN1ciAqIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1lbW9yeV9jbWFfbWF4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcbiYjNDM7XHRpbnQgaWR4ID0gc2VxX2NmdChtKS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdLm1heCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sIG1heCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1lbW9yeV9jbWFfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuJiM0MztcdFx0XHRcdCAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbiYjNDM7XHRpbnQgaWR4ID0gb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbiYjNDM7XHRyYyA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsIFwmIzM0O21heFwmIzM0OywgXHUwMDI2bWF4KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHhjaGcoXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2lkeF0ubWF4LCBtYXgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmJ5dGVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGNmdHlwZSBjbWFfZGZsX3RtcGxbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O2N1cnJlbnRcJiMzNDssXG4mIzQzO1x0XHQuc2VxX3Nob3cgPSBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdyxcbiYjNDM7XHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7bWF4XCYjMzQ7LFxuJiM0MztcdFx0LnNlcV9zaG93ID0gbWVtb3J5X2NtYV9tYXhfc2hvdyxcbiYjNDM7XHRcdC53cml0ZSA9IG1lbW9yeV9jbWFfbWF4X3dyaXRlLFxuJiM0MztcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuJiM0MztcdH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzOyNkZWZpbmUgQ01BX0RGTF9UTVBMX1NJWkVcdChBUlJBWV9TSVpFKGNtYV9kZmxfdG1wbCkgLSAxKVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBjZnR5cGUgKmNtYV9kZmxfZmlsZXM7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX2NtYV9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY2Z0eXBlICpjZnQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIGo7XG4mIzQzO1x0aW50IGNvdW50O1xuJiM0MztcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjbWFfYXJlYV9jb3VudClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjb3VudCA9IGNtYV9hcmVhX2NvdW50ICogQ01BX0RGTF9UTVBMX1NJWkU7XG4mIzQzO1x0Y21hX2RmbF9maWxlcyA9IGtjYWxsb2MoY291bnQgJiM0MzsgMSwgc2l6ZW9mKCpjbWFfZGZsX3RtcGwpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWNtYV9kZmxfZmlsZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7ICYjNDM7JiM0MztpKVxuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQ01BX0RGTF9UTVBMX1NJWkU7ICYjNDM7JiM0MztqKSB7XG4mIzQzO1x0XHRcdGNmdCA9IFx1MDAyNmNtYV9kZmxfZmlsZXNbaSAqIENNQV9ERkxfVE1QTF9TSVpFICYjNDM7IGpdO1xuJiM0MztcdFx0XHQqY2Z0ID0gY21hX2RmbF90bXBsW2pdO1xuJiM0MztcdFx0XHRzbnByaW50ZihjZnQtXHUwMDNlbmFtZSwgTUFYX0NGVFlQRV9OQU1FLCBcJiMzNDtjbWEuJXMuJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0IGNtYV9nZXRfbmFtZShcdTAwMjZjbWFfYXJlYXNbaV0pLFxuJiM0MztcdFx0XHRcdCBjbWFfZGZsX3RtcGxbal0ubmFtZSk7XG4mIzQzO1x0XHRcdGNmdC1cdTAwM2Vwcml2YXRlID0gaTsgLyogY21hIGFyZWEgaW5kZXggZm9yIGNvdW50ZXJzIGluIGNhbGxiYWNrcy4gKi9cbiYjNDM7XHRcdFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoXHUwMDI2Y2Z0LVx1MDAzZWxvY2tkZXBfa2V5KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgY21hX2RmbF9maWxlcykpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9jbWFfaW5pdCk7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQ01BICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuaW5kZXggOTUyZTQ0NDhiZjA3MC4uYjlhNDI5OGQ0OTQ0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuQEAgLTEsNSAmIzQzOzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIHRlc3RfY29yZVxuJiM0Mzt0ZXN0X2NtYV9tZW1jZ1xuIHRlc3RfY3B1XG4gdGVzdF9jcHVzZXRcbiB0ZXN0X2ZyZWV6ZXJcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbmluZGV4IGUwMTU4NGMyMTg5YWMuLjYwMWQ5MzAxNjBhNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuQEAgLTgsNiAmIzQzOzgsNyBAQCBURVNUX1BST0dTICAgICA6PSB0ZXN0X3N0cmVzcy5zaCB0ZXN0X2NwdXNldF9wcnMuc2ggdGVzdF9jcHVzZXRfdjFfaHAuc2hcbiBURVNUX0dFTl9GSUxFUyA6PSB3YWl0X2lub3RpZnlcbiAjIEtlZXAgdGhlIGxpc3RzIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZFxuIFRFU1RfR0VOX1BST0dTICA9IHRlc3RfY29yZVxuJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jbWFfbWVtY2dcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jcHVcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jcHVzZXRcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9mcmVlemVyXG5AQCAtMjQsNiAmIzQzOzI1LDcgQEAgaW5jbHVkZSAuLi9saWIubWtcbiBpbmNsdWRlIGxpYi9saWJjZ3JvdXAubWtcbiBcbiAkKE9VVFBVVCkvdGVzdF9jb3JlOiAkKExJQkNHUk9VUF9PKVxuJiM0MzskKE9VVFBVVCkvdGVzdF9jbWFfbWVtY2c6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X2NwdXNldDogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9mcmVlemVyOiAkKExJQkNHUk9VUF9PKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXG5pbmRleCAzOWY5Nzk2OTBkZDNiLi4xYzkwMzQwMTc2ODJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuQEAgLTQsMyAmIzQzOzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuIENPTkZJR19DR1JPVVBfU0NIRUQ9eVxuIENPTkZJR19NRU1DRz15XG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XG4mIzQzO0NPTkZJR19DTUE9eVxuJiM0MztDT05GSUdfRE1BX0NNQT15XG4mIzQzO0NPTkZJR19ETUFCVUZfSEVBUFM9eVxuJiM0MztDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XG4mIzQzO0NPTkZJR19IVUdFVExCRlM9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YmQ0MWQ5YTYxNzdkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuY1xuQEAgLTAsMCAmIzQzOzEsNDAyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1oZWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2dyb3VwX3V0aWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBDTUFfSEVBUF9ERUZBVUxUX1BBVEhcdFwmIzM0Oy9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQ01BX1JFU0VSVkVEX0NVUlJFTlRcdFwmIzM0O21lbW9yeS5jbWEucmVzZXJ2ZWQuY3VycmVudFwmIzM0O1xuJiM0MzsjZGVmaW5lIENNQV9SRVNFUlZFRF9NQVhcdFwmIzM0O21lbW9yeS5jbWEucmVzZXJ2ZWQubWF4XCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhVR0VUTEJfQ01BX0NVUlJFTlRcdFwmIzM0O21lbW9yeS5jbWEuaHVnZXRsYjAuY3VycmVudFwmIzM0O1xuJiM0MzsjZGVmaW5lIEhVR0VUTEJfQ01BX01BWFx0XCYjMzQ7bWVtb3J5LmNtYS5odWdldGxiMC5tYXhcJiMzNDtcbiYjNDM7I2RlZmluZSBIVUdFUEFHRVNfRElSXHRcdFwmIzM0Oy9zeXMva2VybmVsL21tL2h1Z2VwYWdlc1wmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjbWFfaGVhcF9hbGxvYyhpbnQgaGVhcF9mZCwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2hlYXBfYWxsb2NhdGlvbl9kYXRhIGRhdGEgPSB7XG4mIzQzO1x0XHQubGVuID0gc2l6ZSxcbiYjNDM7XHRcdC5mZF9mbGFncyA9IE9fUkRXUiB8IE9fQ0xPRVhFQyxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jdGwoaGVhcF9mZCwgRE1BX0hFQVBfSU9DVExfQUxMT0MsIFx1MDAyNmRhdGEpIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGF0YS5mZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2NtYV9jaGFyZ2UoY29uc3QgY2hhciAqcm9vdClcbiYjNDM7e1xuJiM0MztcdGludCBoZWFwX2ZkID0gLTEsIGJ1Zl9mZCA9IC0xO1xuJiM0MztcdGludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwO1xuJiM0MztcdHNpemVfdCBzaXplID0gNFVMIFx1MDAzY1x1MDAzYyAyMDtcbiYjNDM7XHRsb25nIGJlZm9yZSwgYWZ0ZXI7XG4mIzQzO1x0Y2hhciAqY2c7XG4mIzQzO1xuJiM0MztcdGNnID0gY2dfbmFtZShyb290LCBcJiMzNDttZW1jZ19jbWFfY2hhcmdlXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWNnKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfY3JlYXRlKGNnKSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGluX2NnID0gMTtcbiYjNDM7XG4mIzQzO1x0aGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGhlYXBfZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YmVmb3JlID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7XG4mIzQzO1xuJiM0MztcdGJ1Zl9mZCA9IGNtYV9oZWFwX2FsbG9jKGhlYXBfZmQsIHNpemUpO1xuJiM0MztcdGlmIChidWZfZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBpbiBDTUEgaGVhcCAoJW0pXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7XG4mIzQzO1xuJiM0MztcdGlmIChhZnRlciAtIGJlZm9yZSBcdTAwM2MgKGxvbmcpc2l6ZSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXG4mIzQzO1x0XHRcdFwmIzM0O2ludmFsaWQgQ01BIGNvdW50ZXIgYWZ0ZXIgY2hhcmdlOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0YmVmb3JlLCBhZnRlcik7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShidWZfZmQpO1xuJiM0MztcdGJ1Zl9mZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpO1xuJiM0MztcdGlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcbiYjNDM7XHRcdFx0XCYjMzQ7aW52YWxpZCBDTUEgY291bnRlciBhZnRlciB1bmNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGJlZm9yZSwgYWZ0ZXIpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBLU0ZUX1BBU1M7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGlmIChidWZfZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoYnVmX2ZkKTtcbiYjNDM7XHRpZiAoaGVhcF9mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShoZWFwX2ZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluX2NnKVxuJiM0MztcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbiYjNDM7XHRjZ19kZXN0cm95KGNnKTtcbiYjNDM7XHRmcmVlKGNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfY21hX2xpbWl0KGNvbnN0IGNoYXIgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTtcbiYjNDM7XHRpbnQgcmMgPSBLU0ZUX0ZBSUwsIGluX2NnID0gMDtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IDRVTCBcdTAwM2NcdTAwM2MgMjA7XG4mIzQzO1x0Y2hhciAqY2c7XG4mIzQzO1xuJiM0MztcdGNnID0gY2dfbmFtZShyb290LCBcJiMzNDttZW1jZ19jbWFfbGltaXRcJiMzNDspO1xuJiM0MztcdGlmICghY2cpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19jcmVhdGUoY2cpKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aW5fY2cgPSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfd3JpdGUoY2csIENNQV9SRVNFUlZFRF9NQVgsIFwmIzM0OzJNXCYjMzQ7KSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IHNldCBDTUEgbGltaXQgKCVtKVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZWFwX2ZkID0gb3BlbihDTUFfSEVBUF9ERUZBVUxUX1BBVEgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbiYjNDM7XHRpZiAoaGVhcF9mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWZfZmQgPSBjbWFfaGVhcF9hbGxvYyhoZWFwX2ZkLCBzaXplKTtcbiYjNDM7XHRpZiAoYnVmX2ZkIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q01BIGxpbWl0IG5vdCBlbmZvcmNlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0Y2xvc2UoYnVmX2ZkKTtcbiYjNDM7XHR9IGVsc2VcbiYjNDM7XHRcdHJjID0gS1NGVF9QQVNTO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoaGVhcF9mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShoZWFwX2ZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluX2NnKVxuJiM0MztcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbiYjNDM7XHRjZ19kZXN0cm95KGNnKTtcbiYjNDM7XHRmcmVlKGNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0RElSICpkaXI7XG4mIzQzO1x0c3RydWN0IGRpcmVudCAqZW50cnk7XG4mIzQzO1x0bG9uZyBtYXhfc2l6ZSA9IDA7XG4mIzQzO1xuJiM0MztcdGRpciA9IG9wZW5kaXIoSFVHRVBBR0VTX0RJUik7XG4mIzQzO1x0aWYgKCFkaXIpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoZW50cnkgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHtcbiYjNDM7XHRcdGxvbmcgc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCYjMzQ7aHVnZXBhZ2VzLSVsZGtCXCYjMzQ7LCBcdTAwMjZzaXplKSA9PSAxKSB7XG4mIzQzO1x0XHRcdGlmIChzaXplIFx1MDAzZSBtYXhfc2l6ZSlcbiYjNDM7XHRcdFx0XHRtYXhfc2l6ZSA9IHNpemU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlZGlyKGRpcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXhfc2l6ZSBcdTAwM2UgMCA/IG1heF9zaXplIDogLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIHJlYWRfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XHRsb25nIHZhbCA9IC0xO1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4ocGF0aCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFmKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChmc2NhbmYoZiwgXCYjMzQ7JWxkXCYjMzQ7LCBcdTAwMjZ2YWwpICE9IDEpXG4mIzQzO1x0XHR2YWwgPSAtMTtcbiYjNDM7XHRmY2xvc2UoZik7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cml0ZV9zeXNmc19sb25nKGNvbnN0IGNoYXIgKnBhdGgsIGxvbmcgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGYgPSBmb3BlbihwYXRoLCBcJiMzNDt3XCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWYpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmMgPSBmcHJpbnRmKGYsIFwmIzM0OyVsZFwmIzM0OywgdmFsKTtcbiYjNDM7XHRmY2xvc2UoZik7XG4mIzQzO1x0cmV0dXJuIHJjIFx1MDAzYyAwID8gLTEgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDtcbiYjNDM7XHRsb25nIGhwYWdlX3NpemVfa2IsIGhwYWdlX3NpemVfYnl0ZXM7XG4mIzQzO1x0bG9uZyBvcmlnX25yID0gLTEsIG5ld19uciwgYmVmb3JlLCBhZnRlcjtcbiYjNDM7XHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGNoYXIgKmNnO1xuJiM0MztcbiYjNDM7XHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZV9rYiBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gS1NGVF9TS0lQO1xuJiM0MztcdH1cbiYjNDM7XHRocGFnZV9zaXplX2J5dGVzID0gaHBhZ2Vfc2l6ZV9rYiAqIDEwMjQ7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSxcbiYjNDM7XHRcdCBIVUdFUEFHRVNfRElSIFwmIzM0Oy9odWdlcGFnZXMtJWxka0IvbnJfaHVnZXBhZ2VzXCYjMzQ7LCBocGFnZV9zaXplX2tiKTtcbiYjNDM7XG4mIzQzO1x0Y2cgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O21lbWNnX2h1Z2V0bGJfY21hX2NoYXJnZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFjZylcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNnX2NyZWF0ZShjZykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpbl9jZyA9IDE7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9yaWdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7XG4mIzQzO1x0aWYgKG9yaWdfbnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCByZWFkICVzXFxuXCYjMzQ7LCBucl9wYXRoKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XG4mIzQzO1xuJiM0MztcdGlmICh3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgJiM0MzsgMSkpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCB3cml0ZSAlc1xcblwmIzM0OywgbnJfcGF0aCk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7XG4mIzQzO1x0aWYgKG5ld19uciBcdTAwM2M9IG9yaWdfbnIpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBhIGh1Z2VwYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjID0gS1NGVF9GQUlMO1xuJiM0MztcdGFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFmdGVyIC0gYmVmb3JlIFx1MDAzYyBocGFnZV9zaXplX2J5dGVzKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcbiYjNDM7XHRcdFx0XCYjMzQ7aHVnZXRsYiBDTUEgY291bnRlciBub3QgY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGQgZXhwZWN0ZWQgJiM0MzslbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGJlZm9yZSwgYWZ0ZXIsIGhwYWdlX3NpemVfYnl0ZXMpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcbiYjNDM7XG4mIzQzO1x0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpO1xuJiM0MztcdGlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcbiYjNDM7XHRcdFx0XCYjMzQ7aHVnZXRsYiBDTUEgY291bnRlciBub3QgdW5jaGFyZ2VkOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0YmVmb3JlLCBhZnRlcik7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IEtTRlRfUEFTUztcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKG9yaWdfbnIgXHUwMDNlPSAwKVxuJiM0MztcdFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluX2NnKVxuJiM0MztcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbiYjNDM7XHRjZ19kZXN0cm95KGNnKTtcbiYjNDM7XHRmcmVlKGNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdClcbiYjNDM7e1xuJiM0MztcdGludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwO1xuJiM0MztcdGxvbmcgaHBhZ2Vfc2l6ZV9rYjtcbiYjNDM7XHRsb25nIG9yaWdfbnIsIG5ld19ucjtcbiYjNDM7XHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGNoYXIgKmNnO1xuJiM0MztcbiYjNDM7XHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZV9rYiBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gS1NGVF9TS0lQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c25wcmludGYobnJfcGF0aCwgc2l6ZW9mKG5yX3BhdGgpLFxuJiM0MztcdFx0IEhVR0VQQUdFU19ESVIgXCYjMzQ7L2h1Z2VwYWdlcy0lbGRrQi9ucl9odWdlcGFnZXNcJiMzNDssIGhwYWdlX3NpemVfa2IpO1xuJiM0MztcbiYjNDM7XHRjZyA9IGNnX25hbWUocm9vdCwgXCYjMzQ7bWVtY2dfaHVnZXRsYl9jbWFfbGltaXRcJiMzNDspO1xuJiM0MztcdGlmICghY2cpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19jcmVhdGUoY2cpKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aW5fY2cgPSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9NQVgpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjZ193cml0ZShjZywgSFVHRVRMQl9DTUFfTUFYLCBcJiMzNDswXCYjMzQ7KSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IHNldCBodWdldGxiIENNQSBsaW1pdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvcmlnX25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuJiM0MztcdGlmIChvcmlnX25yIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtjYW5ub3QgcmVhZCAlc1xcblwmIzM0OywgbnJfcGF0aCk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgJiM0MzsgMSk7XG4mIzQzO1x0bmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuJiM0MztcbiYjNDM7XHRyYyA9IEtTRlRfRkFJTDtcbiYjNDM7XHRpZiAobmV3X25yIFx1MDAzZSBvcmlnX25yKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtodWdldGxiIENNQSBsaW1pdCBub3QgZW5mb3JjZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmMgPSBLU0ZUX1BBU1M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoaW5fY2cpXG4mIzQzO1x0XHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xuJiM0MztcdGNnX2Rlc3Ryb3koY2cpO1xuJiM0MztcdGZyZWUoY2cpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgVCh4KSB7IHgsICN4IH1cbiYjNDM7c3RydWN0IGNtYV9tZW1jZ190ZXN0cyB7XG4mIzQzO1x0aW50ICgqZm4pKGNvbnN0IGNoYXIgKnJvb3QpO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO30gdGVzdHNbXSA9IHtcbiYjNDM7XHRUKHRlc3RfY21hX2NoYXJnZSksXG4mIzQzO1x0VCh0ZXN0X2NtYV9saW1pdCksXG4mIzQzO1x0VCh0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZSksXG4mIzQzO1x0VCh0ZXN0X2h1Z2V0bGJfY21hX2xpbWl0KSxcbiYjNDM7fTtcbiYjNDM7I3VuZGVmIFRcbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xuJiM0MztcdGludCBoYXNfbWVtb3J5X2NtYV9hY2MsIGk7XG4mIzQzO1xuJiM0MztcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1x0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7XG4mIzQzO1xuJiM0MztcdGhhc19tZW1vcnlfY21hX2FjYyA9IHByb2NfbW91bnRfY29udGFpbnMoXCYjMzQ7bWVtb3J5X2NtYV9hY2NvdW50aW5nXCYjMzQ7KTtcbiYjNDM7XHRpZiAoaGFzX21lbW9yeV9jbWFfYWNjIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Y2Fubm90IHF1ZXJ5IGNncm91cCBtb3VudCBvcHRpb24uXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlIGlmICghaGFzX21lbW9yeV9jbWFfYWNjKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Q01BIGFjY291bnRpbmcgaXMgZGlzYWJsZWQuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtjZ3JvdXBmcyBpcyBub3QgYXZhaWxhYmxlLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcJiMzNDtjZ3JvdXAuY29udHJvbGxlcnNcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0OykpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDttZW1vcnkgY29udHJvbGxlciBpcyBub3QgYXZhaWxhYmxlIChDT05GSUdfQ0dST1VQX01FTUNHPylcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdHN3aXRjaCAodGVzdHNbaV0uZm4ocm9vdCkpIHtcbiYjNDM7XHRcdGNhc2UgS1NGVF9QQVNTOlxuJiM0MztcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7JXNcXG5cJiMzNDssIHRlc3RzW2ldLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS1NGVF9TS0lQOlxuJiM0MztcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXNcXG5cJiMzNDssIHRlc3RzW2ldLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcJiMzNDslc1xcblwmIzM0OywgdGVzdHNbaV0ubmFtZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3NmdF9maW5pc2hlZCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MzRhOTVlZjVlMDc3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoXG5AQCAtMCwwICYjNDM7MSwxOTcgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgQ29weXJpZ2h0IChjKSAyMDI2IFJlZCBIYXQsIEluYy5cbiYjNDM7I1xuJiM0MzsjIFJ1biBjZ3JvdXAgbWVtb3J5IGNvbnRyb2xsZXIgc2VsZnRlc3RzIGluc2lkZSBhIHZpcnRtZS1uZyBWTVxuJiM0MzsjIERlcGVuZGVuY2llczpcbiYjNDM7I1x0XHQqIHZpcnRtZS1uZ1xuJiM0MzsjXHRcdCogYnVzeWJveC1zdGF0aWMgKHVzZWQgYnkgdmlydG1lLW5nKVxuJiM0MzsjXHRcdCogcWVtdVx0KHVzZWQgYnkgdmlydG1lLW5nKVxuJiM0MztcbiYjNDM7c2V0IC1ldW8gcGlwZWZhaWxcbiYjNDM7XG4mIzQzO3JlYWRvbmx5IFNDUklQVF9ESVI9XCYjMzQ7JChjZCAtUCAtLSBcJiMzNDskKGRpcm5hbWUgLS0gXCYjMzQ7JHtCQVNIX1NPVVJDRVswXX1cJiMzNDspXCYjMzQ7IFx1MDAyNlx1MDAyNiBwd2QgLVApXCYjMzQ7XG4mIzQzO3JlYWRvbmx5IEtFUk5FTF9DSEVDS09VVD1cJiMzNDskKHJlYWxwYXRoIFwmIzM0OyR7U0NSSVBUX0RJUn1cJiMzNDsvLi4vLi4vLi4vLi4vKVwmIzM0O1xuJiM0MztcbiYjNDM7c291cmNlIFwmIzM0OyR7U0NSSVBUX0RJUn1cJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7cmVhZG9ubHkgU1NIX0dVRVNUX1BPUlQ9XCYjMzQ7JHtTU0hfR1VFU1RfUE9SVDotMjJ9XCYjMzQ7XG4mIzQzO3JlYWRvbmx5IFdBSVRfUEVSSU9EPTNcbiYjNDM7cmVhZG9ubHkgV0FJVF9QRVJJT0RfTUFYPTgwXG4mIzQzO3JlYWRvbmx5IFdBSVRfVE9UQUw9JCgoV0FJVF9QRVJJT0QgKiBXQUlUX1BFUklPRF9NQVgpKVxuJiM0MztyZWFkb25seSBRRU1VX1BJREZJTEU9XCYjMzQ7JChta3RlbXAgL3RtcC9xZW11X21lbWNnX3ZtdGVzdF9YWFhYLnBpZClcJiMzNDtcbiYjNDM7cmVhZG9ubHkgUUVNVV9PUFRTPVwmIzM0OyAtLXBpZGZpbGUgJHtRRU1VX1BJREZJTEV9IFwmIzM0O1xuJiM0MztcbiYjNDM7QlVJTEQ9MFxuJiM0MztRRU1VPVwmIzM0O3FlbXUtc3lzdGVtLSQodW5hbWUgLW0pXCYjMzQ7XG4mIzQzO1ZFUkJPU0U9MFxuJiM0MztTSEVMTF9NT0RFPTBcbiYjNDM7R1VFU1RfVFJFRT1cJiMzNDske0dVRVNUX1RSRUU6LSRLRVJORUxfQ0hFQ0tPVVR9XCYjMzQ7XG4mIzQzO1xuJiM0Mzt1c2FnZSgpIHtcbiYjNDM7XHRjYXQgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQwIFtPUFRJT05TXVxuJiM0MzsgICAgLWIgICAgICAgIEJ1aWxkIGtlcm5lbCBmcm9tIHNvdXJjZSB0cmVlIGJlZm9yZSBib290aW5nXG4mIzQzOyAgICAtcSBcdTAwM2NxZW11XHUwMDNlIFFFTVUgYmluYXJ5L3BhdGggKGRlZmF1bHQ6ICRRRU1VKVxuJiM0MzsgICAgLXMgICAgICAgIFN0YXJ0IGludGVyYWN0aXZlIHNoZWxsIGluIFZNXG4mIzQzOyAgICAtdiAgICAgICAgVmVyYm9zZSBvdXRwdXQgKHZuZyBib290IGxvZ3Mgb24gc3Rkb3V0KVxuJiM0MztFT0ZcbiYjNDM7XHRleGl0IDFcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZGllKCkge1xuJiM0MztcdGVjaG8gXCYjMzQ7JCpcJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdGV4aXQgXCYjMzQ7JHtLU0ZUX0ZBSUx9XCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NsZWFudXAoKSB7XG4mIzQzO1x0aWYgW1sgLXMgXCYjMzQ7JFFFTVVfUElERklMRVwmIzM0OyBdXTsgdGhlblxuJiM0MztcdFx0cGtpbGwgLVNJR1RFUk0gLUYgXCYjMzQ7JFFFTVVfUElERklMRVwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwgdHJ1ZVxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGlmIFtbIC1lIFwmIzM0OyRRRU1VX1BJREZJTEVcJiMzNDsgXV07IHRoZW5cbiYjNDM7XHRcdHJtIC1mIFwmIzM0OyRRRU1VX1BJREZJTEVcJiMzNDtcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2bV9zc2goKSB7XG4mIzQzO1x0c3RkYnVmIC1vTCBzc2ggLXEgXFxcbiYjNDM7XHRcdC1GIFwmIzM0OyRIT01FLy5jYWNoZS92aXJ0bWUtbmcvLnNzaC92aXJ0bWUtbmctc3NoLmNvbmZcJiMzNDsgXFxcbiYjNDM7XHRcdC1sIHJvb3QgXCYjMzQ7dmlydG1lLW5nJSRTU0hfR1VFU1RfUE9SVFwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7JEBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hlY2tfZGVwcygpIHtcbiYjNDM7XHRmb3IgZGVwIGluIHZuZyBcJiMzNDskUUVNVVwmIzM0OyBidXN5Ym94IHBraWxsIHNzaDsgZG9cbiYjNDM7XHRcdGlmICEgY29tbWFuZCAtdiBcJiMzNDskZGVwXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0O3NraXA6IGRlcGVuZGVuY3kgJGRlcCBub3QgZm91bmRcJiMzNDtcbiYjNDM7XHRcdFx0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO1x0XHRmaVxuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7aGFuZGxlX2J1aWxkKCkge1xuJiM0MztcdGlmIFtbICEgXCYjMzQ7JEJVSUxEXCYjMzQ7IC1lcSAxIF1dOyB0aGVuXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiBbWyAhIC1kIFwmIzM0OyRLRVJORUxfQ0hFQ0tPVVRcJiMzNDsgXV07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7LWIgcmVxdWlyZXMgJDAgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IDFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRwdXNoZCBcJiMzNDskS0VSTkVMX0NIRUNLT1VUXCYjMzQ7IFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHRpZiAhIHZuZyAtLWtjb25maWcgLS1jb25maWcgXCYjMzQ7JFNDUklQVF9ESVJcJiMzNDsvY29uZmlnOyB0aGVuXG4mIzQzO1x0XHRkaWUgXCYjMzQ7ZmFpbGVkIHRvIGdlbmVyYXRlIC5jb25maWcgZm9yIGtlcm5lbCBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiAhIG1ha2UgLWpcJiMzNDskKG5wcm9jKVwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZGllIFwmIzM0O2ZhaWxlZCB0byBidWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRwb3BkIFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2bV9zdGFydCgpIHtcbiYjNDM7XHRsb2NhbCBsb2dmaWxlPS9kZXYvbnVsbFxuJiM0MztcdGxvY2FsIHZlcmJvc2Vfb3B0PVwmIzM0O1wmIzM0O1xuJiM0MztcdGxvY2FsIGtlcm5lbF9vcHQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIFtbIFwmIzM0OyRWRVJCT1NFXCYjMzQ7IC1lcSAxIF1dOyB0aGVuXG4mIzQzO1x0XHR2ZXJib3NlX29wdD1cJiMzNDstLXZlcmJvc2VcJiMzNDtcbiYjNDM7XHRcdGxvZ2ZpbGU9L2Rldi9zdGRvdXRcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiBbWyBcJiMzNDskQlVJTERcJiMzNDsgLWVxIDEgXV07IHRoZW5cbiYjNDM7XHRcdGtlcm5lbF9vcHQ9XCYjMzQ7JHtLRVJORUxfQ0hFQ0tPVVR9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0dm5nIFxcXG4mIzQzO1x0XHQtLXJ1biBcXFxuJiM0MztcdFx0JHtrZXJuZWxfb3B0fSBcXFxuJiM0MztcdFx0JHt2ZXJib3NlX29wdH0gXFxcbiYjNDM7XHRcdC0tcWVtdS1vcHRzPVwmIzM0OyRRRU1VX09QVFNcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcWVtdT1cJiMzNDskKGNvbW1hbmQgLXYgXCYjMzQ7JFFFTVVcJiMzNDspXCYjMzQ7IFxcXG4mIzQzO1x0XHQtLXVzZXIgcm9vdCBcXFxuJiM0MztcdFx0LS1zc2ggXCYjMzQ7JFNTSF9HVUVTVF9QT1JUXCYjMzQ7IFxcXG4mIzQzO1x0XHQtLW1lbW9yeSAzRyBcXFxuJiM0MztcdFx0LS1hcHBlbmQgXCYjMzQ7Y21hPTY0TSBodWdldGxiX2NtYT0xRyBodWdldGxiX2NtYV9vbmx5PTFcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcncgXHUwMDI2XHUwMDNlXCYjMzQ7JGxvZ2ZpbGVcJiMzNDsgXHUwMDI2XG4mIzQzO1xuJiM0MztcdGxvY2FsIHZuZ19waWQ9JCFcbiYjNDM7XHRsb2NhbCBlbGFwc2VkPTBcbiYjNDM7XG4mIzQzO1x0d2hpbGUgW1sgISAtcyBcJiMzNDskUUVNVV9QSURGSUxFXCYjMzQ7IF1dOyBkb1xuJiM0MztcdFx0a2lsbCAtMCBcJiMzNDskdm5nX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IFxcXG4mIzQzO1x0XHRcdGRpZSBcJiMzNDt2bmcgZXhpdGVkIGVhcmx5OyBmYWlsZWQgdG8gYm9vdCBWTVwmIzM0O1xuJiM0MztcdFx0W1sgXCYjMzQ7JGVsYXBzZWRcJiMzNDsgLWdlIFwmIzM0OyRXQUlUX1RPVEFMXCYjMzQ7IF1dIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFx0XHRkaWUgXCYjMzQ7dGltZWQgb3V0IHdhaXRpbmcgZm9yIFZNIGJvb3RcJiMzNDtcbiYjNDM7XHRcdHNsZWVwIDFcbiYjNDM7XHRcdGVsYXBzZWQ9JCgoZWxhcHNlZCAmIzQzOyAxKSlcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZtX3dhaXRfZm9yX3NzaCgpIHtcbiYjNDM7XHRsb2NhbCBpPTBcbiYjNDM7XHR3aGlsZSB0cnVlOyBkb1xuJiM0MztcdFx0dm1fc3NoIC0tIHRydWUgXHUwMDI2XHUwMDI2IGJyZWFrXG4mIzQzO1x0XHRpPSQoKGkgJiM0MzsgMSkpXG4mIzQzO1x0XHRbWyBcJiMzNDske2l9XCYjMzQ7IC1ndCBcJiMzNDskV0FJVF9QRVJJT0RfTUFYXCYjMzQ7IF1dIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFx0XHRkaWUgXCYjMzQ7dGltZWQgb3V0IHdhaXRpbmcgZm9yIGd1ZXN0IHNzaFwmIzM0O1xuJiM0MztcdFx0c2xlZXAgXCYjMzQ7JFdBSVRfUEVSSU9EXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGVja19ndWVzdF9yZXF1aXJlbWVudHMoKSB7XG4mIzQzO1x0dm1fc3NoIC0tIFwmIzM0O2dyZXAgLXEgbWVtb3J5IC9zeXMvZnMvY2dyb3VwL2Nncm91cC5jb250cm9sbGVyc1wmIzM0OyBcXFxuJiM0MztcdFx0fHwgZGllIFwmIzM0O21lbW9yeSBjb250cm9sbGVyIG5vdCBhdmFpbGFibGUgKENPTkZJR19NRU1DRz8pXCYjMzQ7XG4mIzQzO1x0dm1fc3NoIC0tIFwmIzM0O1tbIC1lIC9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uIF1dXCYjMzQ7IFxcXG4mIzQzO1x0XHR8fCBkaWUgXCYjMzQ7Q01BIGhlYXAgbm90IGF2YWlsYWJsZSAoQ09ORklHX0RNQUJVRl9IRUFQU19DTUE/IGNtYT0gY21kbGluZT8pXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nKCkge1xuJiM0MztcdHZtX3NzaCAtLSBcJiMzNDttb3VudCAtbyByZW1vdW50LG1lbW9yeV9jbWFfYWNjb3VudGluZyAvc3lzL2ZzL2Nncm91cFwmIzM0OyBcXFxuJiM0MztcdFx0fHwgZGllIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgbWVtb3J5X2NtYV9hY2NvdW50aW5nXCYjMzQ7XG4mIzQzO1x0dm1fc3NoIC0tIFwmIzM0O2VjaG8gJiM0MzttZW1vcnkgXHUwMDNlIC9zeXMvZnMvY2dyb3VwL2Nncm91cC5zdWJ0cmVlX2NvbnRyb2xcJiMzNDsgXFxcbiYjNDM7XHRcdHx8IGRpZSBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3J1bl90ZXN0KCkge1xuJiM0MztcdHZtX3NzaCAtLSBcJiMzNDtjZCAmIzM5OyRHVUVTVF9UUkVFJiMzOTsgXHUwMDI2XHUwMDI2IG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMgVEFSR0VUUz1jZ3JvdXBcJiMzNDtcbiYjNDM7XHR2bV9zc2ggLS0gXCYjMzQ7Y2QgJiMzOTskR1VFU1RfVFJFRSYjMzk7IFx1MDAyNlx1MDAyNiBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwIHJ1bl90ZXN0c1wmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt3aGlsZSBnZXRvcHRzIFwmIzM0OzpodnE6c2JcJiMzNDsgb3B0OyBkb1xuJiM0MztcdGNhc2UgXCYjMzQ7JG9wdFwmIzM0OyBpblxuJiM0MztcdHYpIFZFUkJPU0U9MSA7O1xuJiM0MztcdHEpIFFFTVU9XCYjMzQ7JHtPUFRBUkd9XCYjMzQ7IDs7XG4mIzQzO1x0YikgQlVJTEQ9MSA7O1xuJiM0MztcdHMpIFNIRUxMX01PREU9MSA7O1xuJiM0MztcdGh8KikgdXNhZ2UgOztcbiYjNDM7XHRlc2FjXG4mIzQzO2RvbmVcbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MztjaGVja19kZXBzXG4mIzQzO2hhbmRsZV9idWlsZFxuJiM0MztlY2hvIFwmIzM0O0Jvb3RpbmcgdmlydG1lLW5nIFZNLi4uXCYjMzQ7XG4mIzQzO3ZtX3N0YXJ0XG4mIzQzO3ZtX3dhaXRfZm9yX3NzaFxuJiM0MztlY2hvIFwmIzM0O1ZNIGlzIHJlYWNoYWJsZSB2aWEgU1NILlwmIzM0O1xuJiM0MztcbiYjNDM7aWYgW1sgXCYjMzQ7JFNIRUxMX01PREVcJiMzNDsgLWVxIDEgXV07IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1N0YXJ0aW5nIGludGVyYWN0aXZlIHNoZWxsIGluIFZNLiBFeGl0IHRvIHN0b3AgVk0uXCYjMzQ7XG4mIzQzO1x0dm1fc3NoIC10IC0tIFwmIzM0O2NkICYjMzk7JEdVRVNUX1RSRUUmIzM5OyBcdTAwMjZcdTAwMjYgZXhlYyBiYXNoIC0tbm9wcm9maWxlIC0tbm9yY1wmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JEtTRlRfUEFTU1wmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7Y2hlY2tfZ3Vlc3RfcmVxdWlyZW1lbnRzXG4mIzQzO3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nXG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O1J1bm5pbmcgY2dyb3VwIHNlbGZ0ZXN0cyBpbiBWTS4uLlwmIzM0O1xuJiM0MztydW5fdGVzdFxuJiM0MztlY2hvIFwmIzM0O1BBU1M6IGNncm91cCBzZWxmdGVzdHMgY29tcGxldGVkXCYjMzQ7XG4mIzQzO2V4aXQgXCYjMzQ7JEtTRlRfUEFTU1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE5OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7RE1BX0NNQSYjMzQ7LAogICAgJiMzNDtETUFCVUZfSEVBUFMmIzM0OywKICAgICYjMzQ7RE1BQlVGX0hFQVBTX0NNQSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9jbWEmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF91bmNoYXJnZV9jbWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHdoaWNoIGVuYWJsZXMgYWNjb3VudGluZyBvZiBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gSXQgYWRkcyBuZXcgY29yZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgdG8gaGFuZGxlIHRoZSBhY2NvdW50aW5nIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENNQSBhbGxvY2F0aW9ucyAoZS5nLiwgdXNpbmcgRE1BLUJVRiBoZWFwcyBvciBodWdldGxiKSB3aGVuIHRoZSBtb3VudCBvcHRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBDTUEgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MzhkZTc0MTgxM2ViNDc2YTlkNTIwY2ZkMDk2Y2ExYTBhMTUxODQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTk6MTI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKaW5kZXggYWVkMTk1YTcxY2JmMS4uMzk4NzFhN2EwOGE4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdApAQCAtMjQ2LDYgJiM0MzsyNDYsMjYgQEAgY2dyb3VwIHYyIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG1vdW50IG9wdGlvbnMuCiAgICAgICAgICAgd2lsbCBub3QgYmUgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKGV2ZW4gaWYgY2dyb3VwCiAgICAgICAgICAgdjIgaXMgcmVtb3VudGVkIGxhdGVyIG9uKS4KIAomIzQzOyAgbWVtb3J5X2NtYV9hY2NvdW50aW5nCiYjNDM7ICAgICAgICBDb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZSBmb3IKJiM0MzsgICAgICAgIHRoZSBtZW1vcnkgY29udHJvbGxlciwgYW5kIGV4cG9zZSBwZXItQ01BLWFyZWEgdXNhZ2UgY291bnRlcnMuIFRoaXMKJiM0MzsgICAgICAgIGJlaGF2aW9yIGlzIG9wdC1pbiwgc28gYXMgdG8gbm90IGNhdXNlIHJlZ3Jlc3Npb24gb24gZXhpc3Rpbmcgc2V0dXBzLgomIzQzOwomIzQzOyAgICAgICAgQSBmZXcgY2F2ZWF0cyB0byBrZWVwIGluIG1pbmQ6CiYjNDM7CiYjNDM7ICAgICAgICAqIENNQSBhcmVhcyBhcmUgcmVzZXJ2ZWQgYXQgYm9vdCB0aW1lLCBtZW1vcnkgaXMgb25seSBjaGFyZ2VkIHRvIGEKJiM0MzsgICAgICAgICAgY2dyb3VwIHdoZW4gYSBDTUEgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgb24gaXRzIGJlaGFsZi4KJiM0MzsgICAgICAgICogQ01BIHBhZ2VzIGFsbG9jYXRlZCB3aGlsZSB0aGlzIG9wdGlvbiBpcyBub3QgZW5hYmxlZCB3aWxsIG5vdCBiZQomIzQzOyAgICAgICAgICB0cmFja2VkIGJ5IHRoZSBtZW1vcnkgY29udHJvbGxlciwgZXZlbiBpZiBjZ3JvdXAgdjIgaXMgcmVtb3VudGVkCiYjNDM7ICAgICAgICAgIGxhdGVyIG9uIHdpdGggdGhpcyBvcHRpb24uIENoYXJnZXMgaGFwcGVuIGF0IGFsbG9jYXRpb24uCiYjNDM7ICAgICAgICAqIENNQSBhbGxvY2F0aW9ucyBhcmUgY2hhcmdlZCBib3RoIHRvIHRoZSBjZ3JvdXAmIzM5O3MgbWVtb3J5IGNvdW50ZXIKJiM0MzsgICAgICAgICAgKGxpbWl0ZWQgYnkgbWVtb3J5Lm1heCkgYW5kIHRoZSBwZXItYXJlYSBDTUEgY291bnRlciAobGltaXRlZCBieQomIzQzOyAgICAgICAgICBtZW1vcnkuY21hLiZsdDthcmVhJmd0Oy5tYXgpLiBIaXR0aW5nIGVpdGhlciBsaW1pdCBjYW4gY2F1c2UgYW4gYWxsb2NhdGlvbgomIzQzOyAgICAgICAgICB0byBmYWlsLiBJZiBDTUEgdXNhZ2UgcHVzaGVzIHRoZSBjZ3JvdXAgb3ZlciBtZW1vcnkuaGlnaCBvcgomIzQzOyAgICAgICAgICBtZW1vcnkubWF4LCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgd2lsbCBhdHRlbXB0IHRvIHJlY2xhaW0gb3RoZXIKJiM0MzsgICAgICAgICAgbWVtb3J5IG9ubHkuIENNQSBtZW1vcnkgY2hhcmdlZCB0byB0aGUgY2dyb3VwIGlzIG5vdCByZWNsYWltYWJsZS4KJiM0MzsgICAgICAgICAgTGltaXRzIHNob3VsZCBiZSBzaXplZCB0byBhY2NvbW1vZGF0ZSB0aGUgZXhwZWN0ZWQgQ01BIHByZXNzdXJlLgomIzQzOwogICBwaWRzX2xvY2FsZXZlbnRzCiAgICAgICAgIFRoZSBvcHRpb24gcmVzdG9yZXMgdjEtbGlrZSBiZWhhdmlvciBvZiBwaWRzLmV2ZW50czptYXgsIHRoYXQgaXMgb25seQogICAgICAgICBsb2NhbCAoaW5zaWRlIGNncm91cCBwcm9wZXIpIGZvcmsgZmFpbHVyZXMgYXJlIGNvdW50ZWQuIFdpdGhvdXQgdGhpcwpAQCAtMTkwOCw2ICYjNDM7MTkyOCwyMSBAQCBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLgogCVRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGlmIHpzd2FwIGlzIGRpc2FibGVkLCBhbmQgc3dhcHBpbmcKIAlpcyBhbGxvd2VkIHVubGVzcyBtZW1vcnkuc3dhcC5tYXggaXMgc2V0IHRvIDAuCiAKJiM0MzsgIG1lbW9yeS5jbWEuJmx0O2FyZWEmZ3Q7LmN1cnJlbnQKJiM0MzsgICAgICAgIEEgcmVhZC1vbmx5IHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLiAmbHQ7YXJlYSZndDsKJiM0MzsgICAgICAgIGlzIHRoZSBDTUEgYXJlYSBuYW1lIChlLmcuICYjMzQ7cmVzZXJ2ZWQmIzM0OyBmb3IgdGhlIGRlZmF1bHQgRE1BIENNQSBhcmVhKS4KJiM0MzsKJiM0MzsgICAgICAgIFRoZSB0b3RhbCBhbW91bnQgb2YgQ01BIG1lbW9yeSBjdXJyZW50bHkgY2hhcmdlZCB0byB0aGUgY2dyb3VwIGZvciB0aGUKJiM0MzsgICAgICAgIGdpdmVuIENNQSBhcmVhLiBPbmx5IGFjY291bnRlZCB3aGVuIG1lbW9yeV9jbWFfYWNjb3VudGluZyBpcyBlbmFibGVkLgomIzQzOwomIzQzOyAgbWVtb3J5LmNtYS4mbHQ7YXJlYSZndDsubWF4CiYjNDM7ICAgICAgICBBIHJlYWQtd3JpdGUgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFRoZQomIzQzOyAgICAgICAgZGVmYXVsdCBpcyAmIzM0O21heCYjMzQ7LgomIzQzOwomIzQzOyAgICAgICAgQ01BIHVzYWdlIGhhcmQgbGltaXQgZm9yIHRoZSBnaXZlbiBhcmVhLiBJZiBhIGNncm91cCYjMzk7cyBDTUEgdXNhZ2UgZm9yCiYjNDM7ICAgICAgICB0aGlzIGFyZWEgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZhaWwuIE9ubHkgZW5mb3JjZWQKJiM0MzsgICAgICAgIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuCiYjNDM7CiAgIG1lbW9yeS5wcmVzc3VyZQogCUEgcmVhZC1vbmx5IG5lc3RlZC1rZXllZCBmaWxlLgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmgKaW5kZXggZGUyY2Q2MjM4YzJhZS4uMTVmM2Y3MTEwYzViMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaApAQCAtMTI5LDYgJiM0MzsxMjksMTEgQEAgZW51bSB7CiAJICogRW5hYmxlIGxlZ2FjeSBsb2NhbCBwaWRzLmV2ZW50cy4KIAkgKi8KIAlDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMgPSAoMSAmbHQ7Jmx0OyAyMCksCiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBjbWEgYWNjb3VudGluZyBmb3IgdGhlIG1lbW9yeSBjb250cm9sbGVyLgomIzQzOwkgKi8KJiM0MzsJQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORyA9ICgxICZsdDsmbHQ7IDIxKSwKIH07CiAKIC8qIGNmdHlwZS0mZ3Q7ZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY21hLmggYi9pbmNsdWRlL2xpbnV4L2NtYS5oCmluZGV4IDg1NTVkMzhhOTdiMWEuLjE2ZTIxMzY0MjFiNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY21hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jbWEuaApAQCAtNDksMTIgJiM0Mzs0OSwxMiBAQCBleHRlcm4gaW50IGNtYV9pbml0X3Jlc2VydmVkX21lbShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLAogCQkJCQlzdHJ1Y3QgY21hICoqcmVzX2NtYSk7CiBleHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbiwKIAkJCSAgICAgIGJvb2wgbm9fd2Fybik7Ci1leHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiYjNDM7ZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsCiAJCXVuc2lnbmVkIGludCBhbGlnbiwgYm9vbCBub193YXJuKTsKIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgaW50IG9yZGVyKTsKLWJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLAomIzQzO2Jvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLAogCQl1bnNpZ25lZCBsb25nIGNvdW50KTsKIAogZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDgxNzBiYjgwNjZhMjIuLjgwMWZiZGU5NDEzN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0zMjAsNiAmIzQzOzMyMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAJc3BpbmxvY2tfdCBldmVudF9saXN0X2xvY2s7CiAjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzOwlzdHJ1Y3QgcGFnZV9jb3VudGVyICpjbWFfY291bnRlcnM7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19DTUEgKi8KJiM0MzsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbm9kZWluZm9bXTsKIH07CiAKQEAgLTY2Miw2ICYjNDM7NjY2LDExIEBAIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7CiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLAogCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwogCiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkgIHN0cnVjdCBjbWEgKmNtYSk7CiYjNDM7dm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkgICAgIHN0cnVjdCBjbWEgKmNtYSk7CiYjNDM7CiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogLyoqCkBAIC0xMTYwLDYgJiM0MzsxMTY5LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LAomIzQzOwkJCQkJc3RydWN0IGNtYSAqY21hKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwL2Nncm91cC5jCmluZGV4IGI1YjQ2MWQ0NDE4YjEuLjEyMTg0Zjg1YWQxMDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Nncm91cC9jZ3JvdXAuYwpAQCAtMTk4NSw2ICYjNDM7MTk4NSw3IEBAIGVudW0gY2dyb3VwMl9wYXJhbSB7CiAJT3B0X21lbW9yeV9yZWN1cnNpdmVwcm90LAogCU9wdF9tZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLAogCU9wdF9waWRzX2xvY2FsZXZlbnRzLAomIzQzOwlPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nLAogCW5yX19jZ3JvdXAyX3BhcmFtcwogfTsKIApAQCAtMTk5NSw2ICYjNDM7MTk5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgY2dyb3VwMl9mc19wYXJhbWV0ZXJzW10gPSB7CiAJZnNwYXJhbV9mbGFnKCYjMzQ7bWVtb3J5X3JlY3Vyc2l2ZXByb3QmIzM0OywJT3B0X21lbW9yeV9yZWN1cnNpdmVwcm90KSwKIAlmc3BhcmFtX2ZsYWcoJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nJiMzNDssIE9wdF9tZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nKSwKIAlmc3BhcmFtX2ZsYWcoJiMzNDtwaWRzX2xvY2FsZXZlbnRzJiMzNDssCU9wdF9waWRzX2xvY2FsZXZlbnRzKSwKJiM0MzsJZnNwYXJhbV9mbGFnKCYjMzQ7bWVtb3J5X2NtYV9hY2NvdW50aW5nJiMzNDssCU9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcpLAogCXt9CiB9OwogCkBAIC0yMDI3LDYgJiM0MzsyMDI5LDkgQEAgc3RhdGljIGludCBjZ3JvdXAyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0KIAljYXNlIE9wdF9waWRzX2xvY2FsZXZlbnRzOgogCQljdHgtJmd0O2ZsYWdzIHw9IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUzsKIAkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgT3B0X21lbW9yeV9jbWFfYWNjb3VudGluZzoKJiM0MzsJCWN0eC0mZ3Q7ZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORzsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwNjgsNiAmIzQzOzIwNzMsMTEgQEAgc3RhdGljIHZvaWQgYXBwbHlfY2dyb3VwX3Jvb3RfZmxhZ3ModW5zaWduZWQgaW50IHJvb3RfZmxhZ3MpCiAJCQljZ3JwX2RmbF9yb290LmZsYWdzIHw9IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUzsKIAkJZWxzZQogCQkJY2dycF9kZmxfcm9vdC5mbGFncyAmYW1wOz0gfkNHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUzsKJiM0MzsKJiM0MzsJCWlmIChyb290X2ZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpCiYjNDM7CQkJY2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HOwomIzQzOwkJZWxzZQomIzQzOwkJCWNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDs9IH5DR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HOwogCX0KIH0KIApAQCAtMjA4NSw2ICYjNDM7MjA5NSw4IEBAIHN0YXRpYyBpbnQgY2dyb3VwX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGtlcm5mc19yb290ICprZl9yb290CiAJCXNlcV9wdXRzKHNlcSwgJiMzNDssbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyYjMzQ7KTsKIAlpZiAoY2dycF9kZmxfcm9vdC5mbGFncyAmYW1wOyBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMpCiAJCXNlcV9wdXRzKHNlcSwgJiMzNDsscGlkc19sb2NhbGV2ZW50cyYjMzQ7KTsKJiM0MzsJaWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDsgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORykKJiM0MzsJCXNlcV9wdXRzKHNlcSwgJiMzNDssbWVtb3J5X2NtYV9hY2NvdW50aW5nJiMzNDspOwogCXJldHVybiAwOwogfQogCkBAIC03NTIwLDcgJiM0Mzs3NTMyLDggQEAgc3RhdGljIHNzaXplX3QgZmVhdHVyZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAogCQkJJiMzNDttZW1vcnlfbG9jYWxldmVudHNcbiYjMzQ7CiAJCQkmIzM0O21lbW9yeV9yZWN1cnNpdmVwcm90XG4mIzM0OwogCQkJJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXG4mIzM0OwotCQkJJiMzNDtwaWRzX2xvY2FsZXZlbnRzXG4mIzM0Oyk7CiYjNDM7CQkJJiMzNDtwaWRzX2xvY2FsZXZlbnRzXG4mIzM0OwomIzQzOwkJCSYjMzQ7bWVtb3J5X2NtYV9hY2NvdW50aW5nXG4mIzM0Oyk7CiB9CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNncm91cF9mZWF0dXJlc19hdHRyID0gX19BVFRSX1JPKGZlYXR1cmVzKTsKIApkaWZmIC0tZ2l0IGEvbW0vY21hLmMgYi9tbS9jbWEuYwppbmRleCBhMTNjZTQ5OTliMzlmLi4wM2ViM2FjYmQzYzc1IDEwMDY0NAotLS0gYS9tbS9jbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWEuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmdfY2hvaWNlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9oaWdobWVtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rbWVtbGVhay5oJmd0OwpAQCAtOTA1LDYgJiM0Mzs5MDQsMTIgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2NtYV9hbGxvY19mcm96ZW4oc3RydWN0IGNtYSAqY21hLAogCQljbWFfZGVidWdfc2hvd19hcmVhcyhjbWEpOwogCX0KIAomIzQzOwlpZiAocGFnZSAmYW1wOyZhbXA7IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShwYWdlLCBjb3VudCwgY21hKSkgewomIzQzOwkJZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBjb3VudCk7CiYjNDM7CQljbWFfY2xlYXJfYml0bWFwKGNtYSwgJmFtcDtjbWEtJmd0O3Jhbmdlc1tyXSwgcGFnZV90b19wZm4ocGFnZSksIGNvdW50KTsKJiM0MzsJCXBhZ2UgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJcHJfZGVidWcoJiMzNDslcygpOiByZXR1cm5lZCAlcFxuJiMzNDssIF9fZnVuY19fLCBwYWdlKTsKIAl0cmFjZV9jbWFfYWxsb2NfZmluaXNoKG5hbWUsIHBhZ2UgPyBwYWdlX3RvX3BmbihwYWdlKSA6IDAsCiAJCQkgICAgICAgcGFnZSwgY291bnQsIGFsaWduLCByZXQpOwpAQCAtOTkyLDEyICYjNDM7OTk3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX21lbXJhbmdlICpmaW5kX2NtYV9tZW1yYW5nZShzdHJ1Y3QgY21hICpjbWEsCiB9CiAKIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLAotCQljb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpCiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlcyk7CiAKIAlwcl9kZWJ1ZygmIzM0OyVzKHBhZ2UgJXAsIGNvdW50ICVsdSlcbiYjMzQ7LCBfX2Z1bmNfXywgKHZvaWQgKilwYWdlcywgY291bnQpOwogCiYjNDM7CW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHBhZ2VzLCBjb3VudCwgY21hKTsKIAlmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGZuLCBjb3VudCk7CiAJY21hX2NsZWFyX2JpdG1hcChjbWEsIGNtciwgcGZuLCBjb3VudCk7CiAJY21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhjbWEsIGNvdW50KTsKQEAgLTEwMTQsNyAmIzQzOzEwMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2NtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtciwKICAqIEl0IHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXMgYXJlYSBhbmQKICAqIHRydWUgb3RoZXJ3aXNlLgogICovCi1ib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLAomIzQzO2Jvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsCiAJCSB1bnNpZ25lZCBsb25nIGNvdW50KQogewogCXN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcjsKQEAgLTEwMzcsNyAmIzQzOzEwNDMsNyBAQCBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY21hX3JlbGVhc2UpOwogCi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKJiM0Mztib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywKIAkJdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7CmRpZmYgLS1naXQgYS9tbS9jbWEuaCBiL21tL2NtYS5oCmluZGV4IGM3MDE4MGMzNjU1OWMuLjUyYjdkNGJlNTE3MDcgMTAwNjQ0Ci0tLSBhL21tL2NtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYS5oCkBAIC00LDYgJiM0Mzs0LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rb2JqZWN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NtYS5oJmd0OwogCiBzdHJ1Y3QgY21hX2tvYmplY3QgewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CkBAIC04MCw2ICYjNDM7ODEsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNtYV9iaXRtYXBfbWF4bm8oc3RydWN0IGNtYSAqY21hLAogCXJldHVybiBjbXItJmd0O2NvdW50ICZndDsmZ3Q7IGNtYS0mZ3Q7b3JkZXJfcGVyX2JpdDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGNtYV9hcmVhX2luZGV4KGNvbnN0IHN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7CXJldHVybiBjbWEgLSBjbWFfYXJlYXM7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19DTUFfU1lTRlMKIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfc3VjY2Vzc19wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBjbWFfc3lzZnNfYWNjb3VudF9mYWlsX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CmRpZmYgLS1naXQgYS9tbS9jbWFfZGVidWcuYyBiL21tL2NtYV9kZWJ1Zy5jCmluZGV4IDUyM2JhNGEwZjlmNzYuLjcwYmZjNmZiZWVjYTMgMTAwNjQ0Ci0tLSBhL21tL2NtYV9kZWJ1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYV9kZWJ1Zy5jCkBAIC03LDcgJiM0Mzs3LDYgQEAKIAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZGVidWdmcy5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2NtYS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CmRpZmYgLS1naXQgYS9tbS9jbWFfc3lzZnMuYyBiL21tL2NtYV9zeXNmcy5jCmluZGV4IGQ1YmY3OTJjNjI0NWEuLmU0ZWUzNWJjNjgyYmEgMTAwNjQ0Ci0tLSBhL21tL2NtYV9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYV9zeXNmcy5jCkBAIC01LDcgJiM0Mzs1LDYgQEAKICAqIENvcHlyaWdodCAoYykgMjAyMSBNaW5jaGFuIEtpbSAmbHQ7bWluY2hhbkBrZXJuZWwub3JnJmd0OwogICovCiAKLSNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2ZGM0ODg4YTkwZjNmLi5mMjhkNjEwYTU5Y2U3IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC02OCw2ICYjNDM7NjgsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9pcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtzbGFiLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttZW1jb250cm9sLXYxLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y21hLmgmIzM0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogCkBAIC00MDYyLDYgJiM0Mzs0MDYzLDkgQEAgc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCWludCBub2RlOwogCiYjNDM7I2lmZGVmIENPTkZJR19DTUEKJiM0MzsJa2ZyZWUobWVtY2ctJmd0O2NtYV9jb3VudGVycyk7CiYjNDM7I2VuZGlmCiAJZm9yX2VhY2hfbm9kZShub2RlKSB7CiAJCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiA9IG1lbWNnLSZndDtub2RlaW5mb1tub2RlXTsKIAkJaWYgKCFwbikKQEAgLTQxNDQsNiAmIzQzOzQxNDgsMTUgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspCiAJCW1lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lID0KIAkJCV9fV0JfQ09NUExFVElPTl9JTklUKCZhbXA7bWVtY2dfY2d3Yl9mcm5fd2FpdHEpOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7CWlmIChjbWFfYXJlYV9jb3VudCkgewomIzQzOwkJbWVtY2ctJmd0O2NtYV9jb3VudGVycyA9IGtjYWxsb2MoY21hX2FyZWFfY291bnQsCiYjNDM7CQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHBhZ2VfY291bnRlciksCiYjNDM7CQkJCQkgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghbWVtY2ctJmd0O2NtYV9jb3VudGVycykKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KICNlbmRpZgogCWxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7CiAJcmV0dXJuIG1lbWNnOwpAQCAtNDE1OSw2ICYjNDM7NDE3Miw3IEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKQogCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHBhcmVudF9jc3MpOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZzsKIAlib29sIG1lbWNnX29uX2RmbCA9IGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7CiYjNDM7CXVuc2lnbmVkIGludCBfX21heWJlX3VudXNlZCBpOwogCiAJb2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpOwogCW1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpOwpAQCAtNDE3MSw2ICYjNDM7NDE4NSwxMiBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcykKICNpZmRlZiBDT05GSUdfWlNXQVAKIAltZW1jZy0mZ3Q7enN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDsKIAlXUklURV9PTkNFKG1lbWNnLSZndDt6c3dhcF93cml0ZWJhY2ssIHRydWUpOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbWFfYXJlYV9jb3VudDsgJiM0MzsmIzQzO2kpCiYjNDM7CQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDtjbWFfY291bnRlcnNbaV0sCiYjNDM7CQkJCSAgcGFyZW50ID8gJmFtcDtwYXJlbnQtJmd0O2NtYV9jb3VudGVyc1tpXSA6IE5VTEwsCiYjNDM7CQkJCSAgZmFsc2UpOwogI2VuZGlmCiAJcGFnZV9jb3VudGVyX3NldF9oaWdoKCZhbXA7bWVtY2ctJmd0O3N3YXAsIFBBR0VfQ09VTlRFUl9NQVgpOwogCWlmIChwYXJlbnQpIHsKQEAgLTUyMTMsNiAmIzQzOzUyMzMsMTAyIEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfY21hKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY2dycF9kZmxfcm9vdC5mbGFncyAmYW1wOyBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LAomIzQzOwkJCSAgc3RydWN0IGNtYSAqY21hKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgKmZhaWw7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJaW50IHJjID0gMDsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTsKJiM0MzsJaWYgKCFtZW1jZykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKJiM0MzsJCWdvdG8gY2dyb3VwX3B1dDsKJiM0MzsKJiM0MzsJcmMgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBHRlBfS0VSTkVMLCBjb3VudCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gY2dyb3VwX3B1dDsKJiM0MzsKJiM0MzsJY291bnRlciA9ICZhbXA7bWVtY2ctJmd0O2NtYV9jb3VudGVyc1tjbWFfYXJlYV9pbmRleChjbWEpXTsKJiM0MzsJaWYgKCFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShjb3VudGVyLCBjb3VudCwgJmFtcDtmYWlsKSkgewomIzQzOwkJcmVmaWxsX3N0b2NrKG1lbWNnLCBjb3VudCk7CiYjNDM7CQlyYyA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGNncm91cF9wdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX21lbWNnKG1lbWNnKTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UocGFnZV9mb2xpbyhwYWdlKSkpIHsKJiM0MzsJCWNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlKSwgb2JqY2cpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJb2JqX2Nncm91cF9nZXRfbWFueShvYmpjZywgY291bnQgLSAxKTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspCiYjNDM7CQkJY29tbWl0X2NoYXJnZShwYWdlX2ZvbGlvKHBhZ2UgJiM0MzsgaSksIG9iamNnKTsKJiM0MzsJfQomIzQzOwomIzQzO2Nncm91cF9wdXQ6CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LAomIzQzOwkJCSAgICAgc3RydWN0IGNtYSAqY21hKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19jbWEoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogR2V0IHRoZSBvYmpjZyBmcm9tIHRoZSBmaXJzdCBwYWdlLgomIzQzOwkgKiBwYWdlX29iamNnKCkgZXhwZWN0cyBNRU1DR19EQVRBX0tNRU0sIGJ1dCBmb3IgQ01BIHdlIHVzZWQKJiM0MzsJICogY29tbWl0X2NoYXJnZSgpIHdoaWNoIHNldHMgZm9saW8tJmd0O21lbWNnX2RhdGEgPSBvYmpjZwomIzQzOwkgKiB3aXRob3V0IGZsYWdzLCBzbyB3ZSBjYW5ub3QgdXNlIGl0LgomIzQzOwkgKi8KJiM0MzsJb2JqY2cgPSBmb2xpb19vYmpjZyhwYWdlX2ZvbGlvKHBhZ2UpKTsKJiM0MzsJaWYgKCFvYmpjZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpOwomIzQzOwomIzQzOwljb3VudGVyID0gJmFtcDttZW1jZy0mZ3Q7Y21hX2NvdW50ZXJzW2NtYV9hcmVhX2luZGV4KGNtYSldOwomIzQzOwlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoY291bnRlciwgY291bnQpOwomIzQzOwomIzQzOwltZW1jZ191bmNoYXJnZShtZW1jZywgY291bnQpOwomIzQzOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHsKJiM0MzsJCWZvbGlvLSZndDttZW1jZ19kYXRhID0gMDsKJiM0MzsJCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCQlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSAmIzQzOyBpKTsKJiM0MzsJCQlmb2xpby0mZ3Q7bWVtY2dfZGF0YSA9IDA7CiYjNDM7CQkJb2JqX2Nncm91cF9wdXQob2JqY2cpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfQ01BICovCiYjNDM7CiBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyIHsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJdW5zaWduZWQgbG9uZyBucl9tZW1vcnk7CkBAIC02MDY2LDMgJiM0Mzs2MTgyLDkyIEBAIHZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCQlLKGF0b21pY19sb25nX3JlYWQoJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LmNoaWxkcmVuX21pbl91c2FnZSkpLAogCQlLKGF0b21pY19sb25nX3JlYWQoJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LmNoaWxkcmVuX2xvd191c2FnZSkpKTsKIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzO3N0YXRpYyBpbnQgbWVtb3J5X2NtYV9jdXJyZW50X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTsKJiM0MzsJaW50IGlkeCA9IHNlcV9jZnQobSktJmd0O3ByaXZhdGU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY3VyID0gcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7Y21hX2NvdW50ZXJzW2lkeF0pOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKG0sICYjMzQ7JWx1XG4mIzM0OywgY3VyICogUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWVtb3J5X2NtYV9tYXhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pOwomIzQzOwlpbnQgaWR4ID0gc2VxX2NmdChtKS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctJmd0O2NtYV9jb3VudGVyc1tpZHhdLm1heCk7CiYjNDM7CiYjNDM7CXJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sIG1heCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IG1lbW9yeV9jbWFfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLAomIzQzOwkJCQkgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7CiYjNDM7CWludCBpZHggPSBvZl9jZnQob2YpLSZndDtwcml2YXRlOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlidWYgPSBzdHJzdHJpcChidWYpOwomIzQzOwlyYyA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsICYjMzQ7bWF4JiMzNDssICZhbXA7bWF4KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl4Y2hnKCZhbXA7bWVtY2ctJmd0O2NtYV9jb3VudGVyc1tpZHhdLm1heCwgbWF4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5ieXRlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjZnR5cGUgY21hX2RmbF90bXBsW10gPSB7CiYjNDM7CXsKJiM0MzsJCS5uYW1lID0gJiMzNDtjdXJyZW50JiMzNDssCiYjNDM7CQkuc2VxX3Nob3cgPSBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdywKJiM0MzsJCS5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLm5hbWUgPSAmIzM0O21heCYjMzQ7LAomIzQzOwkJLnNlcV9zaG93ID0gbWVtb3J5X2NtYV9tYXhfc2hvdywKJiM0MzsJCS53cml0ZSA9IG1lbW9yeV9jbWFfbWF4X3dyaXRlLAomIzQzOwkJLmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULAomIzQzOwl9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzOyNkZWZpbmUgQ01BX0RGTF9UTVBMX1NJWkUJKEFSUkFZX1NJWkUoY21hX2RmbF90bXBsKSAtIDEpCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjZnR5cGUgKmNtYV9kZmxfZmlsZXM7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9jbWFfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGNmdHlwZSAqY2Z0OwomIzQzOwl1bnNpZ25lZCBpbnQgaSwgajsKJiM0MzsJaW50IGNvdW50OwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjbWFfYXJlYV9jb3VudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwljb3VudCA9IGNtYV9hcmVhX2NvdW50ICogQ01BX0RGTF9UTVBMX1NJWkU7CiYjNDM7CWNtYV9kZmxfZmlsZXMgPSBrY2FsbG9jKGNvdW50ICYjNDM7IDEsIHNpemVvZigqY21hX2RmbF90bXBsKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY21hX2RmbF9maWxlcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY21hX2FyZWFfY291bnQ7ICYjNDM7JiM0MztpKQomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IENNQV9ERkxfVE1QTF9TSVpFOyAmIzQzOyYjNDM7aikgewomIzQzOwkJCWNmdCA9ICZhbXA7Y21hX2RmbF9maWxlc1tpICogQ01BX0RGTF9UTVBMX1NJWkUgJiM0Mzsgal07CiYjNDM7CQkJKmNmdCA9IGNtYV9kZmxfdG1wbFtqXTsKJiM0MzsJCQlzbnByaW50ZihjZnQtJmd0O25hbWUsIE1BWF9DRlRZUEVfTkFNRSwgJiMzNDtjbWEuJXMuJXMmIzM0OywKJiM0MzsJCQkJIGNtYV9nZXRfbmFtZSgmYW1wO2NtYV9hcmVhc1tpXSksCiYjNDM7CQkJCSBjbWFfZGZsX3RtcGxbal0ubmFtZSk7CiYjNDM7CQkJY2Z0LSZndDtwcml2YXRlID0gaTsgLyogY21hIGFyZWEgaW5kZXggZm9yIGNvdW50ZXJzIGluIGNhbGxiYWNrcy4gKi8KJiM0MzsJCQlsb2NrZGVwX3JlZ2lzdGVyX2tleSgmYW1wO2NmdC0mZ3Q7bG9ja2RlcF9rZXkpOwomIzQzOwkJfQomIzQzOwomIzQzOwlXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoJmFtcDttZW1vcnlfY2dycF9zdWJzeXMsIGNtYV9kZmxfZmlsZXMpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO3N1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX2NtYV9pbml0KTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0NNQSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZQppbmRleCA5NTJlNDQ0OGJmMDcwLi5iOWE0Mjk4ZDQ5NDQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZQpAQCAtMSw1ICYjNDM7MSw2IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIHRlc3RfY29yZQomIzQzO3Rlc3RfY21hX21lbWNnCiB0ZXN0X2NwdQogdGVzdF9jcHVzZXQKIHRlc3RfZnJlZXplcgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlCmluZGV4IGUwMTU4NGMyMTg5YWMuLjYwMWQ5MzAxNjBhNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUKQEAgLTgsNiAmIzQzOzgsNyBAQCBURVNUX1BST0dTICAgICA6PSB0ZXN0X3N0cmVzcy5zaCB0ZXN0X2NwdXNldF9wcnMuc2ggdGVzdF9jcHVzZXRfdjFfaHAuc2gKIFRFU1RfR0VOX0ZJTEVTIDo9IHdhaXRfaW5vdGlmeQogIyBLZWVwIHRoZSBsaXN0cyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQKIFRFU1RfR0VOX1BST0dTICA9IHRlc3RfY29yZQomIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X2NtYV9tZW1jZwogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHRlc3RfY3B1CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jcHVzZXQKIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X2ZyZWV6ZXIKQEAgLTI0LDYgJiM0MzsyNSw3IEBAIGluY2x1ZGUgLi4vbGliLm1rCiBpbmNsdWRlIGxpYi9saWJjZ3JvdXAubWsKIAogJChPVVRQVVQpL3Rlc3RfY29yZTogJChMSUJDR1JPVVBfTykKJiM0MzskKE9VVFBVVCkvdGVzdF9jbWFfbWVtY2c6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9jcHU6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9jcHVzZXQ6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9mcmVlemVyOiAkKExJQkNHUk9VUF9PKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcKaW5kZXggMzlmOTc5NjkwZGQzYi4uMWM5MDM0MDE3NjgyZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnCkBAIC00LDMgJiM0Mzs0LDggQEAgQ09ORklHX0NHUk9VUF9GUkVFWkVSPXkKIENPTkZJR19DR1JPVVBfU0NIRUQ9eQogQ09ORklHX01FTUNHPXkKIENPTkZJR19QQUdFX0NPVU5URVI9eQomIzQzO0NPTkZJR19DTUE9eQomIzQzO0NPTkZJR19ETUFfQ01BPXkKJiM0MztDT05GSUdfRE1BQlVGX0hFQVBTPXkKJiM0MztDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15CiYjNDM7Q09ORklHX0hVR0VUTEJGUz15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjliZDQxZDlhNjE3N2QKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYwpAQCAtMCwwICYjNDM7MSw0MDIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1oZWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9pb2N0bC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2dyb3VwX3V0aWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDTUFfSEVBUF9ERUZBVUxUX1BBVEgJJiMzNDsvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiYjMzQ7CiYjNDM7I2RlZmluZSBDTUFfUkVTRVJWRURfQ1VSUkVOVAkmIzM0O21lbW9yeS5jbWEucmVzZXJ2ZWQuY3VycmVudCYjMzQ7CiYjNDM7I2RlZmluZSBDTUFfUkVTRVJWRURfTUFYCSYjMzQ7bWVtb3J5LmNtYS5yZXNlcnZlZC5tYXgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgSFVHRVRMQl9DTUFfQ1VSUkVOVAkmIzM0O21lbW9yeS5jbWEuaHVnZXRsYjAuY3VycmVudCYjMzQ7CiYjNDM7I2RlZmluZSBIVUdFVExCX0NNQV9NQVgJJiMzNDttZW1vcnkuY21hLmh1Z2V0bGIwLm1heCYjMzQ7CiYjNDM7I2RlZmluZSBIVUdFUEFHRVNfRElSCQkmIzM0Oy9zeXMva2VybmVsL21tL2h1Z2VwYWdlcyYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjbWFfaGVhcF9hbGxvYyhpbnQgaGVhcF9mZCwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2hlYXBfYWxsb2NhdGlvbl9kYXRhIGRhdGEgPSB7CiYjNDM7CQkubGVuID0gc2l6ZSwKJiM0MzsJCS5mZF9mbGFncyA9IE9fUkRXUiB8IE9fQ0xPRVhFQywKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGhlYXBfZmQsIERNQV9IRUFQX0lPQ1RMX0FMTE9DLCAmYW1wO2RhdGEpICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRhdGEuZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpCiYjNDM7ewomIzQzOwlpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTsKJiM0MzsJaW50IHJjID0gS1NGVF9GQUlMLCBpbl9jZyA9IDA7CiYjNDM7CXNpemVfdCBzaXplID0gNFVMICZsdDsmbHQ7IDIwOwomIzQzOwlsb25nIGJlZm9yZSwgYWZ0ZXI7CiYjNDM7CWNoYXIgKmNnOwomIzQzOwomIzQzOwljZyA9IGNnX25hbWUocm9vdCwgJiMzNDttZW1jZ19jbWFfY2hhcmdlJiMzNDspOwomIzQzOwlpZiAoIWNnKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoY2dfY3JlYXRlKGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpbl9jZyA9IDE7CiYjNDM7CiYjNDM7CWhlYXBfZmQgPSBvcGVuKENNQV9IRUFQX0RFRkFVTFRfUEFUSCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwlpZiAoaGVhcF9mZCAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpOwomIzQzOwomIzQzOwlidWZfZmQgPSBjbWFfaGVhcF9hbGxvYyhoZWFwX2ZkLCBzaXplKTsKJiM0MzsJaWYgKGJ1Zl9mZCAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IGFsbG9jYXRlIGluIENNQSBoZWFwICglbSlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpOwomIzQzOwomIzQzOwlpZiAoYWZ0ZXIgLSBiZWZvcmUgJmx0OyAobG9uZylzaXplKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygKJiM0MzsJCQkmIzM0O2ludmFsaWQgQ01BIGNvdW50ZXIgYWZ0ZXIgY2hhcmdlOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxuJiMzNDssCiYjNDM7CQkJYmVmb3JlLCBhZnRlcik7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2UoYnVmX2ZkKTsKJiM0MzsJYnVmX2ZkID0gLTE7CiYjNDM7CiYjNDM7CWFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7CiYjNDM7CWlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygKJiM0MzsJCQkmIzM0O2ludmFsaWQgQ01BIGNvdW50ZXIgYWZ0ZXIgdW5jaGFyZ2U6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkXG4mIzM0OywKJiM0MzsJCQliZWZvcmUsIGFmdGVyKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IEtTRlRfUEFTUzsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlpZiAoYnVmX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShidWZfZmQpOwomIzQzOwlpZiAoaGVhcF9mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoaGVhcF9mZCk7CiYjNDM7CiYjNDM7CWlmIChpbl9jZykKJiM0MzsJCWNnX2VudGVyX2N1cnJlbnQocm9vdCk7CiYjNDM7CWNnX2Rlc3Ryb3koY2cpOwomIzQzOwlmcmVlKGNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfY21hX2xpbWl0KGNvbnN0IGNoYXIgKnJvb3QpCiYjNDM7ewomIzQzOwlpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTsKJiM0MzsJaW50IHJjID0gS1NGVF9GQUlMLCBpbl9jZyA9IDA7CiYjNDM7CXNpemVfdCBzaXplID0gNFVMICZsdDsmbHQ7IDIwOwomIzQzOwljaGFyICpjZzsKJiM0MzsKJiM0MzsJY2cgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfY21hX2xpbWl0JiMzNDspOwomIzQzOwlpZiAoIWNnKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoY2dfY3JlYXRlKGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpbl9jZyA9IDE7CiYjNDM7CiYjNDM7CWlmIChjZ193cml0ZShjZywgQ01BX1JFU0VSVkVEX01BWCwgJiMzNDsyTSYjMzQ7KSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3Qgc2V0IENNQSBsaW1pdCAoJW0pXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmIChoZWFwX2ZkICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3Qgb3BlbiBDTUEgaGVhcCAoJW0pXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7CiYjNDM7CWlmIChidWZfZmQgJmd0Oz0gMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtDTUEgbGltaXQgbm90IGVuZm9yY2VkLlxuJiMzNDspOwomIzQzOwkJY2xvc2UoYnVmX2ZkKTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlyYyA9IEtTRlRfUEFTUzsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlpZiAoaGVhcF9mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoaGVhcF9mZCk7CiYjNDM7CiYjNDM7CWlmIChpbl9jZykKJiM0MzsJCWNnX2VudGVyX2N1cnJlbnQocm9vdCk7CiYjNDM7CWNnX2Rlc3Ryb3koY2cpOwomIzQzOwlmcmVlKGNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYih2b2lkKQomIzQzO3sKJiM0MzsJRElSICpkaXI7CiYjNDM7CXN0cnVjdCBkaXJlbnQgKmVudHJ5OwomIzQzOwlsb25nIG1heF9zaXplID0gMDsKJiM0MzsKJiM0MzsJZGlyID0gb3BlbmRpcihIVUdFUEFHRVNfRElSKTsKJiM0MzsJaWYgKCFkaXIpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXdoaWxlICgoZW50cnkgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKJiM0MzsJCWxvbmcgc2l6ZTsKJiM0MzsKJiM0MzsJCWlmIChzc2NhbmYoZW50cnktJmd0O2RfbmFtZSwgJiMzNDtodWdlcGFnZXMtJWxka0ImIzM0OywgJmFtcDtzaXplKSA9PSAxKSB7CiYjNDM7CQkJaWYgKHNpemUgJmd0OyBtYXhfc2l6ZSkKJiM0MzsJCQkJbWF4X3NpemUgPSBzaXplOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWNsb3NlZGlyKGRpcik7CiYjNDM7CiYjNDM7CXJldHVybiBtYXhfc2l6ZSAmZ3Q7IDAgPyBtYXhfc2l6ZSA6IC0xOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyByZWFkX3N5c2ZzX2xvbmcoY29uc3QgY2hhciAqcGF0aCkKJiM0Mzt7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CWxvbmcgdmFsID0gLTE7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKGZzY2FuZihmLCAmIzM0OyVsZCYjMzQ7LCAmYW1wO3ZhbCkgIT0gMSkKJiM0MzsJCXZhbCA9IC0xOwomIzQzOwlmY2xvc2UoZik7CiYjNDM7CXJldHVybiB2YWw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoLCBsb25nIHZhbCkKJiM0Mzt7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZiA9IGZvcGVuKHBhdGgsICYjMzQ7dyYjMzQ7KTsKJiM0MzsJaWYgKCFmKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyYyA9IGZwcmludGYoZiwgJiMzNDslbGQmIzM0OywgdmFsKTsKJiM0MzsJZmNsb3NlKGYpOwomIzQzOwlyZXR1cm4gcmMgJmx0OyAwID8gLTEgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpCiYjNDM7ewomIzQzOwlpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDsKJiM0MzsJbG9uZyBocGFnZV9zaXplX2tiLCBocGFnZV9zaXplX2J5dGVzOwomIzQzOwlsb25nIG9yaWdfbnIgPSAtMSwgbmV3X25yLCBiZWZvcmUsIGFmdGVyOwomIzQzOwljaGFyIG5yX3BhdGhbUEFUSF9NQVhdOwomIzQzOwljaGFyICpjZzsKJiM0MzsKJiM0MzsJaHBhZ2Vfc2l6ZV9rYiA9IGZpbmRfbGFyZ2VzdF9odWdlcGFnZV9zaXplX2tiKCk7CiYjNDM7CWlmIChocGFnZV9zaXplX2tiICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtubyBodWdlcGFnZSBzaXplIGZvdW5kXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gS1NGVF9TS0lQOwomIzQzOwl9CiYjNDM7CWhwYWdlX3NpemVfYnl0ZXMgPSBocGFnZV9zaXplX2tiICogMTAyNDsKJiM0MzsKJiM0MzsJc25wcmludGYobnJfcGF0aCwgc2l6ZW9mKG5yX3BhdGgpLAomIzQzOwkJIEhVR0VQQUdFU19ESVIgJiMzNDsvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlcyYjMzQ7LCBocGFnZV9zaXplX2tiKTsKJiM0MzsKJiM0MzsJY2cgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfaHVnZXRsYl9jbWFfY2hhcmdlJiMzNDspOwomIzQzOwlpZiAoIWNnKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoY2dfY3JlYXRlKGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpbl9jZyA9IDE7CiYjNDM7CiYjNDM7CWlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTsKJiM0MzsJaWYgKG9yaWdfbnIgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCByZWFkICVzXG4mIzM0OywgbnJfcGF0aCk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYmVmb3JlID0gY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKTsKJiM0MzsKJiM0MzsJaWYgKHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19uciAmIzQzOyAxKSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3Qgd3JpdGUgJXNcbiYjMzQ7LCBucl9wYXRoKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7CiYjNDM7CWlmIChuZXdfbnIgJmx0Oz0gb3JpZ19ucikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgYSBodWdlcGFnZVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gS1NGVF9GQUlMOwomIzQzOwlhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7CiYjNDM7CiYjNDM7CWlmIChhZnRlciAtIGJlZm9yZSAmbHQ7IGhwYWdlX3NpemVfYnl0ZXMpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKAomIzQzOwkJCSYjMzQ7aHVnZXRsYiBDTUEgY291bnRlciBub3QgY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGQgZXhwZWN0ZWQgJiM0MzslbGRcbiYjMzQ7LAomIzQzOwkJCWJlZm9yZSwgYWZ0ZXIsIGhwYWdlX3NpemVfYnl0ZXMpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7CiYjNDM7CiYjNDM7CWFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKTsKJiM0MzsJaWYgKCF2YWx1ZXNfY2xvc2UoYmVmb3JlLCBhZnRlciwgMykpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKAomIzQzOwkJCSYjMzQ7aHVnZXRsYiBDTUEgY291bnRlciBub3QgdW5jaGFyZ2VkOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxuJiMzNDssCiYjNDM7CQkJYmVmb3JlLCBhZnRlcik7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBLU0ZUX1BBU1M7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKG9yaWdfbnIgJmd0Oz0gMCkKJiM0MzsJCXdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7CiYjNDM7CiYjNDM7CWlmIChpbl9jZykKJiM0MzsJCWNnX2VudGVyX2N1cnJlbnQocm9vdCk7CiYjNDM7CWNnX2Rlc3Ryb3koY2cpOwomIzQzOwlmcmVlKGNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdCkKJiM0Mzt7CiYjNDM7CWludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwOwomIzQzOwlsb25nIGhwYWdlX3NpemVfa2I7CiYjNDM7CWxvbmcgb3JpZ19uciwgbmV3X25yOwomIzQzOwljaGFyIG5yX3BhdGhbUEFUSF9NQVhdOwomIzQzOwljaGFyICpjZzsKJiM0MzsKJiM0MzsJaHBhZ2Vfc2l6ZV9rYiA9IGZpbmRfbGFyZ2VzdF9odWdlcGFnZV9zaXplX2tiKCk7CiYjNDM7CWlmIChocGFnZV9zaXplX2tiICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtubyBodWdlcGFnZSBzaXplIGZvdW5kXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gS1NGVF9TS0lQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSwKJiM0MzsJCSBIVUdFUEFHRVNfRElSICYjMzQ7L2h1Z2VwYWdlcy0lbGRrQi9ucl9odWdlcGFnZXMmIzM0OywgaHBhZ2Vfc2l6ZV9rYik7CiYjNDM7CiYjNDM7CWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX2h1Z2V0bGJfY21hX2xpbWl0JiMzNDspOwomIzQzOwlpZiAoIWNnKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoY2dfY3JlYXRlKGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpbl9jZyA9IDE7CiYjNDM7CiYjNDM7CWlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX01BWCkgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2h1Z2V0bGIgQ01BIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY2dfd3JpdGUoY2csIEhVR0VUTEJfQ01BX01BWCwgJiMzNDswJiMzNDspKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBzZXQgaHVnZXRsYiBDTUEgbGltaXRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlvcmlnX25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpOwomIzQzOwlpZiAob3JpZ19uciAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IHJlYWQgJXNcbiYjMzQ7LCBucl9wYXRoKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgJiM0MzsgMSk7CiYjNDM7CW5ld19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTsKJiM0MzsKJiM0MzsJcmMgPSBLU0ZUX0ZBSUw7CiYjNDM7CWlmIChuZXdfbnIgJmd0OyBvcmlnX25yKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2h1Z2V0bGIgQ01BIGxpbWl0IG5vdCBlbmZvcmNlZFxuJiMzNDspOwomIzQzOwkJd3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gS1NGVF9QQVNTOwomIzQzOwl9CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGluX2NnKQomIzQzOwkJY2dfZW50ZXJfY3VycmVudChyb290KTsKJiM0MzsJY2dfZGVzdHJveShjZyk7CiYjNDM7CWZyZWUoY2cpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgVCh4KSB7IHgsICN4IH0KJiM0MztzdHJ1Y3QgY21hX21lbWNnX3Rlc3RzIHsKJiM0MzsJaW50ICgqZm4pKGNvbnN0IGNoYXIgKnJvb3QpOwomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzO30gdGVzdHNbXSA9IHsKJiM0MzsJVCh0ZXN0X2NtYV9jaGFyZ2UpLAomIzQzOwlUKHRlc3RfY21hX2xpbWl0KSwKJiM0MzsJVCh0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZSksCiYjNDM7CVQodGVzdF9odWdldGxiX2NtYV9saW1pdCksCiYjNDM7fTsKJiM0MzsjdW5kZWYgVAomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7ewomIzQzOwljaGFyIHJvb3RbUEFUSF9NQVhdOwomIzQzOwlpbnQgaGFzX21lbW9yeV9jbWFfYWNjLCBpOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTsKJiM0MzsKJiM0MzsJaGFzX21lbW9yeV9jbWFfYWNjID0gcHJvY19tb3VudF9jb250YWlucygmIzM0O21lbW9yeV9jbWFfYWNjb3VudGluZyYjMzQ7KTsKJiM0MzsJaWYgKGhhc19tZW1vcnlfY21hX2FjYyAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O2Nhbm5vdCBxdWVyeSBjZ3JvdXAgbW91bnQgb3B0aW9uLlxuJiMzNDspOwomIzQzOwllbHNlIGlmICghaGFzX21lbW9yeV9jbWFfYWNjKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtDTUEgYWNjb3VudGluZyBpcyBkaXNhYmxlZC5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O2Nncm91cGZzIGlzIG5vdCBhdmFpbGFibGUuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChjZ19yZWFkX3N0cnN0cihyb290LCAmIzM0O2Nncm91cC5jb250cm9sbGVycyYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7bWVtb3J5IGNvbnRyb2xsZXIgaXMgbm90IGF2YWlsYWJsZSAoQ09ORklHX0NHUk9VUF9NRU1DRz8pXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCXN3aXRjaCAodGVzdHNbaV0uZm4ocm9vdCkpIHsKJiM0MzsJCWNhc2UgS1NGVF9QQVNTOgomIzQzOwkJCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0OyVzXG4mIzM0OywgdGVzdHNbaV0ubmFtZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEtTRlRfU0tJUDoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslc1xuJiMzNDssIHRlc3RzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDslc1xuJiMzNDssIHRlc3RzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfZmluaXNoZWQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi41MzRhOTVlZjVlMDc3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaApAQCAtMCwwICYjNDM7MSwxOTcgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBDb3B5cmlnaHQgKGMpIDIwMjYgUmVkIEhhdCwgSW5jLgomIzQzOyMKJiM0MzsjIFJ1biBjZ3JvdXAgbWVtb3J5IGNvbnRyb2xsZXIgc2VsZnRlc3RzIGluc2lkZSBhIHZpcnRtZS1uZyBWTQomIzQzOyMgRGVwZW5kZW5jaWVzOgomIzQzOyMJCSogdmlydG1lLW5nCiYjNDM7IwkJKiBidXN5Ym94LXN0YXRpYyAodXNlZCBieSB2aXJ0bWUtbmcpCiYjNDM7IwkJKiBxZW11CSh1c2VkIGJ5IHZpcnRtZS1uZykKJiM0MzsKJiM0MztzZXQgLWV1byBwaXBlZmFpbAomIzQzOwomIzQzO3JlYWRvbmx5IFNDUklQVF9ESVI9JiMzNDskKGNkIC1QIC0tICYjMzQ7JChkaXJuYW1lIC0tICYjMzQ7JHtCQVNIX1NPVVJDRVswXX0mIzM0OykmIzM0OyAmYW1wOyZhbXA7IHB3ZCAtUCkmIzM0OwomIzQzO3JlYWRvbmx5IEtFUk5FTF9DSEVDS09VVD0mIzM0OyQocmVhbHBhdGggJiMzNDske1NDUklQVF9ESVJ9JiMzNDsvLi4vLi4vLi4vLi4vKSYjMzQ7CiYjNDM7CiYjNDM7c291cmNlICYjMzQ7JHtTQ1JJUFRfRElSfSYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2gKJiM0MzsKJiM0MztyZWFkb25seSBTU0hfR1VFU1RfUE9SVD0mIzM0OyR7U1NIX0dVRVNUX1BPUlQ6LTIyfSYjMzQ7CiYjNDM7cmVhZG9ubHkgV0FJVF9QRVJJT0Q9MwomIzQzO3JlYWRvbmx5IFdBSVRfUEVSSU9EX01BWD04MAomIzQzO3JlYWRvbmx5IFdBSVRfVE9UQUw9JCgoV0FJVF9QRVJJT0QgKiBXQUlUX1BFUklPRF9NQVgpKQomIzQzO3JlYWRvbmx5IFFFTVVfUElERklMRT0mIzM0OyQobWt0ZW1wIC90bXAvcWVtdV9tZW1jZ192bXRlc3RfWFhYWC5waWQpJiMzNDsKJiM0MztyZWFkb25seSBRRU1VX09QVFM9JiMzNDsgLS1waWRmaWxlICR7UUVNVV9QSURGSUxFfSAmIzM0OwomIzQzOwomIzQzO0JVSUxEPTAKJiM0MztRRU1VPSYjMzQ7cWVtdS1zeXN0ZW0tJCh1bmFtZSAtbSkmIzM0OwomIzQzO1ZFUkJPU0U9MAomIzQzO1NIRUxMX01PREU9MAomIzQzO0dVRVNUX1RSRUU9JiMzNDske0dVRVNUX1RSRUU6LSRLRVJORUxfQ0hFQ0tPVVR9JiMzNDsKJiM0MzsKJiM0Mzt1c2FnZSgpIHsKJiM0MzsJY2F0ICZsdDsmbHQ7RU9GCiYjNDM7JDAgW09QVElPTlNdCiYjNDM7ICAgIC1iICAgICAgICBCdWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSBiZWZvcmUgYm9vdGluZwomIzQzOyAgICAtcSAmbHQ7cWVtdSZndDsgUUVNVSBiaW5hcnkvcGF0aCAoZGVmYXVsdDogJFFFTVUpCiYjNDM7ICAgIC1zICAgICAgICBTdGFydCBpbnRlcmFjdGl2ZSBzaGVsbCBpbiBWTQomIzQzOyAgICAtdiAgICAgICAgVmVyYm9zZSBvdXRwdXQgKHZuZyBib290IGxvZ3Mgb24gc3Rkb3V0KQomIzQzO0VPRgomIzQzOwlleGl0IDEKJiM0Mzt9CiYjNDM7CiYjNDM7ZGllKCkgewomIzQzOwllY2hvICYjMzQ7JComIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CWV4aXQgJiMzNDske0tTRlRfRkFJTH0mIzM0OwomIzQzO30KJiM0MzsKJiM0MztjbGVhbnVwKCkgewomIzQzOwlpZiBbWyAtcyAmIzM0OyRRRU1VX1BJREZJTEUmIzM0OyBdXTsgdGhlbgomIzQzOwkJcGtpbGwgLVNJR1RFUk0gLUYgJiMzNDskUUVNVV9QSURGSUxFJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSB8fCB0cnVlCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlmIFtbIC1lICYjMzQ7JFFFTVVfUElERklMRSYjMzQ7IF1dOyB0aGVuCiYjNDM7CQlybSAtZiAmIzM0OyRRRU1VX1BJREZJTEUmIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mzt2bV9zc2goKSB7CiYjNDM7CXN0ZGJ1ZiAtb0wgc3NoIC1xIFwKJiM0MzsJCS1GICYjMzQ7JEhPTUUvLmNhY2hlL3ZpcnRtZS1uZy8uc3NoL3ZpcnRtZS1uZy1zc2guY29uZiYjMzQ7IFwKJiM0MzsJCS1sIHJvb3QgJiMzNDt2aXJ0bWUtbmclJFNTSF9HVUVTVF9QT1JUJiMzNDsgXAomIzQzOwkJJiMzNDskQCYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2RlcHMoKSB7CiYjNDM7CWZvciBkZXAgaW4gdm5nICYjMzQ7JFFFTVUmIzM0OyBidXN5Ym94IHBraWxsIHNzaDsgZG8KJiM0MzsJCWlmICEgY29tbWFuZCAtdiAmIzM0OyRkZXAmIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O3NraXA6IGRlcGVuZGVuY3kgJGRlcCBub3QgZm91bmQmIzM0OwomIzQzOwkJCWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MzsJCWZpCiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7aGFuZGxlX2J1aWxkKCkgewomIzQzOwlpZiBbWyAhICYjMzQ7JEJVSUxEJiMzNDsgLWVxIDEgXV07IHRoZW4KJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwomIzQzOwlpZiBbWyAhIC1kICYjMzQ7JEtFUk5FTF9DSEVDS09VVCYjMzQ7IF1dOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7LWIgcmVxdWlyZXMgJDAgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgMQomIzQzOwlmaQomIzQzOwomIzQzOwlwdXNoZCAmIzM0OyRLRVJORUxfQ0hFQ0tPVVQmIzM0OyAmYW1wOyZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsJaWYgISB2bmcgLS1rY29uZmlnIC0tY29uZmlnICYjMzQ7JFNDUklQVF9ESVImIzM0Oy9jb25maWc7IHRoZW4KJiM0MzsJCWRpZSAmIzM0O2ZhaWxlZCB0byBnZW5lcmF0ZSAuY29uZmlnIGZvciBrZXJuZWwgc291cmNlIHRyZWUgKCRLRVJORUxfQ0hFQ0tPVVQpJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgISBtYWtlIC1qJiMzNDskKG5wcm9jKSYjMzQ7OyB0aGVuCiYjNDM7CQlkaWUgJiMzNDtmYWlsZWQgdG8gYnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgKCRLRVJORUxfQ0hFQ0tPVVQpJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJcG9wZCAmYW1wOyZndDsvZGV2L251bGwKJiM0Mzt9CiYjNDM7CiYjNDM7dm1fc3RhcnQoKSB7CiYjNDM7CWxvY2FsIGxvZ2ZpbGU9L2Rldi9udWxsCiYjNDM7CWxvY2FsIHZlcmJvc2Vfb3B0PSYjMzQ7JiMzNDsKJiM0MzsJbG9jYWwga2VybmVsX29wdD0mIzM0OyYjMzQ7CiYjNDM7CiYjNDM7CWlmIFtbICYjMzQ7JFZFUkJPU0UmIzM0OyAtZXEgMSBdXTsgdGhlbgomIzQzOwkJdmVyYm9zZV9vcHQ9JiMzNDstLXZlcmJvc2UmIzM0OwomIzQzOwkJbG9nZmlsZT0vZGV2L3N0ZG91dAomIzQzOwlmaQomIzQzOwomIzQzOwlpZiBbWyAmIzM0OyRCVUlMRCYjMzQ7IC1lcSAxIF1dOyB0aGVuCiYjNDM7CQlrZXJuZWxfb3B0PSYjMzQ7JHtLRVJORUxfQ0hFQ0tPVVR9JiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJdm5nIFwKJiM0MzsJCS0tcnVuIFwKJiM0MzsJCSR7a2VybmVsX29wdH0gXAomIzQzOwkJJHt2ZXJib3NlX29wdH0gXAomIzQzOwkJLS1xZW11LW9wdHM9JiMzNDskUUVNVV9PUFRTJiMzNDsgXAomIzQzOwkJLS1xZW11PSYjMzQ7JChjb21tYW5kIC12ICYjMzQ7JFFFTVUmIzM0OykmIzM0OyBcCiYjNDM7CQktLXVzZXIgcm9vdCBcCiYjNDM7CQktLXNzaCAmIzM0OyRTU0hfR1VFU1RfUE9SVCYjMzQ7IFwKJiM0MzsJCS0tbWVtb3J5IDNHIFwKJiM0MzsJCS0tYXBwZW5kICYjMzQ7Y21hPTY0TSBodWdldGxiX2NtYT0xRyBodWdldGxiX2NtYV9vbmx5PTEmIzM0OyBcCiYjNDM7CQktLXJ3ICZhbXA7Jmd0OyYjMzQ7JGxvZ2ZpbGUmIzM0OyAmYW1wOwomIzQzOwomIzQzOwlsb2NhbCB2bmdfcGlkPSQhCiYjNDM7CWxvY2FsIGVsYXBzZWQ9MAomIzQzOwomIzQzOwl3aGlsZSBbWyAhIC1zICYjMzQ7JFFFTVVfUElERklMRSYjMzQ7IF1dOyBkbwomIzQzOwkJa2lsbCAtMCAmIzM0OyR2bmdfcGlkJiMzNDsgMiZndDsvZGV2L251bGwgfHwgXAomIzQzOwkJCWRpZSAmIzM0O3ZuZyBleGl0ZWQgZWFybHk7IGZhaWxlZCB0byBib290IFZNJiMzNDsKJiM0MzsJCVtbICYjMzQ7JGVsYXBzZWQmIzM0OyAtZ2UgJiMzNDskV0FJVF9UT1RBTCYjMzQ7IF1dICZhbXA7JmFtcDsgXAomIzQzOwkJCWRpZSAmIzM0O3RpbWVkIG91dCB3YWl0aW5nIGZvciBWTSBib290JiMzNDsKJiM0MzsJCXNsZWVwIDEKJiM0MzsJCWVsYXBzZWQ9JCgoZWxhcHNlZCAmIzQzOyAxKSkKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0Mzt2bV93YWl0X2Zvcl9zc2goKSB7CiYjNDM7CWxvY2FsIGk9MAomIzQzOwl3aGlsZSB0cnVlOyBkbwomIzQzOwkJdm1fc3NoIC0tIHRydWUgJmFtcDsmYW1wOyBicmVhawomIzQzOwkJaT0kKChpICYjNDM7IDEpKQomIzQzOwkJW1sgJiMzNDske2l9JiMzNDsgLWd0ICYjMzQ7JFdBSVRfUEVSSU9EX01BWCYjMzQ7IF1dICZhbXA7JmFtcDsgXAomIzQzOwkJCWRpZSAmIzM0O3RpbWVkIG91dCB3YWl0aW5nIGZvciBndWVzdCBzc2gmIzM0OwomIzQzOwkJc2xlZXAgJiMzNDskV0FJVF9QRVJJT0QmIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7Z3JlcCAtcSBtZW1vcnkgL3N5cy9mcy9jZ3JvdXAvY2dyb3VwLmNvbnRyb2xsZXJzJiMzNDsgXAomIzQzOwkJfHwgZGllICYjMzQ7bWVtb3J5IGNvbnRyb2xsZXIgbm90IGF2YWlsYWJsZSAoQ09ORklHX01FTUNHPykmIzM0OwomIzQzOwl2bV9zc2ggLS0gJiMzNDtbWyAtZSAvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiBdXSYjMzQ7IFwKJiM0MzsJCXx8IGRpZSAmIzM0O0NNQSBoZWFwIG5vdCBhdmFpbGFibGUgKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BPyBjbWE9IGNtZGxpbmU/KSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nKCkgewomIzQzOwl2bV9zc2ggLS0gJiMzNDttb3VudCAtbyByZW1vdW50LG1lbW9yeV9jbWFfYWNjb3VudGluZyAvc3lzL2ZzL2Nncm91cCYjMzQ7IFwKJiM0MzsJCXx8IGRpZSAmIzM0O2ZhaWxlZCB0byBlbmFibGUgbWVtb3J5X2NtYV9hY2NvdW50aW5nJiMzNDsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7ZWNobyAmIzQzO21lbW9yeSAmZ3Q7IC9zeXMvZnMvY2dyb3VwL2Nncm91cC5zdWJ0cmVlX2NvbnRyb2wmIzM0OyBcCiYjNDM7CQl8fCBkaWUgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeSBjb250cm9sbGVyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7cnVuX3Rlc3QoKSB7CiYjNDM7CXZtX3NzaCAtLSAmIzM0O2NkICYjMzk7JEdVRVNUX1RSRUUmIzM5OyAmYW1wOyZhbXA7IG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMgVEFSR0VUUz1jZ3JvdXAmIzM0OwomIzQzOwl2bV9zc2ggLS0gJiMzNDtjZCAmIzM5OyRHVUVTVF9UUkVFJiMzOTsgJmFtcDsmYW1wOyBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwIHJ1bl90ZXN0cyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3doaWxlIGdldG9wdHMgJiMzNDs6aHZxOnNiJiMzNDsgb3B0OyBkbwomIzQzOwljYXNlICYjMzQ7JG9wdCYjMzQ7IGluCiYjNDM7CXYpIFZFUkJPU0U9MSA7OwomIzQzOwlxKSBRRU1VPSYjMzQ7JHtPUFRBUkd9JiMzNDsgOzsKJiM0MzsJYikgQlVJTEQ9MSA7OwomIzQzOwlzKSBTSEVMTF9NT0RFPTEgOzsKJiM0MzsJaHwqKSB1c2FnZSA7OwomIzQzOwllc2FjCiYjNDM7ZG9uZQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Y2hlY2tfZGVwcwomIzQzO2hhbmRsZV9idWlsZAomIzQzO2VjaG8gJiMzNDtCb290aW5nIHZpcnRtZS1uZyBWTS4uLiYjMzQ7CiYjNDM7dm1fc3RhcnQKJiM0Mzt2bV93YWl0X2Zvcl9zc2gKJiM0MztlY2hvICYjMzQ7Vk0gaXMgcmVhY2hhYmxlIHZpYSBTU0guJiMzNDsKJiM0MzsKJiM0MztpZiBbWyAmIzM0OyRTSEVMTF9NT0RFJiMzNDsgLWVxIDEgXV07IHRoZW4KJiM0MzsJZWNobyAmIzM0O1N0YXJ0aW5nIGludGVyYWN0aXZlIHNoZWxsIGluIFZNLiBFeGl0IHRvIHN0b3AgVk0uJiMzNDsKJiM0MzsJdm1fc3NoIC10IC0tICYjMzQ7Y2QgJiMzOTskR1VFU1RfVFJFRSYjMzk7ICZhbXA7JmFtcDsgZXhlYyBiYXNoIC0tbm9wcm9maWxlIC0tbm9yYyYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9QQVNTJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cwomIzQzO3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nCiYjNDM7CiYjNDM7ZWNobyAmIzM0O1J1bm5pbmcgY2dyb3VwIHNlbGZ0ZXN0cyBpbiBWTS4uLiYjMzQ7CiYjNDM7cnVuX3Rlc3QKJiM0MztlY2hvICYjMzQ7UEFTUzogY2dyb3VwIHNlbGZ0ZXN0cyBjb21wbGV0ZWQmIzM0OwomIzQzO2V4aXQgJiMzNDskS1NGVF9QQVNTJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MzcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IENNQSBNZW1vcnkgQWNjb3VudGluZyBpbiBjZ3JvdXAgdjIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBzY3JlYW1zICYjMzQ7ZnV6eiB0aGlzISYjMzQ7LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1vcnlfY21hX2FjY291bnRpbmdgIG1vdW50IG9wdGlvbiBmb3IgY2dyb3VwIHYyLiBFc3NlbnRpYWxseSwgZW5hYmxpbmcgdGhpcyBhY2NvdW50cyBDTUEgbWVtb3J5IHVzYWdlIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBpdCBleHBvc2VzIHBlci1DTUEgYXJlYSBjb3VudGVycy4gQ3J1Y2lhbGx5LCB0aGUgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBhcmVhcyBsaWtlIGNncm91cCwgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBhbmQgQ01BIGl0c2VsZi4gR2l2ZW4gdGhhdCBDTUEgKmNhbiogYmUgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGF0JiMzOTtzIGEgYmlnIGdyZWVuIGZsYWcuIFRoZSBleGlzdGVuY2Ugb2YgYSBuZXcgc2VsZnRlc3QsIGB0ZXN0X2NtYV9tZW1jZy5jYCwgdXNpbmcgYC9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uYCBhbmQgYGh1Z2V0bGJfY21hYCBqdXN0IHJlaW5mb3JjZXMgdGhpcy4gVGhpcyBwYXRjaCAqZGVtYW5kcyogZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyBwaW5wb2ludGluZyB0aGUgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSB0aGUgcHJpbWFyeSBmdXp6aW5nIHRhcmdldHMuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGEgZmV3IHN0YW5kIG91dDogYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAsIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAsIGFuZCB0aGUgbW9kaWZpZWQgYGNtYV9yZWxlYXNlYCBhbmQgYGNtYV9yZWxlYXNlX2Zyb3plbmAuIFdoaWxlIHRoZSBsYXR0ZXIgdHdvIGhhdmUgc2lnbmF0dXJlIGNoYW5nZXMsIEkmIzM5O20gbW9yZSBpbnRlcmVzdGVkIGluIHRoZSBuZXcgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgZnVuY3Rpb25zLgoKSSBjb25maXJtZWQgdGhhdCBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCBhcmUgKm5vdCogc3RhdGljLCB3aGljaCBpcyBpZGVhbCBmb3IgcG90ZW50aWFsIGZ1enppbmcuIGBfX2NtYV9hbGxvY19mcm96ZW5gIGNhbGxzIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgX19jbWFfcmVsZWFzZV9mcm96ZW5gIGNhbGxzIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAsIG1ha2luZyB0aGVzZSBpbmRpcmVjdGx5IHRhcmdldHMuCgpOb3cgZm9yIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIHNlbGZ0ZXN0cyBjb25maWcsIG1ha2luZyBpdCBjbGVhciB0aGF0IGBDT05GSUdfQ01BYCwgYENPTkZJR19ETUFfQ01BYCwgYENPTkZJR19ETUFCVUZfSEVBUFNgLCBgQ09ORklHX0RNQUJVRl9IRUFQU19DTUFgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBhbGwgZXNzZW50aWFsLiBPYnZpb3VzbHksIGBDT05GSUdfTUVNQ0dgIGlzIGFsc28gcmVxdWlyZWQuIEkmIzM5O3ZlIGFsc28gdmVyaWZpZWQgdGhpcyB3aXRoIGEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSBjb2RlIGZvciBgI2lmZGVmIENPTkZJR19DTUFgLgoKVGltZSB0byBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MsIGJ1dCBJIGFtIGNvbmZpZGVudC4gSSB3aWxsIHVzZSBhIGdyZXBwZXIgb3Igc2ltaWxhciB0b29sIHRvIG1ha2Ugc3VyZSBJIGRpZCBub3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9jbWEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjY2PWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjY5OmludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzAtXHRcdFx0ICBzdHJ1Y3QgY21hICpjbWEpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNjY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE3MS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNzI6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE3My1cdFx0XHRcdFx0c3RydWN0IGNtYSAqY21hKVxuLS1cbm1tL2NtYS5jPTg2Mz1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsXG4tLVxubW0vY21hLmMtOTA2LVxubW0vY21hLmM6OTA3Olx0aWYgKHBhZ2UgXHUwMDI2XHUwMDI2IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShwYWdlLCBjb3VudCwgY21hKSkge1xubW0vY21hLmMtOTA4LVx0XHRmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIzNz1zdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19jbWEodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0MS1cbm1tL21lbWNvbnRyb2wuYzo1MjQyOmludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG5tbS9tZW1jb250cm9sLmMtNTI0My1cdFx0XHQgIHN0cnVjdCBjbWEgKmNtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQ01BIE1lbW9yeSBBY2NvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgZW5hYmxlZC4gSSYjMzk7dmUgbm90aWNlZCB0aGF0IHRoZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYywgYW5kIHRoZXkmIzM5O3JlICpub3QqIGJlaW5nIGlubGluZWQuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIGZvciBtZS4gTm9uLXN0YXRpYywgbm9uLWlubGluZWQgbWVhbnMgdGhleSBoYXZlIHdpZGVyIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgY2FsbHMgZnJvbSBwbGFjZXMgSSBtaWdodCBub3QgaW1tZWRpYXRlbHkgZXhwZWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIENNQS4gVGhpcyBsYWNrIG9mIG9wdGltaXphdGlvbiBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGFjdHMsIG9yIGF0IGxlYXN0IHJhaXNlcyBhIHJlZCBmbGFnIGluIHRlcm1zIG9mIGNvbnRyb2wgZmxvdy4KClRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYGNtYV9yZWxlYXNlYCBhbmQgYGNtYV9yZWxlYXNlX2Zyb3plbmAgaW50ZXJhY3Qgd2l0aCB0aGVtLiBUaG9zZSByZWxlYXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgaW4gbWFuYWdpbmcgQ01BIG1lbW9yeSwgYW5kIHRoZXkmIzM5O3JlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIHF1ZXN0aW9uaW5nLiBCeSB0cmFjaW5nIHRoZSBjYWxsIGdyYXBoLCBJIGNhbiBob3BlZnVsbHkgc2VlIHdoZXJlIHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBoYXBwZW4gd2l0aGluIHRoZSByZWxlYXNlIHByb2Nlc3MuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQgYXMgaW50ZW5kZWQsIGFuZCBpZiBzbywgdW5kZXJzdGFuZCB0aGUgcGF0aCBvZiBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTk6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX3JlbGVhc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfYnVpbHRpbi5jPTY3PXZvaWQga3ZtX2ZyZWVfaHB0X2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X2J1aWx0aW4uYy02OC17XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9idWlsdGluLmM6Njk6XHRjbWFfcmVsZWFzZShrdm1fY21hLCBwYWdlLCBucl9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9idWlsdGluLmMtNzAtfVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmM9MTAwPWJvb2wgYmNtYV93YWl0X3ZhbHVlKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSxcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTExOC1cbmRyaXZlcnMvYmNtYS9tYWluLmM6MTE5OnN0YXRpYyB2b2lkIGJjbWFfcmVsZWFzZV9jb3JlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTEyMC17XG4tLVxuZHJpdmVycy9iY21hL21haW4uYz0yMzg9dm9pZCBiY21hX3ByZXBhcmVfY29yZShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtMjQwLVx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2Y29yZS1cdTAwM2VkZXYpO1xuZHJpdmVycy9iY21hL21haW4uYzoyNDE6XHRjb3JlLVx1MDAzZWRldi5yZWxlYXNlID0gYmNtYV9yZWxlYXNlX2NvcmVfZGV2O1xuZHJpdmVycy9iY21hL21haW4uYy0yNDItXHRjb3JlLVx1MDAzZWRldi5idXMgPSBcdTAwMjZiY21hX2J1c190eXBlO1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jPTI1MD1zdGF0aWMgdm9pZCBjbWFfaGVhcF9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1Zilcbi0tXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvY21hX2hlYXAuYy0yNjMtXHQvKiByZWxlYXNlIG1lbW9yeSAqL1xuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmM6MjY0Olx0Y21hX3JlbGVhc2UoY21hX2hlYXAtXHUwMDNlY21hLCBidWZmZXItXHUwMDNlY21hX3BhZ2VzLCBidWZmZXItXHUwMDNlcGFnZWNvdW50KTtcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jLTI2NS1cdGtmcmVlKGJ1ZmZlcik7XG4tLVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmM9MjgxPXN0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqY21hX2hlYXBfYWxsb2NhdGUoc3RydWN0IGRtYV9oZWFwICpoZWFwLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jLTM2MC1mcmVlX2NtYTpcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jOjM2MTpcdGNtYV9yZWxlYXNlKGNtYV9oZWFwLVx1MDAzZWNtYSwgY21hX3BhZ2VzLCBwYWdlY291bnQpO1xuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmMtMzYyLWZyZWVfYnVmZmVyOlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jPTU4Nz1zdGF0aWMgdm9pZCBjbWFfYXR0YWNoX3RvX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTU5NS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjU5NjpzdGF0aWMgdm9pZCBjbWFfcmVsZWFzZV9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdilcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTU5Ny17XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9MTk2Mz1zdGF0aWMgdm9pZCBjbWFfY2FuY2VsX29wZXJhdGlvbihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTE5ODktXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYzoxOTkwOnN0YXRpYyB2b2lkIGNtYV9yZWxlYXNlX3BvcnQoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdilcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTE5OTEte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jPTIwNTc9c3RhdGljIHZvaWQgX2Rlc3Ryb3lfaWQoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy0yMDcyLVx0XHRjbWFfbGVhdmVfbWNfZ3JvdXBzKGlkX3ByaXYpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6MjA3MzpcdFx0Y21hX3JlbGVhc2VfZGV2KGlkX3ByaXYpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMtMjA3NC1cdH1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzUtXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYzoyMDc2Olx0Y21hX3JlbGVhc2VfcG9ydChpZF9wcml2KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzctXHRjbWFfaWRfcHV0KGlkX3ByaXYpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jPTQwMTE9c3RhdGljIGludCByZG1hX2JpbmRfYWRkcl9kc3Qoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy00MDYzLVx0aWYgKGlkX3ByaXYtXHUwMDNlY21hX2RldilcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjQwNjQ6XHRcdGNtYV9yZWxlYXNlX2RldihpZF9wcml2KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTQwNjUtZXJyMTpcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9ODE9c3RhdGljIHZvaWQgdm1jcF9yZXNwb25zZV9mcmVlKHN0cnVjdCB2bWNwX3Nlc3Npb24gKnNlc3Npb24pXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTkxLVx0XHRwYWdlID0gdmlydF90b19wYWdlKHNlc3Npb24tXHUwMDNlcmVzcG9uc2UpO1xuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jOjkyOlx0XHRjbWFfcmVsZWFzZSh2bWNwX2NtYSwgcGFnZSwgbnJfcGFnZXMpO1xuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTkzLVx0XHRzZXNzaW9uLVx1MDAzZWNtYV9hbGxvYyA9IDA7XG4tLVxuaW5jbHVkZS9saW51eC9jbWEuaD01MD1leHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcbmluY2x1ZGUvbGludXgvY21hLmgtNTEtXHRcdFx0ICAgICAgYm9vbCBub193YXJuKTtcbmluY2x1ZGUvbGludXgvY21hLmg6NTI6ZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpO1xuaW5jbHVkZS9saW51eC9jbWEuaC01My1cbi0tXG5pbmNsdWRlL2xpbnV4L2NtYS5oPTU2PXN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvY21hLmg6NTc6Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTU4LVx0XHR1bnNpZ25lZCBsb25nIGNvdW50KTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jbWEuaC0xMC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NtYS5oOjExOlRSQUNFX0VWRU5UKGNtYV9yZWxlYXNlLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY21hLmgtMTItXG4tLVxua2VybmVsL2RtYS9jb250aWd1b3VzLmM9Mzg1PWJvb2wgZG1hX3JlbGVhc2VfZnJvbV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTM4Ny17XG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzozODg6XHRyZXR1cm4gY21hX3JlbGVhc2UoZGV2X2dldF9jbWFfYXJlYShkZXYpLCBwYWdlcywgY291bnQpO1xua2VybmVsL2RtYS9jb250aWd1b3VzLmMtMzg5LX1cbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYz00MTM9c3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTAtICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDUxOiAqIGNtYV9yZWxlYXNlIHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXNcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ1Mi0gKiBhcmVhIGFuZCB0cnVlIG90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB0aGVuIGRvZXMgYSBmYWxsYmFjayBfX2ZyZWVfcGFnZXMoKVxuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jPTQ1NT12b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4tLVxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDYwLVx0aWYgKGRldi1cdTAwM2VjbWFfYXJlYSkge1xua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDYxOlx0XHRpZiAoY21hX3JlbGVhc2UoZGV2LVx1MDAzZWNtYV9hcmVhLCBwYWdlLCBjb3VudCkpXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NjItXHRcdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ2Ny0jaWZkZWYgQ09ORklHX0RNQV9OVU1BX0NNQVxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDY4Olx0XHRpZiAoY21hX3JlbGVhc2UoZG1hX2NvbnRpZ3VvdXNfbnVtYV9hcmVhW3BhZ2VfdG9fbmlkKHBhZ2UpXSxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ2OS1cdFx0XHRcdFx0cGFnZSwgY291bnQpKVxuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ3MS0jZW5kaWZcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ3MjpcdFx0aWYgKGNtYV9yZWxlYXNlKGRtYV9jb250aWd1b3VzX2RlZmF1bHRfYXJlYSwgcGFnZSwgY291bnQpKVxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDczLVx0XHRcdHJldHVybjtcbi0tXG5tbS9jbWEuYz05NjU9c3RhdGljIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmZpbmRfY21hX21lbXJhbmdlKHN0cnVjdCBjbWEgKmNtYSxcbi0tXG5tbS9jbWEuYy05OTgtXG5tbS9jbWEuYzo5OTk6c3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG5tbS9jbWEuYy0xMDAwLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXG4tLVxubW0vY21hLmMtMTAwOS1cdGNtYV9zeXNmc19hY2NvdW50X3JlbGVhc2VfcGFnZXMoY21hLCBjb3VudCk7XG5tbS9jbWEuYzoxMDEwOlx0dHJhY2VfY21hX3JlbGVhc2UoY21hLVx1MDAzZW5hbWUsIHBmbiwgcGFnZXMsIGNvdW50KTtcbm1tL2NtYS5jLTEwMTEtfVxuLS1cbm1tL2NtYS5jLTEwMTMtLyoqXG5tbS9jbWEuYzoxMDE0OiAqIGNtYV9yZWxlYXNlKCkgLSByZWxlYXNlIGFsbG9jYXRlZCBwYWdlc1xubW0vY21hLmMtMTAxNS0gKiBAY21hOiAgIENvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiBmb3Igd2hpY2ggdGhlIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkLlxuLS1cbm1tL2NtYS5jLTEwMjItICovXG5tbS9jbWEuYzoxMDIzOmJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG5tbS9jbWEuYy0xMDI0LVx0XHQgdW5zaWduZWQgbG9uZyBjb3VudClcbi0tXG5tbS9jbWEuYy0xMDM5LVxubW0vY21hLmM6MTA0MDpcdF9fY21hX3JlbGVhc2VfZnJvemVuKGNtYSwgY21yLCBwYWdlcywgY291bnQpO1xubW0vY21hLmMtMTA0MS1cbi0tXG5tbS9jbWEuYy0xMDQzLX1cbm1tL2NtYS5jOjEwNDQ6RVhQT1JUX1NZTUJPTF9HUEwoY21hX3JlbGVhc2UpO1xubW0vY21hLmMtMTA0NS1cbm1tL2NtYS5jOjEwNDY6Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG5tbS9jbWEuYy0xMDQ3LVx0XHR1bnNpZ25lZCBsb25nIGNvdW50KVxuLS1cbm1tL2NtYS5jLTEwNTQtXG5tbS9jbWEuYzoxMDU1Olx0X19jbWFfcmVsZWFzZV9mcm96ZW4oY21hLCBjbXIsIHBhZ2VzLCBjb3VudCk7XG5tbS9jbWEuYy0xMDU2LVxuLS1cbm1tL2NtYV9kZWJ1Zy5jPTg5PXN0YXRpYyBpbnQgY21hX2ZyZWVfbWVtKHN0cnVjdCBjbWEgKmNtYSwgaW50IGNvdW50KVxuLS1cbm1tL2NtYV9kZWJ1Zy5jLTk4LVx0XHRpZiAobWVtLVx1MDAzZW4gXHUwMDNjPSBjb3VudCkge1xubW0vY21hX2RlYnVnLmM6OTk6XHRcdFx0Y21hX3JlbGVhc2UoY21hLCBtZW0tXHUwMDNlcCwgbWVtLVx1MDAzZW4pO1xubW0vY21hX2RlYnVnLmMtMTAwLVx0XHRcdGNvdW50IC09IG1lbS1cdTAwM2VuO1xuLS1cbm1tL2NtYV9kZWJ1Zy5jLTEwMi1cdFx0fSBlbHNlIGlmIChjbWEtXHUwMDNlb3JkZXJfcGVyX2JpdCA9PSAwKSB7XG5tbS9jbWFfZGVidWcuYzoxMDM6XHRcdFx0Y21hX3JlbGVhc2UoY21hLCBtZW0tXHUwMDNlcCwgY291bnQpO1xubW0vY21hX2RlYnVnLmMtMTA0LVx0XHRcdG1lbS1cdTAwM2VwICYjNDM7PSBjb3VudDtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2V0bGJfY21hLmMtMjIte1xubW0vaHVnZXRsYl9jbWEuYzoyMzpcdFdBUk5fT05fT05DRSghY21hX3JlbGVhc2VfZnJvemVuKGh1Z2V0bGJfY21hW2ZvbGlvX25pZChmb2xpbyldLFxubW0vaHVnZXRsYl9jbWEuYy0yNC1cdFx0XHRcdFx0IFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE5OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTcwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhpcyBNZW1vcnkgQ0dyb3VwcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCDigJMgdGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYGNncm91cDJfcGFyc2VfcGFyYW1gIGFuZCBgYXBwbHlfY2dyb3VwX3Jvb3RfZmxhZ3NgIHRvIGhhbmRsZSBgbWVtb3J5X2NtYV9hY2NvdW50aW5nYC4gQW5kIGl0JiMzOTtzIGFkZGluZyBzb21lIG5ldyBzaG93L3dyaXRlIGZ1bmN0aW9ucyBmb3IgdGhlIGNncm91cGZzOiBgbWVtb3J5X2NtYV9jdXJyZW50X3Nob3dgLCBgbWVtb3J5X2NtYV9tYXhfc2hvd2AsIGFuZCBgbWVtb3J5X2NtYV9tYXhfd3JpdGVgLiBUaGVzZSBhcmUgc3RhdGljIGJ1dCByZWFjaGFibGUgdGhyb3VnaCB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGltcG9ydGFudC4KClRoZSByZWFsIGtleSBoZXJlIGlzIGhvdyBtZW1vcnkgYWNjb3VudGluZyBpcyB0cmlnZ2VyZWQgdmlhIGBjbWFfYWxsb2NgIGFuZCBgY21hX3JlbGVhc2VgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgY2hhcmdlL3VuY2hhcmdlIGNhbGxzIGFyZSBtYWRlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2s6IGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZS4gQW5kIGBtZW1fY2dyb3VwX2NtYV9pbml0YCBpcyBhbiBpbml0Y2FsbCwgc28gdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBmb3Igc2V0dXAuIEkgc2hvdWxkIHByb2JhYmx5IGZ1enogYGNncm91cDJfcGFyc2VfcGFyYW1gIGZvciBtb3VudCBvcHRpb25zIGxhdGVyLgoKTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzLCB0aGVuLCBhcmU6CgoqICAgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAKKiAgIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAKKiAgIGBjbWFfcmVsZWFzZWAKKiAgIGBjbWFfcmVsZWFzZV9mcm96ZW5gCiogICBgY21hX2FsbG9jYAoqICAgYGNtYV9hbGxvY19mcm96ZW5gCiogICBgY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZGAKCldhaXQsIGBjbWFfYWxsb2NgIGFuZCBgY21hX3JlbGVhc2VgIGFyZSBleGlzdGluZyBmdW5jdGlvbnMsIGJ1dCB0aGVpciBiZWhhdmlvciAqaXMqIGNoYW5nZWQgYnkgdGhpcy4gQWN0dWFsbHksIHRoZSBzaWduYXR1cmUgb2YgYGNtYV9yZWxlYXNlYCBhbmQgYGNtYV9yZWxlYXNlX2Zyb3plbmAgaGFzIGNoYW5nZWQuIFRoZSBuZXcgbG9naWMgaXMgaW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy4KCk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byBrbm93IHdoYXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoaXMgdG8gYmUgYWN0aXZlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBtZW50aW9uczogYENPTkZJR19DTUFgLCBgQ09ORklHX01FTUNHYCwgYENPTkZJR19ETUFfQ01BYCwgYENPTkZJR19ETUFCVUZfSEVBUFNgLCBgQ09ORklHX0RNQUJVRl9IRUFQU19DTUFgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgLiBUaGUgc2VsZnRlc3RzIHRyaWdnZXIgQ01BIGFsbG9jYXRpb25zIHdpdGggdGhvc2UsIGVzcGVjaWFsbHkgYENPTkZJR19ETUFfQ01BYCwgYENPTkZJR19ETUFCVUZfSEVBUFNgLCBgQ09ORklHX0RNQUJVRl9IRUFQU19DTUFgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgLiBXaGlsZSBmdXp6aW5nLCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfTUVNQ0dgIGFyZSB0aGUgY29yZSBvbmVzLiBCdXQgdG8gYWN0dWFsbHkgdHJpZ2dlciBDTUEgYWxsb2NhdGlvbnMgZnJvbSB1c2Vyc3BhY2UsIEkmIzM5O2xsIG5lZWQgYENPTkZJR19ETUFCVUZfSEVBUFNfQ01BYCBvciBgQ09ORklHX0hVR0VUTEJGU2AgKHdpdGggdGhlIGBodWdldGxiX2NtYWAgYm9vdCBwYXJhbSkuIFNvLCB0byBiZSBzYWZlLCBJJiMzOTtsbCBpbmNsdWRlIHRoZXNlIGluIG15IG5vdGVzOgoKKiAgIGBDTUFgCiogICBgTUVNQ0dgCiogICBgRE1BX0NNQWAKKiAgIGBETUFCVUZfSEVBUFNgCiogICBgRE1BQlVGX0hFQVBTX0NNQWAKKiAgIGBIVUdFVExCRlNgCgpJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlnIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RE1BQlVGX0hFQVBTX0NNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xMDgxPUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPW1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjEwODI6Q09ORklHX0RNQUJVRl9IRUFQU19DTUE9bVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWctMTA4My1DT05GSUdfVklSVElPX1BDST15XG4tLVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xNDA5PUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MTQxMDpDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT1tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTE0MTEtQ09ORklHX1ZGSU89eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9ODk2PUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6ODk3OkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctODk4LUNPTkZJR19VSU89bVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9OTI1PUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6OTI2OkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctOTI3LUNPTkZJR19VSU89bVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnPTg9Y29uZmlnIERNQUJVRl9IRUFQU19TWVNURU1fQ0NfU0hBUkVEXG4tLVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTUtXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzoxNjpjb25maWcgRE1BQlVGX0hFQVBTX0NNQVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTctXHR0cmlzdGF0ZSBcJiMzNDtETUEtQlVGIENNQSBIZWFwXCYjMzQ7XG4tLVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQU19TWVNURU0pXHQmIzQzOz0gc3lzdGVtX2hlYXAub1xuZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQU19DTUEpXHRcdCYjNDM7PSBjbWFfaGVhcC5vXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZz05PUNPTkZJR19ETUFCVUZfSEVBUFM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZzoxMDpDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnLTExLUNPTkZJR19IVUdFVExCRlM9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2g9MTQ3PWNoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoLTE1MC1cdHZtX3NzaCAtLSBcJiMzNDtbWyAtZSAvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiBdXVwmIzM0OyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaDoxNTE6XHRcdHx8IGRpZSBcJiMzNDtDTUEgaGVhcCBub3QgYXZhaWxhYmxlIChDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT8gY21hPSBjbWRsaW5lPylcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2gtMTUyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI2NgoJCQkJCQkJb3V0cHV0OiAyNDAKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ01BIE1lbW9yeSBBY2NvdW50aW5nIFBhdGNoKioKCk9rYXksIHNvIHRoZSBgRE1BQlVGX0hFQVBTX0NNQWAgY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmU7IHRoYXQgY2hlY2tzIG91dC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfUEFHRV9DT1VOVEVSYCBkb2VzbiYjMzk7dCBwb3NlIGEgcHJvYmxlbS4gU2luY2UgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgYE1FTUNHYCwgd2hpY2ggaXMgYSBwcmVyZXF1aXNpdGUsIHdlJiMzOTtyZSBnb29kIHRvIGdvLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgLiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgY2dyb3VwIHYyIG1vdW50IG9wdGlvbiwgYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBob3cgQ01BIG1lbW9yeSB1c2FnZSBpcyB0cmFja2VkIHdpdGhpbiBhIGNncm91cCYjMzk7cyB0b3RhbCBtZW1vcnkgYWxsb3dhbmNlLiBUaGUgbmV3IGZ1bmN0aW9ucywgYXMgSSBtZW50aW9uZWQsIGFyZSB0aGUga2V5IHRvIHRoaXMgYWNjb3VudGluZywgaGFuZGxpbmcgY2hhcmdlIGFuZCB1bmNoYXJnZSBvcGVyYXRpb25zIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggQ01BIGFsbG9jYXRpb25zLCBzdWNoIGFzIERNQS1CVUYgaGVhcHMgb3IgaHVnZXRsYiwgd2hlbiB0aGUgbW91bnQgb3B0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBhbmQgQ01BIHN1YnN5c3RlbXMsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRob3JvdWdoIGZ1enppbmcsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgZ29vZCBncmFzcDogYENNQWAsIGBNRU1DR2AsIGBETUFfQ01BYCwgYERNQUJVRl9IRUFQU2AsIGBETUFCVUZfSEVBUFNfQ01BYCwgYW5kIGBIVUdFVExCRlNgLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgRE1BQlVGX0hFQVBTX0NNQWAgYW5kIGBNRU1DR2AuCgpJJiMzOTtsbCBxdWlja2x5IHJldmlldyBvdGhlciBmdW5jdGlvbnMuIFdoaWxlIGBjZ3JvdXAyX3BhcnNlX3BhcmFtYCBoYXMgYmVlbiBtb2RpZmllZCwgaXQmIzM5O3MgYSBnZW5lcmljIG1vdW50IG9wdGlvbiBwYXJzaW5nIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgcHJpbWFyeSBmb2N1cy4gU2ltaWxhcmx5LCBgY21hX3JlbGVhc2VgIGFuZCBgY21hX3JlbGVhc2VfZnJvemVuYCBoYXZlIHNpZ25hdHVyZSBjaGFuZ2VzIGJ1dCB0aGUgY29yZSBsb2dpYyBpcyBpbiB0aGUgb3RoZXIgdHdvLgoKU28sIGluIHN1bW1hcnksIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyB0aGUgYWRkaXRpb24gb2YgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAuCkkmIzM5O20gcmVhZHkgdG8gc2V0IG15IHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7RE1BX0NNQSYjMzQ7LAogICAgJiMzNDtETUFCVUZfSEVBUFMmIzM0OywKICAgICYjMzQ7RE1BQlVGX0hFQVBTX0NNQSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9jbWEmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF91bmNoYXJnZV9jbWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHdoaWNoIGVuYWJsZXMgYWNjb3VudGluZyBvZiBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gSXQgYWRkcyBuZXcgY29yZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgdG8gaGFuZGxlIHRoZSBhY2NvdW50aW5nIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENNQSBhbGxvY2F0aW9ucyAoZS5nLiwgdXNpbmcgRE1BLUJVRiBoZWFwcyBvciBodWdldGxiKSB3aGVuIHRoZSBtb3VudCBvcHRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBDTUEgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtETUFfQ01BJiMzNDssCiAgICAmIzM0O0RNQUJVRl9IRUFQUyYjMzQ7LAogICAgJiMzNDtETUFCVUZfSEVBUFNfQ01BJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2NtYSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VuY2hhcmdlX2NtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2Agd2hpY2ggZW5hYmxlcyBhY2NvdW50aW5nIG9mIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJiMzOTtzIG92ZXJhbGwgbWVtb3J5IHVzYWdlLiBJdCBhZGRzIG5ldyBjb3JlIGZ1bmN0aW9ucyBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCB0byBoYW5kbGUgdGhlIGFjY291bnRpbmcgZHVyaW5nIENNQSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQ01BIGFsbG9jYXRpb25zIChlLmcuLCB1c2luZyBETUEtQlVGIGhlYXBzIG9yIGh1Z2V0bGIpIHdoZW4gdGhlIG1vdW50IG9wdGlvbiBpcyBlbmFibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIENNQSBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTk6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHRvIGFjY291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAmIzM5O3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UuIFRoZSBjaGFuZ2VzIGludm9sdmU6XG4xLiBBZGRpbmcgYGNtYV9jb3VudGVyc2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXG4yLiBBZGRpbmcgYGNtYV9kZmxfZmlsZXNgIGFycmF5IGZvciBjZ3JvdXBmcywgd2hpY2ggaXMgYWxzbyBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cbjMuIEV4cG9zaW5nIENNQSB1c2FnZSBhbmQgbGltaXRzIHZpYSBjZ3JvdXBmcyBmaWxlcyAoYG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5tYXhgKS4gVGhlc2UgZmlsZXMgdXNlIGBzZXFfcHJpbnRmYCBhbmQgYHNlcV9wdXRzX21lbWNnX3R1bmFibGVgIHRvIGZvcm1hdCBpbnRlZ2VyIHZhbHVlcywgbWVhbmluZyBubyByYXcga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXG40LiBNb2RpZnlpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgcGF0aHMgdG8gY2hhcmdlIGFuZCB1bmNoYXJnZSBtZW1vcnkgY2dyb3Vwcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIHBhdGhzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwYXNzZWQgYXJvdW5kLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBjbWFfY291bnRlcnNgLCB1c2UtYWZ0ZXItZnJlZSBvZiBgbWVtY2dgLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTM4ZGU3NDE4MTNlYjQ3NmE5ZDUyMGNmZDA5NmNhMWEwYTE1MTg0MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDE5OjEyOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CmluZGV4IGFlZDE5NWE3MWNiZjEuLjM5ODcxYTdhMDhhOGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKQEAgLTI0Niw2ICYjNDM7MjQ2LDI2IEBAIGNncm91cCB2MiBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zLgogICAgICAgICAgIHdpbGwgbm90IGJlIHRyYWNrZWQgYnkgdGhlIG1lbW9yeSBjb250cm9sbGVyIChldmVuIGlmIGNncm91cAogICAgICAgICAgIHYyIGlzIHJlbW91bnRlZCBsYXRlciBvbikuCiAKJiM0MzsgIG1lbW9yeV9jbWFfYWNjb3VudGluZwomIzQzOyAgICAgICAgQ291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAmIzM5O3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgZm9yCiYjNDM7ICAgICAgICB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBleHBvc2UgcGVyLUNNQS1hcmVhIHVzYWdlIGNvdW50ZXJzLiBUaGlzCiYjNDM7ICAgICAgICBiZWhhdmlvciBpcyBvcHQtaW4sIHNvIGFzIHRvIG5vdCBjYXVzZSByZWdyZXNzaW9uIG9uIGV4aXN0aW5nIHNldHVwcy4KJiM0MzsKJiM0MzsgICAgICAgIEEgZmV3IGNhdmVhdHMgdG8ga2VlcCBpbiBtaW5kOgomIzQzOwomIzQzOyAgICAgICAgKiBDTUEgYXJlYXMgYXJlIHJlc2VydmVkIGF0IGJvb3QgdGltZSwgbWVtb3J5IGlzIG9ubHkgY2hhcmdlZCB0byBhCiYjNDM7ICAgICAgICAgIGNncm91cCB3aGVuIGEgQ01BIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIG9uIGl0cyBiZWhhbGYuCiYjNDM7ICAgICAgICAqIENNQSBwYWdlcyBhbGxvY2F0ZWQgd2hpbGUgdGhpcyBvcHRpb24gaXMgbm90IGVuYWJsZWQgd2lsbCBub3QgYmUKJiM0MzsgICAgICAgICAgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGV2ZW4gaWYgY2dyb3VwIHYyIGlzIHJlbW91bnRlZAomIzQzOyAgICAgICAgICBsYXRlciBvbiB3aXRoIHRoaXMgb3B0aW9uLiBDaGFyZ2VzIGhhcHBlbiBhdCBhbGxvY2F0aW9uLgomIzQzOyAgICAgICAgKiBDTUEgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgYm90aCB0byB0aGUgY2dyb3VwJiMzOTtzIG1lbW9yeSBjb3VudGVyCiYjNDM7ICAgICAgICAgIChsaW1pdGVkIGJ5IG1lbW9yeS5tYXgpIGFuZCB0aGUgcGVyLWFyZWEgQ01BIGNvdW50ZXIgKGxpbWl0ZWQgYnkKJiM0MzsgICAgICAgICAgbWVtb3J5LmNtYS4mbHQ7YXJlYSZndDsubWF4KS4gSGl0dGluZyBlaXRoZXIgbGltaXQgY2FuIGNhdXNlIGFuIGFsbG9jYXRpb24KJiM0MzsgICAgICAgICAgdG8gZmFpbC4gSWYgQ01BIHVzYWdlIHB1c2hlcyB0aGUgY2dyb3VwIG92ZXIgbWVtb3J5LmhpZ2ggb3IKJiM0MzsgICAgICAgICAgbWVtb3J5Lm1heCwgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG90aGVyCiYjNDM7ICAgICAgICAgIG1lbW9yeSBvbmx5LiBDTUEgbWVtb3J5IGNoYXJnZWQgdG8gdGhlIGNncm91cCBpcyBub3QgcmVjbGFpbWFibGUuCiYjNDM7ICAgICAgICAgIExpbWl0cyBzaG91bGQgYmUgc2l6ZWQgdG8gYWNjb21tb2RhdGUgdGhlIGV4cGVjdGVkIENNQSBwcmVzc3VyZS4KJiM0MzsKICAgcGlkc19sb2NhbGV2ZW50cwogICAgICAgICBUaGUgb3B0aW9uIHJlc3RvcmVzIHYxLWxpa2UgYmVoYXZpb3Igb2YgcGlkcy5ldmVudHM6bWF4LCB0aGF0IGlzIG9ubHkKICAgICAgICAgbG9jYWwgKGluc2lkZSBjZ3JvdXAgcHJvcGVyKSBmb3JrIGZhaWx1cmVzIGFyZSBjb3VudGVkLiBXaXRob3V0IHRoaXMKQEAgLTE5MDgsNiAmIzQzOzE5MjgsMjEgQEAgVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC4KIAlUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgYW5kIHN3YXBwaW5nCiAJaXMgYWxsb3dlZCB1bmxlc3MgbWVtb3J5LnN3YXAubWF4IGlzIHNldCB0byAwLgogCiYjNDM7ICBtZW1vcnkuY21hLiZsdDthcmVhJmd0Oy5jdXJyZW50CiYjNDM7ICAgICAgICBBIHJlYWQtb25seSBzaW5nbGUgdmFsdWUgZmlsZSB3aGljaCBleGlzdHMgb24gbm9uLXJvb3QgY2dyb3Vwcy4gJmx0O2FyZWEmZ3Q7CiYjNDM7ICAgICAgICBpcyB0aGUgQ01BIGFyZWEgbmFtZSAoZS5nLiAmIzM0O3Jlc2VydmVkJiMzNDsgZm9yIHRoZSBkZWZhdWx0IERNQSBDTUEgYXJlYSkuCiYjNDM7CiYjNDM7ICAgICAgICBUaGUgdG90YWwgYW1vdW50IG9mIENNQSBtZW1vcnkgY3VycmVudGx5IGNoYXJnZWQgdG8gdGhlIGNncm91cCBmb3IgdGhlCiYjNDM7ICAgICAgICBnaXZlbiBDTUEgYXJlYS4gT25seSBhY2NvdW50ZWQgd2hlbiBtZW1vcnlfY21hX2FjY291bnRpbmcgaXMgZW5hYmxlZC4KJiM0MzsKJiM0MzsgIG1lbW9yeS5jbWEuJmx0O2FyZWEmZ3Q7Lm1heAomIzQzOyAgICAgICAgQSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLiBUaGUKJiM0MzsgICAgICAgIGRlZmF1bHQgaXMgJiMzNDttYXgmIzM0Oy4KJiM0MzsKJiM0MzsgICAgICAgIENNQSB1c2FnZSBoYXJkIGxpbWl0IGZvciB0aGUgZ2l2ZW4gYXJlYS4gSWYgYSBjZ3JvdXAmIzM5O3MgQ01BIHVzYWdlIGZvcgomIzQzOyAgICAgICAgdGhpcyBhcmVhIGV4Y2VlZHMgdGhpcyBsaW1pdCwgdGhlIGFsbG9jYXRpb24gd2lsbCBmYWlsLiBPbmx5IGVuZm9yY2VkCiYjNDM7ICAgICAgICB3aGVuIG1lbW9yeV9jbWFfYWNjb3VudGluZyBpcyBlbmFibGVkLgomIzQzOwogICBtZW1vcnkucHJlc3N1cmUKIAlBIHJlYWQtb25seSBuZXN0ZWQta2V5ZWQgZmlsZS4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCmluZGV4IGRlMmNkNjIzOGMyYWUuLjE1ZjNmNzExMGM1YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmgKQEAgLTEyOSw2ICYjNDM7MTI5LDExIEBAIGVudW0gewogCSAqIEVuYWJsZSBsZWdhY3kgbG9jYWwgcGlkcy5ldmVudHMuCiAJICovCiAJQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTID0gKDEgJmx0OyZsdDsgMjApLAomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgY21hIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlci4KJiM0MzsJICovCiYjNDM7CUNHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcgPSAoMSAmbHQ7Jmx0OyAyMSksCiB9OwogCiAvKiBjZnR5cGUtJmd0O2ZsYWdzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtYS5oIGIvaW5jbHVkZS9saW51eC9jbWEuaAppbmRleCA4NTU1ZDM4YTk3YjFhLi4xNmUyMTM2NDIxYjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY21hLmgKQEAgLTQ5LDEyICYjNDM7NDksMTIgQEAgZXh0ZXJuIGludCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSwKIAkJCQkJc3RydWN0IGNtYSAqKnJlc19jbWEpOwogZXh0ZXJuIHN0cnVjdCBwYWdlICpjbWFfYWxsb2Moc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBpbnQgYWxpZ24sCiAJCQkgICAgICBib29sIG5vX3dhcm4pOwotZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwomIzQzO2V4dGVybiBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAogc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW4oc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIGNvdW50LAogCQl1bnNpZ25lZCBpbnQgYWxpZ24sIGJvb2wgbm9fd2Fybik7CiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGludCBvcmRlcik7Ci1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKJiM0Mztib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywKIAkJdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKIGV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA4MTcwYmI4MDY2YTIyLi44MDFmYmRlOTQxMzdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMzIwLDYgJiM0MzszMjAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogCXNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrOwogI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqLwogCiYjNDM7I2lmZGVmIENPTkZJR19DTUEKJiM0MzsJc3RydWN0IHBhZ2VfY291bnRlciAqY21hX2NvdW50ZXJzOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQ01BICovCiYjNDM7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107CiB9OwogCkBAIC02NjIsNiAmIzQzOzY2NiwxMSBAQCBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApOwogaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCwKIAkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTsKIAomIzQzO2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsCiYjNDM7CQkJICBzdHJ1Y3QgY21hICpjbWEpOwomIzQzO3ZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsCiYjNDM7CQkJICAgICBzdHJ1Y3QgY21hICpjbWEpOwomIzQzOwogdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAKIC8qKgpAQCAtMTE2MCw2ICYjNDM7MTE2OSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkJCXN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGNvdW50LCBzdHJ1Y3QgY21hICpjbWEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC9jZ3JvdXAuYwppbmRleCBiNWI0NjFkNDQxOGIxLi4xMjE4NGY4NWFkMTAwIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmMKQEAgLTE5ODUsNiAmIzQzOzE5ODUsNyBAQCBlbnVtIGNncm91cDJfcGFyYW0gewogCU9wdF9tZW1vcnlfcmVjdXJzaXZlcHJvdCwKIAlPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZywKIAlPcHRfcGlkc19sb2NhbGV2ZW50cywKJiM0MzsJT3B0X21lbW9yeV9jbWFfYWNjb3VudGluZywKIAlucl9fY2dyb3VwMl9wYXJhbXMKIH07CiAKQEAgLTE5OTUsNiAmIzQzOzE5OTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGNncm91cDJfZnNfcGFyYW1ldGVyc1tdID0gewogCWZzcGFyYW1fZmxhZygmIzM0O21lbW9yeV9yZWN1cnNpdmVwcm90JiMzNDssCU9wdF9tZW1vcnlfcmVjdXJzaXZlcHJvdCksCiAJZnNwYXJhbV9mbGFnKCYjMzQ7bWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyYjMzQ7LCBPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyksCiAJZnNwYXJhbV9mbGFnKCYjMzQ7cGlkc19sb2NhbGV2ZW50cyYjMzQ7LAlPcHRfcGlkc19sb2NhbGV2ZW50cyksCiYjNDM7CWZzcGFyYW1fZmxhZygmIzM0O21lbW9yeV9jbWFfYWNjb3VudGluZyYjMzQ7LAlPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nKSwKIAl7fQogfTsKIApAQCAtMjAyNyw2ICYjNDM7MjAyOSw5IEBAIHN0YXRpYyBpbnQgY2dyb3VwMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtCiAJY2FzZSBPcHRfcGlkc19sb2NhbGV2ZW50czoKIAkJY3R4LSZndDtmbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7CiAJCXJldHVybiAwOwomIzQzOwljYXNlIE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmc6CiYjNDM7CQljdHgtJmd0O2ZsYWdzIHw9IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkc7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDY4LDYgJiM0MzsyMDczLDExIEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Nncm91cF9yb290X2ZsYWdzKHVuc2lnbmVkIGludCByb290X2ZsYWdzKQogCQkJY2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7CiAJCWVsc2UKIAkJCWNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDs9IH5DR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7CiYjNDM7CiYjNDM7CQlpZiAocm9vdF9mbGFncyAmYW1wOyBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HKQomIzQzOwkJCWNncnBfZGZsX3Jvb3QuZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORzsKJiM0MzsJCWVsc2UKJiM0MzsJCQljZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7PSB+Q0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORzsKIAl9CiB9CiAKQEAgLTIwODUsNiAmIzQzOzIwOTUsOCBAQCBzdGF0aWMgaW50IGNncm91cF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBrZXJuZnNfcm9vdCAqa2Zfcm9vdAogCQlzZXFfcHV0cyhzZXEsICYjMzQ7LG1lbW9yeV9odWdldGxiX2FjY291bnRpbmcmIzM0Oyk7CiAJaWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDsgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKQogCQlzZXFfcHV0cyhzZXEsICYjMzQ7LHBpZHNfbG9jYWxldmVudHMmIzM0Oyk7CiYjNDM7CWlmIChjZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpCiYjNDM7CQlzZXFfcHV0cyhzZXEsICYjMzQ7LG1lbW9yeV9jbWFfYWNjb3VudGluZyYjMzQ7KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUyMCw3ICYjNDM7NzUzMiw4IEBAIHN0YXRpYyBzc2l6ZV90IGZlYXR1cmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSYjMzQ7bWVtb3J5X2xvY2FsZXZlbnRzXG4mIzM0OwogCQkJJiMzNDttZW1vcnlfcmVjdXJzaXZlcHJvdFxuJiMzNDsKIAkJCSYjMzQ7bWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xuJiMzNDsKLQkJCSYjMzQ7cGlkc19sb2NhbGV2ZW50c1xuJiMzNDspOwomIzQzOwkJCSYjMzQ7cGlkc19sb2NhbGV2ZW50c1xuJiMzNDsKJiM0MzsJCQkmIzM0O21lbW9yeV9jbWFfYWNjb3VudGluZ1xuJiMzNDspOwogfQogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjZ3JvdXBfZmVhdHVyZXNfYXR0ciA9IF9fQVRUUl9STyhmZWF0dXJlcyk7CiAKZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmMKaW5kZXggYTEzY2U0OTk5YjM5Zi4uMDNlYjNhY2JkM2M3NSAxMDA2NDQKLS0tIGEvbW0vY21hLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vY21hLmMKQEAgLTI1LDcgJiM0MzsyNSw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nX2Nob2ljZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sb2cyLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaGlnaG1lbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva21lbWxlYWsuaCZndDsKQEAgLTkwNSw2ICYjNDM7OTA0LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19jbWFfYWxsb2NfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwKIAkJY21hX2RlYnVnX3Nob3dfYXJlYXMoY21hKTsKIAl9CiAKJiM0MzsJaWYgKHBhZ2UgJmFtcDsmYW1wOyBtZW1fY2dyb3VwX2NoYXJnZV9jbWEocGFnZSwgY291bnQsIGNtYSkpIHsKJiM0MzsJCWZyZWVfY29udGlnX2Zyb3plbl9yYW5nZShwYWdlX3RvX3BmbihwYWdlKSwgY291bnQpOwomIzQzOwkJY21hX2NsZWFyX2JpdG1hcChjbWEsICZhbXA7Y21hLSZndDtyYW5nZXNbcl0sIHBhZ2VfdG9fcGZuKHBhZ2UpLCBjb3VudCk7CiYjNDM7CQlwYWdlID0gTlVMTDsKJiM0MzsJfQomIzQzOwogCXByX2RlYnVnKCYjMzQ7JXMoKTogcmV0dXJuZWQgJXBcbiYjMzQ7LCBfX2Z1bmNfXywgcGFnZSk7CiAJdHJhY2VfY21hX2FsbG9jX2ZpbmlzaChuYW1lLCBwYWdlID8gcGFnZV90b19wZm4ocGFnZSkgOiAwLAogCQkJICAgICAgIHBhZ2UsIGNvdW50LCBhbGlnbiwgcmV0KTsKQEAgLTk5MiwxMiAmIzQzOzk5NywxMyBAQCBzdGF0aWMgc3RydWN0IGNtYV9tZW1yYW5nZSAqZmluZF9jbWFfbWVtcmFuZ2Uoc3RydWN0IGNtYSAqY21hLAogfQogCiBzdGF0aWMgdm9pZCBfX2NtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtciwKLQkJY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KQomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZXMpOwogCiAJcHJfZGVidWcoJiMzNDslcyhwYWdlICVwLCBjb3VudCAlbHUpXG4mIzM0OywgX19mdW5jX18sICh2b2lkICopcGFnZXMsIGNvdW50KTsKIAomIzQzOwltZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShwYWdlcywgY291bnQsIGNtYSk7CiAJZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBmbiwgY291bnQpOwogCWNtYV9jbGVhcl9iaXRtYXAoY21hLCBjbXIsIHBmbiwgY291bnQpOwogCWNtYV9zeXNmc19hY2NvdW50X3JlbGVhc2VfcGFnZXMoY21hLCBjb3VudCk7CkBAIC0xMDE0LDcgJiM0MzsxMDIwLDcgQEAgc3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsCiAgKiBJdCByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzIGFyZWEgYW5kCiAgKiB0cnVlIG90aGVyd2lzZS4KICAqLwotYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKJiM0Mztib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLAogCQkgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7CkBAIC0xMDM3LDcgJiM0MzsxMDQzLDcgQEAgYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNtYV9yZWxlYXNlKTsKIAotYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsCiYjNDM7Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsCiAJCXVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yOwpkaWZmIC0tZ2l0IGEvbW0vY21hLmggYi9tbS9jbWEuaAppbmRleCBjNzAxODBjMzY1NTljLi41MmI3ZDRiZTUxNzA3IDEwMDY0NAotLS0gYS9tbS9jbWEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWEuaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva29iamVjdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKIAogc3RydWN0IGNtYV9rb2JqZWN0IHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpAQCAtODAsNiAmIzQzOzgxLDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX21heG5vKHN0cnVjdCBjbWEgKmNtYSwKIAlyZXR1cm4gY21yLSZndDtjb3VudCAmZ3Q7Jmd0OyBjbWEtJmd0O29yZGVyX3Blcl9iaXQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBjbWFfYXJlYV9pbmRleChjb25zdCBzdHJ1Y3QgY21hICpjbWEpCiYjNDM7ewomIzQzOwlyZXR1cm4gY21hIC0gY21hX2FyZWFzOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfQ01BX1NZU0ZTCiB2b2lkIGNtYV9zeXNmc19hY2NvdW50X3N1Y2Nlc3NfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfZmFpbF9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvbW0vY21hX2RlYnVnLmMgYi9tbS9jbWFfZGVidWcuYwppbmRleCA1MjNiYTRhMGY5Zjc2Li43MGJmYzZmYmVlY2EzIDEwMDY0NAotLS0gYS9tbS9jbWFfZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWFfZGVidWcuYwpAQCAtNyw3ICYjNDM7Nyw2IEBACiAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpkaWZmIC0tZ2l0IGEvbW0vY21hX3N5c2ZzLmMgYi9tbS9jbWFfc3lzZnMuYwppbmRleCBkNWJmNzkyYzYyNDVhLi5lNGVlMzViYzY4MmJhIDEwMDY0NAotLS0gYS9tbS9jbWFfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWFfc3lzZnMuYwpAQCAtNSw3ICYjNDM7NSw2IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWluY2hhbiBLaW0gJmx0O21pbmNoYW5Aa2VybmVsLm9yZyZndDsKICAqLwogCi0jaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNmRjNDg4OGE5MGYzZi4uZjI4ZDYxMGE1OWNlNyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjgsNiAmIzQzOzY4LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKICNpbmNsdWRlICYjMzQ7c2xhYi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bWVtY29udHJvbC12MS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NtYS5oJiMzNDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKIApAQCAtNDA2Miw2ICYjNDM7NDA2Myw5IEBAIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlpbnQgbm9kZTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7CWtmcmVlKG1lbWNnLSZndDtjbWFfY291bnRlcnMpOwomIzQzOyNlbmRpZgogCWZvcl9lYWNoX25vZGUobm9kZSkgewogCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy0mZ3Q7bm9kZWluZm9bbm9kZV07CiAJCWlmICghcG4pCkBAIC00MTQ0LDYgJiM0Mzs0MTQ4LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQogCQltZW1jZy0mZ3Q7Y2d3Yl9mcm5baV0uZG9uZSA9CiAJCQlfX1dCX0NPTVBMRVRJT05fSU5JVCgmYW1wO21lbWNnX2Nnd2JfZnJuX3dhaXRxKTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzOwlpZiAoY21hX2FyZWFfY291bnQpIHsKJiM0MzsJCW1lbWNnLSZndDtjbWFfY291bnRlcnMgPSBrY2FsbG9jKGNtYV9hcmVhX2NvdW50LAomIzQzOwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlX2NvdW50ZXIpLAomIzQzOwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIW1lbWNnLSZndDtjbWFfY291bnRlcnMpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiAjZW5kaWYKIAlscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpOwogCXJldHVybiBtZW1jZzsKQEAgLTQxNTksNiAmIzQzOzQxNzIsNyBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcykKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NzcyhwYXJlbnRfY3NzKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7CiAJYm9vbCBtZW1jZ19vbl9kZmwgPSBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpOwomIzQzOwl1bnNpZ25lZCBpbnQgX19tYXliZV91bnVzZWQgaTsKIAogCW9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTsKIAltZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTsKQEAgLTQxNzEsNiAmIzQzOzQxODUsMTIgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAjaWZkZWYgQ09ORklHX1pTV0FQCiAJbWVtY2ctJmd0O3pzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJV1JJVEVfT05DRShtZW1jZy0mZ3Q7enN3YXBfd3JpdGViYWNrLCB0cnVlKTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY21hX2FyZWFfY291bnQ7ICYjNDM7JiM0MztpKQomIzQzOwkJcGFnZV9jb3VudGVyX2luaXQoJmFtcDttZW1jZy0mZ3Q7Y21hX2NvdW50ZXJzW2ldLAomIzQzOwkJCQkgIHBhcmVudCA/ICZhbXA7cGFyZW50LSZndDtjbWFfY291bnRlcnNbaV0gOiBOVUxMLAomIzQzOwkJCQkgIGZhbHNlKTsKICNlbmRpZgogCXBhZ2VfY291bnRlcl9zZXRfaGlnaCgmYW1wO21lbWNnLSZndDtzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTsKIAlpZiAocGFyZW50KSB7CkBAIC01MjEzLDYgJiM0Mzs1MjMzLDEwMiBAQCBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzO3N0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2NtYSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDsgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORzsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkgIHN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsICpmYWlsOwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CWludCByYyA9IDA7CiYjNDM7CiYjNDM7CWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2NtYSgpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCiYjNDM7CQlnb3RvIGNncm91cF9wdXQ7CiYjNDM7CiYjNDM7CXJjID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgR0ZQX0tFUk5FTCwgY291bnQpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlnb3RvIGNncm91cF9wdXQ7CiYjNDM7CiYjNDM7CWNvdW50ZXIgPSAmYW1wO21lbWNnLSZndDtjbWFfY291bnRlcnNbY21hX2FyZWFfaW5kZXgoY21hKV07CiYjNDM7CWlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoY291bnRlciwgY291bnQsICZhbXA7ZmFpbCkpIHsKJiM0MzsJCXJlZmlsbF9zdG9jayhtZW1jZywgY291bnQpOwomIzQzOwkJcmMgPSAtRU5PTUVNOwomIzQzOwkJZ290byBjZ3JvdXBfcHV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZyk7CiYjNDM7CWlmIChmb2xpb190ZXN0X2xhcmdlKHBhZ2VfZm9saW8ocGFnZSkpKSB7CiYjNDM7CQljb21taXRfY2hhcmdlKHBhZ2VfZm9saW8ocGFnZSksIG9iamNnKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW9ial9jZ3JvdXBfZ2V0X21hbnkob2JqY2csIGNvdW50IC0gMSk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlICYjNDM7IGkpLCBvYmpjZyk7CiYjNDM7CX0KJiM0MzsKJiM0MztjZ3JvdXBfcHV0OgomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkgICAgIHN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdldCB0aGUgb2JqY2cgZnJvbSB0aGUgZmlyc3QgcGFnZS4KJiM0MzsJICogcGFnZV9vYmpjZygpIGV4cGVjdHMgTUVNQ0dfREFUQV9LTUVNLCBidXQgZm9yIENNQSB3ZSB1c2VkCiYjNDM7CSAqIGNvbW1pdF9jaGFyZ2UoKSB3aGljaCBzZXRzIGZvbGlvLSZndDttZW1jZ19kYXRhID0gb2JqY2cKJiM0MzsJICogd2l0aG91dCBmbGFncywgc28gd2UgY2Fubm90IHVzZSBpdC4KJiM0MzsJICovCiYjNDM7CW9iamNnID0gZm9saW9fb2JqY2cocGFnZV9mb2xpbyhwYWdlKSk7CiYjNDM7CWlmICghb2JqY2cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKJiM0MzsKJiM0MzsJY291bnRlciA9ICZhbXA7bWVtY2ctJmd0O2NtYV9jb3VudGVyc1tjbWFfYXJlYV9pbmRleChjbWEpXTsKJiM0MzsJcGFnZV9jb3VudGVyX3VuY2hhcmdlKGNvdW50ZXIsIGNvdW50KTsKJiM0MzsKJiM0MzsJbWVtY2dfdW5jaGFyZ2UobWVtY2csIGNvdW50KTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7CiYjNDM7CQlmb2xpby0mZ3Q7bWVtY2dfZGF0YSA9IDA7CiYjNDM7CQlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQkJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UgJiM0MzsgaSk7CiYjNDM7CQkJZm9saW8tJmd0O21lbWNnX2RhdGEgPSAwOwomIzQzOwkJCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0NNQSAqLwomIzQzOwogc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCXVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5OwpAQCAtNjA2NiwzICYjNDM7NjE4Miw5MiBAQCB2b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAkJSyhhdG9taWNfbG9uZ19yZWFkKCZhbXA7bWVtY2ctJmd0O21lbW9yeS5jaGlsZHJlbl9taW5fdXNhZ2UpKSwKIAkJSyhhdG9taWNfbG9uZ19yZWFkKCZhbXA7bWVtY2ctJmd0O21lbW9yeS5jaGlsZHJlbl9sb3dfdXNhZ2UpKSk7CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19DTUEKJiM0MztzdGF0aWMgaW50IG1lbW9yeV9jbWFfY3VycmVudF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7CiYjNDM7CWludCBpZHggPSBzZXFfY2Z0KG0pLSZndDtwcml2YXRlOwomIzQzOwl1bnNpZ25lZCBsb25nIGN1ciA9IHBhZ2VfY291bnRlcl9yZWFkKCZhbXA7bWVtY2ctJmd0O2NtYV9jb3VudGVyc1tpZHhdKTsKJiM0MzsKJiM0MzsJc2VxX3ByaW50ZihtLCAmIzM0OyVsdVxuJiMzNDssIGN1ciAqIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1lbW9yeV9jbWFfbWF4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTsKJiM0MzsJaW50IGlkeCA9IHNlcV9jZnQobSktJmd0O3ByaXZhdGU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4ID0gUkVBRF9PTkNFKG1lbWNnLSZndDtjbWFfY291bnRlcnNbaWR4XS5tYXgpOwomIzQzOwomIzQzOwlyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLCBtYXgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBtZW1vcnlfY21hX21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZiwKJiM0MzsJCQkJICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpOwomIzQzOwlpbnQgaWR4ID0gb2ZfY2Z0KG9mKS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXg7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJYnVmID0gc3Ryc3RyaXAoYnVmKTsKJiM0MzsJcmMgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCAmIzM0O21heCYjMzQ7LCAmYW1wO21heCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJeGNoZygmYW1wO21lbWNnLSZndDtjbWFfY291bnRlcnNbaWR4XS5tYXgsIG1heCk7CiYjNDM7CiYjNDM7CXJldHVybiBuYnl0ZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNtYV9kZmxfdG1wbFtdID0gewomIzQzOwl7CiYjNDM7CQkubmFtZSA9ICYjMzQ7Y3VycmVudCYjMzQ7LAomIzQzOwkJLnNlcV9zaG93ID0gbWVtb3J5X2NtYV9jdXJyZW50X3Nob3csCiYjNDM7CQkuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5uYW1lID0gJiMzNDttYXgmIzM0OywKJiM0MzsJCS5zZXFfc2hvdyA9IG1lbW9yeV9jbWFfbWF4X3Nob3csCiYjNDM7CQkud3JpdGUgPSBtZW1vcnlfY21hX21heF93cml0ZSwKJiM0MzsJCS5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCwKJiM0MzsJfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MzsjZGVmaW5lIENNQV9ERkxfVE1QTF9TSVpFCShBUlJBWV9TSVpFKGNtYV9kZmxfdG1wbCkgLSAxKQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlICpjbWFfZGZsX2ZpbGVzOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfY21hX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjZnR5cGUgKmNmdDsKJiM0MzsJdW5zaWduZWQgaW50IGksIGo7CiYjNDM7CWludCBjb3VudDsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhY21hX2FyZWFfY291bnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY291bnQgPSBjbWFfYXJlYV9jb3VudCAqIENNQV9ERkxfVE1QTF9TSVpFOwomIzQzOwljbWFfZGZsX2ZpbGVzID0ga2NhbGxvYyhjb3VudCAmIzQzOyAxLCBzaXplb2YoKmNtYV9kZmxfdG1wbCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWNtYV9kZmxfZmlsZXMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNtYV9hcmVhX2NvdW50OyAmIzQzOyYjNDM7aSkKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBDTUFfREZMX1RNUExfU0laRTsgJiM0MzsmIzQzO2opIHsKJiM0MzsJCQljZnQgPSAmYW1wO2NtYV9kZmxfZmlsZXNbaSAqIENNQV9ERkxfVE1QTF9TSVpFICYjNDM7IGpdOwomIzQzOwkJCSpjZnQgPSBjbWFfZGZsX3RtcGxbal07CiYjNDM7CQkJc25wcmludGYoY2Z0LSZndDtuYW1lLCBNQVhfQ0ZUWVBFX05BTUUsICYjMzQ7Y21hLiVzLiVzJiMzNDssCiYjNDM7CQkJCSBjbWFfZ2V0X25hbWUoJmFtcDtjbWFfYXJlYXNbaV0pLAomIzQzOwkJCQkgY21hX2RmbF90bXBsW2pdLm5hbWUpOwomIzQzOwkJCWNmdC0mZ3Q7cHJpdmF0ZSA9IGk7IC8qIGNtYSBhcmVhIGluZGV4IGZvciBjb3VudGVycyBpbiBjYWxsYmFja3MuICovCiYjNDM7CQkJbG9ja2RlcF9yZWdpc3Rlcl9rZXkoJmFtcDtjZnQtJmd0O2xvY2tkZXBfa2V5KTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJV0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKCZhbXA7bWVtb3J5X2NncnBfc3Vic3lzLCBjbWFfZGZsX2ZpbGVzKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9jbWFfaW5pdCk7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19DTUEgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUKaW5kZXggOTUyZTQ0NDhiZjA3MC4uYjlhNDI5OGQ0OTQ0NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUKQEAgLTEsNSAmIzQzOzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiB0ZXN0X2NvcmUKJiM0Mzt0ZXN0X2NtYV9tZW1jZwogdGVzdF9jcHUKIHRlc3RfY3B1c2V0CiB0ZXN0X2ZyZWV6ZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZQppbmRleCBlMDE1ODRjMjE4OWFjLi42MDFkOTMwMTYwYTQyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlCkBAIC04LDYgJiM0Mzs4LDcgQEAgVEVTVF9QUk9HUyAgICAgOj0gdGVzdF9zdHJlc3Muc2ggdGVzdF9jcHVzZXRfcHJzLnNoIHRlc3RfY3B1c2V0X3YxX2hwLnNoCiBURVNUX0dFTl9GSUxFUyA6PSB3YWl0X2lub3RpZnkKICMgS2VlcCB0aGUgbGlzdHMgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkCiBURVNUX0dFTl9QUk9HUyAgPSB0ZXN0X2NvcmUKJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jbWFfbWVtY2cKIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X2NwdQogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHRlc3RfY3B1c2V0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9mcmVlemVyCkBAIC0yNCw2ICYjNDM7MjUsNyBAQCBpbmNsdWRlIC4uL2xpYi5tawogaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rCiAKICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pCiYjNDM7JChPVVRQVVQpL3Rlc3RfY21hX21lbWNnOiAkKExJQkNHUk9VUF9PKQogJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKQogJChPVVRQVVQpL3Rlc3RfY3B1c2V0OiAkKExJQkNHUk9VUF9PKQogJChPVVRQVVQpL3Rlc3RfZnJlZXplcjogJChMSUJDR1JPVVBfTykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnCmluZGV4IDM5Zjk3OTY5MGRkM2IuLjFjOTAzNDAxNzY4MmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZwpAQCAtNCwzICYjNDM7NCw4IEBAIENPTkZJR19DR1JPVVBfRlJFRVpFUj15CiBDT05GSUdfQ0dST1VQX1NDSEVEPXkKIENPTkZJR19NRU1DRz15CiBDT05GSUdfUEFHRV9DT1VOVEVSPXkKJiM0MztDT05GSUdfQ01BPXkKJiM0MztDT05GSUdfRE1BX0NNQT15CiYjNDM7Q09ORklHX0RNQUJVRl9IRUFQUz15CiYjNDM7Q09ORklHX0RNQUJVRl9IRUFQU19DTUE9eQomIzQzO0NPTkZJR19IVUdFVExCRlM9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45YmQ0MWQ5YTYxNzdkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsNDAyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtaGVhcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2Nncm91cF91dGlsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQ01BX0hFQVBfREVGQVVMVF9QQVRICSYjMzQ7L2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb24mIzM0OwomIzQzOyNkZWZpbmUgQ01BX1JFU0VSVkVEX0NVUlJFTlQJJiMzNDttZW1vcnkuY21hLnJlc2VydmVkLmN1cnJlbnQmIzM0OwomIzQzOyNkZWZpbmUgQ01BX1JFU0VSVkVEX01BWAkmIzM0O21lbW9yeS5jbWEucmVzZXJ2ZWQubWF4JiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEhVR0VUTEJfQ01BX0NVUlJFTlQJJiMzNDttZW1vcnkuY21hLmh1Z2V0bGIwLmN1cnJlbnQmIzM0OwomIzQzOyNkZWZpbmUgSFVHRVRMQl9DTUFfTUFYCSYjMzQ7bWVtb3J5LmNtYS5odWdldGxiMC5tYXgmIzM0OwomIzQzOyNkZWZpbmUgSFVHRVBBR0VTX0RJUgkJJiMzNDsvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgY21hX2hlYXBfYWxsb2MoaW50IGhlYXBfZmQsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9oZWFwX2FsbG9jYXRpb25fZGF0YSBkYXRhID0gewomIzQzOwkJLmxlbiA9IHNpemUsCiYjNDM7CQkuZmRfZmxhZ3MgPSBPX1JEV1IgfCBPX0NMT0VYRUMsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChpb2N0bChoZWFwX2ZkLCBETUFfSEVBUF9JT0NUTF9BTExPQywgJmFtcDtkYXRhKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiBkYXRhLmZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfY21hX2NoYXJnZShjb25zdCBjaGFyICpyb290KQomIzQzO3sKJiM0MzsJaW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7CiYjNDM7CWludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwOwomIzQzOwlzaXplX3Qgc2l6ZSA9IDRVTCAmbHQ7Jmx0OyAyMDsKJiM0MzsJbG9uZyBiZWZvcmUsIGFmdGVyOwomIzQzOwljaGFyICpjZzsKJiM0MzsKJiM0MzsJY2cgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfY21hX2NoYXJnZSYjMzQ7KTsKJiM0MzsJaWYgKCFjZykKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2NyZWF0ZShjZykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaW5fY2cgPSAxOwomIzQzOwomIzQzOwloZWFwX2ZkID0gb3BlbihDTUFfSEVBUF9ERUZBVUxUX1BBVEgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsJaWYgKGhlYXBfZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwliZWZvcmUgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTsKJiM0MzsKJiM0MzsJYnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7CiYjNDM7CWlmIChidWZfZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBpbiBDTUEgaGVhcCAoJW0pXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTsKJiM0MzsKJiM0MzsJaWYgKGFmdGVyIC0gYmVmb3JlICZsdDsgKGxvbmcpc2l6ZSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coCiYjNDM7CQkJJiMzNDtpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIGNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcbiYjMzQ7LAomIzQzOwkJCWJlZm9yZSwgYWZ0ZXIpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNsb3NlKGJ1Zl9mZCk7CiYjNDM7CWJ1Zl9mZCA9IC0xOwomIzQzOwomIzQzOwlhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpOwomIzQzOwlpZiAoIXZhbHVlc19jbG9zZShiZWZvcmUsIGFmdGVyLCAzKSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coCiYjNDM7CQkJJiMzNDtpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIHVuY2hhcmdlOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxuJiMzNDssCiYjNDM7CQkJYmVmb3JlLCBhZnRlcik7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBLU0ZUX1BBU1M7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGJ1Zl9mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoYnVmX2ZkKTsKJiM0MzsJaWYgKGhlYXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGhlYXBfZmQpOwomIzQzOwomIzQzOwlpZiAoaW5fY2cpCiYjNDM7CQljZ19lbnRlcl9jdXJyZW50KHJvb3QpOwomIzQzOwljZ19kZXN0cm95KGNnKTsKJiM0MzsJZnJlZShjZyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZXN0X2NtYV9saW1pdChjb25zdCBjaGFyICpyb290KQomIzQzO3sKJiM0MzsJaW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7CiYjNDM7CWludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwOwomIzQzOwlzaXplX3Qgc2l6ZSA9IDRVTCAmbHQ7Jmx0OyAyMDsKJiM0MzsJY2hhciAqY2c7CiYjNDM7CiYjNDM7CWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX2NtYV9saW1pdCYjMzQ7KTsKJiM0MzsJaWYgKCFjZykKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2NyZWF0ZShjZykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaW5fY2cgPSAxOwomIzQzOwomIzQzOwlpZiAoY2dfd3JpdGUoY2csIENNQV9SRVNFUlZFRF9NQVgsICYjMzQ7Mk0mIzM0OykpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IHNldCBDTUEgbGltaXQgKCVtKVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhlYXBfZmQgPSBvcGVuKENNQV9IRUFQX0RFRkFVTFRfUEFUSCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwlpZiAoaGVhcF9mZCAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Zl9mZCA9IGNtYV9oZWFwX2FsbG9jKGhlYXBfZmQsIHNpemUpOwomIzQzOwlpZiAoYnVmX2ZkICZndDs9IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Q01BIGxpbWl0IG5vdCBlbmZvcmNlZC5cbiYjMzQ7KTsKJiM0MzsJCWNsb3NlKGJ1Zl9mZCk7CiYjNDM7CX0gZWxzZQomIzQzOwkJcmMgPSBLU0ZUX1BBU1M7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGhlYXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGhlYXBfZmQpOwomIzQzOwomIzQzOwlpZiAoaW5fY2cpCiYjNDM7CQljZ19lbnRlcl9jdXJyZW50KHJvb3QpOwomIzQzOwljZ19kZXN0cm95KGNnKTsKJiM0MzsJZnJlZShjZyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2Iodm9pZCkKJiM0Mzt7CiYjNDM7CURJUiAqZGlyOwomIzQzOwlzdHJ1Y3QgZGlyZW50ICplbnRyeTsKJiM0MzsJbG9uZyBtYXhfc2l6ZSA9IDA7CiYjNDM7CiYjNDM7CWRpciA9IG9wZW5kaXIoSFVHRVBBR0VTX0RJUik7CiYjNDM7CWlmICghZGlyKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwl3aGlsZSAoKGVudHJ5ID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CiYjNDM7CQlsb25nIHNpemU7CiYjNDM7CiYjNDM7CQlpZiAoc3NjYW5mKGVudHJ5LSZndDtkX25hbWUsICYjMzQ7aHVnZXBhZ2VzLSVsZGtCJiMzNDssICZhbXA7c2l6ZSkgPT0gMSkgewomIzQzOwkJCWlmIChzaXplICZndDsgbWF4X3NpemUpCiYjNDM7CQkJCW1heF9zaXplID0gc2l6ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwljbG9zZWRpcihkaXIpOwomIzQzOwomIzQzOwlyZXR1cm4gbWF4X3NpemUgJmd0OyAwID8gbWF4X3NpemUgOiAtMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgcmVhZF9zeXNmc19sb25nKGNvbnN0IGNoYXIgKnBhdGgpCiYjNDM7ewomIzQzOwlGSUxFICpmOwomIzQzOwlsb25nIHZhbCA9IC0xOwomIzQzOwomIzQzOwlmID0gZm9wZW4ocGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChmc2NhbmYoZiwgJiMzNDslbGQmIzM0OywgJmFtcDt2YWwpICE9IDEpCiYjNDM7CQl2YWwgPSAtMTsKJiM0MzsJZmNsb3NlKGYpOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX3N5c2ZzX2xvbmcoY29uc3QgY2hhciAqcGF0aCwgbG9uZyB2YWwpCiYjNDM7ewomIzQzOwlGSUxFICpmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihwYXRoLCAmIzM0O3cmIzM0Oyk7CiYjNDM7CWlmICghZikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmMgPSBmcHJpbnRmKGYsICYjMzQ7JWxkJiMzNDssIHZhbCk7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJcmV0dXJuIHJjICZsdDsgMCA/IC0xIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZShjb25zdCBjaGFyICpyb290KQomIzQzO3sKJiM0MzsJaW50IHJjID0gS1NGVF9TS0lQLCBpbl9jZyA9IDA7CiYjNDM7CWxvbmcgaHBhZ2Vfc2l6ZV9rYiwgaHBhZ2Vfc2l6ZV9ieXRlczsKJiM0MzsJbG9uZyBvcmlnX25yID0gLTEsIG5ld19uciwgYmVmb3JlLCBhZnRlcjsKJiM0MzsJY2hhciBucl9wYXRoW1BBVEhfTUFYXTsKJiM0MzsJY2hhciAqY2c7CiYjNDM7CiYjNDM7CWhwYWdlX3NpemVfa2IgPSBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYigpOwomIzQzOwlpZiAoaHBhZ2Vfc2l6ZV9rYiAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIEtTRlRfU0tJUDsKJiM0MzsJfQomIzQzOwlocGFnZV9zaXplX2J5dGVzID0gaHBhZ2Vfc2l6ZV9rYiAqIDEwMjQ7CiYjNDM7CiYjNDM7CXNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSwKJiM0MzsJCSBIVUdFUEFHRVNfRElSICYjMzQ7L2h1Z2VwYWdlcy0lbGRrQi9ucl9odWdlcGFnZXMmIzM0OywgaHBhZ2Vfc2l6ZV9rYik7CiYjNDM7CiYjNDM7CWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX2h1Z2V0bGJfY21hX2NoYXJnZSYjMzQ7KTsKJiM0MzsJaWYgKCFjZykKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2NyZWF0ZShjZykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaW5fY2cgPSAxOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKSAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7aHVnZXRsYiBDTUEgY291bnRlcnMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9yaWdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7CiYjNDM7CWlmIChvcmlnX25yICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3QgcmVhZCAlc1xuJiMzNDssIG5yX3BhdGgpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7CiYjNDM7CiYjNDM7CWlmICh3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgJiM0MzsgMSkpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IHdyaXRlICVzXG4mIzM0OywgbnJfcGF0aCk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpOwomIzQzOwlpZiAobmV3X25yICZsdDs9IG9yaWdfbnIpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGEgaHVnZXBhZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IEtTRlRfRkFJTDsKJiM0MzsJYWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpOwomIzQzOwomIzQzOwlpZiAoYWZ0ZXIgLSBiZWZvcmUgJmx0OyBocGFnZV9zaXplX2J5dGVzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygKJiM0MzsJCQkmIzM0O2h1Z2V0bGIgQ01BIGNvdW50ZXIgbm90IGNoYXJnZWQ6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkIGV4cGVjdGVkICYjNDM7JWxkXG4mIzM0OywKJiM0MzsJCQliZWZvcmUsIGFmdGVyLCBocGFnZV9zaXplX2J5dGVzKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpOwomIzQzOwomIzQzOwlhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7CiYjNDM7CWlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygKJiM0MzsJCQkmIzM0O2h1Z2V0bGIgQ01BIGNvdW50ZXIgbm90IHVuY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGRcbiYjMzQ7LAomIzQzOwkJCWJlZm9yZSwgYWZ0ZXIpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gS1NGVF9QQVNTOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChvcmlnX25yICZndDs9IDApCiYjNDM7CQl3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpOwomIzQzOwomIzQzOwlpZiAoaW5fY2cpCiYjNDM7CQljZ19lbnRlcl9jdXJyZW50KHJvb3QpOwomIzQzOwljZ19kZXN0cm95KGNnKTsKJiM0MzsJZnJlZShjZyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZXN0X2h1Z2V0bGJfY21hX2xpbWl0KGNvbnN0IGNoYXIgKnJvb3QpCiYjNDM7ewomIzQzOwlpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDsKJiM0MzsJbG9uZyBocGFnZV9zaXplX2tiOwomIzQzOwlsb25nIG9yaWdfbnIsIG5ld19ucjsKJiM0MzsJY2hhciBucl9wYXRoW1BBVEhfTUFYXTsKJiM0MzsJY2hhciAqY2c7CiYjNDM7CiYjNDM7CWhwYWdlX3NpemVfa2IgPSBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYigpOwomIzQzOwlpZiAoaHBhZ2Vfc2l6ZV9rYiAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIEtTRlRfU0tJUDsKJiM0MzsJfQomIzQzOwomIzQzOwlzbnByaW50Zihucl9wYXRoLCBzaXplb2YobnJfcGF0aCksCiYjNDM7CQkgSFVHRVBBR0VTX0RJUiAmIzM0Oy9odWdlcGFnZXMtJWxka0IvbnJfaHVnZXBhZ2VzJiMzNDssIGhwYWdlX3NpemVfa2IpOwomIzQzOwomIzQzOwljZyA9IGNnX25hbWUocm9vdCwgJiMzNDttZW1jZ19odWdldGxiX2NtYV9saW1pdCYjMzQ7KTsKJiM0MzsJaWYgKCFjZykKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2NyZWF0ZShjZykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaW5fY2cgPSAxOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9NQVgpICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNnX3dyaXRlKGNnLCBIVUdFVExCX0NNQV9NQVgsICYjMzQ7MCYjMzQ7KSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3Qgc2V0IGh1Z2V0bGIgQ01BIGxpbWl0XG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTsKJiM0MzsJaWYgKG9yaWdfbnIgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCByZWFkICVzXG4mIzM0OywgbnJfcGF0aCk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICYjNDM7IDEpOwomIzQzOwluZXdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7CiYjNDM7CiYjNDM7CXJjID0gS1NGVF9GQUlMOwomIzQzOwlpZiAobmV3X25yICZndDsgb3JpZ19ucikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtodWdldGxiIENNQSBsaW1pdCBub3QgZW5mb3JjZWRcbiYjMzQ7KTsKJiM0MzsJCXdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IEtTRlRfUEFTUzsKJiM0MzsJfQomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChpbl9jZykKJiM0MzsJCWNnX2VudGVyX2N1cnJlbnQocm9vdCk7CiYjNDM7CWNnX2Rlc3Ryb3koY2cpOwomIzQzOwlmcmVlKGNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFQoeCkgeyB4LCAjeCB9CiYjNDM7c3RydWN0IGNtYV9tZW1jZ190ZXN0cyB7CiYjNDM7CWludCAoKmZuKShjb25zdCBjaGFyICpyb290KTsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0Mzt9IHRlc3RzW10gPSB7CiYjNDM7CVQodGVzdF9jbWFfY2hhcmdlKSwKJiM0MzsJVCh0ZXN0X2NtYV9saW1pdCksCiYjNDM7CVQodGVzdF9odWdldGxiX2NtYV9jaGFyZ2UpLAomIzQzOwlUKHRlc3RfaHVnZXRsYl9jbWFfbGltaXQpLAomIzQzO307CiYjNDM7I3VuZGVmIFQKJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJY2hhciByb290W1BBVEhfTUFYXTsKJiM0MzsJaW50IGhhc19tZW1vcnlfY21hX2FjYywgaTsKJiM0MzsKJiM0MzsJa3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJa3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7CiYjNDM7CiYjNDM7CWhhc19tZW1vcnlfY21hX2FjYyA9IHByb2NfbW91bnRfY29udGFpbnMoJiMzNDttZW1vcnlfY21hX2FjY291bnRpbmcmIzM0Oyk7CiYjNDM7CWlmIChoYXNfbWVtb3J5X2NtYV9hY2MgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtjYW5ub3QgcXVlcnkgY2dyb3VwIG1vdW50IG9wdGlvbi5cbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAoIWhhc19tZW1vcnlfY21hX2FjYykKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7Q01BIGFjY291bnRpbmcgaXMgZGlzYWJsZWQuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtjZ3JvdXBmcyBpcyBub3QgYXZhaWxhYmxlLlxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgJiMzNDtjZ3JvdXAuY29udHJvbGxlcnMmIzM0OywgJiMzNDttZW1vcnkmIzM0OykpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O21lbW9yeSBjb250cm9sbGVyIGlzIG5vdCBhdmFpbGFibGUgKENPTkZJR19DR1JPVVBfTUVNQ0c/KVxuJiMzNDspOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh0ZXN0cyk7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlzd2l0Y2ggKHRlc3RzW2ldLmZuKHJvb3QpKSB7CiYjNDM7CQljYXNlIEtTRlRfUEFTUzoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoJiMzNDslc1xuJiMzNDssIHRlc3RzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBLU0ZUX1NLSVA6CiYjNDM7CQkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXNcbiYjMzQ7LCB0ZXN0c1tpXS5uYW1lKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCYjMzQ7JXNcbiYjMzQ7LCB0ZXN0c1tpXS5uYW1lKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTM0YTk1ZWY1ZTA3NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2gKQEAgLTAsMCAmIzQzOzEsMTk3IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgQ29weXJpZ2h0IChjKSAyMDI2IFJlZCBIYXQsIEluYy4KJiM0MzsjCiYjNDM7IyBSdW4gY2dyb3VwIG1lbW9yeSBjb250cm9sbGVyIHNlbGZ0ZXN0cyBpbnNpZGUgYSB2aXJ0bWUtbmcgVk0KJiM0MzsjIERlcGVuZGVuY2llczoKJiM0MzsjCQkqIHZpcnRtZS1uZwomIzQzOyMJCSogYnVzeWJveC1zdGF0aWMgKHVzZWQgYnkgdmlydG1lLW5nKQomIzQzOyMJCSogcWVtdQkodXNlZCBieSB2aXJ0bWUtbmcpCiYjNDM7CiYjNDM7c2V0IC1ldW8gcGlwZWZhaWwKJiM0MzsKJiM0MztyZWFkb25seSBTQ1JJUFRfRElSPSYjMzQ7JChjZCAtUCAtLSAmIzM0OyQoZGlybmFtZSAtLSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDsgJmFtcDsmYW1wOyBwd2QgLVApJiMzNDsKJiM0MztyZWFkb25seSBLRVJORUxfQ0hFQ0tPVVQ9JiMzNDskKHJlYWxwYXRoICYjMzQ7JHtTQ1JJUFRfRElSfSYjMzQ7Ly4uLy4uLy4uLy4uLykmIzM0OwomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBUX0RJUn0mIzM0Oy8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoCiYjNDM7CiYjNDM7cmVhZG9ubHkgU1NIX0dVRVNUX1BPUlQ9JiMzNDske1NTSF9HVUVTVF9QT1JUOi0yMn0mIzM0OwomIzQzO3JlYWRvbmx5IFdBSVRfUEVSSU9EPTMKJiM0MztyZWFkb25seSBXQUlUX1BFUklPRF9NQVg9ODAKJiM0MztyZWFkb25seSBXQUlUX1RPVEFMPSQoKFdBSVRfUEVSSU9EICogV0FJVF9QRVJJT0RfTUFYKSkKJiM0MztyZWFkb25seSBRRU1VX1BJREZJTEU9JiMzNDskKG1rdGVtcCAvdG1wL3FlbXVfbWVtY2dfdm10ZXN0X1hYWFgucGlkKSYjMzQ7CiYjNDM7cmVhZG9ubHkgUUVNVV9PUFRTPSYjMzQ7IC0tcGlkZmlsZSAke1FFTVVfUElERklMRX0gJiMzNDsKJiM0MzsKJiM0MztCVUlMRD0wCiYjNDM7UUVNVT0mIzM0O3FlbXUtc3lzdGVtLSQodW5hbWUgLW0pJiMzNDsKJiM0MztWRVJCT1NFPTAKJiM0MztTSEVMTF9NT0RFPTAKJiM0MztHVUVTVF9UUkVFPSYjMzQ7JHtHVUVTVF9UUkVFOi0kS0VSTkVMX0NIRUNLT1VUfSYjMzQ7CiYjNDM7CiYjNDM7dXNhZ2UoKSB7CiYjNDM7CWNhdCAmbHQ7Jmx0O0VPRgomIzQzOyQwIFtPUFRJT05TXQomIzQzOyAgICAtYiAgICAgICAgQnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgYmVmb3JlIGJvb3RpbmcKJiM0MzsgICAgLXEgJmx0O3FlbXUmZ3Q7IFFFTVUgYmluYXJ5L3BhdGggKGRlZmF1bHQ6ICRRRU1VKQomIzQzOyAgICAtcyAgICAgICAgU3RhcnQgaW50ZXJhY3RpdmUgc2hlbGwgaW4gVk0KJiM0MzsgICAgLXYgICAgICAgIFZlcmJvc2Ugb3V0cHV0ICh2bmcgYm9vdCBsb2dzIG9uIHN0ZG91dCkKJiM0MztFT0YKJiM0MzsJZXhpdCAxCiYjNDM7fQomIzQzOwomIzQzO2RpZSgpIHsKJiM0MzsJZWNobyAmIzM0OyQqJiMzNDsgJmd0OyZhbXA7MgomIzQzOwlleGl0ICYjMzQ7JHtLU0ZUX0ZBSUx9JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2xlYW51cCgpIHsKJiM0MzsJaWYgW1sgLXMgJiMzNDskUUVNVV9QSURGSUxFJiMzNDsgXV07IHRoZW4KJiM0MzsJCXBraWxsIC1TSUdURVJNIC1GICYjMzQ7JFFFTVVfUElERklMRSYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgfHwgdHJ1ZQomIzQzOwlmaQomIzQzOwomIzQzOwlpZiBbWyAtZSAmIzM0OyRRRU1VX1BJREZJTEUmIzM0OyBdXTsgdGhlbgomIzQzOwkJcm0gLWYgJiMzNDskUUVNVV9QSURGSUxFJiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7dm1fc3NoKCkgewomIzQzOwlzdGRidWYgLW9MIHNzaCAtcSBcCiYjNDM7CQktRiAmIzM0OyRIT01FLy5jYWNoZS92aXJ0bWUtbmcvLnNzaC92aXJ0bWUtbmctc3NoLmNvbmYmIzM0OyBcCiYjNDM7CQktbCByb290ICYjMzQ7dmlydG1lLW5nJSRTU0hfR1VFU1RfUE9SVCYjMzQ7IFwKJiM0MzsJCSYjMzQ7JEAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztjaGVja19kZXBzKCkgewomIzQzOwlmb3IgZGVwIGluIHZuZyAmIzM0OyRRRU1VJiMzNDsgYnVzeWJveCBwa2lsbCBzc2g7IGRvCiYjNDM7CQlpZiAhIGNvbW1hbmQgLXYgJiMzNDskZGVwJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJCWVjaG8gJiMzNDtza2lwOiBkZXBlbmRlbmN5ICRkZXAgbm90IGZvdW5kJiMzNDsKJiM0MzsJCQlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7CQlmaQomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO2hhbmRsZV9idWlsZCgpIHsKJiM0MzsJaWYgW1sgISAmIzM0OyRCVUlMRCYjMzQ7IC1lcSAxIF1dOyB0aGVuCiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgW1sgISAtZCAmIzM0OyRLRVJORUxfQ0hFQ0tPVVQmIzM0OyBdXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0Oy1iIHJlcXVpcmVzICQwIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgc291cmNlIHRyZWUmIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0IDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJcHVzaGQgJiMzNDskS0VSTkVMX0NIRUNLT1VUJiMzNDsgJmFtcDsmZ3Q7L2Rldi9udWxsCiYjNDM7CiYjNDM7CWlmICEgdm5nIC0ta2NvbmZpZyAtLWNvbmZpZyAmIzM0OyRTQ1JJUFRfRElSJiMzNDsvY29uZmlnOyB0aGVuCiYjNDM7CQlkaWUgJiMzNDtmYWlsZWQgdG8gZ2VuZXJhdGUgLmNvbmZpZyBmb3Iga2VybmVsIHNvdXJjZSB0cmVlICgkS0VSTkVMX0NIRUNLT1VUKSYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlmICEgbWFrZSAtaiYjMzQ7JChucHJvYykmIzM0OzsgdGhlbgomIzQzOwkJZGllICYjMzQ7ZmFpbGVkIHRvIGJ1aWxkIGtlcm5lbCBmcm9tIHNvdXJjZSB0cmVlICgkS0VSTkVMX0NIRUNLT1VUKSYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CXBvcGQgJmFtcDsmZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzOwomIzQzO3ZtX3N0YXJ0KCkgewomIzQzOwlsb2NhbCBsb2dmaWxlPS9kZXYvbnVsbAomIzQzOwlsb2NhbCB2ZXJib3NlX29wdD0mIzM0OyYjMzQ7CiYjNDM7CWxvY2FsIGtlcm5lbF9vcHQ9JiMzNDsmIzM0OwomIzQzOwomIzQzOwlpZiBbWyAmIzM0OyRWRVJCT1NFJiMzNDsgLWVxIDEgXV07IHRoZW4KJiM0MzsJCXZlcmJvc2Vfb3B0PSYjMzQ7LS12ZXJib3NlJiMzNDsKJiM0MzsJCWxvZ2ZpbGU9L2Rldi9zdGRvdXQKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgW1sgJiMzNDskQlVJTEQmIzM0OyAtZXEgMSBdXTsgdGhlbgomIzQzOwkJa2VybmVsX29wdD0mIzM0OyR7S0VSTkVMX0NIRUNLT1VUfSYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CXZuZyBcCiYjNDM7CQktLXJ1biBcCiYjNDM7CQkke2tlcm5lbF9vcHR9IFwKJiM0MzsJCSR7dmVyYm9zZV9vcHR9IFwKJiM0MzsJCS0tcWVtdS1vcHRzPSYjMzQ7JFFFTVVfT1BUUyYjMzQ7IFwKJiM0MzsJCS0tcWVtdT0mIzM0OyQoY29tbWFuZCAtdiAmIzM0OyRRRU1VJiMzNDspJiMzNDsgXAomIzQzOwkJLS11c2VyIHJvb3QgXAomIzQzOwkJLS1zc2ggJiMzNDskU1NIX0dVRVNUX1BPUlQmIzM0OyBcCiYjNDM7CQktLW1lbW9yeSAzRyBcCiYjNDM7CQktLWFwcGVuZCAmIzM0O2NtYT02NE0gaHVnZXRsYl9jbWE9MUcgaHVnZXRsYl9jbWFfb25seT0xJiMzNDsgXAomIzQzOwkJLS1ydyAmYW1wOyZndDsmIzM0OyRsb2dmaWxlJiMzNDsgJmFtcDsKJiM0MzsKJiM0MzsJbG9jYWwgdm5nX3BpZD0kIQomIzQzOwlsb2NhbCBlbGFwc2VkPTAKJiM0MzsKJiM0MzsJd2hpbGUgW1sgISAtcyAmIzM0OyRRRU1VX1BJREZJTEUmIzM0OyBdXTsgZG8KJiM0MzsJCWtpbGwgLTAgJiMzNDskdm5nX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IFwKJiM0MzsJCQlkaWUgJiMzNDt2bmcgZXhpdGVkIGVhcmx5OyBmYWlsZWQgdG8gYm9vdCBWTSYjMzQ7CiYjNDM7CQlbWyAmIzM0OyRlbGFwc2VkJiMzNDsgLWdlICYjMzQ7JFdBSVRfVE9UQUwmIzM0OyBdXSAmYW1wOyZhbXA7IFwKJiM0MzsJCQlkaWUgJiMzNDt0aW1lZCBvdXQgd2FpdGluZyBmb3IgVk0gYm9vdCYjMzQ7CiYjNDM7CQlzbGVlcCAxCiYjNDM7CQllbGFwc2VkPSQoKGVsYXBzZWQgJiM0MzsgMSkpCiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7dm1fd2FpdF9mb3Jfc3NoKCkgewomIzQzOwlsb2NhbCBpPTAKJiM0MzsJd2hpbGUgdHJ1ZTsgZG8KJiM0MzsJCXZtX3NzaCAtLSB0cnVlICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCWk9JCgoaSAmIzQzOyAxKSkKJiM0MzsJCVtbICYjMzQ7JHtpfSYjMzQ7IC1ndCAmIzM0OyRXQUlUX1BFUklPRF9NQVgmIzM0OyBdXSAmYW1wOyZhbXA7IFwKJiM0MzsJCQlkaWUgJiMzNDt0aW1lZCBvdXQgd2FpdGluZyBmb3IgZ3Vlc3Qgc3NoJiMzNDsKJiM0MzsJCXNsZWVwICYjMzQ7JFdBSVRfUEVSSU9EJiMzNDsKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MztjaGVja19ndWVzdF9yZXF1aXJlbWVudHMoKSB7CiYjNDM7CXZtX3NzaCAtLSAmIzM0O2dyZXAgLXEgbWVtb3J5IC9zeXMvZnMvY2dyb3VwL2Nncm91cC5jb250cm9sbGVycyYjMzQ7IFwKJiM0MzsJCXx8IGRpZSAmIzM0O21lbW9yeSBjb250cm9sbGVyIG5vdCBhdmFpbGFibGUgKENPTkZJR19NRU1DRz8pJiMzNDsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7W1sgLWUgL2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb24gXV0mIzM0OyBcCiYjNDM7CQl8fCBkaWUgJiMzNDtDTUEgaGVhcCBub3QgYXZhaWxhYmxlIChDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT8gY21hPSBjbWRsaW5lPykmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzZXR1cF9ndWVzdF9jbWFfYWNjb3VudGluZygpIHsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7bW91bnQgLW8gcmVtb3VudCxtZW1vcnlfY21hX2FjY291bnRpbmcgL3N5cy9mcy9jZ3JvdXAmIzM0OyBcCiYjNDM7CQl8fCBkaWUgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeV9jbWFfYWNjb3VudGluZyYjMzQ7CiYjNDM7CXZtX3NzaCAtLSAmIzM0O2VjaG8gJiM0MzttZW1vcnkgJmd0OyAvc3lzL2ZzL2Nncm91cC9jZ3JvdXAuc3VidHJlZV9jb250cm9sJiMzNDsgXAomIzQzOwkJfHwgZGllICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBtZW1vcnkgY29udHJvbGxlciYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3J1bl90ZXN0KCkgewomIzQzOwl2bV9zc2ggLS0gJiMzNDtjZCAmIzM5OyRHVUVTVF9UUkVFJiMzOTsgJmFtcDsmYW1wOyBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwJiMzNDsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7Y2QgJiMzOTskR1VFU1RfVFJFRSYjMzk7ICZhbXA7JmFtcDsgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cyBUQVJHRVRTPWNncm91cCBydW5fdGVzdHMmIzM0OwomIzQzO30KJiM0MzsKJiM0Mzt3aGlsZSBnZXRvcHRzICYjMzQ7Omh2cTpzYiYjMzQ7IG9wdDsgZG8KJiM0MzsJY2FzZSAmIzM0OyRvcHQmIzM0OyBpbgomIzQzOwl2KSBWRVJCT1NFPTEgOzsKJiM0MzsJcSkgUUVNVT0mIzM0OyR7T1BUQVJHfSYjMzQ7IDs7CiYjNDM7CWIpIEJVSUxEPTEgOzsKJiM0MzsJcykgU0hFTExfTU9ERT0xIDs7CiYjNDM7CWh8KikgdXNhZ2UgOzsKJiM0MzsJZXNhYwomIzQzO2RvbmUKJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO2NoZWNrX2RlcHMKJiM0MztoYW5kbGVfYnVpbGQKJiM0MztlY2hvICYjMzQ7Qm9vdGluZyB2aXJ0bWUtbmcgVk0uLi4mIzM0OwomIzQzO3ZtX3N0YXJ0CiYjNDM7dm1fd2FpdF9mb3Jfc3NoCiYjNDM7ZWNobyAmIzM0O1ZNIGlzIHJlYWNoYWJsZSB2aWEgU1NILiYjMzQ7CiYjNDM7CiYjNDM7aWYgW1sgJiMzNDskU0hFTExfTU9ERSYjMzQ7IC1lcSAxIF1dOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTdGFydGluZyBpbnRlcmFjdGl2ZSBzaGVsbCBpbiBWTS4gRXhpdCB0byBzdG9wIFZNLiYjMzQ7CiYjNDM7CXZtX3NzaCAtdCAtLSAmIzM0O2NkICYjMzk7JEdVRVNUX1RSRUUmIzM5OyAmYW1wOyZhbXA7IGV4ZWMgYmFzaCAtLW5vcHJvZmlsZSAtLW5vcmMmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfUEFTUyYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztjaGVja19ndWVzdF9yZXF1aXJlbWVudHMKJiM0MztzZXR1cF9ndWVzdF9jbWFfYWNjb3VudGluZwomIzQzOwomIzQzO2VjaG8gJiMzNDtSdW5uaW5nIGNncm91cCBzZWxmdGVzdHMgaW4gVk0uLi4mIzM0OwomIzQzO3J1bl90ZXN0CiYjNDM7ZWNobyAmIzM0O1BBU1M6IGNncm91cCBzZWxmdGVzdHMgY29tcGxldGVkJiMzNDsKJiM0MztleGl0ICYjMzQ7JEtTRlRfUEFTUyYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgzNAoJCQkJCQkJb3V0cHV0OiAzMzMKCQkJCQkJCXRob3VnaHRzOiAyMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IG1lbW9yeV9jbWFfYWNjb3VudGluZyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBnb29kIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNpbmcgYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgZm9yIGNncm91cCB2Mi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYSBmdWxsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3Qgd2FycmFudGVkIGhlcmUsIGJ1dCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MgdG8gYmUgY2VydGFpbi4KClRoZSBjb3JlIGlkZWEgaXMgdG8gYWNjb3VudCBmb3IgQ01BIG1lbW9yeSB1c2FnZSB3aXRoaW4gY2dyb3Vwcywgd2hpY2ggZW50YWlscyBhZGRpbmcgc29tZSBuZXcgY291bnRlcnMgYW5kIGV4cG9zaW5nIHRoZW0gdmlhIGNncm91cGZzLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgYW5kIGFueSBkYXRhIHJhY2VzLgoKSSBzdGFydGVkIGJ5IGV4YW1pbmluZyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgbmV3IGRhdGEgc3RydWN0dXJlcy4gIGBtZW1jZy0mZ3Q7Y21hX2NvdW50ZXJzYCBhbmQgYGNtYV9kZmxfZmlsZXNgIGFyZSBib3RoIGFsbG9jYXRlZCB1c2luZyBga2NhbGxvY2AuIFRoaXMgaW1tZWRpYXRlbHkgYWxsZXZpYXRlcyB0aGUgYmlnZ2VzdCBjb25jZXJuLiBga2NhbGxvY2AgcHJvdmlkZXMgemVyby1pbml0aWFsaXplZCBtZW1vcnksIHJlbW92aW5nIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBzdGFydC4KCk5leHQsIEkgc2NydXRpbml6ZWQgdGhlIGNncm91cGZzIGV4cG9zdXJlLCBzcGVjaWZpY2FsbHkgdGhlIGNyZWF0aW9uIG9mIHRob3NlIGBtZW1vcnkuY21hLiZsdDthcmVhJmd0Oy5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuJmx0O2FyZWEmZ3Q7Lm1heGAgZmlsZXMuIFRoZSBjb2RlIGxldmVyYWdlcyBgc2VxX3ByaW50ZmAgYW5kIGBzZXFfcHV0c19tZW1jZ190dW5hYmxlYCwgd2hpY2ggYXJlIHVzZWQgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCByYXcgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoYXQgdmFzdGx5IHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YgaW5mb3JtYXRpb24gbGVha2FnZSBkdWUgdG8gcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4KCkkgdGhlbiBsb29rZWQgYXQgdGhlIENNQSBjaGFyZ2UgYW5kIHVuY2hhcmdlIHBhdGhzIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vY21hLmNgLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAuIEkgY2hlY2tlZCBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuICBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIG1lbW9yeSBjaGFyZ2luZyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhbmQgdGhlIGxvZ2ljIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gTm8gZnVua3kgbWVtb3J5IG1hbmlwdWxhdGlvbiBvciBzdHJ1Y3R1cmUganVnZ2xpbmcgaGVyZSB0aGF0IHdvdWxkIG1ha2UgbWUgbmVydm91cy4gIFRoZSBjaGFyZ2UvdW5jaGFyZ2UgbG9naWMgbG9va3Mgc29saWQ7IGB0cnlfY2hhcmdlX21lbWNnYCBpcyBjYWxsZWQgYW5kIGFueSBlcnJvcnMgYXJlIGRlYWx0IHdpdGguCgpBIGtleSBwYXJ0IG9mIENNQSB1bmNoYXJnZSBpcyB0aGUgdXNhZ2Ugb2YgYGZvbGlvLSZndDttZW1jZ19kYXRhID0gMDtgLiBJIGhhdmUgdG8gZG91YmxlIGNoZWNrIHRoYXQgd2UgZGVhbCBjb3JyZWN0bHkgd2l0aCBwb3NzaWJsZSByYWNlcy4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdXNlcyBgcmN1X3JlYWRfbG9jaygpYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGlzc3Vlcy4KCkFmdGVyIGFsbCBvZiB0aGUgY2hlY2tzLCBJIGZlZWwgY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIG9yIGRhdGEgcmFjZXMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIG1haW4gcmlza3MgaGVyZSB3b3VsZCBiZSB0aGluZ3MgbGlrZSBhIG1lbW9yeSBsZWFrIChwZXJoYXBzIGluIHRoZSBDTUEgYWxsb2NhdGlvbiBvciBmcmVlaW5nIGxvZ2ljKSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGluZGV4aW5nIGBjbWFfY291bnRlcnNgIG9yIGFuIGBvYmpfY2dyb3VwYCB3aGljaCBLQVNBTiB3b3VsZCBkZXRlY3QuCgpJbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgbWVtb3J5IGFjY291bnRpbmcgdmlhIGBrY2FsbG9jYCB6ZXJvZWQgbWVtb3J5IGFuZCBjbGVhciBkYXRhIGZsb3dzLiAgVGhlIGNncm91cGZzIGV4cG9zdXJlIGlzIGNsZWFuLCBhbmQgdGhlIENNQSBjaGFyZ2UvdW5jaGFyZ2UgbG9naWMgaXMgc3RyYWlnaHRmb3J3YXJkLiAgS0FTQU4gYW5kIG90aGVyIHRvb2xzIHdvdWxkIGJlIHN1ZmZpY2llbnQuICBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzbiYjMzk7dCBzb21ldGhpbmcgSSBzZWUgYXMgbmVjZXNzYXJ5IGluIHRoaXMgY2FzZS4gTGV0JiMzOTtzIG1vdmUgdGhpcyB0byB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHRvIGFjY291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAmIzM5O3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UuIFRoZSBjaGFuZ2VzIGludm9sdmU6XG4xLiBBZGRpbmcgYGNtYV9jb3VudGVyc2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXG4yLiBBZGRpbmcgYGNtYV9kZmxfZmlsZXNgIGFycmF5IGZvciBjZ3JvdXBmcywgd2hpY2ggaXMgYWxzbyBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cbjMuIEV4cG9zaW5nIENNQSB1c2FnZSBhbmQgbGltaXRzIHZpYSBjZ3JvdXBmcyBmaWxlcyAoYG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5tYXhgKS4gVGhlc2UgZmlsZXMgdXNlIGBzZXFfcHJpbnRmYCBhbmQgYHNlcV9wdXRzX21lbWNnX3R1bmFibGVgIHRvIGZvcm1hdCBpbnRlZ2VyIHZhbHVlcywgbWVhbmluZyBubyByYXcga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXG40LiBNb2RpZnlpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgcGF0aHMgdG8gY2hhcmdlIGFuZCB1bmNoYXJnZSBtZW1vcnkgY2dyb3Vwcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIHBhdGhzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwYXNzZWQgYXJvdW5kLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBjbWFfY291bnRlcnNgLCB1c2UtYWZ0ZXItZnJlZSBvZiBgbWVtY2dgLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgdG8gYWNjb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgaW52b2x2ZTpcbjEuIEFkZGluZyBgY21hX2NvdW50ZXJzYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cbjIuIEFkZGluZyBgY21hX2RmbF9maWxlc2AgYXJyYXkgZm9yIGNncm91cGZzLCB3aGljaCBpcyBhbHNvIGFsbG9jYXRlZCB1c2luZyBga2NhbGxvY2AgKHplcm8taW5pdGlhbGl6ZWQpLlxuMy4gRXhwb3NpbmcgQ01BIHVzYWdlIGFuZCBsaW1pdHMgdmlhIGNncm91cGZzIGZpbGVzIChgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLmN1cnJlbnRgIGFuZCBgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heGApLiBUaGVzZSBmaWxlcyB1c2UgYHNlcV9wcmludGZgIGFuZCBgc2VxX3B1dHNfbWVtY2dfdHVuYWJsZWAgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLCBtZWFuaW5nIG5vIHJhdyBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjQuIE1vZGlmeWluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZSBwYXRocyB0byBjaGFyZ2UgYW5kIHVuY2hhcmdlIG1lbW9yeSBjZ3JvdXBzLiBBbGwgbG9jYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlc2UgcGF0aHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHBhc3NlZCBhcm91bmQuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGNtYV9jb3VudGVyc2AsIHVzZS1hZnRlci1mcmVlIG9mIGBtZW1jZ2AsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjozOS43NjI2NDEwMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY4OTU2NjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJETUFCVUZfSEVBUFNcIixcbiAgICBcIkRNQUJVRl9IRUFQU19DTUFcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2NtYVwiLFxuICAgIFwibWVtX2Nncm91cF91bmNoYXJnZV9jbWFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgdG8gYWNjb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCdzIG92ZXJhbGwgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgY21hX2NvdW50ZXJzYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cXG4yLiBBZGRpbmcgYGNtYV9kZmxfZmlsZXNgIGFycmF5IGZvciBjZ3JvdXBmcywgd2hpY2ggaXMgYWxzbyBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cXG4zLiBFeHBvc2luZyBDTUEgdXNhZ2UgYW5kIGxpbWl0cyB2aWEgY2dyb3VwZnMgZmlsZXMgKGBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuXFx1MDAzY2FyZWFcXHUwMDNlLm1heGApLiBUaGVzZSBmaWxlcyB1c2UgYHNlcV9wcmludGZgIGFuZCBgc2VxX3B1dHNfbWVtY2dfdHVuYWJsZWAgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLCBtZWFuaW5nIG5vIHJhdyBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG40LiBNb2RpZnlpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgcGF0aHMgdG8gY2hhcmdlIGFuZCB1bmNoYXJnZSBtZW1vcnkgY2dyb3Vwcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIHBhdGhzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwYXNzZWQgYXJvdW5kLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGNtYV9jb3VudGVyc2AsIHVzZS1hZnRlci1mcmVlIG9mIGBtZW1jZ2AsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2dyb3VwIHYyIG1vdW50IG9wdGlvbiBgbWVtb3J5X2NtYV9hY2NvdW50aW5nYCB3aGljaCBlbmFibGVzIGFjY291bnRpbmcgb2YgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAncyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gSXQgYWRkcyBuZXcgY29yZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgdG8gaGFuZGxlIHRoZSBhY2NvdW50aW5nIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENNQSBhbGxvY2F0aW9ucyAoZS5nLiwgdXNpbmcgRE1BLUJVRiBoZWFwcyBvciBodWdldGxiKSB3aGVuIHRoZSBtb3VudCBvcHRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBDTUEgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEyOjM5Ljc2MjY0ODEzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NzQ5OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTM4ZGU3NDE4MTNlYjQ3NmE5ZDUyMGNmZDA5NmNhMWEwYTE1MTg0MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxOToxMjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCBhZWQxOTVhNzFjYmYxLi4zOTg3MWE3YTA4YThkIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxcbkBAIC0yNDYsNiArMjQ2LDI2IEBAIGNncm91cCB2MiBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zLlxcbiAgICAgICAgICAgd2lsbCBub3QgYmUgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKGV2ZW4gaWYgY2dyb3VwXFxuICAgICAgICAgICB2MiBpcyByZW1vdW50ZWQgbGF0ZXIgb24pLlxcbiBcXG4rICBtZW1vcnlfY21hX2FjY291bnRpbmdcXG4rICAgICAgICBDb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCdzIG92ZXJhbGwgbWVtb3J5IHVzYWdlIGZvclxcbisgICAgICAgIHRoZSBtZW1vcnkgY29udHJvbGxlciwgYW5kIGV4cG9zZSBwZXItQ01BLWFyZWEgdXNhZ2UgY291bnRlcnMuIFRoaXNcXG4rICAgICAgICBiZWhhdmlvciBpcyBvcHQtaW4sIHNvIGFzIHRvIG5vdCBjYXVzZSByZWdyZXNzaW9uIG9uIGV4aXN0aW5nIHNldHVwcy5cXG4rXFxuKyAgICAgICAgQSBmZXcgY2F2ZWF0cyB0byBrZWVwIGluIG1pbmQ6XFxuK1xcbisgICAgICAgICogQ01BIGFyZWFzIGFyZSByZXNlcnZlZCBhdCBib290IHRpbWUsIG1lbW9yeSBpcyBvbmx5IGNoYXJnZWQgdG8gYVxcbisgICAgICAgICAgY2dyb3VwIHdoZW4gYSBDTUEgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgb24gaXRzIGJlaGFsZi5cXG4rICAgICAgICAqIENNQSBwYWdlcyBhbGxvY2F0ZWQgd2hpbGUgdGhpcyBvcHRpb24gaXMgbm90IGVuYWJsZWQgd2lsbCBub3QgYmVcXG4rICAgICAgICAgIHRyYWNrZWQgYnkgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBldmVuIGlmIGNncm91cCB2MiBpcyByZW1vdW50ZWRcXG4rICAgICAgICAgIGxhdGVyIG9uIHdpdGggdGhpcyBvcHRpb24uIENoYXJnZXMgaGFwcGVuIGF0IGFsbG9jYXRpb24uXFxuKyAgICAgICAgKiBDTUEgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgYm90aCB0byB0aGUgY2dyb3VwJ3MgbWVtb3J5IGNvdW50ZXJcXG4rICAgICAgICAgIChsaW1pdGVkIGJ5IG1lbW9yeS5tYXgpIGFuZCB0aGUgcGVyLWFyZWEgQ01BIGNvdW50ZXIgKGxpbWl0ZWQgYnlcXG4rICAgICAgICAgIG1lbW9yeS5jbWEuXFx1MDAzY2FyZWFcXHUwMDNlLm1heCkuIEhpdHRpbmcgZWl0aGVyIGxpbWl0IGNhbiBjYXVzZSBhbiBhbGxvY2F0aW9uXFxuKyAgICAgICAgICB0byBmYWlsLiBJZiBDTUEgdXNhZ2UgcHVzaGVzIHRoZSBjZ3JvdXAgb3ZlciBtZW1vcnkuaGlnaCBvclxcbisgICAgICAgICAgbWVtb3J5Lm1heCwgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG90aGVyXFxuKyAgICAgICAgICBtZW1vcnkgb25seS4gQ01BIG1lbW9yeSBjaGFyZ2VkIHRvIHRoZSBjZ3JvdXAgaXMgbm90IHJlY2xhaW1hYmxlLlxcbisgICAgICAgICAgTGltaXRzIHNob3VsZCBiZSBzaXplZCB0byBhY2NvbW1vZGF0ZSB0aGUgZXhwZWN0ZWQgQ01BIHByZXNzdXJlLlxcbitcXG4gICBwaWRzX2xvY2FsZXZlbnRzXFxuICAgICAgICAgVGhlIG9wdGlvbiByZXN0b3JlcyB2MS1saWtlIGJlaGF2aW9yIG9mIHBpZHMuZXZlbnRzOm1heCwgdGhhdCBpcyBvbmx5XFxuICAgICAgICAgbG9jYWwgKGluc2lkZSBjZ3JvdXAgcHJvcGVyKSBmb3JrIGZhaWx1cmVzIGFyZSBjb3VudGVkLiBXaXRob3V0IHRoaXNcXG5AQCAtMTkwOCw2ICsxOTI4LDIxIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXFxuIFxcdFRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGlmIHpzd2FwIGlzIGRpc2FibGVkLCBhbmQgc3dhcHBpbmdcXG4gXFx0aXMgYWxsb3dlZCB1bmxlc3MgbWVtb3J5LnN3YXAubWF4IGlzIHNldCB0byAwLlxcbiBcXG4rICBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5jdXJyZW50XFxuKyAgICAgICAgQSByZWFkLW9ubHkgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFxcdTAwM2NhcmVhXFx1MDAzZVxcbisgICAgICAgIGlzIHRoZSBDTUEgYXJlYSBuYW1lIChlLmcuIFxcXCJyZXNlcnZlZFxcXCIgZm9yIHRoZSBkZWZhdWx0IERNQSBDTUEgYXJlYSkuXFxuK1xcbisgICAgICAgIFRoZSB0b3RhbCBhbW91bnQgb2YgQ01BIG1lbW9yeSBjdXJyZW50bHkgY2hhcmdlZCB0byB0aGUgY2dyb3VwIGZvciB0aGVcXG4rICAgICAgICBnaXZlbiBDTUEgYXJlYS4gT25seSBhY2NvdW50ZWQgd2hlbiBtZW1vcnlfY21hX2FjY291bnRpbmcgaXMgZW5hYmxlZC5cXG4rXFxuKyAgbWVtb3J5LmNtYS5cXHUwMDNjYXJlYVxcdTAwM2UubWF4XFxuKyAgICAgICAgQSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLiBUaGVcXG4rICAgICAgICBkZWZhdWx0IGlzIFxcXCJtYXhcXFwiLlxcbitcXG4rICAgICAgICBDTUEgdXNhZ2UgaGFyZCBsaW1pdCBmb3IgdGhlIGdpdmVuIGFyZWEuIElmIGEgY2dyb3VwJ3MgQ01BIHVzYWdlIGZvclxcbisgICAgICAgIHRoaXMgYXJlYSBleGNlZWRzIHRoaXMgbGltaXQsIHRoZSBhbGxvY2F0aW9uIHdpbGwgZmFpbC4gT25seSBlbmZvcmNlZFxcbisgICAgICAgIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuXFxuK1xcbiAgIG1lbW9yeS5wcmVzc3VyZVxcbiBcXHRBIHJlYWQtb25seSBuZXN0ZWQta2V5ZWQgZmlsZS5cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaFxcbmluZGV4IGRlMmNkNjIzOGMyYWUuLjE1ZjNmNzExMGM1YjEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXFxuQEAgLTEyOSw2ICsxMjksMTEgQEAgZW51bSB7XFxuIFxcdCAqIEVuYWJsZSBsZWdhY3kgbG9jYWwgcGlkcy5ldmVudHMuXFxuIFxcdCAqL1xcbiBcXHRDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMgPSAoMSBcXHUwMDNjXFx1MDAzYyAyMCksXFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgY21hIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlci5cXG4rXFx0ICovXFxuK1xcdENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcgPSAoMSBcXHUwMDNjXFx1MDAzYyAyMSksXFxuIH07XFxuIFxcbiAvKiBjZnR5cGUtXFx1MDAzZWZsYWdzICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY21hLmggYi9pbmNsdWRlL2xpbnV4L2NtYS5oXFxuaW5kZXggODU1NWQzOGE5N2IxYS4uMTZlMjEzNjQyMWI3MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NtYS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jbWEuaFxcbkBAIC00OSwxMiArNDksMTIgQEAgZXh0ZXJuIGludCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGNtYSAqKnJlc19jbWEpO1xcbiBleHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcXG4gXFx0XFx0XFx0ICAgICAgYm9vbCBub193YXJuKTtcXG4tZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbitleHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7XFxuIFxcbiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBhbGlnbiwgYm9vbCBub193YXJuKTtcXG4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcXG4rYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbiBcXG4gZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCA4MTcwYmI4MDY2YTIyLi44MDFmYmRlOTQxMzdiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMzIwLDYgKzMyMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XFxuIFxcdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuIFxcbisjaWZkZWYgQ09ORklHX0NNQVxcbitcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjbWFfY291bnRlcnM7XFxuKyNlbmRpZiAvKiBDT05GSUdfQ01BICovXFxuK1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbm9kZWluZm9bXTtcXG4gfTtcXG4gXFxuQEAgLTY2Miw2ICs2NjYsMTEgQEAgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuIFxcbitpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBjbWEgKmNtYSk7XFxuK3ZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGNtYSAqY21hKTtcXG4rXFxuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4gLyoqXFxuQEAgLTExNjAsNiArMTE2OSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGNtYSAqY21hKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBjb3VudCwgc3RydWN0IGNtYSAqY21hKVxcbit7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gfVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC9jZ3JvdXAuY1xcbmluZGV4IGI1YjQ2MWQ0NDE4YjEuLjEyMTg0Zjg1YWQxMDAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Nncm91cC9jZ3JvdXAuY1xcbisrKyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcXG5AQCAtMTk4NSw2ICsxOTg1LDcgQEAgZW51bSBjZ3JvdXAyX3BhcmFtIHtcXG4gXFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90LFxcbiBcXHRPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyxcXG4gXFx0T3B0X3BpZHNfbG9jYWxldmVudHMsXFxuK1xcdE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcsXFxuIFxcdG5yX19jZ3JvdXAyX3BhcmFtc1xcbiB9O1xcbiBcXG5AQCAtMTk5NSw2ICsxOTk2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBjZ3JvdXAyX2ZzX3BhcmFtZXRlcnNbXSA9IHtcXG4gXFx0ZnNwYXJhbV9mbGFnKFxcXCJtZW1vcnlfcmVjdXJzaXZlcHJvdFxcXCIsXFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90KSxcXG4gXFx0ZnNwYXJhbV9mbGFnKFxcXCJtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXFxcIiwgT3B0X21lbW9yeV9odWdldGxiX2FjY291bnRpbmcpLFxcbiBcXHRmc3BhcmFtX2ZsYWcoXFxcInBpZHNfbG9jYWxldmVudHNcXFwiLFxcdE9wdF9waWRzX2xvY2FsZXZlbnRzKSxcXG4rXFx0ZnNwYXJhbV9mbGFnKFxcXCJtZW1vcnlfY21hX2FjY291bnRpbmdcXFwiLFxcdE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcpLFxcbiBcXHR7fVxcbiB9O1xcbiBcXG5AQCAtMjAyNyw2ICsyMDI5LDkgQEAgc3RhdGljIGludCBjZ3JvdXAyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW1cXG4gXFx0Y2FzZSBPcHRfcGlkc19sb2NhbGV2ZW50czpcXG4gXFx0XFx0Y3R4LVxcdTAwM2VmbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmc6XFxuK1xcdFxcdGN0eC1cXHUwMDNlZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG5AQCAtMjA2OCw2ICsyMDczLDExIEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Nncm91cF9yb290X2ZsYWdzKHVuc2lnbmVkIGludCByb290X2ZsYWdzKVxcbiBcXHRcXHRcXHRjZ3JwX2RmbF9yb290LmZsYWdzIHw9IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUztcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjY9IH5DR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XFxuK1xcbitcXHRcXHRpZiAocm9vdF9mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpXFxuK1xcdFxcdFxcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjY9IH5DR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTIwODUsNiArMjA5NSw4IEBAIHN0YXRpYyBpbnQgY2dyb3VwX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGtlcm5mc19yb290ICprZl9yb290XFxuIFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXFxcIik7XFxuIFxcdGlmIChjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjYgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKVxcbiBcXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCIscGlkc19sb2NhbGV2ZW50c1xcXCIpO1xcbitcXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpXFxuK1xcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixtZW1vcnlfY21hX2FjY291bnRpbmdcXFwiKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTc1MjAsNyArNzUzMiw4IEBAIHN0YXRpYyBzc2l6ZV90IGZlYXR1cmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4gXFx0XFx0XFx0XFxcIm1lbW9yeV9sb2NhbGV2ZW50c1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwibWVtb3J5X3JlY3Vyc2l2ZXByb3RcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIm1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcXFxcblxcXCJcXG4tXFx0XFx0XFx0XFxcInBpZHNfbG9jYWxldmVudHNcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXFwicGlkc19sb2NhbGV2ZW50c1xcXFxuXFxcIlxcbitcXHRcXHRcXHRcXFwibWVtb3J5X2NtYV9hY2NvdW50aW5nXFxcXG5cXFwiKTtcXG4gfVxcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNncm91cF9mZWF0dXJlc19hdHRyID0gX19BVFRSX1JPKGZlYXR1cmVzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmNcXG5pbmRleCBhMTNjZTQ5OTliMzlmLi4wM2ViM2FjYmQzYzc1IDEwMDY0NFxcbi0tLSBhL21tL2NtYS5jXFxuKysrIGIvbW0vY21hLmNcXG5AQCAtMjUsNyArMjUsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbG9nMi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY21hLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9oaWdobWVtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva21lbWxlYWsuaFxcdTAwM2VcXG5AQCAtOTA1LDYgKzkwNCwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsXFxuIFxcdFxcdGNtYV9kZWJ1Z19zaG93X2FyZWFzKGNtYSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwYWdlIFxcdTAwMjZcXHUwMDI2IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShwYWdlLCBjb3VudCwgY21hKSkge1xcbitcXHRcXHRmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcXG4rXFx0XFx0Y21hX2NsZWFyX2JpdG1hcChjbWEsIFxcdTAwMjZjbWEtXFx1MDAzZXJhbmdlc1tyXSwgcGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcXG4rXFx0XFx0cGFnZSA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuIFxcdHByX2RlYnVnKFxcXCIlcygpOiByZXR1cm5lZCAlcFxcXFxuXFxcIiwgX19mdW5jX18sIHBhZ2UpO1xcbiBcXHR0cmFjZV9jbWFfYWxsb2NfZmluaXNoKG5hbWUsIHBhZ2UgPyBwYWdlX3RvX3BmbihwYWdlKSA6IDAsXFxuIFxcdFxcdFxcdCAgICAgICBwYWdlLCBjb3VudCwgYWxpZ24sIHJldCk7XFxuQEAgLTk5MiwxMiArOTk3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX21lbXJhbmdlICpmaW5kX2NtYV9tZW1yYW5nZShzdHJ1Y3QgY21hICpjbWEsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxcbi1cXHRcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2VzKTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCIlcyhwYWdlICVwLCBjb3VudCAlbHUpXFxcXG5cXFwiLCBfX2Z1bmNfXywgKHZvaWQgKilwYWdlcywgY291bnQpO1xcbiBcXG4rXFx0bWVtX2Nncm91cF91bmNoYXJnZV9jbWEocGFnZXMsIGNvdW50LCBjbWEpO1xcbiBcXHRmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGZuLCBjb3VudCk7XFxuIFxcdGNtYV9jbGVhcl9iaXRtYXAoY21hLCBjbXIsIHBmbiwgY291bnQpO1xcbiBcXHRjbWFfc3lzZnNfYWNjb3VudF9yZWxlYXNlX3BhZ2VzKGNtYSwgY291bnQpO1xcbkBAIC0xMDE0LDcgKzEwMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2NtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcixcXG4gICogSXQgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91cyBhcmVhIGFuZFxcbiAgKiB0cnVlIG90aGVyd2lzZS5cXG4gICovXFxuLWJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuK2Jvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuIFxcdFxcdCB1bnNpZ25lZCBsb25nIGNvdW50KVxcbiB7XFxuIFxcdHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcjtcXG5AQCAtMTAzNyw3ICsxMDQzLDcgQEAgYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChjbWFfcmVsZWFzZSk7XFxuIFxcbi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcXG4rYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpXFxuIHtcXG4gXFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yO1xcbmRpZmYgLS1naXQgYS9tbS9jbWEuaCBiL21tL2NtYS5oXFxuaW5kZXggYzcwMTgwYzM2NTU5Yy4uNTJiN2Q0YmU1MTcwNyAxMDA2NDRcXG4tLS0gYS9tbS9jbWEuaFxcbisrKyBiL21tL2NtYS5oXFxuQEAgLTQsNiArNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva29iamVjdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY21hLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgY21hX2tvYmplY3Qge1xcbiBcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbkBAIC04MCw2ICs4MSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9tYXhubyhzdHJ1Y3QgY21hICpjbWEsXFxuIFxcdHJldHVybiBjbXItXFx1MDAzZWNvdW50IFxcdTAwM2VcXHUwMDNlIGNtYS1cXHUwMDNlb3JkZXJfcGVyX2JpdDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgY21hX2FyZWFfaW5kZXgoY29uc3Qgc3RydWN0IGNtYSAqY21hKVxcbit7XFxuK1xcdHJldHVybiBjbWEgLSBjbWFfYXJlYXM7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfQ01BX1NZU0ZTXFxuIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfc3VjY2Vzc19wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiB2b2lkIGNtYV9zeXNmc19hY2NvdW50X2ZhaWxfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5kaWZmIC0tZ2l0IGEvbW0vY21hX2RlYnVnLmMgYi9tbS9jbWFfZGVidWcuY1xcbmluZGV4IDUyM2JhNGEwZjlmNzYuLjcwYmZjNmZiZWVjYTMgMTAwNjQ0XFxuLS0tIGEvbW0vY21hX2RlYnVnLmNcXG4rKysgYi9tbS9jbWFfZGVidWcuY1xcbkBAIC03LDcgKzcsNiBAQFxcbiBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9tbS9jbWFfc3lzZnMuYyBiL21tL2NtYV9zeXNmcy5jXFxuaW5kZXggZDViZjc5MmM2MjQ1YS4uZTRlZTM1YmM2ODJiYSAxMDA2NDRcXG4tLS0gYS9tbS9jbWFfc3lzZnMuY1xcbisrKyBiL21tL2NtYV9zeXNmcy5jXFxuQEAgLTUsNyArNSw2IEBAXFxuICAqIENvcHlyaWdodCAoYykgMjAyMSBNaW5jaGFuIEtpbSBcXHUwMDNjbWluY2hhbkBrZXJuZWwub3JnXFx1MDAzZVxcbiAgKi9cXG4gXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZi4uZjI4ZDYxMGE1OWNlNyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNjgsNiArNjgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJzbGFiLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtZW1jb250cm9sLXYxLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjbWEuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuIFxcbkBAIC00MDYyLDYgKzQwNjMsOSBAQCBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aW50IG5vZGU7XFxuIFxcbisjaWZkZWYgQ09ORklHX0NNQVxcbitcXHRrZnJlZShtZW1jZy1cXHUwMDNlY21hX2NvdW50ZXJzKTtcXG4rI2VuZGlmXFxuIFxcdGZvcl9lYWNoX25vZGUobm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bbm9kZV07XFxuIFxcdFxcdGlmICghcG4pXFxuQEAgLTQxNDQsNiArNDE0OCwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKVxcbiBcXHRcXHRtZW1jZy1cXHUwMDNlY2d3Yl9mcm5baV0uZG9uZSA9XFxuIFxcdFxcdFxcdF9fV0JfQ09NUExFVElPTl9JTklUKFxcdTAwMjZtZW1jZ19jZ3diX2Zybl93YWl0cSk7XFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0NNQVxcbitcXHRpZiAoY21hX2FyZWFfY291bnQpIHtcXG4rXFx0XFx0bWVtY2ctXFx1MDAzZWNtYV9jb3VudGVycyA9IGtjYWxsb2MoY21hX2FyZWFfY291bnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZV9jb3VudGVyKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghbWVtY2ctXFx1MDAzZWNtYV9jb3VudGVycylcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHR9XFxuICNlbmRpZlxcbiBcXHRscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpO1xcbiBcXHRyZXR1cm4gbWVtY2c7XFxuQEAgLTQxNTksNiArNDE3Miw3IEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NzcyhwYXJlbnRfY3NzKTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xcbiBcXHRib29sIG1lbWNnX29uX2RmbCA9IGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxuK1xcdHVuc2lnbmVkIGludCBfX21heWJlX3VudXNlZCBpO1xcbiBcXG4gXFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpO1xcbiBcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTtcXG5AQCAtNDE3MSw2ICs0MTg1LDEyIEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbiAjaWZkZWYgQ09ORklHX1pTV0FQXFxuIFxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbiBcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2V6c3dhcF93cml0ZWJhY2ssIHRydWUpO1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19DTUFcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNtYV9hcmVhX2NvdW50OyArK2kpXFxuK1xcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY21hX2NvdW50ZXJzW2ldLFxcbitcXHRcXHRcXHRcXHQgIHBhcmVudCA/IFxcdTAwMjZwYXJlbnQtXFx1MDAzZWNtYV9jb3VudGVyc1tpXSA6IE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgZmFsc2UpO1xcbiAjZW5kaWZcXG4gXFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuIFxcdGlmIChwYXJlbnQpIHtcXG5AQCAtNTIxMyw2ICs1MjMzLDEwMiBAQCBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0NNQVxcbitzdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19jbWEodm9pZClcXG4re1xcbitcXHRyZXR1cm4gY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkc7XFxuK31cXG4rXFxuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGNtYSAqY21hKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsICpmYWlsO1xcbitcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGludCByYyA9IDA7XFxuK1xcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19jbWEoKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xcbitcXHRpZiAoIW1lbWNnKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbitcXHRcXHRnb3RvIGNncm91cF9wdXQ7XFxuK1xcbitcXHRyYyA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIEdGUF9LRVJORUwsIGNvdW50KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGNncm91cF9wdXQ7XFxuK1xcbitcXHRjb3VudGVyID0gXFx1MDAyNm1lbWNnLVxcdTAwM2VjbWFfY291bnRlcnNbY21hX2FyZWFfaW5kZXgoY21hKV07XFxuK1xcdGlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoY291bnRlciwgY291bnQsIFxcdTAwMjZmYWlsKSkge1xcbitcXHRcXHRyZWZpbGxfc3RvY2sobWVtY2csIGNvdW50KTtcXG4rXFx0XFx0cmMgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGNncm91cF9wdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZyk7XFxuK1xcdGlmIChmb2xpb190ZXN0X2xhcmdlKHBhZ2VfZm9saW8ocGFnZSkpKSB7XFxuK1xcdFxcdGNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlKSwgb2JqY2cpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRvYmpfY2dyb3VwX2dldF9tYW55KG9iamNnLCBjb3VudCAtIDEpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKylcXG4rXFx0XFx0XFx0Y29tbWl0X2NoYXJnZShwYWdlX2ZvbGlvKHBhZ2UgKyBpKSwgb2JqY2cpO1xcbitcXHR9XFxuK1xcbitjZ3JvdXBfcHV0OlxcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgY21hICpjbWEpXFxuK3tcXG4rXFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEdldCB0aGUgb2JqY2cgZnJvbSB0aGUgZmlyc3QgcGFnZS5cXG4rXFx0ICogcGFnZV9vYmpjZygpIGV4cGVjdHMgTUVNQ0dfREFUQV9LTUVNLCBidXQgZm9yIENNQSB3ZSB1c2VkXFxuK1xcdCAqIGNvbW1pdF9jaGFyZ2UoKSB3aGljaCBzZXRzIGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gb2JqY2dcXG4rXFx0ICogd2l0aG91dCBmbGFncywgc28gd2UgY2Fubm90IHVzZSBpdC5cXG4rXFx0ICovXFxuK1xcdG9iamNnID0gZm9saW9fb2JqY2cocGFnZV9mb2xpbyhwYWdlKSk7XFxuK1xcdGlmICghb2JqY2cpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4rXFxuK1xcdGNvdW50ZXIgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWNtYV9jb3VudGVyc1tjbWFfYXJlYV9pbmRleChjbWEpXTtcXG4rXFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKGNvdW50ZXIsIGNvdW50KTtcXG4rXFxuK1xcdG1lbWNnX3VuY2hhcmdlKG1lbWNnLCBjb3VudCk7XFxuK1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gMDtcXG4rXFx0XFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7ICsraSkge1xcbitcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSArIGkpO1xcbitcXHRcXHRcXHRmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuK1xcdFxcdFxcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19DTUEgKi9cXG4rXFxuIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIge1xcbiBcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xcbkBAIC02MDY2LDMgKzYxODIsOTIgQEAgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdFxcdEsoYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeS5jaGlsZHJlbl9taW5fdXNhZ2UpKSxcXG4gXFx0XFx0SyhhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LmNoaWxkcmVuX2xvd191c2FnZSkpKTtcXG4gfVxcbitcXG4rI2lmZGVmIENPTkZJR19DTUFcXG4rc3RhdGljIGludCBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcXG4rXFx0aW50IGlkeCA9IHNlcV9jZnQobSktXFx1MDAzZXByaXZhdGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY3VyID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VjbWFfY291bnRlcnNbaWR4XSk7XFxuK1xcbitcXHRzZXFfcHJpbnRmKG0sIFxcXCIlbHVcXFxcblxcXCIsIGN1ciAqIFBBR0VfU0laRSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtZW1vcnlfY21hX21heF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xcbitcXHRpbnQgaWR4ID0gc2VxX2NmdChtKS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZWNtYV9jb3VudGVyc1tpZHhdLm1heCk7XFxuK1xcbitcXHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLCBtYXgpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBtZW1vcnlfY21hX21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG4rXFx0aW50IGlkeCA9IG9mX2NmdChvZiktXFx1MDAzZXByaXZhdGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWF4O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbitcXHRyYyA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsIFxcXCJtYXhcXFwiLCBcXHUwMDI2bWF4KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHR4Y2hnKFxcdTAwMjZtZW1jZy1cXHUwMDNlY21hX2NvdW50ZXJzW2lkeF0ubWF4LCBtYXgpO1xcbitcXG4rXFx0cmV0dXJuIG5ieXRlcztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBjZnR5cGUgY21hX2RmbF90bXBsW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiY3VycmVudFxcXCIsXFxuK1xcdFxcdC5zZXFfc2hvdyA9IG1lbW9yeV9jbWFfY3VycmVudF9zaG93LFxcbitcXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwibWF4XFxcIixcXG4rXFx0XFx0LnNlcV9zaG93ID0gbWVtb3J5X2NtYV9tYXhfc2hvdyxcXG4rXFx0XFx0LndyaXRlID0gbWVtb3J5X2NtYV9tYXhfd3JpdGUsXFxuK1xcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG4rXFx0fSxcXG4rXFx0eyB9XFxuK307XFxuKyNkZWZpbmUgQ01BX0RGTF9UTVBMX1NJWkVcXHQoQVJSQVlfU0laRShjbWFfZGZsX3RtcGwpIC0gMSlcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlICpjbWFfZGZsX2ZpbGVzO1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9jbWFfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBjZnR5cGUgKmNmdDtcXG4rXFx0dW5zaWduZWQgaW50IGksIGo7XFxuK1xcdGludCBjb3VudDtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIWNtYV9hcmVhX2NvdW50KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNvdW50ID0gY21hX2FyZWFfY291bnQgKiBDTUFfREZMX1RNUExfU0laRTtcXG4rXFx0Y21hX2RmbF9maWxlcyA9IGtjYWxsb2MoY291bnQgKyAxLCBzaXplb2YoKmNtYV9kZmxfdG1wbCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWNtYV9kZmxfZmlsZXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNtYV9hcmVhX2NvdW50OyArK2kpXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBDTUFfREZMX1RNUExfU0laRTsgKytqKSB7XFxuK1xcdFxcdFxcdGNmdCA9IFxcdTAwMjZjbWFfZGZsX2ZpbGVzW2kgKiBDTUFfREZMX1RNUExfU0laRSArIGpdO1xcbitcXHRcXHRcXHQqY2Z0ID0gY21hX2RmbF90bXBsW2pdO1xcbitcXHRcXHRcXHRzbnByaW50ZihjZnQtXFx1MDAzZW5hbWUsIE1BWF9DRlRZUEVfTkFNRSwgXFxcImNtYS4lcy4lc1xcXCIsXFxuK1xcdFxcdFxcdFxcdCBjbWFfZ2V0X25hbWUoXFx1MDAyNmNtYV9hcmVhc1tpXSksXFxuK1xcdFxcdFxcdFxcdCBjbWFfZGZsX3RtcGxbal0ubmFtZSk7XFxuK1xcdFxcdFxcdGNmdC1cXHUwMDNlcHJpdmF0ZSA9IGk7IC8qIGNtYSBhcmVhIGluZGV4IGZvciBjb3VudGVycyBpbiBjYWxsYmFja3MuICovXFxuK1xcdFxcdFxcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KFxcdTAwMjZjZnQtXFx1MDAzZWxvY2tkZXBfa2V5KTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIGNtYV9kZmxfZmlsZXMpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK3N1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX2NtYV9pbml0KTtcXG4rI2VuZGlmIC8qIENPTkZJR19DTUEgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxcbmluZGV4IDk1MmU0NDQ4YmYwNzAuLmI5YTQyOThkNDk0NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxcbkBAIC0xLDUgKzEsNiBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gdGVzdF9jb3JlXFxuK3Rlc3RfY21hX21lbWNnXFxuIHRlc3RfY3B1XFxuIHRlc3RfY3B1c2V0XFxuIHRlc3RfZnJlZXplclxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcXG5pbmRleCBlMDE1ODRjMjE4OWFjLi42MDFkOTMwMTYwYTQyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxcbkBAIC04LDYgKzgsNyBAQCBURVNUX1BST0dTICAgICA6PSB0ZXN0X3N0cmVzcy5zaCB0ZXN0X2NwdXNldF9wcnMuc2ggdGVzdF9jcHVzZXRfdjFfaHAuc2hcXG4gVEVTVF9HRU5fRklMRVMgOj0gd2FpdF9pbm90aWZ5XFxuICMgS2VlcCB0aGUgbGlzdHMgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkXFxuIFRFU1RfR0VOX1BST0dTICA9IHRlc3RfY29yZVxcbitURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NtYV9tZW1jZ1xcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NwdVxcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NwdXNldFxcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2ZyZWV6ZXJcXG5AQCAtMjQsNiArMjUsNyBAQCBpbmNsdWRlIC4uL2xpYi5ta1xcbiBpbmNsdWRlIGxpYi9saWJjZ3JvdXAubWtcXG4gXFxuICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pXFxuKyQoT1VUUFVUKS90ZXN0X2NtYV9tZW1jZzogJChMSUJDR1JPVVBfTylcXG4gJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKVxcbiAkKE9VVFBVVCkvdGVzdF9jcHVzZXQ6ICQoTElCQ0dST1VQX08pXFxuICQoT1VUUFVUKS90ZXN0X2ZyZWV6ZXI6ICQoTElCQ0dST1VQX08pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXFxuaW5kZXggMzlmOTc5NjkwZGQzYi4uMWM5MDM0MDE3NjgyZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xcbkBAIC00LDMgKzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbiBDT05GSUdfQ0dST1VQX1NDSEVEPXlcXG4gQ09ORklHX01FTUNHPXlcXG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XFxuK0NPTkZJR19DTUE9eVxcbitDT05GSUdfRE1BX0NNQT15XFxuK0NPTkZJR19ETUFCVUZfSEVBUFM9eVxcbitDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XFxuK0NPTkZJR19IVUdFVExCRlM9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YmQ0MWQ5YTYxNzdkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jXFxuQEAgLTAsMCArMSw0MDIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZGlyZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWhlYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjZ3JvdXBfdXRpbC5oXFxcIlxcbitcXG4rI2RlZmluZSBDTUFfSEVBUF9ERUZBVUxUX1BBVEhcXHRcXFwiL2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb25cXFwiXFxuKyNkZWZpbmUgQ01BX1JFU0VSVkVEX0NVUlJFTlRcXHRcXFwibWVtb3J5LmNtYS5yZXNlcnZlZC5jdXJyZW50XFxcIlxcbisjZGVmaW5lIENNQV9SRVNFUlZFRF9NQVhcXHRcXFwibWVtb3J5LmNtYS5yZXNlcnZlZC5tYXhcXFwiXFxuK1xcbisjZGVmaW5lIEhVR0VUTEJfQ01BX0NVUlJFTlRcXHRcXFwibWVtb3J5LmNtYS5odWdldGxiMC5jdXJyZW50XFxcIlxcbisjZGVmaW5lIEhVR0VUTEJfQ01BX01BWFxcdFxcXCJtZW1vcnkuY21hLmh1Z2V0bGIwLm1heFxcXCJcXG4rI2RlZmluZSBIVUdFUEFHRVNfRElSXFx0XFx0XFxcIi9zeXMva2VybmVsL21tL2h1Z2VwYWdlc1xcXCJcXG4rXFxuK3N0YXRpYyBpbnQgY21hX2hlYXBfYWxsb2MoaW50IGhlYXBfZmQsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfaGVhcF9hbGxvY2F0aW9uX2RhdGEgZGF0YSA9IHtcXG4rXFx0XFx0LmxlbiA9IHNpemUsXFxuK1xcdFxcdC5mZF9mbGFncyA9IE9fUkRXUiB8IE9fQ0xPRVhFQyxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChpb2N0bChoZWFwX2ZkLCBETUFfSEVBUF9JT0NUTF9BTExPQywgXFx1MDAyNmRhdGEpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0dXJuIGRhdGEuZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpXFxuK3tcXG4rXFx0aW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7XFxuK1xcdGludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwO1xcbitcXHRzaXplX3Qgc2l6ZSA9IDRVTCBcXHUwMDNjXFx1MDAzYyAyMDtcXG4rXFx0bG9uZyBiZWZvcmUsIGFmdGVyO1xcbitcXHRjaGFyICpjZztcXG4rXFxuK1xcdGNnID0gY2dfbmFtZShyb290LCBcXFwibWVtY2dfY21hX2NoYXJnZVxcXCIpO1xcbitcXHRpZiAoIWNnKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoY2dfY3JlYXRlKGNnKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGluX2NnID0gMTtcXG4rXFxuK1xcdGhlYXBfZmQgPSBvcGVuKENNQV9IRUFQX0RFRkFVTFRfUEFUSCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xcbitcXHRpZiAoaGVhcF9mZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpO1xcbitcXG4rXFx0YnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7XFxuK1xcdGlmIChidWZfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjYW5ub3QgYWxsb2NhdGUgaW4gQ01BIGhlYXAgKCVtKVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTtcXG4rXFxuK1xcdGlmIChhZnRlciAtIGJlZm9yZSBcXHUwMDNjIChsb25nKXNpemUpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxuK1xcdFxcdFxcdFxcXCJpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIGNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGJlZm9yZSwgYWZ0ZXIpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGNsb3NlKGJ1Zl9mZCk7XFxuK1xcdGJ1Zl9mZCA9IC0xO1xcbitcXG4rXFx0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTtcXG4rXFx0aWYgKCF2YWx1ZXNfY2xvc2UoYmVmb3JlLCBhZnRlciwgMykpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxuK1xcdFxcdFxcdFxcXCJpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIHVuY2hhcmdlOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0YmVmb3JlLCBhZnRlcik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBLU0ZUX1BBU1M7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAoYnVmX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGJ1Zl9mZCk7XFxuK1xcdGlmIChoZWFwX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGhlYXBfZmQpO1xcbitcXG4rXFx0aWYgKGluX2NnKVxcbitcXHRcXHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xcbitcXHRjZ19kZXN0cm95KGNnKTtcXG4rXFx0ZnJlZShjZyk7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdClcXG4re1xcbitcXHRpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTtcXG4rXFx0aW50IHJjID0gS1NGVF9GQUlMLCBpbl9jZyA9IDA7XFxuK1xcdHNpemVfdCBzaXplID0gNFVMIFxcdTAwM2NcXHUwMDNjIDIwO1xcbitcXHRjaGFyICpjZztcXG4rXFxuK1xcdGNnID0gY2dfbmFtZShyb290LCBcXFwibWVtY2dfY21hX2xpbWl0XFxcIik7XFxuK1xcdGlmICghY2cpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmIChjZ19jcmVhdGUoY2cpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aW5fY2cgPSAxO1xcbitcXG4rXFx0aWYgKGNnX3dyaXRlKGNnLCBDTUFfUkVTRVJWRURfTUFYLCBcXFwiMk1cXFwiKSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IHNldCBDTUEgbGltaXQgKCVtKVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0aGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdGlmIChoZWFwX2ZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0YnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7XFxuK1xcdGlmIChidWZfZmQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiQ01BIGxpbWl0IG5vdCBlbmZvcmNlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRjbG9zZShidWZfZmQpO1xcbitcXHR9IGVsc2VcXG4rXFx0XFx0cmMgPSBLU0ZUX1BBU1M7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAoaGVhcF9mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShoZWFwX2ZkKTtcXG4rXFxuK1xcdGlmIChpbl9jZylcXG4rXFx0XFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcXG4rXFx0Y2dfZGVzdHJveShjZyk7XFxuK1xcdGZyZWUoY2cpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYih2b2lkKVxcbit7XFxuK1xcdERJUiAqZGlyO1xcbitcXHRzdHJ1Y3QgZGlyZW50ICplbnRyeTtcXG4rXFx0bG9uZyBtYXhfc2l6ZSA9IDA7XFxuK1xcbitcXHRkaXIgPSBvcGVuZGlyKEhVR0VQQUdFU19ESVIpO1xcbitcXHRpZiAoIWRpcilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0d2hpbGUgKChlbnRyeSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkge1xcbitcXHRcXHRsb25nIHNpemU7XFxuK1xcbitcXHRcXHRpZiAoc3NjYW5mKGVudHJ5LVxcdTAwM2VkX25hbWUsIFxcXCJodWdlcGFnZXMtJWxka0JcXFwiLCBcXHUwMDI2c2l6ZSkgPT0gMSkge1xcbitcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIG1heF9zaXplKVxcbitcXHRcXHRcXHRcXHRtYXhfc2l6ZSA9IHNpemU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRjbG9zZWRpcihkaXIpO1xcbitcXG4rXFx0cmV0dXJuIG1heF9zaXplIFxcdTAwM2UgMCA/IG1heF9zaXplIDogLTE7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIHJlYWRfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdEZJTEUgKmY7XFxuK1xcdGxvbmcgdmFsID0gLTE7XFxuK1xcbitcXHRmID0gZm9wZW4ocGF0aCwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmIChmc2NhbmYoZiwgXFxcIiVsZFxcXCIsIFxcdTAwMjZ2YWwpICE9IDEpXFxuK1xcdFxcdHZhbCA9IC0xO1xcbitcXHRmY2xvc2UoZik7XFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoLCBsb25nIHZhbClcXG4re1xcbitcXHRGSUxFICpmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRmID0gZm9wZW4ocGF0aCwgXFxcIndcXFwiKTtcXG4rXFx0aWYgKCFmKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJjID0gZnByaW50ZihmLCBcXFwiJWxkXFxcIiwgdmFsKTtcXG4rXFx0ZmNsb3NlKGYpO1xcbitcXHRyZXR1cm4gcmMgXFx1MDAzYyAwID8gLTEgOiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpXFxuK3tcXG4rXFx0aW50IHJjID0gS1NGVF9TS0lQLCBpbl9jZyA9IDA7XFxuK1xcdGxvbmcgaHBhZ2Vfc2l6ZV9rYiwgaHBhZ2Vfc2l6ZV9ieXRlcztcXG4rXFx0bG9uZyBvcmlnX25yID0gLTEsIG5ld19uciwgYmVmb3JlLCBhZnRlcjtcXG4rXFx0Y2hhciBucl9wYXRoW1BBVEhfTUFYXTtcXG4rXFx0Y2hhciAqY2c7XFxuK1xcbitcXHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcXG4rXFx0aWYgKGhwYWdlX3NpemVfa2IgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJubyBodWdlcGFnZSBzaXplIGZvdW5kXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIEtTRlRfU0tJUDtcXG4rXFx0fVxcbitcXHRocGFnZV9zaXplX2J5dGVzID0gaHBhZ2Vfc2l6ZV9rYiAqIDEwMjQ7XFxuK1xcbitcXHRzbnByaW50Zihucl9wYXRoLCBzaXplb2YobnJfcGF0aCksXFxuK1xcdFxcdCBIVUdFUEFHRVNfRElSIFxcXCIvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlc1xcXCIsIGhwYWdlX3NpemVfa2IpO1xcbitcXG4rXFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFxcXCJtZW1jZ19odWdldGxiX2NtYV9jaGFyZ2VcXFwiKTtcXG4rXFx0aWYgKCFjZylcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKGNnX2NyZWF0ZShjZykpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRpbl9jZyA9IDE7XFxuK1xcbitcXHRpZiAoY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImh1Z2V0bGIgQ01BIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdG9yaWdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7XFxuK1xcdGlmIChvcmlnX25yIFxcdTAwM2MgMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IHJlYWQgJXNcXFxcblxcXCIsIG5yX3BhdGgpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XFxuK1xcbitcXHRpZiAod3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICsgMSkpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhbm5vdCB3cml0ZSAlc1xcXFxuXFxcIiwgbnJfcGF0aCk7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0bmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xcbitcXHRpZiAobmV3X25yIFxcdTAwM2M9IG9yaWdfbnIpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBhIGh1Z2VwYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IEtTRlRfRkFJTDtcXG4rXFx0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpO1xcbitcXG4rXFx0aWYgKGFmdGVyIC0gYmVmb3JlIFxcdTAwM2MgaHBhZ2Vfc2l6ZV9ieXRlcykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXG4rXFx0XFx0XFx0XFxcImh1Z2V0bGIgQ01BIGNvdW50ZXIgbm90IGNoYXJnZWQ6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkIGV4cGVjdGVkICslbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGJlZm9yZSwgYWZ0ZXIsIGhwYWdlX3NpemVfYnl0ZXMpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7XFxuK1xcbitcXHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XFxuK1xcdGlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcbitcXHRcXHRcXHRcXFwiaHVnZXRsYiBDTUEgY291bnRlciBub3QgdW5jaGFyZ2VkOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0YmVmb3JlLCBhZnRlcik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBLU0ZUX1BBU1M7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAob3JpZ19uciBcXHUwMDNlPSAwKVxcbitcXHRcXHR3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpO1xcbitcXG4rXFx0aWYgKGluX2NnKVxcbitcXHRcXHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xcbitcXHRjZ19kZXN0cm95KGNnKTtcXG4rXFx0ZnJlZShjZyk7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9odWdldGxiX2NtYV9saW1pdChjb25zdCBjaGFyICpyb290KVxcbit7XFxuK1xcdGludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwO1xcbitcXHRsb25nIGhwYWdlX3NpemVfa2I7XFxuK1xcdGxvbmcgb3JpZ19uciwgbmV3X25yO1xcbitcXHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xcbitcXHRjaGFyICpjZztcXG4rXFxuK1xcdGhwYWdlX3NpemVfa2IgPSBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYigpO1xcbitcXHRpZiAoaHBhZ2Vfc2l6ZV9rYiBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIm5vIGh1Z2VwYWdlIHNpemUgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gS1NGVF9TS0lQO1xcbitcXHR9XFxuK1xcbitcXHRzbnByaW50Zihucl9wYXRoLCBzaXplb2YobnJfcGF0aCksXFxuK1xcdFxcdCBIVUdFUEFHRVNfRElSIFxcXCIvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlc1xcXCIsIGhwYWdlX3NpemVfa2IpO1xcbitcXG4rXFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFxcXCJtZW1jZ19odWdldGxiX2NtYV9saW1pdFxcXCIpO1xcbitcXHRpZiAoIWNnKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoY2dfY3JlYXRlKGNnKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGluX2NnID0gMTtcXG4rXFxuK1xcdGlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX01BWCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY2dfd3JpdGUoY2csIEhVR0VUTEJfQ01BX01BWCwgXFxcIjBcXFwiKSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IHNldCBodWdldGxiIENNQSBsaW1pdFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0b3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcXG4rXFx0aWYgKG9yaWdfbnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjYW5ub3QgcmVhZCAlc1xcXFxuXFxcIiwgbnJfcGF0aCk7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICsgMSk7XFxuK1xcdG5ld19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcXG4rXFxuK1xcdHJjID0gS1NGVF9GQUlMO1xcbitcXHRpZiAobmV3X25yIFxcdTAwM2Ugb3JpZ19ucikge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiaHVnZXRsYiBDTUEgbGltaXQgbm90IGVuZm9yY2VkXFxcXG5cXFwiKTtcXG4rXFx0XFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSBLU0ZUX1BBU1M7XFxuK1xcdH1cXG4rXFxuK2NsZWFudXA6XFxuK1xcdGlmIChpbl9jZylcXG4rXFx0XFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcXG4rXFx0Y2dfZGVzdHJveShjZyk7XFxuK1xcdGZyZWUoY2cpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisjZGVmaW5lIFQoeCkgeyB4LCAjeCB9XFxuK3N0cnVjdCBjbWFfbWVtY2dfdGVzdHMge1xcbitcXHRpbnQgKCpmbikoY29uc3QgY2hhciAqcm9vdCk7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK30gdGVzdHNbXSA9IHtcXG4rXFx0VCh0ZXN0X2NtYV9jaGFyZ2UpLFxcbitcXHRUKHRlc3RfY21hX2xpbWl0KSxcXG4rXFx0VCh0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZSksXFxuK1xcdFQodGVzdF9odWdldGxiX2NtYV9saW1pdCksXFxuK307XFxuKyN1bmRlZiBUXFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbit7XFxuK1xcdGNoYXIgcm9vdFtQQVRIX01BWF07XFxuK1xcdGludCBoYXNfbWVtb3J5X2NtYV9hY2MsIGk7XFxuK1xcbitcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTtcXG4rXFxuK1xcdGhhc19tZW1vcnlfY21hX2FjYyA9IHByb2NfbW91bnRfY29udGFpbnMoXFxcIm1lbW9yeV9jbWFfYWNjb3VudGluZ1xcXCIpO1xcbitcXHRpZiAoaGFzX21lbW9yeV9jbWFfYWNjIFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcImNhbm5vdCBxdWVyeSBjZ3JvdXAgbW91bnQgb3B0aW9uLlxcXFxuXFxcIik7XFxuK1xcdGVsc2UgaWYgKCFoYXNfbWVtb3J5X2NtYV9hY2MpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJDTUEgYWNjb3VudGluZyBpcyBkaXNhYmxlZC5cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJjZ3JvdXBmcyBpcyBub3QgYXZhaWxhYmxlLlxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgXFxcImNncm91cC5jb250cm9sbGVyc1xcXCIsIFxcXCJtZW1vcnlcXFwiKSlcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIm1lbW9yeSBjb250cm9sbGVyIGlzIG5vdCBhdmFpbGFibGUgKENPTkZJR19DR1JPVVBfTUVNQ0c/KVxcXFxuXFxcIik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7ICsraSkge1xcbitcXHRcXHRzd2l0Y2ggKHRlc3RzW2ldLmZuKHJvb3QpKSB7XFxuK1xcdFxcdGNhc2UgS1NGVF9QQVNTOlxcbitcXHRcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcIiVzXFxcXG5cXFwiLCB0ZXN0c1tpXS5uYW1lKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgS1NGVF9TS0lQOlxcbitcXHRcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzXFxcXG5cXFwiLCB0ZXN0c1tpXS5uYW1lKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcXFwiJXNcXFxcblxcXCIsIHRlc3RzW2ldLm5hbWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUzNGE5NWVmNWUwNzdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaFxcbkBAIC0wLDAgKzEsMTk3IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIENvcHlyaWdodCAoYykgMjAyNiBSZWQgSGF0LCBJbmMuXFxuKyNcXG4rIyBSdW4gY2dyb3VwIG1lbW9yeSBjb250cm9sbGVyIHNlbGZ0ZXN0cyBpbnNpZGUgYSB2aXJ0bWUtbmcgVk1cXG4rIyBEZXBlbmRlbmNpZXM6XFxuKyNcXHRcXHQqIHZpcnRtZS1uZ1xcbisjXFx0XFx0KiBidXN5Ym94LXN0YXRpYyAodXNlZCBieSB2aXJ0bWUtbmcpXFxuKyNcXHRcXHQqIHFlbXVcXHQodXNlZCBieSB2aXJ0bWUtbmcpXFxuK1xcbitzZXQgLWV1byBwaXBlZmFpbFxcbitcXG4rcmVhZG9ubHkgU0NSSVBUX0RJUj1cXFwiJChjZCAtUCAtLSBcXFwiJChkaXJuYW1lIC0tIFxcXCIke0JBU0hfU09VUkNFWzBdfVxcXCIpXFxcIiBcXHUwMDI2XFx1MDAyNiBwd2QgLVApXFxcIlxcbityZWFkb25seSBLRVJORUxfQ0hFQ0tPVVQ9XFxcIiQocmVhbHBhdGggXFxcIiR7U0NSSVBUX0RJUn1cXFwiLy4uLy4uLy4uLy4uLylcXFwiXFxuK1xcbitzb3VyY2UgXFxcIiR7U0NSSVBUX0RJUn1cXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK3JlYWRvbmx5IFNTSF9HVUVTVF9QT1JUPVxcXCIke1NTSF9HVUVTVF9QT1JUOi0yMn1cXFwiXFxuK3JlYWRvbmx5IFdBSVRfUEVSSU9EPTNcXG4rcmVhZG9ubHkgV0FJVF9QRVJJT0RfTUFYPTgwXFxuK3JlYWRvbmx5IFdBSVRfVE9UQUw9JCgoV0FJVF9QRVJJT0QgKiBXQUlUX1BFUklPRF9NQVgpKVxcbityZWFkb25seSBRRU1VX1BJREZJTEU9XFxcIiQobWt0ZW1wIC90bXAvcWVtdV9tZW1jZ192bXRlc3RfWFhYWC5waWQpXFxcIlxcbityZWFkb25seSBRRU1VX09QVFM9XFxcIiAtLXBpZGZpbGUgJHtRRU1VX1BJREZJTEV9IFxcXCJcXG4rXFxuK0JVSUxEPTBcXG4rUUVNVT1cXFwicWVtdS1zeXN0ZW0tJCh1bmFtZSAtbSlcXFwiXFxuK1ZFUkJPU0U9MFxcbitTSEVMTF9NT0RFPTBcXG4rR1VFU1RfVFJFRT1cXFwiJHtHVUVTVF9UUkVFOi0kS0VSTkVMX0NIRUNLT1VUfVxcXCJcXG4rXFxuK3VzYWdlKCkge1xcbitcXHRjYXQgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJDAgW09QVElPTlNdXFxuKyAgICAtYiAgICAgICAgQnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgYmVmb3JlIGJvb3RpbmdcXG4rICAgIC1xIFxcdTAwM2NxZW11XFx1MDAzZSBRRU1VIGJpbmFyeS9wYXRoIChkZWZhdWx0OiAkUUVNVSlcXG4rICAgIC1zICAgICAgICBTdGFydCBpbnRlcmFjdGl2ZSBzaGVsbCBpbiBWTVxcbisgICAgLXYgICAgICAgIFZlcmJvc2Ugb3V0cHV0ICh2bmcgYm9vdCBsb2dzIG9uIHN0ZG91dClcXG4rRU9GXFxuK1xcdGV4aXQgMVxcbit9XFxuK1xcbitkaWUoKSB7XFxuK1xcdGVjaG8gXFxcIiQqXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0ZXhpdCBcXFwiJHtLU0ZUX0ZBSUx9XFxcIlxcbit9XFxuK1xcbitjbGVhbnVwKCkge1xcbitcXHRpZiBbWyAtcyBcXFwiJFFFTVVfUElERklMRVxcXCIgXV07IHRoZW5cXG4rXFx0XFx0cGtpbGwgLVNJR1RFUk0gLUYgXFxcIiRRRU1VX1BJREZJTEVcXFwiIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSB8fCB0cnVlXFxuK1xcdGZpXFxuK1xcbitcXHRpZiBbWyAtZSBcXFwiJFFFTVVfUElERklMRVxcXCIgXV07IHRoZW5cXG4rXFx0XFx0cm0gLWYgXFxcIiRRRU1VX1BJREZJTEVcXFwiXFxuK1xcdGZpXFxuK31cXG4rXFxuK3ZtX3NzaCgpIHtcXG4rXFx0c3RkYnVmIC1vTCBzc2ggLXEgXFxcXFxcbitcXHRcXHQtRiBcXFwiJEhPTUUvLmNhY2hlL3ZpcnRtZS1uZy8uc3NoL3ZpcnRtZS1uZy1zc2guY29uZlxcXCIgXFxcXFxcbitcXHRcXHQtbCByb290IFxcXCJ2aXJ0bWUtbmclJFNTSF9HVUVTVF9QT1JUXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIkQFxcXCJcXG4rfVxcbitcXG4rY2hlY2tfZGVwcygpIHtcXG4rXFx0Zm9yIGRlcCBpbiB2bmcgXFxcIiRRRU1VXFxcIiBidXN5Ym94IHBraWxsIHNzaDsgZG9cXG4rXFx0XFx0aWYgISBjb21tYW5kIC12IFxcXCIkZGVwXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwic2tpcDogZGVwZW5kZW5jeSAkZGVwIG5vdCBmb3VuZFxcXCJcXG4rXFx0XFx0XFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rXFx0XFx0ZmlcXG4rXFx0ZG9uZVxcbit9XFxuK1xcbitoYW5kbGVfYnVpbGQoKSB7XFxuK1xcdGlmIFtbICEgXFxcIiRCVUlMRFxcXCIgLWVxIDEgXV07IHRoZW5cXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcbitcXHRpZiBbWyAhIC1kIFxcXCIkS0VSTkVMX0NIRUNLT1VUXFxcIiBdXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCItYiByZXF1aXJlcyAkMCB0byBiZSBjYWxsZWQgZnJvbSB0aGUga2VybmVsIHNvdXJjZSB0cmVlXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCAxXFxuK1xcdGZpXFxuK1xcbitcXHRwdXNoZCBcXFwiJEtFUk5FTF9DSEVDS09VVFxcXCIgXFx1MDAyNlxcdTAwM2UvZGV2L251bGxcXG4rXFxuK1xcdGlmICEgdm5nIC0ta2NvbmZpZyAtLWNvbmZpZyBcXFwiJFNDUklQVF9ESVJcXFwiL2NvbmZpZzsgdGhlblxcbitcXHRcXHRkaWUgXFxcImZhaWxlZCB0byBnZW5lcmF0ZSAuY29uZmlnIGZvciBrZXJuZWwgc291cmNlIHRyZWUgKCRLRVJORUxfQ0hFQ0tPVVQpXFxcIlxcbitcXHRmaVxcbitcXG4rXFx0aWYgISBtYWtlIC1qXFxcIiQobnByb2MpXFxcIjsgdGhlblxcbitcXHRcXHRkaWUgXFxcImZhaWxlZCB0byBidWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcXFwiXFxuK1xcdGZpXFxuK1xcbitcXHRwb3BkIFxcdTAwMjZcXHUwMDNlL2Rldi9udWxsXFxuK31cXG4rXFxuK3ZtX3N0YXJ0KCkge1xcbitcXHRsb2NhbCBsb2dmaWxlPS9kZXYvbnVsbFxcbitcXHRsb2NhbCB2ZXJib3NlX29wdD1cXFwiXFxcIlxcbitcXHRsb2NhbCBrZXJuZWxfb3B0PVxcXCJcXFwiXFxuK1xcbitcXHRpZiBbWyBcXFwiJFZFUkJPU0VcXFwiIC1lcSAxIF1dOyB0aGVuXFxuK1xcdFxcdHZlcmJvc2Vfb3B0PVxcXCItLXZlcmJvc2VcXFwiXFxuK1xcdFxcdGxvZ2ZpbGU9L2Rldi9zdGRvdXRcXG4rXFx0ZmlcXG4rXFxuK1xcdGlmIFtbIFxcXCIkQlVJTERcXFwiIC1lcSAxIF1dOyB0aGVuXFxuK1xcdFxcdGtlcm5lbF9vcHQ9XFxcIiR7S0VSTkVMX0NIRUNLT1VUfVxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdHZuZyBcXFxcXFxuK1xcdFxcdC0tcnVuIFxcXFxcXG4rXFx0XFx0JHtrZXJuZWxfb3B0fSBcXFxcXFxuK1xcdFxcdCR7dmVyYm9zZV9vcHR9IFxcXFxcXG4rXFx0XFx0LS1xZW11LW9wdHM9XFxcIiRRRU1VX09QVFNcXFwiIFxcXFxcXG4rXFx0XFx0LS1xZW11PVxcXCIkKGNvbW1hbmQgLXYgXFxcIiRRRU1VXFxcIilcXFwiIFxcXFxcXG4rXFx0XFx0LS11c2VyIHJvb3QgXFxcXFxcbitcXHRcXHQtLXNzaCBcXFwiJFNTSF9HVUVTVF9QT1JUXFxcIiBcXFxcXFxuK1xcdFxcdC0tbWVtb3J5IDNHIFxcXFxcXG4rXFx0XFx0LS1hcHBlbmQgXFxcImNtYT02NE0gaHVnZXRsYl9jbWE9MUcgaHVnZXRsYl9jbWFfb25seT0xXFxcIiBcXFxcXFxuK1xcdFxcdC0tcncgXFx1MDAyNlxcdTAwM2VcXFwiJGxvZ2ZpbGVcXFwiIFxcdTAwMjZcXG4rXFxuK1xcdGxvY2FsIHZuZ19waWQ9JCFcXG4rXFx0bG9jYWwgZWxhcHNlZD0wXFxuK1xcbitcXHR3aGlsZSBbWyAhIC1zIFxcXCIkUUVNVV9QSURGSUxFXFxcIiBdXTsgZG9cXG4rXFx0XFx0a2lsbCAtMCBcXFwiJHZuZ19waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IFxcXFxcXG4rXFx0XFx0XFx0ZGllIFxcXCJ2bmcgZXhpdGVkIGVhcmx5OyBmYWlsZWQgdG8gYm9vdCBWTVxcXCJcXG4rXFx0XFx0W1sgXFxcIiRlbGFwc2VkXFxcIiAtZ2UgXFxcIiRXQUlUX1RPVEFMXFxcIiBdXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFxcdFxcdGRpZSBcXFwidGltZWQgb3V0IHdhaXRpbmcgZm9yIFZNIGJvb3RcXFwiXFxuK1xcdFxcdHNsZWVwIDFcXG4rXFx0XFx0ZWxhcHNlZD0kKChlbGFwc2VkICsgMSkpXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rdm1fd2FpdF9mb3Jfc3NoKCkge1xcbitcXHRsb2NhbCBpPTBcXG4rXFx0d2hpbGUgdHJ1ZTsgZG9cXG4rXFx0XFx0dm1fc3NoIC0tIHRydWUgXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0XFx0aT0kKChpICsgMSkpXFxuK1xcdFxcdFtbIFxcXCIke2l9XFxcIiAtZ3QgXFxcIiRXQUlUX1BFUklPRF9NQVhcXFwiIF1dIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4rXFx0XFx0XFx0ZGllIFxcXCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgZ3Vlc3Qgc3NoXFxcIlxcbitcXHRcXHRzbGVlcCBcXFwiJFdBSVRfUEVSSU9EXFxcIlxcbitcXHRkb25lXFxuK31cXG4rXFxuK2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHtcXG4rXFx0dm1fc3NoIC0tIFxcXCJncmVwIC1xIG1lbW9yeSAvc3lzL2ZzL2Nncm91cC9jZ3JvdXAuY29udHJvbGxlcnNcXFwiIFxcXFxcXG4rXFx0XFx0fHwgZGllIFxcXCJtZW1vcnkgY29udHJvbGxlciBub3QgYXZhaWxhYmxlIChDT05GSUdfTUVNQ0c/KVxcXCJcXG4rXFx0dm1fc3NoIC0tIFxcXCJbWyAtZSAvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiBdXVxcXCIgXFxcXFxcbitcXHRcXHR8fCBkaWUgXFxcIkNNQSBoZWFwIG5vdCBhdmFpbGFibGUgKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BPyBjbWE9IGNtZGxpbmU/KVxcXCJcXG4rfVxcbitcXG4rc2V0dXBfZ3Vlc3RfY21hX2FjY291bnRpbmcoKSB7XFxuK1xcdHZtX3NzaCAtLSBcXFwibW91bnQgLW8gcmVtb3VudCxtZW1vcnlfY21hX2FjY291bnRpbmcgL3N5cy9mcy9jZ3JvdXBcXFwiIFxcXFxcXG4rXFx0XFx0fHwgZGllIFxcXCJmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeV9jbWFfYWNjb3VudGluZ1xcXCJcXG4rXFx0dm1fc3NoIC0tIFxcXCJlY2hvICttZW1vcnkgXFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9jZ3JvdXAuc3VidHJlZV9jb250cm9sXFxcIiBcXFxcXFxuK1xcdFxcdHx8IGRpZSBcXFwiZmFpbGVkIHRvIGVuYWJsZSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4rfVxcbitcXG4rcnVuX3Rlc3QoKSB7XFxuK1xcdHZtX3NzaCAtLSBcXFwiY2QgJyRHVUVTVF9UUkVFJyBcXHUwMDI2XFx1MDAyNiBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwXFxcIlxcbitcXHR2bV9zc2ggLS0gXFxcImNkICckR1VFU1RfVFJFRScgXFx1MDAyNlxcdTAwMjYgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cyBUQVJHRVRTPWNncm91cCBydW5fdGVzdHNcXFwiXFxuK31cXG4rXFxuK3doaWxlIGdldG9wdHMgXFxcIjpodnE6c2JcXFwiIG9wdDsgZG9cXG4rXFx0Y2FzZSBcXFwiJG9wdFxcXCIgaW5cXG4rXFx0dikgVkVSQk9TRT0xIDs7XFxuK1xcdHEpIFFFTVU9XFxcIiR7T1BUQVJHfVxcXCIgOztcXG4rXFx0YikgQlVJTEQ9MSA7O1xcbitcXHRzKSBTSEVMTF9NT0RFPTEgOztcXG4rXFx0aHwqKSB1c2FnZSA7O1xcbitcXHRlc2FjXFxuK2RvbmVcXG4rXFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbitjaGVja19kZXBzXFxuK2hhbmRsZV9idWlsZFxcbitlY2hvIFxcXCJCb290aW5nIHZpcnRtZS1uZyBWTS4uLlxcXCJcXG4rdm1fc3RhcnRcXG4rdm1fd2FpdF9mb3Jfc3NoXFxuK2VjaG8gXFxcIlZNIGlzIHJlYWNoYWJsZSB2aWEgU1NILlxcXCJcXG4rXFxuK2lmIFtbIFxcXCIkU0hFTExfTU9ERVxcXCIgLWVxIDEgXV07IHRoZW5cXG4rXFx0ZWNobyBcXFwiU3RhcnRpbmcgaW50ZXJhY3RpdmUgc2hlbGwgaW4gVk0uIEV4aXQgdG8gc3RvcCBWTS5cXFwiXFxuK1xcdHZtX3NzaCAtdCAtLSBcXFwiY2QgJyRHVUVTVF9UUkVFJyBcXHUwMDI2XFx1MDAyNiBleGVjIGJhc2ggLS1ub3Byb2ZpbGUgLS1ub3JjXFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9QQVNTXFxcIlxcbitmaVxcbitcXG4rY2hlY2tfZ3Vlc3RfcmVxdWlyZW1lbnRzXFxuK3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nXFxuK1xcbitlY2hvIFxcXCJSdW5uaW5nIGNncm91cCBzZWxmdGVzdHMgaW4gVk0uLi5cXFwiXFxuK3J1bl90ZXN0XFxuK2VjaG8gXFxcIlBBU1M6IGNncm91cCBzZWxmdGVzdHMgY29tcGxldGVkXFxcIlxcbitleGl0IFxcXCIkS1NGVF9QQVNTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjo0MC40MDkyMDAzNDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozOTk3NzQ3MTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJETUFCVUZfSEVBUFNcIixcbiAgICBcIkRNQUJVRl9IRUFQU19DTUFcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2NtYVwiLFxuICAgIFwibWVtX2Nncm91cF91bmNoYXJnZV9jbWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2Agd2hpY2ggZW5hYmxlcyBhY2NvdW50aW5nIG9mIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJ3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UuIEl0IGFkZHMgbmV3IGNvcmUgZnVuY3Rpb25zIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgIHRvIGhhbmRsZSB0aGUgYWNjb3VudGluZyBkdXJpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDTUEgYWxsb2NhdGlvbnMgKGUuZy4sIHVzaW5nIERNQS1CVUYgaGVhcHMgb3IgaHVnZXRsYikgd2hlbiB0aGUgbW91bnQgb3B0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBhbmQgQ01BIHN1YnN5c3RlbXMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MzhkZTc0MTgxM2ViNDc2YTlkNTIwY2ZkMDk2Y2ExYTBhMTUxODQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTk6MTI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbmluZGV4IGFlZDE5NWE3MWNiZjEuLjM5ODcxYTdhMDhhOGQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTI0Niw2ICsyNDYsMjYgQEAgY2dyb3VwIHYyIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG1vdW50IG9wdGlvbnMuXG4gICAgICAgICAgIHdpbGwgbm90IGJlIHRyYWNrZWQgYnkgdGhlIG1lbW9yeSBjb250cm9sbGVyIChldmVuIGlmIGNncm91cFxuICAgICAgICAgICB2MiBpcyByZW1vdW50ZWQgbGF0ZXIgb24pLlxuIFxuKyAgbWVtb3J5X2NtYV9hY2NvdW50aW5nXG4rICAgICAgICBDb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCdzIG92ZXJhbGwgbWVtb3J5IHVzYWdlIGZvclxuKyAgICAgICAgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBhbmQgZXhwb3NlIHBlci1DTUEtYXJlYSB1c2FnZSBjb3VudGVycy4gVGhpc1xuKyAgICAgICAgYmVoYXZpb3IgaXMgb3B0LWluLCBzbyBhcyB0byBub3QgY2F1c2UgcmVncmVzc2lvbiBvbiBleGlzdGluZyBzZXR1cHMuXG4rXG4rICAgICAgICBBIGZldyBjYXZlYXRzIHRvIGtlZXAgaW4gbWluZDpcbitcbisgICAgICAgICogQ01BIGFyZWFzIGFyZSByZXNlcnZlZCBhdCBib290IHRpbWUsIG1lbW9yeSBpcyBvbmx5IGNoYXJnZWQgdG8gYVxuKyAgICAgICAgICBjZ3JvdXAgd2hlbiBhIENNQSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCBvbiBpdHMgYmVoYWxmLlxuKyAgICAgICAgKiBDTUEgcGFnZXMgYWxsb2NhdGVkIHdoaWxlIHRoaXMgb3B0aW9uIGlzIG5vdCBlbmFibGVkIHdpbGwgbm90IGJlXG4rICAgICAgICAgIHRyYWNrZWQgYnkgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBldmVuIGlmIGNncm91cCB2MiBpcyByZW1vdW50ZWRcbisgICAgICAgICAgbGF0ZXIgb24gd2l0aCB0aGlzIG9wdGlvbi4gQ2hhcmdlcyBoYXBwZW4gYXQgYWxsb2NhdGlvbi5cbisgICAgICAgICogQ01BIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIGJvdGggdG8gdGhlIGNncm91cCdzIG1lbW9yeSBjb3VudGVyXG4rICAgICAgICAgIChsaW1pdGVkIGJ5IG1lbW9yeS5tYXgpIGFuZCB0aGUgcGVyLWFyZWEgQ01BIGNvdW50ZXIgKGxpbWl0ZWQgYnlcbisgICAgICAgICAgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heCkuIEhpdHRpbmcgZWl0aGVyIGxpbWl0IGNhbiBjYXVzZSBhbiBhbGxvY2F0aW9uXG4rICAgICAgICAgIHRvIGZhaWwuIElmIENNQSB1c2FnZSBwdXNoZXMgdGhlIGNncm91cCBvdmVyIG1lbW9yeS5oaWdoIG9yXG4rICAgICAgICAgIG1lbW9yeS5tYXgsIHRoZSBtZW1vcnkgY29udHJvbGxlciB3aWxsIGF0dGVtcHQgdG8gcmVjbGFpbSBvdGhlclxuKyAgICAgICAgICBtZW1vcnkgb25seS4gQ01BIG1lbW9yeSBjaGFyZ2VkIHRvIHRoZSBjZ3JvdXAgaXMgbm90IHJlY2xhaW1hYmxlLlxuKyAgICAgICAgICBMaW1pdHMgc2hvdWxkIGJlIHNpemVkIHRvIGFjY29tbW9kYXRlIHRoZSBleHBlY3RlZCBDTUEgcHJlc3N1cmUuXG4rXG4gICBwaWRzX2xvY2FsZXZlbnRzXG4gICAgICAgICBUaGUgb3B0aW9uIHJlc3RvcmVzIHYxLWxpa2UgYmVoYXZpb3Igb2YgcGlkcy5ldmVudHM6bWF4LCB0aGF0IGlzIG9ubHlcbiAgICAgICAgIGxvY2FsIChpbnNpZGUgY2dyb3VwIHByb3BlcikgZm9yayBmYWlsdXJlcyBhcmUgY291bnRlZC4gV2l0aG91dCB0aGlzXG5AQCAtMTkwOCw2ICsxOTI4LDIxIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXG4gXHRUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgYW5kIHN3YXBwaW5nXG4gXHRpcyBhbGxvd2VkIHVubGVzcyBtZW1vcnkuc3dhcC5tYXggaXMgc2V0IHRvIDAuXG4gXG4rICBtZW1vcnkuY21hLlx1MDAzY2FyZWFcdTAwM2UuY3VycmVudFxuKyAgICAgICAgQSByZWFkLW9ubHkgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFx1MDAzY2FyZWFcdTAwM2VcbisgICAgICAgIGlzIHRoZSBDTUEgYXJlYSBuYW1lIChlLmcuIFwicmVzZXJ2ZWRcIiBmb3IgdGhlIGRlZmF1bHQgRE1BIENNQSBhcmVhKS5cbitcbisgICAgICAgIFRoZSB0b3RhbCBhbW91bnQgb2YgQ01BIG1lbW9yeSBjdXJyZW50bHkgY2hhcmdlZCB0byB0aGUgY2dyb3VwIGZvciB0aGVcbisgICAgICAgIGdpdmVuIENNQSBhcmVhLiBPbmx5IGFjY291bnRlZCB3aGVuIG1lbW9yeV9jbWFfYWNjb3VudGluZyBpcyBlbmFibGVkLlxuK1xuKyAgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heFxuKyAgICAgICAgQSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLiBUaGVcbisgICAgICAgIGRlZmF1bHQgaXMgXCJtYXhcIi5cbitcbisgICAgICAgIENNQSB1c2FnZSBoYXJkIGxpbWl0IGZvciB0aGUgZ2l2ZW4gYXJlYS4gSWYgYSBjZ3JvdXAncyBDTUEgdXNhZ2UgZm9yXG4rICAgICAgICB0aGlzIGFyZWEgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZhaWwuIE9ubHkgZW5mb3JjZWRcbisgICAgICAgIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuXG4rXG4gICBtZW1vcnkucHJlc3N1cmVcbiBcdEEgcmVhZC1vbmx5IG5lc3RlZC1rZXllZCBmaWxlLlxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaFxuaW5kZXggZGUyY2Q2MjM4YzJhZS4uMTVmM2Y3MTEwYzViMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG5AQCAtMTI5LDYgKzEyOSwxMSBAQCBlbnVtIHtcbiBcdCAqIEVuYWJsZSBsZWdhY3kgbG9jYWwgcGlkcy5ldmVudHMuXG4gXHQgKi9cbiBcdENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUyA9ICgxIFx1MDAzY1x1MDAzYyAyMCksXG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIGNtYSBhY2NvdW50aW5nIGZvciB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuXG4rXHQgKi9cbitcdENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcgPSAoMSBcdTAwM2NcdTAwM2MgMjEpLFxuIH07XG4gXG4gLyogY2Z0eXBlLVx1MDAzZWZsYWdzICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbWEuaCBiL2luY2x1ZGUvbGludXgvY21hLmhcbmluZGV4IDg1NTVkMzhhOTdiMWEuLjE2ZTIxMzY0MjFiNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NtYS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2NtYS5oXG5AQCAtNDksMTIgKzQ5LDEyIEBAIGV4dGVybiBpbnQgY21hX2luaXRfcmVzZXJ2ZWRfbWVtKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4gXHRcdFx0XHRcdHN0cnVjdCBjbWEgKipyZXNfY21hKTtcbiBleHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcbiBcdFx0XHQgICAgICBib29sIG5vX3dhcm4pO1xuLWV4dGVybiBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KTtcbitleHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7XG4gXG4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW4oc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxpZ24sIGJvb2wgbm9fd2Fybik7XG4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLWJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuK2Jvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuIFx0XHR1bnNpZ25lZCBsb25nIGNvdW50KTtcbiBcbiBleHRlcm4gaW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA4MTcwYmI4MDY2YTIyLi44MDFmYmRlOTQxMzdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMzIwLDYgKzMyMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHRzcGlubG9ja190IGV2ZW50X2xpc3RfbG9jaztcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG4gXG4rI2lmZGVmIENPTkZJR19DTUFcbitcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNtYV9jb3VudGVycztcbisjZW5kaWYgLyogQ09ORklHX0NNQSAqL1xuK1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107XG4gfTtcbiBcbkBAIC02NjIsNiArNjY2LDExIEBAIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuIFxuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4rXHRcdFx0ICBzdHJ1Y3QgY21hICpjbWEpO1xuK3ZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgY21hICpjbWEpO1xuK1xuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIC8qKlxuQEAgLTExNjAsNiArMTE2OSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4rXHRcdFx0XHRcdHN0cnVjdCBjbWEgKmNtYSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGNvdW50LCBzdHJ1Y3QgY21hICpjbWEpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcbmluZGV4IGI1YjQ2MWQ0NDE4YjEuLjEyMTg0Zjg1YWQxMDAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvY2dyb3VwL2Nncm91cC5jXG5AQCAtMTk4NSw2ICsxOTg1LDcgQEAgZW51bSBjZ3JvdXAyX3BhcmFtIHtcbiBcdE9wdF9tZW1vcnlfcmVjdXJzaXZlcHJvdCxcbiBcdE9wdF9tZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLFxuIFx0T3B0X3BpZHNfbG9jYWxldmVudHMsXG4rXHRPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nLFxuIFx0bnJfX2Nncm91cDJfcGFyYW1zXG4gfTtcbiBcbkBAIC0xOTk1LDYgKzE5OTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGNncm91cDJfZnNfcGFyYW1ldGVyc1tdID0ge1xuIFx0ZnNwYXJhbV9mbGFnKFwibWVtb3J5X3JlY3Vyc2l2ZXByb3RcIixcdE9wdF9tZW1vcnlfcmVjdXJzaXZlcHJvdCksXG4gXHRmc3BhcmFtX2ZsYWcoXCJtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCIsIE9wdF9tZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nKSxcbiBcdGZzcGFyYW1fZmxhZyhcInBpZHNfbG9jYWxldmVudHNcIixcdE9wdF9waWRzX2xvY2FsZXZlbnRzKSxcbitcdGZzcGFyYW1fZmxhZyhcIm1lbW9yeV9jbWFfYWNjb3VudGluZ1wiLFx0T3B0X21lbW9yeV9jbWFfYWNjb3VudGluZyksXG4gXHR7fVxuIH07XG4gXG5AQCAtMjAyNyw2ICsyMDI5LDkgQEAgc3RhdGljIGludCBjZ3JvdXAyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW1cbiBcdGNhc2UgT3B0X3BpZHNfbG9jYWxldmVudHM6XG4gXHRcdGN0eC1cdTAwM2VmbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XG4gXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nOlxuK1x0XHRjdHgtXHUwMDNlZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG5AQCAtMjA2OCw2ICsyMDczLDExIEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Nncm91cF9yb290X2ZsYWdzKHVuc2lnbmVkIGludCByb290X2ZsYWdzKVxuIFx0XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgfD0gQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjY9IH5DR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XG4rXG4rXHRcdGlmIChyb290X2ZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HKVxuK1x0XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbitcdFx0ZWxzZVxuK1x0XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2PSB+Q0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbiBcdH1cbiB9XG4gXG5AQCAtMjA4NSw2ICsyMDk1LDggQEAgc3RhdGljIGludCBjZ3JvdXBfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qga2VybmZzX3Jvb3QgKmtmX3Jvb3RcbiBcdFx0c2VxX3B1dHMoc2VxLCBcIixtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCIpO1xuIFx0aWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUylcbiBcdFx0c2VxX3B1dHMoc2VxLCBcIixwaWRzX2xvY2FsZXZlbnRzXCIpO1xuK1x0aWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpXG4rXHRcdHNlcV9wdXRzKHNlcSwgXCIsbWVtb3J5X2NtYV9hY2NvdW50aW5nXCIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTc1MjAsNyArNzUzMiw4IEBAIHN0YXRpYyBzc2l6ZV90IGZlYXR1cmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHRcIm1lbW9yeV9sb2NhbGV2ZW50c1xcblwiXG4gXHRcdFx0XCJtZW1vcnlfcmVjdXJzaXZlcHJvdFxcblwiXG4gXHRcdFx0XCJtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXFxuXCJcbi1cdFx0XHRcInBpZHNfbG9jYWxldmVudHNcXG5cIik7XG4rXHRcdFx0XCJwaWRzX2xvY2FsZXZlbnRzXFxuXCJcbitcdFx0XHRcIm1lbW9yeV9jbWFfYWNjb3VudGluZ1xcblwiKTtcbiB9XG4gc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjZ3JvdXBfZmVhdHVyZXNfYXR0ciA9IF9fQVRUUl9STyhmZWF0dXJlcyk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vY21hLmMgYi9tbS9jbWEuY1xuaW5kZXggYTEzY2U0OTk5YjM5Zi4uMDNlYjNhY2JkM2M3NSAxMDA2NDRcbi0tLSBhL21tL2NtYS5jXG4rKysgYi9tbS9jbWEuY1xuQEAgLTI1LDcgKzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19jaG9pY2VzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZ2htZW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbWVtbGVhay5oXHUwMDNlXG5AQCAtOTA1LDYgKzkwNCwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsXG4gXHRcdGNtYV9kZWJ1Z19zaG93X2FyZWFzKGNtYSk7XG4gXHR9XG4gXG4rXHRpZiAocGFnZSBcdTAwMjZcdTAwMjYgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHBhZ2UsIGNvdW50LCBjbWEpKSB7XG4rXHRcdGZyZWVfY29udGlnX2Zyb3plbl9yYW5nZShwYWdlX3RvX3BmbihwYWdlKSwgY291bnQpO1xuK1x0XHRjbWFfY2xlYXJfYml0bWFwKGNtYSwgXHUwMDI2Y21hLVx1MDAzZXJhbmdlc1tyXSwgcGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcbitcdFx0cGFnZSA9IE5VTEw7XG4rXHR9XG4rXG4gXHRwcl9kZWJ1ZyhcIiVzKCk6IHJldHVybmVkICVwXFxuXCIsIF9fZnVuY19fLCBwYWdlKTtcbiBcdHRyYWNlX2NtYV9hbGxvY19maW5pc2gobmFtZSwgcGFnZSA/IHBhZ2VfdG9fcGZuKHBhZ2UpIDogMCxcbiBcdFx0XHQgICAgICAgcGFnZSwgY291bnQsIGFsaWduLCByZXQpO1xuQEAgLTk5MiwxMiArOTk3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX21lbXJhbmdlICpmaW5kX2NtYV9tZW1yYW5nZShzdHJ1Y3QgY21hICpjbWEsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxuLVx0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2VzKTtcbiBcbiBcdHByX2RlYnVnKFwiJXMocGFnZSAlcCwgY291bnQgJWx1KVxcblwiLCBfX2Z1bmNfXywgKHZvaWQgKilwYWdlcywgY291bnQpO1xuIFxuK1x0bWVtX2Nncm91cF91bmNoYXJnZV9jbWEocGFnZXMsIGNvdW50LCBjbWEpO1xuIFx0ZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBmbiwgY291bnQpO1xuIFx0Y21hX2NsZWFyX2JpdG1hcChjbWEsIGNtciwgcGZuLCBjb3VudCk7XG4gXHRjbWFfc3lzZnNfYWNjb3VudF9yZWxlYXNlX3BhZ2VzKGNtYSwgY291bnQpO1xuQEAgLTEwMTQsNyArMTAyMCw3IEBAIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxuICAqIEl0IHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXMgYXJlYSBhbmRcbiAgKiB0cnVlIG90aGVyd2lzZS5cbiAgKi9cbi1ib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuK2Jvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdCB1bnNpZ25lZCBsb25nIGNvdW50KVxuIHtcbiBcdHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcjtcbkBAIC0xMDM3LDcgKzEwNDMsNyBAQCBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChjbWFfcmVsZWFzZSk7XG4gXG4tYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4rYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yO1xuZGlmZiAtLWdpdCBhL21tL2NtYS5oIGIvbW0vY21hLmhcbmluZGV4IGM3MDE4MGMzNjU1OWMuLjUyYjdkNGJlNTE3MDcgMTAwNjQ0XG4tLS0gYS9tbS9jbWEuaFxuKysrIGIvbW0vY21hLmhcbkBAIC00LDYgKzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tvYmplY3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gXG4gc3RydWN0IGNtYV9rb2JqZWN0IHtcbiBcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG5AQCAtODAsNiArODEsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNtYV9iaXRtYXBfbWF4bm8oc3RydWN0IGNtYSAqY21hLFxuIFx0cmV0dXJuIGNtci1cdTAwM2Vjb3VudCBcdTAwM2VcdTAwM2UgY21hLVx1MDAzZW9yZGVyX3Blcl9iaXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGNtYV9hcmVhX2luZGV4KGNvbnN0IHN0cnVjdCBjbWEgKmNtYSlcbit7XG4rXHRyZXR1cm4gY21hIC0gY21hX2FyZWFzO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0NNQV9TWVNGU1xuIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfc3VjY2Vzc19wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfZmFpbF9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuZGlmZiAtLWdpdCBhL21tL2NtYV9kZWJ1Zy5jIGIvbW0vY21hX2RlYnVnLmNcbmluZGV4IDUyM2JhNGEwZjlmNzYuLjcwYmZjNmZiZWVjYTMgMTAwNjQ0XG4tLS0gYS9tbS9jbWFfZGVidWcuY1xuKysrIGIvbW0vY21hX2RlYnVnLmNcbkBAIC03LDcgKzcsNiBAQFxuIFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9tbS9jbWFfc3lzZnMuYyBiL21tL2NtYV9zeXNmcy5jXG5pbmRleCBkNWJmNzkyYzYyNDVhLi5lNGVlMzViYzY4MmJhIDEwMDY0NFxuLS0tIGEvbW0vY21hX3N5c2ZzLmNcbisrKyBiL21tL2NtYV9zeXNmcy5jXG5AQCAtNSw3ICs1LDYgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWluY2hhbiBLaW0gXHUwMDNjbWluY2hhbkBrZXJuZWwub3JnXHUwMDNlXG4gICovXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZi4uZjI4ZDYxMGE1OWNlNyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNjgsNiArNjgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJzbGFiLmhcIlxuICNpbmNsdWRlIFwibWVtY29udHJvbC12MS5oXCJcbisjaW5jbHVkZSBcImNtYS5oXCJcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiBcbkBAIC00MDYyLDYgKzQwNjMsOSBAQCBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0aW50IG5vZGU7XG4gXG4rI2lmZGVmIENPTkZJR19DTUFcbitcdGtmcmVlKG1lbWNnLVx1MDAzZWNtYV9jb3VudGVycyk7XG4rI2VuZGlmXG4gXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcbiBcdFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbm9kZV07XG4gXHRcdGlmICghcG4pXG5AQCAtNDE0NCw2ICs0MTQ4LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXG4gXHRcdG1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldLmRvbmUgPVxuIFx0XHRcdF9fV0JfQ09NUExFVElPTl9JTklUKFx1MDAyNm1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHX0NNQVxuK1x0aWYgKGNtYV9hcmVhX2NvdW50KSB7XG4rXHRcdG1lbWNnLVx1MDAzZWNtYV9jb3VudGVycyA9IGtjYWxsb2MoY21hX2FyZWFfY291bnQsXG4rXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZV9jb3VudGVyKSxcbitcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghbWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbiAjZW5kaWZcbiBcdGxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7XG4gXHRyZXR1cm4gbWVtY2c7XG5AQCAtNDE1OSw2ICs0MTcyLDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NzcyhwYXJlbnRfY3NzKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZztcbiBcdGJvb2wgbWVtY2dfb25fZGZsID0gY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcbitcdHVuc2lnbmVkIGludCBfX21heWJlX3VudXNlZCBpO1xuIFxuIFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpO1xuIFx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XG5AQCAtNDE3MSw2ICs0MTg1LDEyIEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuICNpZmRlZiBDT05GSUdfWlNXQVBcbiBcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19DTUFcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9hcmVhX2NvdW50OyArK2kpXG4rXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpXSxcbitcdFx0XHRcdCAgcGFyZW50ID8gXHUwMDI2cGFyZW50LVx1MDAzZWNtYV9jb3VudGVyc1tpXSA6IE5VTEwsXG4rXHRcdFx0XHQgIGZhbHNlKTtcbiAjZW5kaWZcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcbiBcdGlmIChwYXJlbnQpIHtcbkBAIC01MjEzLDYgKzUyMzMsMTAyIEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0NNQVxuK3N0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2NtYSh2b2lkKVxuK3tcbitcdHJldHVybiBjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuK31cbitcbitpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuK1x0XHRcdCAgc3RydWN0IGNtYSAqY21hKVxuK3tcbitcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsICpmYWlsO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRpbnQgcmMgPSAwO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbitcdGlmICghbWVtY2cpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4rXHRcdGdvdG8gY2dyb3VwX3B1dDtcbitcbitcdHJjID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgR0ZQX0tFUk5FTCwgY291bnQpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGNncm91cF9wdXQ7XG4rXG4rXHRjb3VudGVyID0gXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2NtYV9hcmVhX2luZGV4KGNtYSldO1xuK1x0aWYgKCFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShjb3VudGVyLCBjb3VudCwgXHUwMDI2ZmFpbCkpIHtcbitcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBjb3VudCk7XG4rXHRcdHJjID0gLUVOT01FTTtcbitcdFx0Z290byBjZ3JvdXBfcHV0O1xuK1x0fVxuK1xuK1x0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX21lbWNnKG1lbWNnKTtcbitcdGlmIChmb2xpb190ZXN0X2xhcmdlKHBhZ2VfZm9saW8ocGFnZSkpKSB7XG4rXHRcdGNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlKSwgb2JqY2cpO1xuK1x0fSBlbHNlIHtcbitcdFx0b2JqX2Nncm91cF9nZXRfbWFueShvYmpjZywgY291bnQgLSAxKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKylcbitcdFx0XHRjb21taXRfY2hhcmdlKHBhZ2VfZm9saW8ocGFnZSArIGkpLCBvYmpjZyk7XG4rXHR9XG4rXG4rY2dyb3VwX3B1dDpcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcdHJldHVybiByYztcbit9XG4rXG4rdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbitcdFx0XHQgICAgIHN0cnVjdCBjbWEgKmNtYSlcbit7XG4rXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBHZXQgdGhlIG9iamNnIGZyb20gdGhlIGZpcnN0IHBhZ2UuXG4rXHQgKiBwYWdlX29iamNnKCkgZXhwZWN0cyBNRU1DR19EQVRBX0tNRU0sIGJ1dCBmb3IgQ01BIHdlIHVzZWRcbitcdCAqIGNvbW1pdF9jaGFyZ2UoKSB3aGljaCBzZXRzIGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSBvYmpjZ1xuK1x0ICogd2l0aG91dCBmbGFncywgc28gd2UgY2Fubm90IHVzZSBpdC5cbitcdCAqL1xuK1x0b2JqY2cgPSBmb2xpb19vYmpjZyhwYWdlX2ZvbGlvKHBhZ2UpKTtcbitcdGlmICghb2JqY2cpXG4rXHRcdHJldHVybjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4rXG4rXHRjb3VudGVyID0gXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2NtYV9hcmVhX2luZGV4KGNtYSldO1xuK1x0cGFnZV9jb3VudGVyX3VuY2hhcmdlKGNvdW50ZXIsIGNvdW50KTtcbitcbitcdG1lbWNnX3VuY2hhcmdlKG1lbWNnLCBjb3VudCk7XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuK1x0XHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbitcdFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuK1x0fSBlbHNlIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7ICsraSkge1xuK1x0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlICsgaSk7XG4rXHRcdFx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4rXHRcdFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuK1x0XHR9XG4rXHR9XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfQ01BICovXG4rXG4gc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHR1bnNpZ25lZCBsb25nIG5yX21lbW9yeTtcbkBAIC02MDY2LDMgKzYxODIsOTIgQEAgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRcdEsoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkuY2hpbGRyZW5fbWluX3VzYWdlKSksXG4gXHRcdEsoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkuY2hpbGRyZW5fbG93X3VzYWdlKSkpO1xuIH1cbitcbisjaWZkZWYgQ09ORklHX0NNQVxuK3N0YXRpYyBpbnQgbWVtb3J5X2NtYV9jdXJyZW50X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7XG4rXHRpbnQgaWR4ID0gc2VxX2NmdChtKS1cdTAwM2Vwcml2YXRlO1xuK1x0dW5zaWduZWQgbG9uZyBjdXIgPSBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VjbWFfY291bnRlcnNbaWR4XSk7XG4rXG4rXHRzZXFfcHJpbnRmKG0sIFwiJWx1XFxuXCIsIGN1ciAqIFBBR0VfU0laRSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBtZW1vcnlfY21hX21heF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xuK1x0aW50IGlkeCA9IHNlcV9jZnQobSktXHUwMDNlcHJpdmF0ZTtcbitcdHVuc2lnbmVkIGxvbmcgbWF4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdLm1heCk7XG4rXG4rXHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLCBtYXgpO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBtZW1vcnlfY21hX21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcbitcdFx0XHRcdCAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4rXHRpbnQgaWR4ID0gb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlO1xuK1x0dW5zaWduZWQgbG9uZyBtYXg7XG4rXHRpbnQgcmM7XG4rXG4rXHRidWYgPSBzdHJzdHJpcChidWYpO1xuK1x0cmMgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCBcIm1heFwiLCBcdTAwMjZtYXgpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR4Y2hnKFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdLm1heCwgbWF4KTtcbitcbitcdHJldHVybiBuYnl0ZXM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNtYV9kZmxfdG1wbFtdID0ge1xuK1x0e1xuK1x0XHQubmFtZSA9IFwiY3VycmVudFwiLFxuK1x0XHQuc2VxX3Nob3cgPSBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdyxcbitcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuK1x0fSxcbitcdHtcbitcdFx0Lm5hbWUgPSBcIm1heFwiLFxuK1x0XHQuc2VxX3Nob3cgPSBtZW1vcnlfY21hX21heF9zaG93LFxuK1x0XHQud3JpdGUgPSBtZW1vcnlfY21hX21heF93cml0ZSxcbitcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuK1x0fSxcbitcdHsgfVxuK307XG4rI2RlZmluZSBDTUFfREZMX1RNUExfU0laRVx0KEFSUkFZX1NJWkUoY21hX2RmbF90bXBsKSAtIDEpXG4rXG4rc3RhdGljIHN0cnVjdCBjZnR5cGUgKmNtYV9kZmxfZmlsZXM7XG4rXG4rc3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9jbWFfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBjZnR5cGUgKmNmdDtcbitcdHVuc2lnbmVkIGludCBpLCBqO1xuK1x0aW50IGNvdW50O1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhY21hX2FyZWFfY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y291bnQgPSBjbWFfYXJlYV9jb3VudCAqIENNQV9ERkxfVE1QTF9TSVpFO1xuK1x0Y21hX2RmbF9maWxlcyA9IGtjYWxsb2MoY291bnQgKyAxLCBzaXplb2YoKmNtYV9kZmxfdG1wbCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjbWFfZGZsX2ZpbGVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9hcmVhX2NvdW50OyArK2kpXG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIENNQV9ERkxfVE1QTF9TSVpFOyArK2opIHtcbitcdFx0XHRjZnQgPSBcdTAwMjZjbWFfZGZsX2ZpbGVzW2kgKiBDTUFfREZMX1RNUExfU0laRSArIGpdO1xuK1x0XHRcdCpjZnQgPSBjbWFfZGZsX3RtcGxbal07XG4rXHRcdFx0c25wcmludGYoY2Z0LVx1MDAzZW5hbWUsIE1BWF9DRlRZUEVfTkFNRSwgXCJjbWEuJXMuJXNcIixcbitcdFx0XHRcdCBjbWFfZ2V0X25hbWUoXHUwMDI2Y21hX2FyZWFzW2ldKSxcbitcdFx0XHRcdCBjbWFfZGZsX3RtcGxbal0ubmFtZSk7XG4rXHRcdFx0Y2Z0LVx1MDAzZXByaXZhdGUgPSBpOyAvKiBjbWEgYXJlYSBpbmRleCBmb3IgY291bnRlcnMgaW4gY2FsbGJhY2tzLiAqL1xuK1x0XHRcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KFx1MDAyNmNmdC1cdTAwM2Vsb2NrZGVwX2tleSk7XG4rXHRcdH1cbitcbitcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIGNtYV9kZmxfZmlsZXMpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9jbWFfaW5pdCk7XG4rI2VuZGlmIC8qIENPTkZJR19DTUEgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG5pbmRleCA5NTJlNDQ0OGJmMDcwLi5iOWE0Mjk4ZDQ5NDQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG5AQCAtMSw1ICsxLDYgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiB0ZXN0X2NvcmVcbit0ZXN0X2NtYV9tZW1jZ1xuIHRlc3RfY3B1XG4gdGVzdF9jcHVzZXRcbiB0ZXN0X2ZyZWV6ZXJcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbmluZGV4IGUwMTU4NGMyMTg5YWMuLjYwMWQ5MzAxNjBhNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuQEAgLTgsNiArOCw3IEBAIFRFU1RfUFJPR1MgICAgIDo9IHRlc3Rfc3RyZXNzLnNoIHRlc3RfY3B1c2V0X3Bycy5zaCB0ZXN0X2NwdXNldF92MV9ocC5zaFxuIFRFU1RfR0VOX0ZJTEVTIDo9IHdhaXRfaW5vdGlmeVxuICMgS2VlcCB0aGUgbGlzdHMgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkXG4gVEVTVF9HRU5fUFJPR1MgID0gdGVzdF9jb3JlXG4rVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9jbWFfbWVtY2dcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NwdVxuIFRFU1RfR0VOX1BST0dTICs9IHRlc3RfY3B1c2V0XG4gVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9mcmVlemVyXG5AQCAtMjQsNiArMjUsNyBAQCBpbmNsdWRlIC4uL2xpYi5ta1xuIGluY2x1ZGUgbGliL2xpYmNncm91cC5ta1xuIFxuICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pXG4rJChPVVRQVVQpL3Rlc3RfY21hX21lbWNnOiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X2NwdTogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9jcHVzZXQ6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfZnJlZXplcjogJChMSUJDR1JPVVBfTylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuaW5kZXggMzlmOTc5NjkwZGQzYi4uMWM5MDM0MDE3NjgyZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWdcbkBAIC00LDMgKzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuIENPTkZJR19DR1JPVVBfU0NIRUQ9eVxuIENPTkZJR19NRU1DRz15XG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XG4rQ09ORklHX0NNQT15XG4rQ09ORklHX0RNQV9DTUE9eVxuK0NPTkZJR19ETUFCVUZfSEVBUFM9eVxuK0NPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXlcbitDT05GSUdfSFVHRVRMQkZTPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWJkNDFkOWE2MTc3ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmNcbkBAIC0wLDAgKzEsNDAyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtaGVhcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbisjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbisjaW5jbHVkZSBcImNncm91cF91dGlsLmhcIlxuK1xuKyNkZWZpbmUgQ01BX0hFQVBfREVGQVVMVF9QQVRIXHRcIi9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uXCJcbisjZGVmaW5lIENNQV9SRVNFUlZFRF9DVVJSRU5UXHRcIm1lbW9yeS5jbWEucmVzZXJ2ZWQuY3VycmVudFwiXG4rI2RlZmluZSBDTUFfUkVTRVJWRURfTUFYXHRcIm1lbW9yeS5jbWEucmVzZXJ2ZWQubWF4XCJcbitcbisjZGVmaW5lIEhVR0VUTEJfQ01BX0NVUlJFTlRcdFwibWVtb3J5LmNtYS5odWdldGxiMC5jdXJyZW50XCJcbisjZGVmaW5lIEhVR0VUTEJfQ01BX01BWFx0XCJtZW1vcnkuY21hLmh1Z2V0bGIwLm1heFwiXG4rI2RlZmluZSBIVUdFUEFHRVNfRElSXHRcdFwiL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzXCJcbitcbitzdGF0aWMgaW50IGNtYV9oZWFwX2FsbG9jKGludCBoZWFwX2ZkLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgZG1hX2hlYXBfYWxsb2NhdGlvbl9kYXRhIGRhdGEgPSB7XG4rXHRcdC5sZW4gPSBzaXplLFxuK1x0XHQuZmRfZmxhZ3MgPSBPX1JEV1IgfCBPX0NMT0VYRUMsXG4rXHR9O1xuK1xuK1x0aWYgKGlvY3RsKGhlYXBfZmQsIERNQV9IRUFQX0lPQ1RMX0FMTE9DLCBcdTAwMjZkYXRhKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIGRhdGEuZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpXG4re1xuK1x0aW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7XG4rXHRpbnQgcmMgPSBLU0ZUX0ZBSUwsIGluX2NnID0gMDtcbitcdHNpemVfdCBzaXplID0gNFVMIFx1MDAzY1x1MDAzYyAyMDtcbitcdGxvbmcgYmVmb3JlLCBhZnRlcjtcbitcdGNoYXIgKmNnO1xuK1xuK1x0Y2cgPSBjZ19uYW1lKHJvb3QsIFwibWVtY2dfY21hX2NoYXJnZVwiKTtcbitcdGlmICghY2cpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19jcmVhdGUoY2cpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGluX2NnID0gMTtcbitcbitcdGhlYXBfZmQgPSBvcGVuKENNQV9IRUFQX0RFRkFVTFRfUEFUSCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xuK1x0aWYgKGhlYXBfZmQgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgb3BlbiBDTUEgaGVhcCAoJW0pXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRiZWZvcmUgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTtcbitcbitcdGJ1Zl9mZCA9IGNtYV9oZWFwX2FsbG9jKGhlYXBfZmQsIHNpemUpO1xuK1x0aWYgKGJ1Zl9mZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCBhbGxvY2F0ZSBpbiBDTUEgaGVhcCAoJW0pXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpO1xuK1xuK1x0aWYgKGFmdGVyIC0gYmVmb3JlIFx1MDAzYyAobG9uZylzaXplKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFxuK1x0XHRcdFwiaW52YWxpZCBDTUEgY291bnRlciBhZnRlciBjaGFyZ2U6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkXFxuXCIsXG4rXHRcdFx0YmVmb3JlLCBhZnRlcik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGNsb3NlKGJ1Zl9mZCk7XG4rXHRidWZfZmQgPSAtMTtcbitcbitcdGFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7XG4rXHRpZiAoIXZhbHVlc19jbG9zZShiZWZvcmUsIGFmdGVyLCAzKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcbitcdFx0XHRcImludmFsaWQgQ01BIGNvdW50ZXIgYWZ0ZXIgdW5jaGFyZ2U6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkXFxuXCIsXG4rXHRcdFx0YmVmb3JlLCBhZnRlcik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHJjID0gS1NGVF9QQVNTO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoYnVmX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoYnVmX2ZkKTtcbitcdGlmIChoZWFwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaGVhcF9mZCk7XG4rXG4rXHRpZiAoaW5fY2cpXG4rXHRcdGNnX2VudGVyX2N1cnJlbnQocm9vdCk7XG4rXHRjZ19kZXN0cm95KGNnKTtcbitcdGZyZWUoY2cpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfY21hX2xpbWl0KGNvbnN0IGNoYXIgKnJvb3QpXG4re1xuK1x0aW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7XG4rXHRpbnQgcmMgPSBLU0ZUX0ZBSUwsIGluX2NnID0gMDtcbitcdHNpemVfdCBzaXplID0gNFVMIFx1MDAzY1x1MDAzYyAyMDtcbitcdGNoYXIgKmNnO1xuK1xuK1x0Y2cgPSBjZ19uYW1lKHJvb3QsIFwibWVtY2dfY21hX2xpbWl0XCIpO1xuK1x0aWYgKCFjZylcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aW5fY2cgPSAxO1xuK1xuK1x0aWYgKGNnX3dyaXRlKGNnLCBDTUFfUkVTRVJWRURfTUFYLCBcIjJNXCIpKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IHNldCBDTUEgbGltaXQgKCVtKVxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0aGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoaGVhcF9mZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGJ1Zl9mZCA9IGNtYV9oZWFwX2FsbG9jKGhlYXBfZmQsIHNpemUpO1xuK1x0aWYgKGJ1Zl9mZCBcdTAwM2U9IDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJDTUEgbGltaXQgbm90IGVuZm9yY2VkLlxcblwiKTtcbitcdFx0Y2xvc2UoYnVmX2ZkKTtcbitcdH0gZWxzZVxuK1x0XHRyYyA9IEtTRlRfUEFTUztcbitcbitjbGVhbnVwOlxuK1x0aWYgKGhlYXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShoZWFwX2ZkKTtcbitcbitcdGlmIChpbl9jZylcbitcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbitcdGNnX2Rlc3Ryb3koY2cpO1xuK1x0ZnJlZShjZyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuK3N0YXRpYyBsb25nIGZpbmRfbGFyZ2VzdF9odWdlcGFnZV9zaXplX2tiKHZvaWQpXG4re1xuK1x0RElSICpkaXI7XG4rXHRzdHJ1Y3QgZGlyZW50ICplbnRyeTtcbitcdGxvbmcgbWF4X3NpemUgPSAwO1xuK1xuK1x0ZGlyID0gb3BlbmRpcihIVUdFUEFHRVNfRElSKTtcbitcdGlmICghZGlyKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHR3aGlsZSAoKGVudHJ5ID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7XG4rXHRcdGxvbmcgc2l6ZTtcbitcbitcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwiaHVnZXBhZ2VzLSVsZGtCXCIsIFx1MDAyNnNpemUpID09IDEpIHtcbitcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgbWF4X3NpemUpXG4rXHRcdFx0XHRtYXhfc2l6ZSA9IHNpemU7XG4rXHRcdH1cbitcdH1cbitcdGNsb3NlZGlyKGRpcik7XG4rXG4rXHRyZXR1cm4gbWF4X3NpemUgXHUwMDNlIDAgPyBtYXhfc2l6ZSA6IC0xO1xuK31cbitcbitzdGF0aWMgbG9uZyByZWFkX3N5c2ZzX2xvbmcoY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRGSUxFICpmO1xuK1x0bG9uZyB2YWwgPSAtMTtcbitcbitcdGYgPSBmb3BlbihwYXRoLCBcInJcIik7XG4rXHRpZiAoIWYpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChmc2NhbmYoZiwgXCIlbGRcIiwgXHUwMDI2dmFsKSAhPSAxKVxuK1x0XHR2YWwgPSAtMTtcbitcdGZjbG9zZShmKTtcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoLCBsb25nIHZhbClcbit7XG4rXHRGSUxFICpmO1xuK1x0aW50IHJjO1xuK1xuK1x0ZiA9IGZvcGVuKHBhdGgsIFwid1wiKTtcbitcdGlmICghZilcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmMgPSBmcHJpbnRmKGYsIFwiJWxkXCIsIHZhbCk7XG4rXHRmY2xvc2UoZik7XG4rXHRyZXR1cm4gcmMgXHUwMDNjIDAgPyAtMSA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9odWdldGxiX2NtYV9jaGFyZ2UoY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDtcbitcdGxvbmcgaHBhZ2Vfc2l6ZV9rYiwgaHBhZ2Vfc2l6ZV9ieXRlcztcbitcdGxvbmcgb3JpZ19uciA9IC0xLCBuZXdfbnIsIGJlZm9yZSwgYWZ0ZXI7XG4rXHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xuK1x0Y2hhciAqY2c7XG4rXG4rXHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcbitcdGlmIChocGFnZV9zaXplX2tiIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwibm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxcblwiKTtcbitcdFx0cmV0dXJuIEtTRlRfU0tJUDtcbitcdH1cbitcdGhwYWdlX3NpemVfYnl0ZXMgPSBocGFnZV9zaXplX2tiICogMTAyNDtcbitcbitcdHNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSxcbitcdFx0IEhVR0VQQUdFU19ESVIgXCIvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlc1wiLCBocGFnZV9zaXplX2tiKTtcbitcbitcdGNnID0gY2dfbmFtZShyb290LCBcIm1lbWNnX2h1Z2V0bGJfY21hX2NoYXJnZVwiKTtcbitcdGlmICghY2cpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19jcmVhdGUoY2cpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGluX2NnID0gMTtcbitcbitcdGlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiaHVnZXRsYiBDTUEgY291bnRlcnMgbm90IGF2YWlsYWJsZVxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0b3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcbitcdGlmIChvcmlnX25yIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IHJlYWQgJXNcXG5cIiwgbnJfcGF0aCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XG4rXG4rXHRpZiAod3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICsgMSkpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgd3JpdGUgJXNcXG5cIiwgbnJfcGF0aCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdG5ld19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcbitcdGlmIChuZXdfbnIgXHUwMDNjPSBvcmlnX25yKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFpbGVkIHRvIGFsbG9jYXRlIGEgaHVnZXBhZ2VcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHJjID0gS1NGVF9GQUlMO1xuK1x0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpO1xuK1xuK1x0aWYgKGFmdGVyIC0gYmVmb3JlIFx1MDAzYyBocGFnZV9zaXplX2J5dGVzKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFxuK1x0XHRcdFwiaHVnZXRsYiBDTUEgY291bnRlciBub3QgY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGQgZXhwZWN0ZWQgKyVsZFxcblwiLFxuK1x0XHRcdGJlZm9yZSwgYWZ0ZXIsIGhwYWdlX3NpemVfYnl0ZXMpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHR3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpO1xuK1xuK1x0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpO1xuK1x0aWYgKCF2YWx1ZXNfY2xvc2UoYmVmb3JlLCBhZnRlciwgMykpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXG4rXHRcdFx0XCJodWdldGxiIENNQSBjb3VudGVyIG5vdCB1bmNoYXJnZWQ6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkXFxuXCIsXG4rXHRcdFx0YmVmb3JlLCBhZnRlcik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHJjID0gS1NGVF9QQVNTO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAob3JpZ19uciBcdTAwM2U9IDApXG4rXHRcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7XG4rXG4rXHRpZiAoaW5fY2cpXG4rXHRcdGNnX2VudGVyX2N1cnJlbnQocm9vdCk7XG4rXHRjZ19kZXN0cm95KGNnKTtcbitcdGZyZWUoY2cpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDtcbitcdGxvbmcgaHBhZ2Vfc2l6ZV9rYjtcbitcdGxvbmcgb3JpZ19uciwgbmV3X25yO1xuK1x0Y2hhciBucl9wYXRoW1BBVEhfTUFYXTtcbitcdGNoYXIgKmNnO1xuK1xuK1x0aHBhZ2Vfc2l6ZV9rYiA9IGZpbmRfbGFyZ2VzdF9odWdlcGFnZV9zaXplX2tiKCk7XG4rXHRpZiAoaHBhZ2Vfc2l6ZV9rYiBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIm5vIGh1Z2VwYWdlIHNpemUgZm91bmRcXG5cIik7XG4rXHRcdHJldHVybiBLU0ZUX1NLSVA7XG4rXHR9XG4rXG4rXHRzbnByaW50Zihucl9wYXRoLCBzaXplb2YobnJfcGF0aCksXG4rXHRcdCBIVUdFUEFHRVNfRElSIFwiL2h1Z2VwYWdlcy0lbGRrQi9ucl9odWdlcGFnZXNcIiwgaHBhZ2Vfc2l6ZV9rYik7XG4rXG4rXHRjZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ19odWdldGxiX2NtYV9saW1pdFwiKTtcbitcdGlmICghY2cpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19jcmVhdGUoY2cpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGluX2NnID0gMTtcbitcbitcdGlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX01BWCkgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRpZiAoY2dfd3JpdGUoY2csIEhVR0VUTEJfQ01BX01BWCwgXCIwXCIpKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IHNldCBodWdldGxiIENNQSBsaW1pdFxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0b3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcbitcdGlmIChvcmlnX25yIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IHJlYWQgJXNcXG5cIiwgbnJfcGF0aCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19uciArIDEpO1xuK1x0bmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuK1xuK1x0cmMgPSBLU0ZUX0ZBSUw7XG4rXHRpZiAobmV3X25yIFx1MDAzZSBvcmlnX25yKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiaHVnZXRsYiBDTUEgbGltaXQgbm90IGVuZm9yY2VkXFxuXCIpO1xuK1x0XHR3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSBLU0ZUX1BBU1M7XG4rXHR9XG4rXG4rY2xlYW51cDpcbitcdGlmIChpbl9jZylcbitcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbitcdGNnX2Rlc3Ryb3koY2cpO1xuK1x0ZnJlZShjZyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKyNkZWZpbmUgVCh4KSB7IHgsICN4IH1cbitzdHJ1Y3QgY21hX21lbWNnX3Rlc3RzIHtcbitcdGludCAoKmZuKShjb25zdCBjaGFyICpyb290KTtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rfSB0ZXN0c1tdID0ge1xuK1x0VCh0ZXN0X2NtYV9jaGFyZ2UpLFxuK1x0VCh0ZXN0X2NtYV9saW1pdCksXG4rXHRUKHRlc3RfaHVnZXRsYl9jbWFfY2hhcmdlKSxcbitcdFQodGVzdF9odWdldGxiX2NtYV9saW1pdCksXG4rfTtcbisjdW5kZWYgVFxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4re1xuK1x0Y2hhciByb290W1BBVEhfTUFYXTtcbitcdGludCBoYXNfbWVtb3J5X2NtYV9hY2MsIGk7XG4rXG4rXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7XG4rXG4rXHRoYXNfbWVtb3J5X2NtYV9hY2MgPSBwcm9jX21vdW50X2NvbnRhaW5zKFwibWVtb3J5X2NtYV9hY2NvdW50aW5nXCIpO1xuK1x0aWYgKGhhc19tZW1vcnlfY21hX2FjYyBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJjYW5ub3QgcXVlcnkgY2dyb3VwIG1vdW50IG9wdGlvbi5cXG5cIik7XG4rXHRlbHNlIGlmICghaGFzX21lbW9yeV9jbWFfYWNjKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIkNNQSBhY2NvdW50aW5nIGlzIGRpc2FibGVkLlxcblwiKTtcbitcbitcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcImNncm91cGZzIGlzIG5vdCBhdmFpbGFibGUuXFxuXCIpO1xuK1xuK1x0aWYgKGNnX3JlYWRfc3Ryc3RyKHJvb3QsIFwiY2dyb3VwLmNvbnRyb2xsZXJzXCIsIFwibWVtb3J5XCIpKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIm1lbW9yeSBjb250cm9sbGVyIGlzIG5vdCBhdmFpbGFibGUgKENPTkZJR19DR1JPVVBfTUVNQ0c/KVxcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyArK2kpIHtcbitcdFx0c3dpdGNoICh0ZXN0c1tpXS5mbihyb290KSkge1xuK1x0XHRjYXNlIEtTRlRfUEFTUzpcbitcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCIlc1xcblwiLCB0ZXN0c1tpXS5uYW1lKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBLU0ZUX1NLSVA6XG4rXHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXNcXG5cIiwgdGVzdHNbaV0ubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwiJXNcXG5cIiwgdGVzdHNbaV0ubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MzRhOTVlZjVlMDc3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoXG5AQCAtMCwwICsxLDE5NyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIENvcHlyaWdodCAoYykgMjAyNiBSZWQgSGF0LCBJbmMuXG4rI1xuKyMgUnVuIGNncm91cCBtZW1vcnkgY29udHJvbGxlciBzZWxmdGVzdHMgaW5zaWRlIGEgdmlydG1lLW5nIFZNXG4rIyBEZXBlbmRlbmNpZXM6XG4rI1x0XHQqIHZpcnRtZS1uZ1xuKyNcdFx0KiBidXN5Ym94LXN0YXRpYyAodXNlZCBieSB2aXJ0bWUtbmcpXG4rI1x0XHQqIHFlbXVcdCh1c2VkIGJ5IHZpcnRtZS1uZylcbitcbitzZXQgLWV1byBwaXBlZmFpbFxuK1xuK3JlYWRvbmx5IFNDUklQVF9ESVI9XCIkKGNkIC1QIC0tIFwiJChkaXJuYW1lIC0tIFwiJHtCQVNIX1NPVVJDRVswXX1cIilcIiBcdTAwMjZcdTAwMjYgcHdkIC1QKVwiXG4rcmVhZG9ubHkgS0VSTkVMX0NIRUNLT1VUPVwiJChyZWFscGF0aCBcIiR7U0NSSVBUX0RJUn1cIi8uLi8uLi8uLi8uLi8pXCJcbitcbitzb3VyY2UgXCIke1NDUklQVF9ESVJ9XCIvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuK1xuK3JlYWRvbmx5IFNTSF9HVUVTVF9QT1JUPVwiJHtTU0hfR1VFU1RfUE9SVDotMjJ9XCJcbityZWFkb25seSBXQUlUX1BFUklPRD0zXG4rcmVhZG9ubHkgV0FJVF9QRVJJT0RfTUFYPTgwXG4rcmVhZG9ubHkgV0FJVF9UT1RBTD0kKChXQUlUX1BFUklPRCAqIFdBSVRfUEVSSU9EX01BWCkpXG4rcmVhZG9ubHkgUUVNVV9QSURGSUxFPVwiJChta3RlbXAgL3RtcC9xZW11X21lbWNnX3ZtdGVzdF9YWFhYLnBpZClcIlxuK3JlYWRvbmx5IFFFTVVfT1BUUz1cIiAtLXBpZGZpbGUgJHtRRU1VX1BJREZJTEV9IFwiXG4rXG4rQlVJTEQ9MFxuK1FFTVU9XCJxZW11LXN5c3RlbS0kKHVuYW1lIC1tKVwiXG4rVkVSQk9TRT0wXG4rU0hFTExfTU9ERT0wXG4rR1VFU1RfVFJFRT1cIiR7R1VFU1RfVFJFRTotJEtFUk5FTF9DSEVDS09VVH1cIlxuK1xuK3VzYWdlKCkge1xuK1x0Y2F0IFx1MDAzY1x1MDAzY0VPRlxuKyQwIFtPUFRJT05TXVxuKyAgICAtYiAgICAgICAgQnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgYmVmb3JlIGJvb3RpbmdcbisgICAgLXEgXHUwMDNjcWVtdVx1MDAzZSBRRU1VIGJpbmFyeS9wYXRoIChkZWZhdWx0OiAkUUVNVSlcbisgICAgLXMgICAgICAgIFN0YXJ0IGludGVyYWN0aXZlIHNoZWxsIGluIFZNXG4rICAgIC12ICAgICAgICBWZXJib3NlIG91dHB1dCAodm5nIGJvb3QgbG9ncyBvbiBzdGRvdXQpXG4rRU9GXG4rXHRleGl0IDFcbit9XG4rXG4rZGllKCkge1xuK1x0ZWNobyBcIiQqXCIgXHUwMDNlXHUwMDI2MlxuK1x0ZXhpdCBcIiR7S1NGVF9GQUlMfVwiXG4rfVxuK1xuK2NsZWFudXAoKSB7XG4rXHRpZiBbWyAtcyBcIiRRRU1VX1BJREZJTEVcIiBdXTsgdGhlblxuK1x0XHRwa2lsbCAtU0lHVEVSTSAtRiBcIiRRRU1VX1BJREZJTEVcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwgdHJ1ZVxuK1x0ZmlcbitcbitcdGlmIFtbIC1lIFwiJFFFTVVfUElERklMRVwiIF1dOyB0aGVuXG4rXHRcdHJtIC1mIFwiJFFFTVVfUElERklMRVwiXG4rXHRmaVxuK31cbitcbit2bV9zc2goKSB7XG4rXHRzdGRidWYgLW9MIHNzaCAtcSBcXFxuK1x0XHQtRiBcIiRIT01FLy5jYWNoZS92aXJ0bWUtbmcvLnNzaC92aXJ0bWUtbmctc3NoLmNvbmZcIiBcXFxuK1x0XHQtbCByb290IFwidmlydG1lLW5nJSRTU0hfR1VFU1RfUE9SVFwiIFxcXG4rXHRcdFwiJEBcIlxuK31cbitcbitjaGVja19kZXBzKCkge1xuK1x0Zm9yIGRlcCBpbiB2bmcgXCIkUUVNVVwiIGJ1c3lib3ggcGtpbGwgc3NoOyBkb1xuK1x0XHRpZiAhIGNvbW1hbmQgLXYgXCIkZGVwXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRcdFx0ZWNobyBcInNraXA6IGRlcGVuZGVuY3kgJGRlcCBub3QgZm91bmRcIlxuK1x0XHRcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitcdFx0ZmlcbitcdGRvbmVcbit9XG4rXG4raGFuZGxlX2J1aWxkKCkge1xuK1x0aWYgW1sgISBcIiRCVUlMRFwiIC1lcSAxIF1dOyB0aGVuXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcbitcdGlmIFtbICEgLWQgXCIkS0VSTkVMX0NIRUNLT1VUXCIgXV07IHRoZW5cbitcdFx0ZWNobyBcIi1iIHJlcXVpcmVzICQwIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgc291cmNlIHRyZWVcIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgMVxuK1x0ZmlcbitcbitcdHB1c2hkIFwiJEtFUk5FTF9DSEVDS09VVFwiIFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuK1xuK1x0aWYgISB2bmcgLS1rY29uZmlnIC0tY29uZmlnIFwiJFNDUklQVF9ESVJcIi9jb25maWc7IHRoZW5cbitcdFx0ZGllIFwiZmFpbGVkIHRvIGdlbmVyYXRlIC5jb25maWcgZm9yIGtlcm5lbCBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcIlxuK1x0ZmlcbitcbitcdGlmICEgbWFrZSAtalwiJChucHJvYylcIjsgdGhlblxuK1x0XHRkaWUgXCJmYWlsZWQgdG8gYnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgKCRLRVJORUxfQ0hFQ0tPVVQpXCJcbitcdGZpXG4rXG4rXHRwb3BkIFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuK31cbitcbit2bV9zdGFydCgpIHtcbitcdGxvY2FsIGxvZ2ZpbGU9L2Rldi9udWxsXG4rXHRsb2NhbCB2ZXJib3NlX29wdD1cIlwiXG4rXHRsb2NhbCBrZXJuZWxfb3B0PVwiXCJcbitcbitcdGlmIFtbIFwiJFZFUkJPU0VcIiAtZXEgMSBdXTsgdGhlblxuK1x0XHR2ZXJib3NlX29wdD1cIi0tdmVyYm9zZVwiXG4rXHRcdGxvZ2ZpbGU9L2Rldi9zdGRvdXRcbitcdGZpXG4rXG4rXHRpZiBbWyBcIiRCVUlMRFwiIC1lcSAxIF1dOyB0aGVuXG4rXHRcdGtlcm5lbF9vcHQ9XCIke0tFUk5FTF9DSEVDS09VVH1cIlxuK1x0ZmlcbitcbitcdHZuZyBcXFxuK1x0XHQtLXJ1biBcXFxuK1x0XHQke2tlcm5lbF9vcHR9IFxcXG4rXHRcdCR7dmVyYm9zZV9vcHR9IFxcXG4rXHRcdC0tcWVtdS1vcHRzPVwiJFFFTVVfT1BUU1wiIFxcXG4rXHRcdC0tcWVtdT1cIiQoY29tbWFuZCAtdiBcIiRRRU1VXCIpXCIgXFxcbitcdFx0LS11c2VyIHJvb3QgXFxcbitcdFx0LS1zc2ggXCIkU1NIX0dVRVNUX1BPUlRcIiBcXFxuK1x0XHQtLW1lbW9yeSAzRyBcXFxuK1x0XHQtLWFwcGVuZCBcImNtYT02NE0gaHVnZXRsYl9jbWE9MUcgaHVnZXRsYl9jbWFfb25seT0xXCIgXFxcbitcdFx0LS1ydyBcdTAwMjZcdTAwM2VcIiRsb2dmaWxlXCIgXHUwMDI2XG4rXG4rXHRsb2NhbCB2bmdfcGlkPSQhXG4rXHRsb2NhbCBlbGFwc2VkPTBcbitcbitcdHdoaWxlIFtbICEgLXMgXCIkUUVNVV9QSURGSUxFXCIgXV07IGRvXG4rXHRcdGtpbGwgLTAgXCIkdm5nX3BpZFwiIDJcdTAwM2UvZGV2L251bGwgfHwgXFxcbitcdFx0XHRkaWUgXCJ2bmcgZXhpdGVkIGVhcmx5OyBmYWlsZWQgdG8gYm9vdCBWTVwiXG4rXHRcdFtbIFwiJGVsYXBzZWRcIiAtZ2UgXCIkV0FJVF9UT1RBTFwiIF1dIFx1MDAyNlx1MDAyNiBcXFxuK1x0XHRcdGRpZSBcInRpbWVkIG91dCB3YWl0aW5nIGZvciBWTSBib290XCJcbitcdFx0c2xlZXAgMVxuK1x0XHRlbGFwc2VkPSQoKGVsYXBzZWQgKyAxKSlcbitcdGRvbmVcbit9XG4rXG4rdm1fd2FpdF9mb3Jfc3NoKCkge1xuK1x0bG9jYWwgaT0wXG4rXHR3aGlsZSB0cnVlOyBkb1xuK1x0XHR2bV9zc2ggLS0gdHJ1ZSBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdFx0aT0kKChpICsgMSkpXG4rXHRcdFtbIFwiJHtpfVwiIC1ndCBcIiRXQUlUX1BFUklPRF9NQVhcIiBdXSBcdTAwMjZcdTAwMjYgXFxcbitcdFx0XHRkaWUgXCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgZ3Vlc3Qgc3NoXCJcbitcdFx0c2xlZXAgXCIkV0FJVF9QRVJJT0RcIlxuK1x0ZG9uZVxuK31cbitcbitjaGVja19ndWVzdF9yZXF1aXJlbWVudHMoKSB7XG4rXHR2bV9zc2ggLS0gXCJncmVwIC1xIG1lbW9yeSAvc3lzL2ZzL2Nncm91cC9jZ3JvdXAuY29udHJvbGxlcnNcIiBcXFxuK1x0XHR8fCBkaWUgXCJtZW1vcnkgY29udHJvbGxlciBub3QgYXZhaWxhYmxlIChDT05GSUdfTUVNQ0c/KVwiXG4rXHR2bV9zc2ggLS0gXCJbWyAtZSAvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiBdXVwiIFxcXG4rXHRcdHx8IGRpZSBcIkNNQSBoZWFwIG5vdCBhdmFpbGFibGUgKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BPyBjbWE9IGNtZGxpbmU/KVwiXG4rfVxuK1xuK3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nKCkge1xuK1x0dm1fc3NoIC0tIFwibW91bnQgLW8gcmVtb3VudCxtZW1vcnlfY21hX2FjY291bnRpbmcgL3N5cy9mcy9jZ3JvdXBcIiBcXFxuK1x0XHR8fCBkaWUgXCJmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeV9jbWFfYWNjb3VudGluZ1wiXG4rXHR2bV9zc2ggLS0gXCJlY2hvICttZW1vcnkgXHUwMDNlIC9zeXMvZnMvY2dyb3VwL2Nncm91cC5zdWJ0cmVlX2NvbnRyb2xcIiBcXFxuK1x0XHR8fCBkaWUgXCJmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeSBjb250cm9sbGVyXCJcbit9XG4rXG4rcnVuX3Rlc3QoKSB7XG4rXHR2bV9zc2ggLS0gXCJjZCAnJEdVRVNUX1RSRUUnIFx1MDAyNlx1MDAyNiBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwXCJcbitcdHZtX3NzaCAtLSBcImNkICckR1VFU1RfVFJFRScgXHUwMDI2XHUwMDI2IG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMgVEFSR0VUUz1jZ3JvdXAgcnVuX3Rlc3RzXCJcbit9XG4rXG4rd2hpbGUgZ2V0b3B0cyBcIjpodnE6c2JcIiBvcHQ7IGRvXG4rXHRjYXNlIFwiJG9wdFwiIGluXG4rXHR2KSBWRVJCT1NFPTEgOztcbitcdHEpIFFFTVU9XCIke09QVEFSR31cIiA7O1xuK1x0YikgQlVJTEQ9MSA7O1xuK1x0cykgU0hFTExfTU9ERT0xIDs7XG4rXHRofCopIHVzYWdlIDs7XG4rXHRlc2FjXG4rZG9uZVxuK1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rY2hlY2tfZGVwc1xuK2hhbmRsZV9idWlsZFxuK2VjaG8gXCJCb290aW5nIHZpcnRtZS1uZyBWTS4uLlwiXG4rdm1fc3RhcnRcbit2bV93YWl0X2Zvcl9zc2hcbitlY2hvIFwiVk0gaXMgcmVhY2hhYmxlIHZpYSBTU0guXCJcbitcbitpZiBbWyBcIiRTSEVMTF9NT0RFXCIgLWVxIDEgXV07IHRoZW5cbitcdGVjaG8gXCJTdGFydGluZyBpbnRlcmFjdGl2ZSBzaGVsbCBpbiBWTS4gRXhpdCB0byBzdG9wIFZNLlwiXG4rXHR2bV9zc2ggLXQgLS0gXCJjZCAnJEdVRVNUX1RSRUUnIFx1MDAyNlx1MDAyNiBleGVjIGJhc2ggLS1ub3Byb2ZpbGUgLS1ub3JjXCJcbitcdGV4aXQgXCIkS1NGVF9QQVNTXCJcbitmaVxuK1xuK2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50c1xuK3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nXG4rXG4rZWNobyBcIlJ1bm5pbmcgY2dyb3VwIHNlbGZ0ZXN0cyBpbiBWTS4uLlwiXG4rcnVuX3Rlc3RcbitlY2hvIFwiUEFTUzogY2dyb3VwIHNlbGZ0ZXN0cyBjb21wbGV0ZWRcIlxuK2V4aXQgXCIkS1NGVF9QQVNTXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEyOjQwLjQwOTIwMTgxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5ODE0MzAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IENNQSBNZW1vcnkgQWNjb3VudGluZyBpbiBjZ3JvdXAgdjIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgc2NyZWFtcyBcImZ1enogdGhpcyFcIi4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtb3J5X2NtYV9hY2NvdW50aW5nYCBtb3VudCBvcHRpb24gZm9yIGNncm91cCB2Mi4gRXNzZW50aWFsbHksIGVuYWJsaW5nIHRoaXMgYWNjb3VudHMgQ01BIG1lbW9yeSB1c2FnZSB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyLCBhbmQgaXQgZXhwb3NlcyBwZXItQ01BIGFyZWEgY291bnRlcnMuIENydWNpYWxseSwgdGhlIGNoYW5nZXMgdG91Y2ggY29yZSBrZXJuZWwgYXJlYXMgbGlrZSBjZ3JvdXAsIHRoZSBtZW1vcnkgY29udHJvbGxlciwgYW5kIENNQSBpdHNlbGYuIEdpdmVuIHRoYXQgQ01BICpjYW4qIGJlIHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhhdCdzIGEgYmlnIGdyZWVuIGZsYWcuIFRoZSBleGlzdGVuY2Ugb2YgYSBuZXcgc2VsZnRlc3QsIGB0ZXN0X2NtYV9tZW1jZy5jYCwgdXNpbmcgYC9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uYCBhbmQgYGh1Z2V0bGJfY21hYCBqdXN0IHJlaW5mb3JjZXMgdGhpcy4gVGhpcyBwYXRjaCAqZGVtYW5kcyogZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHBpbnBvaW50aW5nIHRoZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cy4gTG9va2luZyBhdCB0aGUgZGlmZiwgYSBmZXcgc3RhbmQgb3V0OiBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCwgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCwgYW5kIHRoZSBtb2RpZmllZCBgY21hX3JlbGVhc2VgIGFuZCBgY21hX3JlbGVhc2VfZnJvemVuYC4gV2hpbGUgdGhlIGxhdHRlciB0d28gaGF2ZSBzaWduYXR1cmUgY2hhbmdlcywgSSdtIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgbmV3IGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgIGZ1bmN0aW9ucy5cblxuSSBjb25maXJtZWQgdGhhdCBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCBhcmUgKm5vdCogc3RhdGljLCB3aGljaCBpcyBpZGVhbCBmb3IgcG90ZW50aWFsIGZ1enppbmcuIGBfX2NtYV9hbGxvY19mcm96ZW5gIGNhbGxzIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgX19jbWFfcmVsZWFzZV9mcm96ZW5gIGNhbGxzIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAsIG1ha2luZyB0aGVzZSBpbmRpcmVjdGx5IHRhcmdldHMuXG5cbk5vdyBmb3IgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIGFsdGVycyB0aGUgc2VsZnRlc3RzIGNvbmZpZywgbWFraW5nIGl0IGNsZWFyIHRoYXQgYENPTkZJR19DTUFgLCBgQ09ORklHX0RNQV9DTUFgLCBgQ09ORklHX0RNQUJVRl9IRUFQU2AsIGBDT05GSUdfRE1BQlVGX0hFQVBTX0NNQWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFsbCBlc3NlbnRpYWwuIE9idmlvdXNseSwgYENPTkZJR19NRU1DR2AgaXMgYWxzbyByZXF1aXJlZC4gSSd2ZSBhbHNvIHZlcmlmaWVkIHRoaXMgd2l0aCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgYCNpZmRlZiBDT05GSUdfQ01BYC5cblxuVGltZSB0byBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MsIGJ1dCBJIGFtIGNvbmZpZGVudC4gSSB3aWxsIHVzZSBhIGdyZXBwZXIgb3Igc2ltaWxhciB0b29sIHRvIG1ha2Ugc3VyZSBJIGRpZCBub3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjo1MC4zOTA2MzU1MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NTE5NzM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2NoYXJnZV9jbWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjY2PWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjY5OmludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjcwLVxcdFxcdFxcdCAgc3RydWN0IGNtYSAqY21hKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNjY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTcxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNzI6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGNtYSAqY21hKVxcbi0tXFxubW0vY21hLmM9ODYzPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19jbWFfYWxsb2NfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSxcXG4tLVxcbm1tL2NtYS5jLTkwNi1cXG5tbS9jbWEuYzo5MDc6XFx0aWYgKHBhZ2UgXFx1MDAyNlxcdTAwMjYgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHBhZ2UsIGNvdW50LCBjbWEpKSB7XFxubW0vY21hLmMtOTA4LVxcdFxcdGZyZWVfY29udGlnX2Zyb3plbl9yYW5nZShwYWdlX3RvX3BmbihwYWdlKSwgY291bnQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMzc9c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfY21hKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0MS1cXG5tbS9tZW1jb250cm9sLmM6NTI0MjppbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxcbm1tL21lbWNvbnRyb2wuYy01MjQzLVxcdFxcdFxcdCAgc3RydWN0IGNtYSAqY21hKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjo1Mi4xNjU4MzgxNDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg0NDM4NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQ01BIE1lbW9yeSBBY2NvdW50aW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGVuYWJsZWQuIEkndmUgbm90aWNlZCB0aGF0IHRoZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYywgYW5kIHRoZXkncmUgKm5vdCogYmVpbmcgaW5saW5lZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcgZm9yIG1lLiBOb24tc3RhdGljLCBub24taW5saW5lZCBtZWFucyB0aGV5IGhhdmUgd2lkZXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBjYWxscyBmcm9tIHBsYWNlcyBJIG1pZ2h0IG5vdCBpbW1lZGlhdGVseSBleHBlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQ01BLiBUaGlzIGxhY2sgb2Ygb3B0aW1pemF0aW9uIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wYWN0cywgb3IgYXQgbGVhc3QgcmFpc2VzIGEgcmVkIGZsYWcgaW4gdGVybXMgb2YgY29udHJvbCBmbG93LlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGBjbWFfcmVsZWFzZWAgYW5kIGBjbWFfcmVsZWFzZV9mcm96ZW5gIGludGVyYWN0IHdpdGggdGhlbS4gVGhvc2UgcmVsZWFzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGluIG1hbmFnaW5nIENNQSBtZW1vcnksIGFuZCB0aGV5J3JlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBJJ20gcXVlc3Rpb25pbmcuIEJ5IHRyYWNpbmcgdGhlIGNhbGwgZ3JhcGgsIEkgY2FuIGhvcGVmdWxseSBzZWUgd2hlcmUgdGhlIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGhhcHBlbiB3aXRoaW4gdGhlIHJlbGVhc2UgcHJvY2Vzcy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZCBhcyBpbnRlbmRlZCwgYW5kIGlmIHNvLCB1bmRlcnN0YW5kIHRoZSBwYXRoIG9mIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjo1Ni4zNTAyODA1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIwNDkxODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9yZWxlYXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X2J1aWx0aW4uYz02Nz12b2lkIGt2bV9mcmVlX2hwdF9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfYnVpbHRpbi5jLTY4LXtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9idWlsdGluLmM6Njk6XFx0Y21hX3JlbGVhc2Uoa3ZtX2NtYSwgcGFnZSwgbnJfcGFnZXMpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X2J1aWx0aW4uYy03MC19XFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTEwMD1ib29sIGJjbWFfd2FpdF92YWx1ZShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTExOC1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjExOTpzdGF0aWMgdm9pZCBiY21hX3JlbGVhc2VfY29yZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMTIwLXtcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM9MjM4PXZvaWQgYmNtYV9wcmVwYXJlX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSlcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMjQwLVxcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZjb3JlLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvYmNtYS9tYWluLmM6MjQxOlxcdGNvcmUtXFx1MDAzZWRldi5yZWxlYXNlID0gYmNtYV9yZWxlYXNlX2NvcmVfZGV2O1xcbmRyaXZlcnMvYmNtYS9tYWluLmMtMjQyLVxcdGNvcmUtXFx1MDAzZWRldi5idXMgPSBcXHUwMDI2YmNtYV9idXNfdHlwZTtcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jPTI1MD1zdGF0aWMgdm9pZCBjbWFfaGVhcF9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jLTI2My1cXHQvKiByZWxlYXNlIG1lbW9yeSAqL1xcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jOjI2NDpcXHRjbWFfcmVsZWFzZShjbWFfaGVhcC1cXHUwMDNlY21hLCBidWZmZXItXFx1MDAzZWNtYV9wYWdlcywgYnVmZmVyLVxcdTAwM2VwYWdlY291bnQpO1xcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jLTI2NS1cXHRrZnJlZShidWZmZXIpO1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmM9MjgxPXN0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqY21hX2hlYXBfYWxsb2NhdGUoc3RydWN0IGRtYV9oZWFwICpoZWFwLFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmMtMzYwLWZyZWVfY21hOlxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jOjM2MTpcXHRjbWFfcmVsZWFzZShjbWFfaGVhcC1cXHUwMDNlY21hLCBjbWFfcGFnZXMsIHBhZ2Vjb3VudCk7XFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmMtMzYyLWZyZWVfYnVmZmVyOlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9NTg3PXN0YXRpYyB2b2lkIGNtYV9hdHRhY2hfdG9fZGV2KHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy01OTUtXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6NTk2OnN0YXRpYyB2b2lkIGNtYV9yZWxlYXNlX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTU5Ny17XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYz0xOTYzPXN0YXRpYyB2b2lkIGNtYV9jYW5jZWxfb3BlcmF0aW9uKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy0xOTg5LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjE5OTA6c3RhdGljIHZvaWQgY21hX3JlbGVhc2VfcG9ydChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTE5OTEte1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9MjA1Nz1zdGF0aWMgdm9pZCBfZGVzdHJveV9pZChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMtMjA3Mi1cXHRcXHRjbWFfbGVhdmVfbWNfZ3JvdXBzKGlkX3ByaXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjIwNzM6XFx0XFx0Y21hX3JlbGVhc2VfZGV2KGlkX3ByaXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzQtXFx0fVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzUtXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6MjA3NjpcXHRjbWFfcmVsZWFzZV9wb3J0KGlkX3ByaXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzctXFx0Y21hX2lkX3B1dChpZF9wcml2KTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jPTQwMTE9c3RhdGljIGludCByZG1hX2JpbmRfYWRkcl9kc3Qoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTQwNjMtXFx0aWYgKGlkX3ByaXYtXFx1MDAzZWNtYV9kZXYpXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6NDA2NDpcXHRcXHRjbWFfcmVsZWFzZV9kZXYoaWRfcHJpdik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMtNDA2NS1lcnIxOlxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jPTgxPXN0YXRpYyB2b2lkIHZtY3BfcmVzcG9uc2VfZnJlZShzdHJ1Y3Qgdm1jcF9zZXNzaW9uICpzZXNzaW9uKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTkxLVxcdFxcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc2Vzc2lvbi1cXHUwMDNlcmVzcG9uc2UpO1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYzo5MjpcXHRcXHRjbWFfcmVsZWFzZSh2bWNwX2NtYSwgcGFnZSwgbnJfcGFnZXMpO1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy05My1cXHRcXHRzZXNzaW9uLVxcdTAwM2VjbWFfYWxsb2MgPSAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jbWEuaD01MD1leHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTUxLVxcdFxcdFxcdCAgICAgIGJvb2wgbm9fd2Fybik7XFxuaW5jbHVkZS9saW51eC9jbWEuaDo1MjpleHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7XFxuaW5jbHVkZS9saW51eC9jbWEuaC01My1cXG4tLVxcbmluY2x1ZGUvbGludXgvY21hLmg9NTY9c3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvY21hLmg6NTc6Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuaW5jbHVkZS9saW51eC9jbWEuaC01OC1cXHRcXHR1bnNpZ25lZCBsb25nIGNvdW50KTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NtYS5oLTEwLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NtYS5oOjExOlRSQUNFX0VWRU5UKGNtYV9yZWxlYXNlLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NtYS5oLTEyLVxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM9Mzg1PWJvb2wgZG1hX3JlbGVhc2VfZnJvbV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2VzLFxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtMzg3LXtcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzozODg6XFx0cmV0dXJuIGNtYV9yZWxlYXNlKGRldl9nZXRfY21hX2FyZWEoZGV2KSwgcGFnZXMsIGNvdW50KTtcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0zODktfVxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM9NDEzPXN0cnVjdCBwYWdlICpkbWFfYWxsb2NfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTAtICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ1MTogKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDUyLSAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrIF9fZnJlZV9wYWdlcygpXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYz00NTU9dm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDYwLVxcdGlmIChkZXYtXFx1MDAzZWNtYV9hcmVhKSB7XFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDYxOlxcdFxcdGlmIChjbWFfcmVsZWFzZShkZXYtXFx1MDAzZWNtYV9hcmVhLCBwYWdlLCBjb3VudCkpXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDYyLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ2Ny0jaWZkZWYgQ09ORklHX0RNQV9OVU1BX0NNQVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ2ODpcXHRcXHRpZiAoY21hX3JlbGVhc2UoZG1hX2NvbnRpZ3VvdXNfbnVtYV9hcmVhW3BhZ2VfdG9fbmlkKHBhZ2UpXSxcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NjktXFx0XFx0XFx0XFx0XFx0cGFnZSwgY291bnQpKVxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDcxLSNlbmRpZlxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ3MjpcXHRcXHRpZiAoY21hX3JlbGVhc2UoZG1hX2NvbnRpZ3VvdXNfZGVmYXVsdF9hcmVhLCBwYWdlLCBjb3VudCkpXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDczLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2NtYS5jPTk2NT1zdGF0aWMgc3RydWN0IGNtYV9tZW1yYW5nZSAqZmluZF9jbWFfbWVtcmFuZ2Uoc3RydWN0IGNtYSAqY21hLFxcbi0tXFxubW0vY21hLmMtOTk4LVxcbm1tL2NtYS5jOjk5OTpzdGF0aWMgdm9pZCBfX2NtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcixcXG5tbS9jbWEuYy0xMDAwLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudClcXG4tLVxcbm1tL2NtYS5jLTEwMDktXFx0Y21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhjbWEsIGNvdW50KTtcXG5tbS9jbWEuYzoxMDEwOlxcdHRyYWNlX2NtYV9yZWxlYXNlKGNtYS1cXHUwMDNlbmFtZSwgcGZuLCBwYWdlcywgY291bnQpO1xcbm1tL2NtYS5jLTEwMTEtfVxcbi0tXFxubW0vY21hLmMtMTAxMy0vKipcXG5tbS9jbWEuYzoxMDE0OiAqIGNtYV9yZWxlYXNlKCkgLSByZWxlYXNlIGFsbG9jYXRlZCBwYWdlc1xcbm1tL2NtYS5jLTEwMTUtICogQGNtYTogICBDb250aWd1b3VzIG1lbW9yeSByZWdpb24gZm9yIHdoaWNoIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZC5cXG4tLVxcbm1tL2NtYS5jLTEwMjItICovXFxubW0vY21hLmM6MTAyMzpib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLFxcbm1tL2NtYS5jLTEwMjQtXFx0XFx0IHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5tbS9jbWEuYy0xMDM5LVxcbm1tL2NtYS5jOjEwNDA6XFx0X19jbWFfcmVsZWFzZV9mcm96ZW4oY21hLCBjbXIsIHBhZ2VzLCBjb3VudCk7XFxubW0vY21hLmMtMTA0MS1cXG4tLVxcbm1tL2NtYS5jLTEwNDMtfVxcbm1tL2NtYS5jOjEwNDQ6RVhQT1JUX1NZTUJPTF9HUEwoY21hX3JlbGVhc2UpO1xcbm1tL2NtYS5jLTEwNDUtXFxubW0vY21hLmM6MTA0Njpib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcyxcXG5tbS9jbWEuYy0xMDQ3LVxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5tbS9jbWEuYy0xMDU0LVxcbm1tL2NtYS5jOjEwNTU6XFx0X19jbWFfcmVsZWFzZV9mcm96ZW4oY21hLCBjbXIsIHBhZ2VzLCBjb3VudCk7XFxubW0vY21hLmMtMTA1Ni1cXG4tLVxcbm1tL2NtYV9kZWJ1Zy5jPTg5PXN0YXRpYyBpbnQgY21hX2ZyZWVfbWVtKHN0cnVjdCBjbWEgKmNtYSwgaW50IGNvdW50KVxcbi0tXFxubW0vY21hX2RlYnVnLmMtOTgtXFx0XFx0aWYgKG1lbS1cXHUwMDNlbiBcXHUwMDNjPSBjb3VudCkge1xcbm1tL2NtYV9kZWJ1Zy5jOjk5OlxcdFxcdFxcdGNtYV9yZWxlYXNlKGNtYSwgbWVtLVxcdTAwM2VwLCBtZW0tXFx1MDAzZW4pO1xcbm1tL2NtYV9kZWJ1Zy5jLTEwMC1cXHRcXHRcXHRjb3VudCAtPSBtZW0tXFx1MDAzZW47XFxuLS1cXG5tbS9jbWFfZGVidWcuYy0xMDItXFx0XFx0fSBlbHNlIGlmIChjbWEtXFx1MDAzZW9yZGVyX3Blcl9iaXQgPT0gMCkge1xcbm1tL2NtYV9kZWJ1Zy5jOjEwMzpcXHRcXHRcXHRjbWFfcmVsZWFzZShjbWEsIG1lbS1cXHUwMDNlcCwgY291bnQpO1xcbm1tL2NtYV9kZWJ1Zy5jLTEwNC1cXHRcXHRcXHRtZW0tXFx1MDAzZXAgKz0gY291bnQ7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiX2NtYS5jLTIyLXtcXG5tbS9odWdldGxiX2NtYS5jOjIzOlxcdFdBUk5fT05fT05DRSghY21hX3JlbGVhc2VfZnJvemVuKGh1Z2V0bGJfY21hW2ZvbGlvX25pZChmb2xpbyldLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjQtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEyOjU4LjE3MDc3NzgxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTg4MDYxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhpcyBNZW1vcnkgQ0dyb3VwcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgIOKAkyB0aG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGFsc28gbW9kaWZ5aW5nIGBjZ3JvdXAyX3BhcnNlX3BhcmFtYCBhbmQgYGFwcGx5X2Nncm91cF9yb290X2ZsYWdzYCB0byBoYW5kbGUgYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AuIEFuZCBpdCdzIGFkZGluZyBzb21lIG5ldyBzaG93L3dyaXRlIGZ1bmN0aW9ucyBmb3IgdGhlIGNncm91cGZzOiBgbWVtb3J5X2NtYV9jdXJyZW50X3Nob3dgLCBgbWVtb3J5X2NtYV9tYXhfc2hvd2AsIGFuZCBgbWVtb3J5X2NtYV9tYXhfd3JpdGVgLiBUaGVzZSBhcmUgc3RhdGljIGJ1dCByZWFjaGFibGUgdGhyb3VnaCB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGltcG9ydGFudC5cblxuVGhlIHJlYWwga2V5IGhlcmUgaXMgaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIHRyaWdnZXJlZCB2aWEgYGNtYV9hbGxvY2AgYW5kIGBjbWFfcmVsZWFzZWAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSBjaGFyZ2UvdW5jaGFyZ2UgY2FsbHMgYXJlIG1hZGUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjazogYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgaXNuJ3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIGF2YWlsYWJsZS4gQW5kIGBtZW1fY2dyb3VwX2NtYV9pbml0YCBpcyBhbiBpbml0Y2FsbCwgc28gdGhhdCdzIGludGVyZXN0aW5nIGZvciBzZXR1cC4gSSBzaG91bGQgcHJvYmFibHkgZnV6eiBgY2dyb3VwMl9wYXJzZV9wYXJhbWAgZm9yIG1vdW50IG9wdGlvbnMgbGF0ZXIuXG5cbk15IGluaXRpYWwgZm9jdXMgc3ltYm9scywgdGhlbiwgYXJlOlxuXG4qICAgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWBcbiogICBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgXG4qICAgYGNtYV9yZWxlYXNlYFxuKiAgIGBjbWFfcmVsZWFzZV9mcm96ZW5gXG4qICAgYGNtYV9hbGxvY2BcbiogICBgY21hX2FsbG9jX2Zyb3plbmBcbiogICBgY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZGBcblxuV2FpdCwgYGNtYV9hbGxvY2AgYW5kIGBjbWFfcmVsZWFzZWAgYXJlIGV4aXN0aW5nIGZ1bmN0aW9ucywgYnV0IHRoZWlyIGJlaGF2aW9yICppcyogY2hhbmdlZCBieSB0aGlzLiBBY3R1YWxseSwgdGhlIHNpZ25hdHVyZSBvZiBgY21hX3JlbGVhc2VgIGFuZCBgY21hX3JlbGVhc2VfZnJvemVuYCBoYXMgY2hhbmdlZC4gVGhlIG5ldyBsb2dpYyBpcyBpbiBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8ga25vdyB3aGF0J3MgcmVxdWlyZWQgZm9yIHRoaXMgdG8gYmUgYWN0aXZlLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIG1lbnRpb25zOiBgQ09ORklHX0NNQWAsIGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX0RNQV9DTUFgLCBgQ09ORklHX0RNQUJVRl9IRUFQU2AsIGBDT05GSUdfRE1BQlVGX0hFQVBTX0NNQWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIFRoZSBzZWxmdGVzdHMgdHJpZ2dlciBDTUEgYWxsb2NhdGlvbnMgd2l0aCB0aG9zZSwgZXNwZWNpYWxseSBgQ09ORklHX0RNQV9DTUFgLCBgQ09ORklHX0RNQUJVRl9IRUFQU2AsIGBDT05GSUdfRE1BQlVGX0hFQVBTX0NNQWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIFdoaWxlIGZ1enppbmcsIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19NRU1DR2AgYXJlIHRoZSBjb3JlIG9uZXMuIEJ1dCB0byBhY3R1YWxseSB0cmlnZ2VyIENNQSBhbGxvY2F0aW9ucyBmcm9tIHVzZXJzcGFjZSwgSSdsbCBuZWVkIGBDT05GSUdfRE1BQlVGX0hFQVBTX0NNQWAgb3IgYENPTkZJR19IVUdFVExCRlNgICh3aXRoIHRoZSBgaHVnZXRsYl9jbWFgIGJvb3QgcGFyYW0pLiBTbywgdG8gYmUgc2FmZSwgSSdsbCBpbmNsdWRlIHRoZXNlIGluIG15IG5vdGVzOlxuXG4qICAgYENNQWBcbiogICBgTUVNQ0dgXG4qICAgYERNQV9DTUFgXG4qICAgYERNQUJVRl9IRUFQU2BcbiogICBgRE1BQlVGX0hFQVBTX0NNQWBcbiogICBgSFVHRVRMQkZTYFxuXG5JJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBjb25maWcgbmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTk6MTM6MTAuMTU4ODQyODA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzQzMzcxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRE1BQlVGX0hFQVBTX0NNQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xMDgxPUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPW1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZzoxMDgyOkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPW1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZy0xMDgzLUNPTkZJR19WSVJUSU9fUENJPXlcXG4tLVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc9MTQwOT1DT05GSUdfRE1BQlVGX0hFQVBTX1NZU1RFTT1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxNDEwOkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPW1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTE0MTEtQ09ORklHX1ZGSU89eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz04OTY9Q09ORklHX0RNQUJVRl9IRUFQU19TWVNURU09eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6ODk3OkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTg5OC1DT05GSUdfVUlPPW1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9OTI1PUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjkyNjpDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy05MjctQ09ORklHX1VJTz1tXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZz04PWNvbmZpZyBETUFCVUZfSEVBUFNfU1lTVEVNX0NDX1NIQVJFRFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTUtXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWc6MTY6Y29uZmlnIERNQUJVRl9IRUFQU19DTUFcXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZSBcXFwiRE1BLUJVRiBDTUEgSGVhcFxcXCJcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNKVxcdCs9IHN5c3RlbV9oZWFwLm9cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTX0NNQSlcXHRcXHQrPSBjbWFfaGVhcC5vXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnPTk9Q09ORklHX0RNQUJVRl9IRUFQUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZzoxMDpDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZy0xMS1DT05GSUdfSFVHRVRMQkZTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2g9MTQ3PWNoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2gtMTUwLVxcdHZtX3NzaCAtLSBcXFwiW1sgLWUgL2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb24gXV1cXFwiIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoOjE1MTpcXHRcXHR8fCBkaWUgXFxcIkNNQSBoZWFwIG5vdCBhdmFpbGFibGUgKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BPyBjbWE9IGNtZGxpbmU/KVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoLTE1Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEzOjEyLjA5MzE4NTUwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDgzOTEzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ01BIE1lbW9yeSBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgc28gdGhlIGBETUFCVUZfSEVBUFNfQ01BYCBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgaGVyZTsgdGhhdCBjaGVja3Mgb3V0LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19QQUdFX0NPVU5URVJgIGRvZXNuJ3QgcG9zZSBhIHByb2JsZW0uIFNpbmNlIGl0J3Mgc2VsZWN0ZWQgYnkgYE1FTUNHYCwgd2hpY2ggaXMgYSBwcmVyZXF1aXNpdGUsIHdlJ3JlIGdvb2QgdG8gZ28uXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYC4gVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24sIGBtZW1vcnlfY21hX2FjY291bnRpbmdgLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgaG93IENNQSBtZW1vcnkgdXNhZ2UgaXMgdHJhY2tlZCB3aXRoaW4gYSBjZ3JvdXAncyB0b3RhbCBtZW1vcnkgYWxsb3dhbmNlLiBUaGUgbmV3IGZ1bmN0aW9ucywgYXMgSSBtZW50aW9uZWQsIGFyZSB0aGUga2V5IHRvIHRoaXMgYWNjb3VudGluZywgaGFuZGxpbmcgY2hhcmdlIGFuZCB1bmNoYXJnZSBvcGVyYXRpb25zIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggQ01BIGFsbG9jYXRpb25zLCBzdWNoIGFzIERNQS1CVUYgaGVhcHMgb3IgaHVnZXRsYiwgd2hlbiB0aGUgbW91bnQgb3B0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBhbmQgQ01BIHN1YnN5c3RlbXMsIGFuZCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgdGhvcm91Z2ggZnV6emluZywgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgSSd2ZSBnb3QgYSBwcmV0dHkgZ29vZCBncmFzcDogYENNQWAsIGBNRU1DR2AsIGBETUFfQ01BYCwgYERNQUJVRl9IRUFQU2AsIGBETUFCVUZfSEVBUFNfQ01BYCwgYW5kIGBIVUdFVExCRlNgLiBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIGBETUFCVUZfSEVBUFNfQ01BYCBhbmQgYE1FTUNHYC5cblxuSSdsbCBxdWlja2x5IHJldmlldyBvdGhlciBmdW5jdGlvbnMuIFdoaWxlIGBjZ3JvdXAyX3BhcnNlX3BhcmFtYCBoYXMgYmVlbiBtb2RpZmllZCwgaXQncyBhIGdlbmVyaWMgbW91bnQgb3B0aW9uIHBhcnNpbmcgZnVuY3Rpb24sIHNvIHRoYXQncyBub3QgdGhlIHByaW1hcnkgZm9jdXMuIFNpbWlsYXJseSwgYGNtYV9yZWxlYXNlYCBhbmQgYGNtYV9yZWxlYXNlX2Zyb3plbmAgaGF2ZSBzaWduYXR1cmUgY2hhbmdlcyBidXQgdGhlIGNvcmUgbG9naWMgaXMgaW4gdGhlIG90aGVyIHR3by5cblxuU28sIGluIHN1bW1hcnksIEknbSBjb25maWRlbnQgdGhhdCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIHRoZSBhZGRpdGlvbiBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYC5cbkknbSByZWFkeSB0byBzZXQgbXkgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNjYsIk91dHB1dFRva2VucyI6MjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEzOjIwLjMwMTU4MDI5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDg3NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJETUFCVUZfSEVBUFNcIixcbiAgICBcIkRNQUJVRl9IRUFQU19DTUFcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2NtYVwiLFxuICAgIFwibWVtX2Nncm91cF91bmNoYXJnZV9jbWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2Agd2hpY2ggZW5hYmxlcyBhY2NvdW50aW5nIG9mIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJ3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UuIEl0IGFkZHMgbmV3IGNvcmUgZnVuY3Rpb25zIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgIHRvIGhhbmRsZSB0aGUgYWNjb3VudGluZyBkdXJpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDTUEgYWxsb2NhdGlvbnMgKGUuZy4sIHVzaW5nIERNQS1CVUYgaGVhcHMgb3IgaHVnZXRsYikgd2hlbiB0aGUgbW91bnQgb3B0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBhbmQgQ01BIHN1YnN5c3RlbXMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNNQVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkRNQV9DTUFcIixcbiAgICBcIkRNQUJVRl9IRUFQU1wiLFxuICAgIFwiRE1BQlVGX0hFQVBTX0NNQVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfY21hXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2dyb3VwIHYyIG1vdW50IG9wdGlvbiBgbWVtb3J5X2NtYV9hY2NvdW50aW5nYCB3aGljaCBlbmFibGVzIGFjY291bnRpbmcgb2YgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAncyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gSXQgYWRkcyBuZXcgY29yZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgdG8gaGFuZGxlIHRoZSBhY2NvdW50aW5nIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENNQSBhbGxvY2F0aW9ucyAoZS5nLiwgdXNpbmcgRE1BLUJVRiBoZWFwcyBvciBodWdldGxiKSB3aGVuIHRoZSBtb3VudCBvcHRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBDTUEgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEzOjIwLjM4NjY3NDk3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjU1MjI3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMzoyMC4zODczMzc3MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjMwNjQ4NTU4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgdG8gYWNjb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCdzIG92ZXJhbGwgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgY21hX2NvdW50ZXJzYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cXG4yLiBBZGRpbmcgYGNtYV9kZmxfZmlsZXNgIGFycmF5IGZvciBjZ3JvdXBmcywgd2hpY2ggaXMgYWxzbyBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cXG4zLiBFeHBvc2luZyBDTUEgdXNhZ2UgYW5kIGxpbWl0cyB2aWEgY2dyb3VwZnMgZmlsZXMgKGBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuXFx1MDAzY2FyZWFcXHUwMDNlLm1heGApLiBUaGVzZSBmaWxlcyB1c2UgYHNlcV9wcmludGZgIGFuZCBgc2VxX3B1dHNfbWVtY2dfdHVuYWJsZWAgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLCBtZWFuaW5nIG5vIHJhdyBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG40LiBNb2RpZnlpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgcGF0aHMgdG8gY2hhcmdlIGFuZCB1bmNoYXJnZSBtZW1vcnkgY2dyb3Vwcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIHBhdGhzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwYXNzZWQgYXJvdW5kLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGNtYV9jb3VudGVyc2AsIHVzZS1hZnRlci1mcmVlIG9mIGBtZW1jZ2AsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUzOGRlNzQxODEzZWI0NzZhOWQ1MjBjZmQwOTZjYTFhMGExNTE4NDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxOToxMjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggYWVkMTk1YTcxY2JmMS4uMzk4NzFhN2EwOGE4ZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5AQCAtMjQ2LDYgKzI0NiwyNiBAQCBjZ3JvdXAgdjIgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgbW91bnQgb3B0aW9ucy5cbiAgICAgICAgICAgd2lsbCBub3QgYmUgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKGV2ZW4gaWYgY2dyb3VwXG4gICAgICAgICAgIHYyIGlzIHJlbW91bnRlZCBsYXRlciBvbikuXG4gXG4rICBtZW1vcnlfY21hX2FjY291bnRpbmdcbisgICAgICAgIENvdW50IENNQSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJ3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgZm9yXG4rICAgICAgICB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBleHBvc2UgcGVyLUNNQS1hcmVhIHVzYWdlIGNvdW50ZXJzLiBUaGlzXG4rICAgICAgICBiZWhhdmlvciBpcyBvcHQtaW4sIHNvIGFzIHRvIG5vdCBjYXVzZSByZWdyZXNzaW9uIG9uIGV4aXN0aW5nIHNldHVwcy5cbitcbisgICAgICAgIEEgZmV3IGNhdmVhdHMgdG8ga2VlcCBpbiBtaW5kOlxuK1xuKyAgICAgICAgKiBDTUEgYXJlYXMgYXJlIHJlc2VydmVkIGF0IGJvb3QgdGltZSwgbWVtb3J5IGlzIG9ubHkgY2hhcmdlZCB0byBhXG4rICAgICAgICAgIGNncm91cCB3aGVuIGEgQ01BIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIG9uIGl0cyBiZWhhbGYuXG4rICAgICAgICAqIENNQSBwYWdlcyBhbGxvY2F0ZWQgd2hpbGUgdGhpcyBvcHRpb24gaXMgbm90IGVuYWJsZWQgd2lsbCBub3QgYmVcbisgICAgICAgICAgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGV2ZW4gaWYgY2dyb3VwIHYyIGlzIHJlbW91bnRlZFxuKyAgICAgICAgICBsYXRlciBvbiB3aXRoIHRoaXMgb3B0aW9uLiBDaGFyZ2VzIGhhcHBlbiBhdCBhbGxvY2F0aW9uLlxuKyAgICAgICAgKiBDTUEgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgYm90aCB0byB0aGUgY2dyb3VwJ3MgbWVtb3J5IGNvdW50ZXJcbisgICAgICAgICAgKGxpbWl0ZWQgYnkgbWVtb3J5Lm1heCkgYW5kIHRoZSBwZXItYXJlYSBDTUEgY291bnRlciAobGltaXRlZCBieVxuKyAgICAgICAgICBtZW1vcnkuY21hLlx1MDAzY2FyZWFcdTAwM2UubWF4KS4gSGl0dGluZyBlaXRoZXIgbGltaXQgY2FuIGNhdXNlIGFuIGFsbG9jYXRpb25cbisgICAgICAgICAgdG8gZmFpbC4gSWYgQ01BIHVzYWdlIHB1c2hlcyB0aGUgY2dyb3VwIG92ZXIgbWVtb3J5LmhpZ2ggb3JcbisgICAgICAgICAgbWVtb3J5Lm1heCwgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG90aGVyXG4rICAgICAgICAgIG1lbW9yeSBvbmx5LiBDTUEgbWVtb3J5IGNoYXJnZWQgdG8gdGhlIGNncm91cCBpcyBub3QgcmVjbGFpbWFibGUuXG4rICAgICAgICAgIExpbWl0cyBzaG91bGQgYmUgc2l6ZWQgdG8gYWNjb21tb2RhdGUgdGhlIGV4cGVjdGVkIENNQSBwcmVzc3VyZS5cbitcbiAgIHBpZHNfbG9jYWxldmVudHNcbiAgICAgICAgIFRoZSBvcHRpb24gcmVzdG9yZXMgdjEtbGlrZSBiZWhhdmlvciBvZiBwaWRzLmV2ZW50czptYXgsIHRoYXQgaXMgb25seVxuICAgICAgICAgbG9jYWwgKGluc2lkZSBjZ3JvdXAgcHJvcGVyKSBmb3JrIGZhaWx1cmVzIGFyZSBjb3VudGVkLiBXaXRob3V0IHRoaXNcbkBAIC0xOTA4LDYgKzE5MjgsMjEgQEAgVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC5cbiBcdFRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGlmIHpzd2FwIGlzIGRpc2FibGVkLCBhbmQgc3dhcHBpbmdcbiBcdGlzIGFsbG93ZWQgdW5sZXNzIG1lbW9yeS5zd2FwLm1heCBpcyBzZXQgdG8gMC5cbiBcbisgIG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5jdXJyZW50XG4rICAgICAgICBBIHJlYWQtb25seSBzaW5nbGUgdmFsdWUgZmlsZSB3aGljaCBleGlzdHMgb24gbm9uLXJvb3QgY2dyb3Vwcy4gXHUwMDNjYXJlYVx1MDAzZVxuKyAgICAgICAgaXMgdGhlIENNQSBhcmVhIG5hbWUgKGUuZy4gXCJyZXNlcnZlZFwiIGZvciB0aGUgZGVmYXVsdCBETUEgQ01BIGFyZWEpLlxuK1xuKyAgICAgICAgVGhlIHRvdGFsIGFtb3VudCBvZiBDTUEgbWVtb3J5IGN1cnJlbnRseSBjaGFyZ2VkIHRvIHRoZSBjZ3JvdXAgZm9yIHRoZVxuKyAgICAgICAgZ2l2ZW4gQ01BIGFyZWEuIE9ubHkgYWNjb3VudGVkIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuXG4rXG4rICBtZW1vcnkuY21hLlx1MDAzY2FyZWFcdTAwM2UubWF4XG4rICAgICAgICBBIHJlYWQtd3JpdGUgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFRoZVxuKyAgICAgICAgZGVmYXVsdCBpcyBcIm1heFwiLlxuK1xuKyAgICAgICAgQ01BIHVzYWdlIGhhcmQgbGltaXQgZm9yIHRoZSBnaXZlbiBhcmVhLiBJZiBhIGNncm91cCdzIENNQSB1c2FnZSBmb3JcbisgICAgICAgIHRoaXMgYXJlYSBleGNlZWRzIHRoaXMgbGltaXQsIHRoZSBhbGxvY2F0aW9uIHdpbGwgZmFpbC4gT25seSBlbmZvcmNlZFxuKyAgICAgICAgd2hlbiBtZW1vcnlfY21hX2FjY291bnRpbmcgaXMgZW5hYmxlZC5cbitcbiAgIG1lbW9yeS5wcmVzc3VyZVxuIFx0QSByZWFkLW9ubHkgbmVzdGVkLWtleWVkIGZpbGUuXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG5pbmRleCBkZTJjZDYyMzhjMmFlLi4xNWYzZjcxMTBjNWIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmhcbkBAIC0xMjksNiArMTI5LDExIEBAIGVudW0ge1xuIFx0ICogRW5hYmxlIGxlZ2FjeSBsb2NhbCBwaWRzLmV2ZW50cy5cbiBcdCAqL1xuIFx0Q0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTID0gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbitcbitcdC8qXG4rXHQgKiBFbmFibGUgY21hIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlci5cbitcdCAqL1xuK1x0Q0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORyA9ICgxIFx1MDAzY1x1MDAzYyAyMSksXG4gfTtcbiBcbiAvKiBjZnR5cGUtXHUwMDNlZmxhZ3MgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtYS5oIGIvaW5jbHVkZS9saW51eC9jbWEuaFxuaW5kZXggODU1NWQzOGE5N2IxYS4uMTZlMjEzNjQyMWI3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY21hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY21hLmhcbkBAIC00OSwxMiArNDksMTIgQEAgZXh0ZXJuIGludCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbiBcdFx0XHRcdFx0c3RydWN0IGNtYSAqKnJlc19jbWEpO1xuIGV4dGVybiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgaW50IGFsaWduLFxuIFx0XHRcdCAgICAgIGJvb2wgbm9fd2Fybik7XG4tZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpO1xuK2V4dGVybiBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KTtcbiBcbiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4gXHRcdHVuc2lnbmVkIGludCBhbGlnbiwgYm9vbCBub193YXJuKTtcbiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4rYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuIGV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjIuLjgwMWZiZGU5NDEzN2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0zMjAsNiArMzIwLDEwIEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbiBcbisjaWZkZWYgQ09ORklHX0NNQVxuK1x0c3RydWN0IHBhZ2VfY291bnRlciAqY21hX2NvdW50ZXJzO1xuKyNlbmRpZiAvKiBDT05GSUdfQ01BICovXG4rXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbm9kZWluZm9bXTtcbiB9O1xuIFxuQEAgLTY2Miw2ICs2NjYsMTEgQEAgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG4gXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbitcdFx0XHQgIHN0cnVjdCBjbWEgKmNtYSk7XG4rdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbitcdFx0XHQgICAgIHN0cnVjdCBjbWEgKmNtYSk7XG4rXG4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyoqXG5AQCAtMTE2MCw2ICsxMTY5LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbitcdFx0XHRcdFx0c3RydWN0IGNtYSAqY21hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHN0cnVjdCBjbWEgKmNtYSlcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC9jZ3JvdXAuY1xuaW5kZXggYjViNDYxZDQ0MThiMS4uMTIxODRmODVhZDEwMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcbisrKyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcbkBAIC0xOTg1LDYgKzE5ODUsNyBAQCBlbnVtIGNncm91cDJfcGFyYW0ge1xuIFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90LFxuIFx0T3B0X21lbW9yeV9odWdldGxiX2FjY291bnRpbmcsXG4gXHRPcHRfcGlkc19sb2NhbGV2ZW50cyxcbitcdE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcsXG4gXHRucl9fY2dyb3VwMl9wYXJhbXNcbiB9O1xuIFxuQEAgLTE5OTUsNiArMTk5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgY2dyb3VwMl9mc19wYXJhbWV0ZXJzW10gPSB7XG4gXHRmc3BhcmFtX2ZsYWcoXCJtZW1vcnlfcmVjdXJzaXZlcHJvdFwiLFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90KSxcbiBcdGZzcGFyYW1fZmxhZyhcIm1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcIiwgT3B0X21lbW9yeV9odWdldGxiX2FjY291bnRpbmcpLFxuIFx0ZnNwYXJhbV9mbGFnKFwicGlkc19sb2NhbGV2ZW50c1wiLFx0T3B0X3BpZHNfbG9jYWxldmVudHMpLFxuK1x0ZnNwYXJhbV9mbGFnKFwibWVtb3J5X2NtYV9hY2NvdW50aW5nXCIsXHRPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nKSxcbiBcdHt9XG4gfTtcbiBcbkBAIC0yMDI3LDYgKzIwMjksOSBAQCBzdGF0aWMgaW50IGNncm91cDJfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbVxuIFx0Y2FzZSBPcHRfcGlkc19sb2NhbGV2ZW50czpcbiBcdFx0Y3R4LVx1MDAzZWZsYWdzIHw9IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUztcbiBcdFx0cmV0dXJuIDA7XG4rXHRjYXNlIE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmc6XG4rXHRcdGN0eC1cdTAwM2VmbGFncyB8PSBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbkBAIC0yMDY4LDYgKzIwNzMsMTEgQEAgc3RhdGljIHZvaWQgYXBwbHlfY2dyb3VwX3Jvb3RfZmxhZ3ModW5zaWduZWQgaW50IHJvb3RfZmxhZ3MpXG4gXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XG4gXHRcdGVsc2VcbiBcdFx0XHRjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNj0gfkNHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUztcbitcbitcdFx0aWYgKHJvb3RfZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpXG4rXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjY9IH5DR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuIFx0fVxuIH1cbiBcbkBAIC0yMDg1LDYgKzIwOTUsOCBAQCBzdGF0aWMgaW50IGNncm91cF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBrZXJuZnNfcm9vdCAqa2Zfcm9vdFxuIFx0XHRzZXFfcHV0cyhzZXEsIFwiLG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcIik7XG4gXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKVxuIFx0XHRzZXFfcHV0cyhzZXEsIFwiLHBpZHNfbG9jYWxldmVudHNcIik7XG4rXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORylcbitcdFx0c2VxX3B1dHMoc2VxLCBcIixtZW1vcnlfY21hX2FjY291bnRpbmdcIik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzUyMCw3ICs3NTMyLDggQEAgc3RhdGljIHNzaXplX3QgZmVhdHVyZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdFwibWVtb3J5X2xvY2FsZXZlbnRzXFxuXCJcbiBcdFx0XHRcIm1lbW9yeV9yZWN1cnNpdmVwcm90XFxuXCJcbiBcdFx0XHRcIm1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcXG5cIlxuLVx0XHRcdFwicGlkc19sb2NhbGV2ZW50c1xcblwiKTtcbitcdFx0XHRcInBpZHNfbG9jYWxldmVudHNcXG5cIlxuK1x0XHRcdFwibWVtb3J5X2NtYV9hY2NvdW50aW5nXFxuXCIpO1xuIH1cbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNncm91cF9mZWF0dXJlc19hdHRyID0gX19BVFRSX1JPKGZlYXR1cmVzKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9jbWEuYyBiL21tL2NtYS5jXG5pbmRleCBhMTNjZTQ5OTliMzlmLi4wM2ViM2FjYmQzYzc1IDEwMDY0NFxuLS0tIGEvbW0vY21hLmNcbisrKyBiL21tL2NtYS5jXG5AQCAtMjUsNyArMjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbkBAIC05MDUsNiArOTA0LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19jbWFfYWxsb2NfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSxcbiBcdFx0Y21hX2RlYnVnX3Nob3dfYXJlYXMoY21hKTtcbiBcdH1cbiBcbitcdGlmIChwYWdlIFx1MDAyNlx1MDAyNiBtZW1fY2dyb3VwX2NoYXJnZV9jbWEocGFnZSwgY291bnQsIGNtYSkpIHtcbitcdFx0ZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBjb3VudCk7XG4rXHRcdGNtYV9jbGVhcl9iaXRtYXAoY21hLCBcdTAwMjZjbWEtXHUwMDNlcmFuZ2VzW3JdLCBwYWdlX3RvX3BmbihwYWdlKSwgY291bnQpO1xuK1x0XHRwYWdlID0gTlVMTDtcbitcdH1cbitcbiBcdHByX2RlYnVnKFwiJXMoKTogcmV0dXJuZWQgJXBcXG5cIiwgX19mdW5jX18sIHBhZ2UpO1xuIFx0dHJhY2VfY21hX2FsbG9jX2ZpbmlzaChuYW1lLCBwYWdlID8gcGFnZV90b19wZm4ocGFnZSkgOiAwLFxuIFx0XHRcdCAgICAgICBwYWdlLCBjb3VudCwgYWxpZ24sIHJldCk7XG5AQCAtOTkyLDEyICs5OTcsMTMgQEAgc3RhdGljIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmZpbmRfY21hX21lbXJhbmdlKHN0cnVjdCBjbWEgKmNtYSxcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG4tXHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudClcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZXMpO1xuIFxuIFx0cHJfZGVidWcoXCIlcyhwYWdlICVwLCBjb3VudCAlbHUpXFxuXCIsIF9fZnVuY19fLCAodm9pZCAqKXBhZ2VzLCBjb3VudCk7XG4gXG4rXHRtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShwYWdlcywgY291bnQsIGNtYSk7XG4gXHRmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGZuLCBjb3VudCk7XG4gXHRjbWFfY2xlYXJfYml0bWFwKGNtYSwgY21yLCBwZm4sIGNvdW50KTtcbiBcdGNtYV9zeXNmc19hY2NvdW50X3JlbGVhc2VfcGFnZXMoY21hLCBjb3VudCk7XG5AQCAtMTAxNCw3ICsxMDIwLDcgQEAgc3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG4gICogSXQgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91cyBhcmVhIGFuZFxuICAqIHRydWUgb3RoZXJ3aXNlLlxuICAqL1xuLWJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4rYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcyxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yO1xuQEAgLTEwMzcsNyArMTA0Myw3IEBAIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNtYV9yZWxlYXNlKTtcbiBcbi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcbitib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBjb3VudClcbiB7XG4gXHRzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7XG5kaWZmIC0tZ2l0IGEvbW0vY21hLmggYi9tbS9jbWEuaFxuaW5kZXggYzcwMTgwYzM2NTU5Yy4uNTJiN2Q0YmU1MTcwNyAxMDA2NDRcbi0tLSBhL21tL2NtYS5oXG4rKysgYi9tbS9jbWEuaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgY21hX2tvYmplY3Qge1xuIFx0c3RydWN0IGtvYmplY3Qga29iajtcbkBAIC04MCw2ICs4MSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9tYXhubyhzdHJ1Y3QgY21hICpjbWEsXG4gXHRyZXR1cm4gY21yLVx1MDAzZWNvdW50IFx1MDAzZVx1MDAzZSBjbWEtXHUwMDNlb3JkZXJfcGVyX2JpdDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgY21hX2FyZWFfaW5kZXgoY29uc3Qgc3RydWN0IGNtYSAqY21hKVxuK3tcbitcdHJldHVybiBjbWEgLSBjbWFfYXJlYXM7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfQ01BX1NZU0ZTXG4gdm9pZCBjbWFfc3lzZnNfYWNjb3VudF9zdWNjZXNzX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBjbWFfc3lzZnNfYWNjb3VudF9mYWlsX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5kaWZmIC0tZ2l0IGEvbW0vY21hX2RlYnVnLmMgYi9tbS9jbWFfZGVidWcuY1xuaW5kZXggNTIzYmE0YTBmOWY3Ni4uNzBiZmM2ZmJlZWNhMyAxMDA2NDRcbi0tLSBhL21tL2NtYV9kZWJ1Zy5jXG4rKysgYi9tbS9jbWFfZGVidWcuY1xuQEAgLTcsNyArNyw2IEBAXG4gXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL21tL2NtYV9zeXNmcy5jIGIvbW0vY21hX3N5c2ZzLmNcbmluZGV4IGQ1YmY3OTJjNjI0NWEuLmU0ZWUzNWJjNjgyYmEgMTAwNjQ0XG4tLS0gYS9tbS9jbWFfc3lzZnMuY1xuKysrIGIvbW0vY21hX3N5c2ZzLmNcbkBAIC01LDcgKzUsNiBAQFxuICAqIENvcHlyaWdodCAoYykgMjAyMSBNaW5jaGFuIEtpbSBcdTAwM2NtaW5jaGFuQGtlcm5lbC5vcmdcdTAwM2VcbiAgKi9cbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmLi5mMjhkNjEwYTU5Y2U3IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC02OCw2ICs2OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcInNsYWIuaFwiXG4gI2luY2x1ZGUgXCJtZW1jb250cm9sLXYxLmhcIlxuKyNpbmNsdWRlIFwiY21hLmhcIlxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuIFxuQEAgLTQwNjIsNiArNDA2Myw5IEBAIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpbnQgbm9kZTtcbiBcbisjaWZkZWYgQ09ORklHX0NNQVxuK1x0a2ZyZWUobWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzKTtcbisjZW5kaWZcbiBcdGZvcl9lYWNoX25vZGUobm9kZSkge1xuIFx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tub2RlXTtcbiBcdFx0aWYgKCFwbilcbkBAIC00MTQ0LDYgKzQxNDgsMTUgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKylcbiBcdFx0bWVtY2ctXHUwMDNlY2d3Yl9mcm5baV0uZG9uZSA9XG4gXHRcdFx0X19XQl9DT01QTEVUSU9OX0lOSVQoXHUwMDI2bWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfQ01BXG4rXHRpZiAoY21hX2FyZWFfY291bnQpIHtcbitcdFx0bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzID0ga2NhbGxvYyhjbWFfYXJlYV9jb3VudCxcbitcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlX2NvdW50ZXIpLFxuK1x0XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFtZW1jZy1cdTAwM2VjbWFfY291bnRlcnMpXG4rXHRcdFx0Z290byBmYWlsO1xuK1x0fVxuICNlbmRpZlxuIFx0bHJ1X2dlbl9pbml0X21lbWNnKG1lbWNnKTtcbiBcdHJldHVybiBtZW1jZztcbkBAIC00MTU5LDYgKzQxNzIsNyBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHBhcmVudF9jc3MpO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xuIFx0Ym9vbCBtZW1jZ19vbl9kZmwgPSBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpO1xuK1x0dW5zaWduZWQgaW50IF9fbWF5YmVfdW51c2VkIGk7XG4gXG4gXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XG4gXHRtZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTtcbkBAIC00MTcxLDYgKzQxODUsMTIgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4gI2lmZGVmIENPTkZJR19aU1dBUFxuIFx0bWVtY2ctXHUwMDNlenN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDtcbiBcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlenN3YXBfd3JpdGViYWNrLCB0cnVlKTtcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHX0NNQVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7ICsraSlcbitcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2ldLFxuK1x0XHRcdFx0ICBwYXJlbnQgPyBcdTAwMjZwYXJlbnQtXHUwMDNlY21hX2NvdW50ZXJzW2ldIDogTlVMTCxcbitcdFx0XHRcdCAgZmFsc2UpO1xuICNlbmRpZlxuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuIFx0aWYgKHBhcmVudCkge1xuQEAgLTUyMTMsNiArNTIzMywxMDIgQEAgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfQ01BXG4rc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfY21hKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkc7XG4rfVxuK1xuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4rXHRcdFx0ICBzdHJ1Y3QgY21hICpjbWEpXG4re1xuK1x0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgKmZhaWw7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcdGludCByYyA9IDA7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19jbWEoKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbitcdFx0Z290byBjZ3JvdXBfcHV0O1xuK1xuK1x0cmMgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBHRlBfS0VSTkVMLCBjb3VudCk7XG4rXHRpZiAocmMpXG4rXHRcdGdvdG8gY2dyb3VwX3B1dDtcbitcbitcdGNvdW50ZXIgPSBcdTAwMjZtZW1jZy1cdTAwM2VjbWFfY291bnRlcnNbY21hX2FyZWFfaW5kZXgoY21hKV07XG4rXHRpZiAoIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKGNvdW50ZXIsIGNvdW50LCBcdTAwMjZmYWlsKSkge1xuK1x0XHRyZWZpbGxfc3RvY2sobWVtY2csIGNvdW50KTtcbitcdFx0cmMgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGNncm91cF9wdXQ7XG4rXHR9XG4rXG4rXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2cpO1xuK1x0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UocGFnZV9mb2xpbyhwYWdlKSkpIHtcbitcdFx0Y29tbWl0X2NoYXJnZShwYWdlX2ZvbGlvKHBhZ2UpLCBvYmpjZyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRvYmpfY2dyb3VwX2dldF9tYW55KG9iamNnLCBjb3VudCAtIDEpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKVxuK1x0XHRcdGNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlICsgaSksIG9iamNnKTtcbitcdH1cbitcbitjZ3JvdXBfcHV0OlxuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbit2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuK1x0XHRcdCAgICAgc3RydWN0IGNtYSAqY21hKVxuK3tcbitcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19jbWEoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIEdldCB0aGUgb2JqY2cgZnJvbSB0aGUgZmlyc3QgcGFnZS5cbitcdCAqIHBhZ2Vfb2JqY2coKSBleHBlY3RzIE1FTUNHX0RBVEFfS01FTSwgYnV0IGZvciBDTUEgd2UgdXNlZFxuK1x0ICogY29tbWl0X2NoYXJnZSgpIHdoaWNoIHNldHMgZm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IG9iamNnXG4rXHQgKiB3aXRob3V0IGZsYWdzLCBzbyB3ZSBjYW5ub3QgdXNlIGl0LlxuK1x0ICovXG4rXHRvYmpjZyA9IGZvbGlvX29iamNnKHBhZ2VfZm9saW8ocGFnZSkpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbitcbitcdGNvdW50ZXIgPSBcdTAwMjZtZW1jZy1cdTAwM2VjbWFfY291bnRlcnNbY21hX2FyZWFfaW5kZXgoY21hKV07XG4rXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoY291bnRlciwgY291bnQpO1xuK1xuK1x0bWVtY2dfdW5jaGFyZ2UobWVtY2csIGNvdW50KTtcbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1x0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4rXHRcdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAwO1xuK1x0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgKytpKSB7XG4rXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UgKyBpKTtcbitcdFx0XHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbitcdFx0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4rXHRcdH1cbitcdH1cbit9XG4rI2VuZGlmIC8qIENPTkZJR19DTUEgKi9cbitcbiBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyIHtcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xuQEAgLTYwNjYsMyArNjE4Miw5MiBAQCB2b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFx0SyhhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeS5jaGlsZHJlbl9taW5fdXNhZ2UpKSxcbiBcdFx0SyhhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeS5jaGlsZHJlbl9sb3dfdXNhZ2UpKSk7XG4gfVxuK1xuKyNpZmRlZiBDT05GSUdfQ01BXG4rc3RhdGljIGludCBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcbitcdGludCBpZHggPSBzZXFfY2Z0KG0pLVx1MDAzZXByaXZhdGU7XG4rXHR1bnNpZ25lZCBsb25nIGN1ciA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdKTtcbitcbitcdHNlcV9wcmludGYobSwgXCIlbHVcXG5cIiwgY3VyICogUEFHRV9TSVpFKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG1lbW9yeV9jbWFfbWF4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7XG4rXHRpbnQgaWR4ID0gc2VxX2NmdChtKS1cdTAwM2Vwcml2YXRlO1xuK1x0dW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2lkeF0ubWF4KTtcbitcbitcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sIG1heCk7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IG1lbW9yeV9jbWFfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuK1x0XHRcdFx0ICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbitcdGludCBpZHggPSBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGU7XG4rXHR1bnNpZ25lZCBsb25nIG1heDtcbitcdGludCByYztcbitcbitcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG4rXHRyYyA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsIFwibWF4XCIsIFx1MDAyNm1heCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHhjaGcoXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2lkeF0ubWF4LCBtYXgpO1xuK1xuK1x0cmV0dXJuIG5ieXRlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBjZnR5cGUgY21hX2RmbF90bXBsW10gPSB7XG4rXHR7XG4rXHRcdC5uYW1lID0gXCJjdXJyZW50XCIsXG4rXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9jbWFfY3VycmVudF9zaG93LFxuK1x0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4rXHR9LFxuK1x0e1xuK1x0XHQubmFtZSA9IFwibWF4XCIsXG4rXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9jbWFfbWF4X3Nob3csXG4rXHRcdC53cml0ZSA9IG1lbW9yeV9jbWFfbWF4X3dyaXRlLFxuK1x0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4rXHR9LFxuK1x0eyB9XG4rfTtcbisjZGVmaW5lIENNQV9ERkxfVE1QTF9TSVpFXHQoQVJSQVlfU0laRShjbWFfZGZsX3RtcGwpIC0gMSlcbitcbitzdGF0aWMgc3RydWN0IGNmdHlwZSAqY21hX2RmbF9maWxlcztcbitcbitzdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX2NtYV9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IGNmdHlwZSAqY2Z0O1xuK1x0dW5zaWduZWQgaW50IGksIGo7XG4rXHRpbnQgY291bnQ7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjbWFfYXJlYV9jb3VudClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjb3VudCA9IGNtYV9hcmVhX2NvdW50ICogQ01BX0RGTF9UTVBMX1NJWkU7XG4rXHRjbWFfZGZsX2ZpbGVzID0ga2NhbGxvYyhjb3VudCArIDEsIHNpemVvZigqY21hX2RmbF90bXBsKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWNtYV9kZmxfZmlsZXMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7ICsraSlcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQ01BX0RGTF9UTVBMX1NJWkU7ICsraikge1xuK1x0XHRcdGNmdCA9IFx1MDAyNmNtYV9kZmxfZmlsZXNbaSAqIENNQV9ERkxfVE1QTF9TSVpFICsgal07XG4rXHRcdFx0KmNmdCA9IGNtYV9kZmxfdG1wbFtqXTtcbitcdFx0XHRzbnByaW50ZihjZnQtXHUwMDNlbmFtZSwgTUFYX0NGVFlQRV9OQU1FLCBcImNtYS4lcy4lc1wiLFxuK1x0XHRcdFx0IGNtYV9nZXRfbmFtZShcdTAwMjZjbWFfYXJlYXNbaV0pLFxuK1x0XHRcdFx0IGNtYV9kZmxfdG1wbFtqXS5uYW1lKTtcbitcdFx0XHRjZnQtXHUwMDNlcHJpdmF0ZSA9IGk7IC8qIGNtYSBhcmVhIGluZGV4IGZvciBjb3VudGVycyBpbiBjYWxsYmFja3MuICovXG4rXHRcdFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoXHUwMDI2Y2Z0LVx1MDAzZWxvY2tkZXBfa2V5KTtcbitcdFx0fVxuK1xuK1x0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgY21hX2RmbF9maWxlcykpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK3N1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX2NtYV9pbml0KTtcbisjZW5kaWYgLyogQ09ORklHX0NNQSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVcbmluZGV4IDk1MmU0NDQ4YmYwNzAuLmI5YTQyOThkNDk0NDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVcbkBAIC0xLDUgKzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIHRlc3RfY29yZVxuK3Rlc3RfY21hX21lbWNnXG4gdGVzdF9jcHVcbiB0ZXN0X2NwdXNldFxuIHRlc3RfZnJlZXplclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuaW5kZXggZTAxNTg0YzIxODlhYy4uNjAxZDkzMDE2MGE0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlXG5AQCAtOCw2ICs4LDcgQEAgVEVTVF9QUk9HUyAgICAgOj0gdGVzdF9zdHJlc3Muc2ggdGVzdF9jcHVzZXRfcHJzLnNoIHRlc3RfY3B1c2V0X3YxX2hwLnNoXG4gVEVTVF9HRU5fRklMRVMgOj0gd2FpdF9pbm90aWZ5XG4gIyBLZWVwIHRoZSBsaXN0cyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWRcbiBURVNUX0dFTl9QUk9HUyAgPSB0ZXN0X2NvcmVcbitURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NtYV9tZW1jZ1xuIFRFU1RfR0VOX1BST0dTICs9IHRlc3RfY3B1XG4gVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9jcHVzZXRcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2ZyZWV6ZXJcbkBAIC0yNCw2ICsyNSw3IEBAIGluY2x1ZGUgLi4vbGliLm1rXG4gaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rXG4gXG4gJChPVVRQVVQpL3Rlc3RfY29yZTogJChMSUJDR1JPVVBfTylcbiskKE9VVFBVVCkvdGVzdF9jbWFfbWVtY2c6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X2NwdXNldDogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9mcmVlemVyOiAkKExJQkNHUk9VUF9PKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXG5pbmRleCAzOWY5Nzk2OTBkZDNiLi4xYzkwMzQwMTc2ODJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuQEAgLTQsMyArNCw4IEBAIENPTkZJR19DR1JPVVBfRlJFRVpFUj15XG4gQ09ORklHX0NHUk9VUF9TQ0hFRD15XG4gQ09ORklHX01FTUNHPXlcbiBDT05GSUdfUEFHRV9DT1VOVEVSPXlcbitDT05GSUdfQ01BPXlcbitDT05GSUdfRE1BX0NNQT15XG4rQ09ORklHX0RNQUJVRl9IRUFQUz15XG4rQ09ORklHX0RNQUJVRl9IRUFQU19DTUE9eVxuK0NPTkZJR19IVUdFVExCRlM9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YmQ0MWQ5YTYxNzdkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuY1xuQEAgLTAsMCArMSw0MDIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1oZWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuKyNpbmNsdWRlIFwiY2dyb3VwX3V0aWwuaFwiXG4rXG4rI2RlZmluZSBDTUFfSEVBUF9ERUZBVUxUX1BBVEhcdFwiL2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb25cIlxuKyNkZWZpbmUgQ01BX1JFU0VSVkVEX0NVUlJFTlRcdFwibWVtb3J5LmNtYS5yZXNlcnZlZC5jdXJyZW50XCJcbisjZGVmaW5lIENNQV9SRVNFUlZFRF9NQVhcdFwibWVtb3J5LmNtYS5yZXNlcnZlZC5tYXhcIlxuK1xuKyNkZWZpbmUgSFVHRVRMQl9DTUFfQ1VSUkVOVFx0XCJtZW1vcnkuY21hLmh1Z2V0bGIwLmN1cnJlbnRcIlxuKyNkZWZpbmUgSFVHRVRMQl9DTUFfTUFYXHRcIm1lbW9yeS5jbWEuaHVnZXRsYjAubWF4XCJcbisjZGVmaW5lIEhVR0VQQUdFU19ESVJcdFx0XCIvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXNcIlxuK1xuK3N0YXRpYyBpbnQgY21hX2hlYXBfYWxsb2MoaW50IGhlYXBfZmQsIHNpemVfdCBzaXplKVxuK3tcbitcdHN0cnVjdCBkbWFfaGVhcF9hbGxvY2F0aW9uX2RhdGEgZGF0YSA9IHtcbitcdFx0LmxlbiA9IHNpemUsXG4rXHRcdC5mZF9mbGFncyA9IE9fUkRXUiB8IE9fQ0xPRVhFQyxcbitcdH07XG4rXG4rXHRpZiAoaW9jdGwoaGVhcF9mZCwgRE1BX0hFQVBfSU9DVExfQUxMT0MsIFx1MDAyNmRhdGEpIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXR1cm4gZGF0YS5mZDtcbit9XG4rXG4rc3RhdGljIGludCB0ZXN0X2NtYV9jaGFyZ2UoY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTtcbitcdGludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwO1xuK1x0c2l6ZV90IHNpemUgPSA0VUwgXHUwMDNjXHUwMDNjIDIwO1xuK1x0bG9uZyBiZWZvcmUsIGFmdGVyO1xuK1x0Y2hhciAqY2c7XG4rXG4rXHRjZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ19jbWFfY2hhcmdlXCIpO1xuK1x0aWYgKCFjZylcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aW5fY2cgPSAxO1xuK1xuK1x0aGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoaGVhcF9mZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpO1xuK1xuK1x0YnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7XG4rXHRpZiAoYnVmX2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IGFsbG9jYXRlIGluIENNQSBoZWFwICglbSlcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7XG4rXG4rXHRpZiAoYWZ0ZXIgLSBiZWZvcmUgXHUwMDNjIChsb25nKXNpemUpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXG4rXHRcdFx0XCJpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIGNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXG5cIixcbitcdFx0XHRiZWZvcmUsIGFmdGVyKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0Y2xvc2UoYnVmX2ZkKTtcbitcdGJ1Zl9mZCA9IC0xO1xuK1xuK1x0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTtcbitcdGlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFxuK1x0XHRcdFwiaW52YWxpZCBDTUEgY291bnRlciBhZnRlciB1bmNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXG5cIixcbitcdFx0XHRiZWZvcmUsIGFmdGVyKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0cmMgPSBLU0ZUX1BBU1M7XG4rXG4rY2xlYW51cDpcbitcdGlmIChidWZfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShidWZfZmQpO1xuK1x0aWYgKGhlYXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShoZWFwX2ZkKTtcbitcbitcdGlmIChpbl9jZylcbitcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbitcdGNnX2Rlc3Ryb3koY2cpO1xuK1x0ZnJlZShjZyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTtcbitcdGludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwO1xuK1x0c2l6ZV90IHNpemUgPSA0VUwgXHUwMDNjXHUwMDNjIDIwO1xuK1x0Y2hhciAqY2c7XG4rXG4rXHRjZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ19jbWFfbGltaXRcIik7XG4rXHRpZiAoIWNnKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoY2dfY3JlYXRlKGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpbl9jZyA9IDE7XG4rXG4rXHRpZiAoY2dfd3JpdGUoY2csIENNQV9SRVNFUlZFRF9NQVgsIFwiMk1cIikpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgc2V0IENNQSBsaW1pdCAoJW0pXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRoZWFwX2ZkID0gb3BlbihDTUFfSEVBUF9ERUZBVUxUX1BBVEgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbitcdGlmIChoZWFwX2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0YnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7XG4rXHRpZiAoYnVmX2ZkIFx1MDAzZT0gMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkNNQSBsaW1pdCBub3QgZW5mb3JjZWQuXFxuXCIpO1xuK1x0XHRjbG9zZShidWZfZmQpO1xuK1x0fSBlbHNlXG4rXHRcdHJjID0gS1NGVF9QQVNTO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoaGVhcF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGhlYXBfZmQpO1xuK1xuK1x0aWYgKGluX2NnKVxuK1x0XHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xuK1x0Y2dfZGVzdHJveShjZyk7XG4rXHRmcmVlKGNnKTtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rc3RhdGljIGxvbmcgZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2Iodm9pZClcbit7XG4rXHRESVIgKmRpcjtcbitcdHN0cnVjdCBkaXJlbnQgKmVudHJ5O1xuK1x0bG9uZyBtYXhfc2l6ZSA9IDA7XG4rXG4rXHRkaXIgPSBvcGVuZGlyKEhVR0VQQUdFU19ESVIpO1xuK1x0aWYgKCFkaXIpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHdoaWxlICgoZW50cnkgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHtcbitcdFx0bG9uZyBzaXplO1xuK1xuK1x0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCJodWdlcGFnZXMtJWxka0JcIiwgXHUwMDI2c2l6ZSkgPT0gMSkge1xuK1x0XHRcdGlmIChzaXplIFx1MDAzZSBtYXhfc2l6ZSlcbitcdFx0XHRcdG1heF9zaXplID0gc2l6ZTtcbitcdFx0fVxuK1x0fVxuK1x0Y2xvc2VkaXIoZGlyKTtcbitcbitcdHJldHVybiBtYXhfc2l6ZSBcdTAwM2UgMCA/IG1heF9zaXplIDogLTE7XG4rfVxuK1xuK3N0YXRpYyBsb25nIHJlYWRfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdEZJTEUgKmY7XG4rXHRsb25nIHZhbCA9IC0xO1xuK1xuK1x0ZiA9IGZvcGVuKHBhdGgsIFwiclwiKTtcbitcdGlmICghZilcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKGZzY2FuZihmLCBcIiVsZFwiLCBcdTAwMjZ2YWwpICE9IDEpXG4rXHRcdHZhbCA9IC0xO1xuK1x0ZmNsb3NlKGYpO1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV9zeXNmc19sb25nKGNvbnN0IGNoYXIgKnBhdGgsIGxvbmcgdmFsKVxuK3tcbitcdEZJTEUgKmY7XG4rXHRpbnQgcmM7XG4rXG4rXHRmID0gZm9wZW4ocGF0aCwgXCJ3XCIpO1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyYyA9IGZwcmludGYoZiwgXCIlbGRcIiwgdmFsKTtcbitcdGZjbG9zZShmKTtcbitcdHJldHVybiByYyBcdTAwM2MgMCA/IC0xIDogMDtcbit9XG4rXG4rc3RhdGljIGludCB0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZShjb25zdCBjaGFyICpyb290KVxuK3tcbitcdGludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwO1xuK1x0bG9uZyBocGFnZV9zaXplX2tiLCBocGFnZV9zaXplX2J5dGVzO1xuK1x0bG9uZyBvcmlnX25yID0gLTEsIG5ld19uciwgYmVmb3JlLCBhZnRlcjtcbitcdGNoYXIgbnJfcGF0aFtQQVRIX01BWF07XG4rXHRjaGFyICpjZztcbitcbitcdGhwYWdlX3NpemVfa2IgPSBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYigpO1xuK1x0aWYgKGhwYWdlX3NpemVfa2IgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJubyBodWdlcGFnZSBzaXplIGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gS1NGVF9TS0lQO1xuK1x0fVxuK1x0aHBhZ2Vfc2l6ZV9ieXRlcyA9IGhwYWdlX3NpemVfa2IgKiAxMDI0O1xuK1xuK1x0c25wcmludGYobnJfcGF0aCwgc2l6ZW9mKG5yX3BhdGgpLFxuK1x0XHQgSFVHRVBBR0VTX0RJUiBcIi9odWdlcGFnZXMtJWxka0IvbnJfaHVnZXBhZ2VzXCIsIGhwYWdlX3NpemVfa2IpO1xuK1xuK1x0Y2cgPSBjZ19uYW1lKHJvb3QsIFwibWVtY2dfaHVnZXRsYl9jbWFfY2hhcmdlXCIpO1xuK1x0aWYgKCFjZylcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aW5fY2cgPSAxO1xuK1xuK1x0aWYgKGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCkgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRvcmlnX25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuK1x0aWYgKG9yaWdfbnIgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3QgcmVhZCAlc1xcblwiLCBucl9wYXRoKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0YmVmb3JlID0gY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKTtcbitcbitcdGlmICh3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgKyAxKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCB3cml0ZSAlc1xcblwiLCBucl9wYXRoKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0bmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuK1x0aWYgKG5ld19uciBcdTAwM2M9IG9yaWdfbnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJmYWlsZWQgdG8gYWxsb2NhdGUgYSBodWdlcGFnZVxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0cmMgPSBLU0ZUX0ZBSUw7XG4rXHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XG4rXG4rXHRpZiAoYWZ0ZXIgLSBiZWZvcmUgXHUwMDNjIGhwYWdlX3NpemVfYnl0ZXMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXG4rXHRcdFx0XCJodWdldGxiIENNQSBjb3VudGVyIG5vdCBjaGFyZ2VkOiBiZWZvcmU9JWxkIGFmdGVyPSVsZCBleHBlY3RlZCArJWxkXFxuXCIsXG4rXHRcdFx0YmVmb3JlLCBhZnRlciwgaHBhZ2Vfc2l6ZV9ieXRlcyk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7XG4rXG4rXHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XG4rXHRpZiAoIXZhbHVlc19jbG9zZShiZWZvcmUsIGFmdGVyLCAzKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcbitcdFx0XHRcImh1Z2V0bGIgQ01BIGNvdW50ZXIgbm90IHVuY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXG5cIixcbitcdFx0XHRiZWZvcmUsIGFmdGVyKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0cmMgPSBLU0ZUX1BBU1M7XG4rXG4rY2xlYW51cDpcbitcdGlmIChvcmlnX25yIFx1MDAzZT0gMClcbitcdFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcbitcbitcdGlmIChpbl9jZylcbitcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbitcdGNnX2Rlc3Ryb3koY2cpO1xuK1x0ZnJlZShjZyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9odWdldGxiX2NtYV9saW1pdChjb25zdCBjaGFyICpyb290KVxuK3tcbitcdGludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwO1xuK1x0bG9uZyBocGFnZV9zaXplX2tiO1xuK1x0bG9uZyBvcmlnX25yLCBuZXdfbnI7XG4rXHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xuK1x0Y2hhciAqY2c7XG4rXG4rXHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcbitcdGlmIChocGFnZV9zaXplX2tiIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwibm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxcblwiKTtcbitcdFx0cmV0dXJuIEtTRlRfU0tJUDtcbitcdH1cbitcbitcdHNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSxcbitcdFx0IEhVR0VQQUdFU19ESVIgXCIvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlc1wiLCBocGFnZV9zaXplX2tiKTtcbitcbitcdGNnID0gY2dfbmFtZShyb290LCBcIm1lbWNnX2h1Z2V0bGJfY21hX2xpbWl0XCIpO1xuK1x0aWYgKCFjZylcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aW5fY2cgPSAxO1xuK1xuK1x0aWYgKGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfTUFYKSBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImh1Z2V0bGIgQ01BIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGlmIChjZ193cml0ZShjZywgSFVHRVRMQl9DTUFfTUFYLCBcIjBcIikpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgc2V0IGh1Z2V0bGIgQ01BIGxpbWl0XFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRvcmlnX25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuK1x0aWYgKG9yaWdfbnIgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3QgcmVhZCAlc1xcblwiLCBucl9wYXRoKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICsgMSk7XG4rXHRuZXdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7XG4rXG4rXHRyYyA9IEtTRlRfRkFJTDtcbitcdGlmIChuZXdfbnIgXHUwMDNlIG9yaWdfbnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJodWdldGxiIENNQSBsaW1pdCBub3QgZW5mb3JjZWRcXG5cIik7XG4rXHRcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7XG4rXHR9IGVsc2Uge1xuK1x0XHRyYyA9IEtTRlRfUEFTUztcbitcdH1cbitcbitjbGVhbnVwOlxuK1x0aWYgKGluX2NnKVxuK1x0XHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xuK1x0Y2dfZGVzdHJveShjZyk7XG4rXHRmcmVlKGNnKTtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rI2RlZmluZSBUKHgpIHsgeCwgI3ggfVxuK3N0cnVjdCBjbWFfbWVtY2dfdGVzdHMge1xuK1x0aW50ICgqZm4pKGNvbnN0IGNoYXIgKnJvb3QpO1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbit9IHRlc3RzW10gPSB7XG4rXHRUKHRlc3RfY21hX2NoYXJnZSksXG4rXHRUKHRlc3RfY21hX2xpbWl0KSxcbitcdFQodGVzdF9odWdldGxiX2NtYV9jaGFyZ2UpLFxuK1x0VCh0ZXN0X2h1Z2V0bGJfY21hX2xpbWl0KSxcbit9O1xuKyN1bmRlZiBUXG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xuK1x0aW50IGhhc19tZW1vcnlfY21hX2FjYywgaTtcbitcbitcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTtcbitcbitcdGhhc19tZW1vcnlfY21hX2FjYyA9IHByb2NfbW91bnRfY29udGFpbnMoXCJtZW1vcnlfY21hX2FjY291bnRpbmdcIik7XG4rXHRpZiAoaGFzX21lbW9yeV9jbWFfYWNjIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcImNhbm5vdCBxdWVyeSBjZ3JvdXAgbW91bnQgb3B0aW9uLlxcblwiKTtcbitcdGVsc2UgaWYgKCFoYXNfbWVtb3J5X2NtYV9hY2MpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiQ01BIGFjY291bnRpbmcgaXMgZGlzYWJsZWQuXFxuXCIpO1xuK1xuK1x0aWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiY2dyb3VwZnMgaXMgbm90IGF2YWlsYWJsZS5cXG5cIik7XG4rXG4rXHRpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgXCJjZ3JvdXAuY29udHJvbGxlcnNcIiwgXCJtZW1vcnlcIikpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwibWVtb3J5IGNvbnRyb2xsZXIgaXMgbm90IGF2YWlsYWJsZSAoQ09ORklHX0NHUk9VUF9NRU1DRz8pXFxuXCIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7ICsraSkge1xuK1x0XHRzd2l0Y2ggKHRlc3RzW2ldLmZuKHJvb3QpKSB7XG4rXHRcdGNhc2UgS1NGVF9QQVNTOlxuK1x0XHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIiVzXFxuXCIsIHRlc3RzW2ldLm5hbWUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtTRlRfU0tJUDpcbitcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlc1xcblwiLCB0ZXN0c1tpXS5uYW1lKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCIlc1xcblwiLCB0ZXN0c1tpXS5uYW1lKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0a3NmdF9maW5pc2hlZCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUzNGE5NWVmNWUwNzdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2hcbkBAIC0wLDAgKzEsMTk3IEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI1xuKyMgQ29weXJpZ2h0IChjKSAyMDI2IFJlZCBIYXQsIEluYy5cbisjXG4rIyBSdW4gY2dyb3VwIG1lbW9yeSBjb250cm9sbGVyIHNlbGZ0ZXN0cyBpbnNpZGUgYSB2aXJ0bWUtbmcgVk1cbisjIERlcGVuZGVuY2llczpcbisjXHRcdCogdmlydG1lLW5nXG4rI1x0XHQqIGJ1c3lib3gtc3RhdGljICh1c2VkIGJ5IHZpcnRtZS1uZylcbisjXHRcdCogcWVtdVx0KHVzZWQgYnkgdmlydG1lLW5nKVxuK1xuK3NldCAtZXVvIHBpcGVmYWlsXG4rXG4rcmVhZG9ubHkgU0NSSVBUX0RJUj1cIiQoY2QgLVAgLS0gXCIkKGRpcm5hbWUgLS0gXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiIFx1MDAyNlx1MDAyNiBwd2QgLVApXCJcbityZWFkb25seSBLRVJORUxfQ0hFQ0tPVVQ9XCIkKHJlYWxwYXRoIFwiJHtTQ1JJUFRfRElSfVwiLy4uLy4uLy4uLy4uLylcIlxuK1xuK3NvdXJjZSBcIiR7U0NSSVBUX0RJUn1cIi8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4rXG4rcmVhZG9ubHkgU1NIX0dVRVNUX1BPUlQ9XCIke1NTSF9HVUVTVF9QT1JUOi0yMn1cIlxuK3JlYWRvbmx5IFdBSVRfUEVSSU9EPTNcbityZWFkb25seSBXQUlUX1BFUklPRF9NQVg9ODBcbityZWFkb25seSBXQUlUX1RPVEFMPSQoKFdBSVRfUEVSSU9EICogV0FJVF9QRVJJT0RfTUFYKSlcbityZWFkb25seSBRRU1VX1BJREZJTEU9XCIkKG1rdGVtcCAvdG1wL3FlbXVfbWVtY2dfdm10ZXN0X1hYWFgucGlkKVwiXG4rcmVhZG9ubHkgUUVNVV9PUFRTPVwiIC0tcGlkZmlsZSAke1FFTVVfUElERklMRX0gXCJcbitcbitCVUlMRD0wXG4rUUVNVT1cInFlbXUtc3lzdGVtLSQodW5hbWUgLW0pXCJcbitWRVJCT1NFPTBcbitTSEVMTF9NT0RFPTBcbitHVUVTVF9UUkVFPVwiJHtHVUVTVF9UUkVFOi0kS0VSTkVMX0NIRUNLT1VUfVwiXG4rXG4rdXNhZ2UoKSB7XG4rXHRjYXQgXHUwMDNjXHUwMDNjRU9GXG4rJDAgW09QVElPTlNdXG4rICAgIC1iICAgICAgICBCdWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSBiZWZvcmUgYm9vdGluZ1xuKyAgICAtcSBcdTAwM2NxZW11XHUwMDNlIFFFTVUgYmluYXJ5L3BhdGggKGRlZmF1bHQ6ICRRRU1VKVxuKyAgICAtcyAgICAgICAgU3RhcnQgaW50ZXJhY3RpdmUgc2hlbGwgaW4gVk1cbisgICAgLXYgICAgICAgIFZlcmJvc2Ugb3V0cHV0ICh2bmcgYm9vdCBsb2dzIG9uIHN0ZG91dClcbitFT0ZcbitcdGV4aXQgMVxuK31cbitcbitkaWUoKSB7XG4rXHRlY2hvIFwiJCpcIiBcdTAwM2VcdTAwMjYyXG4rXHRleGl0IFwiJHtLU0ZUX0ZBSUx9XCJcbit9XG4rXG4rY2xlYW51cCgpIHtcbitcdGlmIFtbIC1zIFwiJFFFTVVfUElERklMRVwiIF1dOyB0aGVuXG4rXHRcdHBraWxsIC1TSUdURVJNIC1GIFwiJFFFTVVfUElERklMRVwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCB0cnVlXG4rXHRmaVxuK1xuK1x0aWYgW1sgLWUgXCIkUUVNVV9QSURGSUxFXCIgXV07IHRoZW5cbitcdFx0cm0gLWYgXCIkUUVNVV9QSURGSUxFXCJcbitcdGZpXG4rfVxuK1xuK3ZtX3NzaCgpIHtcbitcdHN0ZGJ1ZiAtb0wgc3NoIC1xIFxcXG4rXHRcdC1GIFwiJEhPTUUvLmNhY2hlL3ZpcnRtZS1uZy8uc3NoL3ZpcnRtZS1uZy1zc2guY29uZlwiIFxcXG4rXHRcdC1sIHJvb3QgXCJ2aXJ0bWUtbmclJFNTSF9HVUVTVF9QT1JUXCIgXFxcbitcdFx0XCIkQFwiXG4rfVxuK1xuK2NoZWNrX2RlcHMoKSB7XG4rXHRmb3IgZGVwIGluIHZuZyBcIiRRRU1VXCIgYnVzeWJveCBwa2lsbCBzc2g7IGRvXG4rXHRcdGlmICEgY29tbWFuZCAtdiBcIiRkZXBcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0XHRlY2hvIFwic2tpcDogZGVwZW5kZW5jeSAkZGVwIG5vdCBmb3VuZFwiXG4rXHRcdFx0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK1x0XHRmaVxuK1x0ZG9uZVxuK31cbitcbitoYW5kbGVfYnVpbGQoKSB7XG4rXHRpZiBbWyAhIFwiJEJVSUxEXCIgLWVxIDEgXV07IHRoZW5cbitcdFx0cmV0dXJuXG4rXHRmaVxuK1xuK1x0aWYgW1sgISAtZCBcIiRLRVJORUxfQ0hFQ0tPVVRcIiBdXTsgdGhlblxuK1x0XHRlY2hvIFwiLWIgcmVxdWlyZXMgJDAgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCAxXG4rXHRmaVxuK1xuK1x0cHVzaGQgXCIkS0VSTkVMX0NIRUNLT1VUXCIgXHUwMDI2XHUwMDNlL2Rldi9udWxsXG4rXG4rXHRpZiAhIHZuZyAtLWtjb25maWcgLS1jb25maWcgXCIkU0NSSVBUX0RJUlwiL2NvbmZpZzsgdGhlblxuK1x0XHRkaWUgXCJmYWlsZWQgdG8gZ2VuZXJhdGUgLmNvbmZpZyBmb3Iga2VybmVsIHNvdXJjZSB0cmVlICgkS0VSTkVMX0NIRUNLT1VUKVwiXG4rXHRmaVxuK1xuK1x0aWYgISBtYWtlIC1qXCIkKG5wcm9jKVwiOyB0aGVuXG4rXHRcdGRpZSBcImZhaWxlZCB0byBidWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcIlxuK1x0ZmlcbitcbitcdHBvcGQgXHUwMDI2XHUwMDNlL2Rldi9udWxsXG4rfVxuK1xuK3ZtX3N0YXJ0KCkge1xuK1x0bG9jYWwgbG9nZmlsZT0vZGV2L251bGxcbitcdGxvY2FsIHZlcmJvc2Vfb3B0PVwiXCJcbitcdGxvY2FsIGtlcm5lbF9vcHQ9XCJcIlxuK1xuK1x0aWYgW1sgXCIkVkVSQk9TRVwiIC1lcSAxIF1dOyB0aGVuXG4rXHRcdHZlcmJvc2Vfb3B0PVwiLS12ZXJib3NlXCJcbitcdFx0bG9nZmlsZT0vZGV2L3N0ZG91dFxuK1x0ZmlcbitcbitcdGlmIFtbIFwiJEJVSUxEXCIgLWVxIDEgXV07IHRoZW5cbitcdFx0a2VybmVsX29wdD1cIiR7S0VSTkVMX0NIRUNLT1VUfVwiXG4rXHRmaVxuK1xuK1x0dm5nIFxcXG4rXHRcdC0tcnVuIFxcXG4rXHRcdCR7a2VybmVsX29wdH0gXFxcbitcdFx0JHt2ZXJib3NlX29wdH0gXFxcbitcdFx0LS1xZW11LW9wdHM9XCIkUUVNVV9PUFRTXCIgXFxcbitcdFx0LS1xZW11PVwiJChjb21tYW5kIC12IFwiJFFFTVVcIilcIiBcXFxuK1x0XHQtLXVzZXIgcm9vdCBcXFxuK1x0XHQtLXNzaCBcIiRTU0hfR1VFU1RfUE9SVFwiIFxcXG4rXHRcdC0tbWVtb3J5IDNHIFxcXG4rXHRcdC0tYXBwZW5kIFwiY21hPTY0TSBodWdldGxiX2NtYT0xRyBodWdldGxiX2NtYV9vbmx5PTFcIiBcXFxuK1x0XHQtLXJ3IFx1MDAyNlx1MDAzZVwiJGxvZ2ZpbGVcIiBcdTAwMjZcbitcbitcdGxvY2FsIHZuZ19waWQ9JCFcbitcdGxvY2FsIGVsYXBzZWQ9MFxuK1xuK1x0d2hpbGUgW1sgISAtcyBcIiRRRU1VX1BJREZJTEVcIiBdXTsgZG9cbitcdFx0a2lsbCAtMCBcIiR2bmdfcGlkXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBcXFxuK1x0XHRcdGRpZSBcInZuZyBleGl0ZWQgZWFybHk7IGZhaWxlZCB0byBib290IFZNXCJcbitcdFx0W1sgXCIkZWxhcHNlZFwiIC1nZSBcIiRXQUlUX1RPVEFMXCIgXV0gXHUwMDI2XHUwMDI2IFxcXG4rXHRcdFx0ZGllIFwidGltZWQgb3V0IHdhaXRpbmcgZm9yIFZNIGJvb3RcIlxuK1x0XHRzbGVlcCAxXG4rXHRcdGVsYXBzZWQ9JCgoZWxhcHNlZCArIDEpKVxuK1x0ZG9uZVxuK31cbitcbit2bV93YWl0X2Zvcl9zc2goKSB7XG4rXHRsb2NhbCBpPTBcbitcdHdoaWxlIHRydWU7IGRvXG4rXHRcdHZtX3NzaCAtLSB0cnVlIFx1MDAyNlx1MDAyNiBicmVha1xuK1x0XHRpPSQoKGkgKyAxKSlcbitcdFx0W1sgXCIke2l9XCIgLWd0IFwiJFdBSVRfUEVSSU9EX01BWFwiIF1dIFx1MDAyNlx1MDAyNiBcXFxuK1x0XHRcdGRpZSBcInRpbWVkIG91dCB3YWl0aW5nIGZvciBndWVzdCBzc2hcIlxuK1x0XHRzbGVlcCBcIiRXQUlUX1BFUklPRFwiXG4rXHRkb25lXG4rfVxuK1xuK2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHtcbitcdHZtX3NzaCAtLSBcImdyZXAgLXEgbWVtb3J5IC9zeXMvZnMvY2dyb3VwL2Nncm91cC5jb250cm9sbGVyc1wiIFxcXG4rXHRcdHx8IGRpZSBcIm1lbW9yeSBjb250cm9sbGVyIG5vdCBhdmFpbGFibGUgKENPTkZJR19NRU1DRz8pXCJcbitcdHZtX3NzaCAtLSBcIltbIC1lIC9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uIF1dXCIgXFxcbitcdFx0fHwgZGllIFwiQ01BIGhlYXAgbm90IGF2YWlsYWJsZSAoQ09ORklHX0RNQUJVRl9IRUFQU19DTUE/IGNtYT0gY21kbGluZT8pXCJcbit9XG4rXG4rc2V0dXBfZ3Vlc3RfY21hX2FjY291bnRpbmcoKSB7XG4rXHR2bV9zc2ggLS0gXCJtb3VudCAtbyByZW1vdW50LG1lbW9yeV9jbWFfYWNjb3VudGluZyAvc3lzL2ZzL2Nncm91cFwiIFxcXG4rXHRcdHx8IGRpZSBcImZhaWxlZCB0byBlbmFibGUgbWVtb3J5X2NtYV9hY2NvdW50aW5nXCJcbitcdHZtX3NzaCAtLSBcImVjaG8gK21lbW9yeSBcdTAwM2UgL3N5cy9mcy9jZ3JvdXAvY2dyb3VwLnN1YnRyZWVfY29udHJvbFwiIFxcXG4rXHRcdHx8IGRpZSBcImZhaWxlZCB0byBlbmFibGUgbWVtb3J5IGNvbnRyb2xsZXJcIlxuK31cbitcbitydW5fdGVzdCgpIHtcbitcdHZtX3NzaCAtLSBcImNkICckR1VFU1RfVFJFRScgXHUwMDI2XHUwMDI2IG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMgVEFSR0VUUz1jZ3JvdXBcIlxuK1x0dm1fc3NoIC0tIFwiY2QgJyRHVUVTVF9UUkVFJyBcdTAwMjZcdTAwMjYgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cyBUQVJHRVRTPWNncm91cCBydW5fdGVzdHNcIlxuK31cbitcbit3aGlsZSBnZXRvcHRzIFwiOmh2cTpzYlwiIG9wdDsgZG9cbitcdGNhc2UgXCIkb3B0XCIgaW5cbitcdHYpIFZFUkJPU0U9MSA7O1xuK1x0cSkgUUVNVT1cIiR7T1BUQVJHfVwiIDs7XG4rXHRiKSBCVUlMRD0xIDs7XG4rXHRzKSBTSEVMTF9NT0RFPTEgOztcbitcdGh8KikgdXNhZ2UgOztcbitcdGVzYWNcbitkb25lXG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbitjaGVja19kZXBzXG4raGFuZGxlX2J1aWxkXG4rZWNobyBcIkJvb3RpbmcgdmlydG1lLW5nIFZNLi4uXCJcbit2bV9zdGFydFxuK3ZtX3dhaXRfZm9yX3NzaFxuK2VjaG8gXCJWTSBpcyByZWFjaGFibGUgdmlhIFNTSC5cIlxuK1xuK2lmIFtbIFwiJFNIRUxMX01PREVcIiAtZXEgMSBdXTsgdGhlblxuK1x0ZWNobyBcIlN0YXJ0aW5nIGludGVyYWN0aXZlIHNoZWxsIGluIFZNLiBFeGl0IHRvIHN0b3AgVk0uXCJcbitcdHZtX3NzaCAtdCAtLSBcImNkICckR1VFU1RfVFJFRScgXHUwMDI2XHUwMDI2IGV4ZWMgYmFzaCAtLW5vcHJvZmlsZSAtLW5vcmNcIlxuK1x0ZXhpdCBcIiRLU0ZUX1BBU1NcIlxuK2ZpXG4rXG4rY2hlY2tfZ3Vlc3RfcmVxdWlyZW1lbnRzXG4rc2V0dXBfZ3Vlc3RfY21hX2FjY291bnRpbmdcbitcbitlY2hvIFwiUnVubmluZyBjZ3JvdXAgc2VsZnRlc3RzIGluIFZNLi4uXCJcbitydW5fdGVzdFxuK2VjaG8gXCJQQVNTOiBjZ3JvdXAgc2VsZnRlc3RzIGNvbXBsZXRlZFwiXG4rZXhpdCBcIiRLU0ZUX1BBU1NcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTk6MTM6MjAuMzg3MzM5MDA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMDY0ODMzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IG1lbW9yeV9jbWFfYWNjb3VudGluZyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgZ29vZCBsb29rIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjaW5nIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIGZvciBjZ3JvdXAgdjIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGEgZnVsbCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3Qgd2FycmFudGVkIGhlcmUsIGJ1dCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyB0byBiZSBjZXJ0YWluLlxuXG5UaGUgY29yZSBpZGVhIGlzIHRvIGFjY291bnQgZm9yIENNQSBtZW1vcnkgdXNhZ2Ugd2l0aGluIGNncm91cHMsIHdoaWNoIGVudGFpbHMgYWRkaW5nIHNvbWUgbmV3IGNvdW50ZXJzIGFuZCBleHBvc2luZyB0aGVtIHZpYSBjZ3JvdXBmcy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIGFuZCBhbnkgZGF0YSByYWNlcy5cblxuSSBzdGFydGVkIGJ5IGV4YW1pbmluZyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgbmV3IGRhdGEgc3RydWN0dXJlcy4gIGBtZW1jZy1cdTAwM2VjbWFfY291bnRlcnNgIGFuZCBgY21hX2RmbF9maWxlc2AgYXJlIGJvdGggYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYC4gVGhpcyBpbW1lZGlhdGVseSBhbGxldmlhdGVzIHRoZSBiaWdnZXN0IGNvbmNlcm4uIGBrY2FsbG9jYCBwcm92aWRlcyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSwgcmVtb3ZpbmcgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHN0YXJ0LlxuXG5OZXh0LCBJIHNjcnV0aW5pemVkIHRoZSBjZ3JvdXBmcyBleHBvc3VyZSwgc3BlY2lmaWNhbGx5IHRoZSBjcmVhdGlvbiBvZiB0aG9zZSBgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLmN1cnJlbnRgIGFuZCBgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heGAgZmlsZXMuIFRoZSBjb2RlIGxldmVyYWdlcyBgc2VxX3ByaW50ZmAgYW5kIGBzZXFfcHV0c19tZW1jZ190dW5hYmxlYCwgd2hpY2ggYXJlIHVzZWQgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHJhdyBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhhdCB2YXN0bHkgcmVkdWNlcyB0aGUgY2hhbmNlcyBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlIGR1ZSB0byBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuXG5JIHRoZW4gbG9va2VkIGF0IHRoZSBDTUEgY2hhcmdlIGFuZCB1bmNoYXJnZSBwYXRocyBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL2NtYS5jYCwgc3BlY2lmaWNhbGx5IGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgLiBJIGNoZWNrZWQgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiAgQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiBtZW1vcnkgY2hhcmdpbmcgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYW5kIHRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQuIE5vIGZ1bmt5IG1lbW9yeSBtYW5pcHVsYXRpb24gb3Igc3RydWN0dXJlIGp1Z2dsaW5nIGhlcmUgdGhhdCB3b3VsZCBtYWtlIG1lIG5lcnZvdXMuICBUaGUgY2hhcmdlL3VuY2hhcmdlIGxvZ2ljIGxvb2tzIHNvbGlkOyBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgY2FsbGVkIGFuZCBhbnkgZXJyb3JzIGFyZSBkZWFsdCB3aXRoLlxuXG5BIGtleSBwYXJ0IG9mIENNQSB1bmNoYXJnZSBpcyB0aGUgdXNhZ2Ugb2YgYGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAwO2AuIEkgaGF2ZSB0byBkb3VibGUgY2hlY2sgdGhhdCB3ZSBkZWFsIGNvcnJlY3RseSB3aXRoIHBvc3NpYmxlIHJhY2VzLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIGByY3VfcmVhZF9sb2NrKClgIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gaXNzdWVzLlxuXG5BZnRlciBhbGwgb2YgdGhlIGNoZWNrcywgSSBmZWVsIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtcyBvciBkYXRhIHJhY2VzIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoZSBtYWluIHJpc2tzIGhlcmUgd291bGQgYmUgdGhpbmdzIGxpa2UgYSBtZW1vcnkgbGVhayAocGVyaGFwcyBpbiB0aGUgQ01BIGFsbG9jYXRpb24gb3IgZnJlZWluZyBsb2dpYyksIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hlbiBpbmRleGluZyBgY21hX2NvdW50ZXJzYCBvciBhbiBgb2JqX2Nncm91cGAgd2hpY2ggS0FTQU4gd291bGQgZGV0ZWN0LlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgbWVtb3J5IGFjY291bnRpbmcgdmlhIGBrY2FsbG9jYCB6ZXJvZWQgbWVtb3J5IGFuZCBjbGVhciBkYXRhIGZsb3dzLiAgVGhlIGNncm91cGZzIGV4cG9zdXJlIGlzIGNsZWFuLCBhbmQgdGhlIENNQSBjaGFyZ2UvdW5jaGFyZ2UgbG9naWMgaXMgc3RyYWlnaHRmb3J3YXJkLiAgS0FTQU4gYW5kIG90aGVyIHRvb2xzIHdvdWxkIGJlIHN1ZmZpY2llbnQuICBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzbid0IHNvbWV0aGluZyBJIHNlZSBhcyBuZWNlc3NhcnkgaW4gdGhpcyBjYXNlLiBMZXQncyBtb3ZlIHRoaXMgdG8gdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MzQsIk91dHB1dFRva2VucyI6MzMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEzOjQzLjQ1MjE3NDc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHRvIGFjY291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAncyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgaW52b2x2ZTpcXG4xLiBBZGRpbmcgYGNtYV9jb3VudGVyc2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXFxuMi4gQWRkaW5nIGBjbWFfZGZsX2ZpbGVzYCBhcnJheSBmb3IgY2dyb3VwZnMsIHdoaWNoIGlzIGFsc28gYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXFxuMy4gRXhwb3NpbmcgQ01BIHVzYWdlIGFuZCBsaW1pdHMgdmlhIGNncm91cGZzIGZpbGVzIChgbWVtb3J5LmNtYS5cXHUwMDNjYXJlYVxcdTAwM2UuY3VycmVudGAgYW5kIGBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5tYXhgKS4gVGhlc2UgZmlsZXMgdXNlIGBzZXFfcHJpbnRmYCBhbmQgYHNlcV9wdXRzX21lbWNnX3R1bmFibGVgIHRvIGZvcm1hdCBpbnRlZ2VyIHZhbHVlcywgbWVhbmluZyBubyByYXcga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuNC4gTW9kaWZ5aW5nIENNQSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlIHBhdGhzIHRvIGNoYXJnZSBhbmQgdW5jaGFyZ2UgbWVtb3J5IGNncm91cHMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGVzZSBwYXRocyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcGFzc2VkIGFyb3VuZC5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBjbWFfY291bnRlcnNgLCB1c2UtYWZ0ZXItZnJlZSBvZiBgbWVtY2dgLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHRvIGFjY291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAncyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgaW52b2x2ZTpcXG4xLiBBZGRpbmcgYGNtYV9jb3VudGVyc2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXFxuMi4gQWRkaW5nIGBjbWFfZGZsX2ZpbGVzYCBhcnJheSBmb3IgY2dyb3VwZnMsIHdoaWNoIGlzIGFsc28gYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXFxuMy4gRXhwb3NpbmcgQ01BIHVzYWdlIGFuZCBsaW1pdHMgdmlhIGNncm91cGZzIGZpbGVzIChgbWVtb3J5LmNtYS5cXHUwMDNjYXJlYVxcdTAwM2UuY3VycmVudGAgYW5kIGBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5tYXhgKS4gVGhlc2UgZmlsZXMgdXNlIGBzZXFfcHJpbnRmYCBhbmQgYHNlcV9wdXRzX21lbWNnX3R1bmFibGVgIHRvIGZvcm1hdCBpbnRlZ2VyIHZhbHVlcywgbWVhbmluZyBubyByYXcga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuNC4gTW9kaWZ5aW5nIENNQSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlIHBhdGhzIHRvIGNoYXJnZSBhbmQgdW5jaGFyZ2UgbWVtb3J5IGNncm91cHMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGVzZSBwYXRocyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcGFzc2VkIGFyb3VuZC5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBjbWFfY291bnRlcnNgLCB1c2UtYWZ0ZXItZnJlZSBvZiBgbWVtY2dgLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 19:10:36 +0000 UTC FinishedAt: 2026-08-21 19:13:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "98f21c54f99519329c18e2625b0ea6db14524d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMCG", "DMA_CMA", "DMABUF_HEAPS", "DMABUF_HEAPS_CMA", "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "98f21c54f99519329c18e2625b0ea6db14524d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMCG", "DMA_CMA", "DMABUF_HEAPS", "DMABUF_HEAPS_CMA", "HUGETLBFS" ], "series_id": "67a74c8b-1377-4278-8653-7f4bfbfa1f94" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_charge_cma", "mem_cgroup_uncharge_cma" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE5OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtETUFfQ01BJiMzNDssCiAgICAmIzM0O0RNQUJVRl9IRUFQUyYjMzQ7LAogICAgJiMzNDtETUFCVUZfSEVBUFNfQ01BJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2NtYSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VuY2hhcmdlX2NtYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgdG8gYWNjb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgaW52b2x2ZTpcbjEuIEFkZGluZyBgY21hX2NvdW50ZXJzYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cbjIuIEFkZGluZyBgY21hX2RmbF9maWxlc2AgYXJyYXkgZm9yIGNncm91cGZzLCB3aGljaCBpcyBhbHNvIGFsbG9jYXRlZCB1c2luZyBga2NhbGxvY2AgKHplcm8taW5pdGlhbGl6ZWQpLlxuMy4gRXhwb3NpbmcgQ01BIHVzYWdlIGFuZCBsaW1pdHMgdmlhIGNncm91cGZzIGZpbGVzIChgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLmN1cnJlbnRgIGFuZCBgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heGApLiBUaGVzZSBmaWxlcyB1c2UgYHNlcV9wcmludGZgIGFuZCBgc2VxX3B1dHNfbWVtY2dfdHVuYWJsZWAgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLCBtZWFuaW5nIG5vIHJhdyBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjQuIE1vZGlmeWluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZSBwYXRocyB0byBjaGFyZ2UgYW5kIHVuY2hhcmdlIG1lbW9yeSBjZ3JvdXBzLiBBbGwgbG9jYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlc2UgcGF0aHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHBhc3NlZCBhcm91bmQuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGNtYV9jb3VudGVyc2AsIHVzZS1hZnRlci1mcmVlIG9mIGBtZW1jZ2AsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2Agd2hpY2ggZW5hYmxlcyBhY2NvdW50aW5nIG9mIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJiMzOTtzIG92ZXJhbGwgbWVtb3J5IHVzYWdlLiBJdCBhZGRzIG5ldyBjb3JlIGZ1bmN0aW9ucyBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCB0byBoYW5kbGUgdGhlIGFjY291bnRpbmcgZHVyaW5nIENNQSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQ01BIGFsbG9jYXRpb25zIChlLmcuLCB1c2luZyBETUEtQlVGIGhlYXBzIG9yIGh1Z2V0bGIpIHdoZW4gdGhlIG1vdW50IG9wdGlvbiBpcyBlbmFibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIENNQSBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzOGRlNzQxODEzZWI0NzZhOWQ1MjBjZmQwOTZjYTFhMGExNTE4NDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxOToxMjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbmluZGV4IGFlZDE5NWE3MWNiZjEuLjM5ODcxYTdhMDhhOGQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTI0Niw2ICYjNDM7MjQ2LDI2IEBAIGNncm91cCB2MiBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zLlxuICAgICAgICAgICB3aWxsIG5vdCBiZSB0cmFja2VkIGJ5IHRoZSBtZW1vcnkgY29udHJvbGxlciAoZXZlbiBpZiBjZ3JvdXBcbiAgICAgICAgICAgdjIgaXMgcmVtb3VudGVkIGxhdGVyIG9uKS5cbiBcbiYjNDM7ICBtZW1vcnlfY21hX2FjY291bnRpbmdcbiYjNDM7ICAgICAgICBDb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZSBmb3JcbiYjNDM7ICAgICAgICB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBleHBvc2UgcGVyLUNNQS1hcmVhIHVzYWdlIGNvdW50ZXJzLiBUaGlzXG4mIzQzOyAgICAgICAgYmVoYXZpb3IgaXMgb3B0LWluLCBzbyBhcyB0byBub3QgY2F1c2UgcmVncmVzc2lvbiBvbiBleGlzdGluZyBzZXR1cHMuXG4mIzQzO1xuJiM0MzsgICAgICAgIEEgZmV3IGNhdmVhdHMgdG8ga2VlcCBpbiBtaW5kOlxuJiM0MztcbiYjNDM7ICAgICAgICAqIENNQSBhcmVhcyBhcmUgcmVzZXJ2ZWQgYXQgYm9vdCB0aW1lLCBtZW1vcnkgaXMgb25seSBjaGFyZ2VkIHRvIGFcbiYjNDM7ICAgICAgICAgIGNncm91cCB3aGVuIGEgQ01BIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIG9uIGl0cyBiZWhhbGYuXG4mIzQzOyAgICAgICAgKiBDTUEgcGFnZXMgYWxsb2NhdGVkIHdoaWxlIHRoaXMgb3B0aW9uIGlzIG5vdCBlbmFibGVkIHdpbGwgbm90IGJlXG4mIzQzOyAgICAgICAgICB0cmFja2VkIGJ5IHRoZSBtZW1vcnkgY29udHJvbGxlciwgZXZlbiBpZiBjZ3JvdXAgdjIgaXMgcmVtb3VudGVkXG4mIzQzOyAgICAgICAgICBsYXRlciBvbiB3aXRoIHRoaXMgb3B0aW9uLiBDaGFyZ2VzIGhhcHBlbiBhdCBhbGxvY2F0aW9uLlxuJiM0MzsgICAgICAgICogQ01BIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIGJvdGggdG8gdGhlIGNncm91cCYjMzk7cyBtZW1vcnkgY291bnRlclxuJiM0MzsgICAgICAgICAgKGxpbWl0ZWQgYnkgbWVtb3J5Lm1heCkgYW5kIHRoZSBwZXItYXJlYSBDTUEgY291bnRlciAobGltaXRlZCBieVxuJiM0MzsgICAgICAgICAgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heCkuIEhpdHRpbmcgZWl0aGVyIGxpbWl0IGNhbiBjYXVzZSBhbiBhbGxvY2F0aW9uXG4mIzQzOyAgICAgICAgICB0byBmYWlsLiBJZiBDTUEgdXNhZ2UgcHVzaGVzIHRoZSBjZ3JvdXAgb3ZlciBtZW1vcnkuaGlnaCBvclxuJiM0MzsgICAgICAgICAgbWVtb3J5Lm1heCwgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG90aGVyXG4mIzQzOyAgICAgICAgICBtZW1vcnkgb25seS4gQ01BIG1lbW9yeSBjaGFyZ2VkIHRvIHRoZSBjZ3JvdXAgaXMgbm90IHJlY2xhaW1hYmxlLlxuJiM0MzsgICAgICAgICAgTGltaXRzIHNob3VsZCBiZSBzaXplZCB0byBhY2NvbW1vZGF0ZSB0aGUgZXhwZWN0ZWQgQ01BIHByZXNzdXJlLlxuJiM0MztcbiAgIHBpZHNfbG9jYWxldmVudHNcbiAgICAgICAgIFRoZSBvcHRpb24gcmVzdG9yZXMgdjEtbGlrZSBiZWhhdmlvciBvZiBwaWRzLmV2ZW50czptYXgsIHRoYXQgaXMgb25seVxuICAgICAgICAgbG9jYWwgKGluc2lkZSBjZ3JvdXAgcHJvcGVyKSBmb3JrIGZhaWx1cmVzIGFyZSBjb3VudGVkLiBXaXRob3V0IHRoaXNcbkBAIC0xOTA4LDYgJiM0MzsxOTI4LDIxIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXG4gXHRUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgYW5kIHN3YXBwaW5nXG4gXHRpcyBhbGxvd2VkIHVubGVzcyBtZW1vcnkuc3dhcC5tYXggaXMgc2V0IHRvIDAuXG4gXG4mIzQzOyAgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLmN1cnJlbnRcbiYjNDM7ICAgICAgICBBIHJlYWQtb25seSBzaW5nbGUgdmFsdWUgZmlsZSB3aGljaCBleGlzdHMgb24gbm9uLXJvb3QgY2dyb3Vwcy4gXHUwMDNjYXJlYVx1MDAzZVxuJiM0MzsgICAgICAgIGlzIHRoZSBDTUEgYXJlYSBuYW1lIChlLmcuIFwmIzM0O3Jlc2VydmVkXCYjMzQ7IGZvciB0aGUgZGVmYXVsdCBETUEgQ01BIGFyZWEpLlxuJiM0MztcbiYjNDM7ICAgICAgICBUaGUgdG90YWwgYW1vdW50IG9mIENNQSBtZW1vcnkgY3VycmVudGx5IGNoYXJnZWQgdG8gdGhlIGNncm91cCBmb3IgdGhlXG4mIzQzOyAgICAgICAgZ2l2ZW4gQ01BIGFyZWEuIE9ubHkgYWNjb3VudGVkIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuXG4mIzQzO1xuJiM0MzsgIG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5tYXhcbiYjNDM7ICAgICAgICBBIHJlYWQtd3JpdGUgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFRoZVxuJiM0MzsgICAgICAgIGRlZmF1bHQgaXMgXCYjMzQ7bWF4XCYjMzQ7LlxuJiM0MztcbiYjNDM7ICAgICAgICBDTUEgdXNhZ2UgaGFyZCBsaW1pdCBmb3IgdGhlIGdpdmVuIGFyZWEuIElmIGEgY2dyb3VwJiMzOTtzIENNQSB1c2FnZSBmb3JcbiYjNDM7ICAgICAgICB0aGlzIGFyZWEgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZhaWwuIE9ubHkgZW5mb3JjZWRcbiYjNDM7ICAgICAgICB3aGVuIG1lbW9yeV9jbWFfYWNjb3VudGluZyBpcyBlbmFibGVkLlxuJiM0MztcbiAgIG1lbW9yeS5wcmVzc3VyZVxuIFx0QSByZWFkLW9ubHkgbmVzdGVkLWtleWVkIGZpbGUuXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG5pbmRleCBkZTJjZDYyMzhjMmFlLi4xNWYzZjcxMTBjNWIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmhcbkBAIC0xMjksNiAmIzQzOzEyOSwxMSBAQCBlbnVtIHtcbiBcdCAqIEVuYWJsZSBsZWdhY3kgbG9jYWwgcGlkcy5ldmVudHMuXG4gXHQgKi9cbiBcdENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUyA9ICgxIFx1MDAzY1x1MDAzYyAyMCksXG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5hYmxlIGNtYSBhY2NvdW50aW5nIGZvciB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0Q0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORyA9ICgxIFx1MDAzY1x1MDAzYyAyMSksXG4gfTtcbiBcbiAvKiBjZnR5cGUtXHUwMDNlZmxhZ3MgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtYS5oIGIvaW5jbHVkZS9saW51eC9jbWEuaFxuaW5kZXggODU1NWQzOGE5N2IxYS4uMTZlMjEzNjQyMWI3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY21hLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY21hLmhcbkBAIC00OSwxMiAmIzQzOzQ5LDEyIEBAIGV4dGVybiBpbnQgY21hX2luaXRfcmVzZXJ2ZWRfbWVtKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4gXHRcdFx0XHRcdHN0cnVjdCBjbWEgKipyZXNfY21hKTtcbiBleHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcbiBcdFx0XHQgICAgICBib29sIG5vX3dhcm4pO1xuLWV4dGVybiBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KTtcbiYjNDM7ZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbiBcdFx0dW5zaWduZWQgaW50IGFsaWduLCBib29sIG5vX3dhcm4pO1xuIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcbiYjNDM7Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuIGV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjIuLjgwMWZiZGU5NDEzN2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0zMjAsNiAmIzQzOzMyMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHRzcGlubG9ja190IGV2ZW50X2xpc3RfbG9jaztcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ01BXG4mIzQzO1x0c3RydWN0IHBhZ2VfY291bnRlciAqY21hX2NvdW50ZXJzO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0NNQSAqL1xuJiM0MztcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpub2RlaW5mb1tdO1xuIH07XG4gXG5AQCAtNjYyLDYgJiM0Mzs2NjYsMTEgQEAgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG4gXG4mIzQzO2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGNtYSAqY21hKTtcbiYjNDM7dm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgY21hICpjbWEpO1xuJiM0MztcbiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiAvKipcbkBAIC0xMTYwLDYgJiM0MzsxMTY5LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgY21hICpjbWEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGNvdW50LCBzdHJ1Y3QgY21hICpjbWEpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcbmluZGV4IGI1YjQ2MWQ0NDE4YjEuLjEyMTg0Zjg1YWQxMDAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvY2dyb3VwL2Nncm91cC5jXG5AQCAtMTk4NSw2ICYjNDM7MTk4NSw3IEBAIGVudW0gY2dyb3VwMl9wYXJhbSB7XG4gXHRPcHRfbWVtb3J5X3JlY3Vyc2l2ZXByb3QsXG4gXHRPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyxcbiBcdE9wdF9waWRzX2xvY2FsZXZlbnRzLFxuJiM0MztcdE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcsXG4gXHRucl9fY2dyb3VwMl9wYXJhbXNcbiB9O1xuIFxuQEAgLTE5OTUsNiAmIzQzOzE5OTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGNncm91cDJfZnNfcGFyYW1ldGVyc1tdID0ge1xuIFx0ZnNwYXJhbV9mbGFnKFwmIzM0O21lbW9yeV9yZWN1cnNpdmVwcm90XCYjMzQ7LFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90KSxcbiBcdGZzcGFyYW1fZmxhZyhcJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCYjMzQ7LCBPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyksXG4gXHRmc3BhcmFtX2ZsYWcoXCYjMzQ7cGlkc19sb2NhbGV2ZW50c1wmIzM0OyxcdE9wdF9waWRzX2xvY2FsZXZlbnRzKSxcbiYjNDM7XHRmc3BhcmFtX2ZsYWcoXCYjMzQ7bWVtb3J5X2NtYV9hY2NvdW50aW5nXCYjMzQ7LFx0T3B0X21lbW9yeV9jbWFfYWNjb3VudGluZyksXG4gXHR7fVxuIH07XG4gXG5AQCAtMjAyNyw2ICYjNDM7MjAyOSw5IEBAIHN0YXRpYyBpbnQgY2dyb3VwMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtXG4gXHRjYXNlIE9wdF9waWRzX2xvY2FsZXZlbnRzOlxuIFx0XHRjdHgtXHUwMDNlZmxhZ3MgfD0gQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmc6XG4mIzQzO1x0XHRjdHgtXHUwMDNlZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuQEAgLTIwNjgsNiAmIzQzOzIwNzMsMTEgQEAgc3RhdGljIHZvaWQgYXBwbHlfY2dyb3VwX3Jvb3RfZmxhZ3ModW5zaWduZWQgaW50IHJvb3RfZmxhZ3MpXG4gXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XG4gXHRcdGVsc2VcbiBcdFx0XHRjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNj0gfkNHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUztcbiYjNDM7XG4mIzQzO1x0XHRpZiAocm9vdF9mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORylcbiYjNDM7XHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNj0gfkNHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkc7XG4gXHR9XG4gfVxuIFxuQEAgLTIwODUsNiAmIzQzOzIwOTUsOCBAQCBzdGF0aWMgaW50IGNncm91cF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBrZXJuZnNfcm9vdCAqa2Zfcm9vdFxuIFx0XHRzZXFfcHV0cyhzZXEsIFwmIzM0OyxtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCYjMzQ7KTtcbiBcdGlmIChjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMpXG4gXHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LHBpZHNfbG9jYWxldmVudHNcJiMzNDspO1xuJiM0MztcdGlmIChjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HKVxuJiM0MztcdFx0c2VxX3B1dHMoc2VxLCBcJiMzNDssbWVtb3J5X2NtYV9hY2NvdW50aW5nXCYjMzQ7KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC03NTIwLDcgJiM0Mzs3NTMyLDggQEAgc3RhdGljIHNzaXplX3QgZmVhdHVyZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdFwmIzM0O21lbW9yeV9sb2NhbGV2ZW50c1xcblwmIzM0O1xuIFx0XHRcdFwmIzM0O21lbW9yeV9yZWN1cnNpdmVwcm90XFxuXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7bWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xcblwmIzM0O1xuLVx0XHRcdFwmIzM0O3BpZHNfbG9jYWxldmVudHNcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcJiMzNDtwaWRzX2xvY2FsZXZlbnRzXFxuXCYjMzQ7XG4mIzQzO1x0XHRcdFwmIzM0O21lbW9yeV9jbWFfYWNjb3VudGluZ1xcblwmIzM0Oyk7XG4gfVxuIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2dyb3VwX2ZlYXR1cmVzX2F0dHIgPSBfX0FUVFJfUk8oZmVhdHVyZXMpO1xuIFxuZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmNcbmluZGV4IGExM2NlNDk5OWIzOWYuLjAzZWIzYWNiZDNjNzUgMTAwNjQ0XG4tLS0gYS9tbS9jbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY21hLmNcbkBAIC0yNSw3ICYjNDM7MjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbkBAIC05MDUsNiAmIzQzOzkwNCwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsXG4gXHRcdGNtYV9kZWJ1Z19zaG93X2FyZWFzKGNtYSk7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBhZ2UgXHUwMDI2XHUwMDI2IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShwYWdlLCBjb3VudCwgY21hKSkge1xuJiM0MztcdFx0ZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBjb3VudCk7XG4mIzQzO1x0XHRjbWFfY2xlYXJfYml0bWFwKGNtYSwgXHUwMDI2Y21hLVx1MDAzZXJhbmdlc1tyXSwgcGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcbiYjNDM7XHRcdHBhZ2UgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwcl9kZWJ1ZyhcJiMzNDslcygpOiByZXR1cm5lZCAlcFxcblwmIzM0OywgX19mdW5jX18sIHBhZ2UpO1xuIFx0dHJhY2VfY21hX2FsbG9jX2ZpbmlzaChuYW1lLCBwYWdlID8gcGFnZV90b19wZm4ocGFnZSkgOiAwLFxuIFx0XHRcdCAgICAgICBwYWdlLCBjb3VudCwgYWxpZ24sIHJldCk7XG5AQCAtOTkyLDEyICYjNDM7OTk3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX21lbXJhbmdlICpmaW5kX2NtYV9tZW1yYW5nZShzdHJ1Y3QgY21hICpjbWEsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxuLVx0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlcyk7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDslcyhwYWdlICVwLCBjb3VudCAlbHUpXFxuXCYjMzQ7LCBfX2Z1bmNfXywgKHZvaWQgKilwYWdlcywgY291bnQpO1xuIFxuJiM0MztcdG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHBhZ2VzLCBjb3VudCwgY21hKTtcbiBcdGZyZWVfY29udGlnX2Zyb3plbl9yYW5nZShwZm4sIGNvdW50KTtcbiBcdGNtYV9jbGVhcl9iaXRtYXAoY21hLCBjbXIsIHBmbiwgY291bnQpO1xuIFx0Y21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhjbWEsIGNvdW50KTtcbkBAIC0xMDE0LDcgJiM0MzsxMDIwLDcgQEAgc3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG4gICogSXQgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91cyBhcmVhIGFuZFxuICAqIHRydWUgb3RoZXJ3aXNlLlxuICAqL1xuLWJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4mIzQzO2Jvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdCB1bnNpZ25lZCBsb25nIGNvdW50KVxuIHtcbiBcdHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcjtcbkBAIC0xMDM3LDcgJiM0MzsxMDQzLDcgQEAgYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY21hX3JlbGVhc2UpO1xuIFxuLWJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuJiM0Mztib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBjb3VudClcbiB7XG4gXHRzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7XG5kaWZmIC0tZ2l0IGEvbW0vY21hLmggYi9tbS9jbWEuaFxuaW5kZXggYzcwMTgwYzM2NTU5Yy4uNTJiN2Q0YmU1MTcwNyAxMDA2NDRcbi0tLSBhL21tL2NtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWEuaFxuQEAgLTQsNiAmIzQzOzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tvYmplY3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuIFxuIHN0cnVjdCBjbWFfa29iamVjdCB7XG4gXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuQEAgLTgwLDYgJiM0Mzs4MSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9tYXhubyhzdHJ1Y3QgY21hICpjbWEsXG4gXHRyZXR1cm4gY21yLVx1MDAzZWNvdW50IFx1MDAzZVx1MDAzZSBjbWEtXHUwMDNlb3JkZXJfcGVyX2JpdDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGNtYV9hcmVhX2luZGV4KGNvbnN0IHN0cnVjdCBjbWEgKmNtYSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjbWEgLSBjbWFfYXJlYXM7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19DTUFfU1lTRlNcbiB2b2lkIGNtYV9zeXNmc19hY2NvdW50X3N1Y2Nlc3NfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIGNtYV9zeXNmc19hY2NvdW50X2ZhaWxfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbmRpZmYgLS1naXQgYS9tbS9jbWFfZGVidWcuYyBiL21tL2NtYV9kZWJ1Zy5jXG5pbmRleCA1MjNiYTRhMGY5Zjc2Li43MGJmYzZmYmVlY2EzIDEwMDY0NFxuLS0tIGEvbW0vY21hX2RlYnVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYV9kZWJ1Zy5jXG5AQCAtNyw3ICYjNDM7Nyw2IEBAXG4gXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL21tL2NtYV9zeXNmcy5jIGIvbW0vY21hX3N5c2ZzLmNcbmluZGV4IGQ1YmY3OTJjNjI0NWEuLmU0ZWUzNWJjNjgyYmEgMTAwNjQ0XG4tLS0gYS9tbS9jbWFfc3lzZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY21hX3N5c2ZzLmNcbkBAIC01LDcgJiM0Mzs1LDYgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWluY2hhbiBLaW0gXHUwMDNjbWluY2hhbkBrZXJuZWwub3JnXHUwMDNlXG4gICovXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZi4uZjI4ZDYxMGE1OWNlNyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNjgsNiAmIzQzOzY4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3NsYWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O21lbWNvbnRyb2wtdjEuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjbWEuaFwmIzM0O1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuIFxuQEAgLTQwNjIsNiAmIzQzOzQwNjMsOSBAQCBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0aW50IG5vZGU7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ01BXG4mIzQzO1x0a2ZyZWUobWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzKTtcbiYjNDM7I2VuZGlmXG4gXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcbiBcdFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbm9kZV07XG4gXHRcdGlmICghcG4pXG5AQCAtNDE0NCw2ICYjNDM7NDE0OCwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspXG4gXHRcdG1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldLmRvbmUgPVxuIFx0XHRcdF9fV0JfQ09NUExFVElPTl9JTklUKFx1MDAyNm1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfQ01BXG4mIzQzO1x0aWYgKGNtYV9hcmVhX2NvdW50KSB7XG4mIzQzO1x0XHRtZW1jZy1cdTAwM2VjbWFfY291bnRlcnMgPSBrY2FsbG9jKGNtYV9hcmVhX2NvdW50LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlX2NvdW50ZXIpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIW1lbWNnLVx1MDAzZWNtYV9jb3VudGVycylcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdH1cbiAjZW5kaWZcbiBcdGxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7XG4gXHRyZXR1cm4gbWVtY2c7XG5AQCAtNDE1OSw2ICYjNDM7NDE3Miw3IEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MocGFyZW50X2Nzcyk7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7XG4gXHRib29sIG1lbWNnX29uX2RmbCA9IGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XG4mIzQzO1x0dW5zaWduZWQgaW50IF9fbWF5YmVfdW51c2VkIGk7XG4gXG4gXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XG4gXHRtZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTtcbkBAIC00MTcxLDYgJiM0Mzs0MTg1LDEyIEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuICNpZmRlZiBDT05GSUdfWlNXQVBcbiBcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG4mIzQzOyNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0NNQVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9hcmVhX2NvdW50OyAmIzQzOyYjNDM7aSlcbiYjNDM7XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpXSxcbiYjNDM7XHRcdFx0XHQgIHBhcmVudCA/IFx1MDAyNnBhcmVudC1cdTAwM2VjbWFfY291bnRlcnNbaV0gOiBOVUxMLFxuJiM0MztcdFx0XHRcdCAgZmFsc2UpO1xuICNlbmRpZlxuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuIFx0aWYgKHBhcmVudCkge1xuQEAgLTUyMTMsNiAmIzQzOzUyMzMsMTAyIEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19DTUFcbiYjNDM7c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfY21hKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgY21hICpjbWEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCAqZmFpbDtcbiYjNDM7XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdGludCByYyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2NtYSgpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbiYjNDM7XHRcdGdvdG8gY2dyb3VwX3B1dDtcbiYjNDM7XG4mIzQzO1x0cmMgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBHRlBfS0VSTkVMLCBjb3VudCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0Z290byBjZ3JvdXBfcHV0O1xuJiM0MztcbiYjNDM7XHRjb3VudGVyID0gXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2NtYV9hcmVhX2luZGV4KGNtYSldO1xuJiM0MztcdGlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoY291bnRlciwgY291bnQsIFx1MDAyNmZhaWwpKSB7XG4mIzQzO1x0XHRyZWZpbGxfc3RvY2sobWVtY2csIGNvdW50KTtcbiYjNDM7XHRcdHJjID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gY2dyb3VwX3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZyk7XG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UocGFnZV9mb2xpbyhwYWdlKSkpIHtcbiYjNDM7XHRcdGNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlKSwgb2JqY2cpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRvYmpfY2dyb3VwX2dldF9tYW55KG9iamNnLCBjb3VudCAtIDEpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRjb21taXRfY2hhcmdlKHBhZ2VfZm9saW8ocGFnZSAmIzQzOyBpKSwgb2JqY2cpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Nncm91cF9wdXQ6XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgY21hICpjbWEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuJiM0MztcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogR2V0IHRoZSBvYmpjZyBmcm9tIHRoZSBmaXJzdCBwYWdlLlxuJiM0MztcdCAqIHBhZ2Vfb2JqY2coKSBleHBlY3RzIE1FTUNHX0RBVEFfS01FTSwgYnV0IGZvciBDTUEgd2UgdXNlZFxuJiM0MztcdCAqIGNvbW1pdF9jaGFyZ2UoKSB3aGljaCBzZXRzIGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSBvYmpjZ1xuJiM0MztcdCAqIHdpdGhvdXQgZmxhZ3MsIHNvIHdlIGNhbm5vdCB1c2UgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0b2JqY2cgPSBmb2xpb19vYmpjZyhwYWdlX2ZvbGlvKHBhZ2UpKTtcbiYjNDM7XHRpZiAoIW9iamNnKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiYjNDM7XG4mIzQzO1x0Y291bnRlciA9IFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tjbWFfYXJlYV9pbmRleChjbWEpXTtcbiYjNDM7XHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoY291bnRlciwgY291bnQpO1xuJiM0MztcbiYjNDM7XHRtZW1jZ191bmNoYXJnZShtZW1jZywgY291bnQpO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuJiM0MztcdFx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4mIzQzO1x0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdFx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSAmIzQzOyBpKTtcbiYjNDM7XHRcdFx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4mIzQzO1x0XHRcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19DTUEgKi9cbiYjNDM7XG4gc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHR1bnNpZ25lZCBsb25nIG5yX21lbW9yeTtcbkBAIC02MDY2LDMgJiM0Mzs2MTgyLDkyIEBAIHZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0XHRLKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LmNoaWxkcmVuX21pbl91c2FnZSkpLFxuIFx0XHRLKGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LmNoaWxkcmVuX2xvd191c2FnZSkpKTtcbiB9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0NNQVxuJiM0MztzdGF0aWMgaW50IG1lbW9yeV9jbWFfY3VycmVudF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7XG4mIzQzO1x0aW50IGlkeCA9IHNlcV9jZnQobSktXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGN1ciA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdKTtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihtLCBcJiMzNDslbHVcXG5cJiMzNDssIGN1ciAqIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1lbW9yeV9jbWFfbWF4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcbiYjNDM7XHRpbnQgaWR4ID0gc2VxX2NmdChtKS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdLm1heCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sIG1heCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IG1lbW9yeV9jbWFfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuJiM0MztcdFx0XHRcdCAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbiYjNDM7XHRpbnQgaWR4ID0gb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWF4O1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbiYjNDM7XHRyYyA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsIFwmIzM0O21heFwmIzM0OywgXHUwMDI2bWF4KTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdHhjaGcoXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2lkeF0ubWF4LCBtYXgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmJ5dGVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGNmdHlwZSBjbWFfZGZsX3RtcGxbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O2N1cnJlbnRcJiMzNDssXG4mIzQzO1x0XHQuc2VxX3Nob3cgPSBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdyxcbiYjNDM7XHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7bWF4XCYjMzQ7LFxuJiM0MztcdFx0LnNlcV9zaG93ID0gbWVtb3J5X2NtYV9tYXhfc2hvdyxcbiYjNDM7XHRcdC53cml0ZSA9IG1lbW9yeV9jbWFfbWF4X3dyaXRlLFxuJiM0MztcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuJiM0MztcdH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzOyNkZWZpbmUgQ01BX0RGTF9UTVBMX1NJWkVcdChBUlJBWV9TSVpFKGNtYV9kZmxfdG1wbCkgLSAxKVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBjZnR5cGUgKmNtYV9kZmxfZmlsZXM7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX2NtYV9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY2Z0eXBlICpjZnQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIGo7XG4mIzQzO1x0aW50IGNvdW50O1xuJiM0MztcbiYjNDM7XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjbWFfYXJlYV9jb3VudClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjb3VudCA9IGNtYV9hcmVhX2NvdW50ICogQ01BX0RGTF9UTVBMX1NJWkU7XG4mIzQzO1x0Y21hX2RmbF9maWxlcyA9IGtjYWxsb2MoY291bnQgJiM0MzsgMSwgc2l6ZW9mKCpjbWFfZGZsX3RtcGwpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWNtYV9kZmxfZmlsZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7ICYjNDM7JiM0MztpKVxuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQ01BX0RGTF9UTVBMX1NJWkU7ICYjNDM7JiM0MztqKSB7XG4mIzQzO1x0XHRcdGNmdCA9IFx1MDAyNmNtYV9kZmxfZmlsZXNbaSAqIENNQV9ERkxfVE1QTF9TSVpFICYjNDM7IGpdO1xuJiM0MztcdFx0XHQqY2Z0ID0gY21hX2RmbF90bXBsW2pdO1xuJiM0MztcdFx0XHRzbnByaW50ZihjZnQtXHUwMDNlbmFtZSwgTUFYX0NGVFlQRV9OQU1FLCBcJiMzNDtjbWEuJXMuJXNcJiMzNDssXG4mIzQzO1x0XHRcdFx0IGNtYV9nZXRfbmFtZShcdTAwMjZjbWFfYXJlYXNbaV0pLFxuJiM0MztcdFx0XHRcdCBjbWFfZGZsX3RtcGxbal0ubmFtZSk7XG4mIzQzO1x0XHRcdGNmdC1cdTAwM2Vwcml2YXRlID0gaTsgLyogY21hIGFyZWEgaW5kZXggZm9yIGNvdW50ZXJzIGluIGNhbGxiYWNrcy4gKi9cbiYjNDM7XHRcdFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoXHUwMDI2Y2Z0LVx1MDAzZWxvY2tkZXBfa2V5KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgY21hX2RmbF9maWxlcykpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9jbWFfaW5pdCk7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQ01BICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuaW5kZXggOTUyZTQ0NDhiZjA3MC4uYjlhNDI5OGQ0OTQ0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuQEAgLTEsNSAmIzQzOzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIHRlc3RfY29yZVxuJiM0Mzt0ZXN0X2NtYV9tZW1jZ1xuIHRlc3RfY3B1XG4gdGVzdF9jcHVzZXRcbiB0ZXN0X2ZyZWV6ZXJcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbmluZGV4IGUwMTU4NGMyMTg5YWMuLjYwMWQ5MzAxNjBhNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuQEAgLTgsNiAmIzQzOzgsNyBAQCBURVNUX1BST0dTICAgICA6PSB0ZXN0X3N0cmVzcy5zaCB0ZXN0X2NwdXNldF9wcnMuc2ggdGVzdF9jcHVzZXRfdjFfaHAuc2hcbiBURVNUX0dFTl9GSUxFUyA6PSB3YWl0X2lub3RpZnlcbiAjIEtlZXAgdGhlIGxpc3RzIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZFxuIFRFU1RfR0VOX1BST0dTICA9IHRlc3RfY29yZVxuJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jbWFfbWVtY2dcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jcHVcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jcHVzZXRcbiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9mcmVlemVyXG5AQCAtMjQsNiAmIzQzOzI1LDcgQEAgaW5jbHVkZSAuLi9saWIubWtcbiBpbmNsdWRlIGxpYi9saWJjZ3JvdXAubWtcbiBcbiAkKE9VVFBVVCkvdGVzdF9jb3JlOiAkKExJQkNHUk9VUF9PKVxuJiM0MzskKE9VVFBVVCkvdGVzdF9jbWFfbWVtY2c6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X2NwdXNldDogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9mcmVlemVyOiAkKExJQkNHUk9VUF9PKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXG5pbmRleCAzOWY5Nzk2OTBkZDNiLi4xYzkwMzQwMTc2ODJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuQEAgLTQsMyAmIzQzOzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuIENPTkZJR19DR1JPVVBfU0NIRUQ9eVxuIENPTkZJR19NRU1DRz15XG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XG4mIzQzO0NPTkZJR19DTUE9eVxuJiM0MztDT05GSUdfRE1BX0NNQT15XG4mIzQzO0NPTkZJR19ETUFCVUZfSEVBUFM9eVxuJiM0MztDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XG4mIzQzO0NPTkZJR19IVUdFVExCRlM9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YmQ0MWQ5YTYxNzdkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuY1xuQEAgLTAsMCAmIzQzOzEsNDAyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1oZWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2dyb3VwX3V0aWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBDTUFfSEVBUF9ERUZBVUxUX1BBVEhcdFwmIzM0Oy9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uXCYjMzQ7XG4mIzQzOyNkZWZpbmUgQ01BX1JFU0VSVkVEX0NVUlJFTlRcdFwmIzM0O21lbW9yeS5jbWEucmVzZXJ2ZWQuY3VycmVudFwmIzM0O1xuJiM0MzsjZGVmaW5lIENNQV9SRVNFUlZFRF9NQVhcdFwmIzM0O21lbW9yeS5jbWEucmVzZXJ2ZWQubWF4XCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhVR0VUTEJfQ01BX0NVUlJFTlRcdFwmIzM0O21lbW9yeS5jbWEuaHVnZXRsYjAuY3VycmVudFwmIzM0O1xuJiM0MzsjZGVmaW5lIEhVR0VUTEJfQ01BX01BWFx0XCYjMzQ7bWVtb3J5LmNtYS5odWdldGxiMC5tYXhcJiMzNDtcbiYjNDM7I2RlZmluZSBIVUdFUEFHRVNfRElSXHRcdFwmIzM0Oy9zeXMva2VybmVsL21tL2h1Z2VwYWdlc1wmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjbWFfaGVhcF9hbGxvYyhpbnQgaGVhcF9mZCwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZG1hX2hlYXBfYWxsb2NhdGlvbl9kYXRhIGRhdGEgPSB7XG4mIzQzO1x0XHQubGVuID0gc2l6ZSxcbiYjNDM7XHRcdC5mZF9mbGFncyA9IE9fUkRXUiB8IE9fQ0xPRVhFQyxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jdGwoaGVhcF9mZCwgRE1BX0hFQVBfSU9DVExfQUxMT0MsIFx1MDAyNmRhdGEpIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGF0YS5mZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2NtYV9jaGFyZ2UoY29uc3QgY2hhciAqcm9vdClcbiYjNDM7e1xuJiM0MztcdGludCBoZWFwX2ZkID0gLTEsIGJ1Zl9mZCA9IC0xO1xuJiM0MztcdGludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwO1xuJiM0MztcdHNpemVfdCBzaXplID0gNFVMIFx1MDAzY1x1MDAzYyAyMDtcbiYjNDM7XHRsb25nIGJlZm9yZSwgYWZ0ZXI7XG4mIzQzO1x0Y2hhciAqY2c7XG4mIzQzO1xuJiM0MztcdGNnID0gY2dfbmFtZShyb290LCBcJiMzNDttZW1jZ19jbWFfY2hhcmdlXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWNnKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfY3JlYXRlKGNnKSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdGluX2NnID0gMTtcbiYjNDM7XG4mIzQzO1x0aGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGhlYXBfZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YmVmb3JlID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7XG4mIzQzO1xuJiM0MztcdGJ1Zl9mZCA9IGNtYV9oZWFwX2FsbG9jKGhlYXBfZmQsIHNpemUpO1xuJiM0MztcdGlmIChidWZfZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBpbiBDTUEgaGVhcCAoJW0pXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7XG4mIzQzO1xuJiM0MztcdGlmIChhZnRlciAtIGJlZm9yZSBcdTAwM2MgKGxvbmcpc2l6ZSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXG4mIzQzO1x0XHRcdFwmIzM0O2ludmFsaWQgQ01BIGNvdW50ZXIgYWZ0ZXIgY2hhcmdlOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0YmVmb3JlLCBhZnRlcik7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbG9zZShidWZfZmQpO1xuJiM0MztcdGJ1Zl9mZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpO1xuJiM0MztcdGlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcbiYjNDM7XHRcdFx0XCYjMzQ7aW52YWxpZCBDTUEgY291bnRlciBhZnRlciB1bmNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGJlZm9yZSwgYWZ0ZXIpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmMgPSBLU0ZUX1BBU1M7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdGlmIChidWZfZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoYnVmX2ZkKTtcbiYjNDM7XHRpZiAoaGVhcF9mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShoZWFwX2ZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluX2NnKVxuJiM0MztcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbiYjNDM7XHRjZ19kZXN0cm95KGNnKTtcbiYjNDM7XHRmcmVlKGNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfY21hX2xpbWl0KGNvbnN0IGNoYXIgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTtcbiYjNDM7XHRpbnQgcmMgPSBLU0ZUX0ZBSUwsIGluX2NnID0gMDtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IDRVTCBcdTAwM2NcdTAwM2MgMjA7XG4mIzQzO1x0Y2hhciAqY2c7XG4mIzQzO1xuJiM0MztcdGNnID0gY2dfbmFtZShyb290LCBcJiMzNDttZW1jZ19jbWFfbGltaXRcJiMzNDspO1xuJiM0MztcdGlmICghY2cpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19jcmVhdGUoY2cpKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aW5fY2cgPSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfd3JpdGUoY2csIENNQV9SRVNFUlZFRF9NQVgsIFwmIzM0OzJNXCYjMzQ7KSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IHNldCBDTUEgbGltaXQgKCVtKVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRoZWFwX2ZkID0gb3BlbihDTUFfSEVBUF9ERUZBVUxUX1BBVEgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbiYjNDM7XHRpZiAoaGVhcF9mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWZfZmQgPSBjbWFfaGVhcF9hbGxvYyhoZWFwX2ZkLCBzaXplKTtcbiYjNDM7XHRpZiAoYnVmX2ZkIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Q01BIGxpbWl0IG5vdCBlbmZvcmNlZC5cXG5cJiMzNDspO1xuJiM0MztcdFx0Y2xvc2UoYnVmX2ZkKTtcbiYjNDM7XHR9IGVsc2VcbiYjNDM7XHRcdHJjID0gS1NGVF9QQVNTO1xuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoaGVhcF9mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShoZWFwX2ZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluX2NnKVxuJiM0MztcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbiYjNDM7XHRjZ19kZXN0cm95KGNnKTtcbiYjNDM7XHRmcmVlKGNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgbG9uZyBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0RElSICpkaXI7XG4mIzQzO1x0c3RydWN0IGRpcmVudCAqZW50cnk7XG4mIzQzO1x0bG9uZyBtYXhfc2l6ZSA9IDA7XG4mIzQzO1xuJiM0MztcdGRpciA9IG9wZW5kaXIoSFVHRVBBR0VTX0RJUik7XG4mIzQzO1x0aWYgKCFkaXIpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgoZW50cnkgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHtcbiYjNDM7XHRcdGxvbmcgc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCYjMzQ7aHVnZXBhZ2VzLSVsZGtCXCYjMzQ7LCBcdTAwMjZzaXplKSA9PSAxKSB7XG4mIzQzO1x0XHRcdGlmIChzaXplIFx1MDAzZSBtYXhfc2l6ZSlcbiYjNDM7XHRcdFx0XHRtYXhfc2l6ZSA9IHNpemU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGNsb3NlZGlyKGRpcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXhfc2l6ZSBcdTAwM2UgMCA/IG1heF9zaXplIDogLTE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb25nIHJlYWRfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoKVxuJiM0Mzt7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XHRsb25nIHZhbCA9IC0xO1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4ocGF0aCwgXCYjMzQ7clwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFmKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmIChmc2NhbmYoZiwgXCYjMzQ7JWxkXCYjMzQ7LCBcdTAwMjZ2YWwpICE9IDEpXG4mIzQzO1x0XHR2YWwgPSAtMTtcbiYjNDM7XHRmY2xvc2UoZik7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cml0ZV9zeXNmc19sb25nKGNvbnN0IGNoYXIgKnBhdGgsIGxvbmcgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0RklMRSAqZjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGYgPSBmb3BlbihwYXRoLCBcJiMzNDt3XCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWYpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmMgPSBmcHJpbnRmKGYsIFwmIzM0OyVsZFwmIzM0OywgdmFsKTtcbiYjNDM7XHRmY2xvc2UoZik7XG4mIzQzO1x0cmV0dXJuIHJjIFx1MDAzYyAwID8gLTEgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDtcbiYjNDM7XHRsb25nIGhwYWdlX3NpemVfa2IsIGhwYWdlX3NpemVfYnl0ZXM7XG4mIzQzO1x0bG9uZyBvcmlnX25yID0gLTEsIG5ld19uciwgYmVmb3JlLCBhZnRlcjtcbiYjNDM7XHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGNoYXIgKmNnO1xuJiM0MztcbiYjNDM7XHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZV9rYiBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gS1NGVF9TS0lQO1xuJiM0MztcdH1cbiYjNDM7XHRocGFnZV9zaXplX2J5dGVzID0gaHBhZ2Vfc2l6ZV9rYiAqIDEwMjQ7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSxcbiYjNDM7XHRcdCBIVUdFUEFHRVNfRElSIFwmIzM0Oy9odWdlcGFnZXMtJWxka0IvbnJfaHVnZXBhZ2VzXCYjMzQ7LCBocGFnZV9zaXplX2tiKTtcbiYjNDM7XG4mIzQzO1x0Y2cgPSBjZ19uYW1lKHJvb3QsIFwmIzM0O21lbWNnX2h1Z2V0bGJfY21hX2NoYXJnZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFjZylcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNnX2NyZWF0ZShjZykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRpbl9jZyA9IDE7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9yaWdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7XG4mIzQzO1x0aWYgKG9yaWdfbnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCByZWFkICVzXFxuXCYjMzQ7LCBucl9wYXRoKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XG4mIzQzO1xuJiM0MztcdGlmICh3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgJiM0MzsgMSkpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCB3cml0ZSAlc1xcblwmIzM0OywgbnJfcGF0aCk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7XG4mIzQzO1x0aWYgKG5ld19uciBcdTAwM2M9IG9yaWdfbnIpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBhIGh1Z2VwYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjID0gS1NGVF9GQUlMO1xuJiM0MztcdGFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFmdGVyIC0gYmVmb3JlIFx1MDAzYyBocGFnZV9zaXplX2J5dGVzKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcbiYjNDM7XHRcdFx0XCYjMzQ7aHVnZXRsYiBDTUEgY291bnRlciBub3QgY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGQgZXhwZWN0ZWQgJiM0MzslbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGJlZm9yZSwgYWZ0ZXIsIGhwYWdlX3NpemVfYnl0ZXMpO1xuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcbiYjNDM7XG4mIzQzO1x0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpO1xuJiM0MztcdGlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcbiYjNDM7XHRcdFx0XCYjMzQ7aHVnZXRsYiBDTUEgY291bnRlciBub3QgdW5jaGFyZ2VkOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0YmVmb3JlLCBhZnRlcik7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYyA9IEtTRlRfUEFTUztcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKG9yaWdfbnIgXHUwMDNlPSAwKVxuJiM0MztcdFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGluX2NnKVxuJiM0MztcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbiYjNDM7XHRjZ19kZXN0cm95KGNnKTtcbiYjNDM7XHRmcmVlKGNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdClcbiYjNDM7e1xuJiM0MztcdGludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwO1xuJiM0MztcdGxvbmcgaHBhZ2Vfc2l6ZV9rYjtcbiYjNDM7XHRsb25nIG9yaWdfbnIsIG5ld19ucjtcbiYjNDM7XHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGNoYXIgKmNnO1xuJiM0MztcbiYjNDM7XHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcbiYjNDM7XHRpZiAoaHBhZ2Vfc2l6ZV9rYiBcdTAwM2MgMCkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gS1NGVF9TS0lQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c25wcmludGYobnJfcGF0aCwgc2l6ZW9mKG5yX3BhdGgpLFxuJiM0MztcdFx0IEhVR0VQQUdFU19ESVIgXCYjMzQ7L2h1Z2VwYWdlcy0lbGRrQi9ucl9odWdlcGFnZXNcJiMzNDssIGhwYWdlX3NpemVfa2IpO1xuJiM0MztcbiYjNDM7XHRjZyA9IGNnX25hbWUocm9vdCwgXCYjMzQ7bWVtY2dfaHVnZXRsYl9jbWFfbGltaXRcJiMzNDspO1xuJiM0MztcdGlmICghY2cpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19jcmVhdGUoY2cpKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0aW5fY2cgPSAxO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9NQVgpIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjZ193cml0ZShjZywgSFVHRVRMQl9DTUFfTUFYLCBcJiMzNDswXCYjMzQ7KSkge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IHNldCBodWdldGxiIENNQSBsaW1pdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvcmlnX25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuJiM0MztcdGlmIChvcmlnX25yIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtjYW5ub3QgcmVhZCAlc1xcblwmIzM0OywgbnJfcGF0aCk7XG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgJiM0MzsgMSk7XG4mIzQzO1x0bmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuJiM0MztcbiYjNDM7XHRyYyA9IEtTRlRfRkFJTDtcbiYjNDM7XHRpZiAobmV3X25yIFx1MDAzZSBvcmlnX25yKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtodWdldGxiIENNQSBsaW1pdCBub3QgZW5mb3JjZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmMgPSBLU0ZUX1BBU1M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRpZiAoaW5fY2cpXG4mIzQzO1x0XHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xuJiM0MztcdGNnX2Rlc3Ryb3koY2cpO1xuJiM0MztcdGZyZWUoY2cpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgVCh4KSB7IHgsICN4IH1cbiYjNDM7c3RydWN0IGNtYV9tZW1jZ190ZXN0cyB7XG4mIzQzO1x0aW50ICgqZm4pKGNvbnN0IGNoYXIgKnJvb3QpO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO30gdGVzdHNbXSA9IHtcbiYjNDM7XHRUKHRlc3RfY21hX2NoYXJnZSksXG4mIzQzO1x0VCh0ZXN0X2NtYV9saW1pdCksXG4mIzQzO1x0VCh0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZSksXG4mIzQzO1x0VCh0ZXN0X2h1Z2V0bGJfY21hX2xpbWl0KSxcbiYjNDM7fTtcbiYjNDM7I3VuZGVmIFRcbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xuJiM0MztcdGludCBoYXNfbWVtb3J5X2NtYV9hY2MsIGk7XG4mIzQzO1xuJiM0MztcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1x0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7XG4mIzQzO1xuJiM0MztcdGhhc19tZW1vcnlfY21hX2FjYyA9IHByb2NfbW91bnRfY29udGFpbnMoXCYjMzQ7bWVtb3J5X2NtYV9hY2NvdW50aW5nXCYjMzQ7KTtcbiYjNDM7XHRpZiAoaGFzX21lbW9yeV9jbWFfYWNjIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Y2Fubm90IHF1ZXJ5IGNncm91cCBtb3VudCBvcHRpb24uXFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlIGlmICghaGFzX21lbW9yeV9jbWFfYWNjKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Q01BIGFjY291bnRpbmcgaXMgZGlzYWJsZWQuXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtjZ3JvdXBmcyBpcyBub3QgYXZhaWxhYmxlLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcJiMzNDtjZ3JvdXAuY29udHJvbGxlcnNcJiMzNDssIFwmIzM0O21lbW9yeVwmIzM0OykpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDttZW1vcnkgY29udHJvbGxlciBpcyBub3QgYXZhaWxhYmxlIChDT05GSUdfQ0dST1VQX01FTUNHPylcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdHN3aXRjaCAodGVzdHNbaV0uZm4ocm9vdCkpIHtcbiYjNDM7XHRcdGNhc2UgS1NGVF9QQVNTOlxuJiM0MztcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7JXNcXG5cJiMzNDssIHRlc3RzW2ldLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS1NGVF9TS0lQOlxuJiM0MztcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXNcXG5cJiMzNDssIHRlc3RzW2ldLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcJiMzNDslc1xcblwmIzM0OywgdGVzdHNbaV0ubmFtZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a3NmdF9maW5pc2hlZCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MzRhOTVlZjVlMDc3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoXG5AQCAtMCwwICYjNDM7MSwxOTcgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgQ29weXJpZ2h0IChjKSAyMDI2IFJlZCBIYXQsIEluYy5cbiYjNDM7I1xuJiM0MzsjIFJ1biBjZ3JvdXAgbWVtb3J5IGNvbnRyb2xsZXIgc2VsZnRlc3RzIGluc2lkZSBhIHZpcnRtZS1uZyBWTVxuJiM0MzsjIERlcGVuZGVuY2llczpcbiYjNDM7I1x0XHQqIHZpcnRtZS1uZ1xuJiM0MzsjXHRcdCogYnVzeWJveC1zdGF0aWMgKHVzZWQgYnkgdmlydG1lLW5nKVxuJiM0MzsjXHRcdCogcWVtdVx0KHVzZWQgYnkgdmlydG1lLW5nKVxuJiM0MztcbiYjNDM7c2V0IC1ldW8gcGlwZWZhaWxcbiYjNDM7XG4mIzQzO3JlYWRvbmx5IFNDUklQVF9ESVI9XCYjMzQ7JChjZCAtUCAtLSBcJiMzNDskKGRpcm5hbWUgLS0gXCYjMzQ7JHtCQVNIX1NPVVJDRVswXX1cJiMzNDspXCYjMzQ7IFx1MDAyNlx1MDAyNiBwd2QgLVApXCYjMzQ7XG4mIzQzO3JlYWRvbmx5IEtFUk5FTF9DSEVDS09VVD1cJiMzNDskKHJlYWxwYXRoIFwmIzM0OyR7U0NSSVBUX0RJUn1cJiMzNDsvLi4vLi4vLi4vLi4vKVwmIzM0O1xuJiM0MztcbiYjNDM7c291cmNlIFwmIzM0OyR7U0NSSVBUX0RJUn1cJiMzNDsvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0MztcbiYjNDM7cmVhZG9ubHkgU1NIX0dVRVNUX1BPUlQ9XCYjMzQ7JHtTU0hfR1VFU1RfUE9SVDotMjJ9XCYjMzQ7XG4mIzQzO3JlYWRvbmx5IFdBSVRfUEVSSU9EPTNcbiYjNDM7cmVhZG9ubHkgV0FJVF9QRVJJT0RfTUFYPTgwXG4mIzQzO3JlYWRvbmx5IFdBSVRfVE9UQUw9JCgoV0FJVF9QRVJJT0QgKiBXQUlUX1BFUklPRF9NQVgpKVxuJiM0MztyZWFkb25seSBRRU1VX1BJREZJTEU9XCYjMzQ7JChta3RlbXAgL3RtcC9xZW11X21lbWNnX3ZtdGVzdF9YWFhYLnBpZClcJiMzNDtcbiYjNDM7cmVhZG9ubHkgUUVNVV9PUFRTPVwmIzM0OyAtLXBpZGZpbGUgJHtRRU1VX1BJREZJTEV9IFwmIzM0O1xuJiM0MztcbiYjNDM7QlVJTEQ9MFxuJiM0MztRRU1VPVwmIzM0O3FlbXUtc3lzdGVtLSQodW5hbWUgLW0pXCYjMzQ7XG4mIzQzO1ZFUkJPU0U9MFxuJiM0MztTSEVMTF9NT0RFPTBcbiYjNDM7R1VFU1RfVFJFRT1cJiMzNDske0dVRVNUX1RSRUU6LSRLRVJORUxfQ0hFQ0tPVVR9XCYjMzQ7XG4mIzQzO1xuJiM0Mzt1c2FnZSgpIHtcbiYjNDM7XHRjYXQgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQwIFtPUFRJT05TXVxuJiM0MzsgICAgLWIgICAgICAgIEJ1aWxkIGtlcm5lbCBmcm9tIHNvdXJjZSB0cmVlIGJlZm9yZSBib290aW5nXG4mIzQzOyAgICAtcSBcdTAwM2NxZW11XHUwMDNlIFFFTVUgYmluYXJ5L3BhdGggKGRlZmF1bHQ6ICRRRU1VKVxuJiM0MzsgICAgLXMgICAgICAgIFN0YXJ0IGludGVyYWN0aXZlIHNoZWxsIGluIFZNXG4mIzQzOyAgICAtdiAgICAgICAgVmVyYm9zZSBvdXRwdXQgKHZuZyBib290IGxvZ3Mgb24gc3Rkb3V0KVxuJiM0MztFT0ZcbiYjNDM7XHRleGl0IDFcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZGllKCkge1xuJiM0MztcdGVjaG8gXCYjMzQ7JCpcJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdGV4aXQgXCYjMzQ7JHtLU0ZUX0ZBSUx9XCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NsZWFudXAoKSB7XG4mIzQzO1x0aWYgW1sgLXMgXCYjMzQ7JFFFTVVfUElERklMRVwmIzM0OyBdXTsgdGhlblxuJiM0MztcdFx0cGtpbGwgLVNJR1RFUk0gLUYgXCYjMzQ7JFFFTVVfUElERklMRVwmIzM0OyBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwgdHJ1ZVxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdGlmIFtbIC1lIFwmIzM0OyRRRU1VX1BJREZJTEVcJiMzNDsgXV07IHRoZW5cbiYjNDM7XHRcdHJtIC1mIFwmIzM0OyRRRU1VX1BJREZJTEVcJiMzNDtcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2bV9zc2goKSB7XG4mIzQzO1x0c3RkYnVmIC1vTCBzc2ggLXEgXFxcbiYjNDM7XHRcdC1GIFwmIzM0OyRIT01FLy5jYWNoZS92aXJ0bWUtbmcvLnNzaC92aXJ0bWUtbmctc3NoLmNvbmZcJiMzNDsgXFxcbiYjNDM7XHRcdC1sIHJvb3QgXCYjMzQ7dmlydG1lLW5nJSRTU0hfR1VFU1RfUE9SVFwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7JEBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hlY2tfZGVwcygpIHtcbiYjNDM7XHRmb3IgZGVwIGluIHZuZyBcJiMzNDskUUVNVVwmIzM0OyBidXN5Ym94IHBraWxsIHNzaDsgZG9cbiYjNDM7XHRcdGlmICEgY29tbWFuZCAtdiBcJiMzNDskZGVwXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0O3NraXA6IGRlcGVuZGVuY3kgJGRlcCBub3QgZm91bmRcJiMzNDtcbiYjNDM7XHRcdFx0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO1x0XHRmaVxuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7aGFuZGxlX2J1aWxkKCkge1xuJiM0MztcdGlmIFtbICEgXCYjMzQ7JEJVSUxEXCYjMzQ7IC1lcSAxIF1dOyB0aGVuXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiBbWyAhIC1kIFwmIzM0OyRLRVJORUxfQ0hFQ0tPVVRcJiMzNDsgXV07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7LWIgcmVxdWlyZXMgJDAgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IDFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRwdXNoZCBcJiMzNDskS0VSTkVMX0NIRUNLT1VUXCYjMzQ7IFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcbiYjNDM7XHRpZiAhIHZuZyAtLWtjb25maWcgLS1jb25maWcgXCYjMzQ7JFNDUklQVF9ESVJcJiMzNDsvY29uZmlnOyB0aGVuXG4mIzQzO1x0XHRkaWUgXCYjMzQ7ZmFpbGVkIHRvIGdlbmVyYXRlIC5jb25maWcgZm9yIGtlcm5lbCBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiAhIG1ha2UgLWpcJiMzNDskKG5wcm9jKVwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZGllIFwmIzM0O2ZhaWxlZCB0byBidWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRwb3BkIFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2bV9zdGFydCgpIHtcbiYjNDM7XHRsb2NhbCBsb2dmaWxlPS9kZXYvbnVsbFxuJiM0MztcdGxvY2FsIHZlcmJvc2Vfb3B0PVwmIzM0O1wmIzM0O1xuJiM0MztcdGxvY2FsIGtlcm5lbF9vcHQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIFtbIFwmIzM0OyRWRVJCT1NFXCYjMzQ7IC1lcSAxIF1dOyB0aGVuXG4mIzQzO1x0XHR2ZXJib3NlX29wdD1cJiMzNDstLXZlcmJvc2VcJiMzNDtcbiYjNDM7XHRcdGxvZ2ZpbGU9L2Rldi9zdGRvdXRcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRpZiBbWyBcJiMzNDskQlVJTERcJiMzNDsgLWVxIDEgXV07IHRoZW5cbiYjNDM7XHRcdGtlcm5lbF9vcHQ9XCYjMzQ7JHtLRVJORUxfQ0hFQ0tPVVR9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0dm5nIFxcXG4mIzQzO1x0XHQtLXJ1biBcXFxuJiM0MztcdFx0JHtrZXJuZWxfb3B0fSBcXFxuJiM0MztcdFx0JHt2ZXJib3NlX29wdH0gXFxcbiYjNDM7XHRcdC0tcWVtdS1vcHRzPVwmIzM0OyRRRU1VX09QVFNcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcWVtdT1cJiMzNDskKGNvbW1hbmQgLXYgXCYjMzQ7JFFFTVVcJiMzNDspXCYjMzQ7IFxcXG4mIzQzO1x0XHQtLXVzZXIgcm9vdCBcXFxuJiM0MztcdFx0LS1zc2ggXCYjMzQ7JFNTSF9HVUVTVF9QT1JUXCYjMzQ7IFxcXG4mIzQzO1x0XHQtLW1lbW9yeSAzRyBcXFxuJiM0MztcdFx0LS1hcHBlbmQgXCYjMzQ7Y21hPTY0TSBodWdldGxiX2NtYT0xRyBodWdldGxiX2NtYV9vbmx5PTFcJiMzNDsgXFxcbiYjNDM7XHRcdC0tcncgXHUwMDI2XHUwMDNlXCYjMzQ7JGxvZ2ZpbGVcJiMzNDsgXHUwMDI2XG4mIzQzO1xuJiM0MztcdGxvY2FsIHZuZ19waWQ9JCFcbiYjNDM7XHRsb2NhbCBlbGFwc2VkPTBcbiYjNDM7XG4mIzQzO1x0d2hpbGUgW1sgISAtcyBcJiMzNDskUUVNVV9QSURGSUxFXCYjMzQ7IF1dOyBkb1xuJiM0MztcdFx0a2lsbCAtMCBcJiMzNDskdm5nX3BpZFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IFxcXG4mIzQzO1x0XHRcdGRpZSBcJiMzNDt2bmcgZXhpdGVkIGVhcmx5OyBmYWlsZWQgdG8gYm9vdCBWTVwmIzM0O1xuJiM0MztcdFx0W1sgXCYjMzQ7JGVsYXBzZWRcJiMzNDsgLWdlIFwmIzM0OyRXQUlUX1RPVEFMXCYjMzQ7IF1dIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFx0XHRkaWUgXCYjMzQ7dGltZWQgb3V0IHdhaXRpbmcgZm9yIFZNIGJvb3RcJiMzNDtcbiYjNDM7XHRcdHNsZWVwIDFcbiYjNDM7XHRcdGVsYXBzZWQ9JCgoZWxhcHNlZCAmIzQzOyAxKSlcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZtX3dhaXRfZm9yX3NzaCgpIHtcbiYjNDM7XHRsb2NhbCBpPTBcbiYjNDM7XHR3aGlsZSB0cnVlOyBkb1xuJiM0MztcdFx0dm1fc3NoIC0tIHRydWUgXHUwMDI2XHUwMDI2IGJyZWFrXG4mIzQzO1x0XHRpPSQoKGkgJiM0MzsgMSkpXG4mIzQzO1x0XHRbWyBcJiMzNDske2l9XCYjMzQ7IC1ndCBcJiMzNDskV0FJVF9QRVJJT0RfTUFYXCYjMzQ7IF1dIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFx0XHRkaWUgXCYjMzQ7dGltZWQgb3V0IHdhaXRpbmcgZm9yIGd1ZXN0IHNzaFwmIzM0O1xuJiM0MztcdFx0c2xlZXAgXCYjMzQ7JFdBSVRfUEVSSU9EXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGVja19ndWVzdF9yZXF1aXJlbWVudHMoKSB7XG4mIzQzO1x0dm1fc3NoIC0tIFwmIzM0O2dyZXAgLXEgbWVtb3J5IC9zeXMvZnMvY2dyb3VwL2Nncm91cC5jb250cm9sbGVyc1wmIzM0OyBcXFxuJiM0MztcdFx0fHwgZGllIFwmIzM0O21lbW9yeSBjb250cm9sbGVyIG5vdCBhdmFpbGFibGUgKENPTkZJR19NRU1DRz8pXCYjMzQ7XG4mIzQzO1x0dm1fc3NoIC0tIFwmIzM0O1tbIC1lIC9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uIF1dXCYjMzQ7IFxcXG4mIzQzO1x0XHR8fCBkaWUgXCYjMzQ7Q01BIGhlYXAgbm90IGF2YWlsYWJsZSAoQ09ORklHX0RNQUJVRl9IRUFQU19DTUE/IGNtYT0gY21kbGluZT8pXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nKCkge1xuJiM0MztcdHZtX3NzaCAtLSBcJiMzNDttb3VudCAtbyByZW1vdW50LG1lbW9yeV9jbWFfYWNjb3VudGluZyAvc3lzL2ZzL2Nncm91cFwmIzM0OyBcXFxuJiM0MztcdFx0fHwgZGllIFwmIzM0O2ZhaWxlZCB0byBlbmFibGUgbWVtb3J5X2NtYV9hY2NvdW50aW5nXCYjMzQ7XG4mIzQzO1x0dm1fc3NoIC0tIFwmIzM0O2VjaG8gJiM0MzttZW1vcnkgXHUwMDNlIC9zeXMvZnMvY2dyb3VwL2Nncm91cC5zdWJ0cmVlX2NvbnRyb2xcJiMzNDsgXFxcbiYjNDM7XHRcdHx8IGRpZSBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3J1bl90ZXN0KCkge1xuJiM0MztcdHZtX3NzaCAtLSBcJiMzNDtjZCAmIzM5OyRHVUVTVF9UUkVFJiMzOTsgXHUwMDI2XHUwMDI2IG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMgVEFSR0VUUz1jZ3JvdXBcJiMzNDtcbiYjNDM7XHR2bV9zc2ggLS0gXCYjMzQ7Y2QgJiMzOTskR1VFU1RfVFJFRSYjMzk7IFx1MDAyNlx1MDAyNiBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwIHJ1bl90ZXN0c1wmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt3aGlsZSBnZXRvcHRzIFwmIzM0OzpodnE6c2JcJiMzNDsgb3B0OyBkb1xuJiM0MztcdGNhc2UgXCYjMzQ7JG9wdFwmIzM0OyBpblxuJiM0MztcdHYpIFZFUkJPU0U9MSA7O1xuJiM0MztcdHEpIFFFTVU9XCYjMzQ7JHtPUFRBUkd9XCYjMzQ7IDs7XG4mIzQzO1x0YikgQlVJTEQ9MSA7O1xuJiM0MztcdHMpIFNIRUxMX01PREU9MSA7O1xuJiM0MztcdGh8KikgdXNhZ2UgOztcbiYjNDM7XHRlc2FjXG4mIzQzO2RvbmVcbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MztjaGVja19kZXBzXG4mIzQzO2hhbmRsZV9idWlsZFxuJiM0MztlY2hvIFwmIzM0O0Jvb3RpbmcgdmlydG1lLW5nIFZNLi4uXCYjMzQ7XG4mIzQzO3ZtX3N0YXJ0XG4mIzQzO3ZtX3dhaXRfZm9yX3NzaFxuJiM0MztlY2hvIFwmIzM0O1ZNIGlzIHJlYWNoYWJsZSB2aWEgU1NILlwmIzM0O1xuJiM0MztcbiYjNDM7aWYgW1sgXCYjMzQ7JFNIRUxMX01PREVcJiMzNDsgLWVxIDEgXV07IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1N0YXJ0aW5nIGludGVyYWN0aXZlIHNoZWxsIGluIFZNLiBFeGl0IHRvIHN0b3AgVk0uXCYjMzQ7XG4mIzQzO1x0dm1fc3NoIC10IC0tIFwmIzM0O2NkICYjMzk7JEdVRVNUX1RSRUUmIzM5OyBcdTAwMjZcdTAwMjYgZXhlYyBiYXNoIC0tbm9wcm9maWxlIC0tbm9yY1wmIzM0O1xuJiM0MztcdGV4aXQgXCYjMzQ7JEtTRlRfUEFTU1wmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7Y2hlY2tfZ3Vlc3RfcmVxdWlyZW1lbnRzXG4mIzQzO3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nXG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O1J1bm5pbmcgY2dyb3VwIHNlbGZ0ZXN0cyBpbiBWTS4uLlwmIzM0O1xuJiM0MztydW5fdGVzdFxuJiM0MztlY2hvIFwmIzM0O1BBU1M6IGNncm91cCBzZWxmdGVzdHMgY29tcGxldGVkXCYjMzQ7XG4mIzQzO2V4aXQgXCYjMzQ7JEtTRlRfUEFTU1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE5OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7RE1BX0NNQSYjMzQ7LAogICAgJiMzNDtETUFCVUZfSEVBUFMmIzM0OywKICAgICYjMzQ7RE1BQlVGX0hFQVBTX0NNQSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9jbWEmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF91bmNoYXJnZV9jbWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHdoaWNoIGVuYWJsZXMgYWNjb3VudGluZyBvZiBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gSXQgYWRkcyBuZXcgY29yZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgdG8gaGFuZGxlIHRoZSBhY2NvdW50aW5nIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENNQSBhbGxvY2F0aW9ucyAoZS5nLiwgdXNpbmcgRE1BLUJVRiBoZWFwcyBvciBodWdldGxiKSB3aGVuIHRoZSBtb3VudCBvcHRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBDTUEgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MzhkZTc0MTgxM2ViNDc2YTlkNTIwY2ZkMDk2Y2ExYTBhMTUxODQwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTk6MTI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKaW5kZXggYWVkMTk1YTcxY2JmMS4uMzk4NzFhN2EwOGE4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdApAQCAtMjQ2LDYgJiM0MzsyNDYsMjYgQEAgY2dyb3VwIHYyIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG1vdW50IG9wdGlvbnMuCiAgICAgICAgICAgd2lsbCBub3QgYmUgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKGV2ZW4gaWYgY2dyb3VwCiAgICAgICAgICAgdjIgaXMgcmVtb3VudGVkIGxhdGVyIG9uKS4KIAomIzQzOyAgbWVtb3J5X2NtYV9hY2NvdW50aW5nCiYjNDM7ICAgICAgICBDb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZSBmb3IKJiM0MzsgICAgICAgIHRoZSBtZW1vcnkgY29udHJvbGxlciwgYW5kIGV4cG9zZSBwZXItQ01BLWFyZWEgdXNhZ2UgY291bnRlcnMuIFRoaXMKJiM0MzsgICAgICAgIGJlaGF2aW9yIGlzIG9wdC1pbiwgc28gYXMgdG8gbm90IGNhdXNlIHJlZ3Jlc3Npb24gb24gZXhpc3Rpbmcgc2V0dXBzLgomIzQzOwomIzQzOyAgICAgICAgQSBmZXcgY2F2ZWF0cyB0byBrZWVwIGluIG1pbmQ6CiYjNDM7CiYjNDM7ICAgICAgICAqIENNQSBhcmVhcyBhcmUgcmVzZXJ2ZWQgYXQgYm9vdCB0aW1lLCBtZW1vcnkgaXMgb25seSBjaGFyZ2VkIHRvIGEKJiM0MzsgICAgICAgICAgY2dyb3VwIHdoZW4gYSBDTUEgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgb24gaXRzIGJlaGFsZi4KJiM0MzsgICAgICAgICogQ01BIHBhZ2VzIGFsbG9jYXRlZCB3aGlsZSB0aGlzIG9wdGlvbiBpcyBub3QgZW5hYmxlZCB3aWxsIG5vdCBiZQomIzQzOyAgICAgICAgICB0cmFja2VkIGJ5IHRoZSBtZW1vcnkgY29udHJvbGxlciwgZXZlbiBpZiBjZ3JvdXAgdjIgaXMgcmVtb3VudGVkCiYjNDM7ICAgICAgICAgIGxhdGVyIG9uIHdpdGggdGhpcyBvcHRpb24uIENoYXJnZXMgaGFwcGVuIGF0IGFsbG9jYXRpb24uCiYjNDM7ICAgICAgICAqIENNQSBhbGxvY2F0aW9ucyBhcmUgY2hhcmdlZCBib3RoIHRvIHRoZSBjZ3JvdXAmIzM5O3MgbWVtb3J5IGNvdW50ZXIKJiM0MzsgICAgICAgICAgKGxpbWl0ZWQgYnkgbWVtb3J5Lm1heCkgYW5kIHRoZSBwZXItYXJlYSBDTUEgY291bnRlciAobGltaXRlZCBieQomIzQzOyAgICAgICAgICBtZW1vcnkuY21hLiZsdDthcmVhJmd0Oy5tYXgpLiBIaXR0aW5nIGVpdGhlciBsaW1pdCBjYW4gY2F1c2UgYW4gYWxsb2NhdGlvbgomIzQzOyAgICAgICAgICB0byBmYWlsLiBJZiBDTUEgdXNhZ2UgcHVzaGVzIHRoZSBjZ3JvdXAgb3ZlciBtZW1vcnkuaGlnaCBvcgomIzQzOyAgICAgICAgICBtZW1vcnkubWF4LCB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgd2lsbCBhdHRlbXB0IHRvIHJlY2xhaW0gb3RoZXIKJiM0MzsgICAgICAgICAgbWVtb3J5IG9ubHkuIENNQSBtZW1vcnkgY2hhcmdlZCB0byB0aGUgY2dyb3VwIGlzIG5vdCByZWNsYWltYWJsZS4KJiM0MzsgICAgICAgICAgTGltaXRzIHNob3VsZCBiZSBzaXplZCB0byBhY2NvbW1vZGF0ZSB0aGUgZXhwZWN0ZWQgQ01BIHByZXNzdXJlLgomIzQzOwogICBwaWRzX2xvY2FsZXZlbnRzCiAgICAgICAgIFRoZSBvcHRpb24gcmVzdG9yZXMgdjEtbGlrZSBiZWhhdmlvciBvZiBwaWRzLmV2ZW50czptYXgsIHRoYXQgaXMgb25seQogICAgICAgICBsb2NhbCAoaW5zaWRlIGNncm91cCBwcm9wZXIpIGZvcmsgZmFpbHVyZXMgYXJlIGNvdW50ZWQuIFdpdGhvdXQgdGhpcwpAQCAtMTkwOCw2ICYjNDM7MTkyOCwyMSBAQCBUaGUgZm9sbG93aW5nIG5lc3RlZCBrZXlzIGFyZSBkZWZpbmVkLgogCVRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGlmIHpzd2FwIGlzIGRpc2FibGVkLCBhbmQgc3dhcHBpbmcKIAlpcyBhbGxvd2VkIHVubGVzcyBtZW1vcnkuc3dhcC5tYXggaXMgc2V0IHRvIDAuCiAKJiM0MzsgIG1lbW9yeS5jbWEuJmx0O2FyZWEmZ3Q7LmN1cnJlbnQKJiM0MzsgICAgICAgIEEgcmVhZC1vbmx5IHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLiAmbHQ7YXJlYSZndDsKJiM0MzsgICAgICAgIGlzIHRoZSBDTUEgYXJlYSBuYW1lIChlLmcuICYjMzQ7cmVzZXJ2ZWQmIzM0OyBmb3IgdGhlIGRlZmF1bHQgRE1BIENNQSBhcmVhKS4KJiM0MzsKJiM0MzsgICAgICAgIFRoZSB0b3RhbCBhbW91bnQgb2YgQ01BIG1lbW9yeSBjdXJyZW50bHkgY2hhcmdlZCB0byB0aGUgY2dyb3VwIGZvciB0aGUKJiM0MzsgICAgICAgIGdpdmVuIENNQSBhcmVhLiBPbmx5IGFjY291bnRlZCB3aGVuIG1lbW9yeV9jbWFfYWNjb3VudGluZyBpcyBlbmFibGVkLgomIzQzOwomIzQzOyAgbWVtb3J5LmNtYS4mbHQ7YXJlYSZndDsubWF4CiYjNDM7ICAgICAgICBBIHJlYWQtd3JpdGUgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFRoZQomIzQzOyAgICAgICAgZGVmYXVsdCBpcyAmIzM0O21heCYjMzQ7LgomIzQzOwomIzQzOyAgICAgICAgQ01BIHVzYWdlIGhhcmQgbGltaXQgZm9yIHRoZSBnaXZlbiBhcmVhLiBJZiBhIGNncm91cCYjMzk7cyBDTUEgdXNhZ2UgZm9yCiYjNDM7ICAgICAgICB0aGlzIGFyZWEgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZhaWwuIE9ubHkgZW5mb3JjZWQKJiM0MzsgICAgICAgIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuCiYjNDM7CiAgIG1lbW9yeS5wcmVzc3VyZQogCUEgcmVhZC1vbmx5IG5lc3RlZC1rZXllZCBmaWxlLgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmgKaW5kZXggZGUyY2Q2MjM4YzJhZS4uMTVmM2Y3MTEwYzViMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaApAQCAtMTI5LDYgJiM0MzsxMjksMTEgQEAgZW51bSB7CiAJICogRW5hYmxlIGxlZ2FjeSBsb2NhbCBwaWRzLmV2ZW50cy4KIAkgKi8KIAlDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMgPSAoMSAmbHQ7Jmx0OyAyMCksCiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBjbWEgYWNjb3VudGluZyBmb3IgdGhlIG1lbW9yeSBjb250cm9sbGVyLgomIzQzOwkgKi8KJiM0MzsJQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORyA9ICgxICZsdDsmbHQ7IDIxKSwKIH07CiAKIC8qIGNmdHlwZS0mZ3Q7ZmxhZ3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY21hLmggYi9pbmNsdWRlL2xpbnV4L2NtYS5oCmluZGV4IDg1NTVkMzhhOTdiMWEuLjE2ZTIxMzY0MjFiNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY21hLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jbWEuaApAQCAtNDksMTIgJiM0Mzs0OSwxMiBAQCBleHRlcm4gaW50IGNtYV9pbml0X3Jlc2VydmVkX21lbShwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLAogCQkJCQlzdHJ1Y3QgY21hICoqcmVzX2NtYSk7CiBleHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbiwKIAkJCSAgICAgIGJvb2wgbm9fd2Fybik7Ci1leHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7CiYjNDM7ZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsCiAJCXVuc2lnbmVkIGludCBhbGlnbiwgYm9vbCBub193YXJuKTsKIHN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgaW50IG9yZGVyKTsKLWJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLAomIzQzO2Jvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLAogCQl1bnNpZ25lZCBsb25nIGNvdW50KTsKIAogZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDgxNzBiYjgwNjZhMjIuLjgwMWZiZGU5NDEzN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0zMjAsNiAmIzQzOzMyMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAJc3BpbmxvY2tfdCBldmVudF9saXN0X2xvY2s7CiAjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzOwlzdHJ1Y3QgcGFnZV9jb3VudGVyICpjbWFfY291bnRlcnM7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19DTUEgKi8KJiM0MzsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbm9kZWluZm9bXTsKIH07CiAKQEAgLTY2Miw2ICYjNDM7NjY2LDExIEBAIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7CiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLAogCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwogCiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkgIHN0cnVjdCBjbWEgKmNtYSk7CiYjNDM7dm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkgICAgIHN0cnVjdCBjbWEgKmNtYSk7CiYjNDM7CiB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogLyoqCkBAIC0xMTYwLDYgJiM0MzsxMTY5LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LAomIzQzOwkJCQkJc3RydWN0IGNtYSAqY21hKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCQkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwL2Nncm91cC5jCmluZGV4IGI1YjQ2MWQ0NDE4YjEuLjEyMTg0Zjg1YWQxMDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Nncm91cC9jZ3JvdXAuYwpAQCAtMTk4NSw2ICYjNDM7MTk4NSw3IEBAIGVudW0gY2dyb3VwMl9wYXJhbSB7CiAJT3B0X21lbW9yeV9yZWN1cnNpdmVwcm90LAogCU9wdF9tZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLAogCU9wdF9waWRzX2xvY2FsZXZlbnRzLAomIzQzOwlPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nLAogCW5yX19jZ3JvdXAyX3BhcmFtcwogfTsKIApAQCAtMTk5NSw2ICYjNDM7MTk5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgY2dyb3VwMl9mc19wYXJhbWV0ZXJzW10gPSB7CiAJZnNwYXJhbV9mbGFnKCYjMzQ7bWVtb3J5X3JlY3Vyc2l2ZXByb3QmIzM0OywJT3B0X21lbW9yeV9yZWN1cnNpdmVwcm90KSwKIAlmc3BhcmFtX2ZsYWcoJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nJiMzNDssIE9wdF9tZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nKSwKIAlmc3BhcmFtX2ZsYWcoJiMzNDtwaWRzX2xvY2FsZXZlbnRzJiMzNDssCU9wdF9waWRzX2xvY2FsZXZlbnRzKSwKJiM0MzsJZnNwYXJhbV9mbGFnKCYjMzQ7bWVtb3J5X2NtYV9hY2NvdW50aW5nJiMzNDssCU9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcpLAogCXt9CiB9OwogCkBAIC0yMDI3LDYgJiM0MzsyMDI5LDkgQEAgc3RhdGljIGludCBjZ3JvdXAyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0KIAljYXNlIE9wdF9waWRzX2xvY2FsZXZlbnRzOgogCQljdHgtJmd0O2ZsYWdzIHw9IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUzsKIAkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgT3B0X21lbW9yeV9jbWFfYWNjb3VudGluZzoKJiM0MzsJCWN0eC0mZ3Q7ZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORzsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwNjgsNiAmIzQzOzIwNzMsMTEgQEAgc3RhdGljIHZvaWQgYXBwbHlfY2dyb3VwX3Jvb3RfZmxhZ3ModW5zaWduZWQgaW50IHJvb3RfZmxhZ3MpCiAJCQljZ3JwX2RmbF9yb290LmZsYWdzIHw9IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUzsKIAkJZWxzZQogCQkJY2dycF9kZmxfcm9vdC5mbGFncyAmYW1wOz0gfkNHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUzsKJiM0MzsKJiM0MzsJCWlmIChyb290X2ZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpCiYjNDM7CQkJY2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HOwomIzQzOwkJZWxzZQomIzQzOwkJCWNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDs9IH5DR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HOwogCX0KIH0KIApAQCAtMjA4NSw2ICYjNDM7MjA5NSw4IEBAIHN0YXRpYyBpbnQgY2dyb3VwX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGtlcm5mc19yb290ICprZl9yb290CiAJCXNlcV9wdXRzKHNlcSwgJiMzNDssbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyYjMzQ7KTsKIAlpZiAoY2dycF9kZmxfcm9vdC5mbGFncyAmYW1wOyBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMpCiAJCXNlcV9wdXRzKHNlcSwgJiMzNDsscGlkc19sb2NhbGV2ZW50cyYjMzQ7KTsKJiM0MzsJaWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDsgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORykKJiM0MzsJCXNlcV9wdXRzKHNlcSwgJiMzNDssbWVtb3J5X2NtYV9hY2NvdW50aW5nJiMzNDspOwogCXJldHVybiAwOwogfQogCkBAIC03NTIwLDcgJiM0Mzs3NTMyLDggQEAgc3RhdGljIHNzaXplX3QgZmVhdHVyZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAogCQkJJiMzNDttZW1vcnlfbG9jYWxldmVudHNcbiYjMzQ7CiAJCQkmIzM0O21lbW9yeV9yZWN1cnNpdmVwcm90XG4mIzM0OwogCQkJJiMzNDttZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXG4mIzM0OwotCQkJJiMzNDtwaWRzX2xvY2FsZXZlbnRzXG4mIzM0Oyk7CiYjNDM7CQkJJiMzNDtwaWRzX2xvY2FsZXZlbnRzXG4mIzM0OwomIzQzOwkJCSYjMzQ7bWVtb3J5X2NtYV9hY2NvdW50aW5nXG4mIzM0Oyk7CiB9CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNncm91cF9mZWF0dXJlc19hdHRyID0gX19BVFRSX1JPKGZlYXR1cmVzKTsKIApkaWZmIC0tZ2l0IGEvbW0vY21hLmMgYi9tbS9jbWEuYwppbmRleCBhMTNjZTQ5OTliMzlmLi4wM2ViM2FjYmQzYzc1IDEwMDY0NAotLS0gYS9tbS9jbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWEuYwpAQCAtMjUsNyAmIzQzOzI1LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmdfY2hvaWNlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9oaWdobWVtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rbWVtbGVhay5oJmd0OwpAQCAtOTA1LDYgJiM0Mzs5MDQsMTIgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpfX2NtYV9hbGxvY19mcm96ZW4oc3RydWN0IGNtYSAqY21hLAogCQljbWFfZGVidWdfc2hvd19hcmVhcyhjbWEpOwogCX0KIAomIzQzOwlpZiAocGFnZSAmYW1wOyZhbXA7IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShwYWdlLCBjb3VudCwgY21hKSkgewomIzQzOwkJZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBjb3VudCk7CiYjNDM7CQljbWFfY2xlYXJfYml0bWFwKGNtYSwgJmFtcDtjbWEtJmd0O3Jhbmdlc1tyXSwgcGFnZV90b19wZm4ocGFnZSksIGNvdW50KTsKJiM0MzsJCXBhZ2UgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJcHJfZGVidWcoJiMzNDslcygpOiByZXR1cm5lZCAlcFxuJiMzNDssIF9fZnVuY19fLCBwYWdlKTsKIAl0cmFjZV9jbWFfYWxsb2NfZmluaXNoKG5hbWUsIHBhZ2UgPyBwYWdlX3RvX3BmbihwYWdlKSA6IDAsCiAJCQkgICAgICAgcGFnZSwgY291bnQsIGFsaWduLCByZXQpOwpAQCAtOTkyLDEyICYjNDM7OTk3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX21lbXJhbmdlICpmaW5kX2NtYV9tZW1yYW5nZShzdHJ1Y3QgY21hICpjbWEsCiB9CiAKIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLAotCQljb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpCiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlcyk7CiAKIAlwcl9kZWJ1ZygmIzM0OyVzKHBhZ2UgJXAsIGNvdW50ICVsdSlcbiYjMzQ7LCBfX2Z1bmNfXywgKHZvaWQgKilwYWdlcywgY291bnQpOwogCiYjNDM7CW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHBhZ2VzLCBjb3VudCwgY21hKTsKIAlmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGZuLCBjb3VudCk7CiAJY21hX2NsZWFyX2JpdG1hcChjbWEsIGNtciwgcGZuLCBjb3VudCk7CiAJY21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhjbWEsIGNvdW50KTsKQEAgLTEwMTQsNyAmIzQzOzEwMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2NtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtciwKICAqIEl0IHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXMgYXJlYSBhbmQKICAqIHRydWUgb3RoZXJ3aXNlLgogICovCi1ib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLAomIzQzO2Jvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsCiAJCSB1bnNpZ25lZCBsb25nIGNvdW50KQogewogCXN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcjsKQEAgLTEwMzcsNyAmIzQzOzEwNDMsNyBAQCBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY21hX3JlbGVhc2UpOwogCi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKJiM0Mztib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywKIAkJdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7CmRpZmYgLS1naXQgYS9tbS9jbWEuaCBiL21tL2NtYS5oCmluZGV4IGM3MDE4MGMzNjU1OWMuLjUyYjdkNGJlNTE3MDcgMTAwNjQ0Ci0tLSBhL21tL2NtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYS5oCkBAIC00LDYgJiM0Mzs0LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rb2JqZWN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NtYS5oJmd0OwogCiBzdHJ1Y3QgY21hX2tvYmplY3QgewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CkBAIC04MCw2ICYjNDM7ODEsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNtYV9iaXRtYXBfbWF4bm8oc3RydWN0IGNtYSAqY21hLAogCXJldHVybiBjbXItJmd0O2NvdW50ICZndDsmZ3Q7IGNtYS0mZ3Q7b3JkZXJfcGVyX2JpdDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGNtYV9hcmVhX2luZGV4KGNvbnN0IHN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7CXJldHVybiBjbWEgLSBjbWFfYXJlYXM7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19DTUFfU1lTRlMKIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfc3VjY2Vzc19wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBjbWFfc3lzZnNfYWNjb3VudF9mYWlsX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CmRpZmYgLS1naXQgYS9tbS9jbWFfZGVidWcuYyBiL21tL2NtYV9kZWJ1Zy5jCmluZGV4IDUyM2JhNGEwZjlmNzYuLjcwYmZjNmZiZWVjYTMgMTAwNjQ0Ci0tLSBhL21tL2NtYV9kZWJ1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYV9kZWJ1Zy5jCkBAIC03LDcgJiM0Mzs3LDYgQEAKIAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZGVidWdmcy5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2NtYS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CmRpZmYgLS1naXQgYS9tbS9jbWFfc3lzZnMuYyBiL21tL2NtYV9zeXNmcy5jCmluZGV4IGQ1YmY3OTJjNjI0NWEuLmU0ZWUzNWJjNjgyYmEgMTAwNjQ0Ci0tLSBhL21tL2NtYV9zeXNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NtYV9zeXNmcy5jCkBAIC01LDcgJiM0Mzs1LDYgQEAKICAqIENvcHlyaWdodCAoYykgMjAyMSBNaW5jaGFuIEtpbSAmbHQ7bWluY2hhbkBrZXJuZWwub3JnJmd0OwogICovCiAKLSNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2ZGM0ODg4YTkwZjNmLi5mMjhkNjEwYTU5Y2U3IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC02OCw2ICYjNDM7NjgsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9pcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtzbGFiLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttZW1jb250cm9sLXYxLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y21hLmgmIzM0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogCkBAIC00MDYyLDYgJiM0Mzs0MDYzLDkgQEAgc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCWludCBub2RlOwogCiYjNDM7I2lmZGVmIENPTkZJR19DTUEKJiM0MzsJa2ZyZWUobWVtY2ctJmd0O2NtYV9jb3VudGVycyk7CiYjNDM7I2VuZGlmCiAJZm9yX2VhY2hfbm9kZShub2RlKSB7CiAJCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiA9IG1lbWNnLSZndDtub2RlaW5mb1tub2RlXTsKIAkJaWYgKCFwbikKQEAgLTQxNDQsNiAmIzQzOzQxNDgsMTUgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1FTUNHX0NHV0JfRlJOX0NOVDsgaSYjNDM7JiM0MzspCiAJCW1lbWNnLSZndDtjZ3diX2ZybltpXS5kb25lID0KIAkJCV9fV0JfQ09NUExFVElPTl9JTklUKCZhbXA7bWVtY2dfY2d3Yl9mcm5fd2FpdHEpOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7CWlmIChjbWFfYXJlYV9jb3VudCkgewomIzQzOwkJbWVtY2ctJmd0O2NtYV9jb3VudGVycyA9IGtjYWxsb2MoY21hX2FyZWFfY291bnQsCiYjNDM7CQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHBhZ2VfY291bnRlciksCiYjNDM7CQkJCQkgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghbWVtY2ctJmd0O2NtYV9jb3VudGVycykKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CX0KICNlbmRpZgogCWxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7CiAJcmV0dXJuIG1lbWNnOwpAQCAtNDE1OSw2ICYjNDM7NDE3Miw3IEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKQogCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHBhcmVudF9jc3MpOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZzsKIAlib29sIG1lbWNnX29uX2RmbCA9IGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7CiYjNDM7CXVuc2lnbmVkIGludCBfX21heWJlX3VudXNlZCBpOwogCiAJb2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpOwogCW1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpOwpAQCAtNDE3MSw2ICYjNDM7NDE4NSwxMiBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcykKICNpZmRlZiBDT05GSUdfWlNXQVAKIAltZW1jZy0mZ3Q7enN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDsKIAlXUklURV9PTkNFKG1lbWNnLSZndDt6c3dhcF93cml0ZWJhY2ssIHRydWUpOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbWFfYXJlYV9jb3VudDsgJiM0MzsmIzQzO2kpCiYjNDM7CQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDtjbWFfY291bnRlcnNbaV0sCiYjNDM7CQkJCSAgcGFyZW50ID8gJmFtcDtwYXJlbnQtJmd0O2NtYV9jb3VudGVyc1tpXSA6IE5VTEwsCiYjNDM7CQkJCSAgZmFsc2UpOwogI2VuZGlmCiAJcGFnZV9jb3VudGVyX3NldF9oaWdoKCZhbXA7bWVtY2ctJmd0O3N3YXAsIFBBR0VfQ09VTlRFUl9NQVgpOwogCWlmIChwYXJlbnQpIHsKQEAgLTUyMTMsNiAmIzQzOzUyMzMsMTAyIEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfY21hKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY2dycF9kZmxfcm9vdC5mbGFncyAmYW1wOyBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LAomIzQzOwkJCSAgc3RydWN0IGNtYSAqY21hKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgKmZhaWw7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJaW50IHJjID0gMDsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTsKJiM0MzsJaWYgKCFtZW1jZykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKJiM0MzsJCWdvdG8gY2dyb3VwX3B1dDsKJiM0MzsKJiM0MzsJcmMgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBHRlBfS0VSTkVMLCBjb3VudCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gY2dyb3VwX3B1dDsKJiM0MzsKJiM0MzsJY291bnRlciA9ICZhbXA7bWVtY2ctJmd0O2NtYV9jb3VudGVyc1tjbWFfYXJlYV9pbmRleChjbWEpXTsKJiM0MzsJaWYgKCFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShjb3VudGVyLCBjb3VudCwgJmFtcDtmYWlsKSkgewomIzQzOwkJcmVmaWxsX3N0b2NrKG1lbWNnLCBjb3VudCk7CiYjNDM7CQlyYyA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGNncm91cF9wdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX21lbWNnKG1lbWNnKTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UocGFnZV9mb2xpbyhwYWdlKSkpIHsKJiM0MzsJCWNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlKSwgb2JqY2cpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJb2JqX2Nncm91cF9nZXRfbWFueShvYmpjZywgY291bnQgLSAxKTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspCiYjNDM7CQkJY29tbWl0X2NoYXJnZShwYWdlX2ZvbGlvKHBhZ2UgJiM0MzsgaSksIG9iamNnKTsKJiM0MzsJfQomIzQzOwomIzQzO2Nncm91cF9wdXQ6CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LAomIzQzOwkJCSAgICAgc3RydWN0IGNtYSAqY21hKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjsKJiM0MzsJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19jbWEoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogR2V0IHRoZSBvYmpjZyBmcm9tIHRoZSBmaXJzdCBwYWdlLgomIzQzOwkgKiBwYWdlX29iamNnKCkgZXhwZWN0cyBNRU1DR19EQVRBX0tNRU0sIGJ1dCBmb3IgQ01BIHdlIHVzZWQKJiM0MzsJICogY29tbWl0X2NoYXJnZSgpIHdoaWNoIHNldHMgZm9saW8tJmd0O21lbWNnX2RhdGEgPSBvYmpjZwomIzQzOwkgKiB3aXRob3V0IGZsYWdzLCBzbyB3ZSBjYW5ub3QgdXNlIGl0LgomIzQzOwkgKi8KJiM0MzsJb2JqY2cgPSBmb2xpb19vYmpjZyhwYWdlX2ZvbGlvKHBhZ2UpKTsKJiM0MzsJaWYgKCFvYmpjZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpOwomIzQzOwomIzQzOwljb3VudGVyID0gJmFtcDttZW1jZy0mZ3Q7Y21hX2NvdW50ZXJzW2NtYV9hcmVhX2luZGV4KGNtYSldOwomIzQzOwlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoY291bnRlciwgY291bnQpOwomIzQzOwomIzQzOwltZW1jZ191bmNoYXJnZShtZW1jZywgY291bnQpOwomIzQzOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwlpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykpIHsKJiM0MzsJCWZvbGlvLSZndDttZW1jZ19kYXRhID0gMDsKJiM0MzsJCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCQlmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSAmIzQzOyBpKTsKJiM0MzsJCQlmb2xpby0mZ3Q7bWVtY2dfZGF0YSA9IDA7CiYjNDM7CQkJb2JqX2Nncm91cF9wdXQob2JqY2cpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfQ01BICovCiYjNDM7CiBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyIHsKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiAJdW5zaWduZWQgbG9uZyBucl9tZW1vcnk7CkBAIC02MDY2LDMgJiM0Mzs2MTgyLDkyIEBAIHZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCQlLKGF0b21pY19sb25nX3JlYWQoJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LmNoaWxkcmVuX21pbl91c2FnZSkpLAogCQlLKGF0b21pY19sb25nX3JlYWQoJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LmNoaWxkcmVuX2xvd191c2FnZSkpKTsKIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzO3N0YXRpYyBpbnQgbWVtb3J5X2NtYV9jdXJyZW50X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTsKJiM0MzsJaW50IGlkeCA9IHNlcV9jZnQobSktJmd0O3ByaXZhdGU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY3VyID0gcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7Y21hX2NvdW50ZXJzW2lkeF0pOwomIzQzOwomIzQzOwlzZXFfcHJpbnRmKG0sICYjMzQ7JWx1XG4mIzM0OywgY3VyICogUEFHRV9TSVpFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbWVtb3J5X2NtYV9tYXhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pOwomIzQzOwlpbnQgaWR4ID0gc2VxX2NmdChtKS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctJmd0O2NtYV9jb3VudGVyc1tpZHhdLm1heCk7CiYjNDM7CiYjNDM7CXJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sIG1heCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IG1lbW9yeV9jbWFfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLAomIzQzOwkJCQkgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7CiYjNDM7CWludCBpZHggPSBvZl9jZnQob2YpLSZndDtwcml2YXRlOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlidWYgPSBzdHJzdHJpcChidWYpOwomIzQzOwlyYyA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsICYjMzQ7bWF4JiMzNDssICZhbXA7bWF4KTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwomIzQzOwl4Y2hnKCZhbXA7bWVtY2ctJmd0O2NtYV9jb3VudGVyc1tpZHhdLm1heCwgbWF4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIG5ieXRlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjZnR5cGUgY21hX2RmbF90bXBsW10gPSB7CiYjNDM7CXsKJiM0MzsJCS5uYW1lID0gJiMzNDtjdXJyZW50JiMzNDssCiYjNDM7CQkuc2VxX3Nob3cgPSBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdywKJiM0MzsJCS5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLm5hbWUgPSAmIzM0O21heCYjMzQ7LAomIzQzOwkJLnNlcV9zaG93ID0gbWVtb3J5X2NtYV9tYXhfc2hvdywKJiM0MzsJCS53cml0ZSA9IG1lbW9yeV9jbWFfbWF4X3dyaXRlLAomIzQzOwkJLmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULAomIzQzOwl9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzOyNkZWZpbmUgQ01BX0RGTF9UTVBMX1NJWkUJKEFSUkFZX1NJWkUoY21hX2RmbF90bXBsKSAtIDEpCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjZnR5cGUgKmNtYV9kZmxfZmlsZXM7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9jbWFfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGNmdHlwZSAqY2Z0OwomIzQzOwl1bnNpZ25lZCBpbnQgaSwgajsKJiM0MzsJaW50IGNvdW50OwomIzQzOwomIzQzOwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjbWFfYXJlYV9jb3VudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwljb3VudCA9IGNtYV9hcmVhX2NvdW50ICogQ01BX0RGTF9UTVBMX1NJWkU7CiYjNDM7CWNtYV9kZmxfZmlsZXMgPSBrY2FsbG9jKGNvdW50ICYjNDM7IDEsIHNpemVvZigqY21hX2RmbF90bXBsKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY21hX2RmbF9maWxlcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY21hX2FyZWFfY291bnQ7ICYjNDM7JiM0MztpKQomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IENNQV9ERkxfVE1QTF9TSVpFOyAmIzQzOyYjNDM7aikgewomIzQzOwkJCWNmdCA9ICZhbXA7Y21hX2RmbF9maWxlc1tpICogQ01BX0RGTF9UTVBMX1NJWkUgJiM0Mzsgal07CiYjNDM7CQkJKmNmdCA9IGNtYV9kZmxfdG1wbFtqXTsKJiM0MzsJCQlzbnByaW50ZihjZnQtJmd0O25hbWUsIE1BWF9DRlRZUEVfTkFNRSwgJiMzNDtjbWEuJXMuJXMmIzM0OywKJiM0MzsJCQkJIGNtYV9nZXRfbmFtZSgmYW1wO2NtYV9hcmVhc1tpXSksCiYjNDM7CQkJCSBjbWFfZGZsX3RtcGxbal0ubmFtZSk7CiYjNDM7CQkJY2Z0LSZndDtwcml2YXRlID0gaTsgLyogY21hIGFyZWEgaW5kZXggZm9yIGNvdW50ZXJzIGluIGNhbGxiYWNrcy4gKi8KJiM0MzsJCQlsb2NrZGVwX3JlZ2lzdGVyX2tleSgmYW1wO2NmdC0mZ3Q7bG9ja2RlcF9rZXkpOwomIzQzOwkJfQomIzQzOwomIzQzOwlXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoJmFtcDttZW1vcnlfY2dycF9zdWJzeXMsIGNtYV9kZmxfZmlsZXMpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO3N1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX2NtYV9pbml0KTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0NNQSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZQppbmRleCA5NTJlNDQ0OGJmMDcwLi5iOWE0Mjk4ZDQ5NDQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZQpAQCAtMSw1ICYjNDM7MSw2IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIHRlc3RfY29yZQomIzQzO3Rlc3RfY21hX21lbWNnCiB0ZXN0X2NwdQogdGVzdF9jcHVzZXQKIHRlc3RfZnJlZXplcgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlCmluZGV4IGUwMTU4NGMyMTg5YWMuLjYwMWQ5MzAxNjBhNDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUKQEAgLTgsNiAmIzQzOzgsNyBAQCBURVNUX1BST0dTICAgICA6PSB0ZXN0X3N0cmVzcy5zaCB0ZXN0X2NwdXNldF9wcnMuc2ggdGVzdF9jcHVzZXRfdjFfaHAuc2gKIFRFU1RfR0VOX0ZJTEVTIDo9IHdhaXRfaW5vdGlmeQogIyBLZWVwIHRoZSBsaXN0cyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQKIFRFU1RfR0VOX1BST0dTICA9IHRlc3RfY29yZQomIzQzO1RFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X2NtYV9tZW1jZwogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHRlc3RfY3B1CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jcHVzZXQKIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X2ZyZWV6ZXIKQEAgLTI0LDYgJiM0MzsyNSw3IEBAIGluY2x1ZGUgLi4vbGliLm1rCiBpbmNsdWRlIGxpYi9saWJjZ3JvdXAubWsKIAogJChPVVRQVVQpL3Rlc3RfY29yZTogJChMSUJDR1JPVVBfTykKJiM0MzskKE9VVFBVVCkvdGVzdF9jbWFfbWVtY2c6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9jcHU6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9jcHVzZXQ6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9mcmVlemVyOiAkKExJQkNHUk9VUF9PKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcKaW5kZXggMzlmOTc5NjkwZGQzYi4uMWM5MDM0MDE3NjgyZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnCkBAIC00LDMgJiM0Mzs0LDggQEAgQ09ORklHX0NHUk9VUF9GUkVFWkVSPXkKIENPTkZJR19DR1JPVVBfU0NIRUQ9eQogQ09ORklHX01FTUNHPXkKIENPTkZJR19QQUdFX0NPVU5URVI9eQomIzQzO0NPTkZJR19DTUE9eQomIzQzO0NPTkZJR19ETUFfQ01BPXkKJiM0MztDT05GSUdfRE1BQlVGX0hFQVBTPXkKJiM0MztDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15CiYjNDM7Q09ORklHX0hVR0VUTEJGUz15CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjliZDQxZDlhNjE3N2QKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYwpAQCAtMCwwICYjNDM7MSw0MDIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1oZWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9pb2N0bC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2dyb3VwX3V0aWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDTUFfSEVBUF9ERUZBVUxUX1BBVEgJJiMzNDsvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiYjMzQ7CiYjNDM7I2RlZmluZSBDTUFfUkVTRVJWRURfQ1VSUkVOVAkmIzM0O21lbW9yeS5jbWEucmVzZXJ2ZWQuY3VycmVudCYjMzQ7CiYjNDM7I2RlZmluZSBDTUFfUkVTRVJWRURfTUFYCSYjMzQ7bWVtb3J5LmNtYS5yZXNlcnZlZC5tYXgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgSFVHRVRMQl9DTUFfQ1VSUkVOVAkmIzM0O21lbW9yeS5jbWEuaHVnZXRsYjAuY3VycmVudCYjMzQ7CiYjNDM7I2RlZmluZSBIVUdFVExCX0NNQV9NQVgJJiMzNDttZW1vcnkuY21hLmh1Z2V0bGIwLm1heCYjMzQ7CiYjNDM7I2RlZmluZSBIVUdFUEFHRVNfRElSCQkmIzM0Oy9zeXMva2VybmVsL21tL2h1Z2VwYWdlcyYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBjbWFfaGVhcF9hbGxvYyhpbnQgaGVhcF9mZCwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZG1hX2hlYXBfYWxsb2NhdGlvbl9kYXRhIGRhdGEgPSB7CiYjNDM7CQkubGVuID0gc2l6ZSwKJiM0MzsJCS5mZF9mbGFncyA9IE9fUkRXUiB8IE9fQ0xPRVhFQywKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGhlYXBfZmQsIERNQV9IRUFQX0lPQ1RMX0FMTE9DLCAmYW1wO2RhdGEpICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRhdGEuZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpCiYjNDM7ewomIzQzOwlpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTsKJiM0MzsJaW50IHJjID0gS1NGVF9GQUlMLCBpbl9jZyA9IDA7CiYjNDM7CXNpemVfdCBzaXplID0gNFVMICZsdDsmbHQ7IDIwOwomIzQzOwlsb25nIGJlZm9yZSwgYWZ0ZXI7CiYjNDM7CWNoYXIgKmNnOwomIzQzOwomIzQzOwljZyA9IGNnX25hbWUocm9vdCwgJiMzNDttZW1jZ19jbWFfY2hhcmdlJiMzNDspOwomIzQzOwlpZiAoIWNnKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoY2dfY3JlYXRlKGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpbl9jZyA9IDE7CiYjNDM7CiYjNDM7CWhlYXBfZmQgPSBvcGVuKENNQV9IRUFQX0RFRkFVTFRfUEFUSCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwlpZiAoaGVhcF9mZCAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpOwomIzQzOwomIzQzOwlidWZfZmQgPSBjbWFfaGVhcF9hbGxvYyhoZWFwX2ZkLCBzaXplKTsKJiM0MzsJaWYgKGJ1Zl9mZCAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IGFsbG9jYXRlIGluIENNQSBoZWFwICglbSlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpOwomIzQzOwomIzQzOwlpZiAoYWZ0ZXIgLSBiZWZvcmUgJmx0OyAobG9uZylzaXplKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygKJiM0MzsJCQkmIzM0O2ludmFsaWQgQ01BIGNvdW50ZXIgYWZ0ZXIgY2hhcmdlOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxuJiMzNDssCiYjNDM7CQkJYmVmb3JlLCBhZnRlcik7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xvc2UoYnVmX2ZkKTsKJiM0MzsJYnVmX2ZkID0gLTE7CiYjNDM7CiYjNDM7CWFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7CiYjNDM7CWlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygKJiM0MzsJCQkmIzM0O2ludmFsaWQgQ01BIGNvdW50ZXIgYWZ0ZXIgdW5jaGFyZ2U6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkXG4mIzM0OywKJiM0MzsJCQliZWZvcmUsIGFmdGVyKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IEtTRlRfUEFTUzsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlpZiAoYnVmX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShidWZfZmQpOwomIzQzOwlpZiAoaGVhcF9mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoaGVhcF9mZCk7CiYjNDM7CiYjNDM7CWlmIChpbl9jZykKJiM0MzsJCWNnX2VudGVyX2N1cnJlbnQocm9vdCk7CiYjNDM7CWNnX2Rlc3Ryb3koY2cpOwomIzQzOwlmcmVlKGNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfY21hX2xpbWl0KGNvbnN0IGNoYXIgKnJvb3QpCiYjNDM7ewomIzQzOwlpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTsKJiM0MzsJaW50IHJjID0gS1NGVF9GQUlMLCBpbl9jZyA9IDA7CiYjNDM7CXNpemVfdCBzaXplID0gNFVMICZsdDsmbHQ7IDIwOwomIzQzOwljaGFyICpjZzsKJiM0MzsKJiM0MzsJY2cgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfY21hX2xpbWl0JiMzNDspOwomIzQzOwlpZiAoIWNnKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoY2dfY3JlYXRlKGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpbl9jZyA9IDE7CiYjNDM7CiYjNDM7CWlmIChjZ193cml0ZShjZywgQ01BX1JFU0VSVkVEX01BWCwgJiMzNDsyTSYjMzQ7KSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3Qgc2V0IENNQSBsaW1pdCAoJW0pXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmIChoZWFwX2ZkICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3Qgb3BlbiBDTUEgaGVhcCAoJW0pXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7CiYjNDM7CWlmIChidWZfZmQgJmd0Oz0gMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtDTUEgbGltaXQgbm90IGVuZm9yY2VkLlxuJiMzNDspOwomIzQzOwkJY2xvc2UoYnVmX2ZkKTsKJiM0MzsJfSBlbHNlCiYjNDM7CQlyYyA9IEtTRlRfUEFTUzsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlpZiAoaGVhcF9mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoaGVhcF9mZCk7CiYjNDM7CiYjNDM7CWlmIChpbl9jZykKJiM0MzsJCWNnX2VudGVyX2N1cnJlbnQocm9vdCk7CiYjNDM7CWNnX2Rlc3Ryb3koY2cpOwomIzQzOwlmcmVlKGNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYih2b2lkKQomIzQzO3sKJiM0MzsJRElSICpkaXI7CiYjNDM7CXN0cnVjdCBkaXJlbnQgKmVudHJ5OwomIzQzOwlsb25nIG1heF9zaXplID0gMDsKJiM0MzsKJiM0MzsJZGlyID0gb3BlbmRpcihIVUdFUEFHRVNfRElSKTsKJiM0MzsJaWYgKCFkaXIpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXdoaWxlICgoZW50cnkgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKJiM0MzsJCWxvbmcgc2l6ZTsKJiM0MzsKJiM0MzsJCWlmIChzc2NhbmYoZW50cnktJmd0O2RfbmFtZSwgJiMzNDtodWdlcGFnZXMtJWxka0ImIzM0OywgJmFtcDtzaXplKSA9PSAxKSB7CiYjNDM7CQkJaWYgKHNpemUgJmd0OyBtYXhfc2l6ZSkKJiM0MzsJCQkJbWF4X3NpemUgPSBzaXplOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWNsb3NlZGlyKGRpcik7CiYjNDM7CiYjNDM7CXJldHVybiBtYXhfc2l6ZSAmZ3Q7IDAgPyBtYXhfc2l6ZSA6IC0xOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbG9uZyByZWFkX3N5c2ZzX2xvbmcoY29uc3QgY2hhciAqcGF0aCkKJiM0Mzt7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CWxvbmcgdmFsID0gLTE7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihwYXRoLCAmIzM0O3ImIzM0Oyk7CiYjNDM7CWlmICghZikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKGZzY2FuZihmLCAmIzM0OyVsZCYjMzQ7LCAmYW1wO3ZhbCkgIT0gMSkKJiM0MzsJCXZhbCA9IC0xOwomIzQzOwlmY2xvc2UoZik7CiYjNDM7CXJldHVybiB2YWw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoLCBsb25nIHZhbCkKJiM0Mzt7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJZiA9IGZvcGVuKHBhdGgsICYjMzQ7dyYjMzQ7KTsKJiM0MzsJaWYgKCFmKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlyYyA9IGZwcmludGYoZiwgJiMzNDslbGQmIzM0OywgdmFsKTsKJiM0MzsJZmNsb3NlKGYpOwomIzQzOwlyZXR1cm4gcmMgJmx0OyAwID8gLTEgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpCiYjNDM7ewomIzQzOwlpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDsKJiM0MzsJbG9uZyBocGFnZV9zaXplX2tiLCBocGFnZV9zaXplX2J5dGVzOwomIzQzOwlsb25nIG9yaWdfbnIgPSAtMSwgbmV3X25yLCBiZWZvcmUsIGFmdGVyOwomIzQzOwljaGFyIG5yX3BhdGhbUEFUSF9NQVhdOwomIzQzOwljaGFyICpjZzsKJiM0MzsKJiM0MzsJaHBhZ2Vfc2l6ZV9rYiA9IGZpbmRfbGFyZ2VzdF9odWdlcGFnZV9zaXplX2tiKCk7CiYjNDM7CWlmIChocGFnZV9zaXplX2tiICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtubyBodWdlcGFnZSBzaXplIGZvdW5kXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gS1NGVF9TS0lQOwomIzQzOwl9CiYjNDM7CWhwYWdlX3NpemVfYnl0ZXMgPSBocGFnZV9zaXplX2tiICogMTAyNDsKJiM0MzsKJiM0MzsJc25wcmludGYobnJfcGF0aCwgc2l6ZW9mKG5yX3BhdGgpLAomIzQzOwkJIEhVR0VQQUdFU19ESVIgJiMzNDsvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlcyYjMzQ7LCBocGFnZV9zaXplX2tiKTsKJiM0MzsKJiM0MzsJY2cgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfaHVnZXRsYl9jbWFfY2hhcmdlJiMzNDspOwomIzQzOwlpZiAoIWNnKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoY2dfY3JlYXRlKGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpbl9jZyA9IDE7CiYjNDM7CiYjNDM7CWlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTsKJiM0MzsJaWYgKG9yaWdfbnIgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCByZWFkICVzXG4mIzM0OywgbnJfcGF0aCk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYmVmb3JlID0gY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKTsKJiM0MzsKJiM0MzsJaWYgKHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19uciAmIzQzOyAxKSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3Qgd3JpdGUgJXNcbiYjMzQ7LCBucl9wYXRoKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwluZXdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7CiYjNDM7CWlmIChuZXdfbnIgJmx0Oz0gb3JpZ19ucikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgYSBodWdlcGFnZVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gS1NGVF9GQUlMOwomIzQzOwlhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7CiYjNDM7CiYjNDM7CWlmIChhZnRlciAtIGJlZm9yZSAmbHQ7IGhwYWdlX3NpemVfYnl0ZXMpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKAomIzQzOwkJCSYjMzQ7aHVnZXRsYiBDTUEgY291bnRlciBub3QgY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGQgZXhwZWN0ZWQgJiM0MzslbGRcbiYjMzQ7LAomIzQzOwkJCWJlZm9yZSwgYWZ0ZXIsIGhwYWdlX3NpemVfYnl0ZXMpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7CiYjNDM7CiYjNDM7CWFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKTsKJiM0MzsJaWYgKCF2YWx1ZXNfY2xvc2UoYmVmb3JlLCBhZnRlciwgMykpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKAomIzQzOwkJCSYjMzQ7aHVnZXRsYiBDTUEgY291bnRlciBub3QgdW5jaGFyZ2VkOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxuJiMzNDssCiYjNDM7CQkJYmVmb3JlLCBhZnRlcik7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBLU0ZUX1BBU1M7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKG9yaWdfbnIgJmd0Oz0gMCkKJiM0MzsJCXdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7CiYjNDM7CiYjNDM7CWlmIChpbl9jZykKJiM0MzsJCWNnX2VudGVyX2N1cnJlbnQocm9vdCk7CiYjNDM7CWNnX2Rlc3Ryb3koY2cpOwomIzQzOwlmcmVlKGNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdCkKJiM0Mzt7CiYjNDM7CWludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwOwomIzQzOwlsb25nIGhwYWdlX3NpemVfa2I7CiYjNDM7CWxvbmcgb3JpZ19uciwgbmV3X25yOwomIzQzOwljaGFyIG5yX3BhdGhbUEFUSF9NQVhdOwomIzQzOwljaGFyICpjZzsKJiM0MzsKJiM0MzsJaHBhZ2Vfc2l6ZV9rYiA9IGZpbmRfbGFyZ2VzdF9odWdlcGFnZV9zaXplX2tiKCk7CiYjNDM7CWlmIChocGFnZV9zaXplX2tiICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtubyBodWdlcGFnZSBzaXplIGZvdW5kXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gS1NGVF9TS0lQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSwKJiM0MzsJCSBIVUdFUEFHRVNfRElSICYjMzQ7L2h1Z2VwYWdlcy0lbGRrQi9ucl9odWdlcGFnZXMmIzM0OywgaHBhZ2Vfc2l6ZV9rYik7CiYjNDM7CiYjNDM7CWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX2h1Z2V0bGJfY21hX2xpbWl0JiMzNDspOwomIzQzOwlpZiAoIWNnKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwomIzQzOwlpZiAoY2dfY3JlYXRlKGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKQomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwlpbl9jZyA9IDE7CiYjNDM7CiYjNDM7CWlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX01BWCkgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2h1Z2V0bGIgQ01BIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY2dfd3JpdGUoY2csIEhVR0VUTEJfQ01BX01BWCwgJiMzNDswJiMzNDspKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBzZXQgaHVnZXRsYiBDTUEgbGltaXRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlvcmlnX25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpOwomIzQzOwlpZiAob3JpZ19uciAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IHJlYWQgJXNcbiYjMzQ7LCBucl9wYXRoKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgJiM0MzsgMSk7CiYjNDM7CW5ld19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTsKJiM0MzsKJiM0MzsJcmMgPSBLU0ZUX0ZBSUw7CiYjNDM7CWlmIChuZXdfbnIgJmd0OyBvcmlnX25yKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2h1Z2V0bGIgQ01BIGxpbWl0IG5vdCBlbmZvcmNlZFxuJiMzNDspOwomIzQzOwkJd3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJjID0gS1NGVF9QQVNTOwomIzQzOwl9CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGluX2NnKQomIzQzOwkJY2dfZW50ZXJfY3VycmVudChyb290KTsKJiM0MzsJY2dfZGVzdHJveShjZyk7CiYjNDM7CWZyZWUoY2cpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgVCh4KSB7IHgsICN4IH0KJiM0MztzdHJ1Y3QgY21hX21lbWNnX3Rlc3RzIHsKJiM0MzsJaW50ICgqZm4pKGNvbnN0IGNoYXIgKnJvb3QpOwomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzO30gdGVzdHNbXSA9IHsKJiM0MzsJVCh0ZXN0X2NtYV9jaGFyZ2UpLAomIzQzOwlUKHRlc3RfY21hX2xpbWl0KSwKJiM0MzsJVCh0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZSksCiYjNDM7CVQodGVzdF9odWdldGxiX2NtYV9saW1pdCksCiYjNDM7fTsKJiM0MzsjdW5kZWYgVAomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiYjNDM7ewomIzQzOwljaGFyIHJvb3RbUEFUSF9NQVhdOwomIzQzOwlpbnQgaGFzX21lbW9yeV9jbWFfYWNjLCBpOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X2hlYWRlcigpOwomIzQzOwlrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTsKJiM0MzsKJiM0MzsJaGFzX21lbW9yeV9jbWFfYWNjID0gcHJvY19tb3VudF9jb250YWlucygmIzM0O21lbW9yeV9jbWFfYWNjb3VudGluZyYjMzQ7KTsKJiM0MzsJaWYgKGhhc19tZW1vcnlfY21hX2FjYyAmbHQ7IDApCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O2Nhbm5vdCBxdWVyeSBjZ3JvdXAgbW91bnQgb3B0aW9uLlxuJiMzNDspOwomIzQzOwllbHNlIGlmICghaGFzX21lbW9yeV9jbWFfYWNjKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtDTUEgYWNjb3VudGluZyBpcyBkaXNhYmxlZC5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O2Nncm91cGZzIGlzIG5vdCBhdmFpbGFibGUuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChjZ19yZWFkX3N0cnN0cihyb290LCAmIzM0O2Nncm91cC5jb250cm9sbGVycyYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7bWVtb3J5IGNvbnRyb2xsZXIgaXMgbm90IGF2YWlsYWJsZSAoQ09ORklHX0NHUk9VUF9NRU1DRz8pXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHRlc3RzKTsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCXN3aXRjaCAodGVzdHNbaV0uZm4ocm9vdCkpIHsKJiM0MzsJCWNhc2UgS1NGVF9QQVNTOgomIzQzOwkJCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0OyVzXG4mIzM0OywgdGVzdHNbaV0ubmFtZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEtTRlRfU0tJUDoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslc1xuJiMzNDssIHRlc3RzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDslc1xuJiMzNDssIHRlc3RzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWtzZnRfZmluaXNoZWQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi41MzRhOTVlZjVlMDc3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaApAQCAtMCwwICYjNDM7MSwxOTcgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBDb3B5cmlnaHQgKGMpIDIwMjYgUmVkIEhhdCwgSW5jLgomIzQzOyMKJiM0MzsjIFJ1biBjZ3JvdXAgbWVtb3J5IGNvbnRyb2xsZXIgc2VsZnRlc3RzIGluc2lkZSBhIHZpcnRtZS1uZyBWTQomIzQzOyMgRGVwZW5kZW5jaWVzOgomIzQzOyMJCSogdmlydG1lLW5nCiYjNDM7IwkJKiBidXN5Ym94LXN0YXRpYyAodXNlZCBieSB2aXJ0bWUtbmcpCiYjNDM7IwkJKiBxZW11CSh1c2VkIGJ5IHZpcnRtZS1uZykKJiM0MzsKJiM0MztzZXQgLWV1byBwaXBlZmFpbAomIzQzOwomIzQzO3JlYWRvbmx5IFNDUklQVF9ESVI9JiMzNDskKGNkIC1QIC0tICYjMzQ7JChkaXJuYW1lIC0tICYjMzQ7JHtCQVNIX1NPVVJDRVswXX0mIzM0OykmIzM0OyAmYW1wOyZhbXA7IHB3ZCAtUCkmIzM0OwomIzQzO3JlYWRvbmx5IEtFUk5FTF9DSEVDS09VVD0mIzM0OyQocmVhbHBhdGggJiMzNDske1NDUklQVF9ESVJ9JiMzNDsvLi4vLi4vLi4vLi4vKSYjMzQ7CiYjNDM7CiYjNDM7c291cmNlICYjMzQ7JHtTQ1JJUFRfRElSfSYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2gKJiM0MzsKJiM0MztyZWFkb25seSBTU0hfR1VFU1RfUE9SVD0mIzM0OyR7U1NIX0dVRVNUX1BPUlQ6LTIyfSYjMzQ7CiYjNDM7cmVhZG9ubHkgV0FJVF9QRVJJT0Q9MwomIzQzO3JlYWRvbmx5IFdBSVRfUEVSSU9EX01BWD04MAomIzQzO3JlYWRvbmx5IFdBSVRfVE9UQUw9JCgoV0FJVF9QRVJJT0QgKiBXQUlUX1BFUklPRF9NQVgpKQomIzQzO3JlYWRvbmx5IFFFTVVfUElERklMRT0mIzM0OyQobWt0ZW1wIC90bXAvcWVtdV9tZW1jZ192bXRlc3RfWFhYWC5waWQpJiMzNDsKJiM0MztyZWFkb25seSBRRU1VX09QVFM9JiMzNDsgLS1waWRmaWxlICR7UUVNVV9QSURGSUxFfSAmIzM0OwomIzQzOwomIzQzO0JVSUxEPTAKJiM0MztRRU1VPSYjMzQ7cWVtdS1zeXN0ZW0tJCh1bmFtZSAtbSkmIzM0OwomIzQzO1ZFUkJPU0U9MAomIzQzO1NIRUxMX01PREU9MAomIzQzO0dVRVNUX1RSRUU9JiMzNDske0dVRVNUX1RSRUU6LSRLRVJORUxfQ0hFQ0tPVVR9JiMzNDsKJiM0MzsKJiM0Mzt1c2FnZSgpIHsKJiM0MzsJY2F0ICZsdDsmbHQ7RU9GCiYjNDM7JDAgW09QVElPTlNdCiYjNDM7ICAgIC1iICAgICAgICBCdWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSBiZWZvcmUgYm9vdGluZwomIzQzOyAgICAtcSAmbHQ7cWVtdSZndDsgUUVNVSBiaW5hcnkvcGF0aCAoZGVmYXVsdDogJFFFTVUpCiYjNDM7ICAgIC1zICAgICAgICBTdGFydCBpbnRlcmFjdGl2ZSBzaGVsbCBpbiBWTQomIzQzOyAgICAtdiAgICAgICAgVmVyYm9zZSBvdXRwdXQgKHZuZyBib290IGxvZ3Mgb24gc3Rkb3V0KQomIzQzO0VPRgomIzQzOwlleGl0IDEKJiM0Mzt9CiYjNDM7CiYjNDM7ZGllKCkgewomIzQzOwllY2hvICYjMzQ7JComIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CWV4aXQgJiMzNDske0tTRlRfRkFJTH0mIzM0OwomIzQzO30KJiM0MzsKJiM0MztjbGVhbnVwKCkgewomIzQzOwlpZiBbWyAtcyAmIzM0OyRRRU1VX1BJREZJTEUmIzM0OyBdXTsgdGhlbgomIzQzOwkJcGtpbGwgLVNJR1RFUk0gLUYgJiMzNDskUUVNVV9QSURGSUxFJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSB8fCB0cnVlCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlmIFtbIC1lICYjMzQ7JFFFTVVfUElERklMRSYjMzQ7IF1dOyB0aGVuCiYjNDM7CQlybSAtZiAmIzM0OyRRRU1VX1BJREZJTEUmIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mzt2bV9zc2goKSB7CiYjNDM7CXN0ZGJ1ZiAtb0wgc3NoIC1xIFwKJiM0MzsJCS1GICYjMzQ7JEhPTUUvLmNhY2hlL3ZpcnRtZS1uZy8uc3NoL3ZpcnRtZS1uZy1zc2guY29uZiYjMzQ7IFwKJiM0MzsJCS1sIHJvb3QgJiMzNDt2aXJ0bWUtbmclJFNTSF9HVUVTVF9QT1JUJiMzNDsgXAomIzQzOwkJJiMzNDskQCYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2RlcHMoKSB7CiYjNDM7CWZvciBkZXAgaW4gdm5nICYjMzQ7JFFFTVUmIzM0OyBidXN5Ym94IHBraWxsIHNzaDsgZG8KJiM0MzsJCWlmICEgY29tbWFuZCAtdiAmIzM0OyRkZXAmIzM0OyAmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O3NraXA6IGRlcGVuZGVuY3kgJGRlcCBub3QgZm91bmQmIzM0OwomIzQzOwkJCWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MzsJCWZpCiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7aGFuZGxlX2J1aWxkKCkgewomIzQzOwlpZiBbWyAhICYjMzQ7JEJVSUxEJiMzNDsgLWVxIDEgXV07IHRoZW4KJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwomIzQzOwlpZiBbWyAhIC1kICYjMzQ7JEtFUk5FTF9DSEVDS09VVCYjMzQ7IF1dOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7LWIgcmVxdWlyZXMgJDAgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgMQomIzQzOwlmaQomIzQzOwomIzQzOwlwdXNoZCAmIzM0OyRLRVJORUxfQ0hFQ0tPVVQmIzM0OyAmYW1wOyZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsJaWYgISB2bmcgLS1rY29uZmlnIC0tY29uZmlnICYjMzQ7JFNDUklQVF9ESVImIzM0Oy9jb25maWc7IHRoZW4KJiM0MzsJCWRpZSAmIzM0O2ZhaWxlZCB0byBnZW5lcmF0ZSAuY29uZmlnIGZvciBrZXJuZWwgc291cmNlIHRyZWUgKCRLRVJORUxfQ0hFQ0tPVVQpJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgISBtYWtlIC1qJiMzNDskKG5wcm9jKSYjMzQ7OyB0aGVuCiYjNDM7CQlkaWUgJiMzNDtmYWlsZWQgdG8gYnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgKCRLRVJORUxfQ0hFQ0tPVVQpJiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJcG9wZCAmYW1wOyZndDsvZGV2L251bGwKJiM0Mzt9CiYjNDM7CiYjNDM7dm1fc3RhcnQoKSB7CiYjNDM7CWxvY2FsIGxvZ2ZpbGU9L2Rldi9udWxsCiYjNDM7CWxvY2FsIHZlcmJvc2Vfb3B0PSYjMzQ7JiMzNDsKJiM0MzsJbG9jYWwga2VybmVsX29wdD0mIzM0OyYjMzQ7CiYjNDM7CiYjNDM7CWlmIFtbICYjMzQ7JFZFUkJPU0UmIzM0OyAtZXEgMSBdXTsgdGhlbgomIzQzOwkJdmVyYm9zZV9vcHQ9JiMzNDstLXZlcmJvc2UmIzM0OwomIzQzOwkJbG9nZmlsZT0vZGV2L3N0ZG91dAomIzQzOwlmaQomIzQzOwomIzQzOwlpZiBbWyAmIzM0OyRCVUlMRCYjMzQ7IC1lcSAxIF1dOyB0aGVuCiYjNDM7CQlrZXJuZWxfb3B0PSYjMzQ7JHtLRVJORUxfQ0hFQ0tPVVR9JiMzNDsKJiM0MzsJZmkKJiM0MzsKJiM0MzsJdm5nIFwKJiM0MzsJCS0tcnVuIFwKJiM0MzsJCSR7a2VybmVsX29wdH0gXAomIzQzOwkJJHt2ZXJib3NlX29wdH0gXAomIzQzOwkJLS1xZW11LW9wdHM9JiMzNDskUUVNVV9PUFRTJiMzNDsgXAomIzQzOwkJLS1xZW11PSYjMzQ7JChjb21tYW5kIC12ICYjMzQ7JFFFTVUmIzM0OykmIzM0OyBcCiYjNDM7CQktLXVzZXIgcm9vdCBcCiYjNDM7CQktLXNzaCAmIzM0OyRTU0hfR1VFU1RfUE9SVCYjMzQ7IFwKJiM0MzsJCS0tbWVtb3J5IDNHIFwKJiM0MzsJCS0tYXBwZW5kICYjMzQ7Y21hPTY0TSBodWdldGxiX2NtYT0xRyBodWdldGxiX2NtYV9vbmx5PTEmIzM0OyBcCiYjNDM7CQktLXJ3ICZhbXA7Jmd0OyYjMzQ7JGxvZ2ZpbGUmIzM0OyAmYW1wOwomIzQzOwomIzQzOwlsb2NhbCB2bmdfcGlkPSQhCiYjNDM7CWxvY2FsIGVsYXBzZWQ9MAomIzQzOwomIzQzOwl3aGlsZSBbWyAhIC1zICYjMzQ7JFFFTVVfUElERklMRSYjMzQ7IF1dOyBkbwomIzQzOwkJa2lsbCAtMCAmIzM0OyR2bmdfcGlkJiMzNDsgMiZndDsvZGV2L251bGwgfHwgXAomIzQzOwkJCWRpZSAmIzM0O3ZuZyBleGl0ZWQgZWFybHk7IGZhaWxlZCB0byBib290IFZNJiMzNDsKJiM0MzsJCVtbICYjMzQ7JGVsYXBzZWQmIzM0OyAtZ2UgJiMzNDskV0FJVF9UT1RBTCYjMzQ7IF1dICZhbXA7JmFtcDsgXAomIzQzOwkJCWRpZSAmIzM0O3RpbWVkIG91dCB3YWl0aW5nIGZvciBWTSBib290JiMzNDsKJiM0MzsJCXNsZWVwIDEKJiM0MzsJCWVsYXBzZWQ9JCgoZWxhcHNlZCAmIzQzOyAxKSkKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0Mzt2bV93YWl0X2Zvcl9zc2goKSB7CiYjNDM7CWxvY2FsIGk9MAomIzQzOwl3aGlsZSB0cnVlOyBkbwomIzQzOwkJdm1fc3NoIC0tIHRydWUgJmFtcDsmYW1wOyBicmVhawomIzQzOwkJaT0kKChpICYjNDM7IDEpKQomIzQzOwkJW1sgJiMzNDske2l9JiMzNDsgLWd0ICYjMzQ7JFdBSVRfUEVSSU9EX01BWCYjMzQ7IF1dICZhbXA7JmFtcDsgXAomIzQzOwkJCWRpZSAmIzM0O3RpbWVkIG91dCB3YWl0aW5nIGZvciBndWVzdCBzc2gmIzM0OwomIzQzOwkJc2xlZXAgJiMzNDskV0FJVF9QRVJJT0QmIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7Z3JlcCAtcSBtZW1vcnkgL3N5cy9mcy9jZ3JvdXAvY2dyb3VwLmNvbnRyb2xsZXJzJiMzNDsgXAomIzQzOwkJfHwgZGllICYjMzQ7bWVtb3J5IGNvbnRyb2xsZXIgbm90IGF2YWlsYWJsZSAoQ09ORklHX01FTUNHPykmIzM0OwomIzQzOwl2bV9zc2ggLS0gJiMzNDtbWyAtZSAvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiBdXSYjMzQ7IFwKJiM0MzsJCXx8IGRpZSAmIzM0O0NNQSBoZWFwIG5vdCBhdmFpbGFibGUgKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BPyBjbWE9IGNtZGxpbmU/KSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nKCkgewomIzQzOwl2bV9zc2ggLS0gJiMzNDttb3VudCAtbyByZW1vdW50LG1lbW9yeV9jbWFfYWNjb3VudGluZyAvc3lzL2ZzL2Nncm91cCYjMzQ7IFwKJiM0MzsJCXx8IGRpZSAmIzM0O2ZhaWxlZCB0byBlbmFibGUgbWVtb3J5X2NtYV9hY2NvdW50aW5nJiMzNDsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7ZWNobyAmIzQzO21lbW9yeSAmZ3Q7IC9zeXMvZnMvY2dyb3VwL2Nncm91cC5zdWJ0cmVlX2NvbnRyb2wmIzM0OyBcCiYjNDM7CQl8fCBkaWUgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeSBjb250cm9sbGVyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7cnVuX3Rlc3QoKSB7CiYjNDM7CXZtX3NzaCAtLSAmIzM0O2NkICYjMzk7JEdVRVNUX1RSRUUmIzM5OyAmYW1wOyZhbXA7IG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMgVEFSR0VUUz1jZ3JvdXAmIzM0OwomIzQzOwl2bV9zc2ggLS0gJiMzNDtjZCAmIzM5OyRHVUVTVF9UUkVFJiMzOTsgJmFtcDsmYW1wOyBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwIHJ1bl90ZXN0cyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3doaWxlIGdldG9wdHMgJiMzNDs6aHZxOnNiJiMzNDsgb3B0OyBkbwomIzQzOwljYXNlICYjMzQ7JG9wdCYjMzQ7IGluCiYjNDM7CXYpIFZFUkJPU0U9MSA7OwomIzQzOwlxKSBRRU1VPSYjMzQ7JHtPUFRBUkd9JiMzNDsgOzsKJiM0MzsJYikgQlVJTEQ9MSA7OwomIzQzOwlzKSBTSEVMTF9NT0RFPTEgOzsKJiM0MzsJaHwqKSB1c2FnZSA7OwomIzQzOwllc2FjCiYjNDM7ZG9uZQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Y2hlY2tfZGVwcwomIzQzO2hhbmRsZV9idWlsZAomIzQzO2VjaG8gJiMzNDtCb290aW5nIHZpcnRtZS1uZyBWTS4uLiYjMzQ7CiYjNDM7dm1fc3RhcnQKJiM0Mzt2bV93YWl0X2Zvcl9zc2gKJiM0MztlY2hvICYjMzQ7Vk0gaXMgcmVhY2hhYmxlIHZpYSBTU0guJiMzNDsKJiM0MzsKJiM0MztpZiBbWyAmIzM0OyRTSEVMTF9NT0RFJiMzNDsgLWVxIDEgXV07IHRoZW4KJiM0MzsJZWNobyAmIzM0O1N0YXJ0aW5nIGludGVyYWN0aXZlIHNoZWxsIGluIFZNLiBFeGl0IHRvIHN0b3AgVk0uJiMzNDsKJiM0MzsJdm1fc3NoIC10IC0tICYjMzQ7Y2QgJiMzOTskR1VFU1RfVFJFRSYjMzk7ICZhbXA7JmFtcDsgZXhlYyBiYXNoIC0tbm9wcm9maWxlIC0tbm9yYyYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9QQVNTJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cwomIzQzO3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nCiYjNDM7CiYjNDM7ZWNobyAmIzM0O1J1bm5pbmcgY2dyb3VwIHNlbGZ0ZXN0cyBpbiBWTS4uLiYjMzQ7CiYjNDM7cnVuX3Rlc3QKJiM0MztlY2hvICYjMzQ7UEFTUzogY2dyb3VwIHNlbGZ0ZXN0cyBjb21wbGV0ZWQmIzM0OwomIzQzO2V4aXQgJiMzNDskS1NGVF9QQVNTJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MzcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IENNQSBNZW1vcnkgQWNjb3VudGluZyBpbiBjZ3JvdXAgdjIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBzY3JlYW1zICYjMzQ7ZnV6eiB0aGlzISYjMzQ7LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1vcnlfY21hX2FjY291bnRpbmdgIG1vdW50IG9wdGlvbiBmb3IgY2dyb3VwIHYyLiBFc3NlbnRpYWxseSwgZW5hYmxpbmcgdGhpcyBhY2NvdW50cyBDTUEgbWVtb3J5IHVzYWdlIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBpdCBleHBvc2VzIHBlci1DTUEgYXJlYSBjb3VudGVycy4gQ3J1Y2lhbGx5LCB0aGUgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBhcmVhcyBsaWtlIGNncm91cCwgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBhbmQgQ01BIGl0c2VsZi4gR2l2ZW4gdGhhdCBDTUEgKmNhbiogYmUgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCB0aGF0JiMzOTtzIGEgYmlnIGdyZWVuIGZsYWcuIFRoZSBleGlzdGVuY2Ugb2YgYSBuZXcgc2VsZnRlc3QsIGB0ZXN0X2NtYV9tZW1jZy5jYCwgdXNpbmcgYC9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uYCBhbmQgYGh1Z2V0bGJfY21hYCBqdXN0IHJlaW5mb3JjZXMgdGhpcy4gVGhpcyBwYXRjaCAqZGVtYW5kcyogZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyBwaW5wb2ludGluZyB0aGUgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSB0aGUgcHJpbWFyeSBmdXp6aW5nIHRhcmdldHMuIExvb2tpbmcgYXQgdGhlIGRpZmYsIGEgZmV3IHN0YW5kIG91dDogYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAsIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAsIGFuZCB0aGUgbW9kaWZpZWQgYGNtYV9yZWxlYXNlYCBhbmQgYGNtYV9yZWxlYXNlX2Zyb3plbmAuIFdoaWxlIHRoZSBsYXR0ZXIgdHdvIGhhdmUgc2lnbmF0dXJlIGNoYW5nZXMsIEkmIzM5O20gbW9yZSBpbnRlcmVzdGVkIGluIHRoZSBuZXcgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgZnVuY3Rpb25zLgoKSSBjb25maXJtZWQgdGhhdCBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCBhcmUgKm5vdCogc3RhdGljLCB3aGljaCBpcyBpZGVhbCBmb3IgcG90ZW50aWFsIGZ1enppbmcuIGBfX2NtYV9hbGxvY19mcm96ZW5gIGNhbGxzIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgX19jbWFfcmVsZWFzZV9mcm96ZW5gIGNhbGxzIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAsIG1ha2luZyB0aGVzZSBpbmRpcmVjdGx5IHRhcmdldHMuCgpOb3cgZm9yIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIHNlbGZ0ZXN0cyBjb25maWcsIG1ha2luZyBpdCBjbGVhciB0aGF0IGBDT05GSUdfQ01BYCwgYENPTkZJR19ETUFfQ01BYCwgYENPTkZJR19ETUFCVUZfSEVBUFNgLCBgQ09ORklHX0RNQUJVRl9IRUFQU19DTUFgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgIGFyZSBhbGwgZXNzZW50aWFsLiBPYnZpb3VzbHksIGBDT05GSUdfTUVNQ0dgIGlzIGFsc28gcmVxdWlyZWQuIEkmIzM5O3ZlIGFsc28gdmVyaWZpZWQgdGhpcyB3aXRoIGEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSBjb2RlIGZvciBgI2lmZGVmIENPTkZJR19DTUFgLgoKVGltZSB0byBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MsIGJ1dCBJIGFtIGNvbmZpZGVudC4gSSB3aWxsIHVzZSBhIGdyZXBwZXIgb3Igc2ltaWxhciB0b29sIHRvIG1ha2Ugc3VyZSBJIGRpZCBub3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9jbWEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjY2PWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjY5OmludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzAtXHRcdFx0ICBzdHJ1Y3QgY21hICpjbWEpO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNjY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE3MS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNzI6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE3My1cdFx0XHRcdFx0c3RydWN0IGNtYSAqY21hKVxuLS1cbm1tL2NtYS5jPTg2Mz1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsXG4tLVxubW0vY21hLmMtOTA2LVxubW0vY21hLmM6OTA3Olx0aWYgKHBhZ2UgXHUwMDI2XHUwMDI2IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShwYWdlLCBjb3VudCwgY21hKSkge1xubW0vY21hLmMtOTA4LVx0XHRmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIzNz1zdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19jbWEodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0MS1cbm1tL21lbWNvbnRyb2wuYzo1MjQyOmludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG5tbS9tZW1jb250cm9sLmMtNTI0My1cdFx0XHQgIHN0cnVjdCBjbWEgKmNtYSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQ01BIE1lbW9yeSBBY2NvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgZW5hYmxlZC4gSSYjMzk7dmUgbm90aWNlZCB0aGF0IHRoZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYywgYW5kIHRoZXkmIzM5O3JlICpub3QqIGJlaW5nIGlubGluZWQuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIGZvciBtZS4gTm9uLXN0YXRpYywgbm9uLWlubGluZWQgbWVhbnMgdGhleSBoYXZlIHdpZGVyIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgY2FsbHMgZnJvbSBwbGFjZXMgSSBtaWdodCBub3QgaW1tZWRpYXRlbHkgZXhwZWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIENNQS4gVGhpcyBsYWNrIG9mIG9wdGltaXphdGlvbiBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGFjdHMsIG9yIGF0IGxlYXN0IHJhaXNlcyBhIHJlZCBmbGFnIGluIHRlcm1zIG9mIGNvbnRyb2wgZmxvdy4KClRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYGNtYV9yZWxlYXNlYCBhbmQgYGNtYV9yZWxlYXNlX2Zyb3plbmAgaW50ZXJhY3Qgd2l0aCB0aGVtLiBUaG9zZSByZWxlYXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgaW4gbWFuYWdpbmcgQ01BIG1lbW9yeSwgYW5kIHRoZXkmIzM5O3JlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIHF1ZXN0aW9uaW5nLiBCeSB0cmFjaW5nIHRoZSBjYWxsIGdyYXBoLCBJIGNhbiBob3BlZnVsbHkgc2VlIHdoZXJlIHRoZSBjaGFyZ2luZyBhbmQgdW5jaGFyZ2luZyBoYXBwZW4gd2l0aGluIHRoZSByZWxlYXNlIHByb2Nlc3MuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQgYXMgaW50ZW5kZWQsIGFuZCBpZiBzbywgdW5kZXJzdGFuZCB0aGUgcGF0aCBvZiBleGVjdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTk6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y21hX3JlbGVhc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfYnVpbHRpbi5jPTY3PXZvaWQga3ZtX2ZyZWVfaHB0X2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X2J1aWx0aW4uYy02OC17XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9idWlsdGluLmM6Njk6XHRjbWFfcmVsZWFzZShrdm1fY21hLCBwYWdlLCBucl9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9idWlsdGluLmMtNzAtfVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmM9MTAwPWJvb2wgYmNtYV93YWl0X3ZhbHVlKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSxcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTExOC1cbmRyaXZlcnMvYmNtYS9tYWluLmM6MTE5OnN0YXRpYyB2b2lkIGJjbWFfcmVsZWFzZV9jb3JlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTEyMC17XG4tLVxuZHJpdmVycy9iY21hL21haW4uYz0yMzg9dm9pZCBiY21hX3ByZXBhcmVfY29yZShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtMjQwLVx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2Y29yZS1cdTAwM2VkZXYpO1xuZHJpdmVycy9iY21hL21haW4uYzoyNDE6XHRjb3JlLVx1MDAzZWRldi5yZWxlYXNlID0gYmNtYV9yZWxlYXNlX2NvcmVfZGV2O1xuZHJpdmVycy9iY21hL21haW4uYy0yNDItXHRjb3JlLVx1MDAzZWRldi5idXMgPSBcdTAwMjZiY21hX2J1c190eXBlO1xuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jPTI1MD1zdGF0aWMgdm9pZCBjbWFfaGVhcF9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1Zilcbi0tXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvY21hX2hlYXAuYy0yNjMtXHQvKiByZWxlYXNlIG1lbW9yeSAqL1xuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmM6MjY0Olx0Y21hX3JlbGVhc2UoY21hX2hlYXAtXHUwMDNlY21hLCBidWZmZXItXHUwMDNlY21hX3BhZ2VzLCBidWZmZXItXHUwMDNlcGFnZWNvdW50KTtcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jLTI2NS1cdGtmcmVlKGJ1ZmZlcik7XG4tLVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmM9MjgxPXN0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqY21hX2hlYXBfYWxsb2NhdGUoc3RydWN0IGRtYV9oZWFwICpoZWFwLFxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jLTM2MC1mcmVlX2NtYTpcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jOjM2MTpcdGNtYV9yZWxlYXNlKGNtYV9oZWFwLVx1MDAzZWNtYSwgY21hX3BhZ2VzLCBwYWdlY291bnQpO1xuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmMtMzYyLWZyZWVfYnVmZmVyOlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jPTU4Nz1zdGF0aWMgdm9pZCBjbWFfYXR0YWNoX3RvX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTU5NS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjU5NjpzdGF0aWMgdm9pZCBjbWFfcmVsZWFzZV9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdilcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTU5Ny17XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9MTk2Mz1zdGF0aWMgdm9pZCBjbWFfY2FuY2VsX29wZXJhdGlvbihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTE5ODktXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYzoxOTkwOnN0YXRpYyB2b2lkIGNtYV9yZWxlYXNlX3BvcnQoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdilcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTE5OTEte1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jPTIwNTc9c3RhdGljIHZvaWQgX2Rlc3Ryb3lfaWQoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy0yMDcyLVx0XHRjbWFfbGVhdmVfbWNfZ3JvdXBzKGlkX3ByaXYpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6MjA3MzpcdFx0Y21hX3JlbGVhc2VfZGV2KGlkX3ByaXYpO1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMtMjA3NC1cdH1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzUtXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYzoyMDc2Olx0Y21hX3JlbGVhc2VfcG9ydChpZF9wcml2KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzctXHRjbWFfaWRfcHV0KGlkX3ByaXYpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jPTQwMTE9c3RhdGljIGludCByZG1hX2JpbmRfYWRkcl9kc3Qoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy00MDYzLVx0aWYgKGlkX3ByaXYtXHUwMDNlY21hX2RldilcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjQwNjQ6XHRcdGNtYV9yZWxlYXNlX2RldihpZF9wcml2KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTQwNjUtZXJyMTpcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci92bWNwLmM9ODE9c3RhdGljIHZvaWQgdm1jcF9yZXNwb25zZV9mcmVlKHN0cnVjdCB2bWNwX3Nlc3Npb24gKnNlc3Npb24pXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTkxLVx0XHRwYWdlID0gdmlydF90b19wYWdlKHNlc3Npb24tXHUwMDNlcmVzcG9uc2UpO1xuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jOjkyOlx0XHRjbWFfcmVsZWFzZSh2bWNwX2NtYSwgcGFnZSwgbnJfcGFnZXMpO1xuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTkzLVx0XHRzZXNzaW9uLVx1MDAzZWNtYV9hbGxvYyA9IDA7XG4tLVxuaW5jbHVkZS9saW51eC9jbWEuaD01MD1leHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcbmluY2x1ZGUvbGludXgvY21hLmgtNTEtXHRcdFx0ICAgICAgYm9vbCBub193YXJuKTtcbmluY2x1ZGUvbGludXgvY21hLmg6NTI6ZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpO1xuaW5jbHVkZS9saW51eC9jbWEuaC01My1cbi0tXG5pbmNsdWRlL2xpbnV4L2NtYS5oPTU2PXN0cnVjdCBwYWdlICpjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvY21hLmg6NTc6Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTU4LVx0XHR1bnNpZ25lZCBsb25nIGNvdW50KTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jbWEuaC0xMC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NtYS5oOjExOlRSQUNFX0VWRU5UKGNtYV9yZWxlYXNlLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY21hLmgtMTItXG4tLVxua2VybmVsL2RtYS9jb250aWd1b3VzLmM9Mzg1PWJvb2wgZG1hX3JlbGVhc2VfZnJvbV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTM4Ny17XG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzozODg6XHRyZXR1cm4gY21hX3JlbGVhc2UoZGV2X2dldF9jbWFfYXJlYShkZXYpLCBwYWdlcywgY291bnQpO1xua2VybmVsL2RtYS9jb250aWd1b3VzLmMtMzg5LX1cbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYz00MTM9c3RydWN0IHBhZ2UgKmRtYV9hbGxvY19jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGdmcF90IGdmcClcbi0tXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTAtICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDUxOiAqIGNtYV9yZWxlYXNlIHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXNcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ1Mi0gKiBhcmVhIGFuZCB0cnVlIG90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiB0aGVuIGRvZXMgYSBmYWxsYmFjayBfX2ZyZWVfcGFnZXMoKVxuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jPTQ1NT12b2lkIGRtYV9mcmVlX2NvbnRpZ3VvdXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4tLVxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDYwLVx0aWYgKGRldi1cdTAwM2VjbWFfYXJlYSkge1xua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDYxOlx0XHRpZiAoY21hX3JlbGVhc2UoZGV2LVx1MDAzZWNtYV9hcmVhLCBwYWdlLCBjb3VudCkpXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NjItXHRcdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ2Ny0jaWZkZWYgQ09ORklHX0RNQV9OVU1BX0NNQVxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDY4Olx0XHRpZiAoY21hX3JlbGVhc2UoZG1hX2NvbnRpZ3VvdXNfbnVtYV9hcmVhW3BhZ2VfdG9fbmlkKHBhZ2UpXSxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ2OS1cdFx0XHRcdFx0cGFnZSwgY291bnQpKVxuLS1cbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ3MS0jZW5kaWZcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ3MjpcdFx0aWYgKGNtYV9yZWxlYXNlKGRtYV9jb250aWd1b3VzX2RlZmF1bHRfYXJlYSwgcGFnZSwgY291bnQpKVxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDczLVx0XHRcdHJldHVybjtcbi0tXG5tbS9jbWEuYz05NjU9c3RhdGljIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmZpbmRfY21hX21lbXJhbmdlKHN0cnVjdCBjbWEgKmNtYSxcbi0tXG5tbS9jbWEuYy05OTgtXG5tbS9jbWEuYzo5OTk6c3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG5tbS9jbWEuYy0xMDAwLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXG4tLVxubW0vY21hLmMtMTAwOS1cdGNtYV9zeXNmc19hY2NvdW50X3JlbGVhc2VfcGFnZXMoY21hLCBjb3VudCk7XG5tbS9jbWEuYzoxMDEwOlx0dHJhY2VfY21hX3JlbGVhc2UoY21hLVx1MDAzZW5hbWUsIHBmbiwgcGFnZXMsIGNvdW50KTtcbm1tL2NtYS5jLTEwMTEtfVxuLS1cbm1tL2NtYS5jLTEwMTMtLyoqXG5tbS9jbWEuYzoxMDE0OiAqIGNtYV9yZWxlYXNlKCkgLSByZWxlYXNlIGFsbG9jYXRlZCBwYWdlc1xubW0vY21hLmMtMTAxNS0gKiBAY21hOiAgIENvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbiBmb3Igd2hpY2ggdGhlIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkLlxuLS1cbm1tL2NtYS5jLTEwMjItICovXG5tbS9jbWEuYzoxMDIzOmJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG5tbS9jbWEuYy0xMDI0LVx0XHQgdW5zaWduZWQgbG9uZyBjb3VudClcbi0tXG5tbS9jbWEuYy0xMDM5LVxubW0vY21hLmM6MTA0MDpcdF9fY21hX3JlbGVhc2VfZnJvemVuKGNtYSwgY21yLCBwYWdlcywgY291bnQpO1xubW0vY21hLmMtMTA0MS1cbi0tXG5tbS9jbWEuYy0xMDQzLX1cbm1tL2NtYS5jOjEwNDQ6RVhQT1JUX1NZTUJPTF9HUEwoY21hX3JlbGVhc2UpO1xubW0vY21hLmMtMTA0NS1cbm1tL2NtYS5jOjEwNDY6Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG5tbS9jbWEuYy0xMDQ3LVx0XHR1bnNpZ25lZCBsb25nIGNvdW50KVxuLS1cbm1tL2NtYS5jLTEwNTQtXG5tbS9jbWEuYzoxMDU1Olx0X19jbWFfcmVsZWFzZV9mcm96ZW4oY21hLCBjbXIsIHBhZ2VzLCBjb3VudCk7XG5tbS9jbWEuYy0xMDU2LVxuLS1cbm1tL2NtYV9kZWJ1Zy5jPTg5PXN0YXRpYyBpbnQgY21hX2ZyZWVfbWVtKHN0cnVjdCBjbWEgKmNtYSwgaW50IGNvdW50KVxuLS1cbm1tL2NtYV9kZWJ1Zy5jLTk4LVx0XHRpZiAobWVtLVx1MDAzZW4gXHUwMDNjPSBjb3VudCkge1xubW0vY21hX2RlYnVnLmM6OTk6XHRcdFx0Y21hX3JlbGVhc2UoY21hLCBtZW0tXHUwMDNlcCwgbWVtLVx1MDAzZW4pO1xubW0vY21hX2RlYnVnLmMtMTAwLVx0XHRcdGNvdW50IC09IG1lbS1cdTAwM2VuO1xuLS1cbm1tL2NtYV9kZWJ1Zy5jLTEwMi1cdFx0fSBlbHNlIGlmIChjbWEtXHUwMDNlb3JkZXJfcGVyX2JpdCA9PSAwKSB7XG5tbS9jbWFfZGVidWcuYzoxMDM6XHRcdFx0Y21hX3JlbGVhc2UoY21hLCBtZW0tXHUwMDNlcCwgY291bnQpO1xubW0vY21hX2RlYnVnLmMtMTA0LVx0XHRcdG1lbS1cdTAwM2VwICYjNDM7PSBjb3VudDtcbi0tXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2h1Z2V0bGJfY21hLmMtMjIte1xubW0vaHVnZXRsYl9jbWEuYzoyMzpcdFdBUk5fT05fT05DRSghY21hX3JlbGVhc2VfZnJvemVuKGh1Z2V0bGJfY21hW2ZvbGlvX25pZChmb2xpbyldLFxubW0vaHVnZXRsYl9jbWEuYy0yNC1cdFx0XHRcdFx0IFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UsIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE5OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTcwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhpcyBNZW1vcnkgQ0dyb3VwcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCDigJMgdGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgYGNncm91cDJfcGFyc2VfcGFyYW1gIGFuZCBgYXBwbHlfY2dyb3VwX3Jvb3RfZmxhZ3NgIHRvIGhhbmRsZSBgbWVtb3J5X2NtYV9hY2NvdW50aW5nYC4gQW5kIGl0JiMzOTtzIGFkZGluZyBzb21lIG5ldyBzaG93L3dyaXRlIGZ1bmN0aW9ucyBmb3IgdGhlIGNncm91cGZzOiBgbWVtb3J5X2NtYV9jdXJyZW50X3Nob3dgLCBgbWVtb3J5X2NtYV9tYXhfc2hvd2AsIGFuZCBgbWVtb3J5X2NtYV9tYXhfd3JpdGVgLiBUaGVzZSBhcmUgc3RhdGljIGJ1dCByZWFjaGFibGUgdGhyb3VnaCB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGltcG9ydGFudC4KClRoZSByZWFsIGtleSBoZXJlIGlzIGhvdyBtZW1vcnkgYWNjb3VudGluZyBpcyB0cmlnZ2VyZWQgdmlhIGBjbWFfYWxsb2NgIGFuZCBgY21hX3JlbGVhc2VgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgY2hhcmdlL3VuY2hhcmdlIGNhbGxzIGFyZSBtYWRlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2s6IGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZS4gQW5kIGBtZW1fY2dyb3VwX2NtYV9pbml0YCBpcyBhbiBpbml0Y2FsbCwgc28gdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBmb3Igc2V0dXAuIEkgc2hvdWxkIHByb2JhYmx5IGZ1enogYGNncm91cDJfcGFyc2VfcGFyYW1gIGZvciBtb3VudCBvcHRpb25zIGxhdGVyLgoKTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzLCB0aGVuLCBhcmU6CgoqICAgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAKKiAgIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAKKiAgIGBjbWFfcmVsZWFzZWAKKiAgIGBjbWFfcmVsZWFzZV9mcm96ZW5gCiogICBgY21hX2FsbG9jYAoqICAgYGNtYV9hbGxvY19mcm96ZW5gCiogICBgY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZGAKCldhaXQsIGBjbWFfYWxsb2NgIGFuZCBgY21hX3JlbGVhc2VgIGFyZSBleGlzdGluZyBmdW5jdGlvbnMsIGJ1dCB0aGVpciBiZWhhdmlvciAqaXMqIGNoYW5nZWQgYnkgdGhpcy4gQWN0dWFsbHksIHRoZSBzaWduYXR1cmUgb2YgYGNtYV9yZWxlYXNlYCBhbmQgYGNtYV9yZWxlYXNlX2Zyb3plbmAgaGFzIGNoYW5nZWQuIFRoZSBuZXcgbG9naWMgaXMgaW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy4KCk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byBrbm93IHdoYXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoaXMgdG8gYmUgYWN0aXZlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBtZW50aW9uczogYENPTkZJR19DTUFgLCBgQ09ORklHX01FTUNHYCwgYENPTkZJR19ETUFfQ01BYCwgYENPTkZJR19ETUFCVUZfSEVBUFNgLCBgQ09ORklHX0RNQUJVRl9IRUFQU19DTUFgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgLiBUaGUgc2VsZnRlc3RzIHRyaWdnZXIgQ01BIGFsbG9jYXRpb25zIHdpdGggdGhvc2UsIGVzcGVjaWFsbHkgYENPTkZJR19ETUFfQ01BYCwgYENPTkZJR19ETUFCVUZfSEVBUFNgLCBgQ09ORklHX0RNQUJVRl9IRUFQU19DTUFgLCBhbmQgYENPTkZJR19IVUdFVExCRlNgLiBXaGlsZSBmdXp6aW5nLCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfTUVNQ0dgIGFyZSB0aGUgY29yZSBvbmVzLiBCdXQgdG8gYWN0dWFsbHkgdHJpZ2dlciBDTUEgYWxsb2NhdGlvbnMgZnJvbSB1c2Vyc3BhY2UsIEkmIzM5O2xsIG5lZWQgYENPTkZJR19ETUFCVUZfSEVBUFNfQ01BYCBvciBgQ09ORklHX0hVR0VUTEJGU2AgKHdpdGggdGhlIGBodWdldGxiX2NtYWAgYm9vdCBwYXJhbSkuIFNvLCB0byBiZSBzYWZlLCBJJiMzOTtsbCBpbmNsdWRlIHRoZXNlIGluIG15IG5vdGVzOgoKKiAgIGBDTUFgCiogICBgTUVNQ0dgCiogICBgRE1BX0NNQWAKKiAgIGBETUFCVUZfSEVBUFNgCiogICBgRE1BQlVGX0hFQVBTX0NNQWAKKiAgIGBIVUdFVExCRlNgCgpJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgY29uZmlnIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RE1BQlVGX0hFQVBTX0NNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xMDgxPUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPW1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjEwODI6Q09ORklHX0RNQUJVRl9IRUFQU19DTUE9bVxuYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWctMTA4My1DT05GSUdfVklSVElPX1BDST15XG4tLVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xNDA5PUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MTQxMDpDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT1tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTE0MTEtQ09ORklHX1ZGSU89eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc9ODk2PUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6ODk3OkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctODk4LUNPTkZJR19VSU89bVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9OTI1PUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6OTI2OkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctOTI3LUNPTkZJR19VSU89bVxuLS1cbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnPTg9Y29uZmlnIERNQUJVRl9IRUFQU19TWVNURU1fQ0NfU0hBUkVEXG4tLVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTUtXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZzoxNjpjb25maWcgRE1BQlVGX0hFQVBTX0NNQVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTctXHR0cmlzdGF0ZSBcJiMzNDtETUEtQlVGIENNQSBIZWFwXCYjMzQ7XG4tLVxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQU19TWVNURU0pXHQmIzQzOz0gc3lzdGVtX2hlYXAub1xuZHJpdmVycy9kbWEtYnVmL2hlYXBzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQU19DTUEpXHRcdCYjNDM7PSBjbWFfaGVhcC5vXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZz05PUNPTkZJR19ETUFCVUZfSEVBUFM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZzoxMDpDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnLTExLUNPTkZJR19IVUdFVExCRlM9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2g9MTQ3PWNoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoLTE1MC1cdHZtX3NzaCAtLSBcJiMzNDtbWyAtZSAvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiBdXVwmIzM0OyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaDoxNTE6XHRcdHx8IGRpZSBcJiMzNDtDTUEgaGVhcCBub3QgYXZhaWxhYmxlIChDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT8gY21hPSBjbWRsaW5lPylcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2gtMTUyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI2NgoJCQkJCQkJb3V0cHV0OiAyNDAKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ01BIE1lbW9yeSBBY2NvdW50aW5nIFBhdGNoKioKCk9rYXksIHNvIHRoZSBgRE1BQlVGX0hFQVBTX0NNQWAgY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmU7IHRoYXQgY2hlY2tzIG91dC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfUEFHRV9DT1VOVEVSYCBkb2VzbiYjMzk7dCBwb3NlIGEgcHJvYmxlbS4gU2luY2UgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgYE1FTUNHYCwgd2hpY2ggaXMgYSBwcmVyZXF1aXNpdGUsIHdlJiMzOTtyZSBnb29kIHRvIGdvLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgLiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgY2dyb3VwIHYyIG1vdW50IG9wdGlvbiwgYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBob3cgQ01BIG1lbW9yeSB1c2FnZSBpcyB0cmFja2VkIHdpdGhpbiBhIGNncm91cCYjMzk7cyB0b3RhbCBtZW1vcnkgYWxsb3dhbmNlLiBUaGUgbmV3IGZ1bmN0aW9ucywgYXMgSSBtZW50aW9uZWQsIGFyZSB0aGUga2V5IHRvIHRoaXMgYWNjb3VudGluZywgaGFuZGxpbmcgY2hhcmdlIGFuZCB1bmNoYXJnZSBvcGVyYXRpb25zIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggQ01BIGFsbG9jYXRpb25zLCBzdWNoIGFzIERNQS1CVUYgaGVhcHMgb3IgaHVnZXRsYiwgd2hlbiB0aGUgbW91bnQgb3B0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBhbmQgQ01BIHN1YnN5c3RlbXMsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRob3JvdWdoIGZ1enppbmcsIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBJJiMzOTt2ZSBnb3QgYSBwcmV0dHkgZ29vZCBncmFzcDogYENNQWAsIGBNRU1DR2AsIGBETUFfQ01BYCwgYERNQUJVRl9IRUFQU2AsIGBETUFCVUZfSEVBUFNfQ01BYCwgYW5kIGBIVUdFVExCRlNgLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCBgRE1BQlVGX0hFQVBTX0NNQWAgYW5kIGBNRU1DR2AuCgpJJiMzOTtsbCBxdWlja2x5IHJldmlldyBvdGhlciBmdW5jdGlvbnMuIFdoaWxlIGBjZ3JvdXAyX3BhcnNlX3BhcmFtYCBoYXMgYmVlbiBtb2RpZmllZCwgaXQmIzM5O3MgYSBnZW5lcmljIG1vdW50IG9wdGlvbiBwYXJzaW5nIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgcHJpbWFyeSBmb2N1cy4gU2ltaWxhcmx5LCBgY21hX3JlbGVhc2VgIGFuZCBgY21hX3JlbGVhc2VfZnJvemVuYCBoYXZlIHNpZ25hdHVyZSBjaGFuZ2VzIGJ1dCB0aGUgY29yZSBsb2dpYyBpcyBpbiB0aGUgb3RoZXIgdHdvLgoKU28sIGluIHN1bW1hcnksIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpcyB0aGUgYWRkaXRpb24gb2YgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAuCkkmIzM5O20gcmVhZHkgdG8gc2V0IG15IHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7RE1BX0NNQSYjMzQ7LAogICAgJiMzNDtETUFCVUZfSEVBUFMmIzM0OywKICAgICYjMzQ7RE1BQlVGX0hFQVBTX0NNQSYjMzQ7LAogICAgJiMzNDtIVUdFVExCRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9jbWEmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF91bmNoYXJnZV9jbWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHdoaWNoIGVuYWJsZXMgYWNjb3VudGluZyBvZiBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gSXQgYWRkcyBuZXcgY29yZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgdG8gaGFuZGxlIHRoZSBhY2NvdW50aW5nIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENNQSBhbGxvY2F0aW9ucyAoZS5nLiwgdXNpbmcgRE1BLUJVRiBoZWFwcyBvciBodWdldGxiKSB3aGVuIHRoZSBtb3VudCBvcHRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBDTUEgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtETUFfQ01BJiMzNDssCiAgICAmIzM0O0RNQUJVRl9IRUFQUyYjMzQ7LAogICAgJiMzNDtETUFCVUZfSEVBUFNfQ01BJiMzNDssCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY2hhcmdlX2NtYSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VuY2hhcmdlX2NtYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2Agd2hpY2ggZW5hYmxlcyBhY2NvdW50aW5nIG9mIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJiMzOTtzIG92ZXJhbGwgbWVtb3J5IHVzYWdlLiBJdCBhZGRzIG5ldyBjb3JlIGZ1bmN0aW9ucyBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCB0byBoYW5kbGUgdGhlIGFjY291bnRpbmcgZHVyaW5nIENNQSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQ01BIGFsbG9jYXRpb25zIChlLmcuLCB1c2luZyBETUEtQlVGIGhlYXBzIG9yIGh1Z2V0bGIpIHdoZW4gdGhlIG1vdW50IG9wdGlvbiBpcyBlbmFibGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIENNQSBzdWJzeXN0ZW1zIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTk6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHRvIGFjY291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAmIzM5O3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UuIFRoZSBjaGFuZ2VzIGludm9sdmU6XG4xLiBBZGRpbmcgYGNtYV9jb3VudGVyc2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXG4yLiBBZGRpbmcgYGNtYV9kZmxfZmlsZXNgIGFycmF5IGZvciBjZ3JvdXBmcywgd2hpY2ggaXMgYWxzbyBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cbjMuIEV4cG9zaW5nIENNQSB1c2FnZSBhbmQgbGltaXRzIHZpYSBjZ3JvdXBmcyBmaWxlcyAoYG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5tYXhgKS4gVGhlc2UgZmlsZXMgdXNlIGBzZXFfcHJpbnRmYCBhbmQgYHNlcV9wdXRzX21lbWNnX3R1bmFibGVgIHRvIGZvcm1hdCBpbnRlZ2VyIHZhbHVlcywgbWVhbmluZyBubyByYXcga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXG40LiBNb2RpZnlpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgcGF0aHMgdG8gY2hhcmdlIGFuZCB1bmNoYXJnZSBtZW1vcnkgY2dyb3Vwcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIHBhdGhzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwYXNzZWQgYXJvdW5kLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBjbWFfY291bnRlcnNgLCB1c2UtYWZ0ZXItZnJlZSBvZiBgbWVtY2dgLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTM4ZGU3NDE4MTNlYjQ3NmE5ZDUyMGNmZDA5NmNhMWEwYTE1MTg0MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDE5OjEyOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0CmluZGV4IGFlZDE5NWE3MWNiZjEuLjM5ODcxYTdhMDhhOGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKQEAgLTI0Niw2ICYjNDM7MjQ2LDI2IEBAIGNncm91cCB2MiBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zLgogICAgICAgICAgIHdpbGwgbm90IGJlIHRyYWNrZWQgYnkgdGhlIG1lbW9yeSBjb250cm9sbGVyIChldmVuIGlmIGNncm91cAogICAgICAgICAgIHYyIGlzIHJlbW91bnRlZCBsYXRlciBvbikuCiAKJiM0MzsgIG1lbW9yeV9jbWFfYWNjb3VudGluZwomIzQzOyAgICAgICAgQ291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAmIzM5O3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgZm9yCiYjNDM7ICAgICAgICB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBleHBvc2UgcGVyLUNNQS1hcmVhIHVzYWdlIGNvdW50ZXJzLiBUaGlzCiYjNDM7ICAgICAgICBiZWhhdmlvciBpcyBvcHQtaW4sIHNvIGFzIHRvIG5vdCBjYXVzZSByZWdyZXNzaW9uIG9uIGV4aXN0aW5nIHNldHVwcy4KJiM0MzsKJiM0MzsgICAgICAgIEEgZmV3IGNhdmVhdHMgdG8ga2VlcCBpbiBtaW5kOgomIzQzOwomIzQzOyAgICAgICAgKiBDTUEgYXJlYXMgYXJlIHJlc2VydmVkIGF0IGJvb3QgdGltZSwgbWVtb3J5IGlzIG9ubHkgY2hhcmdlZCB0byBhCiYjNDM7ICAgICAgICAgIGNncm91cCB3aGVuIGEgQ01BIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIG9uIGl0cyBiZWhhbGYuCiYjNDM7ICAgICAgICAqIENNQSBwYWdlcyBhbGxvY2F0ZWQgd2hpbGUgdGhpcyBvcHRpb24gaXMgbm90IGVuYWJsZWQgd2lsbCBub3QgYmUKJiM0MzsgICAgICAgICAgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGV2ZW4gaWYgY2dyb3VwIHYyIGlzIHJlbW91bnRlZAomIzQzOyAgICAgICAgICBsYXRlciBvbiB3aXRoIHRoaXMgb3B0aW9uLiBDaGFyZ2VzIGhhcHBlbiBhdCBhbGxvY2F0aW9uLgomIzQzOyAgICAgICAgKiBDTUEgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgYm90aCB0byB0aGUgY2dyb3VwJiMzOTtzIG1lbW9yeSBjb3VudGVyCiYjNDM7ICAgICAgICAgIChsaW1pdGVkIGJ5IG1lbW9yeS5tYXgpIGFuZCB0aGUgcGVyLWFyZWEgQ01BIGNvdW50ZXIgKGxpbWl0ZWQgYnkKJiM0MzsgICAgICAgICAgbWVtb3J5LmNtYS4mbHQ7YXJlYSZndDsubWF4KS4gSGl0dGluZyBlaXRoZXIgbGltaXQgY2FuIGNhdXNlIGFuIGFsbG9jYXRpb24KJiM0MzsgICAgICAgICAgdG8gZmFpbC4gSWYgQ01BIHVzYWdlIHB1c2hlcyB0aGUgY2dyb3VwIG92ZXIgbWVtb3J5LmhpZ2ggb3IKJiM0MzsgICAgICAgICAgbWVtb3J5Lm1heCwgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG90aGVyCiYjNDM7ICAgICAgICAgIG1lbW9yeSBvbmx5LiBDTUEgbWVtb3J5IGNoYXJnZWQgdG8gdGhlIGNncm91cCBpcyBub3QgcmVjbGFpbWFibGUuCiYjNDM7ICAgICAgICAgIExpbWl0cyBzaG91bGQgYmUgc2l6ZWQgdG8gYWNjb21tb2RhdGUgdGhlIGV4cGVjdGVkIENNQSBwcmVzc3VyZS4KJiM0MzsKICAgcGlkc19sb2NhbGV2ZW50cwogICAgICAgICBUaGUgb3B0aW9uIHJlc3RvcmVzIHYxLWxpa2UgYmVoYXZpb3Igb2YgcGlkcy5ldmVudHM6bWF4LCB0aGF0IGlzIG9ubHkKICAgICAgICAgbG9jYWwgKGluc2lkZSBjZ3JvdXAgcHJvcGVyKSBmb3JrIGZhaWx1cmVzIGFyZSBjb3VudGVkLiBXaXRob3V0IHRoaXMKQEAgLTE5MDgsNiAmIzQzOzE5MjgsMjEgQEAgVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC4KIAlUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgYW5kIHN3YXBwaW5nCiAJaXMgYWxsb3dlZCB1bmxlc3MgbWVtb3J5LnN3YXAubWF4IGlzIHNldCB0byAwLgogCiYjNDM7ICBtZW1vcnkuY21hLiZsdDthcmVhJmd0Oy5jdXJyZW50CiYjNDM7ICAgICAgICBBIHJlYWQtb25seSBzaW5nbGUgdmFsdWUgZmlsZSB3aGljaCBleGlzdHMgb24gbm9uLXJvb3QgY2dyb3Vwcy4gJmx0O2FyZWEmZ3Q7CiYjNDM7ICAgICAgICBpcyB0aGUgQ01BIGFyZWEgbmFtZSAoZS5nLiAmIzM0O3Jlc2VydmVkJiMzNDsgZm9yIHRoZSBkZWZhdWx0IERNQSBDTUEgYXJlYSkuCiYjNDM7CiYjNDM7ICAgICAgICBUaGUgdG90YWwgYW1vdW50IG9mIENNQSBtZW1vcnkgY3VycmVudGx5IGNoYXJnZWQgdG8gdGhlIGNncm91cCBmb3IgdGhlCiYjNDM7ICAgICAgICBnaXZlbiBDTUEgYXJlYS4gT25seSBhY2NvdW50ZWQgd2hlbiBtZW1vcnlfY21hX2FjY291bnRpbmcgaXMgZW5hYmxlZC4KJiM0MzsKJiM0MzsgIG1lbW9yeS5jbWEuJmx0O2FyZWEmZ3Q7Lm1heAomIzQzOyAgICAgICAgQSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLiBUaGUKJiM0MzsgICAgICAgIGRlZmF1bHQgaXMgJiMzNDttYXgmIzM0Oy4KJiM0MzsKJiM0MzsgICAgICAgIENNQSB1c2FnZSBoYXJkIGxpbWl0IGZvciB0aGUgZ2l2ZW4gYXJlYS4gSWYgYSBjZ3JvdXAmIzM5O3MgQ01BIHVzYWdlIGZvcgomIzQzOyAgICAgICAgdGhpcyBhcmVhIGV4Y2VlZHMgdGhpcyBsaW1pdCwgdGhlIGFsbG9jYXRpb24gd2lsbCBmYWlsLiBPbmx5IGVuZm9yY2VkCiYjNDM7ICAgICAgICB3aGVuIG1lbW9yeV9jbWFfYWNjb3VudGluZyBpcyBlbmFibGVkLgomIzQzOwogICBtZW1vcnkucHJlc3N1cmUKIAlBIHJlYWQtb25seSBuZXN0ZWQta2V5ZWQgZmlsZS4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oCmluZGV4IGRlMmNkNjIzOGMyYWUuLjE1ZjNmNzExMGM1YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmgKQEAgLTEyOSw2ICYjNDM7MTI5LDExIEBAIGVudW0gewogCSAqIEVuYWJsZSBsZWdhY3kgbG9jYWwgcGlkcy5ldmVudHMuCiAJICovCiAJQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTID0gKDEgJmx0OyZsdDsgMjApLAomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgY21hIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlci4KJiM0MzsJICovCiYjNDM7CUNHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcgPSAoMSAmbHQ7Jmx0OyAyMSksCiB9OwogCiAvKiBjZnR5cGUtJmd0O2ZsYWdzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtYS5oIGIvaW5jbHVkZS9saW51eC9jbWEuaAppbmRleCA4NTU1ZDM4YTk3YjFhLi4xNmUyMTM2NDIxYjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY21hLmgKQEAgLTQ5LDEyICYjNDM7NDksMTIgQEAgZXh0ZXJuIGludCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSwKIAkJCQkJc3RydWN0IGNtYSAqKnJlc19jbWEpOwogZXh0ZXJuIHN0cnVjdCBwYWdlICpjbWFfYWxsb2Moc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBpbnQgYWxpZ24sCiAJCQkgICAgICBib29sIG5vX3dhcm4pOwotZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpOwomIzQzO2V4dGVybiBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIAogc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW4oc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIGNvdW50LAogCQl1bnNpZ25lZCBpbnQgYWxpZ24sIGJvb2wgbm9fd2Fybik7CiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGludCBvcmRlcik7Ci1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKJiM0Mztib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywKIAkJdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKIGV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA4MTcwYmI4MDY2YTIyLi44MDFmYmRlOTQxMzdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMzIwLDYgJiM0MzszMjAsMTAgQEAgc3RydWN0IG1lbV9jZ3JvdXAgewogCXNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrOwogI2VuZGlmIC8qIENPTkZJR19NRU1DR19WMSAqLwogCiYjNDM7I2lmZGVmIENPTkZJR19DTUEKJiM0MzsJc3RydWN0IHBhZ2VfY291bnRlciAqY21hX2NvdW50ZXJzOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQ01BICovCiYjNDM7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107CiB9OwogCkBAIC02NjIsNiAmIzQzOzY2NiwxMSBAQCBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApOwogaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCwKIAkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTsKIAomIzQzO2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsCiYjNDM7CQkJICBzdHJ1Y3QgY21hICpjbWEpOwomIzQzO3ZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsCiYjNDM7CQkJICAgICBzdHJ1Y3QgY21hICpjbWEpOwomIzQzOwogdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyk7CiAKIC8qKgpAQCAtMTE2MCw2ICYjNDM7MTE2OSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkJCXN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQkJCQkgICB1bnNpZ25lZCBsb25nIGNvdW50LCBzdHJ1Y3QgY21hICpjbWEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC9jZ3JvdXAuYwppbmRleCBiNWI0NjFkNDQxOGIxLi4xMjE4NGY4NWFkMTAwIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmMKQEAgLTE5ODUsNiAmIzQzOzE5ODUsNyBAQCBlbnVtIGNncm91cDJfcGFyYW0gewogCU9wdF9tZW1vcnlfcmVjdXJzaXZlcHJvdCwKIAlPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZywKIAlPcHRfcGlkc19sb2NhbGV2ZW50cywKJiM0MzsJT3B0X21lbW9yeV9jbWFfYWNjb3VudGluZywKIAlucl9fY2dyb3VwMl9wYXJhbXMKIH07CiAKQEAgLTE5OTUsNiAmIzQzOzE5OTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGNncm91cDJfZnNfcGFyYW1ldGVyc1tdID0gewogCWZzcGFyYW1fZmxhZygmIzM0O21lbW9yeV9yZWN1cnNpdmVwcm90JiMzNDssCU9wdF9tZW1vcnlfcmVjdXJzaXZlcHJvdCksCiAJZnNwYXJhbV9mbGFnKCYjMzQ7bWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyYjMzQ7LCBPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyksCiAJZnNwYXJhbV9mbGFnKCYjMzQ7cGlkc19sb2NhbGV2ZW50cyYjMzQ7LAlPcHRfcGlkc19sb2NhbGV2ZW50cyksCiYjNDM7CWZzcGFyYW1fZmxhZygmIzM0O21lbW9yeV9jbWFfYWNjb3VudGluZyYjMzQ7LAlPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nKSwKIAl7fQogfTsKIApAQCAtMjAyNyw2ICYjNDM7MjAyOSw5IEBAIHN0YXRpYyBpbnQgY2dyb3VwMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtCiAJY2FzZSBPcHRfcGlkc19sb2NhbGV2ZW50czoKIAkJY3R4LSZndDtmbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7CiAJCXJldHVybiAwOwomIzQzOwljYXNlIE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmc6CiYjNDM7CQljdHgtJmd0O2ZsYWdzIHw9IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkc7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDY4LDYgJiM0MzsyMDczLDExIEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Nncm91cF9yb290X2ZsYWdzKHVuc2lnbmVkIGludCByb290X2ZsYWdzKQogCQkJY2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7CiAJCWVsc2UKIAkJCWNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDs9IH5DR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7CiYjNDM7CiYjNDM7CQlpZiAocm9vdF9mbGFncyAmYW1wOyBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HKQomIzQzOwkJCWNncnBfZGZsX3Jvb3QuZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORzsKJiM0MzsJCWVsc2UKJiM0MzsJCQljZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7PSB+Q0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORzsKIAl9CiB9CiAKQEAgLTIwODUsNiAmIzQzOzIwOTUsOCBAQCBzdGF0aWMgaW50IGNncm91cF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBrZXJuZnNfcm9vdCAqa2Zfcm9vdAogCQlzZXFfcHV0cyhzZXEsICYjMzQ7LG1lbW9yeV9odWdldGxiX2FjY291bnRpbmcmIzM0Oyk7CiAJaWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDsgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKQogCQlzZXFfcHV0cyhzZXEsICYjMzQ7LHBpZHNfbG9jYWxldmVudHMmIzM0Oyk7CiYjNDM7CWlmIChjZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpCiYjNDM7CQlzZXFfcHV0cyhzZXEsICYjMzQ7LG1lbW9yeV9jbWFfYWNjb3VudGluZyYjMzQ7KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUyMCw3ICYjNDM7NzUzMiw4IEBAIHN0YXRpYyBzc2l6ZV90IGZlYXR1cmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSYjMzQ7bWVtb3J5X2xvY2FsZXZlbnRzXG4mIzM0OwogCQkJJiMzNDttZW1vcnlfcmVjdXJzaXZlcHJvdFxuJiMzNDsKIAkJCSYjMzQ7bWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZ1xuJiMzNDsKLQkJCSYjMzQ7cGlkc19sb2NhbGV2ZW50c1xuJiMzNDspOwomIzQzOwkJCSYjMzQ7cGlkc19sb2NhbGV2ZW50c1xuJiMzNDsKJiM0MzsJCQkmIzM0O21lbW9yeV9jbWFfYWNjb3VudGluZ1xuJiMzNDspOwogfQogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjZ3JvdXBfZmVhdHVyZXNfYXR0ciA9IF9fQVRUUl9STyhmZWF0dXJlcyk7CiAKZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmMKaW5kZXggYTEzY2U0OTk5YjM5Zi4uMDNlYjNhY2JkM2M3NSAxMDA2NDQKLS0tIGEvbW0vY21hLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vY21hLmMKQEAgLTI1LDcgJiM0MzsyNSw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nX2Nob2ljZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sb2cyLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaGlnaG1lbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva21lbWxlYWsuaCZndDsKQEAgLTkwNSw2ICYjNDM7OTA0LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19jbWFfYWxsb2NfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwKIAkJY21hX2RlYnVnX3Nob3dfYXJlYXMoY21hKTsKIAl9CiAKJiM0MzsJaWYgKHBhZ2UgJmFtcDsmYW1wOyBtZW1fY2dyb3VwX2NoYXJnZV9jbWEocGFnZSwgY291bnQsIGNtYSkpIHsKJiM0MzsJCWZyZWVfY29udGlnX2Zyb3plbl9yYW5nZShwYWdlX3RvX3BmbihwYWdlKSwgY291bnQpOwomIzQzOwkJY21hX2NsZWFyX2JpdG1hcChjbWEsICZhbXA7Y21hLSZndDtyYW5nZXNbcl0sIHBhZ2VfdG9fcGZuKHBhZ2UpLCBjb3VudCk7CiYjNDM7CQlwYWdlID0gTlVMTDsKJiM0MzsJfQomIzQzOwogCXByX2RlYnVnKCYjMzQ7JXMoKTogcmV0dXJuZWQgJXBcbiYjMzQ7LCBfX2Z1bmNfXywgcGFnZSk7CiAJdHJhY2VfY21hX2FsbG9jX2ZpbmlzaChuYW1lLCBwYWdlID8gcGFnZV90b19wZm4ocGFnZSkgOiAwLAogCQkJICAgICAgIHBhZ2UsIGNvdW50LCBhbGlnbiwgcmV0KTsKQEAgLTk5MiwxMiAmIzQzOzk5NywxMyBAQCBzdGF0aWMgc3RydWN0IGNtYV9tZW1yYW5nZSAqZmluZF9jbWFfbWVtcmFuZ2Uoc3RydWN0IGNtYSAqY21hLAogfQogCiBzdGF0aWMgdm9pZCBfX2NtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtciwKLQkJY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KQomIzQzOwkJc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZXMpOwogCiAJcHJfZGVidWcoJiMzNDslcyhwYWdlICVwLCBjb3VudCAlbHUpXG4mIzM0OywgX19mdW5jX18sICh2b2lkICopcGFnZXMsIGNvdW50KTsKIAomIzQzOwltZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShwYWdlcywgY291bnQsIGNtYSk7CiAJZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBmbiwgY291bnQpOwogCWNtYV9jbGVhcl9iaXRtYXAoY21hLCBjbXIsIHBmbiwgY291bnQpOwogCWNtYV9zeXNmc19hY2NvdW50X3JlbGVhc2VfcGFnZXMoY21hLCBjb3VudCk7CkBAIC0xMDE0LDcgJiM0MzsxMDIwLDcgQEAgc3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsCiAgKiBJdCByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzIGFyZWEgYW5kCiAgKiB0cnVlIG90aGVyd2lzZS4KICAqLwotYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKJiM0Mztib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLAogCQkgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7CkBAIC0xMDM3LDcgJiM0MzsxMDQzLDcgQEAgYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNtYV9yZWxlYXNlKTsKIAotYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsCiYjNDM7Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsCiAJCXVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yOwpkaWZmIC0tZ2l0IGEvbW0vY21hLmggYi9tbS9jbWEuaAppbmRleCBjNzAxODBjMzY1NTljLi41MmI3ZDRiZTUxNzA3IDEwMDY0NAotLS0gYS9tbS9jbWEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWEuaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva29iamVjdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKIAogc3RydWN0IGNtYV9rb2JqZWN0IHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwpAQCAtODAsNiAmIzQzOzgxLDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbWFfYml0bWFwX21heG5vKHN0cnVjdCBjbWEgKmNtYSwKIAlyZXR1cm4gY21yLSZndDtjb3VudCAmZ3Q7Jmd0OyBjbWEtJmd0O29yZGVyX3Blcl9iaXQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBjbWFfYXJlYV9pbmRleChjb25zdCBzdHJ1Y3QgY21hICpjbWEpCiYjNDM7ewomIzQzOwlyZXR1cm4gY21hIC0gY21hX2FyZWFzOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfQ01BX1NZU0ZTCiB2b2lkIGNtYV9zeXNmc19hY2NvdW50X3N1Y2Nlc3NfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfZmFpbF9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvbW0vY21hX2RlYnVnLmMgYi9tbS9jbWFfZGVidWcuYwppbmRleCA1MjNiYTRhMGY5Zjc2Li43MGJmYzZmYmVlY2EzIDEwMDY0NAotLS0gYS9tbS9jbWFfZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWFfZGVidWcuYwpAQCAtNyw3ICYjNDM7Nyw2IEBACiAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9jbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpkaWZmIC0tZ2l0IGEvbW0vY21hX3N5c2ZzLmMgYi9tbS9jbWFfc3lzZnMuYwppbmRleCBkNWJmNzkyYzYyNDVhLi5lNGVlMzViYzY4MmJhIDEwMDY0NAotLS0gYS9tbS9jbWFfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9jbWFfc3lzZnMuYwpAQCAtNSw3ICYjNDM7NSw2IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWluY2hhbiBLaW0gJmx0O21pbmNoYW5Aa2VybmVsLm9yZyZndDsKICAqLwogCi0jaW5jbHVkZSAmbHQ7bGludXgvY21hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggNmRjNDg4OGE5MGYzZi4uZjI4ZDYxMGE1OWNlNyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjgsNiAmIzQzOzY4LDcgQEAKICNpbmNsdWRlICZsdDtuZXQvaXAuaCZndDsKICNpbmNsdWRlICYjMzQ7c2xhYi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bWVtY29udHJvbC12MS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NtYS5oJiMzNDsKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKIApAQCAtNDA2Miw2ICYjNDM7NDA2Myw5IEBAIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlpbnQgbm9kZTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7CWtmcmVlKG1lbWNnLSZndDtjbWFfY291bnRlcnMpOwomIzQzOyNlbmRpZgogCWZvcl9lYWNoX25vZGUobm9kZSkgewogCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy0mZ3Q7bm9kZWluZm9bbm9kZV07CiAJCWlmICghcG4pCkBAIC00MTQ0LDYgJiM0Mzs0MTQ4LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCWZvciAoaSA9IDA7IGkgJmx0OyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkmIzQzOyYjNDM7KQogCQltZW1jZy0mZ3Q7Y2d3Yl9mcm5baV0uZG9uZSA9CiAJCQlfX1dCX0NPTVBMRVRJT05fSU5JVCgmYW1wO21lbWNnX2Nnd2JfZnJuX3dhaXRxKTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzOwlpZiAoY21hX2FyZWFfY291bnQpIHsKJiM0MzsJCW1lbWNnLSZndDtjbWFfY291bnRlcnMgPSBrY2FsbG9jKGNtYV9hcmVhX2NvdW50LAomIzQzOwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlX2NvdW50ZXIpLAomIzQzOwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIW1lbWNnLSZndDtjbWFfY291bnRlcnMpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiAjZW5kaWYKIAlscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpOwogCXJldHVybiBtZW1jZzsKQEAgLTQxNTksNiAmIzQzOzQxNzIsNyBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcykKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NzcyhwYXJlbnRfY3NzKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpvbGRfbWVtY2c7CiAJYm9vbCBtZW1jZ19vbl9kZmwgPSBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpOwomIzQzOwl1bnNpZ25lZCBpbnQgX19tYXliZV91bnVzZWQgaTsKIAogCW9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTsKIAltZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTsKQEAgLTQxNzEsNiAmIzQzOzQxODUsMTIgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAjaWZkZWYgQ09ORklHX1pTV0FQCiAJbWVtY2ctJmd0O3pzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJV1JJVEVfT05DRShtZW1jZy0mZ3Q7enN3YXBfd3JpdGViYWNrLCB0cnVlKTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY21hX2FyZWFfY291bnQ7ICYjNDM7JiM0MztpKQomIzQzOwkJcGFnZV9jb3VudGVyX2luaXQoJmFtcDttZW1jZy0mZ3Q7Y21hX2NvdW50ZXJzW2ldLAomIzQzOwkJCQkgIHBhcmVudCA/ICZhbXA7cGFyZW50LSZndDtjbWFfY291bnRlcnNbaV0gOiBOVUxMLAomIzQzOwkJCQkgIGZhbHNlKTsKICNlbmRpZgogCXBhZ2VfY291bnRlcl9zZXRfaGlnaCgmYW1wO21lbWNnLSZndDtzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTsKIAlpZiAocGFyZW50KSB7CkBAIC01MjEzLDYgJiM0Mzs1MjMzLDEwMiBAQCBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNQQomIzQzO3N0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2NtYSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNncnBfZGZsX3Jvb3QuZmxhZ3MgJmFtcDsgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORzsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkgIHN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsICpmYWlsOwomIzQzOwlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CWludCByYyA9IDA7CiYjNDM7CiYjNDM7CWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2NtYSgpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KCk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCiYjNDM7CQlnb3RvIGNncm91cF9wdXQ7CiYjNDM7CiYjNDM7CXJjID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgR0ZQX0tFUk5FTCwgY291bnQpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlnb3RvIGNncm91cF9wdXQ7CiYjNDM7CiYjNDM7CWNvdW50ZXIgPSAmYW1wO21lbWNnLSZndDtjbWFfY291bnRlcnNbY21hX2FyZWFfaW5kZXgoY21hKV07CiYjNDM7CWlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoY291bnRlciwgY291bnQsICZhbXA7ZmFpbCkpIHsKJiM0MzsJCXJlZmlsbF9zdG9jayhtZW1jZywgY291bnQpOwomIzQzOwkJcmMgPSAtRU5PTUVNOwomIzQzOwkJZ290byBjZ3JvdXBfcHV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZyk7CiYjNDM7CWlmIChmb2xpb190ZXN0X2xhcmdlKHBhZ2VfZm9saW8ocGFnZSkpKSB7CiYjNDM7CQljb21taXRfY2hhcmdlKHBhZ2VfZm9saW8ocGFnZSksIG9iamNnKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW9ial9jZ3JvdXBfZ2V0X21hbnkob2JqY2csIGNvdW50IC0gMSk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlICYjNDM7IGkpLCBvYmpjZyk7CiYjNDM7CX0KJiM0MzsKJiM0MztjZ3JvdXBfcHV0OgomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCwKJiM0MzsJCQkgICAgIHN0cnVjdCBjbWEgKmNtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7CiYjNDM7CXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZzsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdldCB0aGUgb2JqY2cgZnJvbSB0aGUgZmlyc3QgcGFnZS4KJiM0MzsJICogcGFnZV9vYmpjZygpIGV4cGVjdHMgTUVNQ0dfREFUQV9LTUVNLCBidXQgZm9yIENNQSB3ZSB1c2VkCiYjNDM7CSAqIGNvbW1pdF9jaGFyZ2UoKSB3aGljaCBzZXRzIGZvbGlvLSZndDttZW1jZ19kYXRhID0gb2JqY2cKJiM0MzsJICogd2l0aG91dCBmbGFncywgc28gd2UgY2Fubm90IHVzZSBpdC4KJiM0MzsJICovCiYjNDM7CW9iamNnID0gZm9saW9fb2JqY2cocGFnZV9mb2xpbyhwYWdlKSk7CiYjNDM7CWlmICghb2JqY2cpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKJiM0MzsKJiM0MzsJY291bnRlciA9ICZhbXA7bWVtY2ctJmd0O2NtYV9jb3VudGVyc1tjbWFfYXJlYV9pbmRleChjbWEpXTsKJiM0MzsJcGFnZV9jb3VudGVyX3VuY2hhcmdlKGNvdW50ZXIsIGNvdW50KTsKJiM0MzsKJiM0MzsJbWVtY2dfdW5jaGFyZ2UobWVtY2csIGNvdW50KTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKJiM0MzsJaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7CiYjNDM7CQlmb2xpby0mZ3Q7bWVtY2dfZGF0YSA9IDA7CiYjNDM7CQlvYmpfY2dyb3VwX3B1dChvYmpjZyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQkJZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UgJiM0MzsgaSk7CiYjNDM7CQkJZm9saW8tJmd0O21lbWNnX2RhdGEgPSAwOwomIzQzOwkJCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0NNQSAqLwomIzQzOwogc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7CiAJc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnOwogCXVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5OwpAQCAtNjA2NiwzICYjNDM7NjE4Miw5MiBAQCB2b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAkJSyhhdG9taWNfbG9uZ19yZWFkKCZhbXA7bWVtY2ctJmd0O21lbW9yeS5jaGlsZHJlbl9taW5fdXNhZ2UpKSwKIAkJSyhhdG9taWNfbG9uZ19yZWFkKCZhbXA7bWVtY2ctJmd0O21lbW9yeS5jaGlsZHJlbl9sb3dfdXNhZ2UpKSk7CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19DTUEKJiM0MztzdGF0aWMgaW50IG1lbW9yeV9jbWFfY3VycmVudF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7CiYjNDM7CWludCBpZHggPSBzZXFfY2Z0KG0pLSZndDtwcml2YXRlOwomIzQzOwl1bnNpZ25lZCBsb25nIGN1ciA9IHBhZ2VfY291bnRlcl9yZWFkKCZhbXA7bWVtY2ctJmd0O2NtYV9jb3VudGVyc1tpZHhdKTsKJiM0MzsKJiM0MzsJc2VxX3ByaW50ZihtLCAmIzM0OyVsdVxuJiMzNDssIGN1ciAqIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG1lbW9yeV9jbWFfbWF4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTsKJiM0MzsJaW50IGlkeCA9IHNlcV9jZnQobSktJmd0O3ByaXZhdGU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4ID0gUkVBRF9PTkNFKG1lbWNnLSZndDtjbWFfY291bnRlcnNbaWR4XS5tYXgpOwomIzQzOwomIzQzOwlyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLCBtYXgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBtZW1vcnlfY21hX21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZiwKJiM0MzsJCQkJICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpOwomIzQzOwlpbnQgaWR4ID0gb2ZfY2Z0KG9mKS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXg7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJYnVmID0gc3Ryc3RyaXAoYnVmKTsKJiM0MzsJcmMgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCAmIzM0O21heCYjMzQ7LCAmYW1wO21heCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJeGNoZygmYW1wO21lbWNnLSZndDtjbWFfY291bnRlcnNbaWR4XS5tYXgsIG1heCk7CiYjNDM7CiYjNDM7CXJldHVybiBuYnl0ZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNtYV9kZmxfdG1wbFtdID0gewomIzQzOwl7CiYjNDM7CQkubmFtZSA9ICYjMzQ7Y3VycmVudCYjMzQ7LAomIzQzOwkJLnNlcV9zaG93ID0gbWVtb3J5X2NtYV9jdXJyZW50X3Nob3csCiYjNDM7CQkuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5uYW1lID0gJiMzNDttYXgmIzM0OywKJiM0MzsJCS5zZXFfc2hvdyA9IG1lbW9yeV9jbWFfbWF4X3Nob3csCiYjNDM7CQkud3JpdGUgPSBtZW1vcnlfY21hX21heF93cml0ZSwKJiM0MzsJCS5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCwKJiM0MzsJfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MzsjZGVmaW5lIENNQV9ERkxfVE1QTF9TSVpFCShBUlJBWV9TSVpFKGNtYV9kZmxfdG1wbCkgLSAxKQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlICpjbWFfZGZsX2ZpbGVzOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfY21hX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjZnR5cGUgKmNmdDsKJiM0MzsJdW5zaWduZWQgaW50IGksIGo7CiYjNDM7CWludCBjb3VudDsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhY21hX2FyZWFfY291bnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY291bnQgPSBjbWFfYXJlYV9jb3VudCAqIENNQV9ERkxfVE1QTF9TSVpFOwomIzQzOwljbWFfZGZsX2ZpbGVzID0ga2NhbGxvYyhjb3VudCAmIzQzOyAxLCBzaXplb2YoKmNtYV9kZmxfdG1wbCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWNtYV9kZmxfZmlsZXMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNtYV9hcmVhX2NvdW50OyAmIzQzOyYjNDM7aSkKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBDTUFfREZMX1RNUExfU0laRTsgJiM0MzsmIzQzO2opIHsKJiM0MzsJCQljZnQgPSAmYW1wO2NtYV9kZmxfZmlsZXNbaSAqIENNQV9ERkxfVE1QTF9TSVpFICYjNDM7IGpdOwomIzQzOwkJCSpjZnQgPSBjbWFfZGZsX3RtcGxbal07CiYjNDM7CQkJc25wcmludGYoY2Z0LSZndDtuYW1lLCBNQVhfQ0ZUWVBFX05BTUUsICYjMzQ7Y21hLiVzLiVzJiMzNDssCiYjNDM7CQkJCSBjbWFfZ2V0X25hbWUoJmFtcDtjbWFfYXJlYXNbaV0pLAomIzQzOwkJCQkgY21hX2RmbF90bXBsW2pdLm5hbWUpOwomIzQzOwkJCWNmdC0mZ3Q7cHJpdmF0ZSA9IGk7IC8qIGNtYSBhcmVhIGluZGV4IGZvciBjb3VudGVycyBpbiBjYWxsYmFja3MuICovCiYjNDM7CQkJbG9ja2RlcF9yZWdpc3Rlcl9rZXkoJmFtcDtjZnQtJmd0O2xvY2tkZXBfa2V5KTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJV0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKCZhbXA7bWVtb3J5X2NncnBfc3Vic3lzLCBjbWFfZGZsX2ZpbGVzKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9jbWFfaW5pdCk7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19DTUEgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUKaW5kZXggOTUyZTQ0NDhiZjA3MC4uYjlhNDI5OGQ0OTQ0NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUKQEAgLTEsNSAmIzQzOzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiB0ZXN0X2NvcmUKJiM0Mzt0ZXN0X2NtYV9tZW1jZwogdGVzdF9jcHUKIHRlc3RfY3B1c2V0CiB0ZXN0X2ZyZWV6ZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZQppbmRleCBlMDE1ODRjMjE4OWFjLi42MDFkOTMwMTYwYTQyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlCkBAIC04LDYgJiM0Mzs4LDcgQEAgVEVTVF9QUk9HUyAgICAgOj0gdGVzdF9zdHJlc3Muc2ggdGVzdF9jcHVzZXRfcHJzLnNoIHRlc3RfY3B1c2V0X3YxX2hwLnNoCiBURVNUX0dFTl9GSUxFUyA6PSB3YWl0X2lub3RpZnkKICMgS2VlcCB0aGUgbGlzdHMgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkCiBURVNUX0dFTl9QUk9HUyAgPSB0ZXN0X2NvcmUKJiM0MztURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9jbWFfbWVtY2cKIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X2NwdQogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHRlc3RfY3B1c2V0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF9mcmVlemVyCkBAIC0yNCw2ICYjNDM7MjUsNyBAQCBpbmNsdWRlIC4uL2xpYi5tawogaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rCiAKICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pCiYjNDM7JChPVVRQVVQpL3Rlc3RfY21hX21lbWNnOiAkKExJQkNHUk9VUF9PKQogJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKQogJChPVVRQVVQpL3Rlc3RfY3B1c2V0OiAkKExJQkNHUk9VUF9PKQogJChPVVRQVVQpL3Rlc3RfZnJlZXplcjogJChMSUJDR1JPVVBfTykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnCmluZGV4IDM5Zjk3OTY5MGRkM2IuLjFjOTAzNDAxNzY4MmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZwpAQCAtNCwzICYjNDM7NCw4IEBAIENPTkZJR19DR1JPVVBfRlJFRVpFUj15CiBDT05GSUdfQ0dST1VQX1NDSEVEPXkKIENPTkZJR19NRU1DRz15CiBDT05GSUdfUEFHRV9DT1VOVEVSPXkKJiM0MztDT05GSUdfQ01BPXkKJiM0MztDT05GSUdfRE1BX0NNQT15CiYjNDM7Q09ORklHX0RNQUJVRl9IRUFQUz15CiYjNDM7Q09ORklHX0RNQUJVRl9IRUFQU19DTUE9eQomIzQzO0NPTkZJR19IVUdFVExCRlM9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45YmQ0MWQ5YTYxNzdkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsNDAyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtaGVhcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvaW9jdGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2Nncm91cF91dGlsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQ01BX0hFQVBfREVGQVVMVF9QQVRICSYjMzQ7L2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb24mIzM0OwomIzQzOyNkZWZpbmUgQ01BX1JFU0VSVkVEX0NVUlJFTlQJJiMzNDttZW1vcnkuY21hLnJlc2VydmVkLmN1cnJlbnQmIzM0OwomIzQzOyNkZWZpbmUgQ01BX1JFU0VSVkVEX01BWAkmIzM0O21lbW9yeS5jbWEucmVzZXJ2ZWQubWF4JiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEhVR0VUTEJfQ01BX0NVUlJFTlQJJiMzNDttZW1vcnkuY21hLmh1Z2V0bGIwLmN1cnJlbnQmIzM0OwomIzQzOyNkZWZpbmUgSFVHRVRMQl9DTUFfTUFYCSYjMzQ7bWVtb3J5LmNtYS5odWdldGxiMC5tYXgmIzM0OwomIzQzOyNkZWZpbmUgSFVHRVBBR0VTX0RJUgkJJiMzNDsvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXMmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgY21hX2hlYXBfYWxsb2MoaW50IGhlYXBfZmQsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9oZWFwX2FsbG9jYXRpb25fZGF0YSBkYXRhID0gewomIzQzOwkJLmxlbiA9IHNpemUsCiYjNDM7CQkuZmRfZmxhZ3MgPSBPX1JEV1IgfCBPX0NMT0VYRUMsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChpb2N0bChoZWFwX2ZkLCBETUFfSEVBUF9JT0NUTF9BTExPQywgJmFtcDtkYXRhKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXJldHVybiBkYXRhLmZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfY21hX2NoYXJnZShjb25zdCBjaGFyICpyb290KQomIzQzO3sKJiM0MzsJaW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7CiYjNDM7CWludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwOwomIzQzOwlzaXplX3Qgc2l6ZSA9IDRVTCAmbHQ7Jmx0OyAyMDsKJiM0MzsJbG9uZyBiZWZvcmUsIGFmdGVyOwomIzQzOwljaGFyICpjZzsKJiM0MzsKJiM0MzsJY2cgPSBjZ19uYW1lKHJvb3QsICYjMzQ7bWVtY2dfY21hX2NoYXJnZSYjMzQ7KTsKJiM0MzsJaWYgKCFjZykKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2NyZWF0ZShjZykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaW5fY2cgPSAxOwomIzQzOwomIzQzOwloZWFwX2ZkID0gb3BlbihDTUFfSEVBUF9ERUZBVUxUX1BBVEgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKJiM0MzsJaWYgKGhlYXBfZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwliZWZvcmUgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTsKJiM0MzsKJiM0MzsJYnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7CiYjNDM7CWlmIChidWZfZmQgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBhbGxvY2F0ZSBpbiBDTUEgaGVhcCAoJW0pXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTsKJiM0MzsKJiM0MzsJaWYgKGFmdGVyIC0gYmVmb3JlICZsdDsgKGxvbmcpc2l6ZSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coCiYjNDM7CQkJJiMzNDtpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIGNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcbiYjMzQ7LAomIzQzOwkJCWJlZm9yZSwgYWZ0ZXIpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNsb3NlKGJ1Zl9mZCk7CiYjNDM7CWJ1Zl9mZCA9IC0xOwomIzQzOwomIzQzOwlhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpOwomIzQzOwlpZiAoIXZhbHVlc19jbG9zZShiZWZvcmUsIGFmdGVyLCAzKSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coCiYjNDM7CQkJJiMzNDtpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIHVuY2hhcmdlOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxuJiMzNDssCiYjNDM7CQkJYmVmb3JlLCBhZnRlcik7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmMgPSBLU0ZUX1BBU1M7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGJ1Zl9mZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoYnVmX2ZkKTsKJiM0MzsJaWYgKGhlYXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGhlYXBfZmQpOwomIzQzOwomIzQzOwlpZiAoaW5fY2cpCiYjNDM7CQljZ19lbnRlcl9jdXJyZW50KHJvb3QpOwomIzQzOwljZ19kZXN0cm95KGNnKTsKJiM0MzsJZnJlZShjZyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZXN0X2NtYV9saW1pdChjb25zdCBjaGFyICpyb290KQomIzQzO3sKJiM0MzsJaW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7CiYjNDM7CWludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwOwomIzQzOwlzaXplX3Qgc2l6ZSA9IDRVTCAmbHQ7Jmx0OyAyMDsKJiM0MzsJY2hhciAqY2c7CiYjNDM7CiYjNDM7CWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX2NtYV9saW1pdCYjMzQ7KTsKJiM0MzsJaWYgKCFjZykKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2NyZWF0ZShjZykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaW5fY2cgPSAxOwomIzQzOwomIzQzOwlpZiAoY2dfd3JpdGUoY2csIENNQV9SRVNFUlZFRF9NQVgsICYjMzQ7Mk0mIzM0OykpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IHNldCBDTUEgbGltaXQgKCVtKVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhlYXBfZmQgPSBvcGVuKENNQV9IRUFQX0RFRkFVTFRfUEFUSCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOwomIzQzOwlpZiAoaGVhcF9mZCAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Zl9mZCA9IGNtYV9oZWFwX2FsbG9jKGhlYXBfZmQsIHNpemUpOwomIzQzOwlpZiAoYnVmX2ZkICZndDs9IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Q01BIGxpbWl0IG5vdCBlbmZvcmNlZC5cbiYjMzQ7KTsKJiM0MzsJCWNsb3NlKGJ1Zl9mZCk7CiYjNDM7CX0gZWxzZQomIzQzOwkJcmMgPSBLU0ZUX1BBU1M7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGhlYXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGhlYXBfZmQpOwomIzQzOwomIzQzOwlpZiAoaW5fY2cpCiYjNDM7CQljZ19lbnRlcl9jdXJyZW50KHJvb3QpOwomIzQzOwljZ19kZXN0cm95KGNnKTsKJiM0MzsJZnJlZShjZyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2Iodm9pZCkKJiM0Mzt7CiYjNDM7CURJUiAqZGlyOwomIzQzOwlzdHJ1Y3QgZGlyZW50ICplbnRyeTsKJiM0MzsJbG9uZyBtYXhfc2l6ZSA9IDA7CiYjNDM7CiYjNDM7CWRpciA9IG9wZW5kaXIoSFVHRVBBR0VTX0RJUik7CiYjNDM7CWlmICghZGlyKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwl3aGlsZSAoKGVudHJ5ID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CiYjNDM7CQlsb25nIHNpemU7CiYjNDM7CiYjNDM7CQlpZiAoc3NjYW5mKGVudHJ5LSZndDtkX25hbWUsICYjMzQ7aHVnZXBhZ2VzLSVsZGtCJiMzNDssICZhbXA7c2l6ZSkgPT0gMSkgewomIzQzOwkJCWlmIChzaXplICZndDsgbWF4X3NpemUpCiYjNDM7CQkJCW1heF9zaXplID0gc2l6ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwljbG9zZWRpcihkaXIpOwomIzQzOwomIzQzOwlyZXR1cm4gbWF4X3NpemUgJmd0OyAwID8gbWF4X3NpemUgOiAtMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGxvbmcgcmVhZF9zeXNmc19sb25nKGNvbnN0IGNoYXIgKnBhdGgpCiYjNDM7ewomIzQzOwlGSUxFICpmOwomIzQzOwlsb25nIHZhbCA9IC0xOwomIzQzOwomIzQzOwlmID0gZm9wZW4ocGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChmc2NhbmYoZiwgJiMzNDslbGQmIzM0OywgJmFtcDt2YWwpICE9IDEpCiYjNDM7CQl2YWwgPSAtMTsKJiM0MzsJZmNsb3NlKGYpOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdyaXRlX3N5c2ZzX2xvbmcoY29uc3QgY2hhciAqcGF0aCwgbG9uZyB2YWwpCiYjNDM7ewomIzQzOwlGSUxFICpmOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihwYXRoLCAmIzM0O3cmIzM0Oyk7CiYjNDM7CWlmICghZikKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmMgPSBmcHJpbnRmKGYsICYjMzQ7JWxkJiMzNDssIHZhbCk7CiYjNDM7CWZjbG9zZShmKTsKJiM0MzsJcmV0dXJuIHJjICZsdDsgMCA/IC0xIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZShjb25zdCBjaGFyICpyb290KQomIzQzO3sKJiM0MzsJaW50IHJjID0gS1NGVF9TS0lQLCBpbl9jZyA9IDA7CiYjNDM7CWxvbmcgaHBhZ2Vfc2l6ZV9rYiwgaHBhZ2Vfc2l6ZV9ieXRlczsKJiM0MzsJbG9uZyBvcmlnX25yID0gLTEsIG5ld19uciwgYmVmb3JlLCBhZnRlcjsKJiM0MzsJY2hhciBucl9wYXRoW1BBVEhfTUFYXTsKJiM0MzsJY2hhciAqY2c7CiYjNDM7CiYjNDM7CWhwYWdlX3NpemVfa2IgPSBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYigpOwomIzQzOwlpZiAoaHBhZ2Vfc2l6ZV9rYiAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIEtTRlRfU0tJUDsKJiM0MzsJfQomIzQzOwlocGFnZV9zaXplX2J5dGVzID0gaHBhZ2Vfc2l6ZV9rYiAqIDEwMjQ7CiYjNDM7CiYjNDM7CXNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSwKJiM0MzsJCSBIVUdFUEFHRVNfRElSICYjMzQ7L2h1Z2VwYWdlcy0lbGRrQi9ucl9odWdlcGFnZXMmIzM0OywgaHBhZ2Vfc2l6ZV9rYik7CiYjNDM7CiYjNDM7CWNnID0gY2dfbmFtZShyb290LCAmIzM0O21lbWNnX2h1Z2V0bGJfY21hX2NoYXJnZSYjMzQ7KTsKJiM0MzsJaWYgKCFjZykKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2NyZWF0ZShjZykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaW5fY2cgPSAxOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKSAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7aHVnZXRsYiBDTUEgY291bnRlcnMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9yaWdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7CiYjNDM7CWlmIChvcmlnX25yICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3QgcmVhZCAlc1xuJiMzNDssIG5yX3BhdGgpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7CiYjNDM7CiYjNDM7CWlmICh3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgJiM0MzsgMSkpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2Fubm90IHdyaXRlICVzXG4mIzM0OywgbnJfcGF0aCk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpOwomIzQzOwlpZiAobmV3X25yICZsdDs9IG9yaWdfbnIpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGEgaHVnZXBhZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwlyYyA9IEtTRlRfRkFJTDsKJiM0MzsJYWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpOwomIzQzOwomIzQzOwlpZiAoYWZ0ZXIgLSBiZWZvcmUgJmx0OyBocGFnZV9zaXplX2J5dGVzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygKJiM0MzsJCQkmIzM0O2h1Z2V0bGIgQ01BIGNvdW50ZXIgbm90IGNoYXJnZWQ6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkIGV4cGVjdGVkICYjNDM7JWxkXG4mIzM0OywKJiM0MzsJCQliZWZvcmUsIGFmdGVyLCBocGFnZV9zaXplX2J5dGVzKTsKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpOwomIzQzOwomIzQzOwlhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7CiYjNDM7CWlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygKJiM0MzsJCQkmIzM0O2h1Z2V0bGIgQ01BIGNvdW50ZXIgbm90IHVuY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGRcbiYjMzQ7LAomIzQzOwkJCWJlZm9yZSwgYWZ0ZXIpOwomIzQzOwkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjID0gS1NGVF9QQVNTOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChvcmlnX25yICZndDs9IDApCiYjNDM7CQl3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpOwomIzQzOwomIzQzOwlpZiAoaW5fY2cpCiYjNDM7CQljZ19lbnRlcl9jdXJyZW50KHJvb3QpOwomIzQzOwljZ19kZXN0cm95KGNnKTsKJiM0MzsJZnJlZShjZyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0ZXN0X2h1Z2V0bGJfY21hX2xpbWl0KGNvbnN0IGNoYXIgKnJvb3QpCiYjNDM7ewomIzQzOwlpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDsKJiM0MzsJbG9uZyBocGFnZV9zaXplX2tiOwomIzQzOwlsb25nIG9yaWdfbnIsIG5ld19ucjsKJiM0MzsJY2hhciBucl9wYXRoW1BBVEhfTUFYXTsKJiM0MzsJY2hhciAqY2c7CiYjNDM7CiYjNDM7CWhwYWdlX3NpemVfa2IgPSBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYigpOwomIzQzOwlpZiAoaHBhZ2Vfc2l6ZV9rYiAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7bm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIEtTRlRfU0tJUDsKJiM0MzsJfQomIzQzOwomIzQzOwlzbnByaW50Zihucl9wYXRoLCBzaXplb2YobnJfcGF0aCksCiYjNDM7CQkgSFVHRVBBR0VTX0RJUiAmIzM0Oy9odWdlcGFnZXMtJWxka0IvbnJfaHVnZXBhZ2VzJiMzNDssIGhwYWdlX3NpemVfa2IpOwomIzQzOwomIzQzOwljZyA9IGNnX25hbWUocm9vdCwgJiMzNDttZW1jZ19odWdldGxiX2NtYV9saW1pdCYjMzQ7KTsKJiM0MzsJaWYgKCFjZykKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJaWYgKGNnX2NyZWF0ZShjZykpCiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CiYjNDM7CWlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJaW5fY2cgPSAxOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9NQVgpICZsdDsgMCkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNnX3dyaXRlKGNnLCBIVUdFVExCX0NNQV9NQVgsICYjMzQ7MCYjMzQ7KSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3Qgc2V0IGh1Z2V0bGIgQ01BIGxpbWl0XG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTsKJiM0MzsJaWYgKG9yaWdfbnIgJmx0OyAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCByZWFkICVzXG4mIzM0OywgbnJfcGF0aCk7CiYjNDM7CQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICYjNDM7IDEpOwomIzQzOwluZXdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7CiYjNDM7CiYjNDM7CXJjID0gS1NGVF9GQUlMOwomIzQzOwlpZiAobmV3X25yICZndDsgb3JpZ19ucikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtodWdldGxiIENNQSBsaW1pdCBub3QgZW5mb3JjZWRcbiYjMzQ7KTsKJiM0MzsJCXdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYyA9IEtTRlRfUEFTUzsKJiM0MzsJfQomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CWlmIChpbl9jZykKJiM0MzsJCWNnX2VudGVyX2N1cnJlbnQocm9vdCk7CiYjNDM7CWNnX2Rlc3Ryb3koY2cpOwomIzQzOwlmcmVlKGNnKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFQoeCkgeyB4LCAjeCB9CiYjNDM7c3RydWN0IGNtYV9tZW1jZ190ZXN0cyB7CiYjNDM7CWludCAoKmZuKShjb25zdCBjaGFyICpyb290KTsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0Mzt9IHRlc3RzW10gPSB7CiYjNDM7CVQodGVzdF9jbWFfY2hhcmdlKSwKJiM0MzsJVCh0ZXN0X2NtYV9saW1pdCksCiYjNDM7CVQodGVzdF9odWdldGxiX2NtYV9jaGFyZ2UpLAomIzQzOwlUKHRlc3RfaHVnZXRsYl9jbWFfbGltaXQpLAomIzQzO307CiYjNDM7I3VuZGVmIFQKJiM0MzsKJiM0MztpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQomIzQzO3sKJiM0MzsJY2hhciByb290W1BBVEhfTUFYXTsKJiM0MzsJaW50IGhhc19tZW1vcnlfY21hX2FjYywgaTsKJiM0MzsKJiM0MzsJa3NmdF9wcmludF9oZWFkZXIoKTsKJiM0MzsJa3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7CiYjNDM7CiYjNDM7CWhhc19tZW1vcnlfY21hX2FjYyA9IHByb2NfbW91bnRfY29udGFpbnMoJiMzNDttZW1vcnlfY21hX2FjY291bnRpbmcmIzM0Oyk7CiYjNDM7CWlmIChoYXNfbWVtb3J5X2NtYV9hY2MgJmx0OyAwKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtjYW5ub3QgcXVlcnkgY2dyb3VwIG1vdW50IG9wdGlvbi5cbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAoIWhhc19tZW1vcnlfY21hX2FjYykKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7Q01BIGFjY291bnRpbmcgaXMgZGlzYWJsZWQuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtjZ3JvdXBmcyBpcyBub3QgYXZhaWxhYmxlLlxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgJiMzNDtjZ3JvdXAuY29udHJvbGxlcnMmIzM0OywgJiMzNDttZW1vcnkmIzM0OykpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O21lbW9yeSBjb250cm9sbGVyIGlzIG5vdCBhdmFpbGFibGUgKENPTkZJR19DR1JPVVBfTUVNQ0c/KVxuJiMzNDspOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh0ZXN0cyk7ICYjNDM7JiM0MztpKSB7CiYjNDM7CQlzd2l0Y2ggKHRlc3RzW2ldLmZuKHJvb3QpKSB7CiYjNDM7CQljYXNlIEtTRlRfUEFTUzoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoJiMzNDslc1xuJiMzNDssIHRlc3RzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBLU0ZUX1NLSVA6CiYjNDM7CQkJa3NmdF90ZXN0X3Jlc3VsdF9za2lwKCYjMzQ7JXNcbiYjMzQ7LCB0ZXN0c1tpXS5uYW1lKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJa3NmdF90ZXN0X3Jlc3VsdF9mYWlsKCYjMzQ7JXNcbiYjMzQ7LCB0ZXN0c1tpXS5uYW1lKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlrc2Z0X2ZpbmlzaGVkKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uNTM0YTk1ZWY1ZTA3NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2gKQEAgLTAsMCAmIzQzOzEsMTk3IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgQ29weXJpZ2h0IChjKSAyMDI2IFJlZCBIYXQsIEluYy4KJiM0MzsjCiYjNDM7IyBSdW4gY2dyb3VwIG1lbW9yeSBjb250cm9sbGVyIHNlbGZ0ZXN0cyBpbnNpZGUgYSB2aXJ0bWUtbmcgVk0KJiM0MzsjIERlcGVuZGVuY2llczoKJiM0MzsjCQkqIHZpcnRtZS1uZwomIzQzOyMJCSogYnVzeWJveC1zdGF0aWMgKHVzZWQgYnkgdmlydG1lLW5nKQomIzQzOyMJCSogcWVtdQkodXNlZCBieSB2aXJ0bWUtbmcpCiYjNDM7CiYjNDM7c2V0IC1ldW8gcGlwZWZhaWwKJiM0MzsKJiM0MztyZWFkb25seSBTQ1JJUFRfRElSPSYjMzQ7JChjZCAtUCAtLSAmIzM0OyQoZGlybmFtZSAtLSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDsgJmFtcDsmYW1wOyBwd2QgLVApJiMzNDsKJiM0MztyZWFkb25seSBLRVJORUxfQ0hFQ0tPVVQ9JiMzNDskKHJlYWxwYXRoICYjMzQ7JHtTQ1JJUFRfRElSfSYjMzQ7Ly4uLy4uLy4uLy4uLykmIzM0OwomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBUX0RJUn0mIzM0Oy8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoCiYjNDM7CiYjNDM7cmVhZG9ubHkgU1NIX0dVRVNUX1BPUlQ9JiMzNDske1NTSF9HVUVTVF9QT1JUOi0yMn0mIzM0OwomIzQzO3JlYWRvbmx5IFdBSVRfUEVSSU9EPTMKJiM0MztyZWFkb25seSBXQUlUX1BFUklPRF9NQVg9ODAKJiM0MztyZWFkb25seSBXQUlUX1RPVEFMPSQoKFdBSVRfUEVSSU9EICogV0FJVF9QRVJJT0RfTUFYKSkKJiM0MztyZWFkb25seSBRRU1VX1BJREZJTEU9JiMzNDskKG1rdGVtcCAvdG1wL3FlbXVfbWVtY2dfdm10ZXN0X1hYWFgucGlkKSYjMzQ7CiYjNDM7cmVhZG9ubHkgUUVNVV9PUFRTPSYjMzQ7IC0tcGlkZmlsZSAke1FFTVVfUElERklMRX0gJiMzNDsKJiM0MzsKJiM0MztCVUlMRD0wCiYjNDM7UUVNVT0mIzM0O3FlbXUtc3lzdGVtLSQodW5hbWUgLW0pJiMzNDsKJiM0MztWRVJCT1NFPTAKJiM0MztTSEVMTF9NT0RFPTAKJiM0MztHVUVTVF9UUkVFPSYjMzQ7JHtHVUVTVF9UUkVFOi0kS0VSTkVMX0NIRUNLT1VUfSYjMzQ7CiYjNDM7CiYjNDM7dXNhZ2UoKSB7CiYjNDM7CWNhdCAmbHQ7Jmx0O0VPRgomIzQzOyQwIFtPUFRJT05TXQomIzQzOyAgICAtYiAgICAgICAgQnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgYmVmb3JlIGJvb3RpbmcKJiM0MzsgICAgLXEgJmx0O3FlbXUmZ3Q7IFFFTVUgYmluYXJ5L3BhdGggKGRlZmF1bHQ6ICRRRU1VKQomIzQzOyAgICAtcyAgICAgICAgU3RhcnQgaW50ZXJhY3RpdmUgc2hlbGwgaW4gVk0KJiM0MzsgICAgLXYgICAgICAgIFZlcmJvc2Ugb3V0cHV0ICh2bmcgYm9vdCBsb2dzIG9uIHN0ZG91dCkKJiM0MztFT0YKJiM0MzsJZXhpdCAxCiYjNDM7fQomIzQzOwomIzQzO2RpZSgpIHsKJiM0MzsJZWNobyAmIzM0OyQqJiMzNDsgJmd0OyZhbXA7MgomIzQzOwlleGl0ICYjMzQ7JHtLU0ZUX0ZBSUx9JiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2xlYW51cCgpIHsKJiM0MzsJaWYgW1sgLXMgJiMzNDskUUVNVV9QSURGSUxFJiMzNDsgXV07IHRoZW4KJiM0MzsJCXBraWxsIC1TSUdURVJNIC1GICYjMzQ7JFFFTVVfUElERklMRSYjMzQ7ICZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgfHwgdHJ1ZQomIzQzOwlmaQomIzQzOwomIzQzOwlpZiBbWyAtZSAmIzM0OyRRRU1VX1BJREZJTEUmIzM0OyBdXTsgdGhlbgomIzQzOwkJcm0gLWYgJiMzNDskUUVNVV9QSURGSUxFJiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7dm1fc3NoKCkgewomIzQzOwlzdGRidWYgLW9MIHNzaCAtcSBcCiYjNDM7CQktRiAmIzM0OyRIT01FLy5jYWNoZS92aXJ0bWUtbmcvLnNzaC92aXJ0bWUtbmctc3NoLmNvbmYmIzM0OyBcCiYjNDM7CQktbCByb290ICYjMzQ7dmlydG1lLW5nJSRTU0hfR1VFU1RfUE9SVCYjMzQ7IFwKJiM0MzsJCSYjMzQ7JEAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztjaGVja19kZXBzKCkgewomIzQzOwlmb3IgZGVwIGluIHZuZyAmIzM0OyRRRU1VJiMzNDsgYnVzeWJveCBwa2lsbCBzc2g7IGRvCiYjNDM7CQlpZiAhIGNvbW1hbmQgLXYgJiMzNDskZGVwJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJCWVjaG8gJiMzNDtza2lwOiBkZXBlbmRlbmN5ICRkZXAgbm90IGZvdW5kJiMzNDsKJiM0MzsJCQlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7CQlmaQomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO2hhbmRsZV9idWlsZCgpIHsKJiM0MzsJaWYgW1sgISAmIzM0OyRCVUlMRCYjMzQ7IC1lcSAxIF1dOyB0aGVuCiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgW1sgISAtZCAmIzM0OyRLRVJORUxfQ0hFQ0tPVVQmIzM0OyBdXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0Oy1iIHJlcXVpcmVzICQwIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgc291cmNlIHRyZWUmIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0IDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJcHVzaGQgJiMzNDskS0VSTkVMX0NIRUNLT1VUJiMzNDsgJmFtcDsmZ3Q7L2Rldi9udWxsCiYjNDM7CiYjNDM7CWlmICEgdm5nIC0ta2NvbmZpZyAtLWNvbmZpZyAmIzM0OyRTQ1JJUFRfRElSJiMzNDsvY29uZmlnOyB0aGVuCiYjNDM7CQlkaWUgJiMzNDtmYWlsZWQgdG8gZ2VuZXJhdGUgLmNvbmZpZyBmb3Iga2VybmVsIHNvdXJjZSB0cmVlICgkS0VSTkVMX0NIRUNLT1VUKSYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CWlmICEgbWFrZSAtaiYjMzQ7JChucHJvYykmIzM0OzsgdGhlbgomIzQzOwkJZGllICYjMzQ7ZmFpbGVkIHRvIGJ1aWxkIGtlcm5lbCBmcm9tIHNvdXJjZSB0cmVlICgkS0VSTkVMX0NIRUNLT1VUKSYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CXBvcGQgJmFtcDsmZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzOwomIzQzO3ZtX3N0YXJ0KCkgewomIzQzOwlsb2NhbCBsb2dmaWxlPS9kZXYvbnVsbAomIzQzOwlsb2NhbCB2ZXJib3NlX29wdD0mIzM0OyYjMzQ7CiYjNDM7CWxvY2FsIGtlcm5lbF9vcHQ9JiMzNDsmIzM0OwomIzQzOwomIzQzOwlpZiBbWyAmIzM0OyRWRVJCT1NFJiMzNDsgLWVxIDEgXV07IHRoZW4KJiM0MzsJCXZlcmJvc2Vfb3B0PSYjMzQ7LS12ZXJib3NlJiMzNDsKJiM0MzsJCWxvZ2ZpbGU9L2Rldi9zdGRvdXQKJiM0MzsJZmkKJiM0MzsKJiM0MzsJaWYgW1sgJiMzNDskQlVJTEQmIzM0OyAtZXEgMSBdXTsgdGhlbgomIzQzOwkJa2VybmVsX29wdD0mIzM0OyR7S0VSTkVMX0NIRUNLT1VUfSYjMzQ7CiYjNDM7CWZpCiYjNDM7CiYjNDM7CXZuZyBcCiYjNDM7CQktLXJ1biBcCiYjNDM7CQkke2tlcm5lbF9vcHR9IFwKJiM0MzsJCSR7dmVyYm9zZV9vcHR9IFwKJiM0MzsJCS0tcWVtdS1vcHRzPSYjMzQ7JFFFTVVfT1BUUyYjMzQ7IFwKJiM0MzsJCS0tcWVtdT0mIzM0OyQoY29tbWFuZCAtdiAmIzM0OyRRRU1VJiMzNDspJiMzNDsgXAomIzQzOwkJLS11c2VyIHJvb3QgXAomIzQzOwkJLS1zc2ggJiMzNDskU1NIX0dVRVNUX1BPUlQmIzM0OyBcCiYjNDM7CQktLW1lbW9yeSAzRyBcCiYjNDM7CQktLWFwcGVuZCAmIzM0O2NtYT02NE0gaHVnZXRsYl9jbWE9MUcgaHVnZXRsYl9jbWFfb25seT0xJiMzNDsgXAomIzQzOwkJLS1ydyAmYW1wOyZndDsmIzM0OyRsb2dmaWxlJiMzNDsgJmFtcDsKJiM0MzsKJiM0MzsJbG9jYWwgdm5nX3BpZD0kIQomIzQzOwlsb2NhbCBlbGFwc2VkPTAKJiM0MzsKJiM0MzsJd2hpbGUgW1sgISAtcyAmIzM0OyRRRU1VX1BJREZJTEUmIzM0OyBdXTsgZG8KJiM0MzsJCWtpbGwgLTAgJiMzNDskdm5nX3BpZCYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IFwKJiM0MzsJCQlkaWUgJiMzNDt2bmcgZXhpdGVkIGVhcmx5OyBmYWlsZWQgdG8gYm9vdCBWTSYjMzQ7CiYjNDM7CQlbWyAmIzM0OyRlbGFwc2VkJiMzNDsgLWdlICYjMzQ7JFdBSVRfVE9UQUwmIzM0OyBdXSAmYW1wOyZhbXA7IFwKJiM0MzsJCQlkaWUgJiMzNDt0aW1lZCBvdXQgd2FpdGluZyBmb3IgVk0gYm9vdCYjMzQ7CiYjNDM7CQlzbGVlcCAxCiYjNDM7CQllbGFwc2VkPSQoKGVsYXBzZWQgJiM0MzsgMSkpCiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7dm1fd2FpdF9mb3Jfc3NoKCkgewomIzQzOwlsb2NhbCBpPTAKJiM0MzsJd2hpbGUgdHJ1ZTsgZG8KJiM0MzsJCXZtX3NzaCAtLSB0cnVlICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCWk9JCgoaSAmIzQzOyAxKSkKJiM0MzsJCVtbICYjMzQ7JHtpfSYjMzQ7IC1ndCAmIzM0OyRXQUlUX1BFUklPRF9NQVgmIzM0OyBdXSAmYW1wOyZhbXA7IFwKJiM0MzsJCQlkaWUgJiMzNDt0aW1lZCBvdXQgd2FpdGluZyBmb3IgZ3Vlc3Qgc3NoJiMzNDsKJiM0MzsJCXNsZWVwICYjMzQ7JFdBSVRfUEVSSU9EJiMzNDsKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MztjaGVja19ndWVzdF9yZXF1aXJlbWVudHMoKSB7CiYjNDM7CXZtX3NzaCAtLSAmIzM0O2dyZXAgLXEgbWVtb3J5IC9zeXMvZnMvY2dyb3VwL2Nncm91cC5jb250cm9sbGVycyYjMzQ7IFwKJiM0MzsJCXx8IGRpZSAmIzM0O21lbW9yeSBjb250cm9sbGVyIG5vdCBhdmFpbGFibGUgKENPTkZJR19NRU1DRz8pJiMzNDsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7W1sgLWUgL2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb24gXV0mIzM0OyBcCiYjNDM7CQl8fCBkaWUgJiMzNDtDTUEgaGVhcCBub3QgYXZhaWxhYmxlIChDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT8gY21hPSBjbWRsaW5lPykmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzZXR1cF9ndWVzdF9jbWFfYWNjb3VudGluZygpIHsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7bW91bnQgLW8gcmVtb3VudCxtZW1vcnlfY21hX2FjY291bnRpbmcgL3N5cy9mcy9jZ3JvdXAmIzM0OyBcCiYjNDM7CQl8fCBkaWUgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeV9jbWFfYWNjb3VudGluZyYjMzQ7CiYjNDM7CXZtX3NzaCAtLSAmIzM0O2VjaG8gJiM0MzttZW1vcnkgJmd0OyAvc3lzL2ZzL2Nncm91cC9jZ3JvdXAuc3VidHJlZV9jb250cm9sJiMzNDsgXAomIzQzOwkJfHwgZGllICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBtZW1vcnkgY29udHJvbGxlciYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3J1bl90ZXN0KCkgewomIzQzOwl2bV9zc2ggLS0gJiMzNDtjZCAmIzM5OyRHVUVTVF9UUkVFJiMzOTsgJmFtcDsmYW1wOyBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwJiMzNDsKJiM0MzsJdm1fc3NoIC0tICYjMzQ7Y2QgJiMzOTskR1VFU1RfVFJFRSYjMzk7ICZhbXA7JmFtcDsgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cyBUQVJHRVRTPWNncm91cCBydW5fdGVzdHMmIzM0OwomIzQzO30KJiM0MzsKJiM0Mzt3aGlsZSBnZXRvcHRzICYjMzQ7Omh2cTpzYiYjMzQ7IG9wdDsgZG8KJiM0MzsJY2FzZSAmIzM0OyRvcHQmIzM0OyBpbgomIzQzOwl2KSBWRVJCT1NFPTEgOzsKJiM0MzsJcSkgUUVNVT0mIzM0OyR7T1BUQVJHfSYjMzQ7IDs7CiYjNDM7CWIpIEJVSUxEPTEgOzsKJiM0MzsJcykgU0hFTExfTU9ERT0xIDs7CiYjNDM7CWh8KikgdXNhZ2UgOzsKJiM0MzsJZXNhYwomIzQzO2RvbmUKJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO2NoZWNrX2RlcHMKJiM0MztoYW5kbGVfYnVpbGQKJiM0MztlY2hvICYjMzQ7Qm9vdGluZyB2aXJ0bWUtbmcgVk0uLi4mIzM0OwomIzQzO3ZtX3N0YXJ0CiYjNDM7dm1fd2FpdF9mb3Jfc3NoCiYjNDM7ZWNobyAmIzM0O1ZNIGlzIHJlYWNoYWJsZSB2aWEgU1NILiYjMzQ7CiYjNDM7CiYjNDM7aWYgW1sgJiMzNDskU0hFTExfTU9ERSYjMzQ7IC1lcSAxIF1dOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTdGFydGluZyBpbnRlcmFjdGl2ZSBzaGVsbCBpbiBWTS4gRXhpdCB0byBzdG9wIFZNLiYjMzQ7CiYjNDM7CXZtX3NzaCAtdCAtLSAmIzM0O2NkICYjMzk7JEdVRVNUX1RSRUUmIzM5OyAmYW1wOyZhbXA7IGV4ZWMgYmFzaCAtLW5vcHJvZmlsZSAtLW5vcmMmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfUEFTUyYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztjaGVja19ndWVzdF9yZXF1aXJlbWVudHMKJiM0MztzZXR1cF9ndWVzdF9jbWFfYWNjb3VudGluZwomIzQzOwomIzQzO2VjaG8gJiMzNDtSdW5uaW5nIGNncm91cCBzZWxmdGVzdHMgaW4gVk0uLi4mIzM0OwomIzQzO3J1bl90ZXN0CiYjNDM7ZWNobyAmIzM0O1BBU1M6IGNncm91cCBzZWxmdGVzdHMgY29tcGxldGVkJiMzNDsKJiM0MztleGl0ICYjMzQ7JEtTRlRfUEFTUyYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgzNAoJCQkJCQkJb3V0cHV0OiAzMzMKCQkJCQkJCXRob3VnaHRzOiAyMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEV2YWx1YXRpb246IG1lbW9yeV9jbWFfYWNjb3VudGluZyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBnb29kIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNpbmcgYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgZm9yIGNncm91cCB2Mi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYSBmdWxsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3Qgd2FycmFudGVkIGhlcmUsIGJ1dCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MgdG8gYmUgY2VydGFpbi4KClRoZSBjb3JlIGlkZWEgaXMgdG8gYWNjb3VudCBmb3IgQ01BIG1lbW9yeSB1c2FnZSB3aXRoaW4gY2dyb3Vwcywgd2hpY2ggZW50YWlscyBhZGRpbmcgc29tZSBuZXcgY291bnRlcnMgYW5kIGV4cG9zaW5nIHRoZW0gdmlhIGNncm91cGZzLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgYW5kIGFueSBkYXRhIHJhY2VzLgoKSSBzdGFydGVkIGJ5IGV4YW1pbmluZyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgbmV3IGRhdGEgc3RydWN0dXJlcy4gIGBtZW1jZy0mZ3Q7Y21hX2NvdW50ZXJzYCBhbmQgYGNtYV9kZmxfZmlsZXNgIGFyZSBib3RoIGFsbG9jYXRlZCB1c2luZyBga2NhbGxvY2AuIFRoaXMgaW1tZWRpYXRlbHkgYWxsZXZpYXRlcyB0aGUgYmlnZ2VzdCBjb25jZXJuLiBga2NhbGxvY2AgcHJvdmlkZXMgemVyby1pbml0aWFsaXplZCBtZW1vcnksIHJlbW92aW5nIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IHRoZSBzdGFydC4KCk5leHQsIEkgc2NydXRpbml6ZWQgdGhlIGNncm91cGZzIGV4cG9zdXJlLCBzcGVjaWZpY2FsbHkgdGhlIGNyZWF0aW9uIG9mIHRob3NlIGBtZW1vcnkuY21hLiZsdDthcmVhJmd0Oy5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuJmx0O2FyZWEmZ3Q7Lm1heGAgZmlsZXMuIFRoZSBjb2RlIGxldmVyYWdlcyBgc2VxX3ByaW50ZmAgYW5kIGBzZXFfcHV0c19tZW1jZ190dW5hYmxlYCwgd2hpY2ggYXJlIHVzZWQgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSB3ZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCByYXcgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoYXQgdmFzdGx5IHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YgaW5mb3JtYXRpb24gbGVha2FnZSBkdWUgdG8gcGFkZGluZyBvciB1bmluaXRpYWxpemVkIGZpZWxkcy4KCkkgdGhlbiBsb29rZWQgYXQgdGhlIENNQSBjaGFyZ2UgYW5kIHVuY2hhcmdlIHBhdGhzIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vY21hLmNgLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAuIEkgY2hlY2tlZCBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuICBBbGwgdmFyaWFibGVzIGludm9sdmVkIGluIG1lbW9yeSBjaGFyZ2luZyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhbmQgdGhlIGxvZ2ljIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gTm8gZnVua3kgbWVtb3J5IG1hbmlwdWxhdGlvbiBvciBzdHJ1Y3R1cmUganVnZ2xpbmcgaGVyZSB0aGF0IHdvdWxkIG1ha2UgbWUgbmVydm91cy4gIFRoZSBjaGFyZ2UvdW5jaGFyZ2UgbG9naWMgbG9va3Mgc29saWQ7IGB0cnlfY2hhcmdlX21lbWNnYCBpcyBjYWxsZWQgYW5kIGFueSBlcnJvcnMgYXJlIGRlYWx0IHdpdGguCgpBIGtleSBwYXJ0IG9mIENNQSB1bmNoYXJnZSBpcyB0aGUgdXNhZ2Ugb2YgYGZvbGlvLSZndDttZW1jZ19kYXRhID0gMDtgLiBJIGhhdmUgdG8gZG91YmxlIGNoZWNrIHRoYXQgd2UgZGVhbCBjb3JyZWN0bHkgd2l0aCBwb3NzaWJsZSByYWNlcy4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdXNlcyBgcmN1X3JlYWRfbG9jaygpYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGlzc3Vlcy4KCkFmdGVyIGFsbCBvZiB0aGUgY2hlY2tzLCBJIGZlZWwgY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW1zIG9yIGRhdGEgcmFjZXMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIG1haW4gcmlza3MgaGVyZSB3b3VsZCBiZSB0aGluZ3MgbGlrZSBhIG1lbW9yeSBsZWFrIChwZXJoYXBzIGluIHRoZSBDTUEgYWxsb2NhdGlvbiBvciBmcmVlaW5nIGxvZ2ljKSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGluZGV4aW5nIGBjbWFfY291bnRlcnNgIG9yIGFuIGBvYmpfY2dyb3VwYCB3aGljaCBLQVNBTiB3b3VsZCBkZXRlY3QuCgpJbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgbWVtb3J5IGFjY291bnRpbmcgdmlhIGBrY2FsbG9jYCB6ZXJvZWQgbWVtb3J5IGFuZCBjbGVhciBkYXRhIGZsb3dzLiAgVGhlIGNncm91cGZzIGV4cG9zdXJlIGlzIGNsZWFuLCBhbmQgdGhlIENNQSBjaGFyZ2UvdW5jaGFyZ2UgbG9naWMgaXMgc3RyYWlnaHRmb3J3YXJkLiAgS0FTQU4gYW5kIG90aGVyIHRvb2xzIHdvdWxkIGJlIHN1ZmZpY2llbnQuICBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzbiYjMzk7dCBzb21ldGhpbmcgSSBzZWUgYXMgbmVjZXNzYXJ5IGluIHRoaXMgY2FzZS4gTGV0JiMzOTtzIG1vdmUgdGhpcyB0byB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHRvIGFjY291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAmIzM5O3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UuIFRoZSBjaGFuZ2VzIGludm9sdmU6XG4xLiBBZGRpbmcgYGNtYV9jb3VudGVyc2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXG4yLiBBZGRpbmcgYGNtYV9kZmxfZmlsZXNgIGFycmF5IGZvciBjZ3JvdXBmcywgd2hpY2ggaXMgYWxzbyBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cbjMuIEV4cG9zaW5nIENNQSB1c2FnZSBhbmQgbGltaXRzIHZpYSBjZ3JvdXBmcyBmaWxlcyAoYG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5tYXhgKS4gVGhlc2UgZmlsZXMgdXNlIGBzZXFfcHJpbnRmYCBhbmQgYHNlcV9wdXRzX21lbWNnX3R1bmFibGVgIHRvIGZvcm1hdCBpbnRlZ2VyIHZhbHVlcywgbWVhbmluZyBubyByYXcga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXG40LiBNb2RpZnlpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgcGF0aHMgdG8gY2hhcmdlIGFuZCB1bmNoYXJnZSBtZW1vcnkgY2dyb3Vwcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIHBhdGhzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwYXNzZWQgYXJvdW5kLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBjbWFfY291bnRlcnNgLCB1c2UtYWZ0ZXItZnJlZSBvZiBgbWVtY2dgLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgdG8gYWNjb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCYjMzk7cyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgaW52b2x2ZTpcbjEuIEFkZGluZyBgY21hX2NvdW50ZXJzYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cbjIuIEFkZGluZyBgY21hX2RmbF9maWxlc2AgYXJyYXkgZm9yIGNncm91cGZzLCB3aGljaCBpcyBhbHNvIGFsbG9jYXRlZCB1c2luZyBga2NhbGxvY2AgKHplcm8taW5pdGlhbGl6ZWQpLlxuMy4gRXhwb3NpbmcgQ01BIHVzYWdlIGFuZCBsaW1pdHMgdmlhIGNncm91cGZzIGZpbGVzIChgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLmN1cnJlbnRgIGFuZCBgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heGApLiBUaGVzZSBmaWxlcyB1c2UgYHNlcV9wcmludGZgIGFuZCBgc2VxX3B1dHNfbWVtY2dfdHVuYWJsZWAgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLCBtZWFuaW5nIG5vIHJhdyBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjQuIE1vZGlmeWluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZSBwYXRocyB0byBjaGFyZ2UgYW5kIHVuY2hhcmdlIG1lbW9yeSBjZ3JvdXBzLiBBbGwgbG9jYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlc2UgcGF0aHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgbm8gY29tcGxleCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHBhc3NlZCBhcm91bmQuXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGNtYV9jb3VudGVyc2AsIHVzZS1hZnRlci1mcmVlIG9mIGBtZW1jZ2AsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjozOS43NjI2NDEwMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzY4OTU2NjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJETUFCVUZfSEVBUFNcIixcbiAgICBcIkRNQUJVRl9IRUFQU19DTUFcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2NtYVwiLFxuICAgIFwibWVtX2Nncm91cF91bmNoYXJnZV9jbWFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgdG8gYWNjb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCdzIG92ZXJhbGwgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgY21hX2NvdW50ZXJzYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cXG4yLiBBZGRpbmcgYGNtYV9kZmxfZmlsZXNgIGFycmF5IGZvciBjZ3JvdXBmcywgd2hpY2ggaXMgYWxzbyBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cXG4zLiBFeHBvc2luZyBDTUEgdXNhZ2UgYW5kIGxpbWl0cyB2aWEgY2dyb3VwZnMgZmlsZXMgKGBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuXFx1MDAzY2FyZWFcXHUwMDNlLm1heGApLiBUaGVzZSBmaWxlcyB1c2UgYHNlcV9wcmludGZgIGFuZCBgc2VxX3B1dHNfbWVtY2dfdHVuYWJsZWAgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLCBtZWFuaW5nIG5vIHJhdyBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG40LiBNb2RpZnlpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgcGF0aHMgdG8gY2hhcmdlIGFuZCB1bmNoYXJnZSBtZW1vcnkgY2dyb3Vwcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIHBhdGhzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwYXNzZWQgYXJvdW5kLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGNtYV9jb3VudGVyc2AsIHVzZS1hZnRlci1mcmVlIG9mIGBtZW1jZ2AsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2dyb3VwIHYyIG1vdW50IG9wdGlvbiBgbWVtb3J5X2NtYV9hY2NvdW50aW5nYCB3aGljaCBlbmFibGVzIGFjY291bnRpbmcgb2YgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAncyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gSXQgYWRkcyBuZXcgY29yZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgdG8gaGFuZGxlIHRoZSBhY2NvdW50aW5nIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENNQSBhbGxvY2F0aW9ucyAoZS5nLiwgdXNpbmcgRE1BLUJVRiBoZWFwcyBvciBodWdldGxiKSB3aGVuIHRoZSBtb3VudCBvcHRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBDTUEgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEyOjM5Ljc2MjY0ODEzM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NzQ5OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTM4ZGU3NDE4MTNlYjQ3NmE5ZDUyMGNmZDA5NmNhMWEwYTE1MTg0MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxOToxMjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcXG5pbmRleCBhZWQxOTVhNzFjYmYxLi4zOTg3MWE3YTA4YThkIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxcbkBAIC0yNDYsNiArMjQ2LDI2IEBAIGNncm91cCB2MiBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb25zLlxcbiAgICAgICAgICAgd2lsbCBub3QgYmUgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKGV2ZW4gaWYgY2dyb3VwXFxuICAgICAgICAgICB2MiBpcyByZW1vdW50ZWQgbGF0ZXIgb24pLlxcbiBcXG4rICBtZW1vcnlfY21hX2FjY291bnRpbmdcXG4rICAgICAgICBDb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCdzIG92ZXJhbGwgbWVtb3J5IHVzYWdlIGZvclxcbisgICAgICAgIHRoZSBtZW1vcnkgY29udHJvbGxlciwgYW5kIGV4cG9zZSBwZXItQ01BLWFyZWEgdXNhZ2UgY291bnRlcnMuIFRoaXNcXG4rICAgICAgICBiZWhhdmlvciBpcyBvcHQtaW4sIHNvIGFzIHRvIG5vdCBjYXVzZSByZWdyZXNzaW9uIG9uIGV4aXN0aW5nIHNldHVwcy5cXG4rXFxuKyAgICAgICAgQSBmZXcgY2F2ZWF0cyB0byBrZWVwIGluIG1pbmQ6XFxuK1xcbisgICAgICAgICogQ01BIGFyZWFzIGFyZSByZXNlcnZlZCBhdCBib290IHRpbWUsIG1lbW9yeSBpcyBvbmx5IGNoYXJnZWQgdG8gYVxcbisgICAgICAgICAgY2dyb3VwIHdoZW4gYSBDTUEgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgb24gaXRzIGJlaGFsZi5cXG4rICAgICAgICAqIENNQSBwYWdlcyBhbGxvY2F0ZWQgd2hpbGUgdGhpcyBvcHRpb24gaXMgbm90IGVuYWJsZWQgd2lsbCBub3QgYmVcXG4rICAgICAgICAgIHRyYWNrZWQgYnkgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBldmVuIGlmIGNncm91cCB2MiBpcyByZW1vdW50ZWRcXG4rICAgICAgICAgIGxhdGVyIG9uIHdpdGggdGhpcyBvcHRpb24uIENoYXJnZXMgaGFwcGVuIGF0IGFsbG9jYXRpb24uXFxuKyAgICAgICAgKiBDTUEgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgYm90aCB0byB0aGUgY2dyb3VwJ3MgbWVtb3J5IGNvdW50ZXJcXG4rICAgICAgICAgIChsaW1pdGVkIGJ5IG1lbW9yeS5tYXgpIGFuZCB0aGUgcGVyLWFyZWEgQ01BIGNvdW50ZXIgKGxpbWl0ZWQgYnlcXG4rICAgICAgICAgIG1lbW9yeS5jbWEuXFx1MDAzY2FyZWFcXHUwMDNlLm1heCkuIEhpdHRpbmcgZWl0aGVyIGxpbWl0IGNhbiBjYXVzZSBhbiBhbGxvY2F0aW9uXFxuKyAgICAgICAgICB0byBmYWlsLiBJZiBDTUEgdXNhZ2UgcHVzaGVzIHRoZSBjZ3JvdXAgb3ZlciBtZW1vcnkuaGlnaCBvclxcbisgICAgICAgICAgbWVtb3J5Lm1heCwgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG90aGVyXFxuKyAgICAgICAgICBtZW1vcnkgb25seS4gQ01BIG1lbW9yeSBjaGFyZ2VkIHRvIHRoZSBjZ3JvdXAgaXMgbm90IHJlY2xhaW1hYmxlLlxcbisgICAgICAgICAgTGltaXRzIHNob3VsZCBiZSBzaXplZCB0byBhY2NvbW1vZGF0ZSB0aGUgZXhwZWN0ZWQgQ01BIHByZXNzdXJlLlxcbitcXG4gICBwaWRzX2xvY2FsZXZlbnRzXFxuICAgICAgICAgVGhlIG9wdGlvbiByZXN0b3JlcyB2MS1saWtlIGJlaGF2aW9yIG9mIHBpZHMuZXZlbnRzOm1heCwgdGhhdCBpcyBvbmx5XFxuICAgICAgICAgbG9jYWwgKGluc2lkZSBjZ3JvdXAgcHJvcGVyKSBmb3JrIGZhaWx1cmVzIGFyZSBjb3VudGVkLiBXaXRob3V0IHRoaXNcXG5AQCAtMTkwOCw2ICsxOTI4LDIxIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXFxuIFxcdFRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGlmIHpzd2FwIGlzIGRpc2FibGVkLCBhbmQgc3dhcHBpbmdcXG4gXFx0aXMgYWxsb3dlZCB1bmxlc3MgbWVtb3J5LnN3YXAubWF4IGlzIHNldCB0byAwLlxcbiBcXG4rICBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5jdXJyZW50XFxuKyAgICAgICAgQSByZWFkLW9ubHkgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFxcdTAwM2NhcmVhXFx1MDAzZVxcbisgICAgICAgIGlzIHRoZSBDTUEgYXJlYSBuYW1lIChlLmcuIFxcXCJyZXNlcnZlZFxcXCIgZm9yIHRoZSBkZWZhdWx0IERNQSBDTUEgYXJlYSkuXFxuK1xcbisgICAgICAgIFRoZSB0b3RhbCBhbW91bnQgb2YgQ01BIG1lbW9yeSBjdXJyZW50bHkgY2hhcmdlZCB0byB0aGUgY2dyb3VwIGZvciB0aGVcXG4rICAgICAgICBnaXZlbiBDTUEgYXJlYS4gT25seSBhY2NvdW50ZWQgd2hlbiBtZW1vcnlfY21hX2FjY291bnRpbmcgaXMgZW5hYmxlZC5cXG4rXFxuKyAgbWVtb3J5LmNtYS5cXHUwMDNjYXJlYVxcdTAwM2UubWF4XFxuKyAgICAgICAgQSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLiBUaGVcXG4rICAgICAgICBkZWZhdWx0IGlzIFxcXCJtYXhcXFwiLlxcbitcXG4rICAgICAgICBDTUEgdXNhZ2UgaGFyZCBsaW1pdCBmb3IgdGhlIGdpdmVuIGFyZWEuIElmIGEgY2dyb3VwJ3MgQ01BIHVzYWdlIGZvclxcbisgICAgICAgIHRoaXMgYXJlYSBleGNlZWRzIHRoaXMgbGltaXQsIHRoZSBhbGxvY2F0aW9uIHdpbGwgZmFpbC4gT25seSBlbmZvcmNlZFxcbisgICAgICAgIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuXFxuK1xcbiAgIG1lbW9yeS5wcmVzc3VyZVxcbiBcXHRBIHJlYWQtb25seSBuZXN0ZWQta2V5ZWQgZmlsZS5cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaFxcbmluZGV4IGRlMmNkNjIzOGMyYWUuLjE1ZjNmNzExMGM1YjEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXFxuQEAgLTEyOSw2ICsxMjksMTEgQEAgZW51bSB7XFxuIFxcdCAqIEVuYWJsZSBsZWdhY3kgbG9jYWwgcGlkcy5ldmVudHMuXFxuIFxcdCAqL1xcbiBcXHRDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMgPSAoMSBcXHUwMDNjXFx1MDAzYyAyMCksXFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgY21hIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlci5cXG4rXFx0ICovXFxuK1xcdENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcgPSAoMSBcXHUwMDNjXFx1MDAzYyAyMSksXFxuIH07XFxuIFxcbiAvKiBjZnR5cGUtXFx1MDAzZWZsYWdzICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY21hLmggYi9pbmNsdWRlL2xpbnV4L2NtYS5oXFxuaW5kZXggODU1NWQzOGE5N2IxYS4uMTZlMjEzNjQyMWI3MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NtYS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jbWEuaFxcbkBAIC00OSwxMiArNDksMTIgQEAgZXh0ZXJuIGludCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGNtYSAqKnJlc19jbWEpO1xcbiBleHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcXG4gXFx0XFx0XFx0ICAgICAgYm9vbCBub193YXJuKTtcXG4tZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbitleHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7XFxuIFxcbiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBhbGlnbiwgYm9vbCBub193YXJuKTtcXG4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcXG4rYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbiBcXG4gZXh0ZXJuIGludCBjbWFfZm9yX2VhY2hfYXJlYShpbnQgKCppdCkoc3RydWN0IGNtYSAqY21hLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCA4MTcwYmI4MDY2YTIyLi44MDFmYmRlOTQxMzdiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMzIwLDYgKzMyMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XFxuIFxcdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuIFxcbisjaWZkZWYgQ09ORklHX0NNQVxcbitcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjbWFfY291bnRlcnM7XFxuKyNlbmRpZiAvKiBDT05GSUdfQ01BICovXFxuK1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbm9kZWluZm9bXTtcXG4gfTtcXG4gXFxuQEAgLTY2Miw2ICs2NjYsMTEgQEAgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XFxuIFxcbitpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBjbWEgKmNtYSk7XFxuK3ZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGNtYSAqY21hKTtcXG4rXFxuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4gLyoqXFxuQEAgLTExNjAsNiArMTE2OSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGNtYSAqY21hKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBjb3VudCwgc3RydWN0IGNtYSAqY21hKVxcbit7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gfVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC9jZ3JvdXAuY1xcbmluZGV4IGI1YjQ2MWQ0NDE4YjEuLjEyMTg0Zjg1YWQxMDAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Nncm91cC9jZ3JvdXAuY1xcbisrKyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcXG5AQCAtMTk4NSw2ICsxOTg1LDcgQEAgZW51bSBjZ3JvdXAyX3BhcmFtIHtcXG4gXFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90LFxcbiBcXHRPcHRfbWVtb3J5X2h1Z2V0bGJfYWNjb3VudGluZyxcXG4gXFx0T3B0X3BpZHNfbG9jYWxldmVudHMsXFxuK1xcdE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcsXFxuIFxcdG5yX19jZ3JvdXAyX3BhcmFtc1xcbiB9O1xcbiBcXG5AQCAtMTk5NSw2ICsxOTk2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBjZ3JvdXAyX2ZzX3BhcmFtZXRlcnNbXSA9IHtcXG4gXFx0ZnNwYXJhbV9mbGFnKFxcXCJtZW1vcnlfcmVjdXJzaXZlcHJvdFxcXCIsXFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90KSxcXG4gXFx0ZnNwYXJhbV9mbGFnKFxcXCJtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXFxcIiwgT3B0X21lbW9yeV9odWdldGxiX2FjY291bnRpbmcpLFxcbiBcXHRmc3BhcmFtX2ZsYWcoXFxcInBpZHNfbG9jYWxldmVudHNcXFwiLFxcdE9wdF9waWRzX2xvY2FsZXZlbnRzKSxcXG4rXFx0ZnNwYXJhbV9mbGFnKFxcXCJtZW1vcnlfY21hX2FjY291bnRpbmdcXFwiLFxcdE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcpLFxcbiBcXHR7fVxcbiB9O1xcbiBcXG5AQCAtMjAyNyw2ICsyMDI5LDkgQEAgc3RhdGljIGludCBjZ3JvdXAyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW1cXG4gXFx0Y2FzZSBPcHRfcGlkc19sb2NhbGV2ZW50czpcXG4gXFx0XFx0Y3R4LVxcdTAwM2VmbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmc6XFxuK1xcdFxcdGN0eC1cXHUwMDNlZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG5AQCAtMjA2OCw2ICsyMDczLDExIEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Nncm91cF9yb290X2ZsYWdzKHVuc2lnbmVkIGludCByb290X2ZsYWdzKVxcbiBcXHRcXHRcXHRjZ3JwX2RmbF9yb290LmZsYWdzIHw9IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUztcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjY9IH5DR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XFxuK1xcbitcXHRcXHRpZiAocm9vdF9mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpXFxuK1xcdFxcdFxcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjY9IH5DR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTIwODUsNiArMjA5NSw4IEBAIHN0YXRpYyBpbnQgY2dyb3VwX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGtlcm5mc19yb290ICprZl9yb290XFxuIFxcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXFxcIik7XFxuIFxcdGlmIChjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjYgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKVxcbiBcXHRcXHRzZXFfcHV0cyhzZXEsIFxcXCIscGlkc19sb2NhbGV2ZW50c1xcXCIpO1xcbitcXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpXFxuK1xcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIixtZW1vcnlfY21hX2FjY291bnRpbmdcXFwiKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTc1MjAsNyArNzUzMiw4IEBAIHN0YXRpYyBzc2l6ZV90IGZlYXR1cmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4gXFx0XFx0XFx0XFxcIm1lbW9yeV9sb2NhbGV2ZW50c1xcXFxuXFxcIlxcbiBcXHRcXHRcXHRcXFwibWVtb3J5X3JlY3Vyc2l2ZXByb3RcXFxcblxcXCJcXG4gXFx0XFx0XFx0XFxcIm1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcXFxcblxcXCJcXG4tXFx0XFx0XFx0XFxcInBpZHNfbG9jYWxldmVudHNcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXFwicGlkc19sb2NhbGV2ZW50c1xcXFxuXFxcIlxcbitcXHRcXHRcXHRcXFwibWVtb3J5X2NtYV9hY2NvdW50aW5nXFxcXG5cXFwiKTtcXG4gfVxcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNncm91cF9mZWF0dXJlc19hdHRyID0gX19BVFRSX1JPKGZlYXR1cmVzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmNcXG5pbmRleCBhMTNjZTQ5OTliMzlmLi4wM2ViM2FjYmQzYzc1IDEwMDY0NFxcbi0tLSBhL21tL2NtYS5jXFxuKysrIGIvbW0vY21hLmNcXG5AQCAtMjUsNyArMjUsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbG9nMi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY21hLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9oaWdobWVtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva21lbWxlYWsuaFxcdTAwM2VcXG5AQCAtOTA1LDYgKzkwNCwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsXFxuIFxcdFxcdGNtYV9kZWJ1Z19zaG93X2FyZWFzKGNtYSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwYWdlIFxcdTAwMjZcXHUwMDI2IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShwYWdlLCBjb3VudCwgY21hKSkge1xcbitcXHRcXHRmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcXG4rXFx0XFx0Y21hX2NsZWFyX2JpdG1hcChjbWEsIFxcdTAwMjZjbWEtXFx1MDAzZXJhbmdlc1tyXSwgcGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcXG4rXFx0XFx0cGFnZSA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuIFxcdHByX2RlYnVnKFxcXCIlcygpOiByZXR1cm5lZCAlcFxcXFxuXFxcIiwgX19mdW5jX18sIHBhZ2UpO1xcbiBcXHR0cmFjZV9jbWFfYWxsb2NfZmluaXNoKG5hbWUsIHBhZ2UgPyBwYWdlX3RvX3BmbihwYWdlKSA6IDAsXFxuIFxcdFxcdFxcdCAgICAgICBwYWdlLCBjb3VudCwgYWxpZ24sIHJldCk7XFxuQEAgLTk5MiwxMiArOTk3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX21lbXJhbmdlICpmaW5kX2NtYV9tZW1yYW5nZShzdHJ1Y3QgY21hICpjbWEsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxcbi1cXHRcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2VzKTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCIlcyhwYWdlICVwLCBjb3VudCAlbHUpXFxcXG5cXFwiLCBfX2Z1bmNfXywgKHZvaWQgKilwYWdlcywgY291bnQpO1xcbiBcXG4rXFx0bWVtX2Nncm91cF91bmNoYXJnZV9jbWEocGFnZXMsIGNvdW50LCBjbWEpO1xcbiBcXHRmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGZuLCBjb3VudCk7XFxuIFxcdGNtYV9jbGVhcl9iaXRtYXAoY21hLCBjbXIsIHBmbiwgY291bnQpO1xcbiBcXHRjbWFfc3lzZnNfYWNjb3VudF9yZWxlYXNlX3BhZ2VzKGNtYSwgY291bnQpO1xcbkBAIC0xMDE0LDcgKzEwMjAsNyBAQCBzdGF0aWMgdm9pZCBfX2NtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcixcXG4gICogSXQgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91cyBhcmVhIGFuZFxcbiAgKiB0cnVlIG90aGVyd2lzZS5cXG4gICovXFxuLWJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuK2Jvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuIFxcdFxcdCB1bnNpZ25lZCBsb25nIGNvdW50KVxcbiB7XFxuIFxcdHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcjtcXG5AQCAtMTAzNyw3ICsxMDQzLDcgQEAgYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChjbWFfcmVsZWFzZSk7XFxuIFxcbi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcXG4rYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpXFxuIHtcXG4gXFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yO1xcbmRpZmYgLS1naXQgYS9tbS9jbWEuaCBiL21tL2NtYS5oXFxuaW5kZXggYzcwMTgwYzM2NTU5Yy4uNTJiN2Q0YmU1MTcwNyAxMDA2NDRcXG4tLS0gYS9tbS9jbWEuaFxcbisrKyBiL21tL2NtYS5oXFxuQEAgLTQsNiArNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva29iamVjdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY21hLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgY21hX2tvYmplY3Qge1xcbiBcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbkBAIC04MCw2ICs4MSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9tYXhubyhzdHJ1Y3QgY21hICpjbWEsXFxuIFxcdHJldHVybiBjbXItXFx1MDAzZWNvdW50IFxcdTAwM2VcXHUwMDNlIGNtYS1cXHUwMDNlb3JkZXJfcGVyX2JpdDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgY21hX2FyZWFfaW5kZXgoY29uc3Qgc3RydWN0IGNtYSAqY21hKVxcbit7XFxuK1xcdHJldHVybiBjbWEgLSBjbWFfYXJlYXM7XFxuK31cXG4rXFxuICNpZmRlZiBDT05GSUdfQ01BX1NZU0ZTXFxuIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfc3VjY2Vzc19wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiB2b2lkIGNtYV9zeXNmc19hY2NvdW50X2ZhaWxfcGFnZXMoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5kaWZmIC0tZ2l0IGEvbW0vY21hX2RlYnVnLmMgYi9tbS9jbWFfZGVidWcuY1xcbmluZGV4IDUyM2JhNGEwZjlmNzYuLjcwYmZjNmZiZWVjYTMgMTAwNjQ0XFxuLS0tIGEvbW0vY21hX2RlYnVnLmNcXG4rKysgYi9tbS9jbWFfZGVidWcuY1xcbkBAIC03LDcgKzcsNiBAQFxcbiBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9tbS9jbWFfc3lzZnMuYyBiL21tL2NtYV9zeXNmcy5jXFxuaW5kZXggZDViZjc5MmM2MjQ1YS4uZTRlZTM1YmM2ODJiYSAxMDA2NDRcXG4tLS0gYS9tbS9jbWFfc3lzZnMuY1xcbisrKyBiL21tL2NtYV9zeXNmcy5jXFxuQEAgLTUsNyArNSw2IEBAXFxuICAqIENvcHlyaWdodCAoYykgMjAyMSBNaW5jaGFuIEtpbSBcXHUwMDNjbWluY2hhbkBrZXJuZWwub3JnXFx1MDAzZVxcbiAgKi9cXG4gXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNmRjNDg4OGE5MGYzZi4uZjI4ZDYxMGE1OWNlNyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNjgsNiArNjgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJzbGFiLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJtZW1jb250cm9sLXYxLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjbWEuaFxcXCJcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuIFxcbkBAIC00MDYyLDYgKzQwNjMsOSBAQCBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aW50IG5vZGU7XFxuIFxcbisjaWZkZWYgQ09ORklHX0NNQVxcbitcXHRrZnJlZShtZW1jZy1cXHUwMDNlY21hX2NvdW50ZXJzKTtcXG4rI2VuZGlmXFxuIFxcdGZvcl9lYWNoX25vZGUobm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bbm9kZV07XFxuIFxcdFxcdGlmICghcG4pXFxuQEAgLTQxNDQsNiArNDE0OCwxNSBAQCBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1FTUNHX0NHV0JfRlJOX0NOVDsgaSsrKVxcbiBcXHRcXHRtZW1jZy1cXHUwMDNlY2d3Yl9mcm5baV0uZG9uZSA9XFxuIFxcdFxcdFxcdF9fV0JfQ09NUExFVElPTl9JTklUKFxcdTAwMjZtZW1jZ19jZ3diX2Zybl93YWl0cSk7XFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX0NNQVxcbitcXHRpZiAoY21hX2FyZWFfY291bnQpIHtcXG4rXFx0XFx0bWVtY2ctXFx1MDAzZWNtYV9jb3VudGVycyA9IGtjYWxsb2MoY21hX2FyZWFfY291bnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZV9jb3VudGVyKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmICghbWVtY2ctXFx1MDAzZWNtYV9jb3VudGVycylcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHR9XFxuICNlbmRpZlxcbiBcXHRscnVfZ2VuX2luaXRfbWVtY2cobWVtY2cpO1xcbiBcXHRyZXR1cm4gbWVtY2c7XFxuQEAgLTQxNTksNiArNDE3Miw3IEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NzcyhwYXJlbnRfY3NzKTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xcbiBcXHRib29sIG1lbWNnX29uX2RmbCA9IGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxuK1xcdHVuc2lnbmVkIGludCBfX21heWJlX3VudXNlZCBpO1xcbiBcXG4gXFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpO1xcbiBcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTtcXG5AQCAtNDE3MSw2ICs0MTg1LDEyIEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbiAjaWZkZWYgQ09ORklHX1pTV0FQXFxuIFxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbiBcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2V6c3dhcF93cml0ZWJhY2ssIHRydWUpO1xcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19DTUFcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNtYV9hcmVhX2NvdW50OyArK2kpXFxuK1xcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlY21hX2NvdW50ZXJzW2ldLFxcbitcXHRcXHRcXHRcXHQgIHBhcmVudCA/IFxcdTAwMjZwYXJlbnQtXFx1MDAzZWNtYV9jb3VudGVyc1tpXSA6IE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgZmFsc2UpO1xcbiAjZW5kaWZcXG4gXFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuIFxcdGlmIChwYXJlbnQpIHtcXG5AQCAtNTIxMyw2ICs1MjMzLDEwMiBAQCBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0NNQVxcbitzdGF0aWMgYm9vbCBtZW1jZ19hY2NvdW50c19jbWEodm9pZClcXG4re1xcbitcXHRyZXR1cm4gY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkc7XFxuK31cXG4rXFxuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuK1xcdFxcdFxcdCAgc3RydWN0IGNtYSAqY21hKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsICpmYWlsO1xcbitcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGludCByYyA9IDA7XFxuK1xcbitcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19jbWEoKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xcbitcXHRpZiAoIW1lbWNnKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKVxcbitcXHRcXHRnb3RvIGNncm91cF9wdXQ7XFxuK1xcbitcXHRyYyA9IHRyeV9jaGFyZ2VfbWVtY2cobWVtY2csIEdGUF9LRVJORUwsIGNvdW50KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGNncm91cF9wdXQ7XFxuK1xcbitcXHRjb3VudGVyID0gXFx1MDAyNm1lbWNnLVxcdTAwM2VjbWFfY291bnRlcnNbY21hX2FyZWFfaW5kZXgoY21hKV07XFxuK1xcdGlmICghcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2UoY291bnRlciwgY291bnQsIFxcdTAwMjZmYWlsKSkge1xcbitcXHRcXHRyZWZpbGxfc3RvY2sobWVtY2csIGNvdW50KTtcXG4rXFx0XFx0cmMgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGNncm91cF9wdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9tZW1jZyhtZW1jZyk7XFxuK1xcdGlmIChmb2xpb190ZXN0X2xhcmdlKHBhZ2VfZm9saW8ocGFnZSkpKSB7XFxuK1xcdFxcdGNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlKSwgb2JqY2cpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRvYmpfY2dyb3VwX2dldF9tYW55KG9iamNnLCBjb3VudCAtIDEpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKylcXG4rXFx0XFx0XFx0Y29tbWl0X2NoYXJnZShwYWdlX2ZvbGlvKHBhZ2UgKyBpKSwgb2JqY2cpO1xcbitcXHR9XFxuK1xcbitjZ3JvdXBfcHV0OlxcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4rdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgY21hICpjbWEpXFxuK3tcXG4rXFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcXG4rXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEdldCB0aGUgb2JqY2cgZnJvbSB0aGUgZmlyc3QgcGFnZS5cXG4rXFx0ICogcGFnZV9vYmpjZygpIGV4cGVjdHMgTUVNQ0dfREFUQV9LTUVNLCBidXQgZm9yIENNQSB3ZSB1c2VkXFxuK1xcdCAqIGNvbW1pdF9jaGFyZ2UoKSB3aGljaCBzZXRzIGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gb2JqY2dcXG4rXFx0ICogd2l0aG91dCBmbGFncywgc28gd2UgY2Fubm90IHVzZSBpdC5cXG4rXFx0ICovXFxuK1xcdG9iamNnID0gZm9saW9fb2JqY2cocGFnZV9mb2xpbyhwYWdlKSk7XFxuK1xcdGlmICghb2JqY2cpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4rXFxuK1xcdGNvdW50ZXIgPSBcXHUwMDI2bWVtY2ctXFx1MDAzZWNtYV9jb3VudGVyc1tjbWFfYXJlYV9pbmRleChjbWEpXTtcXG4rXFx0cGFnZV9jb3VudGVyX3VuY2hhcmdlKGNvdW50ZXIsIGNvdW50KTtcXG4rXFxuK1xcdG1lbWNnX3VuY2hhcmdlKG1lbWNnLCBjb3VudCk7XFxuK1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4rXFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhID0gMDtcXG4rXFx0XFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7ICsraSkge1xcbitcXHRcXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSArIGkpO1xcbitcXHRcXHRcXHRmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IDA7XFxuK1xcdFxcdFxcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19DTUEgKi9cXG4rXFxuIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIge1xcbiBcXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xcbkBAIC02MDY2LDMgKzYxODIsOTIgQEAgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdFxcdEsoYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeS5jaGlsZHJlbl9taW5fdXNhZ2UpKSxcXG4gXFx0XFx0SyhhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LmNoaWxkcmVuX2xvd191c2FnZSkpKTtcXG4gfVxcbitcXG4rI2lmZGVmIENPTkZJR19DTUFcXG4rc3RhdGljIGludCBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcXG4rXFx0aW50IGlkeCA9IHNlcV9jZnQobSktXFx1MDAzZXByaXZhdGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY3VyID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VjbWFfY291bnRlcnNbaWR4XSk7XFxuK1xcbitcXHRzZXFfcHJpbnRmKG0sIFxcXCIlbHVcXFxcblxcXCIsIGN1ciAqIFBBR0VfU0laRSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBtZW1vcnlfY21hX21heF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xcbitcXHRpbnQgaWR4ID0gc2VxX2NmdChtKS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZWNtYV9jb3VudGVyc1tpZHhdLm1heCk7XFxuK1xcbitcXHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLCBtYXgpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBtZW1vcnlfY21hX21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG4rXFx0aW50IGlkeCA9IG9mX2NmdChvZiktXFx1MDAzZXByaXZhdGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWF4O1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbitcXHRyYyA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsIFxcXCJtYXhcXFwiLCBcXHUwMDI2bWF4KTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHR4Y2hnKFxcdTAwMjZtZW1jZy1cXHUwMDNlY21hX2NvdW50ZXJzW2lkeF0ubWF4LCBtYXgpO1xcbitcXG4rXFx0cmV0dXJuIG5ieXRlcztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBjZnR5cGUgY21hX2RmbF90bXBsW10gPSB7XFxuK1xcdHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiY3VycmVudFxcXCIsXFxuK1xcdFxcdC5zZXFfc2hvdyA9IG1lbW9yeV9jbWFfY3VycmVudF9zaG93LFxcbitcXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwibWF4XFxcIixcXG4rXFx0XFx0LnNlcV9zaG93ID0gbWVtb3J5X2NtYV9tYXhfc2hvdyxcXG4rXFx0XFx0LndyaXRlID0gbWVtb3J5X2NtYV9tYXhfd3JpdGUsXFxuK1xcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG4rXFx0fSxcXG4rXFx0eyB9XFxuK307XFxuKyNkZWZpbmUgQ01BX0RGTF9UTVBMX1NJWkVcXHQoQVJSQVlfU0laRShjbWFfZGZsX3RtcGwpIC0gMSlcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlICpjbWFfZGZsX2ZpbGVzO1xcbitcXG4rc3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9jbWFfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBjZnR5cGUgKmNmdDtcXG4rXFx0dW5zaWduZWQgaW50IGksIGo7XFxuK1xcdGludCBjb3VudDtcXG4rXFxuK1xcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIWNtYV9hcmVhX2NvdW50KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNvdW50ID0gY21hX2FyZWFfY291bnQgKiBDTUFfREZMX1RNUExfU0laRTtcXG4rXFx0Y21hX2RmbF9maWxlcyA9IGtjYWxsb2MoY291bnQgKyAxLCBzaXplb2YoKmNtYV9kZmxfdG1wbCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWNtYV9kZmxfZmlsZXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNtYV9hcmVhX2NvdW50OyArK2kpXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBDTUFfREZMX1RNUExfU0laRTsgKytqKSB7XFxuK1xcdFxcdFxcdGNmdCA9IFxcdTAwMjZjbWFfZGZsX2ZpbGVzW2kgKiBDTUFfREZMX1RNUExfU0laRSArIGpdO1xcbitcXHRcXHRcXHQqY2Z0ID0gY21hX2RmbF90bXBsW2pdO1xcbitcXHRcXHRcXHRzbnByaW50ZihjZnQtXFx1MDAzZW5hbWUsIE1BWF9DRlRZUEVfTkFNRSwgXFxcImNtYS4lcy4lc1xcXCIsXFxuK1xcdFxcdFxcdFxcdCBjbWFfZ2V0X25hbWUoXFx1MDAyNmNtYV9hcmVhc1tpXSksXFxuK1xcdFxcdFxcdFxcdCBjbWFfZGZsX3RtcGxbal0ubmFtZSk7XFxuK1xcdFxcdFxcdGNmdC1cXHUwMDNlcHJpdmF0ZSA9IGk7IC8qIGNtYSBhcmVhIGluZGV4IGZvciBjb3VudGVycyBpbiBjYWxsYmFja3MuICovXFxuK1xcdFxcdFxcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KFxcdTAwMjZjZnQtXFx1MDAzZWxvY2tkZXBfa2V5KTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIGNtYV9kZmxfZmlsZXMpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK3N1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX2NtYV9pbml0KTtcXG4rI2VuZGlmIC8qIENPTkZJR19DTUEgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxcbmluZGV4IDk1MmU0NDQ4YmYwNzAuLmI5YTQyOThkNDk0NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxcbkBAIC0xLDUgKzEsNiBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gdGVzdF9jb3JlXFxuK3Rlc3RfY21hX21lbWNnXFxuIHRlc3RfY3B1XFxuIHRlc3RfY3B1c2V0XFxuIHRlc3RfZnJlZXplclxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcXG5pbmRleCBlMDE1ODRjMjE4OWFjLi42MDFkOTMwMTYwYTQyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxcbkBAIC04LDYgKzgsNyBAQCBURVNUX1BST0dTICAgICA6PSB0ZXN0X3N0cmVzcy5zaCB0ZXN0X2NwdXNldF9wcnMuc2ggdGVzdF9jcHVzZXRfdjFfaHAuc2hcXG4gVEVTVF9HRU5fRklMRVMgOj0gd2FpdF9pbm90aWZ5XFxuICMgS2VlcCB0aGUgbGlzdHMgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkXFxuIFRFU1RfR0VOX1BST0dTICA9IHRlc3RfY29yZVxcbitURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NtYV9tZW1jZ1xcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NwdVxcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NwdXNldFxcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2ZyZWV6ZXJcXG5AQCAtMjQsNiArMjUsNyBAQCBpbmNsdWRlIC4uL2xpYi5ta1xcbiBpbmNsdWRlIGxpYi9saWJjZ3JvdXAubWtcXG4gXFxuICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pXFxuKyQoT1VUUFVUKS90ZXN0X2NtYV9tZW1jZzogJChMSUJDR1JPVVBfTylcXG4gJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKVxcbiAkKE9VVFBVVCkvdGVzdF9jcHVzZXQ6ICQoTElCQ0dST1VQX08pXFxuICQoT1VUUFVUKS90ZXN0X2ZyZWV6ZXI6ICQoTElCQ0dST1VQX08pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXFxuaW5kZXggMzlmOTc5NjkwZGQzYi4uMWM5MDM0MDE3NjgyZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xcbkBAIC00LDMgKzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbiBDT05GSUdfQ0dST1VQX1NDSEVEPXlcXG4gQ09ORklHX01FTUNHPXlcXG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XFxuK0NPTkZJR19DTUE9eVxcbitDT05GSUdfRE1BX0NNQT15XFxuK0NPTkZJR19ETUFCVUZfSEVBUFM9eVxcbitDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XFxuK0NPTkZJR19IVUdFVExCRlM9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YmQ0MWQ5YTYxNzdkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jXFxuQEAgLTAsMCArMSw0MDIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZGlyZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWhlYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjZ3JvdXBfdXRpbC5oXFxcIlxcbitcXG4rI2RlZmluZSBDTUFfSEVBUF9ERUZBVUxUX1BBVEhcXHRcXFwiL2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb25cXFwiXFxuKyNkZWZpbmUgQ01BX1JFU0VSVkVEX0NVUlJFTlRcXHRcXFwibWVtb3J5LmNtYS5yZXNlcnZlZC5jdXJyZW50XFxcIlxcbisjZGVmaW5lIENNQV9SRVNFUlZFRF9NQVhcXHRcXFwibWVtb3J5LmNtYS5yZXNlcnZlZC5tYXhcXFwiXFxuK1xcbisjZGVmaW5lIEhVR0VUTEJfQ01BX0NVUlJFTlRcXHRcXFwibWVtb3J5LmNtYS5odWdldGxiMC5jdXJyZW50XFxcIlxcbisjZGVmaW5lIEhVR0VUTEJfQ01BX01BWFxcdFxcXCJtZW1vcnkuY21hLmh1Z2V0bGIwLm1heFxcXCJcXG4rI2RlZmluZSBIVUdFUEFHRVNfRElSXFx0XFx0XFxcIi9zeXMva2VybmVsL21tL2h1Z2VwYWdlc1xcXCJcXG4rXFxuK3N0YXRpYyBpbnQgY21hX2hlYXBfYWxsb2MoaW50IGhlYXBfZmQsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHN0cnVjdCBkbWFfaGVhcF9hbGxvY2F0aW9uX2RhdGEgZGF0YSA9IHtcXG4rXFx0XFx0LmxlbiA9IHNpemUsXFxuK1xcdFxcdC5mZF9mbGFncyA9IE9fUkRXUiB8IE9fQ0xPRVhFQyxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChpb2N0bChoZWFwX2ZkLCBETUFfSEVBUF9JT0NUTF9BTExPQywgXFx1MDAyNmRhdGEpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0dXJuIGRhdGEuZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpXFxuK3tcXG4rXFx0aW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7XFxuK1xcdGludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwO1xcbitcXHRzaXplX3Qgc2l6ZSA9IDRVTCBcXHUwMDNjXFx1MDAzYyAyMDtcXG4rXFx0bG9uZyBiZWZvcmUsIGFmdGVyO1xcbitcXHRjaGFyICpjZztcXG4rXFxuK1xcdGNnID0gY2dfbmFtZShyb290LCBcXFwibWVtY2dfY21hX2NoYXJnZVxcXCIpO1xcbitcXHRpZiAoIWNnKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoY2dfY3JlYXRlKGNnKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGluX2NnID0gMTtcXG4rXFxuK1xcdGhlYXBfZmQgPSBvcGVuKENNQV9IRUFQX0RFRkFVTFRfUEFUSCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xcbitcXHRpZiAoaGVhcF9mZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpO1xcbitcXG4rXFx0YnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7XFxuK1xcdGlmIChidWZfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjYW5ub3QgYWxsb2NhdGUgaW4gQ01BIGhlYXAgKCVtKVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTtcXG4rXFxuK1xcdGlmIChhZnRlciAtIGJlZm9yZSBcXHUwMDNjIChsb25nKXNpemUpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxuK1xcdFxcdFxcdFxcXCJpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIGNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGJlZm9yZSwgYWZ0ZXIpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGNsb3NlKGJ1Zl9mZCk7XFxuK1xcdGJ1Zl9mZCA9IC0xO1xcbitcXG4rXFx0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTtcXG4rXFx0aWYgKCF2YWx1ZXNfY2xvc2UoYmVmb3JlLCBhZnRlciwgMykpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxuK1xcdFxcdFxcdFxcXCJpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIHVuY2hhcmdlOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0YmVmb3JlLCBhZnRlcik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBLU0ZUX1BBU1M7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAoYnVmX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGJ1Zl9mZCk7XFxuK1xcdGlmIChoZWFwX2ZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGhlYXBfZmQpO1xcbitcXG4rXFx0aWYgKGluX2NnKVxcbitcXHRcXHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xcbitcXHRjZ19kZXN0cm95KGNnKTtcXG4rXFx0ZnJlZShjZyk7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdClcXG4re1xcbitcXHRpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTtcXG4rXFx0aW50IHJjID0gS1NGVF9GQUlMLCBpbl9jZyA9IDA7XFxuK1xcdHNpemVfdCBzaXplID0gNFVMIFxcdTAwM2NcXHUwMDNjIDIwO1xcbitcXHRjaGFyICpjZztcXG4rXFxuK1xcdGNnID0gY2dfbmFtZShyb290LCBcXFwibWVtY2dfY21hX2xpbWl0XFxcIik7XFxuK1xcdGlmICghY2cpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmIChjZ19jcmVhdGUoY2cpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0aW5fY2cgPSAxO1xcbitcXG4rXFx0aWYgKGNnX3dyaXRlKGNnLCBDTUFfUkVTRVJWRURfTUFYLCBcXFwiMk1cXFwiKSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IHNldCBDTUEgbGltaXQgKCVtKVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0aGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XFxuK1xcdGlmIChoZWFwX2ZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0YnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7XFxuK1xcdGlmIChidWZfZmQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiQ01BIGxpbWl0IG5vdCBlbmZvcmNlZC5cXFxcblxcXCIpO1xcbitcXHRcXHRjbG9zZShidWZfZmQpO1xcbitcXHR9IGVsc2VcXG4rXFx0XFx0cmMgPSBLU0ZUX1BBU1M7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAoaGVhcF9mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShoZWFwX2ZkKTtcXG4rXFxuK1xcdGlmIChpbl9jZylcXG4rXFx0XFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcXG4rXFx0Y2dfZGVzdHJveShjZyk7XFxuK1xcdGZyZWUoY2cpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbitzdGF0aWMgbG9uZyBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYih2b2lkKVxcbit7XFxuK1xcdERJUiAqZGlyO1xcbitcXHRzdHJ1Y3QgZGlyZW50ICplbnRyeTtcXG4rXFx0bG9uZyBtYXhfc2l6ZSA9IDA7XFxuK1xcbitcXHRkaXIgPSBvcGVuZGlyKEhVR0VQQUdFU19ESVIpO1xcbitcXHRpZiAoIWRpcilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0d2hpbGUgKChlbnRyeSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkge1xcbitcXHRcXHRsb25nIHNpemU7XFxuK1xcbitcXHRcXHRpZiAoc3NjYW5mKGVudHJ5LVxcdTAwM2VkX25hbWUsIFxcXCJodWdlcGFnZXMtJWxka0JcXFwiLCBcXHUwMDI2c2l6ZSkgPT0gMSkge1xcbitcXHRcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIG1heF9zaXplKVxcbitcXHRcXHRcXHRcXHRtYXhfc2l6ZSA9IHNpemU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRjbG9zZWRpcihkaXIpO1xcbitcXG4rXFx0cmV0dXJuIG1heF9zaXplIFxcdTAwM2UgMCA/IG1heF9zaXplIDogLTE7XFxuK31cXG4rXFxuK3N0YXRpYyBsb25nIHJlYWRfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoKVxcbit7XFxuK1xcdEZJTEUgKmY7XFxuK1xcdGxvbmcgdmFsID0gLTE7XFxuK1xcbitcXHRmID0gZm9wZW4ocGF0aCwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmIChmc2NhbmYoZiwgXFxcIiVsZFxcXCIsIFxcdTAwMjZ2YWwpICE9IDEpXFxuK1xcdFxcdHZhbCA9IC0xO1xcbitcXHRmY2xvc2UoZik7XFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgd3JpdGVfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoLCBsb25nIHZhbClcXG4re1xcbitcXHRGSUxFICpmO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRmID0gZm9wZW4ocGF0aCwgXFxcIndcXFwiKTtcXG4rXFx0aWYgKCFmKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJjID0gZnByaW50ZihmLCBcXFwiJWxkXFxcIiwgdmFsKTtcXG4rXFx0ZmNsb3NlKGYpO1xcbitcXHRyZXR1cm4gcmMgXFx1MDAzYyAwID8gLTEgOiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpXFxuK3tcXG4rXFx0aW50IHJjID0gS1NGVF9TS0lQLCBpbl9jZyA9IDA7XFxuK1xcdGxvbmcgaHBhZ2Vfc2l6ZV9rYiwgaHBhZ2Vfc2l6ZV9ieXRlcztcXG4rXFx0bG9uZyBvcmlnX25yID0gLTEsIG5ld19uciwgYmVmb3JlLCBhZnRlcjtcXG4rXFx0Y2hhciBucl9wYXRoW1BBVEhfTUFYXTtcXG4rXFx0Y2hhciAqY2c7XFxuK1xcbitcXHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcXG4rXFx0aWYgKGhwYWdlX3NpemVfa2IgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJubyBodWdlcGFnZSBzaXplIGZvdW5kXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIEtTRlRfU0tJUDtcXG4rXFx0fVxcbitcXHRocGFnZV9zaXplX2J5dGVzID0gaHBhZ2Vfc2l6ZV9rYiAqIDEwMjQ7XFxuK1xcbitcXHRzbnByaW50Zihucl9wYXRoLCBzaXplb2YobnJfcGF0aCksXFxuK1xcdFxcdCBIVUdFUEFHRVNfRElSIFxcXCIvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlc1xcXCIsIGhwYWdlX3NpemVfa2IpO1xcbitcXG4rXFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFxcXCJtZW1jZ19odWdldGxiX2NtYV9jaGFyZ2VcXFwiKTtcXG4rXFx0aWYgKCFjZylcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKGNnX2NyZWF0ZShjZykpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRpbl9jZyA9IDE7XFxuK1xcbitcXHRpZiAoY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImh1Z2V0bGIgQ01BIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdG9yaWdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7XFxuK1xcdGlmIChvcmlnX25yIFxcdTAwM2MgMCkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IHJlYWQgJXNcXFxcblxcXCIsIG5yX3BhdGgpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XFxuK1xcbitcXHRpZiAod3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICsgMSkpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhbm5vdCB3cml0ZSAlc1xcXFxuXFxcIiwgbnJfcGF0aCk7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0bmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xcbitcXHRpZiAobmV3X25yIFxcdTAwM2M9IG9yaWdfbnIpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBhIGh1Z2VwYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRyYyA9IEtTRlRfRkFJTDtcXG4rXFx0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpO1xcbitcXG4rXFx0aWYgKGFmdGVyIC0gYmVmb3JlIFxcdTAwM2MgaHBhZ2Vfc2l6ZV9ieXRlcykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXG4rXFx0XFx0XFx0XFxcImh1Z2V0bGIgQ01BIGNvdW50ZXIgbm90IGNoYXJnZWQ6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkIGV4cGVjdGVkICslbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGJlZm9yZSwgYWZ0ZXIsIGhwYWdlX3NpemVfYnl0ZXMpO1xcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7XFxuK1xcbitcXHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XFxuK1xcdGlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcbitcXHRcXHRcXHRcXFwiaHVnZXRsYiBDTUEgY291bnRlciBub3QgdW5jaGFyZ2VkOiBiZWZvcmU9JWxkIGFmdGVyPSVsZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0YmVmb3JlLCBhZnRlcik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0cmMgPSBLU0ZUX1BBU1M7XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAob3JpZ19uciBcXHUwMDNlPSAwKVxcbitcXHRcXHR3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpO1xcbitcXG4rXFx0aWYgKGluX2NnKVxcbitcXHRcXHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xcbitcXHRjZ19kZXN0cm95KGNnKTtcXG4rXFx0ZnJlZShjZyk7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdGVzdF9odWdldGxiX2NtYV9saW1pdChjb25zdCBjaGFyICpyb290KVxcbit7XFxuK1xcdGludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwO1xcbitcXHRsb25nIGhwYWdlX3NpemVfa2I7XFxuK1xcdGxvbmcgb3JpZ19uciwgbmV3X25yO1xcbitcXHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xcbitcXHRjaGFyICpjZztcXG4rXFxuK1xcdGhwYWdlX3NpemVfa2IgPSBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYigpO1xcbitcXHRpZiAoaHBhZ2Vfc2l6ZV9rYiBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIm5vIGh1Z2VwYWdlIHNpemUgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gS1NGVF9TS0lQO1xcbitcXHR9XFxuK1xcbitcXHRzbnByaW50Zihucl9wYXRoLCBzaXplb2YobnJfcGF0aCksXFxuK1xcdFxcdCBIVUdFUEFHRVNfRElSIFxcXCIvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlc1xcXCIsIGhwYWdlX3NpemVfa2IpO1xcbitcXG4rXFx0Y2cgPSBjZ19uYW1lKHJvb3QsIFxcXCJtZW1jZ19odWdldGxiX2NtYV9saW1pdFxcXCIpO1xcbitcXHRpZiAoIWNnKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRpZiAoY2dfY3JlYXRlKGNnKSlcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXG4rXFx0aWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdGluX2NnID0gMTtcXG4rXFxuK1xcdGlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX01BWCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY2dfd3JpdGUoY2csIEhVR0VUTEJfQ01BX01BWCwgXFxcIjBcXFwiKSkge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IHNldCBodWdldGxiIENNQSBsaW1pdFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0b3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcXG4rXFx0aWYgKG9yaWdfbnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjYW5ub3QgcmVhZCAlc1xcXFxuXFxcIiwgbnJfcGF0aCk7XFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICsgMSk7XFxuK1xcdG5ld19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcXG4rXFxuK1xcdHJjID0gS1NGVF9GQUlMO1xcbitcXHRpZiAobmV3X25yIFxcdTAwM2Ugb3JpZ19ucikge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiaHVnZXRsYiBDTUEgbGltaXQgbm90IGVuZm9yY2VkXFxcXG5cXFwiKTtcXG4rXFx0XFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmMgPSBLU0ZUX1BBU1M7XFxuK1xcdH1cXG4rXFxuK2NsZWFudXA6XFxuK1xcdGlmIChpbl9jZylcXG4rXFx0XFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcXG4rXFx0Y2dfZGVzdHJveShjZyk7XFxuK1xcdGZyZWUoY2cpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbisjZGVmaW5lIFQoeCkgeyB4LCAjeCB9XFxuK3N0cnVjdCBjbWFfbWVtY2dfdGVzdHMge1xcbitcXHRpbnQgKCpmbikoY29uc3QgY2hhciAqcm9vdCk7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK30gdGVzdHNbXSA9IHtcXG4rXFx0VCh0ZXN0X2NtYV9jaGFyZ2UpLFxcbitcXHRUKHRlc3RfY21hX2xpbWl0KSxcXG4rXFx0VCh0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZSksXFxuK1xcdFQodGVzdF9odWdldGxiX2NtYV9saW1pdCksXFxuK307XFxuKyN1bmRlZiBUXFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbit7XFxuK1xcdGNoYXIgcm9vdFtQQVRIX01BWF07XFxuK1xcdGludCBoYXNfbWVtb3J5X2NtYV9hY2MsIGk7XFxuK1xcbitcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTtcXG4rXFxuK1xcdGhhc19tZW1vcnlfY21hX2FjYyA9IHByb2NfbW91bnRfY29udGFpbnMoXFxcIm1lbW9yeV9jbWFfYWNjb3VudGluZ1xcXCIpO1xcbitcXHRpZiAoaGFzX21lbW9yeV9jbWFfYWNjIFxcdTAwM2MgMClcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcImNhbm5vdCBxdWVyeSBjZ3JvdXAgbW91bnQgb3B0aW9uLlxcXFxuXFxcIik7XFxuK1xcdGVsc2UgaWYgKCFoYXNfbWVtb3J5X2NtYV9hY2MpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJDTUEgYWNjb3VudGluZyBpcyBkaXNhYmxlZC5cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJjZ3JvdXBmcyBpcyBub3QgYXZhaWxhYmxlLlxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgXFxcImNncm91cC5jb250cm9sbGVyc1xcXCIsIFxcXCJtZW1vcnlcXFwiKSlcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIm1lbW9yeSBjb250cm9sbGVyIGlzIG5vdCBhdmFpbGFibGUgKENPTkZJR19DR1JPVVBfTUVNQ0c/KVxcXFxuXFxcIik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7ICsraSkge1xcbitcXHRcXHRzd2l0Y2ggKHRlc3RzW2ldLmZuKHJvb3QpKSB7XFxuK1xcdFxcdGNhc2UgS1NGVF9QQVNTOlxcbitcXHRcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcIiVzXFxcXG5cXFwiLCB0ZXN0c1tpXS5uYW1lKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgS1NGVF9TS0lQOlxcbitcXHRcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXFxcIiVzXFxcXG5cXFwiLCB0ZXN0c1tpXS5uYW1lKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcXFwiJXNcXFxcblxcXCIsIHRlc3RzW2ldLm5hbWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRrc2Z0X2ZpbmlzaGVkKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUzNGE5NWVmNWUwNzdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaFxcbkBAIC0wLDAgKzEsMTk3IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIENvcHlyaWdodCAoYykgMjAyNiBSZWQgSGF0LCBJbmMuXFxuKyNcXG4rIyBSdW4gY2dyb3VwIG1lbW9yeSBjb250cm9sbGVyIHNlbGZ0ZXN0cyBpbnNpZGUgYSB2aXJ0bWUtbmcgVk1cXG4rIyBEZXBlbmRlbmNpZXM6XFxuKyNcXHRcXHQqIHZpcnRtZS1uZ1xcbisjXFx0XFx0KiBidXN5Ym94LXN0YXRpYyAodXNlZCBieSB2aXJ0bWUtbmcpXFxuKyNcXHRcXHQqIHFlbXVcXHQodXNlZCBieSB2aXJ0bWUtbmcpXFxuK1xcbitzZXQgLWV1byBwaXBlZmFpbFxcbitcXG4rcmVhZG9ubHkgU0NSSVBUX0RJUj1cXFwiJChjZCAtUCAtLSBcXFwiJChkaXJuYW1lIC0tIFxcXCIke0JBU0hfU09VUkNFWzBdfVxcXCIpXFxcIiBcXHUwMDI2XFx1MDAyNiBwd2QgLVApXFxcIlxcbityZWFkb25seSBLRVJORUxfQ0hFQ0tPVVQ9XFxcIiQocmVhbHBhdGggXFxcIiR7U0NSSVBUX0RJUn1cXFwiLy4uLy4uLy4uLy4uLylcXFwiXFxuK1xcbitzb3VyY2UgXFxcIiR7U0NSSVBUX0RJUn1cXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK3JlYWRvbmx5IFNTSF9HVUVTVF9QT1JUPVxcXCIke1NTSF9HVUVTVF9QT1JUOi0yMn1cXFwiXFxuK3JlYWRvbmx5IFdBSVRfUEVSSU9EPTNcXG4rcmVhZG9ubHkgV0FJVF9QRVJJT0RfTUFYPTgwXFxuK3JlYWRvbmx5IFdBSVRfVE9UQUw9JCgoV0FJVF9QRVJJT0QgKiBXQUlUX1BFUklPRF9NQVgpKVxcbityZWFkb25seSBRRU1VX1BJREZJTEU9XFxcIiQobWt0ZW1wIC90bXAvcWVtdV9tZW1jZ192bXRlc3RfWFhYWC5waWQpXFxcIlxcbityZWFkb25seSBRRU1VX09QVFM9XFxcIiAtLXBpZGZpbGUgJHtRRU1VX1BJREZJTEV9IFxcXCJcXG4rXFxuK0JVSUxEPTBcXG4rUUVNVT1cXFwicWVtdS1zeXN0ZW0tJCh1bmFtZSAtbSlcXFwiXFxuK1ZFUkJPU0U9MFxcbitTSEVMTF9NT0RFPTBcXG4rR1VFU1RfVFJFRT1cXFwiJHtHVUVTVF9UUkVFOi0kS0VSTkVMX0NIRUNLT1VUfVxcXCJcXG4rXFxuK3VzYWdlKCkge1xcbitcXHRjYXQgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJDAgW09QVElPTlNdXFxuKyAgICAtYiAgICAgICAgQnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgYmVmb3JlIGJvb3RpbmdcXG4rICAgIC1xIFxcdTAwM2NxZW11XFx1MDAzZSBRRU1VIGJpbmFyeS9wYXRoIChkZWZhdWx0OiAkUUVNVSlcXG4rICAgIC1zICAgICAgICBTdGFydCBpbnRlcmFjdGl2ZSBzaGVsbCBpbiBWTVxcbisgICAgLXYgICAgICAgIFZlcmJvc2Ugb3V0cHV0ICh2bmcgYm9vdCBsb2dzIG9uIHN0ZG91dClcXG4rRU9GXFxuK1xcdGV4aXQgMVxcbit9XFxuK1xcbitkaWUoKSB7XFxuK1xcdGVjaG8gXFxcIiQqXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0ZXhpdCBcXFwiJHtLU0ZUX0ZBSUx9XFxcIlxcbit9XFxuK1xcbitjbGVhbnVwKCkge1xcbitcXHRpZiBbWyAtcyBcXFwiJFFFTVVfUElERklMRVxcXCIgXV07IHRoZW5cXG4rXFx0XFx0cGtpbGwgLVNJR1RFUk0gLUYgXFxcIiRRRU1VX1BJREZJTEVcXFwiIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSB8fCB0cnVlXFxuK1xcdGZpXFxuK1xcbitcXHRpZiBbWyAtZSBcXFwiJFFFTVVfUElERklMRVxcXCIgXV07IHRoZW5cXG4rXFx0XFx0cm0gLWYgXFxcIiRRRU1VX1BJREZJTEVcXFwiXFxuK1xcdGZpXFxuK31cXG4rXFxuK3ZtX3NzaCgpIHtcXG4rXFx0c3RkYnVmIC1vTCBzc2ggLXEgXFxcXFxcbitcXHRcXHQtRiBcXFwiJEhPTUUvLmNhY2hlL3ZpcnRtZS1uZy8uc3NoL3ZpcnRtZS1uZy1zc2guY29uZlxcXCIgXFxcXFxcbitcXHRcXHQtbCByb290IFxcXCJ2aXJ0bWUtbmclJFNTSF9HVUVTVF9QT1JUXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIkQFxcXCJcXG4rfVxcbitcXG4rY2hlY2tfZGVwcygpIHtcXG4rXFx0Zm9yIGRlcCBpbiB2bmcgXFxcIiRRRU1VXFxcIiBidXN5Ym94IHBraWxsIHNzaDsgZG9cXG4rXFx0XFx0aWYgISBjb21tYW5kIC12IFxcXCIkZGVwXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwic2tpcDogZGVwZW5kZW5jeSAkZGVwIG5vdCBmb3VuZFxcXCJcXG4rXFx0XFx0XFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCJcXG4rXFx0XFx0ZmlcXG4rXFx0ZG9uZVxcbit9XFxuK1xcbitoYW5kbGVfYnVpbGQoKSB7XFxuK1xcdGlmIFtbICEgXFxcIiRCVUlMRFxcXCIgLWVxIDEgXV07IHRoZW5cXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcbitcXHRpZiBbWyAhIC1kIFxcXCIkS0VSTkVMX0NIRUNLT1VUXFxcIiBdXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCItYiByZXF1aXJlcyAkMCB0byBiZSBjYWxsZWQgZnJvbSB0aGUga2VybmVsIHNvdXJjZSB0cmVlXFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZXhpdCAxXFxuK1xcdGZpXFxuK1xcbitcXHRwdXNoZCBcXFwiJEtFUk5FTF9DSEVDS09VVFxcXCIgXFx1MDAyNlxcdTAwM2UvZGV2L251bGxcXG4rXFxuK1xcdGlmICEgdm5nIC0ta2NvbmZpZyAtLWNvbmZpZyBcXFwiJFNDUklQVF9ESVJcXFwiL2NvbmZpZzsgdGhlblxcbitcXHRcXHRkaWUgXFxcImZhaWxlZCB0byBnZW5lcmF0ZSAuY29uZmlnIGZvciBrZXJuZWwgc291cmNlIHRyZWUgKCRLRVJORUxfQ0hFQ0tPVVQpXFxcIlxcbitcXHRmaVxcbitcXG4rXFx0aWYgISBtYWtlIC1qXFxcIiQobnByb2MpXFxcIjsgdGhlblxcbitcXHRcXHRkaWUgXFxcImZhaWxlZCB0byBidWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcXFwiXFxuK1xcdGZpXFxuK1xcbitcXHRwb3BkIFxcdTAwMjZcXHUwMDNlL2Rldi9udWxsXFxuK31cXG4rXFxuK3ZtX3N0YXJ0KCkge1xcbitcXHRsb2NhbCBsb2dmaWxlPS9kZXYvbnVsbFxcbitcXHRsb2NhbCB2ZXJib3NlX29wdD1cXFwiXFxcIlxcbitcXHRsb2NhbCBrZXJuZWxfb3B0PVxcXCJcXFwiXFxuK1xcbitcXHRpZiBbWyBcXFwiJFZFUkJPU0VcXFwiIC1lcSAxIF1dOyB0aGVuXFxuK1xcdFxcdHZlcmJvc2Vfb3B0PVxcXCItLXZlcmJvc2VcXFwiXFxuK1xcdFxcdGxvZ2ZpbGU9L2Rldi9zdGRvdXRcXG4rXFx0ZmlcXG4rXFxuK1xcdGlmIFtbIFxcXCIkQlVJTERcXFwiIC1lcSAxIF1dOyB0aGVuXFxuK1xcdFxcdGtlcm5lbF9vcHQ9XFxcIiR7S0VSTkVMX0NIRUNLT1VUfVxcXCJcXG4rXFx0ZmlcXG4rXFxuK1xcdHZuZyBcXFxcXFxuK1xcdFxcdC0tcnVuIFxcXFxcXG4rXFx0XFx0JHtrZXJuZWxfb3B0fSBcXFxcXFxuK1xcdFxcdCR7dmVyYm9zZV9vcHR9IFxcXFxcXG4rXFx0XFx0LS1xZW11LW9wdHM9XFxcIiRRRU1VX09QVFNcXFwiIFxcXFxcXG4rXFx0XFx0LS1xZW11PVxcXCIkKGNvbW1hbmQgLXYgXFxcIiRRRU1VXFxcIilcXFwiIFxcXFxcXG4rXFx0XFx0LS11c2VyIHJvb3QgXFxcXFxcbitcXHRcXHQtLXNzaCBcXFwiJFNTSF9HVUVTVF9QT1JUXFxcIiBcXFxcXFxuK1xcdFxcdC0tbWVtb3J5IDNHIFxcXFxcXG4rXFx0XFx0LS1hcHBlbmQgXFxcImNtYT02NE0gaHVnZXRsYl9jbWE9MUcgaHVnZXRsYl9jbWFfb25seT0xXFxcIiBcXFxcXFxuK1xcdFxcdC0tcncgXFx1MDAyNlxcdTAwM2VcXFwiJGxvZ2ZpbGVcXFwiIFxcdTAwMjZcXG4rXFxuK1xcdGxvY2FsIHZuZ19waWQ9JCFcXG4rXFx0bG9jYWwgZWxhcHNlZD0wXFxuK1xcbitcXHR3aGlsZSBbWyAhIC1zIFxcXCIkUUVNVV9QSURGSUxFXFxcIiBdXTsgZG9cXG4rXFx0XFx0a2lsbCAtMCBcXFwiJHZuZ19waWRcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IFxcXFxcXG4rXFx0XFx0XFx0ZGllIFxcXCJ2bmcgZXhpdGVkIGVhcmx5OyBmYWlsZWQgdG8gYm9vdCBWTVxcXCJcXG4rXFx0XFx0W1sgXFxcIiRlbGFwc2VkXFxcIiAtZ2UgXFxcIiRXQUlUX1RPVEFMXFxcIiBdXSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuK1xcdFxcdFxcdGRpZSBcXFwidGltZWQgb3V0IHdhaXRpbmcgZm9yIFZNIGJvb3RcXFwiXFxuK1xcdFxcdHNsZWVwIDFcXG4rXFx0XFx0ZWxhcHNlZD0kKChlbGFwc2VkICsgMSkpXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rdm1fd2FpdF9mb3Jfc3NoKCkge1xcbitcXHRsb2NhbCBpPTBcXG4rXFx0d2hpbGUgdHJ1ZTsgZG9cXG4rXFx0XFx0dm1fc3NoIC0tIHRydWUgXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0XFx0aT0kKChpICsgMSkpXFxuK1xcdFxcdFtbIFxcXCIke2l9XFxcIiAtZ3QgXFxcIiRXQUlUX1BFUklPRF9NQVhcXFwiIF1dIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4rXFx0XFx0XFx0ZGllIFxcXCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgZ3Vlc3Qgc3NoXFxcIlxcbitcXHRcXHRzbGVlcCBcXFwiJFdBSVRfUEVSSU9EXFxcIlxcbitcXHRkb25lXFxuK31cXG4rXFxuK2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHtcXG4rXFx0dm1fc3NoIC0tIFxcXCJncmVwIC1xIG1lbW9yeSAvc3lzL2ZzL2Nncm91cC9jZ3JvdXAuY29udHJvbGxlcnNcXFwiIFxcXFxcXG4rXFx0XFx0fHwgZGllIFxcXCJtZW1vcnkgY29udHJvbGxlciBub3QgYXZhaWxhYmxlIChDT05GSUdfTUVNQ0c/KVxcXCJcXG4rXFx0dm1fc3NoIC0tIFxcXCJbWyAtZSAvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiBdXVxcXCIgXFxcXFxcbitcXHRcXHR8fCBkaWUgXFxcIkNNQSBoZWFwIG5vdCBhdmFpbGFibGUgKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BPyBjbWE9IGNtZGxpbmU/KVxcXCJcXG4rfVxcbitcXG4rc2V0dXBfZ3Vlc3RfY21hX2FjY291bnRpbmcoKSB7XFxuK1xcdHZtX3NzaCAtLSBcXFwibW91bnQgLW8gcmVtb3VudCxtZW1vcnlfY21hX2FjY291bnRpbmcgL3N5cy9mcy9jZ3JvdXBcXFwiIFxcXFxcXG4rXFx0XFx0fHwgZGllIFxcXCJmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeV9jbWFfYWNjb3VudGluZ1xcXCJcXG4rXFx0dm1fc3NoIC0tIFxcXCJlY2hvICttZW1vcnkgXFx1MDAzZSAvc3lzL2ZzL2Nncm91cC9jZ3JvdXAuc3VidHJlZV9jb250cm9sXFxcIiBcXFxcXFxuK1xcdFxcdHx8IGRpZSBcXFwiZmFpbGVkIHRvIGVuYWJsZSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4rfVxcbitcXG4rcnVuX3Rlc3QoKSB7XFxuK1xcdHZtX3NzaCAtLSBcXFwiY2QgJyRHVUVTVF9UUkVFJyBcXHUwMDI2XFx1MDAyNiBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwXFxcIlxcbitcXHR2bV9zc2ggLS0gXFxcImNkICckR1VFU1RfVFJFRScgXFx1MDAyNlxcdTAwMjYgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cyBUQVJHRVRTPWNncm91cCBydW5fdGVzdHNcXFwiXFxuK31cXG4rXFxuK3doaWxlIGdldG9wdHMgXFxcIjpodnE6c2JcXFwiIG9wdDsgZG9cXG4rXFx0Y2FzZSBcXFwiJG9wdFxcXCIgaW5cXG4rXFx0dikgVkVSQk9TRT0xIDs7XFxuK1xcdHEpIFFFTVU9XFxcIiR7T1BUQVJHfVxcXCIgOztcXG4rXFx0YikgQlVJTEQ9MSA7O1xcbitcXHRzKSBTSEVMTF9NT0RFPTEgOztcXG4rXFx0aHwqKSB1c2FnZSA7O1xcbitcXHRlc2FjXFxuK2RvbmVcXG4rXFxuK3RyYXAgY2xlYW51cCBFWElUXFxuK1xcbitjaGVja19kZXBzXFxuK2hhbmRsZV9idWlsZFxcbitlY2hvIFxcXCJCb290aW5nIHZpcnRtZS1uZyBWTS4uLlxcXCJcXG4rdm1fc3RhcnRcXG4rdm1fd2FpdF9mb3Jfc3NoXFxuK2VjaG8gXFxcIlZNIGlzIHJlYWNoYWJsZSB2aWEgU1NILlxcXCJcXG4rXFxuK2lmIFtbIFxcXCIkU0hFTExfTU9ERVxcXCIgLWVxIDEgXV07IHRoZW5cXG4rXFx0ZWNobyBcXFwiU3RhcnRpbmcgaW50ZXJhY3RpdmUgc2hlbGwgaW4gVk0uIEV4aXQgdG8gc3RvcCBWTS5cXFwiXFxuK1xcdHZtX3NzaCAtdCAtLSBcXFwiY2QgJyRHVUVTVF9UUkVFJyBcXHUwMDI2XFx1MDAyNiBleGVjIGJhc2ggLS1ub3Byb2ZpbGUgLS1ub3JjXFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9QQVNTXFxcIlxcbitmaVxcbitcXG4rY2hlY2tfZ3Vlc3RfcmVxdWlyZW1lbnRzXFxuK3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nXFxuK1xcbitlY2hvIFxcXCJSdW5uaW5nIGNncm91cCBzZWxmdGVzdHMgaW4gVk0uLi5cXFwiXFxuK3J1bl90ZXN0XFxuK2VjaG8gXFxcIlBBU1M6IGNncm91cCBzZWxmdGVzdHMgY29tcGxldGVkXFxcIlxcbitleGl0IFxcXCIkS1NGVF9QQVNTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjo0MC40MDkyMDAzNDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozOTk3NzQ3MTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJETUFCVUZfSEVBUFNcIixcbiAgICBcIkRNQUJVRl9IRUFQU19DTUFcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2NtYVwiLFxuICAgIFwibWVtX2Nncm91cF91bmNoYXJnZV9jbWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2Agd2hpY2ggZW5hYmxlcyBhY2NvdW50aW5nIG9mIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJ3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UuIEl0IGFkZHMgbmV3IGNvcmUgZnVuY3Rpb25zIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgIHRvIGhhbmRsZSB0aGUgYWNjb3VudGluZyBkdXJpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDTUEgYWxsb2NhdGlvbnMgKGUuZy4sIHVzaW5nIERNQS1CVUYgaGVhcHMgb3IgaHVnZXRsYikgd2hlbiB0aGUgbW91bnQgb3B0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBhbmQgQ01BIHN1YnN5c3RlbXMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MzhkZTc0MTgxM2ViNDc2YTlkNTIwY2ZkMDk2Y2ExYTBhMTUxODQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTk6MTI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbmluZGV4IGFlZDE5NWE3MWNiZjEuLjM5ODcxYTdhMDhhOGQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuQEAgLTI0Niw2ICsyNDYsMjYgQEAgY2dyb3VwIHYyIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG1vdW50IG9wdGlvbnMuXG4gICAgICAgICAgIHdpbGwgbm90IGJlIHRyYWNrZWQgYnkgdGhlIG1lbW9yeSBjb250cm9sbGVyIChldmVuIGlmIGNncm91cFxuICAgICAgICAgICB2MiBpcyByZW1vdW50ZWQgbGF0ZXIgb24pLlxuIFxuKyAgbWVtb3J5X2NtYV9hY2NvdW50aW5nXG4rICAgICAgICBDb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCdzIG92ZXJhbGwgbWVtb3J5IHVzYWdlIGZvclxuKyAgICAgICAgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBhbmQgZXhwb3NlIHBlci1DTUEtYXJlYSB1c2FnZSBjb3VudGVycy4gVGhpc1xuKyAgICAgICAgYmVoYXZpb3IgaXMgb3B0LWluLCBzbyBhcyB0byBub3QgY2F1c2UgcmVncmVzc2lvbiBvbiBleGlzdGluZyBzZXR1cHMuXG4rXG4rICAgICAgICBBIGZldyBjYXZlYXRzIHRvIGtlZXAgaW4gbWluZDpcbitcbisgICAgICAgICogQ01BIGFyZWFzIGFyZSByZXNlcnZlZCBhdCBib290IHRpbWUsIG1lbW9yeSBpcyBvbmx5IGNoYXJnZWQgdG8gYVxuKyAgICAgICAgICBjZ3JvdXAgd2hlbiBhIENNQSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCBvbiBpdHMgYmVoYWxmLlxuKyAgICAgICAgKiBDTUEgcGFnZXMgYWxsb2NhdGVkIHdoaWxlIHRoaXMgb3B0aW9uIGlzIG5vdCBlbmFibGVkIHdpbGwgbm90IGJlXG4rICAgICAgICAgIHRyYWNrZWQgYnkgdGhlIG1lbW9yeSBjb250cm9sbGVyLCBldmVuIGlmIGNncm91cCB2MiBpcyByZW1vdW50ZWRcbisgICAgICAgICAgbGF0ZXIgb24gd2l0aCB0aGlzIG9wdGlvbi4gQ2hhcmdlcyBoYXBwZW4gYXQgYWxsb2NhdGlvbi5cbisgICAgICAgICogQ01BIGFsbG9jYXRpb25zIGFyZSBjaGFyZ2VkIGJvdGggdG8gdGhlIGNncm91cCdzIG1lbW9yeSBjb3VudGVyXG4rICAgICAgICAgIChsaW1pdGVkIGJ5IG1lbW9yeS5tYXgpIGFuZCB0aGUgcGVyLWFyZWEgQ01BIGNvdW50ZXIgKGxpbWl0ZWQgYnlcbisgICAgICAgICAgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heCkuIEhpdHRpbmcgZWl0aGVyIGxpbWl0IGNhbiBjYXVzZSBhbiBhbGxvY2F0aW9uXG4rICAgICAgICAgIHRvIGZhaWwuIElmIENNQSB1c2FnZSBwdXNoZXMgdGhlIGNncm91cCBvdmVyIG1lbW9yeS5oaWdoIG9yXG4rICAgICAgICAgIG1lbW9yeS5tYXgsIHRoZSBtZW1vcnkgY29udHJvbGxlciB3aWxsIGF0dGVtcHQgdG8gcmVjbGFpbSBvdGhlclxuKyAgICAgICAgICBtZW1vcnkgb25seS4gQ01BIG1lbW9yeSBjaGFyZ2VkIHRvIHRoZSBjZ3JvdXAgaXMgbm90IHJlY2xhaW1hYmxlLlxuKyAgICAgICAgICBMaW1pdHMgc2hvdWxkIGJlIHNpemVkIHRvIGFjY29tbW9kYXRlIHRoZSBleHBlY3RlZCBDTUEgcHJlc3N1cmUuXG4rXG4gICBwaWRzX2xvY2FsZXZlbnRzXG4gICAgICAgICBUaGUgb3B0aW9uIHJlc3RvcmVzIHYxLWxpa2UgYmVoYXZpb3Igb2YgcGlkcy5ldmVudHM6bWF4LCB0aGF0IGlzIG9ubHlcbiAgICAgICAgIGxvY2FsIChpbnNpZGUgY2dyb3VwIHByb3BlcikgZm9yayBmYWlsdXJlcyBhcmUgY291bnRlZC4gV2l0aG91dCB0aGlzXG5AQCAtMTkwOCw2ICsxOTI4LDIxIEBAIFRoZSBmb2xsb3dpbmcgbmVzdGVkIGtleXMgYXJlIGRlZmluZWQuXG4gXHRUaGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdCBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgYW5kIHN3YXBwaW5nXG4gXHRpcyBhbGxvd2VkIHVubGVzcyBtZW1vcnkuc3dhcC5tYXggaXMgc2V0IHRvIDAuXG4gXG4rICBtZW1vcnkuY21hLlx1MDAzY2FyZWFcdTAwM2UuY3VycmVudFxuKyAgICAgICAgQSByZWFkLW9ubHkgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFx1MDAzY2FyZWFcdTAwM2VcbisgICAgICAgIGlzIHRoZSBDTUEgYXJlYSBuYW1lIChlLmcuIFwicmVzZXJ2ZWRcIiBmb3IgdGhlIGRlZmF1bHQgRE1BIENNQSBhcmVhKS5cbitcbisgICAgICAgIFRoZSB0b3RhbCBhbW91bnQgb2YgQ01BIG1lbW9yeSBjdXJyZW50bHkgY2hhcmdlZCB0byB0aGUgY2dyb3VwIGZvciB0aGVcbisgICAgICAgIGdpdmVuIENNQSBhcmVhLiBPbmx5IGFjY291bnRlZCB3aGVuIG1lbW9yeV9jbWFfYWNjb3VudGluZyBpcyBlbmFibGVkLlxuK1xuKyAgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heFxuKyAgICAgICAgQSByZWFkLXdyaXRlIHNpbmdsZSB2YWx1ZSBmaWxlIHdoaWNoIGV4aXN0cyBvbiBub24tcm9vdCBjZ3JvdXBzLiBUaGVcbisgICAgICAgIGRlZmF1bHQgaXMgXCJtYXhcIi5cbitcbisgICAgICAgIENNQSB1c2FnZSBoYXJkIGxpbWl0IGZvciB0aGUgZ2l2ZW4gYXJlYS4gSWYgYSBjZ3JvdXAncyBDTUEgdXNhZ2UgZm9yXG4rICAgICAgICB0aGlzIGFyZWEgZXhjZWVkcyB0aGlzIGxpbWl0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZhaWwuIE9ubHkgZW5mb3JjZWRcbisgICAgICAgIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuXG4rXG4gICBtZW1vcnkucHJlc3N1cmVcbiBcdEEgcmVhZC1vbmx5IG5lc3RlZC1rZXllZCBmaWxlLlxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaCBiL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaFxuaW5kZXggZGUyY2Q2MjM4YzJhZS4uMTVmM2Y3MTEwYzViMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLWRlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG5AQCAtMTI5LDYgKzEyOSwxMSBAQCBlbnVtIHtcbiBcdCAqIEVuYWJsZSBsZWdhY3kgbG9jYWwgcGlkcy5ldmVudHMuXG4gXHQgKi9cbiBcdENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUyA9ICgxIFx1MDAzY1x1MDAzYyAyMCksXG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIGNtYSBhY2NvdW50aW5nIGZvciB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuXG4rXHQgKi9cbitcdENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcgPSAoMSBcdTAwM2NcdTAwM2MgMjEpLFxuIH07XG4gXG4gLyogY2Z0eXBlLVx1MDAzZWZsYWdzICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbWEuaCBiL2luY2x1ZGUvbGludXgvY21hLmhcbmluZGV4IDg1NTVkMzhhOTdiMWEuLjE2ZTIxMzY0MjFiNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NtYS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2NtYS5oXG5AQCAtNDksMTIgKzQ5LDEyIEBAIGV4dGVybiBpbnQgY21hX2luaXRfcmVzZXJ2ZWRfbWVtKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4gXHRcdFx0XHRcdHN0cnVjdCBjbWEgKipyZXNfY21hKTtcbiBleHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcbiBcdFx0XHQgICAgICBib29sIG5vX3dhcm4pO1xuLWV4dGVybiBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KTtcbitleHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7XG4gXG4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW4oc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuIFx0XHR1bnNpZ25lZCBpbnQgYWxpZ24sIGJvb2wgbm9fd2Fybik7XG4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuLWJvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuK2Jvb2wgY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuIFx0XHR1bnNpZ25lZCBsb25nIGNvdW50KTtcbiBcbiBleHRlcm4gaW50IGNtYV9mb3JfZWFjaF9hcmVhKGludCAoKml0KShzdHJ1Y3QgY21hICpjbWEsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA4MTcwYmI4MDY2YTIyLi44MDFmYmRlOTQxMzdiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMzIwLDYgKzMyMCwxMCBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXHRzcGlubG9ja190IGV2ZW50X2xpc3RfbG9jaztcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG4gXG4rI2lmZGVmIENPTkZJR19DTUFcbitcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNtYV9jb3VudGVycztcbisjZW5kaWYgLyogQ09ORklHX0NNQSAqL1xuK1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5vZGVpbmZvW107XG4gfTtcbiBcbkBAIC02NjIsNiArNjY2LDExIEBAIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7XG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuIFxuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4rXHRcdFx0ICBzdHJ1Y3QgY21hICpjbWEpO1xuK3ZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgY21hICpjbWEpO1xuK1xuIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIC8qKlxuQEAgLTExNjAsNiArMTE2OSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4rXHRcdFx0XHRcdHN0cnVjdCBjbWEgKmNtYSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGNvdW50LCBzdHJ1Y3QgY21hICpjbWEpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcbmluZGV4IGI1YjQ2MWQ0NDE4YjEuLjEyMTg0Zjg1YWQxMDAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jXG4rKysgYi9rZXJuZWwvY2dyb3VwL2Nncm91cC5jXG5AQCAtMTk4NSw2ICsxOTg1LDcgQEAgZW51bSBjZ3JvdXAyX3BhcmFtIHtcbiBcdE9wdF9tZW1vcnlfcmVjdXJzaXZlcHJvdCxcbiBcdE9wdF9tZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nLFxuIFx0T3B0X3BpZHNfbG9jYWxldmVudHMsXG4rXHRPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nLFxuIFx0bnJfX2Nncm91cDJfcGFyYW1zXG4gfTtcbiBcbkBAIC0xOTk1LDYgKzE5OTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX3BhcmFtZXRlcl9zcGVjIGNncm91cDJfZnNfcGFyYW1ldGVyc1tdID0ge1xuIFx0ZnNwYXJhbV9mbGFnKFwibWVtb3J5X3JlY3Vyc2l2ZXByb3RcIixcdE9wdF9tZW1vcnlfcmVjdXJzaXZlcHJvdCksXG4gXHRmc3BhcmFtX2ZsYWcoXCJtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCIsIE9wdF9tZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nKSxcbiBcdGZzcGFyYW1fZmxhZyhcInBpZHNfbG9jYWxldmVudHNcIixcdE9wdF9waWRzX2xvY2FsZXZlbnRzKSxcbitcdGZzcGFyYW1fZmxhZyhcIm1lbW9yeV9jbWFfYWNjb3VudGluZ1wiLFx0T3B0X21lbW9yeV9jbWFfYWNjb3VudGluZyksXG4gXHR7fVxuIH07XG4gXG5AQCAtMjAyNyw2ICsyMDI5LDkgQEAgc3RhdGljIGludCBjZ3JvdXAyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW1cbiBcdGNhc2UgT3B0X3BpZHNfbG9jYWxldmVudHM6XG4gXHRcdGN0eC1cdTAwM2VmbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XG4gXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nOlxuK1x0XHRjdHgtXHUwMDNlZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG5AQCAtMjA2OCw2ICsyMDczLDExIEBAIHN0YXRpYyB2b2lkIGFwcGx5X2Nncm91cF9yb290X2ZsYWdzKHVuc2lnbmVkIGludCByb290X2ZsYWdzKVxuIFx0XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgfD0gQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjY9IH5DR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XG4rXG4rXHRcdGlmIChyb290X2ZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HKVxuK1x0XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgfD0gQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbitcdFx0ZWxzZVxuK1x0XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2PSB+Q0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORztcbiBcdH1cbiB9XG4gXG5AQCAtMjA4NSw2ICsyMDk1LDggQEAgc3RhdGljIGludCBjZ3JvdXBfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qga2VybmZzX3Jvb3QgKmtmX3Jvb3RcbiBcdFx0c2VxX3B1dHMoc2VxLCBcIixtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXCIpO1xuIFx0aWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUylcbiBcdFx0c2VxX3B1dHMoc2VxLCBcIixwaWRzX2xvY2FsZXZlbnRzXCIpO1xuK1x0aWYgKGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpXG4rXHRcdHNlcV9wdXRzKHNlcSwgXCIsbWVtb3J5X2NtYV9hY2NvdW50aW5nXCIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTc1MjAsNyArNzUzMiw4IEBAIHN0YXRpYyBzc2l6ZV90IGZlYXR1cmVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHRcIm1lbW9yeV9sb2NhbGV2ZW50c1xcblwiXG4gXHRcdFx0XCJtZW1vcnlfcmVjdXJzaXZlcHJvdFxcblwiXG4gXHRcdFx0XCJtZW1vcnlfaHVnZXRsYl9hY2NvdW50aW5nXFxuXCJcbi1cdFx0XHRcInBpZHNfbG9jYWxldmVudHNcXG5cIik7XG4rXHRcdFx0XCJwaWRzX2xvY2FsZXZlbnRzXFxuXCJcbitcdFx0XHRcIm1lbW9yeV9jbWFfYWNjb3VudGluZ1xcblwiKTtcbiB9XG4gc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjZ3JvdXBfZmVhdHVyZXNfYXR0ciA9IF9fQVRUUl9STyhmZWF0dXJlcyk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vY21hLmMgYi9tbS9jbWEuY1xuaW5kZXggYTEzY2U0OTk5YjM5Zi4uMDNlYjNhY2JkM2M3NSAxMDA2NDRcbi0tLSBhL21tL2NtYS5jXG4rKysgYi9tbS9jbWEuY1xuQEAgLTI1LDcgKzI1LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19jaG9pY2VzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZ2htZW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rbWVtbGVhay5oXHUwMDNlXG5AQCAtOTA1LDYgKzkwNCwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsXG4gXHRcdGNtYV9kZWJ1Z19zaG93X2FyZWFzKGNtYSk7XG4gXHR9XG4gXG4rXHRpZiAocGFnZSBcdTAwMjZcdTAwMjYgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHBhZ2UsIGNvdW50LCBjbWEpKSB7XG4rXHRcdGZyZWVfY29udGlnX2Zyb3plbl9yYW5nZShwYWdlX3RvX3BmbihwYWdlKSwgY291bnQpO1xuK1x0XHRjbWFfY2xlYXJfYml0bWFwKGNtYSwgXHUwMDI2Y21hLVx1MDAzZXJhbmdlc1tyXSwgcGFnZV90b19wZm4ocGFnZSksIGNvdW50KTtcbitcdFx0cGFnZSA9IE5VTEw7XG4rXHR9XG4rXG4gXHRwcl9kZWJ1ZyhcIiVzKCk6IHJldHVybmVkICVwXFxuXCIsIF9fZnVuY19fLCBwYWdlKTtcbiBcdHRyYWNlX2NtYV9hbGxvY19maW5pc2gobmFtZSwgcGFnZSA/IHBhZ2VfdG9fcGZuKHBhZ2UpIDogMCxcbiBcdFx0XHQgICAgICAgcGFnZSwgY291bnQsIGFsaWduLCByZXQpO1xuQEAgLTk5MiwxMiArOTk3LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgY21hX21lbXJhbmdlICpmaW5kX2NtYV9tZW1yYW5nZShzdHJ1Y3QgY21hICpjbWEsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxuLVx0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpXG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2VzKTtcbiBcbiBcdHByX2RlYnVnKFwiJXMocGFnZSAlcCwgY291bnQgJWx1KVxcblwiLCBfX2Z1bmNfXywgKHZvaWQgKilwYWdlcywgY291bnQpO1xuIFxuK1x0bWVtX2Nncm91cF91bmNoYXJnZV9jbWEocGFnZXMsIGNvdW50LCBjbWEpO1xuIFx0ZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBmbiwgY291bnQpO1xuIFx0Y21hX2NsZWFyX2JpdG1hcChjbWEsIGNtciwgcGZuLCBjb3VudCk7XG4gXHRjbWFfc3lzZnNfYWNjb3VudF9yZWxlYXNlX3BhZ2VzKGNtYSwgY291bnQpO1xuQEAgLTEwMTQsNyArMTAyMCw3IEBAIHN0YXRpYyB2b2lkIF9fY21hX3JlbGVhc2VfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IGNtYV9tZW1yYW5nZSAqY21yLFxuICAqIEl0IHJldHVybnMgZmFsc2Ugd2hlbiBwcm92aWRlZCBwYWdlcyBkbyBub3QgYmVsb25nIHRvIGNvbnRpZ3VvdXMgYXJlYSBhbmRcbiAgKiB0cnVlIG90aGVyd2lzZS5cbiAgKi9cbi1ib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuK2Jvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdCB1bnNpZ25lZCBsb25nIGNvdW50KVxuIHtcbiBcdHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcjtcbkBAIC0xMDM3LDcgKzEwNDMsNyBAQCBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2VzLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChjbWFfcmVsZWFzZSk7XG4gXG4tYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4rYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yO1xuZGlmZiAtLWdpdCBhL21tL2NtYS5oIGIvbW0vY21hLmhcbmluZGV4IGM3MDE4MGMzNjU1OWMuLjUyYjdkNGJlNTE3MDcgMTAwNjQ0XG4tLS0gYS9tbS9jbWEuaFxuKysrIGIvbW0vY21hLmhcbkBAIC00LDYgKzQsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tvYmplY3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gXG4gc3RydWN0IGNtYV9rb2JqZWN0IHtcbiBcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG5AQCAtODAsNiArODEsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNtYV9iaXRtYXBfbWF4bm8oc3RydWN0IGNtYSAqY21hLFxuIFx0cmV0dXJuIGNtci1cdTAwM2Vjb3VudCBcdTAwM2VcdTAwM2UgY21hLVx1MDAzZW9yZGVyX3Blcl9iaXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGNtYV9hcmVhX2luZGV4KGNvbnN0IHN0cnVjdCBjbWEgKmNtYSlcbit7XG4rXHRyZXR1cm4gY21hIC0gY21hX2FyZWFzO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX0NNQV9TWVNGU1xuIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfc3VjY2Vzc19wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgY21hX3N5c2ZzX2FjY291bnRfZmFpbF9wYWdlcyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuZGlmZiAtLWdpdCBhL21tL2NtYV9kZWJ1Zy5jIGIvbW0vY21hX2RlYnVnLmNcbmluZGV4IDUyM2JhNGEwZjlmNzYuLjcwYmZjNmZiZWVjYTMgMTAwNjQ0XG4tLS0gYS9tbS9jbWFfZGVidWcuY1xuKysrIGIvbW0vY21hX2RlYnVnLmNcbkBAIC03LDcgKzcsNiBAQFxuIFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9tbS9jbWFfc3lzZnMuYyBiL21tL2NtYV9zeXNmcy5jXG5pbmRleCBkNWJmNzkyYzYyNDVhLi5lNGVlMzViYzY4MmJhIDEwMDY0NFxuLS0tIGEvbW0vY21hX3N5c2ZzLmNcbisrKyBiL21tL2NtYV9zeXNmcy5jXG5AQCAtNSw3ICs1LDYgQEBcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWluY2hhbiBLaW0gXHUwMDNjbWluY2hhbkBrZXJuZWwub3JnXHUwMDNlXG4gICovXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNmRjNDg4OGE5MGYzZi4uZjI4ZDYxMGE1OWNlNyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNjgsNiArNjgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJzbGFiLmhcIlxuICNpbmNsdWRlIFwibWVtY29udHJvbC12MS5oXCJcbisjaW5jbHVkZSBcImNtYS5oXCJcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiBcbkBAIC00MDYyLDYgKzQwNjMsOSBAQCBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0aW50IG5vZGU7XG4gXG4rI2lmZGVmIENPTkZJR19DTUFcbitcdGtmcmVlKG1lbWNnLVx1MDAzZWNtYV9jb3VudGVycyk7XG4rI2VuZGlmXG4gXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcbiBcdFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbm9kZV07XG4gXHRcdGlmICghcG4pXG5AQCAtNDE0NCw2ICs0MTQ4LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUVNQ0dfQ0dXQl9GUk5fQ05UOyBpKyspXG4gXHRcdG1lbWNnLVx1MDAzZWNnd2JfZnJuW2ldLmRvbmUgPVxuIFx0XHRcdF9fV0JfQ09NUExFVElPTl9JTklUKFx1MDAyNm1lbWNnX2Nnd2JfZnJuX3dhaXRxKTtcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHX0NNQVxuK1x0aWYgKGNtYV9hcmVhX2NvdW50KSB7XG4rXHRcdG1lbWNnLVx1MDAzZWNtYV9jb3VudGVycyA9IGtjYWxsb2MoY21hX2FyZWFfY291bnQsXG4rXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZV9jb3VudGVyKSxcbitcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghbWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbiAjZW5kaWZcbiBcdGxydV9nZW5faW5pdF9tZW1jZyhtZW1jZyk7XG4gXHRyZXR1cm4gbWVtY2c7XG5AQCAtNDE1OSw2ICs0MTcyLDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NzcyhwYXJlbnRfY3NzKTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZztcbiBcdGJvb2wgbWVtY2dfb25fZGZsID0gY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcbitcdHVuc2lnbmVkIGludCBfX21heWJlX3VudXNlZCBpO1xuIFxuIFx0b2xkX21lbWNnID0gc2V0X2FjdGl2ZV9tZW1jZyhwYXJlbnQpO1xuIFx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XG5AQCAtNDE3MSw2ICs0MTg1LDEyIEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuICNpZmRlZiBDT05GSUdfWlNXQVBcbiBcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19DTUFcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9hcmVhX2NvdW50OyArK2kpXG4rXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpXSxcbitcdFx0XHRcdCAgcGFyZW50ID8gXHUwMDI2cGFyZW50LVx1MDAzZWNtYV9jb3VudGVyc1tpXSA6IE5VTEwsXG4rXHRcdFx0XHQgIGZhbHNlKTtcbiAjZW5kaWZcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcbiBcdGlmIChwYXJlbnQpIHtcbkBAIC01MjEzLDYgKzUyMzMsMTAyIEBAIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0NNQVxuK3N0YXRpYyBib29sIG1lbWNnX2FjY291bnRzX2NtYSh2b2lkKVxuK3tcbitcdHJldHVybiBjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuK31cbitcbitpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuK1x0XHRcdCAgc3RydWN0IGNtYSAqY21hKVxuK3tcbitcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsICpmYWlsO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRpbnQgcmMgPSAwO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbitcdGlmICghbWVtY2cpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpXG4rXHRcdGdvdG8gY2dyb3VwX3B1dDtcbitcbitcdHJjID0gdHJ5X2NoYXJnZV9tZW1jZyhtZW1jZywgR0ZQX0tFUk5FTCwgY291bnQpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGNncm91cF9wdXQ7XG4rXG4rXHRjb3VudGVyID0gXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2NtYV9hcmVhX2luZGV4KGNtYSldO1xuK1x0aWYgKCFwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShjb3VudGVyLCBjb3VudCwgXHUwMDI2ZmFpbCkpIHtcbitcdFx0cmVmaWxsX3N0b2NrKG1lbWNnLCBjb3VudCk7XG4rXHRcdHJjID0gLUVOT01FTTtcbitcdFx0Z290byBjZ3JvdXBfcHV0O1xuK1x0fVxuK1xuK1x0b2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX21lbWNnKG1lbWNnKTtcbitcdGlmIChmb2xpb190ZXN0X2xhcmdlKHBhZ2VfZm9saW8ocGFnZSkpKSB7XG4rXHRcdGNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlKSwgb2JqY2cpO1xuK1x0fSBlbHNlIHtcbitcdFx0b2JqX2Nncm91cF9nZXRfbWFueShvYmpjZywgY291bnQgLSAxKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKylcbitcdFx0XHRjb21taXRfY2hhcmdlKHBhZ2VfZm9saW8ocGFnZSArIGkpLCBvYmpjZyk7XG4rXHR9XG4rXG4rY2dyb3VwX3B1dDpcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcdHJldHVybiByYztcbit9XG4rXG4rdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbitcdFx0XHQgICAgIHN0cnVjdCBjbWEgKmNtYSlcbit7XG4rXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xuK1x0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHVuc2lnbmVkIGludCBpO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfY21hKCkpXG4rXHRcdHJldHVybjtcbitcbitcdC8qXG4rXHQgKiBHZXQgdGhlIG9iamNnIGZyb20gdGhlIGZpcnN0IHBhZ2UuXG4rXHQgKiBwYWdlX29iamNnKCkgZXhwZWN0cyBNRU1DR19EQVRBX0tNRU0sIGJ1dCBmb3IgQ01BIHdlIHVzZWRcbitcdCAqIGNvbW1pdF9jaGFyZ2UoKSB3aGljaCBzZXRzIGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSBvYmpjZ1xuK1x0ICogd2l0aG91dCBmbGFncywgc28gd2UgY2Fubm90IHVzZSBpdC5cbitcdCAqL1xuK1x0b2JqY2cgPSBmb2xpb19vYmpjZyhwYWdlX2ZvbGlvKHBhZ2UpKTtcbitcdGlmICghb2JqY2cpXG4rXHRcdHJldHVybjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4rXG4rXHRjb3VudGVyID0gXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2NtYV9hcmVhX2luZGV4KGNtYSldO1xuK1x0cGFnZV9jb3VudGVyX3VuY2hhcmdlKGNvdW50ZXIsIGNvdW50KTtcbitcbitcdG1lbWNnX3VuY2hhcmdlKG1lbWNnLCBjb3VudCk7XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcdGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkge1xuK1x0XHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbitcdFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuK1x0fSBlbHNlIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7ICsraSkge1xuK1x0XHRcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlICsgaSk7XG4rXHRcdFx0Zm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IDA7XG4rXHRcdFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuK1x0XHR9XG4rXHR9XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfQ01BICovXG4rXG4gc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7XG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gXHR1bnNpZ25lZCBsb25nIG5yX21lbW9yeTtcbkBAIC02MDY2LDMgKzYxODIsOTIgQEAgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRcdEsoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkuY2hpbGRyZW5fbWluX3VzYWdlKSksXG4gXHRcdEsoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkuY2hpbGRyZW5fbG93X3VzYWdlKSkpO1xuIH1cbitcbisjaWZkZWYgQ09ORklHX0NNQVxuK3N0YXRpYyBpbnQgbWVtb3J5X2NtYV9jdXJyZW50X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7XG4rXHRpbnQgaWR4ID0gc2VxX2NmdChtKS1cdTAwM2Vwcml2YXRlO1xuK1x0dW5zaWduZWQgbG9uZyBjdXIgPSBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VjbWFfY291bnRlcnNbaWR4XSk7XG4rXG4rXHRzZXFfcHJpbnRmKG0sIFwiJWx1XFxuXCIsIGN1ciAqIFBBR0VfU0laRSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBtZW1vcnlfY21hX21heF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xuK1x0aW50IGlkeCA9IHNlcV9jZnQobSktXHUwMDNlcHJpdmF0ZTtcbitcdHVuc2lnbmVkIGxvbmcgbWF4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdLm1heCk7XG4rXG4rXHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLCBtYXgpO1xuK31cbitcbitzdGF0aWMgc3NpemVfdCBtZW1vcnlfY21hX21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcbitcdFx0XHRcdCAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4rXHRpbnQgaWR4ID0gb2ZfY2Z0KG9mKS1cdTAwM2Vwcml2YXRlO1xuK1x0dW5zaWduZWQgbG9uZyBtYXg7XG4rXHRpbnQgcmM7XG4rXG4rXHRidWYgPSBzdHJzdHJpcChidWYpO1xuK1x0cmMgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCBcIm1heFwiLCBcdTAwMjZtYXgpO1xuK1x0aWYgKHJjKVxuK1x0XHRyZXR1cm4gcmM7XG4rXG4rXHR4Y2hnKFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdLm1heCwgbWF4KTtcbitcbitcdHJldHVybiBuYnl0ZXM7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNtYV9kZmxfdG1wbFtdID0ge1xuK1x0e1xuK1x0XHQubmFtZSA9IFwiY3VycmVudFwiLFxuK1x0XHQuc2VxX3Nob3cgPSBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdyxcbitcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuK1x0fSxcbitcdHtcbitcdFx0Lm5hbWUgPSBcIm1heFwiLFxuK1x0XHQuc2VxX3Nob3cgPSBtZW1vcnlfY21hX21heF9zaG93LFxuK1x0XHQud3JpdGUgPSBtZW1vcnlfY21hX21heF93cml0ZSxcbitcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuK1x0fSxcbitcdHsgfVxuK307XG4rI2RlZmluZSBDTUFfREZMX1RNUExfU0laRVx0KEFSUkFZX1NJWkUoY21hX2RmbF90bXBsKSAtIDEpXG4rXG4rc3RhdGljIHN0cnVjdCBjZnR5cGUgKmNtYV9kZmxfZmlsZXM7XG4rXG4rc3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9jbWFfaW5pdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBjZnR5cGUgKmNmdDtcbitcdHVuc2lnbmVkIGludCBpLCBqO1xuK1x0aW50IGNvdW50O1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhY21hX2FyZWFfY291bnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y291bnQgPSBjbWFfYXJlYV9jb3VudCAqIENNQV9ERkxfVE1QTF9TSVpFO1xuK1x0Y21hX2RmbF9maWxlcyA9IGtjYWxsb2MoY291bnQgKyAxLCBzaXplb2YoKmNtYV9kZmxfdG1wbCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjbWFfZGZsX2ZpbGVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNtYV9hcmVhX2NvdW50OyArK2kpXG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIENNQV9ERkxfVE1QTF9TSVpFOyArK2opIHtcbitcdFx0XHRjZnQgPSBcdTAwMjZjbWFfZGZsX2ZpbGVzW2kgKiBDTUFfREZMX1RNUExfU0laRSArIGpdO1xuK1x0XHRcdCpjZnQgPSBjbWFfZGZsX3RtcGxbal07XG4rXHRcdFx0c25wcmludGYoY2Z0LVx1MDAzZW5hbWUsIE1BWF9DRlRZUEVfTkFNRSwgXCJjbWEuJXMuJXNcIixcbitcdFx0XHRcdCBjbWFfZ2V0X25hbWUoXHUwMDI2Y21hX2FyZWFzW2ldKSxcbitcdFx0XHRcdCBjbWFfZGZsX3RtcGxbal0ubmFtZSk7XG4rXHRcdFx0Y2Z0LVx1MDAzZXByaXZhdGUgPSBpOyAvKiBjbWEgYXJlYSBpbmRleCBmb3IgY291bnRlcnMgaW4gY2FsbGJhY2tzLiAqL1xuK1x0XHRcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KFx1MDAyNmNmdC1cdTAwM2Vsb2NrZGVwX2tleSk7XG4rXHRcdH1cbitcbitcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIGNtYV9kZmxfZmlsZXMpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9jbWFfaW5pdCk7XG4rI2VuZGlmIC8qIENPTkZJR19DTUEgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG5pbmRleCA5NTJlNDQ0OGJmMDcwLi5iOWE0Mjk4ZDQ5NDQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG5AQCAtMSw1ICsxLDYgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiB0ZXN0X2NvcmVcbit0ZXN0X2NtYV9tZW1jZ1xuIHRlc3RfY3B1XG4gdGVzdF9jcHVzZXRcbiB0ZXN0X2ZyZWV6ZXJcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbmluZGV4IGUwMTU4NGMyMTg5YWMuLjYwMWQ5MzAxNjBhNDIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuQEAgLTgsNiArOCw3IEBAIFRFU1RfUFJPR1MgICAgIDo9IHRlc3Rfc3RyZXNzLnNoIHRlc3RfY3B1c2V0X3Bycy5zaCB0ZXN0X2NwdXNldF92MV9ocC5zaFxuIFRFU1RfR0VOX0ZJTEVTIDo9IHdhaXRfaW5vdGlmeVxuICMgS2VlcCB0aGUgbGlzdHMgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkXG4gVEVTVF9HRU5fUFJPR1MgID0gdGVzdF9jb3JlXG4rVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9jbWFfbWVtY2dcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NwdVxuIFRFU1RfR0VOX1BST0dTICs9IHRlc3RfY3B1c2V0XG4gVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9mcmVlemVyXG5AQCAtMjQsNiArMjUsNyBAQCBpbmNsdWRlIC4uL2xpYi5ta1xuIGluY2x1ZGUgbGliL2xpYmNncm91cC5ta1xuIFxuICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pXG4rJChPVVRQVVQpL3Rlc3RfY21hX21lbWNnOiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X2NwdTogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9jcHVzZXQ6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfZnJlZXplcjogJChMSUJDR1JPVVBfTylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuaW5kZXggMzlmOTc5NjkwZGQzYi4uMWM5MDM0MDE3NjgyZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWdcbkBAIC00LDMgKzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuIENPTkZJR19DR1JPVVBfU0NIRUQ9eVxuIENPTkZJR19NRU1DRz15XG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XG4rQ09ORklHX0NNQT15XG4rQ09ORklHX0RNQV9DTUE9eVxuK0NPTkZJR19ETUFCVUZfSEVBUFM9eVxuK0NPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXlcbitDT05GSUdfSFVHRVRMQkZTPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWJkNDFkOWE2MTc3ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmNcbkBAIC0wLDAgKzEsNDAyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtaGVhcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2VcbisjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbisjaW5jbHVkZSBcImNncm91cF91dGlsLmhcIlxuK1xuKyNkZWZpbmUgQ01BX0hFQVBfREVGQVVMVF9QQVRIXHRcIi9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uXCJcbisjZGVmaW5lIENNQV9SRVNFUlZFRF9DVVJSRU5UXHRcIm1lbW9yeS5jbWEucmVzZXJ2ZWQuY3VycmVudFwiXG4rI2RlZmluZSBDTUFfUkVTRVJWRURfTUFYXHRcIm1lbW9yeS5jbWEucmVzZXJ2ZWQubWF4XCJcbitcbisjZGVmaW5lIEhVR0VUTEJfQ01BX0NVUlJFTlRcdFwibWVtb3J5LmNtYS5odWdldGxiMC5jdXJyZW50XCJcbisjZGVmaW5lIEhVR0VUTEJfQ01BX01BWFx0XCJtZW1vcnkuY21hLmh1Z2V0bGIwLm1heFwiXG4rI2RlZmluZSBIVUdFUEFHRVNfRElSXHRcdFwiL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzXCJcbitcbitzdGF0aWMgaW50IGNtYV9oZWFwX2FsbG9jKGludCBoZWFwX2ZkLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgZG1hX2hlYXBfYWxsb2NhdGlvbl9kYXRhIGRhdGEgPSB7XG4rXHRcdC5sZW4gPSBzaXplLFxuK1x0XHQuZmRfZmxhZ3MgPSBPX1JEV1IgfCBPX0NMT0VYRUMsXG4rXHR9O1xuK1xuK1x0aWYgKGlvY3RsKGhlYXBfZmQsIERNQV9IRUFQX0lPQ1RMX0FMTE9DLCBcdTAwMjZkYXRhKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIGRhdGEuZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9jbWFfY2hhcmdlKGNvbnN0IGNoYXIgKnJvb3QpXG4re1xuK1x0aW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7XG4rXHRpbnQgcmMgPSBLU0ZUX0ZBSUwsIGluX2NnID0gMDtcbitcdHNpemVfdCBzaXplID0gNFVMIFx1MDAzY1x1MDAzYyAyMDtcbitcdGxvbmcgYmVmb3JlLCBhZnRlcjtcbitcdGNoYXIgKmNnO1xuK1xuK1x0Y2cgPSBjZ19uYW1lKHJvb3QsIFwibWVtY2dfY21hX2NoYXJnZVwiKTtcbitcdGlmICghY2cpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19jcmVhdGUoY2cpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGluX2NnID0gMTtcbitcbitcdGhlYXBfZmQgPSBvcGVuKENNQV9IRUFQX0RFRkFVTFRfUEFUSCwgT19SRE9OTFkgfCBPX0NMT0VYRUMpO1xuK1x0aWYgKGhlYXBfZmQgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgb3BlbiBDTUEgaGVhcCAoJW0pXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRiZWZvcmUgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTtcbitcbitcdGJ1Zl9mZCA9IGNtYV9oZWFwX2FsbG9jKGhlYXBfZmQsIHNpemUpO1xuK1x0aWYgKGJ1Zl9mZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCBhbGxvY2F0ZSBpbiBDTUEgaGVhcCAoJW0pXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpO1xuK1xuK1x0aWYgKGFmdGVyIC0gYmVmb3JlIFx1MDAzYyAobG9uZylzaXplKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFxuK1x0XHRcdFwiaW52YWxpZCBDTUEgY291bnRlciBhZnRlciBjaGFyZ2U6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkXFxuXCIsXG4rXHRcdFx0YmVmb3JlLCBhZnRlcik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGNsb3NlKGJ1Zl9mZCk7XG4rXHRidWZfZmQgPSAtMTtcbitcbitcdGFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7XG4rXHRpZiAoIXZhbHVlc19jbG9zZShiZWZvcmUsIGFmdGVyLCAzKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcbitcdFx0XHRcImludmFsaWQgQ01BIGNvdW50ZXIgYWZ0ZXIgdW5jaGFyZ2U6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkXFxuXCIsXG4rXHRcdFx0YmVmb3JlLCBhZnRlcik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHJjID0gS1NGVF9QQVNTO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoYnVmX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoYnVmX2ZkKTtcbitcdGlmIChoZWFwX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaGVhcF9mZCk7XG4rXG4rXHRpZiAoaW5fY2cpXG4rXHRcdGNnX2VudGVyX2N1cnJlbnQocm9vdCk7XG4rXHRjZ19kZXN0cm95KGNnKTtcbitcdGZyZWUoY2cpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfY21hX2xpbWl0KGNvbnN0IGNoYXIgKnJvb3QpXG4re1xuK1x0aW50IGhlYXBfZmQgPSAtMSwgYnVmX2ZkID0gLTE7XG4rXHRpbnQgcmMgPSBLU0ZUX0ZBSUwsIGluX2NnID0gMDtcbitcdHNpemVfdCBzaXplID0gNFVMIFx1MDAzY1x1MDAzYyAyMDtcbitcdGNoYXIgKmNnO1xuK1xuK1x0Y2cgPSBjZ19uYW1lKHJvb3QsIFwibWVtY2dfY21hX2xpbWl0XCIpO1xuK1x0aWYgKCFjZylcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aW5fY2cgPSAxO1xuK1xuK1x0aWYgKGNnX3dyaXRlKGNnLCBDTUFfUkVTRVJWRURfTUFYLCBcIjJNXCIpKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IHNldCBDTUEgbGltaXQgKCVtKVxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0aGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoaGVhcF9mZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGJ1Zl9mZCA9IGNtYV9oZWFwX2FsbG9jKGhlYXBfZmQsIHNpemUpO1xuK1x0aWYgKGJ1Zl9mZCBcdTAwM2U9IDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJDTUEgbGltaXQgbm90IGVuZm9yY2VkLlxcblwiKTtcbitcdFx0Y2xvc2UoYnVmX2ZkKTtcbitcdH0gZWxzZVxuK1x0XHRyYyA9IEtTRlRfUEFTUztcbitcbitjbGVhbnVwOlxuK1x0aWYgKGhlYXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShoZWFwX2ZkKTtcbitcbitcdGlmIChpbl9jZylcbitcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbitcdGNnX2Rlc3Ryb3koY2cpO1xuK1x0ZnJlZShjZyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuK3N0YXRpYyBsb25nIGZpbmRfbGFyZ2VzdF9odWdlcGFnZV9zaXplX2tiKHZvaWQpXG4re1xuK1x0RElSICpkaXI7XG4rXHRzdHJ1Y3QgZGlyZW50ICplbnRyeTtcbitcdGxvbmcgbWF4X3NpemUgPSAwO1xuK1xuK1x0ZGlyID0gb3BlbmRpcihIVUdFUEFHRVNfRElSKTtcbitcdGlmICghZGlyKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHR3aGlsZSAoKGVudHJ5ID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7XG4rXHRcdGxvbmcgc2l6ZTtcbitcbitcdFx0aWYgKHNzY2FuZihlbnRyeS1cdTAwM2VkX25hbWUsIFwiaHVnZXBhZ2VzLSVsZGtCXCIsIFx1MDAyNnNpemUpID09IDEpIHtcbitcdFx0XHRpZiAoc2l6ZSBcdTAwM2UgbWF4X3NpemUpXG4rXHRcdFx0XHRtYXhfc2l6ZSA9IHNpemU7XG4rXHRcdH1cbitcdH1cbitcdGNsb3NlZGlyKGRpcik7XG4rXG4rXHRyZXR1cm4gbWF4X3NpemUgXHUwMDNlIDAgPyBtYXhfc2l6ZSA6IC0xO1xuK31cbitcbitzdGF0aWMgbG9uZyByZWFkX3N5c2ZzX2xvbmcoY29uc3QgY2hhciAqcGF0aClcbit7XG4rXHRGSUxFICpmO1xuK1x0bG9uZyB2YWwgPSAtMTtcbitcbitcdGYgPSBmb3BlbihwYXRoLCBcInJcIik7XG4rXHRpZiAoIWYpXG4rXHRcdHJldHVybiAtMTtcbitcdGlmIChmc2NhbmYoZiwgXCIlbGRcIiwgXHUwMDI2dmFsKSAhPSAxKVxuK1x0XHR2YWwgPSAtMTtcbitcdGZjbG9zZShmKTtcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoLCBsb25nIHZhbClcbit7XG4rXHRGSUxFICpmO1xuK1x0aW50IHJjO1xuK1xuK1x0ZiA9IGZvcGVuKHBhdGgsIFwid1wiKTtcbitcdGlmICghZilcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmMgPSBmcHJpbnRmKGYsIFwiJWxkXCIsIHZhbCk7XG4rXHRmY2xvc2UoZik7XG4rXHRyZXR1cm4gcmMgXHUwMDNjIDAgPyAtMSA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9odWdldGxiX2NtYV9jaGFyZ2UoY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDtcbitcdGxvbmcgaHBhZ2Vfc2l6ZV9rYiwgaHBhZ2Vfc2l6ZV9ieXRlcztcbitcdGxvbmcgb3JpZ19uciA9IC0xLCBuZXdfbnIsIGJlZm9yZSwgYWZ0ZXI7XG4rXHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xuK1x0Y2hhciAqY2c7XG4rXG4rXHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcbitcdGlmIChocGFnZV9zaXplX2tiIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwibm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxcblwiKTtcbitcdFx0cmV0dXJuIEtTRlRfU0tJUDtcbitcdH1cbitcdGhwYWdlX3NpemVfYnl0ZXMgPSBocGFnZV9zaXplX2tiICogMTAyNDtcbitcbitcdHNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSxcbitcdFx0IEhVR0VQQUdFU19ESVIgXCIvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlc1wiLCBocGFnZV9zaXplX2tiKTtcbitcbitcdGNnID0gY2dfbmFtZShyb290LCBcIm1lbWNnX2h1Z2V0bGJfY21hX2NoYXJnZVwiKTtcbitcdGlmICghY2cpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19jcmVhdGUoY2cpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGluX2NnID0gMTtcbitcbitcdGlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiaHVnZXRsYiBDTUEgY291bnRlcnMgbm90IGF2YWlsYWJsZVxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0b3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcbitcdGlmIChvcmlnX25yIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IHJlYWQgJXNcXG5cIiwgbnJfcGF0aCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XG4rXG4rXHRpZiAod3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICsgMSkpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgd3JpdGUgJXNcXG5cIiwgbnJfcGF0aCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdG5ld19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcbitcdGlmIChuZXdfbnIgXHUwMDNjPSBvcmlnX25yKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiZmFpbGVkIHRvIGFsbG9jYXRlIGEgaHVnZXBhZ2VcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHJjID0gS1NGVF9GQUlMO1xuK1x0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpO1xuK1xuK1x0aWYgKGFmdGVyIC0gYmVmb3JlIFx1MDAzYyBocGFnZV9zaXplX2J5dGVzKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFxuK1x0XHRcdFwiaHVnZXRsYiBDTUEgY291bnRlciBub3QgY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGQgZXhwZWN0ZWQgKyVsZFxcblwiLFxuK1x0XHRcdGJlZm9yZSwgYWZ0ZXIsIGhwYWdlX3NpemVfYnl0ZXMpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHR3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpO1xuK1xuK1x0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX0NVUlJFTlQpO1xuK1x0aWYgKCF2YWx1ZXNfY2xvc2UoYmVmb3JlLCBhZnRlciwgMykpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXG4rXHRcdFx0XCJodWdldGxiIENNQSBjb3VudGVyIG5vdCB1bmNoYXJnZWQ6IGJlZm9yZT0lbGQgYWZ0ZXI9JWxkXFxuXCIsXG4rXHRcdFx0YmVmb3JlLCBhZnRlcik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHJjID0gS1NGVF9QQVNTO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAob3JpZ19uciBcdTAwM2U9IDApXG4rXHRcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7XG4rXG4rXHRpZiAoaW5fY2cpXG4rXHRcdGNnX2VudGVyX2N1cnJlbnQocm9vdCk7XG4rXHRjZ19kZXN0cm95KGNnKTtcbitcdGZyZWUoY2cpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfaHVnZXRsYl9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRpbnQgcmMgPSBLU0ZUX1NLSVAsIGluX2NnID0gMDtcbitcdGxvbmcgaHBhZ2Vfc2l6ZV9rYjtcbitcdGxvbmcgb3JpZ19uciwgbmV3X25yO1xuK1x0Y2hhciBucl9wYXRoW1BBVEhfTUFYXTtcbitcdGNoYXIgKmNnO1xuK1xuK1x0aHBhZ2Vfc2l6ZV9rYiA9IGZpbmRfbGFyZ2VzdF9odWdlcGFnZV9zaXplX2tiKCk7XG4rXHRpZiAoaHBhZ2Vfc2l6ZV9rYiBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIm5vIGh1Z2VwYWdlIHNpemUgZm91bmRcXG5cIik7XG4rXHRcdHJldHVybiBLU0ZUX1NLSVA7XG4rXHR9XG4rXG4rXHRzbnByaW50Zihucl9wYXRoLCBzaXplb2YobnJfcGF0aCksXG4rXHRcdCBIVUdFUEFHRVNfRElSIFwiL2h1Z2VwYWdlcy0lbGRrQi9ucl9odWdlcGFnZXNcIiwgaHBhZ2Vfc2l6ZV9rYik7XG4rXG4rXHRjZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ19odWdldGxiX2NtYV9saW1pdFwiKTtcbitcdGlmICghY2cpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19jcmVhdGUoY2cpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoY2dfZW50ZXJfY3VycmVudChjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdGluX2NnID0gMTtcbitcbitcdGlmIChjZ19yZWFkX2xvbmcoY2csIEhVR0VUTEJfQ01BX01BWCkgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRpZiAoY2dfd3JpdGUoY2csIEhVR0VUTEJfQ01BX01BWCwgXCIwXCIpKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IHNldCBodWdldGxiIENNQSBsaW1pdFxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0b3JpZ19uciA9IHJlYWRfc3lzZnNfbG9uZyhucl9wYXRoKTtcbitcdGlmIChvcmlnX25yIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IHJlYWQgJXNcXG5cIiwgbnJfcGF0aCk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19uciArIDEpO1xuK1x0bmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuK1xuK1x0cmMgPSBLU0ZUX0ZBSUw7XG4rXHRpZiAobmV3X25yIFx1MDAzZSBvcmlnX25yKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiaHVnZXRsYiBDTUEgbGltaXQgbm90IGVuZm9yY2VkXFxuXCIpO1xuK1x0XHR3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIpO1xuK1x0fSBlbHNlIHtcbitcdFx0cmMgPSBLU0ZUX1BBU1M7XG4rXHR9XG4rXG4rY2xlYW51cDpcbitcdGlmIChpbl9jZylcbitcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbitcdGNnX2Rlc3Ryb3koY2cpO1xuK1x0ZnJlZShjZyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuKyNkZWZpbmUgVCh4KSB7IHgsICN4IH1cbitzdHJ1Y3QgY21hX21lbWNnX3Rlc3RzIHtcbitcdGludCAoKmZuKShjb25zdCBjaGFyICpyb290KTtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rfSB0ZXN0c1tdID0ge1xuK1x0VCh0ZXN0X2NtYV9jaGFyZ2UpLFxuK1x0VCh0ZXN0X2NtYV9saW1pdCksXG4rXHRUKHRlc3RfaHVnZXRsYl9jbWFfY2hhcmdlKSxcbitcdFQodGVzdF9odWdldGxiX2NtYV9saW1pdCksXG4rfTtcbisjdW5kZWYgVFxuK1xuK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4re1xuK1x0Y2hhciByb290W1BBVEhfTUFYXTtcbitcdGludCBoYXNfbWVtb3J5X2NtYV9hY2MsIGk7XG4rXG4rXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7XG4rXG4rXHRoYXNfbWVtb3J5X2NtYV9hY2MgPSBwcm9jX21vdW50X2NvbnRhaW5zKFwibWVtb3J5X2NtYV9hY2NvdW50aW5nXCIpO1xuK1x0aWYgKGhhc19tZW1vcnlfY21hX2FjYyBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJjYW5ub3QgcXVlcnkgY2dyb3VwIG1vdW50IG9wdGlvbi5cXG5cIik7XG4rXHRlbHNlIGlmICghaGFzX21lbW9yeV9jbWFfYWNjKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIkNNQSBhY2NvdW50aW5nIGlzIGRpc2FibGVkLlxcblwiKTtcbitcbitcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcImNncm91cGZzIGlzIG5vdCBhdmFpbGFibGUuXFxuXCIpO1xuK1xuK1x0aWYgKGNnX3JlYWRfc3Ryc3RyKHJvb3QsIFwiY2dyb3VwLmNvbnRyb2xsZXJzXCIsIFwibWVtb3J5XCIpKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIm1lbW9yeSBjb250cm9sbGVyIGlzIG5vdCBhdmFpbGFibGUgKENPTkZJR19DR1JPVVBfTUVNQ0c/KVxcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyArK2kpIHtcbitcdFx0c3dpdGNoICh0ZXN0c1tpXS5mbihyb290KSkge1xuK1x0XHRjYXNlIEtTRlRfUEFTUzpcbitcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCIlc1xcblwiLCB0ZXN0c1tpXS5uYW1lKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBLU0ZUX1NLSVA6XG4rXHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXNcXG5cIiwgdGVzdHNbaV0ubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwiJXNcXG5cIiwgdGVzdHNbaV0ubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi41MzRhOTVlZjVlMDc3XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoXG5AQCAtMCwwICsxLDE5NyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIENvcHlyaWdodCAoYykgMjAyNiBSZWQgSGF0LCBJbmMuXG4rI1xuKyMgUnVuIGNncm91cCBtZW1vcnkgY29udHJvbGxlciBzZWxmdGVzdHMgaW5zaWRlIGEgdmlydG1lLW5nIFZNXG4rIyBEZXBlbmRlbmNpZXM6XG4rI1x0XHQqIHZpcnRtZS1uZ1xuKyNcdFx0KiBidXN5Ym94LXN0YXRpYyAodXNlZCBieSB2aXJ0bWUtbmcpXG4rI1x0XHQqIHFlbXVcdCh1c2VkIGJ5IHZpcnRtZS1uZylcbitcbitzZXQgLWV1byBwaXBlZmFpbFxuK1xuK3JlYWRvbmx5IFNDUklQVF9ESVI9XCIkKGNkIC1QIC0tIFwiJChkaXJuYW1lIC0tIFwiJHtCQVNIX1NPVVJDRVswXX1cIilcIiBcdTAwMjZcdTAwMjYgcHdkIC1QKVwiXG4rcmVhZG9ubHkgS0VSTkVMX0NIRUNLT1VUPVwiJChyZWFscGF0aCBcIiR7U0NSSVBUX0RJUn1cIi8uLi8uLi8uLi8uLi8pXCJcbitcbitzb3VyY2UgXCIke1NDUklQVF9ESVJ9XCIvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuK1xuK3JlYWRvbmx5IFNTSF9HVUVTVF9QT1JUPVwiJHtTU0hfR1VFU1RfUE9SVDotMjJ9XCJcbityZWFkb25seSBXQUlUX1BFUklPRD0zXG4rcmVhZG9ubHkgV0FJVF9QRVJJT0RfTUFYPTgwXG4rcmVhZG9ubHkgV0FJVF9UT1RBTD0kKChXQUlUX1BFUklPRCAqIFdBSVRfUEVSSU9EX01BWCkpXG4rcmVhZG9ubHkgUUVNVV9QSURGSUxFPVwiJChta3RlbXAgL3RtcC9xZW11X21lbWNnX3ZtdGVzdF9YWFhYLnBpZClcIlxuK3JlYWRvbmx5IFFFTVVfT1BUUz1cIiAtLXBpZGZpbGUgJHtRRU1VX1BJREZJTEV9IFwiXG4rXG4rQlVJTEQ9MFxuK1FFTVU9XCJxZW11LXN5c3RlbS0kKHVuYW1lIC1tKVwiXG4rVkVSQk9TRT0wXG4rU0hFTExfTU9ERT0wXG4rR1VFU1RfVFJFRT1cIiR7R1VFU1RfVFJFRTotJEtFUk5FTF9DSEVDS09VVH1cIlxuK1xuK3VzYWdlKCkge1xuK1x0Y2F0IFx1MDAzY1x1MDAzY0VPRlxuKyQwIFtPUFRJT05TXVxuKyAgICAtYiAgICAgICAgQnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgYmVmb3JlIGJvb3RpbmdcbisgICAgLXEgXHUwMDNjcWVtdVx1MDAzZSBRRU1VIGJpbmFyeS9wYXRoIChkZWZhdWx0OiAkUUVNVSlcbisgICAgLXMgICAgICAgIFN0YXJ0IGludGVyYWN0aXZlIHNoZWxsIGluIFZNXG4rICAgIC12ICAgICAgICBWZXJib3NlIG91dHB1dCAodm5nIGJvb3QgbG9ncyBvbiBzdGRvdXQpXG4rRU9GXG4rXHRleGl0IDFcbit9XG4rXG4rZGllKCkge1xuK1x0ZWNobyBcIiQqXCIgXHUwMDNlXHUwMDI2MlxuK1x0ZXhpdCBcIiR7S1NGVF9GQUlMfVwiXG4rfVxuK1xuK2NsZWFudXAoKSB7XG4rXHRpZiBbWyAtcyBcIiRRRU1VX1BJREZJTEVcIiBdXTsgdGhlblxuK1x0XHRwa2lsbCAtU0lHVEVSTSAtRiBcIiRRRU1VX1BJREZJTEVcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgfHwgdHJ1ZVxuK1x0ZmlcbitcbitcdGlmIFtbIC1lIFwiJFFFTVVfUElERklMRVwiIF1dOyB0aGVuXG4rXHRcdHJtIC1mIFwiJFFFTVVfUElERklMRVwiXG4rXHRmaVxuK31cbitcbit2bV9zc2goKSB7XG4rXHRzdGRidWYgLW9MIHNzaCAtcSBcXFxuK1x0XHQtRiBcIiRIT01FLy5jYWNoZS92aXJ0bWUtbmcvLnNzaC92aXJ0bWUtbmctc3NoLmNvbmZcIiBcXFxuK1x0XHQtbCByb290IFwidmlydG1lLW5nJSRTU0hfR1VFU1RfUE9SVFwiIFxcXG4rXHRcdFwiJEBcIlxuK31cbitcbitjaGVja19kZXBzKCkge1xuK1x0Zm9yIGRlcCBpbiB2bmcgXCIkUUVNVVwiIGJ1c3lib3ggcGtpbGwgc3NoOyBkb1xuK1x0XHRpZiAhIGNvbW1hbmQgLXYgXCIkZGVwXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRcdFx0ZWNobyBcInNraXA6IGRlcGVuZGVuY3kgJGRlcCBub3QgZm91bmRcIlxuK1x0XHRcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitcdFx0ZmlcbitcdGRvbmVcbit9XG4rXG4raGFuZGxlX2J1aWxkKCkge1xuK1x0aWYgW1sgISBcIiRCVUlMRFwiIC1lcSAxIF1dOyB0aGVuXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcbitcdGlmIFtbICEgLWQgXCIkS0VSTkVMX0NIRUNLT1VUXCIgXV07IHRoZW5cbitcdFx0ZWNobyBcIi1iIHJlcXVpcmVzICQwIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBrZXJuZWwgc291cmNlIHRyZWVcIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgMVxuK1x0ZmlcbitcbitcdHB1c2hkIFwiJEtFUk5FTF9DSEVDS09VVFwiIFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuK1xuK1x0aWYgISB2bmcgLS1rY29uZmlnIC0tY29uZmlnIFwiJFNDUklQVF9ESVJcIi9jb25maWc7IHRoZW5cbitcdFx0ZGllIFwiZmFpbGVkIHRvIGdlbmVyYXRlIC5jb25maWcgZm9yIGtlcm5lbCBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcIlxuK1x0ZmlcbitcbitcdGlmICEgbWFrZSAtalwiJChucHJvYylcIjsgdGhlblxuK1x0XHRkaWUgXCJmYWlsZWQgdG8gYnVpbGQga2VybmVsIGZyb20gc291cmNlIHRyZWUgKCRLRVJORUxfQ0hFQ0tPVVQpXCJcbitcdGZpXG4rXG4rXHRwb3BkIFx1MDAyNlx1MDAzZS9kZXYvbnVsbFxuK31cbitcbit2bV9zdGFydCgpIHtcbitcdGxvY2FsIGxvZ2ZpbGU9L2Rldi9udWxsXG4rXHRsb2NhbCB2ZXJib3NlX29wdD1cIlwiXG4rXHRsb2NhbCBrZXJuZWxfb3B0PVwiXCJcbitcbitcdGlmIFtbIFwiJFZFUkJPU0VcIiAtZXEgMSBdXTsgdGhlblxuK1x0XHR2ZXJib3NlX29wdD1cIi0tdmVyYm9zZVwiXG4rXHRcdGxvZ2ZpbGU9L2Rldi9zdGRvdXRcbitcdGZpXG4rXG4rXHRpZiBbWyBcIiRCVUlMRFwiIC1lcSAxIF1dOyB0aGVuXG4rXHRcdGtlcm5lbF9vcHQ9XCIke0tFUk5FTF9DSEVDS09VVH1cIlxuK1x0ZmlcbitcbitcdHZuZyBcXFxuK1x0XHQtLXJ1biBcXFxuK1x0XHQke2tlcm5lbF9vcHR9IFxcXG4rXHRcdCR7dmVyYm9zZV9vcHR9IFxcXG4rXHRcdC0tcWVtdS1vcHRzPVwiJFFFTVVfT1BUU1wiIFxcXG4rXHRcdC0tcWVtdT1cIiQoY29tbWFuZCAtdiBcIiRRRU1VXCIpXCIgXFxcbitcdFx0LS11c2VyIHJvb3QgXFxcbitcdFx0LS1zc2ggXCIkU1NIX0dVRVNUX1BPUlRcIiBcXFxuK1x0XHQtLW1lbW9yeSAzRyBcXFxuK1x0XHQtLWFwcGVuZCBcImNtYT02NE0gaHVnZXRsYl9jbWE9MUcgaHVnZXRsYl9jbWFfb25seT0xXCIgXFxcbitcdFx0LS1ydyBcdTAwMjZcdTAwM2VcIiRsb2dmaWxlXCIgXHUwMDI2XG4rXG4rXHRsb2NhbCB2bmdfcGlkPSQhXG4rXHRsb2NhbCBlbGFwc2VkPTBcbitcbitcdHdoaWxlIFtbICEgLXMgXCIkUUVNVV9QSURGSUxFXCIgXV07IGRvXG4rXHRcdGtpbGwgLTAgXCIkdm5nX3BpZFwiIDJcdTAwM2UvZGV2L251bGwgfHwgXFxcbitcdFx0XHRkaWUgXCJ2bmcgZXhpdGVkIGVhcmx5OyBmYWlsZWQgdG8gYm9vdCBWTVwiXG4rXHRcdFtbIFwiJGVsYXBzZWRcIiAtZ2UgXCIkV0FJVF9UT1RBTFwiIF1dIFx1MDAyNlx1MDAyNiBcXFxuK1x0XHRcdGRpZSBcInRpbWVkIG91dCB3YWl0aW5nIGZvciBWTSBib290XCJcbitcdFx0c2xlZXAgMVxuK1x0XHRlbGFwc2VkPSQoKGVsYXBzZWQgKyAxKSlcbitcdGRvbmVcbit9XG4rXG4rdm1fd2FpdF9mb3Jfc3NoKCkge1xuK1x0bG9jYWwgaT0wXG4rXHR3aGlsZSB0cnVlOyBkb1xuK1x0XHR2bV9zc2ggLS0gdHJ1ZSBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdFx0aT0kKChpICsgMSkpXG4rXHRcdFtbIFwiJHtpfVwiIC1ndCBcIiRXQUlUX1BFUklPRF9NQVhcIiBdXSBcdTAwMjZcdTAwMjYgXFxcbitcdFx0XHRkaWUgXCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgZ3Vlc3Qgc3NoXCJcbitcdFx0c2xlZXAgXCIkV0FJVF9QRVJJT0RcIlxuK1x0ZG9uZVxuK31cbitcbitjaGVja19ndWVzdF9yZXF1aXJlbWVudHMoKSB7XG4rXHR2bV9zc2ggLS0gXCJncmVwIC1xIG1lbW9yeSAvc3lzL2ZzL2Nncm91cC9jZ3JvdXAuY29udHJvbGxlcnNcIiBcXFxuK1x0XHR8fCBkaWUgXCJtZW1vcnkgY29udHJvbGxlciBub3QgYXZhaWxhYmxlIChDT05GSUdfTUVNQ0c/KVwiXG4rXHR2bV9zc2ggLS0gXCJbWyAtZSAvZGV2L2RtYV9oZWFwL2RlZmF1bHRfY21hX3JlZ2lvbiBdXVwiIFxcXG4rXHRcdHx8IGRpZSBcIkNNQSBoZWFwIG5vdCBhdmFpbGFibGUgKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BPyBjbWE9IGNtZGxpbmU/KVwiXG4rfVxuK1xuK3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nKCkge1xuK1x0dm1fc3NoIC0tIFwibW91bnQgLW8gcmVtb3VudCxtZW1vcnlfY21hX2FjY291bnRpbmcgL3N5cy9mcy9jZ3JvdXBcIiBcXFxuK1x0XHR8fCBkaWUgXCJmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeV9jbWFfYWNjb3VudGluZ1wiXG4rXHR2bV9zc2ggLS0gXCJlY2hvICttZW1vcnkgXHUwMDNlIC9zeXMvZnMvY2dyb3VwL2Nncm91cC5zdWJ0cmVlX2NvbnRyb2xcIiBcXFxuK1x0XHR8fCBkaWUgXCJmYWlsZWQgdG8gZW5hYmxlIG1lbW9yeSBjb250cm9sbGVyXCJcbit9XG4rXG4rcnVuX3Rlc3QoKSB7XG4rXHR2bV9zc2ggLS0gXCJjZCAnJEdVRVNUX1RSRUUnIFx1MDAyNlx1MDAyNiBtYWtlIC1DIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzIFRBUkdFVFM9Y2dyb3VwXCJcbitcdHZtX3NzaCAtLSBcImNkICckR1VFU1RfVFJFRScgXHUwMDI2XHUwMDI2IG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMgVEFSR0VUUz1jZ3JvdXAgcnVuX3Rlc3RzXCJcbit9XG4rXG4rd2hpbGUgZ2V0b3B0cyBcIjpodnE6c2JcIiBvcHQ7IGRvXG4rXHRjYXNlIFwiJG9wdFwiIGluXG4rXHR2KSBWRVJCT1NFPTEgOztcbitcdHEpIFFFTVU9XCIke09QVEFSR31cIiA7O1xuK1x0YikgQlVJTEQ9MSA7O1xuK1x0cykgU0hFTExfTU9ERT0xIDs7XG4rXHRofCopIHVzYWdlIDs7XG4rXHRlc2FjXG4rZG9uZVxuK1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rY2hlY2tfZGVwc1xuK2hhbmRsZV9idWlsZFxuK2VjaG8gXCJCb290aW5nIHZpcnRtZS1uZyBWTS4uLlwiXG4rdm1fc3RhcnRcbit2bV93YWl0X2Zvcl9zc2hcbitlY2hvIFwiVk0gaXMgcmVhY2hhYmxlIHZpYSBTU0guXCJcbitcbitpZiBbWyBcIiRTSEVMTF9NT0RFXCIgLWVxIDEgXV07IHRoZW5cbitcdGVjaG8gXCJTdGFydGluZyBpbnRlcmFjdGl2ZSBzaGVsbCBpbiBWTS4gRXhpdCB0byBzdG9wIFZNLlwiXG4rXHR2bV9zc2ggLXQgLS0gXCJjZCAnJEdVRVNUX1RSRUUnIFx1MDAyNlx1MDAyNiBleGVjIGJhc2ggLS1ub3Byb2ZpbGUgLS1ub3JjXCJcbitcdGV4aXQgXCIkS1NGVF9QQVNTXCJcbitmaVxuK1xuK2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50c1xuK3NldHVwX2d1ZXN0X2NtYV9hY2NvdW50aW5nXG4rXG4rZWNobyBcIlJ1bm5pbmcgY2dyb3VwIHNlbGZ0ZXN0cyBpbiBWTS4uLlwiXG4rcnVuX3Rlc3RcbitlY2hvIFwiUEFTUzogY2dyb3VwIHNlbGZ0ZXN0cyBjb21wbGV0ZWRcIlxuK2V4aXQgXCIkS1NGVF9QQVNTXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEyOjQwLjQwOTIwMTgxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5ODE0MzAwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IENNQSBNZW1vcnkgQWNjb3VudGluZyBpbiBjZ3JvdXAgdjIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgc2NyZWFtcyBcImZ1enogdGhpcyFcIi4gSXQgaW50cm9kdWNlcyBhIG5ldyBgbWVtb3J5X2NtYV9hY2NvdW50aW5nYCBtb3VudCBvcHRpb24gZm9yIGNncm91cCB2Mi4gRXNzZW50aWFsbHksIGVuYWJsaW5nIHRoaXMgYWNjb3VudHMgQ01BIG1lbW9yeSB1c2FnZSB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyLCBhbmQgaXQgZXhwb3NlcyBwZXItQ01BIGFyZWEgY291bnRlcnMuIENydWNpYWxseSwgdGhlIGNoYW5nZXMgdG91Y2ggY29yZSBrZXJuZWwgYXJlYXMgbGlrZSBjZ3JvdXAsIHRoZSBtZW1vcnkgY29udHJvbGxlciwgYW5kIENNQSBpdHNlbGYuIEdpdmVuIHRoYXQgQ01BICpjYW4qIGJlIHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgdGhhdCdzIGEgYmlnIGdyZWVuIGZsYWcuIFRoZSBleGlzdGVuY2Ugb2YgYSBuZXcgc2VsZnRlc3QsIGB0ZXN0X2NtYV9tZW1jZy5jYCwgdXNpbmcgYC9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uYCBhbmQgYGh1Z2V0bGJfY21hYCBqdXN0IHJlaW5mb3JjZXMgdGhpcy4gVGhpcyBwYXRjaCAqZGVtYW5kcyogZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHBpbnBvaW50aW5nIHRoZSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IGZ1enppbmcgdGFyZ2V0cy4gTG9va2luZyBhdCB0aGUgZGlmZiwgYSBmZXcgc3RhbmQgb3V0OiBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCwgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCwgYW5kIHRoZSBtb2RpZmllZCBgY21hX3JlbGVhc2VgIGFuZCBgY21hX3JlbGVhc2VfZnJvemVuYC4gV2hpbGUgdGhlIGxhdHRlciB0d28gaGF2ZSBzaWduYXR1cmUgY2hhbmdlcywgSSdtIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgbmV3IGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgIGZ1bmN0aW9ucy5cblxuSSBjb25maXJtZWQgdGhhdCBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYCBhcmUgKm5vdCogc3RhdGljLCB3aGljaCBpcyBpZGVhbCBmb3IgcG90ZW50aWFsIGZ1enppbmcuIGBfX2NtYV9hbGxvY19mcm96ZW5gIGNhbGxzIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgX19jbWFfcmVsZWFzZV9mcm96ZW5gIGNhbGxzIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAsIG1ha2luZyB0aGVzZSBpbmRpcmVjdGx5IHRhcmdldHMuXG5cbk5vdyBmb3IgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIGFsdGVycyB0aGUgc2VsZnRlc3RzIGNvbmZpZywgbWFraW5nIGl0IGNsZWFyIHRoYXQgYENPTkZJR19DTUFgLCBgQ09ORklHX0RNQV9DTUFgLCBgQ09ORklHX0RNQUJVRl9IRUFQU2AsIGBDT05GSUdfRE1BQlVGX0hFQVBTX0NNQWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AgYXJlIGFsbCBlc3NlbnRpYWwuIE9idmlvdXNseSwgYENPTkZJR19NRU1DR2AgaXMgYWxzbyByZXF1aXJlZC4gSSd2ZSBhbHNvIHZlcmlmaWVkIHRoaXMgd2l0aCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgYCNpZmRlZiBDT05GSUdfQ01BYC5cblxuVGltZSB0byBkb3VibGUtY2hlY2sgbXkgZmluZGluZ3MsIGJ1dCBJIGFtIGNvbmZpZGVudC4gSSB3aWxsIHVzZSBhIGdyZXBwZXIgb3Igc2ltaWxhciB0b29sIHRvIG1ha2Ugc3VyZSBJIGRpZCBub3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjo1MC4zOTA2MzU1MDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NTE5NzM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2NoYXJnZV9jbWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjY2PWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NjY5OmludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjcwLVxcdFxcdFxcdCAgc3RydWN0IGNtYSAqY21hKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNjY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTcxLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNzI6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGNtYSAqY21hKVxcbi0tXFxubW0vY21hLmM9ODYzPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19jbWFfYWxsb2NfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSxcXG4tLVxcbm1tL2NtYS5jLTkwNi1cXG5tbS9jbWEuYzo5MDc6XFx0aWYgKHBhZ2UgXFx1MDAyNlxcdTAwMjYgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHBhZ2UsIGNvdW50LCBjbWEpKSB7XFxubW0vY21hLmMtOTA4LVxcdFxcdGZyZWVfY29udGlnX2Zyb3plbl9yYW5nZShwYWdlX3RvX3BmbihwYWdlKSwgY291bnQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMzc9c3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfY21hKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0MS1cXG5tbS9tZW1jb250cm9sLmM6NTI0MjppbnQgbWVtX2Nncm91cF9jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxcbm1tL21lbWNvbnRyb2wuYy01MjQzLVxcdFxcdFxcdCAgc3RydWN0IGNtYSAqY21hKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjo1Mi4xNjU4MzgxNDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg0NDM4NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQ01BIE1lbW9yeSBBY2NvdW50aW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGVuYWJsZWQuIEkndmUgbm90aWNlZCB0aGF0IHRoZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgYXJlICpub3QqIGRlY2xhcmVkIHN0YXRpYywgYW5kIHRoZXkncmUgKm5vdCogYmVpbmcgaW5saW5lZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcgZm9yIG1lLiBOb24tc3RhdGljLCBub24taW5saW5lZCBtZWFucyB0aGV5IGhhdmUgd2lkZXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBjYWxscyBmcm9tIHBsYWNlcyBJIG1pZ2h0IG5vdCBpbW1lZGlhdGVseSBleHBlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQ01BLiBUaGlzIGxhY2sgb2Ygb3B0aW1pemF0aW9uIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wYWN0cywgb3IgYXQgbGVhc3QgcmFpc2VzIGEgcmVkIGZsYWcgaW4gdGVybXMgb2YgY29udHJvbCBmbG93LlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGBjbWFfcmVsZWFzZWAgYW5kIGBjbWFfcmVsZWFzZV9mcm96ZW5gIGludGVyYWN0IHdpdGggdGhlbS4gVGhvc2UgcmVsZWFzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGluIG1hbmFnaW5nIENNQSBtZW1vcnksIGFuZCB0aGV5J3JlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGVzIHRvIGNhbGwgdGhlIGZ1bmN0aW9ucyBJJ20gcXVlc3Rpb25pbmcuIEJ5IHRyYWNpbmcgdGhlIGNhbGwgZ3JhcGgsIEkgY2FuIGhvcGVmdWxseSBzZWUgd2hlcmUgdGhlIGNoYXJnaW5nIGFuZCB1bmNoYXJnaW5nIGhhcHBlbiB3aXRoaW4gdGhlIHJlbGVhc2UgcHJvY2Vzcy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZCBhcyBpbnRlbmRlZCwgYW5kIGlmIHNvLCB1bmRlcnN0YW5kIHRoZSBwYXRoIG9mIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMjo1Ni4zNTAyODA1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIwNDkxODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNtYV9yZWxlYXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X2J1aWx0aW4uYz02Nz12b2lkIGt2bV9mcmVlX2hwdF9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfYnVpbHRpbi5jLTY4LXtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9idWlsdGluLmM6Njk6XFx0Y21hX3JlbGVhc2Uoa3ZtX2NtYSwgcGFnZSwgbnJfcGFnZXMpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X2J1aWx0aW4uYy03MC19XFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTEwMD1ib29sIGJjbWFfd2FpdF92YWx1ZShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTExOC1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjExOTpzdGF0aWMgdm9pZCBiY21hX3JlbGVhc2VfY29yZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMTIwLXtcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM9MjM4PXZvaWQgYmNtYV9wcmVwYXJlX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSlcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMjQwLVxcdGRldmljZV9pbml0aWFsaXplKFxcdTAwMjZjb3JlLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvYmNtYS9tYWluLmM6MjQxOlxcdGNvcmUtXFx1MDAzZWRldi5yZWxlYXNlID0gYmNtYV9yZWxlYXNlX2NvcmVfZGV2O1xcbmRyaXZlcnMvYmNtYS9tYWluLmMtMjQyLVxcdGNvcmUtXFx1MDAzZWRldi5idXMgPSBcXHUwMDI2YmNtYV9idXNfdHlwZTtcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jPTI1MD1zdGF0aWMgdm9pZCBjbWFfaGVhcF9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jLTI2My1cXHQvKiByZWxlYXNlIG1lbW9yeSAqL1xcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jOjI2NDpcXHRjbWFfcmVsZWFzZShjbWFfaGVhcC1cXHUwMDNlY21hLCBidWZmZXItXFx1MDAzZWNtYV9wYWdlcywgYnVmZmVyLVxcdTAwM2VwYWdlY291bnQpO1xcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jLTI2NS1cXHRrZnJlZShidWZmZXIpO1xcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmM9MjgxPXN0YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqY21hX2hlYXBfYWxsb2NhdGUoc3RydWN0IGRtYV9oZWFwICpoZWFwLFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmMtMzYwLWZyZWVfY21hOlxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9jbWFfaGVhcC5jOjM2MTpcXHRjbWFfcmVsZWFzZShjbWFfaGVhcC1cXHUwMDNlY21hLCBjbWFfcGFnZXMsIHBhZ2Vjb3VudCk7XFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL2NtYV9oZWFwLmMtMzYyLWZyZWVfYnVmZmVyOlxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9NTg3PXN0YXRpYyB2b2lkIGNtYV9hdHRhY2hfdG9fZGV2KHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy01OTUtXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6NTk2OnN0YXRpYyB2b2lkIGNtYV9yZWxlYXNlX2RldihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTU5Ny17XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYz0xOTYzPXN0YXRpYyB2b2lkIGNtYV9jYW5jZWxfb3BlcmF0aW9uKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYy0xOTg5LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjE5OTA6c3RhdGljIHZvaWQgY21hX3JlbGVhc2VfcG9ydChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTE5OTEte1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM9MjA1Nz1zdGF0aWMgdm9pZCBfZGVzdHJveV9pZChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMtMjA3Mi1cXHRcXHRjbWFfbGVhdmVfbWNfZ3JvdXBzKGlkX3ByaXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jOjIwNzM6XFx0XFx0Y21hX3JlbGVhc2VfZGV2KGlkX3ByaXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzQtXFx0fVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzUtXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6MjA3NjpcXHRjbWFfcmVsZWFzZV9wb3J0KGlkX3ByaXYpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTIwNzctXFx0Y21hX2lkX3B1dChpZF9wcml2KTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jPTQwMTE9c3RhdGljIGludCByZG1hX2JpbmRfYWRkcl9kc3Qoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdixcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jLTQwNjMtXFx0aWYgKGlkX3ByaXYtXFx1MDAzZWNtYV9kZXYpXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmM6NDA2NDpcXHRcXHRjbWFfcmVsZWFzZV9kZXYoaWRfcHJpdik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMtNDA2NS1lcnIxOlxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jPTgxPXN0YXRpYyB2b2lkIHZtY3BfcmVzcG9uc2VfZnJlZShzdHJ1Y3Qgdm1jcF9zZXNzaW9uICpzZXNzaW9uKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jLTkxLVxcdFxcdHBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc2Vzc2lvbi1cXHUwMDNlcmVzcG9uc2UpO1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYzo5MjpcXHRcXHRjbWFfcmVsZWFzZSh2bWNwX2NtYSwgcGFnZSwgbnJfcGFnZXMpO1xcbmRyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYy05My1cXHRcXHRzZXNzaW9uLVxcdTAwM2VjbWFfYWxsb2MgPSAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jbWEuaD01MD1leHRlcm4gc3RydWN0IHBhZ2UgKmNtYV9hbGxvYyhzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGludCBhbGlnbixcXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTUxLVxcdFxcdFxcdCAgICAgIGJvb2wgbm9fd2Fybik7XFxuaW5jbHVkZS9saW51eC9jbWEuaDo1MjpleHRlcm4gYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudCk7XFxuaW5jbHVkZS9saW51eC9jbWEuaC01My1cXG4tLVxcbmluY2x1ZGUvbGludXgvY21hLmg9NTY9c3RydWN0IHBhZ2UgKmNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoc3RydWN0IGNtYSAqY21hLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgvY21hLmg6NTc6Ym9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXFxuaW5jbHVkZS9saW51eC9jbWEuaC01OC1cXHRcXHR1bnNpZ25lZCBsb25nIGNvdW50KTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NtYS5oLTEwLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NtYS5oOjExOlRSQUNFX0VWRU5UKGNtYV9yZWxlYXNlLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NtYS5oLTEyLVxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM9Mzg1PWJvb2wgZG1hX3JlbGVhc2VfZnJvbV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2VzLFxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtMzg3LXtcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYzozODg6XFx0cmV0dXJuIGNtYV9yZWxlYXNlKGRldl9nZXRfY21hX2FyZWEoZGV2KSwgcGFnZXMsIGNvdW50KTtcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy0zODktfVxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM9NDEzPXN0cnVjdCBwYWdlICpkbWFfYWxsb2NfY29udGlndW91cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NTAtICogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb250aWd1b3VzKCkuIEFzIHRoZVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ1MTogKiBjbWFfcmVsZWFzZSByZXR1cm5zIGZhbHNlIHdoZW4gcHJvdmlkZWQgcGFnZXMgZG8gbm90IGJlbG9uZyB0byBjb250aWd1b3VzXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDUyLSAqIGFyZWEgYW5kIHRydWUgb3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIHRoZW4gZG9lcyBhIGZhbGxiYWNrIF9fZnJlZV9wYWdlcygpXFxuLS1cXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYz00NTU9dm9pZCBkbWFfZnJlZV9jb250aWd1b3VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBzaXplKVxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDYwLVxcdGlmIChkZXYtXFx1MDAzZWNtYV9hcmVhKSB7XFxua2VybmVsL2RtYS9jb250aWd1b3VzLmM6NDYxOlxcdFxcdGlmIChjbWFfcmVsZWFzZShkZXYtXFx1MDAzZWNtYV9hcmVhLCBwYWdlLCBjb3VudCkpXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDYyLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jLTQ2Ny0jaWZkZWYgQ09ORklHX0RNQV9OVU1BX0NNQVxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ2ODpcXHRcXHRpZiAoY21hX3JlbGVhc2UoZG1hX2NvbnRpZ3VvdXNfbnVtYV9hcmVhW3BhZ2VfdG9fbmlkKHBhZ2UpXSxcXG5rZXJuZWwvZG1hL2NvbnRpZ3VvdXMuYy00NjktXFx0XFx0XFx0XFx0XFx0cGFnZSwgY291bnQpKVxcbi0tXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDcxLSNlbmRpZlxcbmtlcm5lbC9kbWEvY29udGlndW91cy5jOjQ3MjpcXHRcXHRpZiAoY21hX3JlbGVhc2UoZG1hX2NvbnRpZ3VvdXNfZGVmYXVsdF9hcmVhLCBwYWdlLCBjb3VudCkpXFxua2VybmVsL2RtYS9jb250aWd1b3VzLmMtNDczLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2NtYS5jPTk2NT1zdGF0aWMgc3RydWN0IGNtYV9tZW1yYW5nZSAqZmluZF9jbWFfbWVtcmFuZ2Uoc3RydWN0IGNtYSAqY21hLFxcbi0tXFxubW0vY21hLmMtOTk4LVxcbm1tL2NtYS5jOjk5OTpzdGF0aWMgdm9pZCBfX2NtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmNtcixcXG5tbS9jbWEuYy0xMDAwLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudClcXG4tLVxcbm1tL2NtYS5jLTEwMDktXFx0Y21hX3N5c2ZzX2FjY291bnRfcmVsZWFzZV9wYWdlcyhjbWEsIGNvdW50KTtcXG5tbS9jbWEuYzoxMDEwOlxcdHRyYWNlX2NtYV9yZWxlYXNlKGNtYS1cXHUwMDNlbmFtZSwgcGZuLCBwYWdlcywgY291bnQpO1xcbm1tL2NtYS5jLTEwMTEtfVxcbi0tXFxubW0vY21hLmMtMTAxMy0vKipcXG5tbS9jbWEuYzoxMDE0OiAqIGNtYV9yZWxlYXNlKCkgLSByZWxlYXNlIGFsbG9jYXRlZCBwYWdlc1xcbm1tL2NtYS5jLTEwMTUtICogQGNtYTogICBDb250aWd1b3VzIG1lbW9yeSByZWdpb24gZm9yIHdoaWNoIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZC5cXG4tLVxcbm1tL2NtYS5jLTEwMjItICovXFxubW0vY21hLmM6MTAyMzpib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLFxcbm1tL2NtYS5jLTEwMjQtXFx0XFx0IHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5tbS9jbWEuYy0xMDM5LVxcbm1tL2NtYS5jOjEwNDA6XFx0X19jbWFfcmVsZWFzZV9mcm96ZW4oY21hLCBjbXIsIHBhZ2VzLCBjb3VudCk7XFxubW0vY21hLmMtMTA0MS1cXG4tLVxcbm1tL2NtYS5jLTEwNDMtfVxcbm1tL2NtYS5jOjEwNDQ6RVhQT1JUX1NZTUJPTF9HUEwoY21hX3JlbGVhc2UpO1xcbm1tL2NtYS5jLTEwNDUtXFxubW0vY21hLmM6MTA0Njpib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcyxcXG5tbS9jbWEuYy0xMDQ3LVxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpXFxuLS1cXG5tbS9jbWEuYy0xMDU0LVxcbm1tL2NtYS5jOjEwNTU6XFx0X19jbWFfcmVsZWFzZV9mcm96ZW4oY21hLCBjbXIsIHBhZ2VzLCBjb3VudCk7XFxubW0vY21hLmMtMTA1Ni1cXG4tLVxcbm1tL2NtYV9kZWJ1Zy5jPTg5PXN0YXRpYyBpbnQgY21hX2ZyZWVfbWVtKHN0cnVjdCBjbWEgKmNtYSwgaW50IGNvdW50KVxcbi0tXFxubW0vY21hX2RlYnVnLmMtOTgtXFx0XFx0aWYgKG1lbS1cXHUwMDNlbiBcXHUwMDNjPSBjb3VudCkge1xcbm1tL2NtYV9kZWJ1Zy5jOjk5OlxcdFxcdFxcdGNtYV9yZWxlYXNlKGNtYSwgbWVtLVxcdTAwM2VwLCBtZW0tXFx1MDAzZW4pO1xcbm1tL2NtYV9kZWJ1Zy5jLTEwMC1cXHRcXHRcXHRjb3VudCAtPSBtZW0tXFx1MDAzZW47XFxuLS1cXG5tbS9jbWFfZGVidWcuYy0xMDItXFx0XFx0fSBlbHNlIGlmIChjbWEtXFx1MDAzZW9yZGVyX3Blcl9iaXQgPT0gMCkge1xcbm1tL2NtYV9kZWJ1Zy5jOjEwMzpcXHRcXHRcXHRjbWFfcmVsZWFzZShjbWEsIG1lbS1cXHUwMDNlcCwgY291bnQpO1xcbm1tL2NtYV9kZWJ1Zy5jLTEwNC1cXHRcXHRcXHRtZW0tXFx1MDAzZXAgKz0gY291bnQ7XFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9odWdldGxiX2NtYS5jLTIyLXtcXG5tbS9odWdldGxiX2NtYS5jOjIzOlxcdFdBUk5fT05fT05DRSghY21hX3JlbGVhc2VfZnJvemVuKGh1Z2V0bGJfY21hW2ZvbGlvX25pZChmb2xpbyldLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjQtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSwgZm9saW9fbnJfcGFnZXMoZm9saW8pKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEyOjU4LjE3MDc3NzgxMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTg4MDYxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhpcyBNZW1vcnkgQ0dyb3VwcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgIOKAkyB0aG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGFsc28gbW9kaWZ5aW5nIGBjZ3JvdXAyX3BhcnNlX3BhcmFtYCBhbmQgYGFwcGx5X2Nncm91cF9yb290X2ZsYWdzYCB0byBoYW5kbGUgYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AuIEFuZCBpdCdzIGFkZGluZyBzb21lIG5ldyBzaG93L3dyaXRlIGZ1bmN0aW9ucyBmb3IgdGhlIGNncm91cGZzOiBgbWVtb3J5X2NtYV9jdXJyZW50X3Nob3dgLCBgbWVtb3J5X2NtYV9tYXhfc2hvd2AsIGFuZCBgbWVtb3J5X2NtYV9tYXhfd3JpdGVgLiBUaGVzZSBhcmUgc3RhdGljIGJ1dCByZWFjaGFibGUgdGhyb3VnaCB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIGltcG9ydGFudC5cblxuVGhlIHJlYWwga2V5IGhlcmUgaXMgaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIHRyaWdnZXJlZCB2aWEgYGNtYV9hbGxvY2AgYW5kIGBjbWFfcmVsZWFzZWAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHdoZXJlIHRoZSBjaGFyZ2UvdW5jaGFyZ2UgY2FsbHMgYXJlIG1hZGUuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjazogYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgaXNuJ3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIGF2YWlsYWJsZS4gQW5kIGBtZW1fY2dyb3VwX2NtYV9pbml0YCBpcyBhbiBpbml0Y2FsbCwgc28gdGhhdCdzIGludGVyZXN0aW5nIGZvciBzZXR1cC4gSSBzaG91bGQgcHJvYmFibHkgZnV6eiBgY2dyb3VwMl9wYXJzZV9wYXJhbWAgZm9yIG1vdW50IG9wdGlvbnMgbGF0ZXIuXG5cbk15IGluaXRpYWwgZm9jdXMgc3ltYm9scywgdGhlbiwgYXJlOlxuXG4qICAgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWBcbiogICBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgXG4qICAgYGNtYV9yZWxlYXNlYFxuKiAgIGBjbWFfcmVsZWFzZV9mcm96ZW5gXG4qICAgYGNtYV9hbGxvY2BcbiogICBgY21hX2FsbG9jX2Zyb3plbmBcbiogICBgY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZGBcblxuV2FpdCwgYGNtYV9hbGxvY2AgYW5kIGBjbWFfcmVsZWFzZWAgYXJlIGV4aXN0aW5nIGZ1bmN0aW9ucywgYnV0IHRoZWlyIGJlaGF2aW9yICppcyogY2hhbmdlZCBieSB0aGlzLiBBY3R1YWxseSwgdGhlIHNpZ25hdHVyZSBvZiBgY21hX3JlbGVhc2VgIGFuZCBgY21hX3JlbGVhc2VfZnJvemVuYCBoYXMgY2hhbmdlZC4gVGhlIG5ldyBsb2dpYyBpcyBpbiBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8ga25vdyB3aGF0J3MgcmVxdWlyZWQgZm9yIHRoaXMgdG8gYmUgYWN0aXZlLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIG1lbnRpb25zOiBgQ09ORklHX0NNQWAsIGBDT05GSUdfTUVNQ0dgLCBgQ09ORklHX0RNQV9DTUFgLCBgQ09ORklHX0RNQUJVRl9IRUFQU2AsIGBDT05GSUdfRE1BQlVGX0hFQVBTX0NNQWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIFRoZSBzZWxmdGVzdHMgdHJpZ2dlciBDTUEgYWxsb2NhdGlvbnMgd2l0aCB0aG9zZSwgZXNwZWNpYWxseSBgQ09ORklHX0RNQV9DTUFgLCBgQ09ORklHX0RNQUJVRl9IRUFQU2AsIGBDT05GSUdfRE1BQlVGX0hFQVBTX0NNQWAsIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIFdoaWxlIGZ1enppbmcsIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19NRU1DR2AgYXJlIHRoZSBjb3JlIG9uZXMuIEJ1dCB0byBhY3R1YWxseSB0cmlnZ2VyIENNQSBhbGxvY2F0aW9ucyBmcm9tIHVzZXJzcGFjZSwgSSdsbCBuZWVkIGBDT05GSUdfRE1BQlVGX0hFQVBTX0NNQWAgb3IgYENPTkZJR19IVUdFVExCRlNgICh3aXRoIHRoZSBgaHVnZXRsYl9jbWFgIGJvb3QgcGFyYW0pLiBTbywgdG8gYmUgc2FmZSwgSSdsbCBpbmNsdWRlIHRoZXNlIGluIG15IG5vdGVzOlxuXG4qICAgYENNQWBcbiogICBgTUVNQ0dgXG4qICAgYERNQV9DTUFgXG4qICAgYERNQUJVRl9IRUFQU2BcbiogICBgRE1BQlVGX0hFQVBTX0NNQWBcbiogICBgSFVHRVRMQkZTYFxuXG5JJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBjb25maWcgbmFtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTk6MTM6MTAuMTU4ODQyODA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzQzMzcxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRE1BQlVGX0hFQVBTX0NNQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZz0xMDgxPUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPW1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZzoxMDgyOkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPW1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZy0xMDgzLUNPTkZJR19WSVJUSU9fUENJPXlcXG4tLVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc9MTQwOT1DT05GSUdfRE1BQlVGX0hFQVBTX1NZU1RFTT1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxNDEwOkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPW1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTE0MTEtQ09ORklHX1ZGSU89eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz04OTY9Q09ORklHX0RNQUJVRl9IRUFQU19TWVNURU09eVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWc6ODk3OkNPTkZJR19ETUFCVUZfSEVBUFNfQ01BPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTg5OC1DT05GSUdfVUlPPW1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc9OTI1PUNPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjkyNjpDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy05MjctQ09ORklHX1VJTz1tXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZz04PWNvbmZpZyBETUFCVUZfSEVBUFNfU1lTVEVNX0NDX1NIQVJFRFxcbi0tXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWctMTUtXFxuZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWc6MTY6Y29uZmlnIERNQUJVRl9IRUFQU19DTUFcXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZy0xNy1cXHR0cmlzdGF0ZSBcXFwiRE1BLUJVRiBDTUEgSGVhcFxcXCJcXG4tLVxcbmRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19ETUFCVUZfSEVBUFNfU1lTVEVNKVxcdCs9IHN5c3RlbV9oZWFwLm9cXG5kcml2ZXJzL2RtYS1idWYvaGVhcHMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfRE1BQlVGX0hFQVBTX0NNQSlcXHRcXHQrPSBjbWFfaGVhcC5vXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnPTk9Q09ORklHX0RNQUJVRl9IRUFQUz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZzoxMDpDT05GSUdfRE1BQlVGX0hFQVBTX0NNQT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZy0xMS1DT05GSUdfSFVHRVRMQkZTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2g9MTQ3PWNoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2gtMTUwLVxcdHZtX3NzaCAtLSBcXFwiW1sgLWUgL2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb24gXV1cXFwiIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoOjE1MTpcXHRcXHR8fCBkaWUgXFxcIkNNQSBoZWFwIG5vdCBhdmFpbGFibGUgKENPTkZJR19ETUFCVUZfSEVBUFNfQ01BPyBjbWE9IGNtZGxpbmU/KVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoLTE1Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEzOjEyLjA5MzE4NTUwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDgzOTEzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ01BIE1lbW9yeSBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgc28gdGhlIGBETUFCVUZfSEVBUFNfQ01BYCBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgaGVyZTsgdGhhdCBjaGVja3Mgb3V0LiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19QQUdFX0NPVU5URVJgIGRvZXNuJ3QgcG9zZSBhIHByb2JsZW0uIFNpbmNlIGl0J3Mgc2VsZWN0ZWQgYnkgYE1FTUNHYCwgd2hpY2ggaXMgYSBwcmVyZXF1aXNpdGUsIHdlJ3JlIGdvb2QgdG8gZ28uXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYC4gVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24sIGBtZW1vcnlfY21hX2FjY291bnRpbmdgLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgaG93IENNQSBtZW1vcnkgdXNhZ2UgaXMgdHJhY2tlZCB3aXRoaW4gYSBjZ3JvdXAncyB0b3RhbCBtZW1vcnkgYWxsb3dhbmNlLiBUaGUgbmV3IGZ1bmN0aW9ucywgYXMgSSBtZW50aW9uZWQsIGFyZSB0aGUga2V5IHRvIHRoaXMgYWNjb3VudGluZywgaGFuZGxpbmcgY2hhcmdlIGFuZCB1bmNoYXJnZSBvcGVyYXRpb25zIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggQ01BIGFsbG9jYXRpb25zLCBzdWNoIGFzIERNQS1CVUYgaGVhcHMgb3IgaHVnZXRsYiwgd2hlbiB0aGUgbW91bnQgb3B0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBhbmQgQ01BIHN1YnN5c3RlbXMsIGFuZCBpdCdzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgbmVlZHMgdGhvcm91Z2ggZnV6emluZywgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgSSd2ZSBnb3QgYSBwcmV0dHkgZ29vZCBncmFzcDogYENNQWAsIGBNRU1DR2AsIGBETUFfQ01BYCwgYERNQUJVRl9IRUFQU2AsIGBETUFCVUZfSEVBUFNfQ01BYCwgYW5kIGBIVUdFVExCRlNgLiBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIGBETUFCVUZfSEVBUFNfQ01BYCBhbmQgYE1FTUNHYC5cblxuSSdsbCBxdWlja2x5IHJldmlldyBvdGhlciBmdW5jdGlvbnMuIFdoaWxlIGBjZ3JvdXAyX3BhcnNlX3BhcmFtYCBoYXMgYmVlbiBtb2RpZmllZCwgaXQncyBhIGdlbmVyaWMgbW91bnQgb3B0aW9uIHBhcnNpbmcgZnVuY3Rpb24sIHNvIHRoYXQncyBub3QgdGhlIHByaW1hcnkgZm9jdXMuIFNpbWlsYXJseSwgYGNtYV9yZWxlYXNlYCBhbmQgYGNtYV9yZWxlYXNlX2Zyb3plbmAgaGF2ZSBzaWduYXR1cmUgY2hhbmdlcyBidXQgdGhlIGNvcmUgbG9naWMgaXMgaW4gdGhlIG90aGVyIHR3by5cblxuU28sIGluIHN1bW1hcnksIEknbSBjb25maWRlbnQgdGhhdCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIHRoZSBhZGRpdGlvbiBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfY21hYCBhbmQgYG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hYC5cbkknbSByZWFkeSB0byBzZXQgbXkgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNjYsIk91dHB1dFRva2VucyI6MjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEzOjIwLjMwMTU4MDI5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MDg3NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJETUFfQ01BXCIsXG4gICAgXCJETUFCVUZfSEVBUFNcIixcbiAgICBcIkRNQUJVRl9IRUFQU19DTUFcIixcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2NtYVwiLFxuICAgIFwibWVtX2Nncm91cF91bmNoYXJnZV9jbWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2Agd2hpY2ggZW5hYmxlcyBhY2NvdW50aW5nIG9mIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJ3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UuIEl0IGFkZHMgbmV3IGNvcmUgZnVuY3Rpb25zIGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgIHRvIGhhbmRsZSB0aGUgYWNjb3VudGluZyBkdXJpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDTUEgYWxsb2NhdGlvbnMgKGUuZy4sIHVzaW5nIERNQS1CVUYgaGVhcHMgb3IgaHVnZXRsYikgd2hlbiB0aGUgbW91bnQgb3B0aW9uIGlzIGVuYWJsZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgY29udHJvbGxlciBhbmQgQ01BIHN1YnN5c3RlbXMgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNNQVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkRNQV9DTUFcIixcbiAgICBcIkRNQUJVRl9IRUFQU1wiLFxuICAgIFwiRE1BQlVGX0hFQVBTX0NNQVwiLFxuICAgIFwiSFVHRVRMQkZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfY21hXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2dyb3VwIHYyIG1vdW50IG9wdGlvbiBgbWVtb3J5X2NtYV9hY2NvdW50aW5nYCB3aGljaCBlbmFibGVzIGFjY291bnRpbmcgb2YgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAncyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gSXQgYWRkcyBuZXcgY29yZSBmdW5jdGlvbnMgYG1lbV9jZ3JvdXBfY2hhcmdlX2NtYWAgYW5kIGBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYWAgdG8gaGFuZGxlIHRoZSBhY2NvdW50aW5nIGR1cmluZyBDTUEgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENNQSBhbGxvY2F0aW9ucyAoZS5nLiwgdXNpbmcgRE1BLUJVRiBoZWFwcyBvciBodWdldGxiKSB3aGVuIHRoZSBtb3VudCBvcHRpb24gaXMgZW5hYmxlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBjb250cm9sbGVyIGFuZCBDTUEgc3Vic3lzdGVtcyB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEzOjIwLjM4NjY3NDk3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNjU1MjI3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxOToxMzoyMC4zODczMzc3MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjMwNjQ4NTU4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbmV3IGNncm91cCB2MiBtb3VudCBvcHRpb24gYG1lbW9yeV9jbWFfYWNjb3VudGluZ2AgdG8gYWNjb3VudCBDTUEgbWVtb3J5IHVzYWdlIHRvd2FyZHMgdGhlIGNncm91cCdzIG92ZXJhbGwgbWVtb3J5IHVzYWdlLiBUaGUgY2hhbmdlcyBpbnZvbHZlOlxcbjEuIEFkZGluZyBgY21hX2NvdW50ZXJzYCB0byBgc3RydWN0IG1lbV9jZ3JvdXBgLCB3aGljaCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cXG4yLiBBZGRpbmcgYGNtYV9kZmxfZmlsZXNgIGFycmF5IGZvciBjZ3JvdXBmcywgd2hpY2ggaXMgYWxzbyBhbGxvY2F0ZWQgdXNpbmcgYGtjYWxsb2NgICh6ZXJvLWluaXRpYWxpemVkKS5cXG4zLiBFeHBvc2luZyBDTUEgdXNhZ2UgYW5kIGxpbWl0cyB2aWEgY2dyb3VwZnMgZmlsZXMgKGBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5jdXJyZW50YCBhbmQgYG1lbW9yeS5jbWEuXFx1MDAzY2FyZWFcXHUwMDNlLm1heGApLiBUaGVzZSBmaWxlcyB1c2UgYHNlcV9wcmludGZgIGFuZCBgc2VxX3B1dHNfbWVtY2dfdHVuYWJsZWAgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLCBtZWFuaW5nIG5vIHJhdyBrZXJuZWwgc3RydWN0dXJlcyBvciBwYWRkaW5nIGJ5dGVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG40LiBNb2RpZnlpbmcgQ01BIGFsbG9jYXRpb24gYW5kIHJlbGVhc2UgcGF0aHMgdG8gY2hhcmdlIGFuZCB1bmNoYXJnZSBtZW1vcnkgY2dyb3Vwcy4gQWxsIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGluIHRoZXNlIHBhdGhzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIG5vIGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBwYXNzZWQgYXJvdW5kLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgaW4gYGNtYV9jb3VudGVyc2AsIHVzZS1hZnRlci1mcmVlIG9mIGBtZW1jZ2AsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIG1lbW9yeSBkZWJ1Z2dlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiBjb250cm9sIGZsb3cgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUzOGRlNzQxODEzZWI0NzZhOWQ1MjBjZmQwOTZjYTFhMGExNTE4NDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxOToxMjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuaW5kZXggYWVkMTk1YTcxY2JmMS4uMzk4NzFhN2EwOGE4ZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9jZ3JvdXAtdjIucnN0XG5AQCAtMjQ2LDYgKzI0NiwyNiBAQCBjZ3JvdXAgdjIgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgbW91bnQgb3B0aW9ucy5cbiAgICAgICAgICAgd2lsbCBub3QgYmUgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgKGV2ZW4gaWYgY2dyb3VwXG4gICAgICAgICAgIHYyIGlzIHJlbW91bnRlZCBsYXRlciBvbikuXG4gXG4rICBtZW1vcnlfY21hX2FjY291bnRpbmdcbisgICAgICAgIENvdW50IENNQSBtZW1vcnkgdXNhZ2UgdG93YXJkcyB0aGUgY2dyb3VwJ3Mgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgZm9yXG4rICAgICAgICB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGFuZCBleHBvc2UgcGVyLUNNQS1hcmVhIHVzYWdlIGNvdW50ZXJzLiBUaGlzXG4rICAgICAgICBiZWhhdmlvciBpcyBvcHQtaW4sIHNvIGFzIHRvIG5vdCBjYXVzZSByZWdyZXNzaW9uIG9uIGV4aXN0aW5nIHNldHVwcy5cbitcbisgICAgICAgIEEgZmV3IGNhdmVhdHMgdG8ga2VlcCBpbiBtaW5kOlxuK1xuKyAgICAgICAgKiBDTUEgYXJlYXMgYXJlIHJlc2VydmVkIGF0IGJvb3QgdGltZSwgbWVtb3J5IGlzIG9ubHkgY2hhcmdlZCB0byBhXG4rICAgICAgICAgIGNncm91cCB3aGVuIGEgQ01BIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIG9uIGl0cyBiZWhhbGYuXG4rICAgICAgICAqIENNQSBwYWdlcyBhbGxvY2F0ZWQgd2hpbGUgdGhpcyBvcHRpb24gaXMgbm90IGVuYWJsZWQgd2lsbCBub3QgYmVcbisgICAgICAgICAgdHJhY2tlZCBieSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIsIGV2ZW4gaWYgY2dyb3VwIHYyIGlzIHJlbW91bnRlZFxuKyAgICAgICAgICBsYXRlciBvbiB3aXRoIHRoaXMgb3B0aW9uLiBDaGFyZ2VzIGhhcHBlbiBhdCBhbGxvY2F0aW9uLlxuKyAgICAgICAgKiBDTUEgYWxsb2NhdGlvbnMgYXJlIGNoYXJnZWQgYm90aCB0byB0aGUgY2dyb3VwJ3MgbWVtb3J5IGNvdW50ZXJcbisgICAgICAgICAgKGxpbWl0ZWQgYnkgbWVtb3J5Lm1heCkgYW5kIHRoZSBwZXItYXJlYSBDTUEgY291bnRlciAobGltaXRlZCBieVxuKyAgICAgICAgICBtZW1vcnkuY21hLlx1MDAzY2FyZWFcdTAwM2UubWF4KS4gSGl0dGluZyBlaXRoZXIgbGltaXQgY2FuIGNhdXNlIGFuIGFsbG9jYXRpb25cbisgICAgICAgICAgdG8gZmFpbC4gSWYgQ01BIHVzYWdlIHB1c2hlcyB0aGUgY2dyb3VwIG92ZXIgbWVtb3J5LmhpZ2ggb3JcbisgICAgICAgICAgbWVtb3J5Lm1heCwgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpbGwgYXR0ZW1wdCB0byByZWNsYWltIG90aGVyXG4rICAgICAgICAgIG1lbW9yeSBvbmx5LiBDTUEgbWVtb3J5IGNoYXJnZWQgdG8gdGhlIGNncm91cCBpcyBub3QgcmVjbGFpbWFibGUuXG4rICAgICAgICAgIExpbWl0cyBzaG91bGQgYmUgc2l6ZWQgdG8gYWNjb21tb2RhdGUgdGhlIGV4cGVjdGVkIENNQSBwcmVzc3VyZS5cbitcbiAgIHBpZHNfbG9jYWxldmVudHNcbiAgICAgICAgIFRoZSBvcHRpb24gcmVzdG9yZXMgdjEtbGlrZSBiZWhhdmlvciBvZiBwaWRzLmV2ZW50czptYXgsIHRoYXQgaXMgb25seVxuICAgICAgICAgbG9jYWwgKGluc2lkZSBjZ3JvdXAgcHJvcGVyKSBmb3JrIGZhaWx1cmVzIGFyZSBjb3VudGVkLiBXaXRob3V0IHRoaXNcbkBAIC0xOTA4LDYgKzE5MjgsMjEgQEAgVGhlIGZvbGxvd2luZyBuZXN0ZWQga2V5cyBhcmUgZGVmaW5lZC5cbiBcdFRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IGlmIHpzd2FwIGlzIGRpc2FibGVkLCBhbmQgc3dhcHBpbmdcbiBcdGlzIGFsbG93ZWQgdW5sZXNzIG1lbW9yeS5zd2FwLm1heCBpcyBzZXQgdG8gMC5cbiBcbisgIG1lbW9yeS5jbWEuXHUwMDNjYXJlYVx1MDAzZS5jdXJyZW50XG4rICAgICAgICBBIHJlYWQtb25seSBzaW5nbGUgdmFsdWUgZmlsZSB3aGljaCBleGlzdHMgb24gbm9uLXJvb3QgY2dyb3Vwcy4gXHUwMDNjYXJlYVx1MDAzZVxuKyAgICAgICAgaXMgdGhlIENNQSBhcmVhIG5hbWUgKGUuZy4gXCJyZXNlcnZlZFwiIGZvciB0aGUgZGVmYXVsdCBETUEgQ01BIGFyZWEpLlxuK1xuKyAgICAgICAgVGhlIHRvdGFsIGFtb3VudCBvZiBDTUEgbWVtb3J5IGN1cnJlbnRseSBjaGFyZ2VkIHRvIHRoZSBjZ3JvdXAgZm9yIHRoZVxuKyAgICAgICAgZ2l2ZW4gQ01BIGFyZWEuIE9ubHkgYWNjb3VudGVkIHdoZW4gbWVtb3J5X2NtYV9hY2NvdW50aW5nIGlzIGVuYWJsZWQuXG4rXG4rICBtZW1vcnkuY21hLlx1MDAzY2FyZWFcdTAwM2UubWF4XG4rICAgICAgICBBIHJlYWQtd3JpdGUgc2luZ2xlIHZhbHVlIGZpbGUgd2hpY2ggZXhpc3RzIG9uIG5vbi1yb290IGNncm91cHMuIFRoZVxuKyAgICAgICAgZGVmYXVsdCBpcyBcIm1heFwiLlxuK1xuKyAgICAgICAgQ01BIHVzYWdlIGhhcmQgbGltaXQgZm9yIHRoZSBnaXZlbiBhcmVhLiBJZiBhIGNncm91cCdzIENNQSB1c2FnZSBmb3JcbisgICAgICAgIHRoaXMgYXJlYSBleGNlZWRzIHRoaXMgbGltaXQsIHRoZSBhbGxvY2F0aW9uIHdpbGwgZmFpbC4gT25seSBlbmZvcmNlZFxuKyAgICAgICAgd2hlbiBtZW1vcnlfY21hX2FjY291bnRpbmcgaXMgZW5hYmxlZC5cbitcbiAgIG1lbW9yeS5wcmVzc3VyZVxuIFx0QSByZWFkLW9ubHkgbmVzdGVkLWtleWVkIGZpbGUuXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG5pbmRleCBkZTJjZDYyMzhjMmFlLi4xNWYzZjcxMTBjNWIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAtZGVmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC1kZWZzLmhcbkBAIC0xMjksNiArMTI5LDExIEBAIGVudW0ge1xuIFx0ICogRW5hYmxlIGxlZ2FjeSBsb2NhbCBwaWRzLmV2ZW50cy5cbiBcdCAqL1xuIFx0Q0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTID0gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbitcbitcdC8qXG4rXHQgKiBFbmFibGUgY21hIGFjY291bnRpbmcgZm9yIHRoZSBtZW1vcnkgY29udHJvbGxlci5cbitcdCAqL1xuK1x0Q0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORyA9ICgxIFx1MDAzY1x1MDAzYyAyMSksXG4gfTtcbiBcbiAvKiBjZnR5cGUtXHUwMDNlZmxhZ3MgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NtYS5oIGIvaW5jbHVkZS9saW51eC9jbWEuaFxuaW5kZXggODU1NWQzOGE5N2IxYS4uMTZlMjEzNjQyMWI3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY21hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY21hLmhcbkBAIC00OSwxMiArNDksMTIgQEAgZXh0ZXJuIGludCBjbWFfaW5pdF9yZXNlcnZlZF9tZW0ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbiBcdFx0XHRcdFx0c3RydWN0IGNtYSAqKnJlc19jbWEpO1xuIGV4dGVybiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgaW50IGFsaWduLFxuIFx0XHRcdCAgICAgIGJvb2wgbm9fd2Fybik7XG4tZXh0ZXJuIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsIHVuc2lnbmVkIGxvbmcgY291bnQpO1xuK2V4dGVybiBib29sIGNtYV9yZWxlYXNlKHN0cnVjdCBjbWEgKmNtYSwgc3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KTtcbiBcbiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4gXHRcdHVuc2lnbmVkIGludCBhbGlnbiwgYm9vbCBub193YXJuKTtcbiBzdHJ1Y3QgcGFnZSAqY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChzdHJ1Y3QgY21hICpjbWEsIHVuc2lnbmVkIGludCBvcmRlcik7XG4tYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4rYm9vbCBjbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuIGV4dGVybiBpbnQgY21hX2Zvcl9lYWNoX2FyZWEoaW50ICgqaXQpKHN0cnVjdCBjbWEgKmNtYSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDgxNzBiYjgwNjZhMjIuLjgwMWZiZGU5NDEzN2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0zMjAsNiArMzIwLDEwIEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcdHNwaW5sb2NrX3QgZXZlbnRfbGlzdF9sb2NrO1xuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbiBcbisjaWZkZWYgQ09ORklHX0NNQVxuK1x0c3RydWN0IHBhZ2VfY291bnRlciAqY21hX2NvdW50ZXJzO1xuKyNlbmRpZiAvKiBDT05GSUdfQ01BICovXG4rXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbm9kZWluZm9bXTtcbiB9O1xuIFxuQEAgLTY2Miw2ICs2NjYsMTEgQEAgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCk7XG4gXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbitcdFx0XHQgIHN0cnVjdCBjbWEgKmNtYSk7XG4rdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbitcdFx0XHQgICAgIHN0cnVjdCBjbWEgKmNtYSk7XG4rXG4gdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyoqXG5AQCAtMTE2MCw2ICsxMTY5LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2NtYShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBjb3VudCxcbitcdFx0XHRcdFx0c3RydWN0IGNtYSAqY21hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHN0cnVjdCBjbWEgKmNtYSlcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC9jZ3JvdXAuY1xuaW5kZXggYjViNDYxZDQ0MThiMS4uMTIxODRmODVhZDEwMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcbisrKyBiL2tlcm5lbC9jZ3JvdXAvY2dyb3VwLmNcbkBAIC0xOTg1LDYgKzE5ODUsNyBAQCBlbnVtIGNncm91cDJfcGFyYW0ge1xuIFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90LFxuIFx0T3B0X21lbW9yeV9odWdldGxiX2FjY291bnRpbmcsXG4gXHRPcHRfcGlkc19sb2NhbGV2ZW50cyxcbitcdE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmcsXG4gXHRucl9fY2dyb3VwMl9wYXJhbXNcbiB9O1xuIFxuQEAgLTE5OTUsNiArMTk5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgY2dyb3VwMl9mc19wYXJhbWV0ZXJzW10gPSB7XG4gXHRmc3BhcmFtX2ZsYWcoXCJtZW1vcnlfcmVjdXJzaXZlcHJvdFwiLFx0T3B0X21lbW9yeV9yZWN1cnNpdmVwcm90KSxcbiBcdGZzcGFyYW1fZmxhZyhcIm1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcIiwgT3B0X21lbW9yeV9odWdldGxiX2FjY291bnRpbmcpLFxuIFx0ZnNwYXJhbV9mbGFnKFwicGlkc19sb2NhbGV2ZW50c1wiLFx0T3B0X3BpZHNfbG9jYWxldmVudHMpLFxuK1x0ZnNwYXJhbV9mbGFnKFwibWVtb3J5X2NtYV9hY2NvdW50aW5nXCIsXHRPcHRfbWVtb3J5X2NtYV9hY2NvdW50aW5nKSxcbiBcdHt9XG4gfTtcbiBcbkBAIC0yMDI3LDYgKzIwMjksOSBAQCBzdGF0aWMgaW50IGNncm91cDJfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbVxuIFx0Y2FzZSBPcHRfcGlkc19sb2NhbGV2ZW50czpcbiBcdFx0Y3R4LVx1MDAzZWZsYWdzIHw9IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUztcbiBcdFx0cmV0dXJuIDA7XG4rXHRjYXNlIE9wdF9tZW1vcnlfY21hX2FjY291bnRpbmc6XG4rXHRcdGN0eC1cdTAwM2VmbGFncyB8PSBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbkBAIC0yMDY4LDYgKzIwNzMsMTEgQEAgc3RhdGljIHZvaWQgYXBwbHlfY2dyb3VwX3Jvb3RfZmxhZ3ModW5zaWduZWQgaW50IHJvb3RfZmxhZ3MpXG4gXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFM7XG4gXHRcdGVsc2VcbiBcdFx0XHRjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNj0gfkNHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUztcbitcbitcdFx0aWYgKHJvb3RfZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkcpXG4rXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyB8PSBDR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjY9IH5DR1JQX1JPT1RfTUVNT1JZX0NNQV9BQ0NPVU5USU5HO1xuIFx0fVxuIH1cbiBcbkBAIC0yMDg1LDYgKzIwOTUsOCBAQCBzdGF0aWMgaW50IGNncm91cF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBrZXJuZnNfcm9vdCAqa2Zfcm9vdFxuIFx0XHRzZXFfcHV0cyhzZXEsIFwiLG1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcIik7XG4gXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX1BJRFNfTE9DQUxfRVZFTlRTKVxuIFx0XHRzZXFfcHV0cyhzZXEsIFwiLHBpZHNfbG9jYWxldmVudHNcIik7XG4rXHRpZiAoY2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9DTUFfQUNDT1VOVElORylcbitcdFx0c2VxX3B1dHMoc2VxLCBcIixtZW1vcnlfY21hX2FjY291bnRpbmdcIik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNzUyMCw3ICs3NTMyLDggQEAgc3RhdGljIHNzaXplX3QgZmVhdHVyZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdFwibWVtb3J5X2xvY2FsZXZlbnRzXFxuXCJcbiBcdFx0XHRcIm1lbW9yeV9yZWN1cnNpdmVwcm90XFxuXCJcbiBcdFx0XHRcIm1lbW9yeV9odWdldGxiX2FjY291bnRpbmdcXG5cIlxuLVx0XHRcdFwicGlkc19sb2NhbGV2ZW50c1xcblwiKTtcbitcdFx0XHRcInBpZHNfbG9jYWxldmVudHNcXG5cIlxuK1x0XHRcdFwibWVtb3J5X2NtYV9hY2NvdW50aW5nXFxuXCIpO1xuIH1cbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNncm91cF9mZWF0dXJlc19hdHRyID0gX19BVFRSX1JPKGZlYXR1cmVzKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9jbWEuYyBiL21tL2NtYS5jXG5pbmRleCBhMTNjZTQ5OTliMzlmLi4wM2ViM2FjYmQzYzc1IDEwMDY0NFxuLS0tIGEvbW0vY21hLmNcbisrKyBiL21tL2NtYS5jXG5AQCAtMjUsNyArMjUsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlnaG1lbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ttZW1sZWFrLmhcdTAwM2VcbkBAIC05MDUsNiArOTA0LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19jbWFfYWxsb2NfZnJvemVuKHN0cnVjdCBjbWEgKmNtYSxcbiBcdFx0Y21hX2RlYnVnX3Nob3dfYXJlYXMoY21hKTtcbiBcdH1cbiBcbitcdGlmIChwYWdlIFx1MDAyNlx1MDAyNiBtZW1fY2dyb3VwX2NoYXJnZV9jbWEocGFnZSwgY291bnQsIGNtYSkpIHtcbitcdFx0ZnJlZV9jb250aWdfZnJvemVuX3JhbmdlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBjb3VudCk7XG4rXHRcdGNtYV9jbGVhcl9iaXRtYXAoY21hLCBcdTAwMjZjbWEtXHUwMDNlcmFuZ2VzW3JdLCBwYWdlX3RvX3BmbihwYWdlKSwgY291bnQpO1xuK1x0XHRwYWdlID0gTlVMTDtcbitcdH1cbitcbiBcdHByX2RlYnVnKFwiJXMoKTogcmV0dXJuZWQgJXBcXG5cIiwgX19mdW5jX18sIHBhZ2UpO1xuIFx0dHJhY2VfY21hX2FsbG9jX2ZpbmlzaChuYW1lLCBwYWdlID8gcGFnZV90b19wZm4ocGFnZSkgOiAwLFxuIFx0XHRcdCAgICAgICBwYWdlLCBjb3VudCwgYWxpZ24sIHJldCk7XG5AQCAtOTkyLDEyICs5OTcsMTMgQEAgc3RhdGljIHN0cnVjdCBjbWFfbWVtcmFuZ2UgKmZpbmRfY21hX21lbXJhbmdlKHN0cnVjdCBjbWEgKmNtYSxcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG4tXHRcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcywgdW5zaWduZWQgbG9uZyBjb3VudClcbitcdFx0c3RydWN0IHBhZ2UgKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZXMpO1xuIFxuIFx0cHJfZGVidWcoXCIlcyhwYWdlICVwLCBjb3VudCAlbHUpXFxuXCIsIF9fZnVuY19fLCAodm9pZCAqKXBhZ2VzLCBjb3VudCk7XG4gXG4rXHRtZW1fY2dyb3VwX3VuY2hhcmdlX2NtYShwYWdlcywgY291bnQsIGNtYSk7XG4gXHRmcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UocGZuLCBjb3VudCk7XG4gXHRjbWFfY2xlYXJfYml0bWFwKGNtYSwgY21yLCBwZm4sIGNvdW50KTtcbiBcdGNtYV9zeXNmc19hY2NvdW50X3JlbGVhc2VfcGFnZXMoY21hLCBjb3VudCk7XG5AQCAtMTAxNCw3ICsxMDIwLDcgQEAgc3RhdGljIHZvaWQgX19jbWFfcmVsZWFzZV9mcm96ZW4oc3RydWN0IGNtYSAqY21hLCBzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXIsXG4gICogSXQgcmV0dXJucyBmYWxzZSB3aGVuIHByb3ZpZGVkIHBhZ2VzIGRvIG5vdCBiZWxvbmcgdG8gY29udGlndW91cyBhcmVhIGFuZFxuICAqIHRydWUgb3RoZXJ3aXNlLlxuICAqL1xuLWJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4rYm9vbCBjbWFfcmVsZWFzZShzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcyxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgY291bnQpXG4ge1xuIFx0c3RydWN0IGNtYV9tZW1yYW5nZSAqY21yO1xuQEAgLTEwMzcsNyArMTA0Myw3IEBAIGJvb2wgY21hX3JlbGVhc2Uoc3RydWN0IGNtYSAqY21hLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZXMsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNtYV9yZWxlYXNlKTtcbiBcbi1ib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlcyxcbitib29sIGNtYV9yZWxlYXNlX2Zyb3plbihzdHJ1Y3QgY21hICpjbWEsIHN0cnVjdCBwYWdlICpwYWdlcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBjb3VudClcbiB7XG4gXHRzdHJ1Y3QgY21hX21lbXJhbmdlICpjbXI7XG5kaWZmIC0tZ2l0IGEvbW0vY21hLmggYi9tbS9jbWEuaFxuaW5kZXggYzcwMTgwYzM2NTU5Yy4uNTJiN2Q0YmU1MTcwNyAxMDA2NDRcbi0tLSBhL21tL2NtYS5oXG4rKysgYi9tbS9jbWEuaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgY21hX2tvYmplY3Qge1xuIFx0c3RydWN0IGtvYmplY3Qga29iajtcbkBAIC04MCw2ICs4MSwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY21hX2JpdG1hcF9tYXhubyhzdHJ1Y3QgY21hICpjbWEsXG4gXHRyZXR1cm4gY21yLVx1MDAzZWNvdW50IFx1MDAzZVx1MDAzZSBjbWEtXHUwMDNlb3JkZXJfcGVyX2JpdDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgY21hX2FyZWFfaW5kZXgoY29uc3Qgc3RydWN0IGNtYSAqY21hKVxuK3tcbitcdHJldHVybiBjbWEgLSBjbWFfYXJlYXM7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfQ01BX1NZU0ZTXG4gdm9pZCBjbWFfc3lzZnNfYWNjb3VudF9zdWNjZXNzX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBjbWFfc3lzZnNfYWNjb3VudF9mYWlsX3BhZ2VzKHN0cnVjdCBjbWEgKmNtYSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5kaWZmIC0tZ2l0IGEvbW0vY21hX2RlYnVnLmMgYi9tbS9jbWFfZGVidWcuY1xuaW5kZXggNTIzYmE0YTBmOWY3Ni4uNzBiZmM2ZmJlZWNhMyAxMDA2NDRcbi0tLSBhL21tL2NtYV9kZWJ1Zy5jXG4rKysgYi9tbS9jbWFfZGVidWcuY1xuQEAgLTcsNyArNyw2IEBAXG4gXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY21hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZGlmZiAtLWdpdCBhL21tL2NtYV9zeXNmcy5jIGIvbW0vY21hX3N5c2ZzLmNcbmluZGV4IGQ1YmY3OTJjNjI0NWEuLmU0ZWUzNWJjNjgyYmEgMTAwNjQ0XG4tLS0gYS9tbS9jbWFfc3lzZnMuY1xuKysrIGIvbW0vY21hX3N5c2ZzLmNcbkBAIC01LDcgKzUsNiBAQFxuICAqIENvcHlyaWdodCAoYykgMjAyMSBNaW5jaGFuIEtpbSBcdTAwM2NtaW5jaGFuQGtlcm5lbC5vcmdcdTAwM2VcbiAgKi9cbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jbWEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2ZGM0ODg4YTkwZjNmLi5mMjhkNjEwYTU5Y2U3IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC02OCw2ICs2OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcInNsYWIuaFwiXG4gI2luY2x1ZGUgXCJtZW1jb250cm9sLXYxLmhcIlxuKyNpbmNsdWRlIFwiY21hLmhcIlxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuIFxuQEAgLTQwNjIsNiArNDA2Myw5IEBAIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mcmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpbnQgbm9kZTtcbiBcbisjaWZkZWYgQ09ORklHX0NNQVxuK1x0a2ZyZWUobWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzKTtcbisjZW5kaWZcbiBcdGZvcl9lYWNoX25vZGUobm9kZSkge1xuIFx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4gPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tub2RlXTtcbiBcdFx0aWYgKCFwbilcbkBAIC00MTQ0LDYgKzQxNDgsMTUgQEAgc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNRU1DR19DR1dCX0ZSTl9DTlQ7IGkrKylcbiBcdFx0bWVtY2ctXHUwMDNlY2d3Yl9mcm5baV0uZG9uZSA9XG4gXHRcdFx0X19XQl9DT01QTEVUSU9OX0lOSVQoXHUwMDI2bWVtY2dfY2d3Yl9mcm5fd2FpdHEpO1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfQ01BXG4rXHRpZiAoY21hX2FyZWFfY291bnQpIHtcbitcdFx0bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzID0ga2NhbGxvYyhjbWFfYXJlYV9jb3VudCxcbitcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlX2NvdW50ZXIpLFxuK1x0XHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFtZW1jZy1cdTAwM2VjbWFfY291bnRlcnMpXG4rXHRcdFx0Z290byBmYWlsO1xuK1x0fVxuICNlbmRpZlxuIFx0bHJ1X2dlbl9pbml0X21lbWNnKG1lbWNnKTtcbiBcdHJldHVybiBtZW1jZztcbkBAIC00MTU5LDYgKzQxNzIsNyBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHBhcmVudF9jc3MpO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xuIFx0Ym9vbCBtZW1jZ19vbl9kZmwgPSBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpO1xuK1x0dW5zaWduZWQgaW50IF9fbWF5YmVfdW51c2VkIGk7XG4gXG4gXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XG4gXHRtZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTtcbkBAIC00MTcxLDYgKzQxODUsMTIgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4gI2lmZGVmIENPTkZJR19aU1dBUFxuIFx0bWVtY2ctXHUwMDNlenN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDtcbiBcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlenN3YXBfd3JpdGViYWNrLCB0cnVlKTtcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHX0NNQVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7ICsraSlcbitcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2ldLFxuK1x0XHRcdFx0ICBwYXJlbnQgPyBcdTAwMjZwYXJlbnQtXHUwMDNlY21hX2NvdW50ZXJzW2ldIDogTlVMTCxcbitcdFx0XHRcdCAgZmFsc2UpO1xuICNlbmRpZlxuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuIFx0aWYgKHBhcmVudCkge1xuQEAgLTUyMTMsNiArNTIzMywxMDIgQEAgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfQ01BXG4rc3RhdGljIGJvb2wgbWVtY2dfYWNjb3VudHNfY21hKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfQ01BX0FDQ09VTlRJTkc7XG4rfVxuK1xuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9jbWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgY291bnQsXG4rXHRcdFx0ICBzdHJ1Y3QgY21hICpjbWEpXG4re1xuK1x0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgKmZhaWw7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcdGludCByYyA9IDA7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19jbWEoKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9pc19yb290KG1lbWNnKSlcbitcdFx0Z290byBjZ3JvdXBfcHV0O1xuK1xuK1x0cmMgPSB0cnlfY2hhcmdlX21lbWNnKG1lbWNnLCBHRlBfS0VSTkVMLCBjb3VudCk7XG4rXHRpZiAocmMpXG4rXHRcdGdvdG8gY2dyb3VwX3B1dDtcbitcbitcdGNvdW50ZXIgPSBcdTAwMjZtZW1jZy1cdTAwM2VjbWFfY291bnRlcnNbY21hX2FyZWFfaW5kZXgoY21hKV07XG4rXHRpZiAoIXBhZ2VfY291bnRlcl90cnlfY2hhcmdlKGNvdW50ZXIsIGNvdW50LCBcdTAwMjZmYWlsKSkge1xuK1x0XHRyZWZpbGxfc3RvY2sobWVtY2csIGNvdW50KTtcbitcdFx0cmMgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGNncm91cF9wdXQ7XG4rXHR9XG4rXG4rXHRvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fbWVtY2cobWVtY2cpO1xuK1x0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UocGFnZV9mb2xpbyhwYWdlKSkpIHtcbitcdFx0Y29tbWl0X2NoYXJnZShwYWdlX2ZvbGlvKHBhZ2UpLCBvYmpjZyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRvYmpfY2dyb3VwX2dldF9tYW55KG9iamNnLCBjb3VudCAtIDEpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKVxuK1x0XHRcdGNvbW1pdF9jaGFyZ2UocGFnZV9mb2xpbyhwYWdlICsgaSksIG9iamNnKTtcbitcdH1cbitcbitjZ3JvdXBfcHV0OlxuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbit2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY21hKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGNvdW50LFxuK1x0XHRcdCAgICAgc3RydWN0IGNtYSAqY21hKVxuK3tcbitcdHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXI7XG4rXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19jbWEoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LypcbitcdCAqIEdldCB0aGUgb2JqY2cgZnJvbSB0aGUgZmlyc3QgcGFnZS5cbitcdCAqIHBhZ2Vfb2JqY2coKSBleHBlY3RzIE1FTUNHX0RBVEFfS01FTSwgYnV0IGZvciBDTUEgd2UgdXNlZFxuK1x0ICogY29tbWl0X2NoYXJnZSgpIHdoaWNoIHNldHMgZm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IG9iamNnXG4rXHQgKiB3aXRob3V0IGZsYWdzLCBzbyB3ZSBjYW5ub3QgdXNlIGl0LlxuK1x0ICovXG4rXHRvYmpjZyA9IGZvbGlvX29iamNnKHBhZ2VfZm9saW8ocGFnZSkpO1xuK1x0aWYgKCFvYmpjZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbitcbitcdGNvdW50ZXIgPSBcdTAwMjZtZW1jZy1cdTAwM2VjbWFfY291bnRlcnNbY21hX2FyZWFfaW5kZXgoY21hKV07XG4rXHRwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoY291bnRlciwgY291bnQpO1xuK1xuK1x0bWVtY2dfdW5jaGFyZ2UobWVtY2csIGNvdW50KTtcbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuK1x0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSB7XG4rXHRcdGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAwO1xuK1x0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgKytpKSB7XG4rXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UgKyBpKTtcbitcdFx0XHRmb2xpby1cdTAwM2VtZW1jZ19kYXRhID0gMDtcbitcdFx0XHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG4rXHRcdH1cbitcdH1cbit9XG4rI2VuZGlmIC8qIENPTkZJR19DTUEgKi9cbitcbiBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyIHtcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xuQEAgLTYwNjYsMyArNjE4Miw5MiBAQCB2b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFx0SyhhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeS5jaGlsZHJlbl9taW5fdXNhZ2UpKSxcbiBcdFx0SyhhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeS5jaGlsZHJlbl9sb3dfdXNhZ2UpKSk7XG4gfVxuK1xuKyNpZmRlZiBDT05GSUdfQ01BXG4rc3RhdGljIGludCBtZW1vcnlfY21hX2N1cnJlbnRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcbitcdGludCBpZHggPSBzZXFfY2Z0KG0pLVx1MDAzZXByaXZhdGU7XG4rXHR1bnNpZ25lZCBsb25nIGN1ciA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWNtYV9jb3VudGVyc1tpZHhdKTtcbitcbitcdHNlcV9wcmludGYobSwgXCIlbHVcXG5cIiwgY3VyICogUEFHRV9TSVpFKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG1lbW9yeV9jbWFfbWF4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7XG4rXHRpbnQgaWR4ID0gc2VxX2NmdChtKS1cdTAwM2Vwcml2YXRlO1xuK1x0dW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2lkeF0ubWF4KTtcbitcbitcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sIG1heCk7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IG1lbW9yeV9jbWFfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuK1x0XHRcdFx0ICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbitcdGludCBpZHggPSBvZl9jZnQob2YpLVx1MDAzZXByaXZhdGU7XG4rXHR1bnNpZ25lZCBsb25nIG1heDtcbitcdGludCByYztcbitcbitcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG4rXHRyYyA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsIFwibWF4XCIsIFx1MDAyNm1heCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdHhjaGcoXHUwMDI2bWVtY2ctXHUwMDNlY21hX2NvdW50ZXJzW2lkeF0ubWF4LCBtYXgpO1xuK1xuK1x0cmV0dXJuIG5ieXRlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBjZnR5cGUgY21hX2RmbF90bXBsW10gPSB7XG4rXHR7XG4rXHRcdC5uYW1lID0gXCJjdXJyZW50XCIsXG4rXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9jbWFfY3VycmVudF9zaG93LFxuK1x0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4rXHR9LFxuK1x0e1xuK1x0XHQubmFtZSA9IFwibWF4XCIsXG4rXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9jbWFfbWF4X3Nob3csXG4rXHRcdC53cml0ZSA9IG1lbW9yeV9jbWFfbWF4X3dyaXRlLFxuK1x0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4rXHR9LFxuK1x0eyB9XG4rfTtcbisjZGVmaW5lIENNQV9ERkxfVE1QTF9TSVpFXHQoQVJSQVlfU0laRShjbWFfZGZsX3RtcGwpIC0gMSlcbitcbitzdGF0aWMgc3RydWN0IGNmdHlwZSAqY21hX2RmbF9maWxlcztcbitcbitzdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX2NtYV9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IGNmdHlwZSAqY2Z0O1xuK1x0dW5zaWduZWQgaW50IGksIGo7XG4rXHRpbnQgY291bnQ7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFjbWFfYXJlYV9jb3VudClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjb3VudCA9IGNtYV9hcmVhX2NvdW50ICogQ01BX0RGTF9UTVBMX1NJWkU7XG4rXHRjbWFfZGZsX2ZpbGVzID0ga2NhbGxvYyhjb3VudCArIDEsIHNpemVvZigqY21hX2RmbF90bXBsKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWNtYV9kZmxfZmlsZXMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY21hX2FyZWFfY291bnQ7ICsraSlcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQ01BX0RGTF9UTVBMX1NJWkU7ICsraikge1xuK1x0XHRcdGNmdCA9IFx1MDAyNmNtYV9kZmxfZmlsZXNbaSAqIENNQV9ERkxfVE1QTF9TSVpFICsgal07XG4rXHRcdFx0KmNmdCA9IGNtYV9kZmxfdG1wbFtqXTtcbitcdFx0XHRzbnByaW50ZihjZnQtXHUwMDNlbmFtZSwgTUFYX0NGVFlQRV9OQU1FLCBcImNtYS4lcy4lc1wiLFxuK1x0XHRcdFx0IGNtYV9nZXRfbmFtZShcdTAwMjZjbWFfYXJlYXNbaV0pLFxuK1x0XHRcdFx0IGNtYV9kZmxfdG1wbFtqXS5uYW1lKTtcbitcdFx0XHRjZnQtXHUwMDNlcHJpdmF0ZSA9IGk7IC8qIGNtYSBhcmVhIGluZGV4IGZvciBjb3VudGVycyBpbiBjYWxsYmFja3MuICovXG4rXHRcdFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoXHUwMDI2Y2Z0LVx1MDAzZWxvY2tkZXBfa2V5KTtcbitcdFx0fVxuK1xuK1x0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgY21hX2RmbF9maWxlcykpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK3N1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX2NtYV9pbml0KTtcbisjZW5kaWYgLyogQ09ORklHX0NNQSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVcbmluZGV4IDk1MmU0NDQ4YmYwNzAuLmI5YTQyOThkNDk0NDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVcbkBAIC0xLDUgKzEsNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIHRlc3RfY29yZVxuK3Rlc3RfY21hX21lbWNnXG4gdGVzdF9jcHVcbiB0ZXN0X2NwdXNldFxuIHRlc3RfZnJlZXplclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuaW5kZXggZTAxNTg0YzIxODlhYy4uNjAxZDkzMDE2MGE0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlXG5AQCAtOCw2ICs4LDcgQEAgVEVTVF9QUk9HUyAgICAgOj0gdGVzdF9zdHJlc3Muc2ggdGVzdF9jcHVzZXRfcHJzLnNoIHRlc3RfY3B1c2V0X3YxX2hwLnNoXG4gVEVTVF9HRU5fRklMRVMgOj0gd2FpdF9pbm90aWZ5XG4gIyBLZWVwIHRoZSBsaXN0cyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWRcbiBURVNUX0dFTl9QUk9HUyAgPSB0ZXN0X2NvcmVcbitURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2NtYV9tZW1jZ1xuIFRFU1RfR0VOX1BST0dTICs9IHRlc3RfY3B1XG4gVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9jcHVzZXRcbiBURVNUX0dFTl9QUk9HUyArPSB0ZXN0X2ZyZWV6ZXJcbkBAIC0yNCw2ICsyNSw3IEBAIGluY2x1ZGUgLi4vbGliLm1rXG4gaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rXG4gXG4gJChPVVRQVVQpL3Rlc3RfY29yZTogJChMSUJDR1JPVVBfTylcbiskKE9VVFBVVCkvdGVzdF9jbWFfbWVtY2c6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X2NwdXNldDogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9mcmVlemVyOiAkKExJQkNHUk9VUF9PKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXG5pbmRleCAzOWY5Nzk2OTBkZDNiLi4xYzkwMzQwMTc2ODJkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuQEAgLTQsMyArNCw4IEBAIENPTkZJR19DR1JPVVBfRlJFRVpFUj15XG4gQ09ORklHX0NHUk9VUF9TQ0hFRD15XG4gQ09ORklHX01FTUNHPXlcbiBDT05GSUdfUEFHRV9DT1VOVEVSPXlcbitDT05GSUdfQ01BPXlcbitDT05GSUdfRE1BX0NNQT15XG4rQ09ORklHX0RNQUJVRl9IRUFQUz15XG4rQ09ORklHX0RNQUJVRl9IRUFQU19DTUE9eVxuK0NPTkZJR19IVUdFVExCRlM9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X2NtYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfY21hX21lbWNnLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45YmQ0MWQ5YTYxNzdkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9jbWFfbWVtY2cuY1xuQEAgLTAsMCArMSw0MDIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2RpcmVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1oZWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvaW9jdGwuaFx1MDAzZVxuKyNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuKyNpbmNsdWRlIFwiY2dyb3VwX3V0aWwuaFwiXG4rXG4rI2RlZmluZSBDTUFfSEVBUF9ERUZBVUxUX1BBVEhcdFwiL2Rldi9kbWFfaGVhcC9kZWZhdWx0X2NtYV9yZWdpb25cIlxuKyNkZWZpbmUgQ01BX1JFU0VSVkVEX0NVUlJFTlRcdFwibWVtb3J5LmNtYS5yZXNlcnZlZC5jdXJyZW50XCJcbisjZGVmaW5lIENNQV9SRVNFUlZFRF9NQVhcdFwibWVtb3J5LmNtYS5yZXNlcnZlZC5tYXhcIlxuK1xuKyNkZWZpbmUgSFVHRVRMQl9DTUFfQ1VSUkVOVFx0XCJtZW1vcnkuY21hLmh1Z2V0bGIwLmN1cnJlbnRcIlxuKyNkZWZpbmUgSFVHRVRMQl9DTUFfTUFYXHRcIm1lbW9yeS5jbWEuaHVnZXRsYjAubWF4XCJcbisjZGVmaW5lIEhVR0VQQUdFU19ESVJcdFx0XCIvc3lzL2tlcm5lbC9tbS9odWdlcGFnZXNcIlxuK1xuK3N0YXRpYyBpbnQgY21hX2hlYXBfYWxsb2MoaW50IGhlYXBfZmQsIHNpemVfdCBzaXplKVxuK3tcbitcdHN0cnVjdCBkbWFfaGVhcF9hbGxvY2F0aW9uX2RhdGEgZGF0YSA9IHtcbitcdFx0LmxlbiA9IHNpemUsXG4rXHRcdC5mZF9mbGFncyA9IE9fUkRXUiB8IE9fQ0xPRVhFQyxcbitcdH07XG4rXG4rXHRpZiAoaW9jdGwoaGVhcF9mZCwgRE1BX0hFQVBfSU9DVExfQUxMT0MsIFx1MDAyNmRhdGEpIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXR1cm4gZGF0YS5mZDtcbit9XG4rXG4rc3RhdGljIGludCB0ZXN0X2NtYV9jaGFyZ2UoY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTtcbitcdGludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwO1xuK1x0c2l6ZV90IHNpemUgPSA0VUwgXHUwMDNjXHUwMDNjIDIwO1xuK1x0bG9uZyBiZWZvcmUsIGFmdGVyO1xuK1x0Y2hhciAqY2c7XG4rXG4rXHRjZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ19jbWFfY2hhcmdlXCIpO1xuK1x0aWYgKCFjZylcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aW5fY2cgPSAxO1xuK1xuK1x0aGVhcF9mZCA9IG9wZW4oQ01BX0hFQVBfREVGQVVMVF9QQVRILCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7XG4rXHRpZiAoaGVhcF9mZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCBvcGVuIENNQSBoZWFwICglbSlcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGJlZm9yZSA9IGNnX3JlYWRfbG9uZyhjZywgQ01BX1JFU0VSVkVEX0NVUlJFTlQpO1xuK1xuK1x0YnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7XG4rXHRpZiAoYnVmX2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IGFsbG9jYXRlIGluIENNQSBoZWFwICglbSlcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGFmdGVyID0gY2dfcmVhZF9sb25nKGNnLCBDTUFfUkVTRVJWRURfQ1VSUkVOVCk7XG4rXG4rXHRpZiAoYWZ0ZXIgLSBiZWZvcmUgXHUwMDNjIChsb25nKXNpemUpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXG4rXHRcdFx0XCJpbnZhbGlkIENNQSBjb3VudGVyIGFmdGVyIGNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXG5cIixcbitcdFx0XHRiZWZvcmUsIGFmdGVyKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0Y2xvc2UoYnVmX2ZkKTtcbitcdGJ1Zl9mZCA9IC0xO1xuK1xuK1x0YWZ0ZXIgPSBjZ19yZWFkX2xvbmcoY2csIENNQV9SRVNFUlZFRF9DVVJSRU5UKTtcbitcdGlmICghdmFsdWVzX2Nsb3NlKGJlZm9yZSwgYWZ0ZXIsIDMpKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFxuK1x0XHRcdFwiaW52YWxpZCBDTUEgY291bnRlciBhZnRlciB1bmNoYXJnZTogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXG5cIixcbitcdFx0XHRiZWZvcmUsIGFmdGVyKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0cmMgPSBLU0ZUX1BBU1M7XG4rXG4rY2xlYW51cDpcbitcdGlmIChidWZfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShidWZfZmQpO1xuK1x0aWYgKGhlYXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShoZWFwX2ZkKTtcbitcbitcdGlmIChpbl9jZylcbitcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbitcdGNnX2Rlc3Ryb3koY2cpO1xuK1x0ZnJlZShjZyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9jbWFfbGltaXQoY29uc3QgY2hhciAqcm9vdClcbit7XG4rXHRpbnQgaGVhcF9mZCA9IC0xLCBidWZfZmQgPSAtMTtcbitcdGludCByYyA9IEtTRlRfRkFJTCwgaW5fY2cgPSAwO1xuK1x0c2l6ZV90IHNpemUgPSA0VUwgXHUwMDNjXHUwMDNjIDIwO1xuK1x0Y2hhciAqY2c7XG4rXG4rXHRjZyA9IGNnX25hbWUocm9vdCwgXCJtZW1jZ19jbWFfbGltaXRcIik7XG4rXHRpZiAoIWNnKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHRpZiAoY2dfY3JlYXRlKGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2VudGVyX2N1cnJlbnQoY2cpKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHRpbl9jZyA9IDE7XG4rXG4rXHRpZiAoY2dfd3JpdGUoY2csIENNQV9SRVNFUlZFRF9NQVgsIFwiMk1cIikpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgc2V0IENNQSBsaW1pdCAoJW0pXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRoZWFwX2ZkID0gb3BlbihDTUFfSEVBUF9ERUZBVUxUX1BBVEgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbitcdGlmIChoZWFwX2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IG9wZW4gQ01BIGhlYXAgKCVtKVxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0YnVmX2ZkID0gY21hX2hlYXBfYWxsb2MoaGVhcF9mZCwgc2l6ZSk7XG4rXHRpZiAoYnVmX2ZkIFx1MDAzZT0gMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkNNQSBsaW1pdCBub3QgZW5mb3JjZWQuXFxuXCIpO1xuK1x0XHRjbG9zZShidWZfZmQpO1xuK1x0fSBlbHNlXG4rXHRcdHJjID0gS1NGVF9QQVNTO1xuK1xuK2NsZWFudXA6XG4rXHRpZiAoaGVhcF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGhlYXBfZmQpO1xuK1xuK1x0aWYgKGluX2NnKVxuK1x0XHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xuK1x0Y2dfZGVzdHJveShjZyk7XG4rXHRmcmVlKGNnKTtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rc3RhdGljIGxvbmcgZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2Iodm9pZClcbit7XG4rXHRESVIgKmRpcjtcbitcdHN0cnVjdCBkaXJlbnQgKmVudHJ5O1xuK1x0bG9uZyBtYXhfc2l6ZSA9IDA7XG4rXG4rXHRkaXIgPSBvcGVuZGlyKEhVR0VQQUdFU19ESVIpO1xuK1x0aWYgKCFkaXIpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHdoaWxlICgoZW50cnkgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHtcbitcdFx0bG9uZyBzaXplO1xuK1xuK1x0XHRpZiAoc3NjYW5mKGVudHJ5LVx1MDAzZWRfbmFtZSwgXCJodWdlcGFnZXMtJWxka0JcIiwgXHUwMDI2c2l6ZSkgPT0gMSkge1xuK1x0XHRcdGlmIChzaXplIFx1MDAzZSBtYXhfc2l6ZSlcbitcdFx0XHRcdG1heF9zaXplID0gc2l6ZTtcbitcdFx0fVxuK1x0fVxuK1x0Y2xvc2VkaXIoZGlyKTtcbitcbitcdHJldHVybiBtYXhfc2l6ZSBcdTAwM2UgMCA/IG1heF9zaXplIDogLTE7XG4rfVxuK1xuK3N0YXRpYyBsb25nIHJlYWRfc3lzZnNfbG9uZyhjb25zdCBjaGFyICpwYXRoKVxuK3tcbitcdEZJTEUgKmY7XG4rXHRsb25nIHZhbCA9IC0xO1xuK1xuK1x0ZiA9IGZvcGVuKHBhdGgsIFwiclwiKTtcbitcdGlmICghZilcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKGZzY2FuZihmLCBcIiVsZFwiLCBcdTAwMjZ2YWwpICE9IDEpXG4rXHRcdHZhbCA9IC0xO1xuK1x0ZmNsb3NlKGYpO1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4rc3RhdGljIGludCB3cml0ZV9zeXNmc19sb25nKGNvbnN0IGNoYXIgKnBhdGgsIGxvbmcgdmFsKVxuK3tcbitcdEZJTEUgKmY7XG4rXHRpbnQgcmM7XG4rXG4rXHRmID0gZm9wZW4ocGF0aCwgXCJ3XCIpO1xuK1x0aWYgKCFmKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyYyA9IGZwcmludGYoZiwgXCIlbGRcIiwgdmFsKTtcbitcdGZjbG9zZShmKTtcbitcdHJldHVybiByYyBcdTAwM2MgMCA/IC0xIDogMDtcbit9XG4rXG4rc3RhdGljIGludCB0ZXN0X2h1Z2V0bGJfY21hX2NoYXJnZShjb25zdCBjaGFyICpyb290KVxuK3tcbitcdGludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwO1xuK1x0bG9uZyBocGFnZV9zaXplX2tiLCBocGFnZV9zaXplX2J5dGVzO1xuK1x0bG9uZyBvcmlnX25yID0gLTEsIG5ld19uciwgYmVmb3JlLCBhZnRlcjtcbitcdGNoYXIgbnJfcGF0aFtQQVRIX01BWF07XG4rXHRjaGFyICpjZztcbitcbitcdGhwYWdlX3NpemVfa2IgPSBmaW5kX2xhcmdlc3RfaHVnZXBhZ2Vfc2l6ZV9rYigpO1xuK1x0aWYgKGhwYWdlX3NpemVfa2IgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJubyBodWdlcGFnZSBzaXplIGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gS1NGVF9TS0lQO1xuK1x0fVxuK1x0aHBhZ2Vfc2l6ZV9ieXRlcyA9IGhwYWdlX3NpemVfa2IgKiAxMDI0O1xuK1xuK1x0c25wcmludGYobnJfcGF0aCwgc2l6ZW9mKG5yX3BhdGgpLFxuK1x0XHQgSFVHRVBBR0VTX0RJUiBcIi9odWdlcGFnZXMtJWxka0IvbnJfaHVnZXBhZ2VzXCIsIGhwYWdlX3NpemVfa2IpO1xuK1xuK1x0Y2cgPSBjZ19uYW1lKHJvb3QsIFwibWVtY2dfaHVnZXRsYl9jbWFfY2hhcmdlXCIpO1xuK1x0aWYgKCFjZylcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aW5fY2cgPSAxO1xuK1xuK1x0aWYgKGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCkgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJodWdldGxiIENNQSBjb3VudGVycyBub3QgYXZhaWxhYmxlXFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRvcmlnX25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuK1x0aWYgKG9yaWdfbnIgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3QgcmVhZCAlc1xcblwiLCBucl9wYXRoKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0YmVmb3JlID0gY2dfcmVhZF9sb25nKGNnLCBIVUdFVExCX0NNQV9DVVJSRU5UKTtcbitcbitcdGlmICh3cml0ZV9zeXNmc19sb25nKG5yX3BhdGgsIG9yaWdfbnIgKyAxKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCB3cml0ZSAlc1xcblwiLCBucl9wYXRoKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0bmV3X25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuK1x0aWYgKG5ld19uciBcdTAwM2M9IG9yaWdfbnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJmYWlsZWQgdG8gYWxsb2NhdGUgYSBodWdlcGFnZVxcblwiKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0cmMgPSBLU0ZUX0ZBSUw7XG4rXHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XG4rXG4rXHRpZiAoYWZ0ZXIgLSBiZWZvcmUgXHUwMDNjIGhwYWdlX3NpemVfYnl0ZXMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXG4rXHRcdFx0XCJodWdldGxiIENNQSBjb3VudGVyIG5vdCBjaGFyZ2VkOiBiZWZvcmU9JWxkIGFmdGVyPSVsZCBleHBlY3RlZCArJWxkXFxuXCIsXG4rXHRcdFx0YmVmb3JlLCBhZnRlciwgaHBhZ2Vfc2l6ZV9ieXRlcyk7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7XG4rXG4rXHRhZnRlciA9IGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfQ1VSUkVOVCk7XG4rXHRpZiAoIXZhbHVlc19jbG9zZShiZWZvcmUsIGFmdGVyLCAzKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcbitcdFx0XHRcImh1Z2V0bGIgQ01BIGNvdW50ZXIgbm90IHVuY2hhcmdlZDogYmVmb3JlPSVsZCBhZnRlcj0lbGRcXG5cIixcbitcdFx0XHRiZWZvcmUsIGFmdGVyKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0cmMgPSBLU0ZUX1BBU1M7XG4rXG4rY2xlYW51cDpcbitcdGlmIChvcmlnX25yIFx1MDAzZT0gMClcbitcdFx0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yKTtcbitcbitcdGlmIChpbl9jZylcbitcdFx0Y2dfZW50ZXJfY3VycmVudChyb290KTtcbitcdGNnX2Rlc3Ryb3koY2cpO1xuK1x0ZnJlZShjZyk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdGVzdF9odWdldGxiX2NtYV9saW1pdChjb25zdCBjaGFyICpyb290KVxuK3tcbitcdGludCByYyA9IEtTRlRfU0tJUCwgaW5fY2cgPSAwO1xuK1x0bG9uZyBocGFnZV9zaXplX2tiO1xuK1x0bG9uZyBvcmlnX25yLCBuZXdfbnI7XG4rXHRjaGFyIG5yX3BhdGhbUEFUSF9NQVhdO1xuK1x0Y2hhciAqY2c7XG4rXG4rXHRocGFnZV9zaXplX2tiID0gZmluZF9sYXJnZXN0X2h1Z2VwYWdlX3NpemVfa2IoKTtcbitcdGlmIChocGFnZV9zaXplX2tiIFx1MDAzYyAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwibm8gaHVnZXBhZ2Ugc2l6ZSBmb3VuZFxcblwiKTtcbitcdFx0cmV0dXJuIEtTRlRfU0tJUDtcbitcdH1cbitcbitcdHNucHJpbnRmKG5yX3BhdGgsIHNpemVvZihucl9wYXRoKSxcbitcdFx0IEhVR0VQQUdFU19ESVIgXCIvaHVnZXBhZ2VzLSVsZGtCL25yX2h1Z2VwYWdlc1wiLCBocGFnZV9zaXplX2tiKTtcbitcbitcdGNnID0gY2dfbmFtZShyb290LCBcIm1lbWNnX2h1Z2V0bGJfY21hX2xpbWl0XCIpO1xuK1x0aWYgKCFjZylcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShjZykpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGlmIChjZ19lbnRlcl9jdXJyZW50KGNnKSlcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0aW5fY2cgPSAxO1xuK1xuK1x0aWYgKGNnX3JlYWRfbG9uZyhjZywgSFVHRVRMQl9DTUFfTUFYKSBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImh1Z2V0bGIgQ01BIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdGlmIChjZ193cml0ZShjZywgSFVHRVRMQl9DTUFfTUFYLCBcIjBcIikpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgc2V0IGh1Z2V0bGIgQ01BIGxpbWl0XFxuXCIpO1xuK1x0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRvcmlnX25yID0gcmVhZF9zeXNmc19sb25nKG5yX3BhdGgpO1xuK1x0aWYgKG9yaWdfbnIgXHUwMDNjIDApIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3QgcmVhZCAlc1xcblwiLCBucl9wYXRoKTtcbitcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0d3JpdGVfc3lzZnNfbG9uZyhucl9wYXRoLCBvcmlnX25yICsgMSk7XG4rXHRuZXdfbnIgPSByZWFkX3N5c2ZzX2xvbmcobnJfcGF0aCk7XG4rXG4rXHRyYyA9IEtTRlRfRkFJTDtcbitcdGlmIChuZXdfbnIgXHUwMDNlIG9yaWdfbnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJodWdldGxiIENNQSBsaW1pdCBub3QgZW5mb3JjZWRcXG5cIik7XG4rXHRcdHdyaXRlX3N5c2ZzX2xvbmcobnJfcGF0aCwgb3JpZ19ucik7XG4rXHR9IGVsc2Uge1xuK1x0XHRyYyA9IEtTRlRfUEFTUztcbitcdH1cbitcbitjbGVhbnVwOlxuK1x0aWYgKGluX2NnKVxuK1x0XHRjZ19lbnRlcl9jdXJyZW50KHJvb3QpO1xuK1x0Y2dfZGVzdHJveShjZyk7XG4rXHRmcmVlKGNnKTtcbitcbitcdHJldHVybiByYztcbit9XG4rXG4rI2RlZmluZSBUKHgpIHsgeCwgI3ggfVxuK3N0cnVjdCBjbWFfbWVtY2dfdGVzdHMge1xuK1x0aW50ICgqZm4pKGNvbnN0IGNoYXIgKnJvb3QpO1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbit9IHRlc3RzW10gPSB7XG4rXHRUKHRlc3RfY21hX2NoYXJnZSksXG4rXHRUKHRlc3RfY21hX2xpbWl0KSxcbitcdFQodGVzdF9odWdldGxiX2NtYV9jaGFyZ2UpLFxuK1x0VCh0ZXN0X2h1Z2V0bGJfY21hX2xpbWl0KSxcbit9O1xuKyN1bmRlZiBUXG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbit7XG4rXHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xuK1x0aW50IGhhc19tZW1vcnlfY21hX2FjYywgaTtcbitcbitcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTtcbitcbitcdGhhc19tZW1vcnlfY21hX2FjYyA9IHByb2NfbW91bnRfY29udGFpbnMoXCJtZW1vcnlfY21hX2FjY291bnRpbmdcIik7XG4rXHRpZiAoaGFzX21lbW9yeV9jbWFfYWNjIFx1MDAzYyAwKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcImNhbm5vdCBxdWVyeSBjZ3JvdXAgbW91bnQgb3B0aW9uLlxcblwiKTtcbitcdGVsc2UgaWYgKCFoYXNfbWVtb3J5X2NtYV9hY2MpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiQ01BIGFjY291bnRpbmcgaXMgZGlzYWJsZWQuXFxuXCIpO1xuK1xuK1x0aWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiY2dyb3VwZnMgaXMgbm90IGF2YWlsYWJsZS5cXG5cIik7XG4rXG4rXHRpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgXCJjZ3JvdXAuY29udHJvbGxlcnNcIiwgXCJtZW1vcnlcIikpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwibWVtb3J5IGNvbnRyb2xsZXIgaXMgbm90IGF2YWlsYWJsZSAoQ09ORklHX0NHUk9VUF9NRU1DRz8pXFxuXCIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7ICsraSkge1xuK1x0XHRzd2l0Y2ggKHRlc3RzW2ldLmZuKHJvb3QpKSB7XG4rXHRcdGNhc2UgS1NGVF9QQVNTOlxuK1x0XHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcIiVzXFxuXCIsIHRlc3RzW2ldLm5hbWUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIEtTRlRfU0tJUDpcbitcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCIlc1xcblwiLCB0ZXN0c1tpXS5uYW1lKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoXCIlc1xcblwiLCB0ZXN0c1tpXS5uYW1lKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0a3NmdF9maW5pc2hlZCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdm10ZXN0LW1lbWNnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3ZtdGVzdC1tZW1jZy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjUzNGE5NWVmNWUwNzdcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC92bXRlc3QtbWVtY2cuc2hcbkBAIC0wLDAgKzEsMTk3IEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI1xuKyMgQ29weXJpZ2h0IChjKSAyMDI2IFJlZCBIYXQsIEluYy5cbisjXG4rIyBSdW4gY2dyb3VwIG1lbW9yeSBjb250cm9sbGVyIHNlbGZ0ZXN0cyBpbnNpZGUgYSB2aXJ0bWUtbmcgVk1cbisjIERlcGVuZGVuY2llczpcbisjXHRcdCogdmlydG1lLW5nXG4rI1x0XHQqIGJ1c3lib3gtc3RhdGljICh1c2VkIGJ5IHZpcnRtZS1uZylcbisjXHRcdCogcWVtdVx0KHVzZWQgYnkgdmlydG1lLW5nKVxuK1xuK3NldCAtZXVvIHBpcGVmYWlsXG4rXG4rcmVhZG9ubHkgU0NSSVBUX0RJUj1cIiQoY2QgLVAgLS0gXCIkKGRpcm5hbWUgLS0gXCIke0JBU0hfU09VUkNFWzBdfVwiKVwiIFx1MDAyNlx1MDAyNiBwd2QgLVApXCJcbityZWFkb25seSBLRVJORUxfQ0hFQ0tPVVQ9XCIkKHJlYWxwYXRoIFwiJHtTQ1JJUFRfRElSfVwiLy4uLy4uLy4uLy4uLylcIlxuK1xuK3NvdXJjZSBcIiR7U0NSSVBUX0RJUn1cIi8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4rXG4rcmVhZG9ubHkgU1NIX0dVRVNUX1BPUlQ9XCIke1NTSF9HVUVTVF9QT1JUOi0yMn1cIlxuK3JlYWRvbmx5IFdBSVRfUEVSSU9EPTNcbityZWFkb25seSBXQUlUX1BFUklPRF9NQVg9ODBcbityZWFkb25seSBXQUlUX1RPVEFMPSQoKFdBSVRfUEVSSU9EICogV0FJVF9QRVJJT0RfTUFYKSlcbityZWFkb25seSBRRU1VX1BJREZJTEU9XCIkKG1rdGVtcCAvdG1wL3FlbXVfbWVtY2dfdm10ZXN0X1hYWFgucGlkKVwiXG4rcmVhZG9ubHkgUUVNVV9PUFRTPVwiIC0tcGlkZmlsZSAke1FFTVVfUElERklMRX0gXCJcbitcbitCVUlMRD0wXG4rUUVNVT1cInFlbXUtc3lzdGVtLSQodW5hbWUgLW0pXCJcbitWRVJCT1NFPTBcbitTSEVMTF9NT0RFPTBcbitHVUVTVF9UUkVFPVwiJHtHVUVTVF9UUkVFOi0kS0VSTkVMX0NIRUNLT1VUfVwiXG4rXG4rdXNhZ2UoKSB7XG4rXHRjYXQgXHUwMDNjXHUwMDNjRU9GXG4rJDAgW09QVElPTlNdXG4rICAgIC1iICAgICAgICBCdWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSBiZWZvcmUgYm9vdGluZ1xuKyAgICAtcSBcdTAwM2NxZW11XHUwMDNlIFFFTVUgYmluYXJ5L3BhdGggKGRlZmF1bHQ6ICRRRU1VKVxuKyAgICAtcyAgICAgICAgU3RhcnQgaW50ZXJhY3RpdmUgc2hlbGwgaW4gVk1cbisgICAgLXYgICAgICAgIFZlcmJvc2Ugb3V0cHV0ICh2bmcgYm9vdCBsb2dzIG9uIHN0ZG91dClcbitFT0ZcbitcdGV4aXQgMVxuK31cbitcbitkaWUoKSB7XG4rXHRlY2hvIFwiJCpcIiBcdTAwM2VcdTAwMjYyXG4rXHRleGl0IFwiJHtLU0ZUX0ZBSUx9XCJcbit9XG4rXG4rY2xlYW51cCgpIHtcbitcdGlmIFtbIC1zIFwiJFFFTVVfUElERklMRVwiIF1dOyB0aGVuXG4rXHRcdHBraWxsIC1TSUdURVJNIC1GIFwiJFFFTVVfUElERklMRVwiIFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCB0cnVlXG4rXHRmaVxuK1xuK1x0aWYgW1sgLWUgXCIkUUVNVV9QSURGSUxFXCIgXV07IHRoZW5cbitcdFx0cm0gLWYgXCIkUUVNVV9QSURGSUxFXCJcbitcdGZpXG4rfVxuK1xuK3ZtX3NzaCgpIHtcbitcdHN0ZGJ1ZiAtb0wgc3NoIC1xIFxcXG4rXHRcdC1GIFwiJEhPTUUvLmNhY2hlL3ZpcnRtZS1uZy8uc3NoL3ZpcnRtZS1uZy1zc2guY29uZlwiIFxcXG4rXHRcdC1sIHJvb3QgXCJ2aXJ0bWUtbmclJFNTSF9HVUVTVF9QT1JUXCIgXFxcbitcdFx0XCIkQFwiXG4rfVxuK1xuK2NoZWNrX2RlcHMoKSB7XG4rXHRmb3IgZGVwIGluIHZuZyBcIiRRRU1VXCIgYnVzeWJveCBwa2lsbCBzc2g7IGRvXG4rXHRcdGlmICEgY29tbWFuZCAtdiBcIiRkZXBcIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0XHRlY2hvIFwic2tpcDogZGVwZW5kZW5jeSAkZGVwIG5vdCBmb3VuZFwiXG4rXHRcdFx0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK1x0XHRmaVxuK1x0ZG9uZVxuK31cbitcbitoYW5kbGVfYnVpbGQoKSB7XG4rXHRpZiBbWyAhIFwiJEJVSUxEXCIgLWVxIDEgXV07IHRoZW5cbitcdFx0cmV0dXJuXG4rXHRmaVxuK1xuK1x0aWYgW1sgISAtZCBcIiRLRVJORUxfQ0hFQ0tPVVRcIiBdXTsgdGhlblxuK1x0XHRlY2hvIFwiLWIgcmVxdWlyZXMgJDAgdG8gYmUgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCAxXG4rXHRmaVxuK1xuK1x0cHVzaGQgXCIkS0VSTkVMX0NIRUNLT1VUXCIgXHUwMDI2XHUwMDNlL2Rldi9udWxsXG4rXG4rXHRpZiAhIHZuZyAtLWtjb25maWcgLS1jb25maWcgXCIkU0NSSVBUX0RJUlwiL2NvbmZpZzsgdGhlblxuK1x0XHRkaWUgXCJmYWlsZWQgdG8gZ2VuZXJhdGUgLmNvbmZpZyBmb3Iga2VybmVsIHNvdXJjZSB0cmVlICgkS0VSTkVMX0NIRUNLT1VUKVwiXG4rXHRmaVxuK1xuK1x0aWYgISBtYWtlIC1qXCIkKG5wcm9jKVwiOyB0aGVuXG4rXHRcdGRpZSBcImZhaWxlZCB0byBidWlsZCBrZXJuZWwgZnJvbSBzb3VyY2UgdHJlZSAoJEtFUk5FTF9DSEVDS09VVClcIlxuK1x0ZmlcbitcbitcdHBvcGQgXHUwMDI2XHUwMDNlL2Rldi9udWxsXG4rfVxuK1xuK3ZtX3N0YXJ0KCkge1xuK1x0bG9jYWwgbG9nZmlsZT0vZGV2L251bGxcbitcdGxvY2FsIHZlcmJvc2Vfb3B0PVwiXCJcbitcdGxvY2FsIGtlcm5lbF9vcHQ9XCJcIlxuK1xuK1x0aWYgW1sgXCIkVkVSQk9TRVwiIC1lcSAxIF1dOyB0aGVuXG4rXHRcdHZlcmJvc2Vfb3B0PVwiLS12ZXJib3NlXCJcbitcdFx0bG9nZmlsZT0vZGV2L3N0ZG91dFxuK1x0ZmlcbitcbitcdGlmIFtbIFwiJEJVSUxEXCIgLWVxIDEgXV07IHRoZW5cbitcdFx0a2VybmVsX29wdD1cIiR7S0VSTkVMX0NIRUNLT1VUfVwiXG4rXHRmaVxuK1xuK1x0dm5nIFxcXG4rXHRcdC0tcnVuIFxcXG4rXHRcdCR7a2VybmVsX29wdH0gXFxcbitcdFx0JHt2ZXJib3NlX29wdH0gXFxcbitcdFx0LS1xZW11LW9wdHM9XCIkUUVNVV9PUFRTXCIgXFxcbitcdFx0LS1xZW11PVwiJChjb21tYW5kIC12IFwiJFFFTVVcIilcIiBcXFxuK1x0XHQtLXVzZXIgcm9vdCBcXFxuK1x0XHQtLXNzaCBcIiRTU0hfR1VFU1RfUE9SVFwiIFxcXG4rXHRcdC0tbWVtb3J5IDNHIFxcXG4rXHRcdC0tYXBwZW5kIFwiY21hPTY0TSBodWdldGxiX2NtYT0xRyBodWdldGxiX2NtYV9vbmx5PTFcIiBcXFxuK1x0XHQtLXJ3IFx1MDAyNlx1MDAzZVwiJGxvZ2ZpbGVcIiBcdTAwMjZcbitcbitcdGxvY2FsIHZuZ19waWQ9JCFcbitcdGxvY2FsIGVsYXBzZWQ9MFxuK1xuK1x0d2hpbGUgW1sgISAtcyBcIiRRRU1VX1BJREZJTEVcIiBdXTsgZG9cbitcdFx0a2lsbCAtMCBcIiR2bmdfcGlkXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBcXFxuK1x0XHRcdGRpZSBcInZuZyBleGl0ZWQgZWFybHk7IGZhaWxlZCB0byBib290IFZNXCJcbitcdFx0W1sgXCIkZWxhcHNlZFwiIC1nZSBcIiRXQUlUX1RPVEFMXCIgXV0gXHUwMDI2XHUwMDI2IFxcXG4rXHRcdFx0ZGllIFwidGltZWQgb3V0IHdhaXRpbmcgZm9yIFZNIGJvb3RcIlxuK1x0XHRzbGVlcCAxXG4rXHRcdGVsYXBzZWQ9JCgoZWxhcHNlZCArIDEpKVxuK1x0ZG9uZVxuK31cbitcbit2bV93YWl0X2Zvcl9zc2goKSB7XG4rXHRsb2NhbCBpPTBcbitcdHdoaWxlIHRydWU7IGRvXG4rXHRcdHZtX3NzaCAtLSB0cnVlIFx1MDAyNlx1MDAyNiBicmVha1xuK1x0XHRpPSQoKGkgKyAxKSlcbitcdFx0W1sgXCIke2l9XCIgLWd0IFwiJFdBSVRfUEVSSU9EX01BWFwiIF1dIFx1MDAyNlx1MDAyNiBcXFxuK1x0XHRcdGRpZSBcInRpbWVkIG91dCB3YWl0aW5nIGZvciBndWVzdCBzc2hcIlxuK1x0XHRzbGVlcCBcIiRXQUlUX1BFUklPRFwiXG4rXHRkb25lXG4rfVxuK1xuK2NoZWNrX2d1ZXN0X3JlcXVpcmVtZW50cygpIHtcbitcdHZtX3NzaCAtLSBcImdyZXAgLXEgbWVtb3J5IC9zeXMvZnMvY2dyb3VwL2Nncm91cC5jb250cm9sbGVyc1wiIFxcXG4rXHRcdHx8IGRpZSBcIm1lbW9yeSBjb250cm9sbGVyIG5vdCBhdmFpbGFibGUgKENPTkZJR19NRU1DRz8pXCJcbitcdHZtX3NzaCAtLSBcIltbIC1lIC9kZXYvZG1hX2hlYXAvZGVmYXVsdF9jbWFfcmVnaW9uIF1dXCIgXFxcbitcdFx0fHwgZGllIFwiQ01BIGhlYXAgbm90IGF2YWlsYWJsZSAoQ09ORklHX0RNQUJVRl9IRUFQU19DTUE/IGNtYT0gY21kbGluZT8pXCJcbit9XG4rXG4rc2V0dXBfZ3Vlc3RfY21hX2FjY291bnRpbmcoKSB7XG4rXHR2bV9zc2ggLS0gXCJtb3VudCAtbyByZW1vdW50LG1lbW9yeV9jbWFfYWNjb3VudGluZyAvc3lzL2ZzL2Nncm91cFwiIFxcXG4rXHRcdHx8IGRpZSBcImZhaWxlZCB0byBlbmFibGUgbWVtb3J5X2NtYV9hY2NvdW50aW5nXCJcbitcdHZtX3NzaCAtLSBcImVjaG8gK21lbW9yeSBcdTAwM2UgL3N5cy9mcy9jZ3JvdXAvY2dyb3VwLnN1YnRyZWVfY29udHJvbFwiIFxcXG4rXHRcdHx8IGRpZSBcImZhaWxlZCB0byBlbmFibGUgbWVtb3J5IGNvbnRyb2xsZXJcIlxuK31cbitcbitydW5fdGVzdCgpIHtcbitcdHZtX3NzaCAtLSBcImNkICckR1VFU1RfVFJFRScgXHUwMDI2XHUwMDI2IG1ha2UgLUMgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMgVEFSR0VUUz1jZ3JvdXBcIlxuK1x0dm1fc3NoIC0tIFwiY2QgJyRHVUVTVF9UUkVFJyBcdTAwMjZcdTAwMjYgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cyBUQVJHRVRTPWNncm91cCBydW5fdGVzdHNcIlxuK31cbitcbit3aGlsZSBnZXRvcHRzIFwiOmh2cTpzYlwiIG9wdDsgZG9cbitcdGNhc2UgXCIkb3B0XCIgaW5cbitcdHYpIFZFUkJPU0U9MSA7O1xuK1x0cSkgUUVNVT1cIiR7T1BUQVJHfVwiIDs7XG4rXHRiKSBCVUlMRD0xIDs7XG4rXHRzKSBTSEVMTF9NT0RFPTEgOztcbitcdGh8KikgdXNhZ2UgOztcbitcdGVzYWNcbitkb25lXG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbitjaGVja19kZXBzXG4raGFuZGxlX2J1aWxkXG4rZWNobyBcIkJvb3RpbmcgdmlydG1lLW5nIFZNLi4uXCJcbit2bV9zdGFydFxuK3ZtX3dhaXRfZm9yX3NzaFxuK2VjaG8gXCJWTSBpcyByZWFjaGFibGUgdmlhIFNTSC5cIlxuK1xuK2lmIFtbIFwiJFNIRUxMX01PREVcIiAtZXEgMSBdXTsgdGhlblxuK1x0ZWNobyBcIlN0YXJ0aW5nIGludGVyYWN0aXZlIHNoZWxsIGluIFZNLiBFeGl0IHRvIHN0b3AgVk0uXCJcbitcdHZtX3NzaCAtdCAtLSBcImNkICckR1VFU1RfVFJFRScgXHUwMDI2XHUwMDI2IGV4ZWMgYmFzaCAtLW5vcHJvZmlsZSAtLW5vcmNcIlxuK1x0ZXhpdCBcIiRLU0ZUX1BBU1NcIlxuK2ZpXG4rXG4rY2hlY2tfZ3Vlc3RfcmVxdWlyZW1lbnRzXG4rc2V0dXBfZ3Vlc3RfY21hX2FjY291bnRpbmdcbitcbitlY2hvIFwiUnVubmluZyBjZ3JvdXAgc2VsZnRlc3RzIGluIFZNLi4uXCJcbitydW5fdGVzdFxuK2VjaG8gXCJQQVNTOiBjZ3JvdXAgc2VsZnRlc3RzIGNvbXBsZXRlZFwiXG4rZXhpdCBcIiRLU0ZUX1BBU1NcIlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTk6MTM6MjAuMzg3MzM5MDA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMDY0ODMzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IG1lbW9yeV9jbWFfYWNjb3VudGluZyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgZ29vZCBsb29rIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjaW5nIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIGZvciBjZ3JvdXAgdjIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGEgZnVsbCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3Qgd2FycmFudGVkIGhlcmUsIGJ1dCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyB0byBiZSBjZXJ0YWluLlxuXG5UaGUgY29yZSBpZGVhIGlzIHRvIGFjY291bnQgZm9yIENNQSBtZW1vcnkgdXNhZ2Ugd2l0aGluIGNncm91cHMsIHdoaWNoIGVudGFpbHMgYWRkaW5nIHNvbWUgbmV3IGNvdW50ZXJzIGFuZCBleHBvc2luZyB0aGVtIHZpYSBjZ3JvdXBmcy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIGFuZCBhbnkgZGF0YSByYWNlcy5cblxuSSBzdGFydGVkIGJ5IGV4YW1pbmluZyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgbmV3IGRhdGEgc3RydWN0dXJlcy4gIGBtZW1jZy1cdTAwM2VjbWFfY291bnRlcnNgIGFuZCBgY21hX2RmbF9maWxlc2AgYXJlIGJvdGggYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYC4gVGhpcyBpbW1lZGlhdGVseSBhbGxldmlhdGVzIHRoZSBiaWdnZXN0IGNvbmNlcm4uIGBrY2FsbG9jYCBwcm92aWRlcyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSwgcmVtb3ZpbmcgdGhlIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgdGhlIHN0YXJ0LlxuXG5OZXh0LCBJIHNjcnV0aW5pemVkIHRoZSBjZ3JvdXBmcyBleHBvc3VyZSwgc3BlY2lmaWNhbGx5IHRoZSBjcmVhdGlvbiBvZiB0aG9zZSBgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLmN1cnJlbnRgIGFuZCBgbWVtb3J5LmNtYS5cdTAwM2NhcmVhXHUwMDNlLm1heGAgZmlsZXMuIFRoZSBjb2RlIGxldmVyYWdlcyBgc2VxX3ByaW50ZmAgYW5kIGBzZXFfcHV0c19tZW1jZ190dW5hYmxlYCwgd2hpY2ggYXJlIHVzZWQgdG8gZm9ybWF0IGludGVnZXIgdmFsdWVzLiBUaGlzIGlzIGdvb2QgYmVjYXVzZSB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHJhdyBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhhdCB2YXN0bHkgcmVkdWNlcyB0aGUgY2hhbmNlcyBvZiBpbmZvcm1hdGlvbiBsZWFrYWdlIGR1ZSB0byBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuXG5JIHRoZW4gbG9va2VkIGF0IHRoZSBDTUEgY2hhcmdlIGFuZCB1bmNoYXJnZSBwYXRocyBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYG1tL2NtYS5jYCwgc3BlY2lmaWNhbGx5IGBtZW1fY2dyb3VwX2NoYXJnZV9jbWFgIGFuZCBgbWVtX2Nncm91cF91bmNoYXJnZV9jbWFgLiBJIGNoZWNrZWQgZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiAgQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiBtZW1vcnkgY2hhcmdpbmcgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYW5kIHRoZSBsb2dpYyBpcyBzdHJhaWdodGZvcndhcmQuIE5vIGZ1bmt5IG1lbW9yeSBtYW5pcHVsYXRpb24gb3Igc3RydWN0dXJlIGp1Z2dsaW5nIGhlcmUgdGhhdCB3b3VsZCBtYWtlIG1lIG5lcnZvdXMuICBUaGUgY2hhcmdlL3VuY2hhcmdlIGxvZ2ljIGxvb2tzIHNvbGlkOyBgdHJ5X2NoYXJnZV9tZW1jZ2AgaXMgY2FsbGVkIGFuZCBhbnkgZXJyb3JzIGFyZSBkZWFsdCB3aXRoLlxuXG5BIGtleSBwYXJ0IG9mIENNQSB1bmNoYXJnZSBpcyB0aGUgdXNhZ2Ugb2YgYGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgPSAwO2AuIEkgaGF2ZSB0byBkb3VibGUgY2hlY2sgdGhhdCB3ZSBkZWFsIGNvcnJlY3RseSB3aXRoIHBvc3NpYmxlIHJhY2VzLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIGByY3VfcmVhZF9sb2NrKClgIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gaXNzdWVzLlxuXG5BZnRlciBhbGwgb2YgdGhlIGNoZWNrcywgSSBmZWVsIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtcyBvciBkYXRhIHJhY2VzIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoZSBtYWluIHJpc2tzIGhlcmUgd291bGQgYmUgdGhpbmdzIGxpa2UgYSBtZW1vcnkgbGVhayAocGVyaGFwcyBpbiB0aGUgQ01BIGFsbG9jYXRpb24gb3IgZnJlZWluZyBsb2dpYyksIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2hlbiBpbmRleGluZyBgY21hX2NvdW50ZXJzYCBvciBhbiBgb2JqX2Nncm91cGAgd2hpY2ggS0FTQU4gd291bGQgZGV0ZWN0LlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgbWVtb3J5IGFjY291bnRpbmcgdmlhIGBrY2FsbG9jYCB6ZXJvZWQgbWVtb3J5IGFuZCBjbGVhciBkYXRhIGZsb3dzLiAgVGhlIGNncm91cGZzIGV4cG9zdXJlIGlzIGNsZWFuLCBhbmQgdGhlIENNQSBjaGFyZ2UvdW5jaGFyZ2UgbG9naWMgaXMgc3RyYWlnaHRmb3J3YXJkLiAgS0FTQU4gYW5kIG90aGVyIHRvb2xzIHdvdWxkIGJlIHN1ZmZpY2llbnQuICBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzbid0IHNvbWV0aGluZyBJIHNlZSBhcyBuZWNlc3NhcnkgaW4gdGhpcyBjYXNlLiBMZXQncyBtb3ZlIHRoaXMgdG8gdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MzQsIk91dHB1dFRva2VucyI6MzMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE5OjEzOjQzLjQ1MjE3NDc0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHRvIGFjY291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAncyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgaW52b2x2ZTpcXG4xLiBBZGRpbmcgYGNtYV9jb3VudGVyc2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXFxuMi4gQWRkaW5nIGBjbWFfZGZsX2ZpbGVzYCBhcnJheSBmb3IgY2dyb3VwZnMsIHdoaWNoIGlzIGFsc28gYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXFxuMy4gRXhwb3NpbmcgQ01BIHVzYWdlIGFuZCBsaW1pdHMgdmlhIGNncm91cGZzIGZpbGVzIChgbWVtb3J5LmNtYS5cXHUwMDNjYXJlYVxcdTAwM2UuY3VycmVudGAgYW5kIGBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5tYXhgKS4gVGhlc2UgZmlsZXMgdXNlIGBzZXFfcHJpbnRmYCBhbmQgYHNlcV9wdXRzX21lbWNnX3R1bmFibGVgIHRvIGZvcm1hdCBpbnRlZ2VyIHZhbHVlcywgbWVhbmluZyBubyByYXcga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuNC4gTW9kaWZ5aW5nIENNQSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlIHBhdGhzIHRvIGNoYXJnZSBhbmQgdW5jaGFyZ2UgbWVtb3J5IGNncm91cHMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGVzZSBwYXRocyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcGFzc2VkIGFyb3VuZC5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBjbWFfY291bnRlcnNgLCB1c2UtYWZ0ZXItZnJlZSBvZiBgbWVtY2dgLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIG5ldyBjZ3JvdXAgdjIgbW91bnQgb3B0aW9uIGBtZW1vcnlfY21hX2FjY291bnRpbmdgIHRvIGFjY291bnQgQ01BIG1lbW9yeSB1c2FnZSB0b3dhcmRzIHRoZSBjZ3JvdXAncyBvdmVyYWxsIG1lbW9yeSB1c2FnZS4gVGhlIGNoYW5nZXMgaW52b2x2ZTpcXG4xLiBBZGRpbmcgYGNtYV9jb3VudGVyc2AgdG8gYHN0cnVjdCBtZW1fY2dyb3VwYCwgd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXFxuMi4gQWRkaW5nIGBjbWFfZGZsX2ZpbGVzYCBhcnJheSBmb3IgY2dyb3VwZnMsIHdoaWNoIGlzIGFsc28gYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCAoemVyby1pbml0aWFsaXplZCkuXFxuMy4gRXhwb3NpbmcgQ01BIHVzYWdlIGFuZCBsaW1pdHMgdmlhIGNncm91cGZzIGZpbGVzIChgbWVtb3J5LmNtYS5cXHUwMDNjYXJlYVxcdTAwM2UuY3VycmVudGAgYW5kIGBtZW1vcnkuY21hLlxcdTAwM2NhcmVhXFx1MDAzZS5tYXhgKS4gVGhlc2UgZmlsZXMgdXNlIGBzZXFfcHJpbnRmYCBhbmQgYHNlcV9wdXRzX21lbWNnX3R1bmFibGVgIHRvIGZvcm1hdCBpbnRlZ2VyIHZhbHVlcywgbWVhbmluZyBubyByYXcga2VybmVsIHN0cnVjdHVyZXMgb3IgcGFkZGluZyBieXRlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuNC4gTW9kaWZ5aW5nIENNQSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlIHBhdGhzIHRvIGNoYXJnZSBhbmQgdW5jaGFyZ2UgbWVtb3J5IGNncm91cHMuIEFsbCBsb2NhbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGVzZSBwYXRocyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcGFzc2VkIGFyb3VuZC5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGluIGBjbWFfY291bnRlcnNgLCB1c2UtYWZ0ZXItZnJlZSBvZiBgbWVtY2dgLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBtZW1vcnkgZGVidWdnZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gY29udHJvbCBmbG93IG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[1] Phase: Succeeded StartedAt: 2026-08-21 19:13:55 +0000 UTC FinishedAt: 2026-08-21 19:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 19:13:55 +0000 UTC FinishedAt: 2026-08-21 19:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2] Phase: Succeeded StartedAt: 2026-08-21 19:13:55 +0000 UTC FinishedAt: 2026-08-21 22:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 19:13:55 +0000 UTC FinishedAt: 2026-08-21 22:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 19:13:55 +0000 UTC FinishedAt: 2026-08-21 19:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 19:13:55 +0000 UTC FinishedAt: 2026-08-21 19:13:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-convert-artifact-360604276/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 19:14:05 +0000 UTC FinishedAt: 2026-08-21 19:31:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 19:14:05 +0000 UTC FinishedAt: 2026-08-21 19:31:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*16d12d40-4a1f-4d3b-9e7f-d6d055c87332,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-convert-artifact-360604276/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "34b8f2d4-524a-469b-af3e-71b995e3f88b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-254297970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 19:14:05 +0000 UTC FinishedAt: 2026-08-21 19:30:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*16d12d40-4a1f-4d3b-9e7f-d6d055c87332,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-convert-artifact-360604276/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "34b8f2d4-524a-469b-af3e-71b995e3f88b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-254297970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 19:31:02 +0000 UTC FinishedAt: 2026-08-21 19:31:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 19:31:02 +0000 UTC FinishedAt: 2026-08-21 19:31:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 19:31:02 +0000 UTC FinishedAt: 2026-08-21 19:31:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 19:31:02 +0000 UTC FinishedAt: 2026-08-21 19:31:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-convert-artifact-3705164595/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 19:31:12 +0000 UTC FinishedAt: 2026-08-21 19:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 19:31:12 +0000 UTC FinishedAt: 2026-08-21 19:33:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34b8f2d4-524a-469b-af3e-71b995e3f88b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-254297970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 19:33:18 +0000 UTC FinishedAt: 2026-08-21 19:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 19:33:18 +0000 UTC FinishedAt: 2026-08-21 19:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 19:33:18 +0000 UTC FinishedAt: 2026-08-21 19:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 19:33:18 +0000 UTC FinishedAt: 2026-08-21 19:50:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*16d12d40-4a1f-4d3b-9e7f-d6d055c87332,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-convert-artifact-3705164595/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "18c3373b-779e-4a28-b3fe-35ffd2fb4723", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-2360957927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 19:33:18 +0000 UTC FinishedAt: 2026-08-21 19:49:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*16d12d40-4a1f-4d3b-9e7f-d6d055c87332,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-convert-artifact-3705164595/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "18c3373b-779e-4a28-b3fe-35ffd2fb4723", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-2360957927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 19:50:02 +0000 UTC FinishedAt: 2026-08-21 19:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 19:50:02 +0000 UTC FinishedAt: 2026-08-21 19:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 19:50:02 +0000 UTC FinishedAt: 2026-08-21 19:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 19:50:02 +0000 UTC FinishedAt: 2026-08-21 19:51:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18c3373b-779e-4a28-b3fe-35ffd2fb4723,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-2360957927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 19:51:54 +0000 UTC FinishedAt: 2026-08-21 22:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 19:51:54 +0000 UTC FinishedAt: 2026-08-21 22:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*34b8f2d4-524a-469b-af3e-71b995e3f88b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18c3373b-779e-4a28-b3fe-35ffd2fb4723,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-254297970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-2360957927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 19:51:54 +0000 UTC FinishedAt: 2026-08-21 19:52:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 19:51:54 +0000 UTC FinishedAt: 2026-08-21 19:51:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-convert-artifact-2467352364/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 19:51:54 +0000 UTC FinishedAt: 2026-08-21 19:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 19:51:54 +0000 UTC FinishedAt: 2026-08-21 19:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 19:51:54 +0000 UTC FinishedAt: 2026-08-21 19:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 19:52:04 +0000 UTC FinishedAt: 2026-08-21 22:57:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp8msq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_charge_cma","mem_cgroup_uncharge_cma"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"98f21c54f99519329c18e2625b0ea6db14524d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMCG","DMA_CMA","DMABUF_HEAPS","DMABUF_HEAPS_CMA","HUGETLBFS"],"series_id":"67a74c8b-1377-4278-8653-7f4bfbfa1f94","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 19:52:04 +0000 UTC FinishedAt: 2026-08-21 22:57:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34b8f2d4-524a-469b-af3e-71b995e3f88b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18c3373b-779e-4a28-b3fe-35ffd2fb4723,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-254297970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-build-action-2360957927/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp8msq/series-workflowp8msq-convert-artifact-2467352364/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}